11module Web.Atomic.CSS.Box where
22
3- import Data.Text
43import Web.Atomic.Types
54
65
76-- | Cut off the contents of the element
87truncate :: (Styleable h ) => CSS h -> CSS h
98truncate =
10- utility'
9+ utility
1110 " truncate"
12- [ prop @ Text " white-space" " nowrap"
13- , prop @ Text " overflow" " hidden"
14- , prop @ Text " text-overflow" " ellipsis"
11+ [ " white-space" :. " nowrap"
12+ , " overflow" :. " hidden"
13+ , " text-overflow" :. " ellipsis"
1514 ]
1615
1716
@@ -26,16 +25,16 @@ To create even spacing around and between all elements:
2625-}
2726pad :: (Styleable h ) => Sides Length -> CSS h -> CSS h
2827pad (All n) =
29- utility (" pad " -. n) " padding" n
28+ utility (" p " -. n) [ " padding" :. style n]
3029pad (Y n) = pad (T n) . pad (B n)
3130pad (X n) = pad (L n) . pad (R n)
3231pad (XY x y) = pad (X x) . pad (Y y)
3332pad (TRBL t r b l) =
3433 pad (T t) . pad (R r) . pad (B b) . pad (L l)
35- pad (T x) = utility (" padt " -. x) " padding-top" x
36- pad (R x) = utility (" padr " -. x) " padding-right" x
37- pad (B x) = utility (" padb " -. x) " padding-bottom" x
38- pad (L x) = utility (" padl " -. x) " padding-left" x
34+ pad (T x) = utility (" pt " -. x) [ " padding-top" :. style x]
35+ pad (R x) = utility (" pr " -. x) [ " padding-right" :. style x]
36+ pad (B x) = utility (" pb " -. x) [ " padding-bottom" :. style x]
37+ pad (L x) = utility (" pl " -. x) [ " padding-left" :. style x]
3938pad (TR t r) = pad (TRBL t r 0 0 )
4039pad (TL t l) = pad (TRBL t 0 0 l)
4140pad (BR b r) = pad (TRBL 0 r b 0 )
@@ -44,7 +43,25 @@ pad (BL b l) = pad (TRBL 0 0 b l)
4443
4544-- | The space between child elements. See 'pad'
4645gap :: (Styleable h ) => Length -> CSS h -> CSS h
47- gap n = utility (" gap" -. n) " gap" n
46+ gap n = utility (" gap" -. n) [" gap" :. style n]
47+
48+
49+ margin :: (Styleable h ) => Sides Length -> CSS h -> CSS h
50+ margin (All n) =
51+ utility (" m" -. n) [" margin" :. style n]
52+ margin (Y n) = margin (T n) . margin (B n)
53+ margin (X n) = margin (L n) . margin (R n)
54+ margin (XY x y) = margin (X x) . margin (Y y)
55+ margin (TRBL t r b l) =
56+ margin (T t) . margin (R r) . margin (B b) . margin (L l)
57+ margin (T x) = utility (" mt" -. x) [" margin-top" :. style x]
58+ margin (R x) = utility (" mr" -. x) [" margin-right" :. style x]
59+ margin (B x) = utility (" mb" -. x) [" margin-bottom" :. style x]
60+ margin (L x) = utility (" ml" -. x) [" margin-left" :. style x]
61+ margin (TR t r) = margin (TRBL t r 0 0 )
62+ margin (TL t l) = margin (TRBL t 0 0 l)
63+ margin (BR b r) = margin (TRBL 0 r b 0 )
64+ margin (BL b l) = margin (TRBL 0 0 b l)
4865
4966
5067{- | Add a drop shadow to an element
@@ -54,7 +71,7 @@ gap n = utility ("gap" -. n) "gap" n
5471-}
5572shadow :: (Styleable h , PropertyStyle Shadow a , ToClassName a ) => a -> CSS h -> CSS h
5673shadow a =
57- utility (" shadow" -. a) " box-shadow" ( propertyStyle @ Shadow a)
74+ utility (" shadow" -. a) [ " box-shadow" :. propertyStyle @ Shadow a]
5875
5976
6077data Shadow
@@ -72,26 +89,26 @@ instance PropertyStyle Shadow Inner where
7289
7390-- | Set the background color. See 'Web.View.Types.ToColor'
7491bg :: (ToColor clr , Styleable h ) => clr -> CSS h -> CSS h
75- bg c = utility (" bg" -. colorName c) " background-color" (colorValue c)
92+ bg c = utility (" bg" -. colorName c) [ " background-color" :. style (colorValue c)]
7693
7794
7895data BorderStyle
7996 = Solid
8097 | Dashed
81- deriving (Show , ToStyleValue , ToClassName )
98+ deriving (Show , ToStyle , ToClassName )
8299
83100
84101border :: (Styleable h ) => Sides PxRem -> CSS h -> CSS h
85102border s = borderWidth s . borderStyle Solid
86103
87104
88105borderStyle :: (Styleable h ) => BorderStyle -> CSS h -> CSS h
89- borderStyle s = utility (" brds" -. s) " border-style" s
106+ borderStyle s = utility (" brds" -. s) [ " border-style" :. style s]
90107
91108
92109-- | Round the corners of the element
93110rounded :: (Styleable h ) => Length -> CSS h -> CSS h
94- rounded n = utility (" rnd" -. n) " border-radius" n
111+ rounded n = utility (" rnd" -. n) [ " border-radius" :. style n]
95112
96113
97114{- | Set a border around the element
@@ -101,16 +118,16 @@ rounded n = utility ("rnd" -. n) "border-radius" n
101118-}
102119borderWidth :: (Styleable h ) => Sides PxRem -> CSS h -> CSS h
103120borderWidth (All n) =
104- utility (" brd" -. n) " border-width" n
121+ utility (" brd" -. n) [ " border-width" :. style n]
105122borderWidth (Y n) = borderWidth (T n) . borderWidth (B n)
106123borderWidth (X n) = borderWidth (L n) . borderWidth (R n)
107124borderWidth (XY x y) = borderWidth (X x) . borderWidth (Y y)
108125borderWidth (TRBL t r b l) =
109126 borderWidth (T t) . borderWidth (R r) . borderWidth (B b) . borderWidth (L l)
110- borderWidth (T x) = utility (" brdt" -. x) " border-top-width" x
111- borderWidth (R x) = utility (" brdt" -. x) " border-right-width" x
112- borderWidth (B x) = utility (" brdt" -. x) " border-bottom-width" x
113- borderWidth (L x) = utility (" brdt" -. x) " border-left-width" x
127+ borderWidth (T x) = utility (" brdt" -. x) [ " border-top-width" :. style x]
128+ borderWidth (R x) = utility (" brdt" -. x) [ " border-right-width" :. style x]
129+ borderWidth (B x) = utility (" brdt" -. x) [ " border-bottom-width" :. style x]
130+ borderWidth (L x) = utility (" brdt" -. x) [ " border-left-width" :. style x]
114131borderWidth (TR t r) = borderWidth (TRBL t r 0 0 )
115132borderWidth (TL t l) = borderWidth (TRBL t 0 0 l)
116133borderWidth (BR b r) = borderWidth (TRBL 0 r b 0 )
@@ -120,9 +137,9 @@ borderWidth (BL b l) = borderWidth (TRBL 0 0 b l)
120137-- | Set a border color. See 'Web.View.Types.ToColor'
121138borderColor :: (ToColor clr , Styleable h ) => clr -> CSS h -> CSS h
122139borderColor c =
123- utility (" brdc" -. colorName c) " border-color" (colorValue c)
140+ utility (" brdc" -. colorName c) [ " border-color" :. style (colorValue c)]
124141
125142
126143opacity :: (Styleable h ) => Float -> CSS h -> CSS h
127144opacity n =
128- utility (" opacity" -. n) " opacity" n
145+ utility (" opacity" -. n) [ " opacity" :. style n]
0 commit comments