Merge remote-tracking branch 'origin/staging' into develop

This commit is contained in:
Alejandro Alonso 2023-02-02 18:06:59 +01:00
commit 2ea81c0114
49 changed files with 788 additions and 519 deletions

View file

@ -29,7 +29,35 @@
.custom-input {
width: 100%;
height: 115px;
min-height: 116px;
max-height: 176px;
overflow-y: hidden;
input {
&.no-padding {
padding-top: 12px;
}
min-height: 40px;
}
.selected-items {
gap: 8px;
padding: 8px;
max-height: 132px;
overflow-y: scroll;
.selected-item {
.around {
height: 24px;
display: flex;
align-items: center;
justify-content: flex-start;
width: fit-content;
.icon {
display: flex;
align-items: center;
justify-content: center;
}
}
}
}
}
.custom-select {

View file

@ -184,6 +184,7 @@
.modal-footer .action-buttons {
justify-content: space-around;
gap: 15px;
}
.fields-container {
@ -1541,8 +1542,52 @@
.onboarding-team-members {
.team-left {
padding: 42px 64px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: auto;
form {
margin-top: 32px;
margin-top: 5px;
.invite-row {
.custom-input {
width: 100%;
min-height: 80px;
height: fit-content;
max-height: 176px;
overflow-y: hidden;
input {
&.no-padding {
padding-top: 12px;
}
min-height: 40px;
}
.selected-items {
gap: 7px;
padding: 7px;
max-height: 132px;
overflow-y: scroll;
.selected-item {
.around {
height: 24px;
display: flex;
align-items: center;
justify-content: flex-start;
width: fit-content;
.icon {
display: flex;
align-items: center;
justify-content: center;
}
}
}
}
}
}
.buttons {
margin-top: 12px;
}
}
}
}

View file

@ -17,7 +17,7 @@ $height-palette-max: 80px;
#workspace {
width: 100vw;
height: 100vh;
height: 100%;
user-select: none;
background-color: $color-canvas;
display: grid;
@ -37,6 +37,8 @@ $height-palette-max: 80px;
.left-toolbar {
grid-area: toolbar;
width: $width-left-toolbar;
overflow-y: scroll;
overflow-x: hidden;
}
.settings-bar.settings-bar-left {

View file

@ -7,6 +7,7 @@
(ns app.main.data.dashboard
(:require
[app.common.data :as d]
[app.common.pages :as cp]
[app.common.spec :as us]
[app.common.uuid :as uuid]
[app.config :as cf]
@ -664,10 +665,12 @@
(ptk/reify ::create-project
ptk/WatchEvent
(watch [_ state _]
(let [name (name (gensym (str (tr "dashboard.new-project-prefix") " ")))
team-id (:current-team-id state)
params {:name name
:team-id team-id}
(let [projects (get state :dashboard-projects)
unames (cp/retrieve-used-names projects)
name (cp/generate-unique-name unames (str (tr "dashboard.new-project-prefix") " 1"))
team-id (:current-team-id state)
params {:name name
:team-id team-id}
{:keys [on-success on-error]
:or {on-success identity
on-error rx/throw}} (meta params)]
@ -875,7 +878,9 @@
:or {on-success identity
on-error rx/throw}} (meta params)
name (name (gensym (str (tr "dashboard.new-file-prefix") " ")))
files (get state :dashboard-files)
unames (cp/retrieve-used-names files)
name (cp/generate-unique-name unames (str (tr "dashboard.new-file-prefix") " 1"))
features (cond-> #{}
(features/active-feature? state :components-v2)
(conj "components/v2"))
@ -1067,8 +1072,12 @@
pparams (:path-params route)
in-project? (contains? pparams :project-id)
name (if in-project?
(name (gensym (str (tr "dashboard.new-file-prefix") " ")))
(name (gensym (str (tr "dashboard.new-project-prefix") " "))))
(let [files (get state :dashboard-files)
unames (cp/retrieve-used-names files)]
(cp/generate-unique-name unames (str (tr "dashboard.new-file-prefix") " 1")))
(let [projects (get state :dashboard-projects)
unames (cp/retrieve-used-names projects)]
(cp/generate-unique-name unames (str (tr "dashboard.new-project-prefix") " 1"))))
params (if in-project?
{:project-id (:project-id pparams)
:name name}

View file

@ -15,6 +15,7 @@
[app.common.geom.proportions :as gpp]
[app.common.geom.shapes :as gsh]
[app.common.logging :as log]
[app.common.pages :as cp]
[app.common.pages.changes-builder :as pcb]
[app.common.pages.helpers :as cph]
[app.common.spec :as us]
@ -408,8 +409,8 @@
ptk/WatchEvent
(watch [it state _]
(let [pages (get-in state [:workspace-data :pages-index])
unames (ctst/retrieve-used-names pages)
name (ctst/generate-unique-name unames "Page-1")
unames (cp/retrieve-used-names pages)
name (cp/generate-unique-name unames "Page 1")
changes (-> (pcb/empty-changes it)
(pcb/add-empty-page id name))]
@ -423,9 +424,9 @@
(watch [it state _]
(let [id (uuid/next)
pages (get-in state [:workspace-data :pages-index])
unames (ctst/retrieve-used-names pages)
unames (cp/retrieve-used-names pages)
page (get-in state [:workspace-data :pages-index page-id])
name (ctst/generate-unique-name unames (:name page))
name (cp/generate-unique-name unames (:name page))
no_thumbnails_objects (->> (:objects page)
(d/mapm (fn [_ val] (dissoc val :use-for-thumbnail?))))

View file

@ -8,6 +8,7 @@
(:require
[app.common.data :as d]
[app.common.geom.point :as gpt]
[app.common.pages :as cp]
[app.common.pages.changes-builder :as pcb]
[app.common.pages.helpers :as cph]
[app.common.spec :as us]
@ -33,7 +34,7 @@
flows (get-in page [:options :flows] [])
unames (into #{} (map :name flows))
name (ctst/generate-unique-name unames "Flow-1")
name (cp/generate-unique-name unames "Flow 1")
new-flow {:id (uuid/next)
:name name

View file

@ -73,7 +73,7 @@
(pcb/with-objects objects))]
(let [group-name (if (= 1 (count shapes))
(:name (first shapes))
"Component-1")]
"Component 1")]
(dwg/prepare-create-group it
objects
page-id

View file

@ -15,7 +15,6 @@
[app.common.pages.helpers :as cph]
[app.common.spec :as us]
[app.common.types.page :as ctp]
[app.common.types.shape-tree :as ctt]
[app.common.types.shape.interactions :as ctsi]
[app.common.uuid :as uuid]
[app.main.data.modal :as md]
@ -290,7 +289,7 @@
move to the desired position, and recalculate parents and frames as needed."
[all-objects page ids delta it]
(let [shapes (map (d/getf all-objects) ids)
unames (volatile! (ctt/retrieve-used-names (:objects page)))
unames (volatile! (cp/retrieve-used-names (:objects page)))
update-unames! (fn [new-name] (vswap! unames conj new-name))
all-ids (reduce #(into %1 (cons %2 (cph/get-children-ids all-objects %2))) (d/ordered-set) ids)
ids-map (into {} (map #(vector % (uuid/next))) all-ids)
@ -367,7 +366,7 @@
(let [update-flows (fn [flows]
(reduce
(fn [flows frame]
(let [name (ctt/generate-unique-name @unames "Flow-1")
(let [name (cp/generate-unique-name @unames "Flow 1")
_ (vswap! unames conj name)
new-flow {:id (uuid/next)
:name name

View file

@ -271,16 +271,89 @@
(ptk/data-event :layout/update ids)
(dwu/commit-undo-transaction undo-id))))))
(defn fix-child-sizing
[objects parent-changes shape]
(let [parent (-> (cph/get-parent objects (:id shape))
(d/deep-merge parent-changes))
auto-width? (ctl/auto-width? parent)
auto-height? (ctl/auto-height? parent)
col? (ctl/col? parent)
row? (ctl/row? parent)
all-children (->> parent :shapes (map (d/getf objects)))]
(cond-> shape
;; If the parent is hug width and the direction column
;; change to fixed when ALL children are fill
(and col? auto-width? (every? ctl/fill-width? all-children))
(assoc :layout-item-h-sizing :fix)
;; If the parent is hug height and the direction is column
;; change to fixed when ANY children is fill
(and col? auto-height? (ctl/fill-height? shape))
(assoc :layout-item-v-sizing :fix)
;; If the parent is hug width and the direction row
;; change to fixed when ANY children is fill
(and row? auto-width? (ctl/fill-width? shape))
(assoc :layout-item-h-sizing :fix)
;; If the parent is hug height and the direction row
;; change to fixed when ALL children are fill
(and row? auto-height? (every? ctl/fill-height? all-children))
(assoc :layout-item-v-sizing :fix))))
(defn fix-parent-sizing
[objects ids-set changes parent]
(let [auto-width? (ctl/auto-width? parent)
auto-height? (ctl/auto-height? parent)
col? (ctl/col? parent)
row? (ctl/row? parent)
all-children
(->> parent :shapes
(map (d/getf objects))
(map (fn [shape]
(if (contains? ids-set (:id shape))
(d/deep-merge shape changes)
shape))))]
(cond-> parent
;; Col layout and parent is hug-width if all children are fill-width
;; change parent to fixed
(and col? auto-width? (every? ctl/fill-width? all-children))
(assoc :layout-item-h-sizing :fix)
;; Col layout and parent is hug-height if any children is fill-height
;; change parent to fixed
(and col? auto-height? (some ctl/fill-height? all-children))
(assoc :layout-item-v-sizing :fix)
;; Row layout and parent is hug-width if any children is fill-width
;; change parent to fixed
(and row? auto-width? (some ctl/fill-width? all-children))
(assoc :layout-item-h-sizing :fix)
;; Row layout and parent is hug-height if all children are fill-height
;; change parent to fixed
(and row? auto-height? (every? ctl/fill-height? all-children))
(assoc :layout-item-v-sizing :fix))))
(defn update-layout-child
[ids changes]
(ptk/reify ::update-layout-child
ptk/WatchEvent
(watch [_ state _]
(let [objects (wsh/lookup-page-objects state)
children-ids (->> ids (mapcat #(cph/get-children-ids objects %)))
parent-ids (->> ids (map #(cph/get-parent-id objects %)))
layout-ids (->> ids (filter (comp ctl/layout? (d/getf objects))))
undo-id (js/Symbol)]
(rx/of (dwu/start-undo-transaction undo-id)
(dwc/update-shapes ids #(d/deep-merge (or % {}) changes))
(ptk/data-event :layout/update (d/concat-vec layout-ids parent-ids))
(dwc/update-shapes children-ids (partial fix-child-sizing objects changes))
(dwc/update-shapes parent-ids (partial fix-parent-sizing objects (set ids) changes))
(ptk/data-event :layout/update ids)
(dwu/commit-undo-transaction undo-id))))))

View file

@ -12,6 +12,7 @@
[app.common.geom.point :as gpt]
[app.common.geom.shapes :as gsh]
[app.common.math :as mth]
[app.common.pages :as cp]
[app.common.pages.changes-builder :as pcb]
[app.common.pages.helpers :as cph]
[app.common.spec :as us :refer [max-safe-int min-safe-int]]
@ -493,7 +494,7 @@
(- y vb-y (/ vb-height 2))
y))
unames (ctst/retrieve-used-names objects)
unames (cp/retrieve-used-names objects)
svg-name (str/replace (:name svg-data) ".svg" "")

View file

@ -77,6 +77,11 @@
;; Delete the thumbnail first so if we interrupt we can regenerate after
(->> (rp/cmd! :upsert-file-object-thumbnail params)
(rx/catch #(rx/empty)))
;; Remove the thumbnail temporary. If the user changes pages the thumbnail is regenerated
(rx/of #(update % :workspace-thumbnails assoc object-id nil))
;; Send the update to the back-end
(->> blob-result
(rx/merge-map
(fn [blob]

View file

@ -484,6 +484,15 @@
(some (partial ctl/layout-immediate-child? objects))))
workspace-page-objects))
(defn all-layout-child?
[ids]
(l/derived
(fn [objects]
(->> ids
(map (d/getf objects))
(every? (partial ctl/layout-immediate-child? objects))))
workspace-page-objects))
(defn get-flex-child-viewer
[ids page-id]
(l/derived

View file

@ -130,7 +130,7 @@
(cond
(and touched? (:message error))
[:span.error {:id (dm/str "error-" input-name)
:data-test (clojure.string/join [data-test "-error"]) }(tr (:message error))]
:data-test (clojure.string/join [data-test "-error"])} (tr (:message error))]
(string? hint)
[:span.hint hint])]]))
@ -328,7 +328,13 @@
remove-item!
(mf/use-fn
(fn [item]
(swap! items #(into [] (remove (fn [x] (= x item))) %))))]
(swap! items #(into [] (remove (fn [x] (= x item))) %))))
manage-key-down
(mf/use-fn
(fn [item event]
(when (kbd/enter? event)
(remove-item! item))))]
(mf/with-effect [result @value]
(let [val (cond-> @value trim str/trim)
@ -337,14 +343,6 @@
(update-form! values)))
[:div {:class klass}
(when-let [items (seq @items)]
[:div.selected-items
(for [item items]
[:div.selected-item {:key (:text item)}
[:span.around {:class (when-not (:valid item) "invalid")}
[:span.text (:text item)]
[:span.icon {:on-click #(remove-item! item)} i/cross]]])])
[:input {:id (name input-name)
:class in-klass
:type "text"
@ -355,4 +353,14 @@
:value @value
:on-change on-change
:placeholder (when empty? label)}]
[:label {:for (name input-name)} label]]))
[:label {:for (name input-name)} label]
(when-let [items (seq @items)]
[:div.selected-items
(for [item items]
[:div.selected-item {:key (:text item)
:tab-index "0"
:on-key-down (partial manage-key-down item)}
[:span.around {:class (when-not (:valid item) "invalid")}
[:span.text (:text item)]
[:span.icon {:on-click #(remove-item! item)} i/cross]]])])]))

View file

@ -82,7 +82,7 @@
(when (:is-admin permissions)
{:value "admin" :label (tr "labels.admin")})
;; Temporarily disabled viewer roles
;; https://tree.taiga.io/project/uxboxproject/issue/1083
;; https://tree.taiga.io/project/penpot/issue/1083
;; {:value "viewer" :label (tr "labels.viewer")}
]
(filterv identity)))
@ -209,7 +209,7 @@
[:li {:on-click set-admin} (tr "labels.admin")]
[:li {:on-click set-editor} (tr "labels.editor")]
;; Temporarily disabled viewer role
;; https://tree.taiga.io/project/uxboxproject/issue/1083
;; https://tree.taiga.io/project/penpot/issue/1083
;; [:li {:on-click set-viewer} (tr "labels.viewer")]
(when you-owner?
[:li {:on-click (partial set-owner member)} (tr "labels.owner")])]]]))

View file

@ -27,23 +27,21 @@
(defn- draw-thumbnail-canvas!
[canvas-node img-node]
(ts/raf
(fn []
(try
(when (and (some? canvas-node) (some? img-node))
(let [canvas-context (.getContext canvas-node "2d")
canvas-width (.-width canvas-node)
canvas-height (.-height canvas-node)]
(.clearRect canvas-context 0 0 canvas-width canvas-height)
(.drawImage canvas-context img-node 0 0 canvas-width canvas-height)
(try
(when (and (some? canvas-node) (some? img-node))
(let [canvas-context (.getContext canvas-node "2d")
canvas-width (.-width canvas-node)
canvas-height (.-height canvas-node)]
(.clearRect canvas-context 0 0 canvas-width canvas-height)
(.drawImage canvas-context img-node 0 0 canvas-width canvas-height)
;; Set a true on the next animation frame, we make sure the drawImage is completed
(ts/raf
#(dom/set-data! canvas-node "ready" "true"))
true))
(catch :default err
(.error js/console err)
false)))))
;; Set a true on the next animation frame, we make sure the drawImage is completed
(ts/raf
#(dom/set-data! canvas-node "ready" "true"))
true))
(catch :default err
(.error js/console err)
false)))
(defn- remove-image-loading
"Remove the changes related to change a url for its embed value. This is necessary
@ -78,8 +76,12 @@
(gsh/selection-rect (concat [shape] all-children))
(-> shape :points gsh/points->selrect))
fixed-width (mth/clamp width 250 2000)
fixed-height (/ (* height fixed-width) width)
[fixed-width fixed-height]
(if (> width height)
[(mth/clamp width 250 2000)
(/ (* height (mth/clamp width 250 2000)) width)]
[(/ (* width (mth/clamp height 250 2000)) height)
(mth/clamp height 250 2000)])
image-url (mf/use-state nil)
observer-ref (mf/use-var nil)
@ -91,6 +93,10 @@
thumbnail-data-ref (mf/use-memo (mf/deps page-id id) #(refs/thumbnail-frame-data page-id id))
thumbnail-data (mf/deref thumbnail-data-ref)
;; We only need the zoom level in Safari. For other browsers we don't want to activate this because
;; will render for every zoom change
zoom (when (cf/check-browser? :safari) (mf/deref refs/selected-zoom))
prev-thumbnail-data (hooks/use-previous thumbnail-data)
;; State to indicate to the parent that should render the frame
@ -108,7 +114,9 @@
(let [canvas-node (mf/ref-val frame-canvas-ref)
img-node (mf/ref-val frame-image-ref)]
(when (draw-thumbnail-canvas! canvas-node img-node)
(reset! image-url nil)
(when-not (cf/check-browser? :safari)
(reset! image-url nil))
(when @show-frame-thumbnail
(reset! show-frame-thumbnail false))
;; If we don't have the thumbnail data saved (normally the first load) we update the data
@ -266,12 +274,16 @@
{:key (dm/str "thumbnail-canvas-" (:id shape))
:ref frame-canvas-ref
:data-object-id (dm/str page-id (:id shape))
:width fixed-width
:height fixed-height
;; DEBUG
:style {:filter (when (and (not (cf/check-browser? :safari)) (debug? :thumbnails)) "invert(1)")
:width "100%"
:height "100%"}}]]
:width width
:height height
:style {;; Safari has a problem with the positioning of the canvas. All this is to fix Safari behavior
;; https://bugs.webkit.org/show_bug.cgi?id=23113
:display (when (cf/check-browser? :safari) "none")
:position "fixed"
:transform-origin "top left"
:transform (when (cf/check-browser? :safari) (dm/fmt "scale(%)" zoom))
;; DEBUG
:filter (when (debug? :thumbnails) "invert(1)")}}]]
;; Safari don't support filters so instead we add a rectangle around the thumbnail
(when (and (cf/check-browser? :safari) (debug? :thumbnails))
@ -285,10 +297,10 @@
(when (some? @image-url)
[:foreignObject {:x x
:y y
:width width
:height height}
:width fixed-width
:height fixed-height}
[:img {:ref frame-image-ref
:src @image-url
:width width
:height height
:width fixed-width
:height fixed-height
:on-load on-image-load}]])])]))

View file

@ -11,6 +11,7 @@
[app.common.geom.shapes :as gsh]
[app.common.pages.common :as cpc]
[app.common.text :as txt]
[app.common.types.shape.layout :as ctl]
[app.main.data.workspace.texts :as dwt]
[app.main.refs :as refs]
[app.main.ui.hooks :as hooks]
@ -26,7 +27,7 @@
[app.main.ui.workspace.sidebar.options.menus.shadow :refer [shadow-attrs shadow-menu]]
[app.main.ui.workspace.sidebar.options.menus.stroke :refer [stroke-attrs stroke-menu]]
[app.main.ui.workspace.sidebar.options.menus.text :as ot]
[rumext.v2 :as mf]))
[rumext.v2 :as mf]))
;; Define how to read each kind of attribute depending on the shape type:
;; - shape: read the attribute directly from the shape.
@ -298,6 +299,13 @@
has-text? (contains? all-types :text)
has-layout-container? (->> shapes (some ctl/layout?))
all-layout-child-ref (mf/use-memo (mf/deps ids) #(refs/all-layout-child? ids))
all-layout-child? (mf/deref all-layout-child-ref)
all-layout-container? (->> shapes (every? ctl/layout?))
[measure-ids measure-values] (get-attrs shapes objects :measure)
[layer-ids layer-values
@ -332,14 +340,15 @@
(when-not (empty? measure-ids)
[:& measures-menu {:type type :all-types all-types :ids measure-ids :values measure-values :shape shapes}])
[:& layout-container-menu {:type type :ids layout-container-ids :values layout-container-values :multiple true}]
(when has-layout-container?
[:& layout-container-menu {:type type :ids layout-container-ids :values layout-container-values :multiple true}])
(when is-layout-child?
(when (or is-layout-child? has-layout-container?)
[:& layout-item-menu
{:type type
:ids layout-item-ids
:is-layout-child? true
:is-layout-container? true
:is-layout-child? all-layout-child?
:is-layout-container? all-layout-container?
:values layout-item-values}])
(when-not (or (empty? constraint-ids) is-layout-child?)

View file

@ -162,14 +162,14 @@
on-drag-over (actions/on-drag-over)
on-drop (actions/on-drop file)
on-mouse-down (actions/on-mouse-down @hover selected edition drawing-tool text-editing? node-editing?
drawing-path? create-comment? space? panning workspace-read-only?)
drawing-path? create-comment? space? panning z? workspace-read-only?)
on-mouse-up (actions/on-mouse-up disable-paste)
on-pointer-down (actions/on-pointer-down)
on-pointer-enter (actions/on-pointer-enter in-viewport?)
on-pointer-leave (actions/on-pointer-leave in-viewport?)
on-pointer-move (actions/on-pointer-move move-stream)
on-pointer-up (actions/on-pointer-up)
on-move-selected (actions/on-move-selected hover hover-ids selected space? workspace-read-only?)
on-move-selected (actions/on-move-selected hover hover-ids selected space? z? workspace-read-only?)
on-menu-selected (actions/on-menu-selected hover hover-ids selected workspace-read-only?)
on-frame-enter (actions/on-frame-enter frame-hover)

View file

@ -34,70 +34,71 @@
(defn on-mouse-down
[{:keys [id blocked hidden type]} selected edition drawing-tool text-editing?
node-editing? drawing-path? create-comment? space? panning workspace-read-only?]
node-editing? drawing-path? create-comment? space? panning z? workspace-read-only?]
(mf/use-callback
(mf/deps id blocked hidden type selected edition drawing-tool text-editing?
node-editing? drawing-path? create-comment? @space?
node-editing? drawing-path? create-comment? @z? @space?
panning workspace-read-only?)
(fn [bevent]
(when (or (dom/class? (dom/get-target bevent) "viewport-controls")
(dom/class? (dom/get-target bevent) "viewport-selrect"))
(dom/stop-propagation bevent)
(let [event (.-nativeEvent bevent)
ctrl? (kbd/ctrl? event)
meta? (kbd/meta? event)
shift? (kbd/shift? event)
alt? (kbd/alt? event)
mod? (kbd/mod? event)
(when-not @z?
(let [event (.-nativeEvent bevent)
ctrl? (kbd/ctrl? event)
meta? (kbd/meta? event)
shift? (kbd/shift? event)
alt? (kbd/alt? event)
mod? (kbd/mod? event)
left-click? (and (not panning) (= 1 (.-which event)))
middle-click? (and (not panning) (= 2 (.-which event)))]
left-click? (and (not panning) (= 1 (.-which event)))
middle-click? (and (not panning) (= 2 (.-which event)))]
(cond
(or middle-click? (and left-click? @space?))
(do
(dom/prevent-default bevent)
(if mod?
(let [raw-pt (dom/get-client-position event)
pt (uwvv/point->viewport raw-pt)]
(st/emit! (dw/start-zooming pt)))
(st/emit! (dw/start-panning))))
(cond
(or middle-click? (and left-click? @space?))
(do
(dom/prevent-default bevent)
(if mod?
(let [raw-pt (dom/get-client-position event)
pt (uwvv/point->viewport raw-pt)]
(st/emit! (dw/start-zooming pt)))
(st/emit! (dw/start-panning))))
left-click?
(do
(st/emit! (ms/->MouseEvent :down ctrl? shift? alt? meta?))
left-click?
(do
(st/emit! (ms/->MouseEvent :down ctrl? shift? alt? meta?))
(when (and (not= edition id) text-editing?)
(st/emit! dw/clear-edition-mode))
(when (and (not= edition id) text-editing?)
(st/emit! dw/clear-edition-mode))
(when (and (not text-editing?)
(not blocked)
(not hidden)
(not create-comment?)
(not drawing-path?))
(cond
node-editing?
(when (and (not text-editing?)
(not blocked)
(not hidden)
(not create-comment?)
(not drawing-path?))
(cond
node-editing?
;; Handle path node area selection
(when-not workspace-read-only?
(st/emit! (dwdp/handle-area-selection shift?)))
(when-not workspace-read-only?
(st/emit! (dwdp/handle-area-selection shift?)))
drawing-tool
(when-not workspace-read-only?
(st/emit! (dd/start-drawing drawing-tool)))
drawing-tool
(when-not workspace-read-only?
(st/emit! (dd/start-drawing drawing-tool)))
(or (not id) mod?)
(st/emit! (dw/handle-area-selection shift? mod?))
(or (not id) mod?)
(st/emit! (dw/handle-area-selection shift? mod?))
(not drawing-tool)
(when-not workspace-read-only?
(st/emit! (dw/start-move-selected id shift?))))))))))))
(not drawing-tool)
(when-not workspace-read-only?
(st/emit! (dw/start-move-selected id shift?)))))))))))))
(defn on-move-selected
[hover hover-ids selected space? workspace-read-only?]
[hover hover-ids selected space? z? workspace-read-only?]
(mf/use-callback
(mf/deps @hover @hover-ids selected @space? workspace-read-only?)
(mf/deps @hover @hover-ids selected @space? @z? workspace-read-only?)
(fn [bevent]
(let [event (.-nativeEvent bevent)
shift? (kbd/shift? event)
@ -110,7 +111,7 @@
(not @space?))
(dom/prevent-default bevent)
(dom/stop-propagation bevent)
(when-not workspace-read-only?
(when-not (or workspace-read-only? @z?)
(st/emit! (dw/start-move-selected))))))))
(defn on-frame-select

View file

@ -166,12 +166,12 @@
;
; [Page]
; Root Frame
; Component-1* #--> Component-1
; Component 1* #--> Component 1
; #{:shapes-group}
; Rect 2 ---> Rect 2
;
; [Component-1]
; Component-1
; [Component 1]
; Component 1
; Rect 1
; Rect 2
;
@ -180,14 +180,14 @@
new-state
(thp/id :instance1))]
(t/is (= (:name group) "Component-1"))
(t/is (= (:name group) "Component 1"))
(t/is (= (:touched group) #{:shapes-group}))
(t/is (not= (:shape-ref group) nil))
(t/is (= (:name shape2) "Rect 2"))
(t/is (= (:touched shape2) nil))
(t/is (not= (:shape-ref shape2) nil))
(t/is (= (:name c-group) "Component-1"))
(t/is (= (:name c-group) "Component 1"))
(t/is (= (:touched c-group) nil))
(t/is (= (:shape-ref c-group) nil))
(t/is (= (:name c-shape2) "Rect 1"))
@ -227,14 +227,14 @@
;
; [Page]
; Root Frame
; Component-1* #--> Component-1
; Component 1* #--> Component 1
; #{:shapes-group}
; Rect 2 ---> Rect 2
; Rect 1 ---> Rect 1
; Rect 3 ---> Rect 3
;
; [Component-1]
; Component-1
; [Component 1]
; Component 1
; Rect 1
; Rect 2
; Rect 3
@ -245,7 +245,7 @@
new-state
(thp/id :instance1))]
(t/is (= (:name group) "Component-1"))
(t/is (= (:name group) "Component 1"))
(t/is (= (:touched group) #{:shapes-group}))
(t/is (= (:name shape1) "Rect 2"))
(t/is (= (:touched shape1) nil))
@ -257,7 +257,7 @@
(t/is (= (:touched shape3) nil))
(t/is (not= (:shape-ref shape3) nil))
(t/is (= (:name c-group) "Component-1"))
(t/is (= (:name c-group) "Component 1"))
(t/is (= (:touched c-group) nil))
(t/is (= (:shape-ref c-group) nil))
(t/is (= (:name c-shape1) "Rect 1"))
@ -389,7 +389,7 @@
new-state
(thp/id :instance2))]
; TODO: get and check the instance inside component [Group-1]
; TODO: get and check the instance inside component [Group 1]
(t/is (= (:name instance2) "Group"))
(t/is (= (:touched instance2) nil))
@ -478,7 +478,7 @@
new-state
(thp/id :instance2))]
; TODO: get and check the instance inside component [Group-1]
; TODO: get and check the instance inside component [Group 1]
(t/is (= (:name instance2) "Group"))
(t/is (= (:touched instance2) nil))
@ -567,7 +567,7 @@
new-state
(thp/id :instance2))]
; TODO: get and check the instance inside component [Group-1]
; TODO: get and check the instance inside component [Group 1]
(t/is (= (:name instance2) "Group"))
(t/is (= (:touched instance2) nil))
@ -737,12 +737,12 @@
;
; [Page]
; Root Frame
; Component-1 #--> Component-1
; Component 1 #--> Component 1
; Rect 1 ---> Rect 1
; Rect 2 ---> Rect 2
;
; [Component-1]
; Component-1
; [Component 1]
; Component 1
; Rect 1
; Rect 2
;
@ -752,7 +752,7 @@
new-state
(thp/id :instance1))]
(t/is (= (:name group) "Component-1"))
(t/is (= (:name group) "Component 1"))
(t/is (= (:touched group) nil))
(t/is (not= (:shape-ref group) nil))
(t/is (= (:name shape1) "Rect 1"))
@ -762,7 +762,7 @@
(t/is (= (:touched shape2) nil))
(t/is (not= (:shape-ref shape2) nil))
(t/is (= (:name c-group) "Component-1"))
(t/is (= (:name c-group) "Component 1"))
(t/is (= (:touched c-group) nil))
(t/is (= (:shape-ref c-group) nil))
(t/is (= (:name c-shape1) "Rect 1"))
@ -803,13 +803,13 @@
;
; [Page]
; Root Frame
; Component-1 #--> Component-1
; Component 1 #--> Component 1
; Rect 1 ---> Rect 1
; Rect 2 ---> Rect 2
; Rect 3 ---> Rect 3
;
; [Component-1]
; Component-1
; [Component 1]
; Component 1
; Rect 1
; Rect 2
; Rect 3
@ -819,7 +819,7 @@
new-state
(thp/id :instance1))]
(t/is (= (:name group) "Component-1"))
(t/is (= (:name group) "Component 1"))
(t/is (= (:touched group) nil))
(t/is (not= (:shape-ref group) nil))
(t/is (= (:name shape1) "Rect 1"))
@ -832,7 +832,7 @@
(t/is (= (:touched shape3) nil))
(t/is (not= (:shape-ref shape3) nil))
(t/is (= (:name c-group) "Component-1"))
(t/is (= (:name c-group) "Component 1"))
(t/is (= (:touched c-group) nil))
(t/is (= (:shape-ref c-group) nil))
(t/is (= (:name c-shape1) "Rect 1"))
@ -1144,7 +1144,7 @@
new-state
(thp/id :instance2))]
; TODO: get and check the instance inside component [Group-1]
; TODO: get and check the instance inside component [Group 1]
(t/is (= (:name instance2) "Group"))
(t/is (= (:touched instance2) nil))
@ -1517,11 +1517,11 @@
;
; [Page]
; Root Frame
; Component-1 #--> Component-1
; Component 1 #--> Component 1
; Rect 2 ---> Rect 2
;
; [Component-1]
; Component-1
; [Component 1]
; Component 1
; Rect 2
;
(let [[[group shape2] [c-group c-shape2] component]
@ -1529,14 +1529,14 @@
new-state
(thp/id :instance1))]
(t/is (= (:name group) "Component-1"))
(t/is (= (:name group) "Component 1"))
(t/is (= (:touched group) nil))
(t/is (not= (:shape-ref group) nil))
(t/is (= (:name shape2) "Rect 2"))
(t/is (= (:touched shape2) nil))
(t/is (not= (:shape-ref shape2) nil))
(t/is (= (:name c-group) "Component-1"))
(t/is (= (:name c-group) "Component 1"))
(t/is (= (:touched c-group) nil))
(t/is (= (:shape-ref c-group) nil))
(t/is (= (:name c-shape2) "Rect 2"))
@ -1576,13 +1576,13 @@
;
; [Page]
; Root Frame
; Component-1 #--> Component-1
; Component 1 #--> Component 1
; Rect 2 ---> Rect 2
; Rect 1 ---> Rect 1
; Rect 3 ---> Rect 3
;
; [Component-1]
; Component-1
; [Component 1]
; Component 1
; Rect 2
; Rect 1
; Rect 3
@ -1592,7 +1592,7 @@
new-state
(thp/id :instance1))]
(t/is (= (:name group) "Component-1"))
(t/is (= (:name group) "Component 1"))
(t/is (= (:touched group) nil))
(t/is (not= (:shape-ref group) nil))
(t/is (= (:touched shape1) nil))
@ -1605,7 +1605,7 @@
(t/is (not= (:shape-ref shape3) nil))
(t/is (= (:name shape3) "Rect 3"))
(t/is (= (:name c-group) "Component-1"))
(t/is (= (:name c-group) "Component 1"))
(t/is (= (:touched c-group) nil))
(t/is (= (:shape-ref c-group) nil))
(t/is (= (:name c-shape1) "Rect 2"))
@ -1737,7 +1737,7 @@
new-state
(thp/id :instance2))]
; TODO: get and check the instance inside component [Group-1]
; TODO: get and check the instance inside component [Group 1]
(t/is (= (:name instance2) "Group"))
(t/is (= (:touched instance2) nil))
@ -1826,7 +1826,7 @@
new-state
(thp/id :instance2))]
; TODO: get and check the instance inside component [Group-1]
; TODO: get and check the instance inside component [Group 1]
(t/is (= (:name instance2) "Group"))
(t/is (= (:touched instance2) nil))
@ -1916,7 +1916,7 @@
new-state
(thp/id :instance2))]
; TODO: get and check the instance inside component [Group-1]
; TODO: get and check the instance inside component [Group 1]
(t/is (= (:name instance2) "Group"))
(t/is (= (:touched instance2) nil))

View file

@ -30,7 +30,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"}))
{:name "Rect 1"}))
store (the/prepare-store state done
(fn [new-state]
@ -43,12 +43,12 @@
;
; [Page]
; Root Frame
; Rect-1 #--> Rect-1
; Rect-1 ---> Rect-1
; Rect 1 #--> Rect 1
; Rect 1 ---> Rect 1
;
; [Rect-1]
; Rect-1
; Rect-1
; [Rect 1]
; Rect 1
; Rect 1
;
(let [shape1 (thp/get-shape new-state :shape1)
@ -59,11 +59,11 @@
file (wsh/get-local-file new-state)]
(t/is (= (:name shape1) "Rect-1"))
(t/is (= (:name group) "Rect-1"))
(t/is (= (:name component) "Rect-1"))
(t/is (= (:name c-shape1) "Rect-1"))
(t/is (= (:name c-group) "Rect-1"))
(t/is (= (:name shape1) "Rect 1"))
(t/is (= (:name group) "Rect 1"))
(t/is (= (:name component) "Rect 1"))
(t/is (= (:name c-shape1) "Rect 1"))
(t/is (= (:name c-group) "Rect 1"))
(thl/is-from-file group file))))]
@ -81,7 +81,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"}))]
{:name "Rect 1"}))]
(->> state
(the/do-update (dw/select-shape (thp/id :shape1)))
@ -97,11 +97,11 @@
file (wsh/get-local-file new-state)]
(t/is (= (:name shape1) "Rect-1"))
(t/is (= (:name group) "Component-1"))
(t/is (= (:name component) "Component-1"))
(t/is (= (:name c-shape1) "Rect-1"))
(t/is (= (:name c-group) "Component-1"))
(t/is (= (:name shape1) "Rect 1"))
(t/is (= (:name group) "Component 1"))
(t/is (= (:name component) "Component 1"))
(t/is (= (:name c-shape1) "Rect 1"))
(t/is (= (:name c-group) "Component 1"))
(thl/is-from-file group file))))
@ -113,7 +113,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/sample-shape :shape2 :rect
{:name "Rect-2"}))
@ -123,13 +123,13 @@
;
; [Page]
; Root Frame
; Component-1 #--> Component-1
; Rect-1 ---> Rect-1
; Component 1 #--> Component 1
; Rect 1 ---> Rect 1
; Rect-2 ---> Rect-2
;
; [Component-1]
; Component-1
; Rect-1
; [Component 1]
; Component 1
; Rect 1
; Rect-2
;
(let [shape1 (thp/get-shape new-state :shape1)
@ -143,12 +143,12 @@
file (wsh/get-local-file new-state)]
(t/is (= (:name group) "Component-1"))
(t/is (= (:name shape1) "Rect-1"))
(t/is (= (:name group) "Component 1"))
(t/is (= (:name shape1) "Rect 1"))
(t/is (= (:name shape2) "Rect-2"))
(t/is (= (:name component) "Component-1"))
(t/is (= (:name c-group) "Component-1"))
(t/is (= (:name c-shape1) "Rect-1"))
(t/is (= (:name component) "Component 1"))
(t/is (= (:name c-group) "Component 1"))
(t/is (= (:name c-shape1) "Rect 1"))
(t/is (= (:name c-shape2) "Rect-2"))
(thl/is-from-file group file))))]
@ -166,7 +166,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/sample-shape :shape2 :rect
{:name "Rect-2"})
(thp/group-shapes :group1
@ -180,12 +180,12 @@
; [Page]
; Root Frame
; Group #--> Group
; Rect-1 ---> Rect-1
; Rect 1 ---> Rect 1
; Rect-2 ---> Rect-2
;
; [Group]
; Group
; Rect-1
; Rect 1
; Rect-2
;
(let [[[group shape1 shape2]
@ -197,11 +197,11 @@
file (wsh/get-local-file new-state)]
(t/is (= (:name shape1) "Rect-1"))
(t/is (= (:name shape1) "Rect 1"))
(t/is (= (:name shape2) "Rect-2"))
(t/is (= (:name group) "Group"))
(t/is (= (:name component) "Group"))
(t/is (= (:name c-shape1) "Rect-1"))
(t/is (= (:name c-shape1) "Rect 1"))
(t/is (= (:name c-shape2) "Rect-2"))
(t/is (= (:name c-group) "Group"))
@ -219,7 +219,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/make-component :instance1 :component1
[(thp/id :shape1)]))
@ -229,18 +229,18 @@
;
; [Page]
; Root Frame
; Rect-1 #--> Rect-1
; Rect-1 @--> Rect-1
; Rect-1 ---> Rect-1
; Rect 1 #--> Rect 1
; Rect 1 @--> Rect 1
; Rect 1 ---> Rect 1
;
; [Rect-1]
; Rect-1
; Rect-1
; [Rect 1]
; Rect 1
; Rect 1
;
; [Rect-1]
; Rect-1
; Rect-1 @--> Rect-1
; Rect-1 ---> Rect-1
; [Rect 1]
; Rect 1
; Rect 1 @--> Rect 1
; Rect 1 ---> Rect 1
;
(let [[[instance1 shape1]
[c-instance1 c-shape1]
@ -257,19 +257,19 @@
new-state
(:parent-id instance1))]
(t/is (= (:name shape1) "Rect-1"))
(t/is (= (:name instance1) "Rect-1"))
(t/is (= (:name component1) "Rect-1"))
(t/is (= (:name c-shape1) "Rect-1"))
(t/is (= (:name c-instance1) "Rect-1"))
(t/is (= (:name shape1) "Rect 1"))
(t/is (= (:name instance1) "Rect 1"))
(t/is (= (:name component1) "Rect 1"))
(t/is (= (:name c-shape1) "Rect 1"))
(t/is (= (:name c-instance1) "Rect 1"))
(t/is (= (:name shape1') "Rect-1"))
(t/is (= (:name instance1') "Rect-1"))
(t/is (= (:name instance2) "Rect-1"))
(t/is (= (:name component2) "Rect-1"))
(t/is (= (:name c-shape1') "Rect-1"))
(t/is (= (:name c-instance1') "Rect-1"))
(t/is (= (:name c-instance2) "Rect-1")))))]
(t/is (= (:name shape1') "Rect 1"))
(t/is (= (:name instance1') "Rect 1"))
(t/is (= (:name instance2) "Rect 1"))
(t/is (= (:name component2) "Rect 1"))
(t/is (= (:name c-shape1') "Rect 1"))
(t/is (= (:name c-instance1') "Rect 1"))
(t/is (= (:name c-instance2) "Rect 1")))))]
(ptk/emit!
store
@ -283,7 +283,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/make-component :instance1 :component-1
[(thp/id :shape1)]))
@ -296,11 +296,11 @@
; [Page]
; Root Frame
; Rect-2 #--> Renamed component
; Rect-1 ---> Rect-1
; Rect 1 ---> Rect 1
;
; [Renamed]
; Renamed component
; Rect-1
; Rect 1
(let [libs (wsh/get-libraries new-state)
component (cph/get-component libs
(:component-file instance1)
@ -319,7 +319,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/make-component :instance1 :component-1
[(thp/id :shape1)]))
@ -332,16 +332,16 @@
;
; [Page]
; Root Frame
; Rect-1 #--> Rect-1
; Rect-1 ---> Rect-1
; Rect 1 #--> Rect 1
; Rect 1 ---> Rect 1
;
; [Rect-1]
; Rect-1
; Rect-1
; [Rect 1]
; Rect 1
; Rect 1
;
; [Rect-1]
; Rect-1
; Rect-1
; [Rect 1]
; Rect 1
; Rect 1
;
(let [new-component-id (->> (get-in new-state
[:workspace-data
@ -363,7 +363,7 @@
new-state
new-component-id)]
(t/is (= (:name component2) "Rect-1")))))]
(t/is (= (:name component2) "Rect 1")))))]
(ptk/emit!
store
@ -376,7 +376,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/make-component :instance1 :component-1
[(thp/id :shape1)]))
@ -392,7 +392,7 @@
; [Page]
; Root Frame
; Rect-2
; Rect-1
; Rect 1
;
(let [[instance1 shape1]
(thl/resolve-noninstance
@ -420,7 +420,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/make-component :instance1 :component-1
[(thp/id :shape1)]))
@ -434,14 +434,14 @@
;
; [Page]
; Root Frame
; Rect-1 #--> Rect-1
; Rect-1 ---> Rect-1
; Rect-1 #--> Rect-1
; Rect-1 ---> Rect-1
; Rect 1 #--> Rect 1
; Rect 1 ---> Rect 1
; Rect 1 #--> Rect 1
; Rect 1 ---> Rect 1
;
; [Rect-1]
; Rect-1
; Rect-1
; [Rect 1]
; Rect 1
; Rect 1
;
(let [new-instance-id (-> new-state
wsh/lookup-selected
@ -456,10 +456,10 @@
(t/is (not= (:id instance1) (:id instance2)))
(t/is (= (:id component) component-id))
(t/is (= (:name instance2) "Rect-1"))
(t/is (= (:name shape2) "Rect-1"))
(t/is (= (:name c-instance2) "Rect-1"))
(t/is (= (:name c-shape2) "Rect-1"))
(t/is (= (:name instance2) "Rect 1"))
(t/is (= (:name shape2) "Rect 1"))
(t/is (= (:name c-instance2) "Rect 1"))
(t/is (= (:name c-shape2) "Rect 1"))
(t/is (= (:component-file instance2)
thp/current-file-id)))))]
@ -476,7 +476,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/make-component :instance1 :component-1
[(thp/id :shape1)])
(thp/move-to-library :lib1 "Library 1")
@ -491,8 +491,8 @@
;
; [Page]
; Root Frame
; Rect-1 #--> <Library 1> Rect-1
; Rect-1 ---> <Library 1> Rect-1
; Rect 1 #--> <Library 1> Rect 1
; Rect 1 ---> <Library 1> Rect 1
;
(let [new-instance-id (-> new-state
wsh/lookup-selected
@ -506,10 +506,10 @@
new-instance-id)]
(t/is (= (:id component) component-id))
(t/is (= (:name instance2) "Rect-1"))
(t/is (= (:name shape2) "Rect-1"))
(t/is (= (:name c-instance2) "Rect-1"))
(t/is (= (:name c-shape2) "Rect-1"))
(t/is (= (:name instance2) "Rect 1"))
(t/is (= (:name shape2) "Rect 1"))
(t/is (= (:name c-instance2) "Rect 1"))
(t/is (= (:name c-shape2) "Rect 1"))
(t/is (= (:component-file instance2) library-id)))))]
(ptk/emit!
@ -525,7 +525,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/make-component :instance1 :component-1
[(thp/id :shape1)]))
@ -539,11 +539,11 @@
; [Page]
; Root Frame
; Rect-2
; Rect-1
; Rect 1
;
; [Rect-2]
; Rect-2
; Rect-1
; Rect 1
;
(let [[instance1 shape1]
(thl/resolve-noninstance
@ -564,7 +564,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"}))
{:name "Rect 1"}))
file (wsh/get-local-file state)
instance1 (thp/get-shape state :instance1)
@ -577,17 +577,17 @@
; [Page]
; Root Frame
; Group #--> Group
; Rect-1 @--> Rect-1
; Rect-1 ---> Rect-1
; Rect 1 @--> Rect 1
; Rect 1 ---> Rect 1
;
; [Rect-1]
; Rect-1
; Rect-1
; [Rect 1]
; Rect 1
; Rect 1
;
; [Group]
; Group
; Rect-1 @--> Rect-1
; Rect-1 ---> Rect-1
; Rect 1 @--> Rect 1
; Rect 1 ---> Rect 1
;
(let [page (thp/current-page new-state)
shape1 (thp/get-shape new-state :shape1)
@ -601,12 +601,12 @@
(:parent-id parent1))]
(t/is (= (:name group) "Group"))
(t/is (= (:name shape1) "Rect-1"))
(t/is (= (:name shape2) "Rect-1"))
(t/is (= (:name shape1) "Rect 1"))
(t/is (= (:name shape2) "Rect 1"))
(t/is (= (:name component) "Group"))
(t/is (= (:name c-group) "Group"))
(t/is (= (:name c-shape1) "Rect-1"))
(t/is (= (:name c-shape2) "Rect-1")))))]
(t/is (= (:name c-shape1) "Rect 1"))
(t/is (= (:name c-shape2) "Rect 1")))))]
(ptk/emit!
store
@ -622,7 +622,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/make-component :instance1 :component-1
[(thp/id :shape1)])
(thp/group-shapes :group1
@ -641,21 +641,21 @@
;
; [Page]
; Root Frame
; Rect-1 #--> Rect-1
; Rect-1 @--> Rect-1
; Rect-1 ---> Rect-1
; Rect-1 #--> Rect-1
; Rect-1 @--> Rect-1
; Rect-1 ---> Rect-1
; Rect 1 #--> Rect 1
; Rect 1 @--> Rect 1
; Rect 1 ---> Rect 1
; Rect 1 #--> Rect 1
; Rect 1 @--> Rect 1
; Rect 1 ---> Rect 1
;
; [Rect-1]
; Rect-1
; Rect-1
; [Rect 1]
; Rect 1
; Rect 1
;
; [Rect-1]
; Rect-1
; Rect-1 @--> Rect-1
; Rect-1 ---> Rect-1
; [Rect 1]
; Rect 1
; Rect 1 @--> Rect 1
; Rect 1 ---> Rect 1
;
(let [new-instance-id (-> new-state
wsh/lookup-selected
@ -672,12 +672,12 @@
(t/is (not= (:id instance1) (:id instance3)))
(t/is (= (:id component) component-id))
(t/is (= (:name instance3) "Rect-1"))
(t/is (= (:name shape3) "Rect-1"))
(t/is (= (:name shape4) "Rect-1"))
(t/is (= (:name c-instance3) "Rect-1"))
(t/is (= (:name c-shape3) "Rect-1"))
(t/is (= (:name c-shape4) "Rect-1")))))]
(t/is (= (:name instance3) "Rect 1"))
(t/is (= (:name shape3) "Rect 1"))
(t/is (= (:name shape4) "Rect 1"))
(t/is (= (:name c-instance3) "Rect 1"))
(t/is (= (:name c-shape3) "Rect 1"))
(t/is (= (:name c-shape4) "Rect 1")))))]
(ptk/emit!
store
@ -692,7 +692,7 @@
(let [state (-> thp/initial-state
(thp/sample-page)
(thp/sample-shape :shape1 :rect
{:name "Rect-1"})
{:name "Rect 1"})
(thp/make-component :instance1 :component-1
[(thp/id :shape1)])
(thp/move-to-library :lib1 "Library 1")
@ -711,13 +711,13 @@
; [Page]
; Root Frame
; Group #--> Group
; Rect-1 @--> <Library 1> Rect-1
; Rect-1 ---> <Library 1> Rect-1
; Rect 1 @--> <Library 1> Rect 1
; Rect 1 ---> <Library 1> Rect 1
;
; [Group]
; Group
; Rect-1 @--> <Library 1> Rect-1
; Rect-1 ---> <Library 1> Rect-1
; Rect 1 @--> <Library 1> Rect 1
; Rect 1 ---> <Library 1> Rect 1
;
(let [instance2 (thp/get-shape new-state :instance2)
@ -727,11 +727,11 @@
(:parent-id instance2))]
(t/is (= (:name group1) "Group"))
(t/is (= (:name shape1) "Rect-1"))
(t/is (= (:name shape2) "Rect-1"))
(t/is (= (:name shape1) "Rect 1"))
(t/is (= (:name shape2) "Rect 1"))
(t/is (= (:name c-group1) "Group"))
(t/is (= (:name c-shape1) "Rect-1"))
(t/is (= (:name c-shape2) "Rect-1"))
(t/is (= (:name c-shape1) "Rect 1"))
(t/is (= (:name c-shape2) "Rect 1"))
(t/is (= (:component-file group1) thp/current-file-id))
(t/is (= (:component-file shape1) library-id))
(t/is (= (:component-file shape2) nil))

View file

@ -19,7 +19,7 @@
(t/testing "Add empty page (only root-frame)"
(let [page (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/get-current-page))
data (-> (sd/make-snap-data)
@ -28,7 +28,7 @@
(t/testing "Create simple shape on root"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/create-rect
{:x 0
:y 0
@ -57,7 +57,7 @@
(t/testing "Add page with single empty frame"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/add-artboard
{:x 0
:y 0
@ -81,7 +81,7 @@
(t/testing "Add page with some shapes inside frames"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/add-artboard
{:x 0
:y 0
@ -112,7 +112,7 @@
(t/testing "Add a global guide"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/add-guide {:position 50 :axis :x})
(fb/add-artboard {:x 200 :y 200 :width 100 :height 100})
(fb/close-artboard))
@ -140,7 +140,7 @@
(t/testing "Add a frame guide"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/add-artboard {:x 200 :y 200 :width 100 :height 100})
(fb/close-artboard))
@ -171,7 +171,7 @@
(t/deftest test-update-index
(t/testing "Create frame on root and then remove it."
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/add-artboard
{:x 0
:y 0
@ -201,7 +201,7 @@
(t/testing "Create simple shape on root. Then remove it"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/create-rect
{:x 0
:y 0
@ -229,7 +229,7 @@
(t/testing "Create shape inside frame, then remove it"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/add-artboard
{:x 0
:y 0
@ -260,7 +260,7 @@
(t/testing "Create global guide then remove it"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/add-guide {:position 50 :axis :x}))
guide-id (:last-id file)
@ -293,7 +293,7 @@
(t/testing "Create frame guide then remove it"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/add-artboard {:x 200 :y 200 :width 100 :height 100})
(fb/close-artboard))
@ -324,7 +324,7 @@
(t/testing "Update frame coordinates"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/add-artboard
{:x 0
:y 0
@ -358,7 +358,7 @@
(t/testing "Update shape coordinates"
(let [file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/create-rect
{:x 0
:y 0
@ -388,7 +388,7 @@
(t/testing "Update global guide"
(let [guide {:position 50 :axis :x}
file (-> (fb/create-file "Test")
(fb/add-page {:name "Page-1"})
(fb/add-page {:name "Page 1"})
(fb/add-guide guide))
guide-id (:last-id file)