@@ -1,32 +1,33 @@
1module React.Basic.Hooks.Spring.Stories where
1module React.Basic.Hooks.Spring.Stories where
3import Prelude hiding (add)
3import Prelude hiding (add)
4+import Data.Maybe (Maybe(..))
4import Data.Tuple.Nested ((/\))
5import Data.Tuple.Nested ((/\))
5−import Debug.Trace (spy)
6import Effect (Effect)
6import Effect (Effect)
7+import Effect.Unsafe (unsafePerformEffect)
7import JSS (jssClasses)
8import JSS (jssClasses)
8−import Justifill (justifill)
9import React.Basic.DOM (css)
9import React.Basic.DOM (css)
10import React.Basic.DOM as R
10import React.Basic.DOM as R
11import React.Basic.Events (handler_)
11import React.Basic.Events (handler_)
12import React.Basic.Helpers (jsx)
12import React.Basic.Helpers (jsx)
13−import React.Basic.Hooks (ReactComponent, component, element, fragment, useLayoutEffect, useState)
13+import React.Basic.Hooks (ReactComponent, component, fragment, useLayoutEffect, useState)
14import React.Basic.Hooks as React
14import React.Basic.Hooks as React
15−import React.Basic.Hooks.Spring (animated, animatedDiv, useSpring, useSpringImpl)
15+import React.Basic.Hooks.Spring (animatedDiv, useSpring, useTransition)
16import React.Basic.Hooks.UseGesture (useDrag, withDragProps)
16import React.Basic.Hooks.UseGesture (useDrag, withDragProps)
17−import Storybook.Decorator.FullScreen (fullScreenDecorator)
18−import Storybook.React (Storybook, add, add_, addDecorator, storiesOf)
17+import Storybook.React (Storybook, add, storiesOf)
19−import Web.DOM.DOMTokenList (toggle)
20import Yoga.Box.Component as Box
18import Yoga.Box.Component as Box
19+import Yoga.Button.Component (mkButton)
21import Yoga.Spec.Helpers (withDarkTheme)
20import Yoga.Spec.Helpers (withDarkTheme)
22−import Yoga.Stack.Component as Stack
23import Yoga.Theme.Styles (makeStylesJSS)
21import Yoga.Theme.Styles (makeStylesJSS)
22+import Yoga.Theme.Types (CSSTheme)
25stories ∷ Effect Storybook
24stories ∷ Effect Storybook
26stories = do
25stories = do
27 storiesOf "Spring" do
26 storiesOf "Spring" do
28 add "The Spring" (withDarkTheme mkAnimated)
27 add "The Spring" (withDarkTheme mkAnimated)
29+ add "The Transition" (withDarkTheme mkTransition)
30 add "The Drag" (withDarkTheme mkDragAnimated)
31 add "The Drag" (withDarkTheme mkDragAnimated)
@@ -35,19 +36,60 @@ mkAnimated = do
35 box <- Box.makeComponent
36 box <- Box.makeComponent
36 component "Animated Example" \{} -> React.do
37 component "Animated Example" \{} -> React.do
37 toggled /\ modifyToggled <- useState false
38 toggled /\ modifyToggled <- useState false
38− { style, set, stop } <- useSpring $ const { opacity: 0.7, transform: "scale3d(" <> if toggled then "0.9, 0.9, 1.0" else "1.0, 2.0, 1.0" <> ")" }
39+ { style, set, stop } <- useSpring $ const { opacity: 0.7, transform: "scale3d(0.9,0.9,0.9)" }
39− useLayoutEffect toggled do
40+ let
40− (spy "fuck" set) { opacity: if toggled then 0.7 else 0.9, transform: "scale3d(" <> if toggled then "0.9, 0.9, 1.0" else "1.0, 2.0, 1.0" <> ")" }
43+ $ set { opacity: if toggled then 0.7 else 0.9, transform: "scale3d(" <> if toggled then "0.9, 0.9, 1.0" else "0.95, 0.95, 1.0" <> ")" }
43 $ fragment
45 $ fragment
46+ [ R.button { children: [ R.text "Toggle" ], onClick: handler_ $ modifyToggled not }
44− [ animatedDiv
47+ , animatedDiv
45 { style: css style
48 { style: css style
46 , children: [ jsx box {} [ R.text "Click the button" ] ]
49 , children: [ jsx box {} [ R.text "Click the button" ] ]
48− , R.button { children: [ R.text "Toggle" ], onClick: handler_ (modifyToggled not) }
53+mkTransition ∷ Effect (ReactComponent {})
58+ $ jssClasses \(t ∷ CSSTheme) ->
60+ { marginTop: "300px", marginLeft: "300px", width: "200px", height: "200px" }
61+ , blue: { background: t.textColour }
62+ , red: { background: t.white }
64+ component "Transition Example" \{} -> React.do
65+ toggled /\ modifyToggled <- useState false
66+ classes <- useStyles {}
68+ useTransition [ toggled ] Nothing
70+ { from: { opacity: 0.0, transform: "translate3d(-1000px, 0px, 0.0)", position: "absolute" }
71+ , enter: { opacity: 1.0, transform: "translate3d(0.0, 0px, 0.0)" }
72+ , leave: { opacity: 0.0, transform: "scale3d(0, 0, 1)" }
77+ <#> \{ item, key, props } ->
78+ if item == Just true then
80+ { className: classes.div <> " " <> classes.red
82+ , children: [ R.text "hello, you" ]
86+ { className: classes.div <> " " <> classes.blue
88+ , children: [ R.text "I am different" ]
91+ <> [ jsx button { onClick: handler_ (modifyToggled not) } [ R.text "Toggle" ] ]
51mkDragAnimated ∷ Effect (ReactComponent {})
93mkDragAnimated ∷ Effect (ReactComponent {})
52mkDragAnimated = do
94mkDragAnimated = do
53 box <- Box.makeComponent
95 box <- Box.makeComponent