5import Data.Maybe (Maybe(..), fromMaybe)
6import Data.Tuple.Nested ((/\))
9import MDXProvider (MdxProviderProps)
10import Milkis.Impl (FetchImpl)
11import React.Basic (ReactComponent)
12import React.Basic.DOM as R
13import React.Basic.Emotion as Emotion
14import React.Basic.Hooks (ReactChildren, element, reactComponentWithChildren, useState')
15import React.Basic.Hooks as React
16import Yoga ((/>), (</), (</*))
18import Yoga.Block as Block
19import Yoga.Block.Atom.Toggle.Types (TogglePosition(..))
20import Yoga.Block.Container as Container
21import Yoga.Block.Container.Style (DarkOrLightMode(..), colour)
22import Yoga.Block.Icon.SVG as Icon
23import Yoga.Block.Internal (_0)
24import Yoga.Block.Modal as Modal
29 , menuLinks ∷ Array { name ∷ String, link ∷ String }
34 = ShowModal Modal.Props
41 { children ∷ ReactChildren MDX
42 , siteInfo ∷ SiteQueryResult
43 , mdxProviderComponent ∷ ReactComponent MdxProviderProps
46mkLayout fetchImpl = do
47 -- mdxProviderComponent <- mkMdxProviderComponent (apiCompiler fetchImpl)
48 reactComponentWithChildren "MDXLayout" \{ children, siteInfo, mdxProviderComponent } -> React.do
49 darkOrLightMode /\ setDarkOrLightMode <- useState' Nothing
50 togglePosition /\ setTogglePosition <- useState' ToggleIsLeft
52 themeToMaybeTogglePosition =
55 DarkMode -> ToggleIsRight
56 LightMode -> ToggleIsLeft
60 { className: "dark-light-toggle"
63 { marginRight: Emotion.str "0"
64 , marginLeft: Emotion.str "auto"
68 ToggleIsLeft -> setDarkOrLightMode (Just LightMode)
69 ToggleIsRight -> setDarkOrLightMode (Just DarkMode)
70 , togglePosition: themeToMaybeTogglePosition # fromMaybe togglePosition
75 , stroke: Emotion.str "#eef"
81 , stroke: Emotion.str "yellow"
84 Color.hsl 205.0 1.0 0.80
86 Color.hsl 250.0 1.0 0.1
90 </ { className: "top-box"
93 { background: Emotion.str colour.backgroundLayer5
97 </* { justify: "space-between"
100 , css: Emotion.css { width: Emotion.percent 100.0 }
105 { className: "blog-header"
108 { fontSize: Emotion.str "min(var(--s3), calc(var(--s1) + 1vw))"
109 , textTransform: Emotion.str "uppercase"
110 , letterSpacing: Emotion.str "calc(min(var(--s0) + 3vw), var(--s2) * -1.7)"
111 , fontWeight: Emotion.str "300"
112 , color: Emotion.str colour.text
115 [ R.text siteInfo.siteMetadata.title ]
120 $ element Container.component
121 { themeVariant: darkOrLightMode
122 , onPreferredSystemThemeChange:
124 LightMode -> setTogglePosition ToggleIsLeft
125 DarkMode -> setTogglePosition ToggleIsRight
128 { className: "blog-content"
133 { minHeight: Emotion.vh 100.0
134 , background: Emotion.str colour.background
135 , borderRadius: Emotion.str "0 var(--s1) var(--s1) 0"
140 </* { className: "centre"
143 , css: Emotion.css { maxWidth: Emotion.ch 90.0 }
147 { padding: Emotion.px 16
150 { "& > p:first-of-type:first-letter":
153 { overflow: Emotion.str "visible"
154 , float: Emotion.str "left"
155 , fontSize: Emotion.str "min(calc(var(--s0) * 1 + 8.03vw), var(--s5))"
156 , fontFamily: Emotion.str "Cormorant Garamond"
157 , lineHeight: Emotion.str "min(calc(var(--s-1) + 2px + 3vw), var(--s3))"
158 , marginTop: Emotion.str "min(calc(var(--s-1) + 1.5vw), var(--s2))"
159 , marginRight: Emotion.var "--s-2"
163 { color: Emotion.str colour.highlightText
164 , background: Emotion.str "green" -- colour.highlight
169 /> [ element mdxProviderComponent
175 { className: "blog-footer"
178 { background: Emotion.str colour.backgroundLayer1
179 , borderTop: Emotion.str $ "1px solid " <> colour.backgroundLayer3
180 , color: Emotion.str colour.text
183 [ R.text "Mark Eibes" ]
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