Skip to content

Commit 1390bd2

Browse files
committed
component variants
1 parent ad5c8df commit 1390bd2

File tree

2 files changed

+76
-22
lines changed

2 files changed

+76
-22
lines changed

docs/Examples/Border.example.purs

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module Lumi.Components.Examples.Border where
33
import Prelude
44

55
import Data.Maybe (Maybe(..))
6-
import Lumi.Components.Border (border, border_)
6+
import Lumi.Components.Border (border, borderSquare, borderRound, borderTop, borderBottom)
77
import Lumi.Components.Column (column, column_)
88
import Lumi.Components.Example (example)
99
import Lumi.Components.Spacing (Space(..))
@@ -17,20 +17,30 @@ docs =
1717
column_
1818
[ h2_ "Rounded borders"
1919
, example
20-
$ border_ $
20+
$ borderRound $
2121
column
2222
{ children: [ R.text "bordered element" ]
2323
, style: R.css { padding: "12px" }
2424
}
2525
, h2_ "Square borders"
2626
, example
27-
$ border
28-
{ children:
29-
column
30-
{ children: [ R.text "bordered element" ]
31-
, style: R.css { padding: "12px" }
32-
}
33-
, roundedBorders: false
34-
, style: R.css {}
35-
}
27+
$ borderSquare $
28+
column
29+
{ children: [ R.text "bordered element" ]
30+
, style: R.css { padding: "12px" }
31+
}
32+
, h2_ "Top borders"
33+
, example
34+
$ borderTop $
35+
column
36+
{ children: [ R.text "bordered element" ]
37+
, style: R.css { padding: "12px" }
38+
}
39+
, h2_ "Bottom borders"
40+
, example
41+
$ borderBottom $
42+
column
43+
{ children: [ R.text "bordered element" ]
44+
, style: R.css { padding: "12px" }
45+
}
3646
]

src/Lumi/Components/Border.purs

Lines changed: 55 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,26 @@ import Color (cssStringHSLA)
66
import Lumi.Components.Color (colors)
77
import JSS (JSS, jss)
88
import React.Basic (Component, JSX, createComponent, element, makeStateless)
9-
import React.Basic.DOM (CSS, unsafeCreateDOMComponent)
10-
import React.Basic.DOM as R
9+
import React.Basic.DOM (unsafeCreateDOMComponent)
10+
11+
data BorderStyle
12+
= Top
13+
| Bottom
14+
| Round
15+
| Square
16+
17+
toStyle :: BorderStyle -> String
18+
toStyle Top = "top"
19+
toStyle Bottom = "bottom"
20+
toStyle Round = "round"
21+
toStyle Square = "square"
1122

1223
component :: Component BorderProps
1324
component = createComponent "Border"
1425

1526
type BorderProps =
1627
{ children :: JSX
17-
, roundedBorders :: Boolean
18-
, style :: CSS
28+
, borderStyle :: BorderStyle
1929
}
2030

2131
border :: BorderProps -> JSX
@@ -25,27 +35,61 @@ border = makeStateless component render
2535

2636
render props =
2737
lumiBorderElement
28-
{ "data-rounded-borders": props.roundedBorders
38+
{ "data-border-style": toStyle props.borderStyle
2939
, children: props.children
30-
, style: props.style
3140
}
3241

33-
border_ :: JSX -> JSX
34-
border_ children =
42+
borderSquare :: JSX -> JSX
43+
borderSquare children =
44+
border
45+
{ children
46+
, borderStyle: Square
47+
}
48+
49+
borderRound :: JSX -> JSX
50+
borderRound children =
3551
border
3652
{ children
37-
, style: R.css {}
38-
, roundedBorders: true
53+
, borderStyle: Round
3954
}
4055

56+
borderTop :: JSX -> JSX
57+
borderTop children =
58+
border
59+
{ children
60+
, borderStyle: Top
61+
}
62+
63+
borderBottom :: JSX -> JSX
64+
borderBottom children =
65+
border
66+
{ children
67+
, borderStyle: Bottom
68+
}
69+
70+
4171
styles :: JSS
4272
styles = jss
4373
{ "@global":
4474
{ "lumi-border":
4575
{ border: "1px solid " <> cssStringHSLA colors.black3
4676
, overflow: "hidden"
47-
, "&[data-rounded-borders=true]":
77+
, "&[data-border-style='round']":
4878
{ borderRadius: "5px" }
79+
, "&[data-border-style='square']":
80+
{ borderRadius: "0px" }
81+
, "&[data-border-style='top']":
82+
{ borderTopRightRadius: "5px"
83+
, borderTopLeftRadius: "5px"
84+
, borderBottomRightRadius: "0px"
85+
, borderBottomLeftRadius: "0px"
86+
}
87+
, "&[data-border-style='bottom']":
88+
{ borderTopRightRadius: "0px"
89+
, borderTopLeftRadius: "0px"
90+
, borderBottomRightRadius: "5px"
91+
, borderBottomLeftRadius: "5px"
92+
}
4993
}
5094
}
5195
}

0 commit comments

Comments
 (0)