@@ -10,16 +10,18 @@ import 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, fragment, useLayoutEffect, useState)
13+import React.Basic.Hooks (ReactComponent, component, fragment, useEffect, useState)
14import React.Basic.Hooks as React
14import React.Basic.Hooks as React
15import React.Basic.Hooks.Spring (animatedDiv, useSpring, useTransition)
15import React.Basic.Hooks.Spring (animatedDiv, useSpring, useTransition)
16import React.Basic.Hooks.UseGesture (useDrag, withDragProps)
16import React.Basic.Hooks.UseGesture (useDrag, withDragProps)
17import Storybook.React (Storybook, add, storiesOf)
17import Storybook.React (Storybook, add, storiesOf)
18import Yoga.Box.Component as Box
18import Yoga.Box.Component as Box
19−import Yoga.Box.Component as Center
20import Yoga.Button.Component (mkButton)
19import Yoga.Button.Component (mkButton)
21import Yoga.Card.Component (mkCard)
20import Yoga.Card.Component (mkCard)
21+import Yoga.Centre.Component as Centre
22+import Yoga.Cluster.Component as Cluster
22import Yoga.Spec.Helpers (withDarkTheme)
23import Yoga.Spec.Helpers (withDarkTheme)
24+import Yoga.Stack.Component as Stack
23import Yoga.Theme.Styles (makeStylesJSS)
25import Yoga.Theme.Styles (makeStylesJSS)
24import Yoga.Theme.Types (CSSTheme)
26import Yoga.Theme.Types (CSSTheme)
@@ -35,33 +37,51 @@ stories = do
36mkAnimated ∷ Effect (ReactComponent {})
38mkAnimated ∷ Effect (ReactComponent {})
37mkAnimated = do
39mkAnimated = do
41+ stack <- Stack.makeComponent
42+ centre <- Centre.makeComponent
38 box <- Box.makeComponent
43 box <- Box.makeComponent
44+ cluster <- Cluster.makeComponent
39 component "Animated Example" \{} -> React.do
45 component "Animated Example" \{} -> React.do
40 toggled /\ modifyToggled <- useState false
46 toggled /\ modifyToggled <- useState false
41− { style, set, stop } <- useSpring $ const { opacity: 0.7, transform: "scale3d(0.9,0.9,0.9)" }
47+ { style, set, stop } <- useSpring $ const { opacity: 1.0, transform: "scale3d(1.0,1.0,1.0)" }
42− let
48+ useEffect toggled do
44− unsafePerformEffect
50+ { opacity: if toggled then 0.7 else 1.0
45− $ 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" <> ")" }
51+ , transform: "scale3d(" <> if toggled then "0.2, 0.2, 1.0" else "1.0, 1.0, 1.0" <> ")"
52+ , config: { mass: 1, tension: 200, friction: 20 }
47− $ fragment
56+ $ jsx stack {}
48− [ R.button { children: [ R.text "Toggle" ], onClick: handler_ $ modifyToggled not }
60+ [ jsx button { onClick: handler_ $ modifyToggled not } [ R.text $ if toggled then "Zoom in" else "Zoom out" ]
49− , animatedDiv
67+ [ animatedDiv
50− { style: css style
68+ { style: css style
51− , children: [ jsx box {} [ R.text "Click the button" ] ]
69+ , children: [ jsx box { invert: true } [ R.text "Click the button" ] ]
55mkTransition ∷ Effect (ReactComponent {})
76mkTransition ∷ Effect (ReactComponent {})
56mkTransition = do
77mkTransition = do
57 button <- mkButton
78 button <- mkButton
58 useStyles <-
80 useStyles <-
59 makeStylesJSS
81 makeStylesJSS
60 $ jssClasses \(t ∷ CSSTheme) ->
82 $ jssClasses \(t ∷ CSSTheme) ->
62 { marginTop: "300px", marginLeft: "300px", width: "200px", height: "200px" }
84 { marginTop: "300px", marginLeft: "300px", width: "200px", height: "200px" }
63− , blue: { background: t.textColour }
64− , red: { background: t.white }
66 component "Transition Example" \{} -> React.do
86 component "Transition Example" \{} -> React.do
67 toggled /\ modifyToggled <- useState false
87 toggled /\ modifyToggled <- useState false
@@ -69,9 +89,10 @@ mkTransition = do
69 transitions <-
89 transitions <-
70 useTransition [ toggled ] Nothing
90 useTransition [ toggled ] Nothing
72− { from: { opacity: 0.0, transform: "translate3d(-1000px, 0px, 0.0)", position: "absolute" }
92+ { from: { opacity: 0.0, transform: "translate3d(-50vw, 0px, 0.0) scale3d(0.2, 0.2, 0.2)", position: "absolute" }
73− , enter: { opacity: 1.0, transform: "translate3d(0.0, 0px, 0.0)" }
93+ , enter: { opacity: 1.0, transform: "translate3d(0.0, 0px, 0.0) scale3d(1.0,1.0,1.0)" }
74− , leave: { opacity: 0.0, transform: "scale3d(0, 0, 1)" }
94+ , leave: { opacity: 0.0, transform: "translate3d(50vw, 0px, 0.0) scale3d(0.0, 0.0, 1.0)" }
95+ , config: { mass: 5, tension: 500, friction: 100 }
77 $ fragment
98 $ fragment
@@ -79,15 +100,15 @@ mkTransition = do
79 <#> \{ item, key, props } ->
100 <#> \{ item, key, props } ->
80 if item == Just true then
101 if item == Just true then
81 animatedDiv
102 animatedDiv
82− { className: classes.div <> " " <> classes.red
103+ { className: classes.div
83 , style: props
104 , style: props
84− , children: [ R.text "hello, you" ]
105+ , children: [ jsx card {} [ R.text "hello, you" ] ]
87 animatedDiv
108 animatedDiv
88− { className: classes.div <> " " <> classes.blue
109+ { className: classes.div
89 , style: props
110 , style: props
90− , children: [ R.text "I am different" ]
111+ , children: [ jsx card {} [ R.text "hello, again" ] ]
93 <> [ jsx button { onClick: handler_ (modifyToggled not) } [ R.text "Toggle" ] ]
114 <> [ jsx button { onClick: handler_ (modifyToggled not) } [ R.text "Toggle" ] ]
@@ -98,8 +119,7 @@ mkDragAnimated = do
98 useStyles <-
119 useStyles <-
99 makeStylesJSS
120 makeStylesJSS
100 $ jssClasses \t ->
121 $ jssClasses \t ->
101− { card: { width: "200px", height: "200px" }
122+ { card: { width: "200px", height: "200px", marginTop: "30px" }
102− , div: { overflow: "visible" }
104 component "Draggable Example" \{} -> React.do
124 component "Draggable Example" \{} -> React.do
105 { style, set } <- useSpring $ const { x: 0.0, y: 0.0, config: { mass: 1, tension: 210, friction: 20 } }
125 { style, set } <- useSpring $ const { x: 0.0, y: 0.0, config: { mass: 1, tension: 210, friction: 20 } }
@@ -108,15 +128,11 @@ mkDragAnimated = do
108 useDrag \{ down, movement: mx /\ my } ->
128 useDrag \{ down, movement: mx /\ my } ->
109 set { x: if down then mx else 0.0, y: if down then my else 0.0 }
129 set { x: if down then mx else 0.0, y: if down then my else 0.0 }
112− [ animatedDiv
131+ $ animatedDiv
113− ( { style: css style
132+ $ { style: css style
114− , className: classes.div
115− , children:
133+ , children:
116− [ jsx card { className: classes.card } [ R.text "Drag me somewhere" ]
134+ [ jsx card { className: classes.card } [ R.text "Drag me somewhere" ]