@@ -31,6 +31,7 @@ module Yoga.Block.Internal
31 , unsafeAddProps
31 , unsafeAddProps
32 , createRef
32 , createRef
33 , getBoundingBoxFromRef
33 , getBoundingBoxFromRef
34+ , getClientDimensionsFromRef
34 , getElementFromRef
35 , getElementFromRef
35 , getHTMLElementFromRef
36 , getHTMLElementFromRef
36 , getOffsetHeightFromRef
37 , getOffsetHeightFromRef
@@ -44,6 +45,7 @@ module Yoga.Block.Internal
46import Prelude
47import Prelude
47import Control.Monad.Cont.Trans (lift)
49import Control.Monad.Cont.Trans (lift)
48import Control.Monad.Maybe.Trans (MaybeT(..), runMaybeT)
50import Control.Monad.Maybe.Trans (MaybeT(..), runMaybeT)
49import Data.Array as Array
51import Data.Array as Array
@@ -64,11 +66,12 @@ import React.Basic.Emotion as E
64import React.Basic.Events (EventHandler)
66import React.Basic.Events (EventHandler)
65import React.Basic.Hooks (JSX, ReactComponent, Ref, Render, readRefMaybe)
67import React.Basic.Hooks (JSX, ReactComponent, Ref, Render, readRefMaybe)
66import Record.Extra (class Keys, keys)
68import Record.Extra (class Keys, keys)
69+import Record.Unsafe.Union (unsafeUnion)
67import Type.Proxy (Proxy(..))
70import Type.Proxy (Proxy(..))
68import Unsafe.Coerce (unsafeCoerce)
71import Unsafe.Coerce (unsafeCoerce)
69import Untagged.Union (UndefinedOr, uorToMaybe)
72import Untagged.Union (UndefinedOr, uorToMaybe)
70import Web.DOM (Element, Node)
73import Web.DOM (Element, Node)
71−import Web.DOM.Element (scrollHeight, scrollWidth, DOMRect, getBoundingClientRect)
74+import Web.DOM.Element (DOMRect, clientHeight, clientWidth, getBoundingClientRect, scrollHeight, scrollWidth)
72import Web.DOM.Element as Element
75import Web.DOM.Element as Element
73import Web.DOM.NonElementParentNode (getElementById)
76import Web.DOM.NonElementParentNode (getElementById)
74import Web.HTML (window)
77import Web.HTML (window)
@@ -78,7 +81,6 @@ import Web.HTML.HTMLElement as HTMLElement
78import Web.HTML.Window (document)
81import Web.HTML.Window (document)
79import Yoga.Block.Internal.CSS (_0)
82import Yoga.Block.Internal.CSS (_0)
80import Yoga.Block.Internal.OptionalProp (OptionalProp(..), Id, appendIfDefined, asOptional, composeHandler, getOr, getOrFlipped, ifTrue, isTruthy, maybeToOp, opToMaybe, setOrDelete, unsafeUnMaybe, unsafeUnOptional, (<>?), (?||))
83import Yoga.Block.Internal.OptionalProp (OptionalProp(..), Id, appendIfDefined, asOptional, composeHandler, getOr, getOrFlipped, ifTrue, isTruthy, maybeToOp, opToMaybe, setOrDelete, unsafeUnMaybe, unsafeUnOptional, (<>?), (?||))
81−import Record.Unsafe.Union (unsafeUnion)
83unsafeAddProps ∷ ∀ r s. { | r } → { | s } → { | r }
85unsafeAddProps ∷ ∀ r s. { | r } → { | s } → { | r }
84unsafeAddProps = unsafeUnion
86unsafeAddProps = unsafeUnion
@@ -154,6 +156,15 @@ getScrollDimensionsFromRef itemRef =
154 height <- lift $ scrollHeight elem
156 height <- lift $ scrollHeight elem
155 pure { width, height }
157 pure { width, height }
159+getClientDimensionsFromRef ∷ NodeRef -> Effect (Maybe { height ∷ Number, width ∷ Number })
160+getClientDimensionsFromRef itemRef =
162+ node <- MaybeT $ readRefMaybe itemRef
163+ elem <- MaybeT $ pure $ Element.fromNode node
164+ width <- lift $ clientWidth elem
165+ height <- lift $ clientHeight elem
166+ pure { width, height }
157getHTMLElementFromRef ∷ Ref (Nullable Node) -> Effect (Maybe HTMLElement)
168getHTMLElementFromRef ∷ Ref (Nullable Node) -> Effect (Maybe HTMLElement)
158getHTMLElementFromRef itemRef =
169getHTMLElementFromRef itemRef =
159 runMaybeT do
170 runMaybeT do
@@ -748,4 +759,4 @@ type ButtonReadablePropsNoChildrenF f more =
748 , vocab ∷ f String
759 , vocab ∷ f String
749 , wmode ∷ f String
760 , wmode ∷ f String