diff --git a/frontend/src/app/main/data/workspace/grid_layout/editor.cljs b/frontend/src/app/main/data/workspace/grid_layout/editor.cljs index 07fb2c093b..8546b1178a 100644 --- a/frontend/src/app/main/data/workspace/grid_layout/editor.cljs +++ b/frontend/src/app/main/data/workspace/grid_layout/editor.cljs @@ -11,6 +11,7 @@ [app.common.types.shape.layout :as ctl] [app.main.data.helpers :as dsh] [app.main.data.workspace.viewport-wasm :as dwvw] + [app.main.streams :as ms] [potok.v2.core :as ptk])) (defn hover-grid-cell @@ -88,7 +89,11 @@ (ptk/reify ::stop-grid-layout-editing ptk/UpdateEvent (update [_ state] - (update state :workspace-grid-edition dissoc grid-id)))) + (update state :workspace-grid-edition dissoc grid-id)) + + ptk/EffectEvent + (effect [_ _ _] + (ms/clear-transform-preview!)))) (defn locate-board [grid-id] diff --git a/frontend/src/app/main/data/workspace/transforms.cljs b/frontend/src/app/main/data/workspace/transforms.cljs index 48cf42d014..d0e612b493 100644 --- a/frontend/src/app/main/data/workspace/transforms.cljs +++ b/frontend/src/app/main/data/workspace/transforms.cljs @@ -143,8 +143,7 @@ ptk/EffectEvent (effect [_ _ _] - (rx/push! ms/wasm-modifiers nil) - (rx/push! ms/workspace-selrect nil)))) + (ms/clear-transform-preview!)))) ;; -- Resize -------------------------------------------------------- diff --git a/frontend/src/app/main/streams.cljs b/frontend/src/app/main/streams.cljs index 1fe8e55d9b..a2fce0a4e6 100644 --- a/frontend/src/app/main/streams.cljs +++ b/frontend/src/app/main/streams.cljs @@ -32,6 +32,17 @@ (defonce workspace-selrect (rx/behavior-subject nil)) +(defn clear-transform-preview! + "Reset the interactive-transform preview behaviour-subjects. Controls + that drive a live preview (drag/resize/rotate, flex spacing handles, + grid track/cell gestures) set these via `set-wasm-modifiers` and clear + them at gesture end. If the control unmounts mid-gesture that clearing + never runs, so the stale selrect keeps displacing the DOM selection + overlay of the next selection. Call from gesture end / unmount cleanup." + [] + (rx/push! wasm-modifiers nil) + (rx/push! workspace-selrect nil)) + ;; --- Derived streams (defonce ^:private pointer diff --git a/frontend/src/app/main/ui/flex_controls/common.cljs b/frontend/src/app/main/ui/flex_controls/common.cljs index 1aa28a5289..72bed0cf0f 100644 --- a/frontend/src/app/main/ui/flex_controls/common.cljs +++ b/frontend/src/app/main/ui/flex_controls/common.cljs @@ -1,9 +1,19 @@ (ns app.main.ui.flex-controls.common (:require [app.main.constants :as mconst] + [app.main.streams :as ms] [app.main.ui.formats :as fmt] [rumext.v2 :as mf])) +;; ------------------------------------------------ +;; INTERACTIVE TRANSFORM CLEANUP +;; ------------------------------------------------ + +;; Flex spacing controls (padding/margin/gap) call this from their +;; unmount cleanup, guarded on the resizing flag. See +;; `ms/clear-transform-preview!` for the rationale. +(def clear-transform-preview! ms/clear-transform-preview!) + ;; ------------------------------------------------ ;; CONSTANTS ;; ------------------------------------------------ diff --git a/frontend/src/app/main/ui/flex_controls/gap.cljs b/frontend/src/app/main/ui/flex_controls/gap.cljs index 38926c9887..6bcb237821 100644 --- a/frontend/src/app/main/ui/flex_controls/gap.cljs +++ b/frontend/src/app/main/ui/flex_controls/gap.cljs @@ -98,6 +98,11 @@ (when on-change (on-change modifiers)))))))] + (mf/with-effect [] + (fn [] + (when (some? @resizing) + (fcc/clear-transform-preview!)))) + [:g.gap-rect [:rect.info-area {:x (:x rect-data) diff --git a/frontend/src/app/main/ui/flex_controls/margin.cljs b/frontend/src/app/main/ui/flex_controls/margin.cljs index d8ad044355..b8d39c73fb 100644 --- a/frontend/src/app/main/ui/flex_controls/margin.cljs +++ b/frontend/src/app/main/ui/flex_controls/margin.cljs @@ -105,6 +105,11 @@ (when on-change (on-change modifiers)))))))] + (mf/with-effect [] + (fn [] + (when @resizing? + (fcc/clear-transform-preview!)))) + [:rect.margin-rect {:x (:x rect-data) :y (:y rect-data) diff --git a/frontend/src/app/main/ui/flex_controls/padding.cljs b/frontend/src/app/main/ui/flex_controls/padding.cljs index c10f83cd31..1b125717bd 100644 --- a/frontend/src/app/main/ui/flex_controls/padding.cljs +++ b/frontend/src/app/main/ui/flex_controls/padding.cljs @@ -105,6 +105,11 @@ (when on-change (on-change modifiers)))))))] + (mf/with-effect [] + (fn [] + (when @resizing? + (fcc/clear-transform-preview!)))) + [:g.padding-rect [:rect.info-area {:x (:x rect-data)