Skip to content

Commit 9afe4bc

Browse files
authored
Initial Details/Accordion component (#36)
1 parent 9e02295 commit 9afe4bc

File tree

5 files changed

+108
-0
lines changed

5 files changed

+108
-0
lines changed

bower.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"purescript-js-timers": "^4.0.1",
4343
"purescript-heterogeneous": ">=0.3.0 <0.5.0",
4444
"purescript-free": "^5.1.0",
45+
"purescript-react-basic-hooks": "^0.6.1",
4546
"purescript-colors": "^5.0.0"
4647
},
4748
"devDependencies": {

docs/App.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ const componentLoaders = [
5757
"CardGrid",
5858
"Color",
5959
"Column",
60+
"Details",
6061
"Divider",
6162
"DropdownButton",
6263
"EditableTable",

docs/Examples/Details.example.purs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
module Lumi.Components.Examples.Details where
2+
3+
import Prelude
4+
5+
import Lumi.Components.Border (borderBottom, borderTop)
6+
import Lumi.Components.Column (column_)
7+
import Lumi.Components.Details (defaults, details)
8+
import Lumi.Components.Divider (divider_)
9+
import Lumi.Components.Example (example)
10+
import Lumi.Components.Icon as Icon
11+
import Lumi.Components.Row (row)
12+
import Lumi.Components.Spacing (Space(..), hspace, vspace)
13+
import Lumi.Components.Text (body_, h2_, subsectionHeader_)
14+
import React.Basic (JSX)
15+
import React.Basic.DOM as R
16+
17+
docs :: JSX
18+
docs =
19+
column_
20+
[ h2_ "Bare/defaults"
21+
, example $
22+
details defaults
23+
{ expanded = body_ "Here's all the info"
24+
}
25+
26+
, h2_ "Custom arrow"
27+
, example $
28+
details defaults
29+
{ summary = iconSummary $ subsectionHeader_ "Details"
30+
, expanded = body_ "Here's all the info"
31+
}
32+
33+
, h2_ "Accordion"
34+
, example $
35+
borderTop $ borderBottom $
36+
details defaults
37+
{ summary = iconSummary $ subsectionHeader_ "Details"
38+
, expanded =
39+
column_
40+
[ vspace S8
41+
, divider_
42+
, vspace S8
43+
, body_ "Here's all the info"
44+
]
45+
}
46+
]
47+
where
48+
iconSummary child =
49+
row
50+
{ style: R.css { alignItems: "center" }
51+
, children: [ Icon.icon_ Icon.ArrowRight, hspace S8, child ]
52+
}

src/Lumi/Components/Details.purs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
module Lumi.Components.Details where
2+
3+
import Prelude
4+
5+
import Effect.Unsafe (unsafePerformEffect)
6+
import JSS (JSS, jss)
7+
import Lumi.Components.Icon (icon_)
8+
import Lumi.Components.Text (body_)
9+
import React.Basic.DOM as R
10+
import React.Basic.Hooks (JSX, component, element)
11+
12+
type DetailsProps =
13+
{ summary :: JSX
14+
, expanded :: JSX
15+
, defaultOpen :: Boolean
16+
}
17+
18+
details :: DetailsProps -> JSX
19+
details = element $ unsafePerformEffect do
20+
component "Details" \props ->
21+
pure $ R.details
22+
{ className: "lumi"
23+
, children:
24+
[ R.summary
25+
{ className: "lumi"
26+
, children: [ props.summary ]
27+
}
28+
, props.expanded
29+
]
30+
}
31+
32+
defaults :: DetailsProps
33+
defaults =
34+
{ summary: body_ "Details"
35+
, expanded: mempty
36+
, defaultOpen: false
37+
}
38+
39+
styles :: JSS
40+
styles = jss
41+
{ "@global":
42+
{ "details.lumi":
43+
{ "& > summary.lumi":
44+
{ listStyle: "none"
45+
46+
, "&:focus":
47+
{ outline: "none"
48+
}
49+
}
50+
}
51+
}
52+
}

src/Lumi/Components/Styles.purs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import Lumi.Components.Card as Card
1616
import Lumi.Components.CardGrid as CardGrid
1717
import Lumi.Components.Color (colors)
1818
import Lumi.Components.Column as Column
19+
import Lumi.Components.Details as Details
1920
import Lumi.Components.Divider as Divider
2021
import Lumi.Components.DropdownButton as DropdownButton
2122
import Lumi.Components.EditableTable as EditableTable
@@ -71,6 +72,7 @@ attachGlobalComponentStyles = do
7172
, Card.styles
7273
, CardGrid.styles
7374
, Column.styles
75+
, Details.styles
7476
, Divider.styles
7577
, DropdownButton.styles
7678
, EditableTable.styles

0 commit comments

Comments
 (0)