4import Yoga.CSS.Safer (cssSafer)
5import Yoga.Theme.CSSBaseline (mkCssBaseline)
6import Yoga.CompileEditor.Component (mkCompileEditor)
7import Data.Array as Array
8import Data.Maybe (Maybe(..), fromMaybe)
9import Data.Nullable (Nullable)
10import Data.Nullable as Nullable
11import Data.String as String
13import Yoga.Header.Component (mkHeader)
14import Milkis.Impl (FetchImpl)
15import Yoga.Panel.Component (makeComponent) as Panel
16import React.Basic (JSX, ReactComponent)
17import React.Basic.DOM (unsafeCreateDOMComponent)
18import React.Basic.DOM as R
19import React.Basic.Hooks (ReactChildren, component, componentWithChildren, element, reactChildrenFromArray, reactChildrenToArray)
20import React.Basic.Hooks as React
21import Yoga.Theme (fromTheme)
22import Yoga.Theme.Default (darkTheme)
23import Yoga.Theme.Provider (mkThemeProvider)
24import Yoga.Theme.Styles (makeStyles)
25import Yoga.Theme.Types (CSSTheme)
26import Yoga.Typography.Header (HeadingLevel(..), mkH)
27import Yoga.Typography.Paragraph (mkP)
33 , menuLinks ∷ Array { name ∷ String, link ∷ String }
43 { mdxType ∷ Nullable String
44 , children ∷ Nullable String
45 , className ∷ Nullable String
54 { children ∷ ReactChildren JSX
55 , siteInfo ∷ SiteQueryResult
58mkLayout fetchImpl = do
59 themeProvider <- mkThemeProvider
60 mdxProviderComponent <- mkMdxProviderComponent fetchImpl
61 componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
63 $ element themeProvider
64 { theme: fromTheme darkTheme
66 [ element mdxProviderComponent
73mkMdxProviderComponent ∷
77 { children ∷ ReactChildren JSX
78 , siteInfo ∷ SiteQueryResult
81mkMdxProviderComponent fetchImpl = do
82 cssBaseline <- mkCssBaseline
83 editor <- mkCompileEditor fetchImpl
89 makeStyles \(theme :: CSSTheme) ->
92 { fontFamily: "PragmataPro Liga"
93 , backgroundColor: theme.interfaceColour
95 , border: "1px solid #383c39"
102 , marginRight: "35px"
107 , flexDirection: "row"
110 componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
113 baseline child = element cssBaseline { kids: child }
118 [ element header { kids: [ R.text siteInfo.site.siteMetadata.title ], className: "" }
119 , element sidebar { links: siteInfo.site.siteMetadata.menuLinks }
120 , R.div_ (reactChildrenToArray children)
127 element h { level: H2, text: props.children, className: Just classes.margins }
130 element h { level: H3, text: props.children, className: Just classes.margins }
133 element h { level: H4, text: props.children, className: Just classes.margins }
137 { children: [ element p { text: props.children } ]
138 , className: classes.margins
142 R.span { className: classes.code, children: props.children }
144 \(props ∷ PreProps) -> do
146 childrenQ = Nullable.toMaybe props.children
148 propsQ = (_.props >>> Nullable.toMaybe) =<< childrenQ
150 mdxTypeQ = (_.mdxType >>> Nullable.toMaybe) =<< propsQ
152 childrenQ2 = (_.children >>> Nullable.toMaybe) =<< propsQ
154 classNameQ = (_.className >>> Nullable.toMaybe) =<< propsQ
156 isCode = fromMaybe false (mdxTypeQ <#> eq "code")
161 (fromMaybe 200 >>> show >>> (_ <> "px")) do
164 ( String.split (String.Pattern "\n") code
166 # \x -> (x * 12) + 100
169 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
172 { initialCode: fromMaybe "" codeQ
177 element (unsafeCreateDOMComponent "pre") props
181 [ element mdxProvider
185 , components: mdxComponents
190 panel <- Panel.makeComponent
192 makeStyles \(theme :: CSSTheme) ->
196 , flexDirection: "row"
201 component "Sidebar" \{ links } -> React.do
205 { kids: [ R.div_ [ R.text "hahahaha"] ]
206 , className: Just classes.flexer
209foreign import mdxProvider ∷
212 { components ∷ { | r } -- TODO Don't lie
213 , children ∷ Array JSX
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