5import Color (toHexString)
6import Data.Array as Array
7import Data.Array.NonEmpty as NEA
8import Data.Maybe (Maybe(..), fromMaybe)
9import Data.Nullable (Nullable)
10import Data.Nullable as Nullable
11import Data.Semigroup.Foldable (intercalateMap)
12import Data.String as String
14import JSS (jss, jssClasses)
15import Justifill (justifill)
16import Milkis.Impl (FetchImpl)
17import React.Basic (JSX, ReactComponent)
18import React.Basic.DOM (unsafeCreateDOMComponent)
19import React.Basic.DOM as R
20import React.Basic.Helpers (jsx)
21import React.Basic.Hooks (ReactChildren, component, componentWithChildren, element, reactChildrenToArray)
22import React.Basic.Hooks as React
23import Yoga.CompileEditor.Component (mkCompileEditor)
24import Yoga.Header.Component (mkHeader)
25import Yoga.InlineCode.Component as InlineCode
26import Yoga.Theme (fromTheme)
27import Yoga.Theme.CSSBaseline (mkCssBaseline)
28import Yoga.Theme.Default (darkTheme)
29import Yoga.Theme.Provider (mkThemeProvider)
30import Yoga.Theme.Styles (makeStylesJSS)
31import Yoga.Theme.Types (CSSTheme)
32import Yoga.Typography.Header (HeadingLevel(..), mkH)
33import Yoga.Typography.Paragraph (mkP)
34import Yoga.WithSidebar.Component (makeComponent) as WithSidebar
40 , menuLinks ∷ Array { name ∷ String, link ∷ String }
50 { mdxType ∷ Nullable String
51 , children ∷ Nullable String
52 , className ∷ Nullable String
61 { children ∷ ReactChildren JSX
62 , siteInfo ∷ SiteQueryResult
65mkLayout fetchImpl = do
66 themeProvider <- mkThemeProvider
67 mdxProviderComponent <- mkMdxProviderComponent fetchImpl
68 componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
70 $ element themeProvider
71 { theme: fromTheme darkTheme
73 [ element mdxProviderComponent
80mkMdxProviderComponent ∷
84 { children ∷ ReactChildren JSX
85 , siteInfo ∷ SiteQueryResult
88mkMdxProviderComponent fetchImpl = do
89 cssBaseline <- mkCssBaseline
90 editor <- mkCompileEditor fetchImpl
93 yogaInlineCode <- InlineCode.makeComponent
98 $ jssClasses \(theme ∷ CSSTheme) ->
100 { fontFamily: theme.codeFontFamily # NEA.head
101 , backgroundColor: theme.interfaceColour
103 , border: "1px solid #383c39"
105 , borderRadius: "3px"
109 , flexDirection: "row"
112 componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
113 classes <- useStyles {}
115 baseline child = element cssBaseline { kids: child }
120 [ jsx header { className: "" } [ R.text siteInfo.site.siteMetadata.title ]
121 , element sidebar { links: siteInfo.site.siteMetadata.menuLinks }
122 , R.div_ (reactChildrenToArray children)
129 element h ({ level: H2, text: props.children, className: Nothing })
132 element h { level: H3, text: props.children, className: Nothing }
135 element h { level: H4, text: props.children , className: Nothing}
139 { children: [ element p { text: props.children } ]
143 R.span { className: classes.code, children: props.children }
145 \(props ∷ PreProps) -> do
147 childrenQ = Nullable.toMaybe props.children
149 propsQ = (_.props >>> Nullable.toMaybe) =<< childrenQ
151 mdxTypeQ = (_.mdxType >>> Nullable.toMaybe) =<< propsQ
153 childrenQ2 = (_.children >>> Nullable.toMaybe) =<< propsQ
155 classNameQ = (_.className >>> Nullable.toMaybe) =<< propsQ
157 isCode = fromMaybe false (mdxTypeQ <#> eq "code")
162 (fromMaybe 200 >>> show >>> (_ <> "px")) do
165 ( String.split (String.Pattern "\n") code
167 # \x -> (x * 12) + 100
170 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
173 { initialCode: fromMaybe "" codeQ
178 element (unsafeCreateDOMComponent "pre") props
182 [ element mdxProvider
186 , components: mdxComponents
191 withSidebar <- WithSidebar.makeComponent
194 $ jssClasses \(theme ∷ CSSTheme) ->
198 , flexDirection: "row"
203 component "Sidebar" \{ links } -> React.do
204 classes <- useStyles {}
206 $ element withSidebar
208 { sidebarChildren: [ R.div_ [ R.text "hahahaha" ] ]
209 , notSidebarChildren: [] ∷ Array JSX
213foreign import mdxProvider ∷
216 { components ∷ { | r } -- TODO Don't lie
217 , 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