@@ -1,7 +1,7 @@
1module PSLayout where
1module PSLayout where
3import Prelude
3import Prelude
4−
4+import CSS.Safer (cssSafer)
5import CSSBaseline (mkCssBaseline)
5import CSSBaseline (mkCssBaseline)
6import CompileEditor.Component (mkCompileEditor)
6import CompileEditor.Component (mkCompileEditor)
7import Data.Array as Array
7import Data.Array as Array
@@ -15,9 +15,12 @@ import React.Basic (JSX, ReactComponent)
15import React.Basic.DOM (unsafeCreateDOMComponent)
15import React.Basic.DOM (unsafeCreateDOMComponent)
16import React.Basic.DOM as R
16import React.Basic.DOM as R
17import React.Basic.Hooks (ReactChildren, componentWithChildren, element)
17import React.Basic.Hooks (ReactChildren, componentWithChildren, element)
18+import React.Basic.Hooks as React
18import Theme (fromTheme)
19import Theme (fromTheme)
19import Theme.Default (darkTheme)
20import Theme.Default (darkTheme)
20import Theme.Provider (mkThemeProvider)
21import Theme.Provider (mkThemeProvider)
22+import Theme.Styles (makeStyles)
23+import Theme.Types (CSSTheme)
21import Typography.Header (HeadingLevel(..), mkH)
24import Typography.Header (HeadingLevel(..), mkH)
22import Typography.Paragraph (mkP)
25import Typography.Paragraph (mkP)
23import Unsafe.Coerce (unsafeCoerce)
26import Unsafe.Coerce (unsafeCoerce)
@@ -25,6 +28,18 @@ import Unsafe.Coerce (unsafeCoerce)
25type SiteQueryResult
28type SiteQueryResult
26 = { site ∷ { siteMetadata ∷ { title ∷ String } } }
29 = { site ∷ { siteMetadata ∷ { title ∷ String } } }
36+ { mdxType ∷ Nullable String
37+ , children ∷ Nullable String
38+ , className ∷ Nullable String
29 ∀ children.
44 ∀ children.
30 FetchImpl ->
45 FetchImpl ->
@@ -36,11 +51,52 @@ mkLayout ∷
37mkLayout fetchImpl = do
52mkLayout fetchImpl = do
38 themeProvider <- mkThemeProvider
53 themeProvider <- mkThemeProvider
54+ mdxProviderComponent <- mkMdxProviderComponent fetchImpl
55+ componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
57+ $ element themeProvider
58+ { theme: fromTheme darkTheme
60+ [ element mdxProviderComponent
67+mkMdxProviderComponent ::
72+ { children ∷ ReactChildren children
73+ , siteInfo ∷ SiteQueryResult
76+mkMdxProviderComponent fetchImpl = do
39 cssBaseline <- mkCssBaseline
77 cssBaseline <- mkCssBaseline
40 editor <- mkCompileEditor fetchImpl
78 editor <- mkCompileEditor fetchImpl
82+ makeStyles \(theme :: CSSTheme) ->
85+ { fontFamily: "PragmataPro Liga"
86+ , backgroundColor: theme.interfaceColour
88+ , border: "1px solid #383c39"
90+ , borderRadius: "3px"
95+ , marginRight: "35px"
43− componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
98+ componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
45 baseline child = element cssBaseline { kids: child }
101 baseline child = element cssBaseline { kids: child }
@@ -59,29 +115,24 @@ mkLayout fetchImpl = do
59 mdxComponents =
115 mdxComponents =
61 \props ->
117 \props ->
62− element h { level: H2, text: props.children, className: Nothing }
118+ element h { level: H2, text: props.children, className: Just classes.margins }
64 \props ->
120 \props ->
65− element h { level: H3, text: props.children, className: Nothing }
121+ element h { level: H3, text: props.children, className: Just classes.margins }
67 \props ->
123 \props ->
68− element h { level: H4, text: props.children, className: Nothing }
124+ element h { level: H4, text: props.children, className: Just classes.margins }
70 \props ->
126 \props ->
71− element p { text: props.children }
128+ { children: [ element p { text: props.children } ]
72− , pre:
129+ , className: classes.margins
78− { mdxType ∷ Nullable String
79− , children ∷ Nullable String
80− , className ∷ Nullable String
84− ) -> do
131+ , inlineCode:
133+ R.span { className: classes.code, children: props.children }
135+ \(props ∷ PreProps) -> do
86 childrenQ = Nullable.toMaybe props.children
137 childrenQ = Nullable.toMaybe props.children
@@ -97,12 +148,15 @@ mkLayout fetchImpl = do
98 codeQ = childrenQ2
149 codeQ = childrenQ2
100− height = (fromMaybe 200 >>> show >>> (_ <> "px")) do
152+ (fromMaybe 200 >>> show >>> (_ <> "px")) do
101− code <- codeQ
153+ code <- codeQ
102− pure (String.split (String.Pattern "\n") code
155+ ( String.split (String.Pattern "\n") code
103− # Array.length
156+ # Array.length
104− # \x -> (x * 12) + 100
157+ # \x -> (x * 12) + 100
106 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
160 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
107 if isCode then
161 if isCode then
108 element editor
162 element editor
@@ -114,17 +168,12 @@ mkLayout fetchImpl = do
114 element (unsafeCreateDOMComponent "pre") props
168 element (unsafeCreateDOMComponent "pre") props
117− $ element themeProvider
118− { theme: fromTheme darkTheme
120− [ baseline
171+ $ baseline
121− [ element mdxProvider
172+ [ element mdxProvider
122− { children: [ siteInfoJSX ]
173+ { children: [ siteInfoJSX ]
123− , components: mdxComponents
174+ , components: mdxComponents
129foreign import mdxProvider ∷
178foreign import mdxProvider ∷