@@ -2,19 +2,105 @@ module CSS.Transition where
2
2
3
3
import Prelude
4
4
5
+ import CSS.Time (Time )
6
+ import CSS.Common (browsers , none )
5
7
import CSS.String (fromString )
6
- import CSS.Property (class Val , Value )
8
+ import CSS.Property (class Val , Value , value , (!))
9
+ import CSS.Stylesheet (CSS , prefixed , key )
7
10
8
- newtype TimingFunction = TimingFunction Value
11
+ data TimingStepsValue = Start | End
12
+
13
+ derive instance eqTimingStepsValue :: Eq TimingStepsValue
14
+ derive instance ordTimingStepsValue :: Ord TimingStepsValue
15
+
16
+ instance valTimingStepsValue :: Val TimingStepsValue where
17
+ value Start = fromString " start"
18
+ value End = fromString " end"
19
+
20
+ data TimingFunction
21
+ = Ease
22
+ | EaseIn
23
+ | EaseOut
24
+ | EaseInOut
25
+ | Linear
26
+ | StepStart
27
+ | StepEnd
28
+ | Steps Int TimingStepsValue
29
+ | CubicBezier Number Number Number Number
9
30
10
31
derive instance eqTimingFunction :: Eq TimingFunction
11
32
derive instance ordTimingFunction :: Ord TimingFunction
12
33
13
34
instance valTimingFunction :: Val TimingFunction where
14
- value (TimingFunction v) = v
35
+ value Ease = fromString " ease"
36
+ value EaseIn = fromString " ease-in"
37
+ value EaseOut = fromString " ease-out"
38
+ value EaseInOut = fromString " ease-in-out"
39
+ value Linear = fromString " linear"
40
+ value StepStart = fromString " step-start"
41
+ value StepEnd = fromString " step-end"
42
+ value (Steps n v) = fromString " steps(" <> value [fromString $ show n, value v] <> fromString " )"
43
+ value (CubicBezier a b c d) = fromString " cubic-bezier(" <> value (a ! b ! c ! d) <> fromString " )"
15
44
16
- linear :: TimingFunction
17
- linear = TimingFunction $ fromString " linear"
45
+ ease :: TimingFunction
46
+ ease = Ease
47
+
48
+ easeIn :: TimingFunction
49
+ easeIn = EaseIn
18
50
19
51
easeOut :: TimingFunction
20
- easeOut = TimingFunction $ fromString " ease-out"
52
+ easeOut = EaseOut
53
+
54
+ easeInOut :: TimingFunction
55
+ easeInOut = EaseInOut
56
+
57
+ linear :: TimingFunction
58
+ linear = Linear
59
+
60
+ stepStart :: TimingFunction
61
+ stepStart = StepStart
62
+
63
+ stepEnd :: TimingFunction
64
+ stepEnd = StepEnd
65
+
66
+ steps :: Int -> TimingStepsValue -> TimingFunction
67
+ steps n = Steps n
68
+
69
+ cubicBezier :: Number -> Number -> Number -> Number -> TimingFunction
70
+ cubicBezier a b c d = CubicBezier a b c d
71
+
72
+ start :: TimingStepsValue
73
+ start = Start
74
+
75
+ end :: TimingStepsValue
76
+ end = End
77
+
78
+ transition :: String -> Time -> TimingFunction -> Time -> CSS
79
+ transition p d f e = prefixed (browsers <> fromString " transition" ) (p ! d ! f ! e)
80
+
81
+ transitionProperty :: String -> CSS
82
+ transitionProperty = key $ fromString " transition-property"
83
+
84
+ transitionProperties :: Array String -> CSS
85
+ transitionProperties [] = key (fromString " transition-property" ) (none :: Value )
86
+ transitionProperties xs = key (fromString " transition-property" ) xs
87
+
88
+ transitionDuration :: String -> CSS
89
+ transitionDuration = key $ fromString " transition-duration"
90
+
91
+ transitionDurations :: Array String -> CSS
92
+ transitionDurations [] = key (fromString " transition-duration" ) (none :: Value )
93
+ transitionDurations xs = key (fromString " transition-duration" ) xs
94
+
95
+ transitionTimingFunction :: TimingFunction -> CSS
96
+ transitionTimingFunction = key $ fromString " transition-timing-function"
97
+
98
+ transitionTimingFunctions :: Array TimingFunction -> CSS
99
+ transitionTimingFunctions [] = key (fromString " transition-timing-function" ) (none :: Value )
100
+ transitionTimingFunctions xs = key (fromString " transition-timing-function" ) xs
101
+
102
+ transitionDelay :: Time -> CSS
103
+ transitionDelay = key $ fromString " transition-delay"
104
+
105
+ transitionDelays :: Array Time -> CSS
106
+ transitionDelays = key $ fromString " transition-delay"
0 commit comments