1module Container.Sidebar where
4import Data.Foldable (intercalate)
5import Data.Monoid (guard)
7import JSS (jss, jssClasses)
8import React.Basic (JSX)
9import React.Basic.DOM as R
10import React.Basic.Events (handler_)
11import React.Basic.Hooks (ReactComponent, component, element)
12import React.Basic.Hooks as React
13import Yoga.SVG.Icon (ActiveArrowDirection(..), mkMenu)
14import Yoga.Theme.Styles (makeStylesJSS)
15import Yoga.Theme.Types (CSSTheme)
21 , modifyCollapsed ∷ (Boolean -> Boolean) -> Effect Unit
28 $ jssClasses \(theme ∷ CSSTheme) ->
31 { background: theme.interfaceColourLighter
32 , fontFamily: intercalate ", " theme.textFontFamily
33 , borderRadius: "0 12px 12px 0"
34 , color: theme.textColour
35 , position: "absolute"
36 , marginTop: "calc(100vh + 20px)"
37 , paddingBottom: "20px"
39 , flexDirection: "column"
41 , transitionTimingFunction: "cubic-bezier(.56,-0.32,.36,1)"
45 "0px 0px 60px rgba(0,0,0,0."
46 <> (if theme.isLight then "17" else "43")
49 , sidebarCollapsed: jss { width: "70px" }
50 , sidebarExpanded: jss { width: "220px" }
55 , padding: "0 5px 0 5px"
56 , transition: "0.2s ease-in-out"
57 , transitionDelay: "0.1s"
58 , alignSelf: "flex-end"
62 {} -- transform: "rotate(180deg)"}
65 component "Sidebar" \{ kids, collapsed, modifyCollapsed } -> React.do
66 classes <- useStyles {}
69 { className: classes.sidebar <> " " <> if collapsed then classes.sidebarCollapsed else classes.sidebarExpanded
72 { className: classes.logo <> " " <> guard collapsed classes.logoCollapsed
73 , onClick: handler_ $ (modifyCollapsed not)
76 { activeArrowDirection: if collapsed then ArrowPointsRight else ArrowPointsLeft }
83mkSidebarLink ∷ Effect (ReactComponent { name ∷ String, icon ∷ JSX, collapsed ∷ Boolean })
87 $ jssClasses \(theme ∷ CSSTheme) ->
90 { fontFamily: intercalate ", " theme.headingFontFamily
91 , alignSelf: "flex-end"
92 , justifyContent: "space-between"
93 , alignContent: "stretch"
94 , color: theme.textColour
97 , flexDirection: "row"
101 , borderRadius: "5px 0 0 5px"
104 { background: theme.highlightColour
106 -- , "&:hover": jss{ opacity: "1.0"}
110 { fontFamily: intercalate ", " theme.textFontFamily
111 , color: theme.textColour
112 , paddingLeft: "20px"
113 , textTransform: "uppercase"
121 , padding: "5px 10px 5px 5px"
122 , transition: "0.2s ease-in-out"
123 , transitionDelay: "0.1s"
124 , alignSelf: "flex-end"
125 , fill: theme.textColour
128 component "SidebarLink" \{ name, icon, collapsed } -> React.do
129 classes <- useStyles {}
132 { className: classes.sidebarEntry
135 { className: classes.label
136 , children: [ R.text name ]
139 { 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