1module Container.Sidebar where
4import Data.Monoid (guard)
6import JSS (jss, jssClasses)
7import React.Basic (JSX)
8import React.Basic.DOM as R
9import React.Basic.Events (handler_)
10import React.Basic.Hooks (ReactComponent, component, element)
11import React.Basic.Hooks as React
12import Yoga.SVG.Icon (ActiveArrowDirection(..), mkMenu)
13import Yoga.Theme.Styles (makeStylesJSS)
14import Yoga.Theme.Types (CSSTheme)
20 , modifyCollapsed ∷ (Boolean -> Boolean) -> Effect Unit
27 $ jssClasses \(theme ∷ CSSTheme) ->
30 { background: theme.interfaceColourLighter
31 , fontFamily: theme.textFontFamily
32 , borderRadius: "0 12px 12px 0"
33 , color: theme.textColour
34 , position: "absolute"
35 , marginTop: "calc(100vh + 20px)"
36 , paddingBottom: "20px"
38 , flexDirection: "column"
40 , transitionTimingFunction: "cubic-bezier(.56,-0.32,.36,1)"
44 "0px 0px 60px rgba(0,0,0,0."
45 <> (if theme.isLight then "17" else "43")
48 , sidebarCollapsed: jss { width: "70px" }
49 , sidebarExpanded: jss { width: "220px" }
54 , padding: "0 5px 0 5px"
55 , transition: "0.2s ease-in-out"
56 , transitionDelay: "0.1s"
57 , alignSelf: "flex-end"
61 {} -- transform: "rotate(180deg)"}
64 component "Sidebar" \{ kids, collapsed, modifyCollapsed } -> React.do
65 classes <- useStyles {}
68 { className: classes.sidebar <> " " <> if collapsed then classes.sidebarCollapsed else classes.sidebarExpanded
71 { className: classes.logo <> " " <> guard collapsed classes.logoCollapsed
72 , onClick: handler_ $ (modifyCollapsed not)
75 { activeArrowDirection: if collapsed then ArrowPointsRight else ArrowPointsLeft }
82mkSidebarLink ∷ Effect (ReactComponent { name ∷ String, icon ∷ JSX, collapsed ∷ Boolean })
86 $ jssClasses \(theme ∷ CSSTheme) ->
89 { fontFamily: theme.headingFontFamily
90 , alignSelf: "flex-end"
91 , justifyContent: "space-between"
92 , alignContent: "stretch"
93 , color: theme.textColour
96 , flexDirection: "row"
100 , borderRadius: "5px 0 0 5px"
103 { background: theme.highlightColour
105 -- , "&:hover": jss{ opacity: "1.0"}
109 { fontFamily: theme.textFontFamily
110 , color: theme.textColour
111 , paddingLeft: "20px"
112 , textTransform: "uppercase"
120 , padding: "5px 10px 5px 5px"
121 , transition: "0.2s ease-in-out"
122 , transitionDelay: "0.1s"
123 , alignSelf: "flex-end"
124 , fill: theme.textColour <> " !important"
127 component "SidebarLink" \{ name, icon, collapsed } -> React.do
128 classes <- useStyles {}
131 { className: classes.sidebarEntry
134 { className: classes.label
135 , children: [ R.text name ]
138 { className: classes.icon
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list