mirror of
https://github.com/rowtype-yoga/psfp.git
synced 2024-09-11 16:25:36 +03:00
Components to 0.14
This commit is contained in:
parent
3ddabbe512
commit
2001db5010
@ -58,17 +58,14 @@
|
|||||||
"monaco-editor": "^0.20.0",
|
"monaco-editor": "^0.20.0",
|
||||||
"monaco-editor-webpack-plugin": "^1.8.2",
|
"monaco-editor-webpack-plugin": "^1.8.2",
|
||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"purescript": "^0.13.8",
|
"purescript": "^0.14.0",
|
||||||
"purescript-psa": "^0.7.3",
|
|
||||||
"purs-loader": "^3.6.0",
|
|
||||||
"purty": "^6.2.0",
|
|
||||||
"react": "^16.13.1",
|
"react": "^16.13.1",
|
||||||
"react-dom": "^16.13.1",
|
"react-dom": "^16.13.1",
|
||||||
"react-hot-loader": "^4.12.21",
|
"react-hot-loader": "^4.12.21",
|
||||||
"react-monaco-editor": "^0.36.0",
|
"react-monaco-editor": "^0.36.0",
|
||||||
"react-svg-loader": "^3.0.3",
|
"react-svg-loader": "^3.0.3",
|
||||||
"smoothscroll-polyfill": "^0.4.4",
|
"smoothscroll-polyfill": "^0.4.4",
|
||||||
"spago": "^0.15.2",
|
"spago": "^0.19.1",
|
||||||
"typescript": "^3.7.5",
|
"typescript": "^3.7.5",
|
||||||
"webpack": "^4.41.0",
|
"webpack": "^4.41.0",
|
||||||
"webpack-cli": "^3.3.6",
|
"webpack-cli": "^3.3.6",
|
||||||
@ -76,4 +73,4 @@
|
|||||||
"webpack-merge": "^4.2.2",
|
"webpack-merge": "^4.2.2",
|
||||||
"wrappy": "^1.0.2"
|
"wrappy": "^1.0.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -116,20 +116,14 @@ let additions =
|
|||||||
}
|
}
|
||||||
-------------------------------
|
-------------------------------
|
||||||
-}
|
-}
|
||||||
|
|
||||||
|
|
||||||
let upstream =
|
let upstream =
|
||||||
https://github.com/purescript/package-sets/releases/download/psc-0.13.8-20201223/packages.dhall sha256:a1a8b096175f841c4fef64c9b605fb0d691229241fd2233f6cf46e213de8a185
|
https://github.com/purescript/package-sets/releases/download/psc-0.14.0-20210318/packages.dhall sha256:98bbacd65191cef354ecbafa1610be13e183ee130491ab9c0ef6e3d606f781b5
|
||||||
|
|
||||||
let overrides =
|
let overrides =
|
||||||
{ css =
|
{ css =
|
||||||
upstream.css
|
upstream.css
|
||||||
// { repo = "https://github.com/i-am-the-slime/purescript-css.git"
|
// { repo = "https://github.com/i-am-the-slime/purescript-css.git"
|
||||||
, version = "8ea0bab17c268d9c62a09892d7ba231dcbe6308b"
|
, version = "39c9a9d4344e97e561eeac26eb2ce065c12bfcb1"
|
||||||
}
|
|
||||||
, react-testing-library =
|
|
||||||
upstream.react-testing-library
|
|
||||||
// { version = "main"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,6 +147,8 @@ let additions =
|
|||||||
}
|
}
|
||||||
, yoga-components = ../components/spago.dhall as Location
|
, yoga-components = ../components/spago.dhall as Location
|
||||||
, ry-blocks = ../../ry-blocks/spago.dhall as Location
|
, ry-blocks = ../../ry-blocks/spago.dhall as Location
|
||||||
|
, react-testing-library =
|
||||||
|
../../purescript-react-testing-library/spago.dhall as Location
|
||||||
}
|
}
|
||||||
|
|
||||||
in upstream // overrides // additions
|
in upstream // overrides // additions
|
||||||
|
@ -18,10 +18,8 @@ You can edit this file as you like.
|
|||||||
, "react-basic-dom"
|
, "react-basic-dom"
|
||||||
, "react-basic-hooks"
|
, "react-basic-hooks"
|
||||||
, "react-testing-library"
|
, "react-testing-library"
|
||||||
, "record-extra"
|
|
||||||
, "refs"
|
, "refs"
|
||||||
, "ry-blocks"
|
, "ry-blocks"
|
||||||
, "simple-json"
|
|
||||||
, "spec-discovery"
|
, "spec-discovery"
|
||||||
, "string-parsers"
|
, "string-parsers"
|
||||||
, "untagged-union"
|
, "untagged-union"
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
module React.Basic.Hooks.Spring.Stories where
|
module React.Basic.Hooks.Spring.Stories where
|
||||||
|
|
||||||
import Prelude hiding (add)
|
import Prelude hiding (add)
|
||||||
|
|
||||||
import CSS (backgroundColor, height, position, relative, vh, vw, width)
|
import CSS (backgroundColor, height, position, relative, vh, vw, width)
|
||||||
import Data.Generic.Rep (class Generic)
|
|
||||||
import Data.Generic.Rep.Eq (genericEq)
|
|
||||||
import Data.Int (pow)
|
import Data.Int (pow)
|
||||||
import Data.Time.Duration (Seconds(..), convertDuration)
|
import Data.Time.Duration (Seconds(..), convertDuration)
|
||||||
import Data.Tuple.Nested ((/\))
|
import Data.Tuple.Nested ((/\))
|
||||||
@ -143,9 +140,7 @@ data Countdown
|
|||||||
| CountdownRunning Int
|
| CountdownRunning Int
|
||||||
| CountdownFinished
|
| CountdownFinished
|
||||||
|
|
||||||
derive instance genericCountdown ∷ Generic Countdown _
|
derive instance eqCountdown ∷ Eq Countdown
|
||||||
instance eqCountdown ∷ Eq Countdown where
|
|
||||||
eq = genericEq
|
|
||||||
|
|
||||||
mkCountdown ∷ Effect (ReactComponent {})
|
mkCountdown ∷ Effect (ReactComponent {})
|
||||||
mkCountdown = do
|
mkCountdown = do
|
||||||
|
7
components/src/Simple/JSON.js
Normal file
7
components/src/Simple/JSON.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
exports._parseJSON = JSON.parse;
|
||||||
|
|
||||||
|
exports._undefined = undefined;
|
||||||
|
|
||||||
|
exports.unsafeStringify = function (x) {
|
||||||
|
return JSON.stringify(x);
|
||||||
|
};
|
421
components/src/Simple/JSON.purs
Normal file
421
components/src/Simple/JSON.purs
Normal file
@ -0,0 +1,421 @@
|
|||||||
|
module Simple.JSON
|
||||||
|
( E
|
||||||
|
, readJSON
|
||||||
|
, readJSON'
|
||||||
|
, readJSON_
|
||||||
|
, writeJSON
|
||||||
|
, write
|
||||||
|
, read
|
||||||
|
, read'
|
||||||
|
, read_
|
||||||
|
, parseJSON
|
||||||
|
, undefined
|
||||||
|
, class ReadForeign
|
||||||
|
, readImpl
|
||||||
|
, class ReadForeignFields
|
||||||
|
, getFields
|
||||||
|
, class ReadForeignVariant
|
||||||
|
, readVariantImpl
|
||||||
|
, class WriteForeign
|
||||||
|
, writeImpl
|
||||||
|
, class WriteForeignFields
|
||||||
|
, writeImplFields
|
||||||
|
, class WriteForeignVariant
|
||||||
|
, writeVariantImpl
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Prelude
|
||||||
|
import Control.Alt ((<|>))
|
||||||
|
import Control.Monad.Except (ExceptT(..), except, runExcept, runExceptT, withExcept)
|
||||||
|
import Data.Array.NonEmpty (NonEmptyArray, fromArray, toArray)
|
||||||
|
import Data.Bifunctor (lmap)
|
||||||
|
import Data.Either (Either(..), hush, note)
|
||||||
|
import Data.Identity (Identity(..))
|
||||||
|
import Data.List.NonEmpty (singleton)
|
||||||
|
import Data.Maybe (Maybe(..), maybe)
|
||||||
|
import Data.Nullable (Nullable, toMaybe, toNullable)
|
||||||
|
import Data.Symbol (class IsSymbol, reflectSymbol)
|
||||||
|
import Data.Traversable (sequence, traverse)
|
||||||
|
import Data.TraversableWithIndex (traverseWithIndex)
|
||||||
|
import Data.Variant (Variant, inj, on)
|
||||||
|
import Effect.Exception (message, try)
|
||||||
|
import Effect.Uncurried as EU
|
||||||
|
import Effect.Unsafe (unsafePerformEffect)
|
||||||
|
import Foreign (F, Foreign, ForeignError(..), MultipleErrors, fail, isNull, isUndefined, readArray, readBoolean, readChar, readInt, readNull, readNumber, readString, tagOf, unsafeFromForeign, unsafeToForeign)
|
||||||
|
import Foreign.Index (readProp)
|
||||||
|
import Foreign.Object (Object)
|
||||||
|
import Foreign.Object as Object
|
||||||
|
import Partial.Unsafe (unsafeCrashWith)
|
||||||
|
import Prim.Row as Row
|
||||||
|
import Prim.RowList (class RowToList, Cons, Nil, RowList)
|
||||||
|
import Record (get)
|
||||||
|
import Record.Builder (Builder)
|
||||||
|
import Record.Builder as Builder
|
||||||
|
import Type.Prelude (Proxy(..))
|
||||||
|
|
||||||
|
-- | An alias for the Either result of decoding
|
||||||
|
type E a =
|
||||||
|
Either MultipleErrors a
|
||||||
|
|
||||||
|
-- | Read a JSON string to a type `a` while returning a `MultipleErrors` if the
|
||||||
|
-- | parsing failed.
|
||||||
|
readJSON ∷
|
||||||
|
∀ a.
|
||||||
|
ReadForeign a =>
|
||||||
|
String ->
|
||||||
|
E a
|
||||||
|
readJSON = runExcept <<< (readImpl <=< parseJSON)
|
||||||
|
|
||||||
|
-- | Read a JSON string to a type `a` using `F a`. Useful with record types.
|
||||||
|
readJSON' ∷
|
||||||
|
∀ a.
|
||||||
|
ReadForeign a =>
|
||||||
|
String ->
|
||||||
|
F a
|
||||||
|
readJSON' = readImpl <=< parseJSON
|
||||||
|
|
||||||
|
-- | Read a JSON string to a type `a` while returning `Nothing` if the parsing
|
||||||
|
-- | failed.
|
||||||
|
readJSON_ ∷
|
||||||
|
∀ a.
|
||||||
|
ReadForeign a =>
|
||||||
|
String ->
|
||||||
|
Maybe a
|
||||||
|
readJSON_ = hush <<< readJSON
|
||||||
|
|
||||||
|
-- | Write a JSON string from a type `a`.
|
||||||
|
writeJSON ∷
|
||||||
|
∀ a.
|
||||||
|
WriteForeign a =>
|
||||||
|
a ->
|
||||||
|
String
|
||||||
|
writeJSON = unsafeStringify <<< writeImpl
|
||||||
|
|
||||||
|
write ∷
|
||||||
|
∀ a.
|
||||||
|
WriteForeign a =>
|
||||||
|
a ->
|
||||||
|
Foreign
|
||||||
|
write = writeImpl
|
||||||
|
|
||||||
|
-- | Read a Foreign value to a type
|
||||||
|
read ∷
|
||||||
|
∀ a.
|
||||||
|
ReadForeign a =>
|
||||||
|
Foreign ->
|
||||||
|
E a
|
||||||
|
read = runExcept <<< readImpl
|
||||||
|
|
||||||
|
-- | Read a value of any type as Foreign to a type
|
||||||
|
readAsForeign ∷
|
||||||
|
∀ a b.
|
||||||
|
ReadForeign a =>
|
||||||
|
b ->
|
||||||
|
E a
|
||||||
|
readAsForeign = read <<< unsafeToForeign
|
||||||
|
|
||||||
|
read' ∷
|
||||||
|
∀ a.
|
||||||
|
ReadForeign a =>
|
||||||
|
Foreign ->
|
||||||
|
F a
|
||||||
|
read' = readImpl
|
||||||
|
|
||||||
|
-- | Read a Foreign value to a type, as a Maybe of type
|
||||||
|
read_ ∷
|
||||||
|
∀ a.
|
||||||
|
ReadForeign a =>
|
||||||
|
Foreign ->
|
||||||
|
Maybe a
|
||||||
|
read_ = hush <<< read
|
||||||
|
|
||||||
|
foreign import _parseJSON ∷ EU.EffectFn1 String Foreign
|
||||||
|
|
||||||
|
parseJSON ∷ String -> F Foreign
|
||||||
|
parseJSON =
|
||||||
|
ExceptT
|
||||||
|
<<< Identity
|
||||||
|
<<< lmap (pure <<< ForeignError <<< message)
|
||||||
|
<<< runPure
|
||||||
|
<<< try
|
||||||
|
<<< EU.runEffectFn1 _parseJSON
|
||||||
|
where
|
||||||
|
-- Nate Faubion: "It uses unsafePerformEffect because that’s the only way to catch exceptions and still use the builtin json decoder"
|
||||||
|
runPure = unsafePerformEffect
|
||||||
|
|
||||||
|
foreign import _undefined ∷ Foreign
|
||||||
|
|
||||||
|
undefined ∷ Foreign
|
||||||
|
undefined = _undefined
|
||||||
|
|
||||||
|
foreign import unsafeStringify ∷ ∀ a. a -> String
|
||||||
|
|
||||||
|
-- | A class for reading foreign values to a type
|
||||||
|
class ReadForeign a where
|
||||||
|
readImpl ∷ Foreign -> F a
|
||||||
|
|
||||||
|
instance readForeign ∷ ReadForeign Foreign where
|
||||||
|
readImpl = pure
|
||||||
|
|
||||||
|
instance readChar ∷ ReadForeign Char where
|
||||||
|
readImpl = readChar
|
||||||
|
|
||||||
|
instance readNumber ∷ ReadForeign Number where
|
||||||
|
readImpl = readNumber
|
||||||
|
|
||||||
|
instance readInt ∷ ReadForeign Int where
|
||||||
|
readImpl = readInt
|
||||||
|
|
||||||
|
instance readString ∷ ReadForeign String where
|
||||||
|
readImpl = readString
|
||||||
|
|
||||||
|
instance readBoolean ∷ ReadForeign Boolean where
|
||||||
|
readImpl = readBoolean
|
||||||
|
|
||||||
|
instance readArray ∷ ReadForeign a => ReadForeign (Array a) where
|
||||||
|
readImpl = traverseWithIndex readAtIdx <=< readArray
|
||||||
|
where
|
||||||
|
readAtIdx i f = withExcept (map (ErrorAtIndex i)) (readImpl f)
|
||||||
|
|
||||||
|
instance readMaybe ∷ ReadForeign a => ReadForeign (Maybe a) where
|
||||||
|
readImpl = readNullOrUndefined readImpl
|
||||||
|
where
|
||||||
|
readNullOrUndefined _ value
|
||||||
|
| isNull value || isUndefined value = pure Nothing
|
||||||
|
|
||||||
|
readNullOrUndefined f value = Just <$> f value
|
||||||
|
|
||||||
|
instance readNullable ∷ ReadForeign a => ReadForeign (Nullable a) where
|
||||||
|
readImpl o =
|
||||||
|
withExcept (map reformat)
|
||||||
|
$ map toNullable
|
||||||
|
<$> traverse readImpl
|
||||||
|
=<< readNull o
|
||||||
|
where
|
||||||
|
reformat error = case error of
|
||||||
|
TypeMismatch inner other -> TypeMismatch ("Nullable " <> inner) other
|
||||||
|
_ -> error
|
||||||
|
|
||||||
|
instance readObject ∷ ReadForeign a => ReadForeign (Object.Object a) where
|
||||||
|
readImpl = sequence <<< Object.mapWithKey (const readImpl) <=< readObject'
|
||||||
|
where
|
||||||
|
readObject' ∷ Foreign -> F (Object Foreign)
|
||||||
|
readObject' value
|
||||||
|
| tagOf value == "Object" = pure $ unsafeFromForeign value
|
||||||
|
| otherwise = fail $ TypeMismatch "Object" (tagOf value)
|
||||||
|
|
||||||
|
instance readRecord ∷
|
||||||
|
( RowToList fields fieldList
|
||||||
|
, ReadForeignFields fieldList () fields
|
||||||
|
) =>
|
||||||
|
ReadForeign (Record fields) where
|
||||||
|
readImpl o = flip Builder.build {} <$> getFields fieldListP o
|
||||||
|
where
|
||||||
|
fieldListP = Proxy ∷ Proxy fieldList
|
||||||
|
|
||||||
|
-- | A class for reading foreign values from properties
|
||||||
|
class ReadForeignFields (xs ∷ RowList Type) (from ∷ Row Type) (to ∷ Row Type) | xs -> from to where
|
||||||
|
getFields ∷
|
||||||
|
Proxy xs ->
|
||||||
|
Foreign ->
|
||||||
|
F (Builder (Record from) (Record to))
|
||||||
|
|
||||||
|
instance readFieldsCons ∷
|
||||||
|
( IsSymbol name
|
||||||
|
, ReadForeign ty
|
||||||
|
, ReadForeignFields tail from from'
|
||||||
|
, Row.Lacks name from'
|
||||||
|
, Row.Cons name ty from' to
|
||||||
|
) =>
|
||||||
|
ReadForeignFields (Cons name ty tail) from to where
|
||||||
|
getFields _ obj = (compose <$> first) `exceptTApply` rest
|
||||||
|
where
|
||||||
|
first = do
|
||||||
|
value <- withExcept' (readImpl =<< readProp name obj)
|
||||||
|
pure $ Builder.insert nameP value
|
||||||
|
|
||||||
|
rest = getFields tailP obj
|
||||||
|
|
||||||
|
nameP = Proxy ∷ Proxy name
|
||||||
|
|
||||||
|
tailP = Proxy ∷ Proxy tail
|
||||||
|
|
||||||
|
name = reflectSymbol nameP
|
||||||
|
|
||||||
|
withExcept' = withExcept <<< map $ ErrorAtProperty name
|
||||||
|
|
||||||
|
exceptTApply ∷ ∀ a b e m. Semigroup e => Applicative m => ExceptT e m (a -> b) -> ExceptT e m a -> ExceptT e m b
|
||||||
|
exceptTApply fun a =
|
||||||
|
ExceptT $ applyEither
|
||||||
|
<$> runExceptT fun
|
||||||
|
<*> runExceptT a
|
||||||
|
|
||||||
|
applyEither ∷ ∀ e a b. Semigroup e => Either e (a -> b) -> Either e a -> Either e b
|
||||||
|
applyEither (Left e) (Right _) = Left e
|
||||||
|
|
||||||
|
applyEither (Left e1) (Left e2) = Left (e1 <> e2)
|
||||||
|
|
||||||
|
applyEither (Right _) (Left e) = Left e
|
||||||
|
|
||||||
|
applyEither (Right fun) (Right a) = Right (fun a)
|
||||||
|
|
||||||
|
instance readFieldsNil ∷
|
||||||
|
ReadForeignFields Nil () () where
|
||||||
|
getFields _ _ = pure identity
|
||||||
|
|
||||||
|
instance readForeignVariant ∷
|
||||||
|
( RowToList variants rl
|
||||||
|
, ReadForeignVariant rl variants
|
||||||
|
) =>
|
||||||
|
ReadForeign (Variant variants) where
|
||||||
|
readImpl o = readVariantImpl (Proxy ∷ Proxy rl) o
|
||||||
|
|
||||||
|
class ReadForeignVariant (xs ∷ RowList Type) (row ∷ Row Type) | xs -> row where
|
||||||
|
readVariantImpl ∷
|
||||||
|
Proxy xs ->
|
||||||
|
Foreign ->
|
||||||
|
F (Variant row)
|
||||||
|
|
||||||
|
instance readVariantNil ∷
|
||||||
|
ReadForeignVariant Nil trash where
|
||||||
|
readVariantImpl _ _ = fail $ ForeignError "Unable to match any variant member."
|
||||||
|
|
||||||
|
instance readVariantCons ∷
|
||||||
|
( IsSymbol name
|
||||||
|
, ReadForeign ty
|
||||||
|
, Row.Cons name ty trash row
|
||||||
|
, ReadForeignVariant tail row
|
||||||
|
) =>
|
||||||
|
ReadForeignVariant (Cons name ty tail) row where
|
||||||
|
readVariantImpl _ o =
|
||||||
|
do
|
||||||
|
obj ∷ { type ∷ String, value ∷ Foreign } <- readImpl o
|
||||||
|
if obj.type == name then do
|
||||||
|
value ∷ ty <- readImpl obj.value
|
||||||
|
pure $ inj namep value
|
||||||
|
else
|
||||||
|
(fail <<< ForeignError $ "Did not match variant tag " <> name)
|
||||||
|
<|> readVariantImpl (Proxy ∷ Proxy tail) o
|
||||||
|
where
|
||||||
|
namep = Proxy ∷ Proxy name
|
||||||
|
|
||||||
|
name = reflectSymbol namep
|
||||||
|
|
||||||
|
-- -- | A class for writing a value into JSON
|
||||||
|
-- -- | need to do this intelligently using Foreign probably, because of null and undefined whatever
|
||||||
|
class WriteForeign a where
|
||||||
|
writeImpl ∷ a -> Foreign
|
||||||
|
|
||||||
|
instance writeForeignForeign ∷ WriteForeign Foreign where
|
||||||
|
writeImpl = identity
|
||||||
|
|
||||||
|
instance writeForeignString ∷ WriteForeign String where
|
||||||
|
writeImpl = unsafeToForeign
|
||||||
|
|
||||||
|
instance writeForeignInt ∷ WriteForeign Int where
|
||||||
|
writeImpl = unsafeToForeign
|
||||||
|
|
||||||
|
instance writeForeignChar ∷ WriteForeign Char where
|
||||||
|
writeImpl = unsafeToForeign
|
||||||
|
|
||||||
|
instance writeForeignNumber ∷ WriteForeign Number where
|
||||||
|
writeImpl = unsafeToForeign
|
||||||
|
|
||||||
|
instance writeForeignBoolean ∷ WriteForeign Boolean where
|
||||||
|
writeImpl = unsafeToForeign
|
||||||
|
|
||||||
|
instance writeForeignArray ∷ WriteForeign a => WriteForeign (Array a) where
|
||||||
|
writeImpl xs = unsafeToForeign $ writeImpl <$> xs
|
||||||
|
|
||||||
|
instance writeForeignMaybe ∷ WriteForeign a => WriteForeign (Maybe a) where
|
||||||
|
writeImpl = maybe undefined writeImpl
|
||||||
|
|
||||||
|
instance writeForeignNullable ∷ WriteForeign a => WriteForeign (Nullable a) where
|
||||||
|
writeImpl = maybe (unsafeToForeign $ toNullable Nothing) writeImpl <<< toMaybe
|
||||||
|
|
||||||
|
instance writeForeignObject ∷ WriteForeign a => WriteForeign (Object.Object a) where
|
||||||
|
writeImpl = unsafeToForeign <<< Object.mapWithKey (const writeImpl)
|
||||||
|
|
||||||
|
instance recordWriteForeign ∷
|
||||||
|
( RowToList row rl
|
||||||
|
, WriteForeignFields rl row () to
|
||||||
|
) =>
|
||||||
|
WriteForeign (Record row) where
|
||||||
|
writeImpl rec = unsafeToForeign $ Builder.build steps {}
|
||||||
|
where
|
||||||
|
rlp = Proxy ∷ Proxy rl
|
||||||
|
|
||||||
|
steps = writeImplFields rlp rec
|
||||||
|
|
||||||
|
class WriteForeignFields (rl ∷ RowList Type) row (from ∷ Row Type) (to ∷ Row Type) | rl -> row from to where
|
||||||
|
writeImplFields ∷ ∀ g. g rl -> Record row -> Builder (Record from) (Record to)
|
||||||
|
|
||||||
|
instance consWriteForeignFields ∷
|
||||||
|
( IsSymbol name
|
||||||
|
, WriteForeign ty
|
||||||
|
, WriteForeignFields tail row from from'
|
||||||
|
, Row.Cons name ty whatever row
|
||||||
|
, Row.Lacks name from'
|
||||||
|
, Row.Cons name Foreign from' to
|
||||||
|
) =>
|
||||||
|
WriteForeignFields (Cons name ty tail) row from to where
|
||||||
|
writeImplFields _ rec = result
|
||||||
|
where
|
||||||
|
namep = Proxy ∷ Proxy name
|
||||||
|
|
||||||
|
value = writeImpl $ get namep rec
|
||||||
|
|
||||||
|
tailp = Proxy ∷ Proxy tail
|
||||||
|
|
||||||
|
rest = writeImplFields tailp rec
|
||||||
|
|
||||||
|
result = Builder.insert namep value <<< rest
|
||||||
|
|
||||||
|
instance nilWriteForeignFields ∷
|
||||||
|
WriteForeignFields Nil row () () where
|
||||||
|
writeImplFields _ _ = identity
|
||||||
|
|
||||||
|
instance writeForeignVariant ∷
|
||||||
|
( RowToList row rl
|
||||||
|
, WriteForeignVariant rl row
|
||||||
|
) =>
|
||||||
|
WriteForeign (Variant row) where
|
||||||
|
writeImpl variant = writeVariantImpl (Proxy ∷ Proxy rl) variant
|
||||||
|
|
||||||
|
class WriteForeignVariant (rl ∷ RowList Type) (row ∷ Row Type) | rl -> row where
|
||||||
|
writeVariantImpl ∷ ∀ g. g rl -> Variant row -> Foreign
|
||||||
|
|
||||||
|
instance nilWriteForeignVariant ∷
|
||||||
|
WriteForeignVariant Nil () where
|
||||||
|
-- a PureScript-defined variant cannot reach this path, but a JavaScript FFI one could.
|
||||||
|
writeVariantImpl _ _ = unsafeCrashWith "Variant was not able to be writen row WriteForeign."
|
||||||
|
|
||||||
|
instance consWriteForeignVariant ∷
|
||||||
|
( IsSymbol name
|
||||||
|
, WriteForeign ty
|
||||||
|
, Row.Cons name ty subRow row
|
||||||
|
, WriteForeignVariant tail subRow
|
||||||
|
) =>
|
||||||
|
WriteForeignVariant (Cons name ty tail) row where
|
||||||
|
writeVariantImpl _ variant =
|
||||||
|
on
|
||||||
|
namep
|
||||||
|
writeVariant
|
||||||
|
(writeVariantImpl (Proxy ∷ Proxy tail))
|
||||||
|
variant
|
||||||
|
where
|
||||||
|
namep = Proxy ∷ Proxy name
|
||||||
|
|
||||||
|
writeVariant value =
|
||||||
|
unsafeToForeign
|
||||||
|
{ type: reflectSymbol namep
|
||||||
|
, value: writeImpl value
|
||||||
|
}
|
||||||
|
|
||||||
|
instance readForeignNEArray ∷ ReadForeign a => ReadForeign (NonEmptyArray a) where
|
||||||
|
readImpl f = do
|
||||||
|
raw ∷ Array a <- readImpl f
|
||||||
|
except $ note (singleton $ ForeignError "Nonempty array expected, got empty array") $ fromArray raw
|
||||||
|
|
||||||
|
instance writeForeignNEArray ∷ WriteForeign a => WriteForeign (NonEmptyArray a) where
|
||||||
|
writeImpl a = writeImpl <<< toArray $ a
|
@ -1,7 +1,7 @@
|
|||||||
module Yoga.Centre.Component where
|
module Yoga.Centre.Component where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
import Data.Array (foldMap)
|
import Data.Foldable (foldMap)
|
||||||
import Data.Maybe (Maybe)
|
import Data.Maybe (Maybe)
|
||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
import React.Basic (JSX)
|
import React.Basic (JSX)
|
||||||
@ -12,17 +12,17 @@ import Record.Extra (pick)
|
|||||||
import Yoga.Centre.Styles as Style
|
import Yoga.Centre.Styles as Style
|
||||||
import Yoga.Theme.Styles (makeStylesJSS)
|
import Yoga.Theme.Styles (makeStylesJSS)
|
||||||
|
|
||||||
type Props
|
type Props =
|
||||||
= Record PropsR
|
Record PropsR
|
||||||
|
|
||||||
type PropsR
|
type PropsR =
|
||||||
= OptionalProps Style.PropsR
|
OptionalProps Style.PropsR
|
||||||
|
|
||||||
type OptionalProps r
|
type OptionalProps r =
|
||||||
= ( kids ∷ Array JSX
|
( kids ∷ Array JSX
|
||||||
, className ∷ Maybe String
|
, className ∷ Maybe String
|
||||||
| r
|
| r
|
||||||
)
|
)
|
||||||
|
|
||||||
makeComponent ∷ Effect (ReactComponent Props)
|
makeComponent ∷ Effect (ReactComponent Props)
|
||||||
makeComponent = do
|
makeComponent = do
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
module Yoga.Cluster.Component where
|
module Yoga.Cluster.Component where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
|
import Data.Foldable (foldMap)
|
||||||
import Data.Array (foldMap)
|
|
||||||
import Data.Maybe (Maybe)
|
import Data.Maybe (Maybe)
|
||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
import React.Basic (JSX)
|
import React.Basic (JSX)
|
||||||
@ -13,17 +12,17 @@ import Record.Extra (pick)
|
|||||||
import Yoga.Cluster.Styles as Style
|
import Yoga.Cluster.Styles as Style
|
||||||
import Yoga.Theme.Styles (makeStylesJSS)
|
import Yoga.Theme.Styles (makeStylesJSS)
|
||||||
|
|
||||||
type Props
|
type Props =
|
||||||
= Record PropsR
|
Record PropsR
|
||||||
|
|
||||||
type PropsR
|
type PropsR =
|
||||||
= OptionalProps Style.PropsR
|
OptionalProps Style.PropsR
|
||||||
|
|
||||||
type OptionalProps r
|
type OptionalProps r =
|
||||||
= ( kids ∷ Array JSX
|
( kids ∷ Array JSX
|
||||||
, className ∷ Maybe String
|
, className ∷ Maybe String
|
||||||
| r
|
| r
|
||||||
)
|
)
|
||||||
|
|
||||||
makeComponent ∷ Effect (ReactComponent Props)
|
makeComponent ∷ Effect (ReactComponent Props)
|
||||||
makeComponent = do
|
makeComponent = do
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
module Yoga.Cover.Component where
|
module Yoga.Cover.Component where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
import Data.Array (foldMap)
|
import Data.Foldable (foldMap)
|
||||||
import Data.Array as Array
|
import Data.Array as Array
|
||||||
import Data.Maybe (Maybe)
|
import Data.Maybe (Maybe)
|
||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
@ -12,19 +12,19 @@ import React.Basic.Hooks as React
|
|||||||
import Yoga.Cover.Styles as Cover
|
import Yoga.Cover.Styles as Cover
|
||||||
import Yoga.Theme.Styles (makeStylesJSS)
|
import Yoga.Theme.Styles (makeStylesJSS)
|
||||||
|
|
||||||
type Props
|
type Props =
|
||||||
= Record PropsR
|
Record PropsR
|
||||||
|
|
||||||
type PropsR
|
type PropsR =
|
||||||
= OptionalProps ()
|
OptionalProps ()
|
||||||
|
|
||||||
type OptionalProps r
|
type OptionalProps r =
|
||||||
= ( header ∷ Maybe JSX
|
( header ∷ Maybe JSX
|
||||||
, footer ∷ Maybe JSX
|
, footer ∷ Maybe JSX
|
||||||
, kids ∷ Array JSX
|
, kids ∷ Array JSX
|
||||||
, className ∷ Maybe String
|
, className ∷ Maybe String
|
||||||
| r
|
| r
|
||||||
)
|
)
|
||||||
|
|
||||||
makeComponent ∷ Effect (ReactComponent Props)
|
makeComponent ∷ Effect (ReactComponent Props)
|
||||||
makeComponent = do
|
makeComponent = do
|
||||||
|
@ -7,7 +7,6 @@ import Data.Nullable (Nullable)
|
|||||||
import Data.Nullable as Nullable
|
import Data.Nullable as Nullable
|
||||||
import Data.Traversable (for_)
|
import Data.Traversable (for_)
|
||||||
import Data.Tuple.Nested (type (/\))
|
import Data.Tuple.Nested (type (/\))
|
||||||
import Debug.Trace (spy, traceM)
|
|
||||||
import React.Basic (Ref)
|
import React.Basic (Ref)
|
||||||
import React.Basic.Hooks (Hook, UseLayoutEffect, UseRef, UseState, coerceHook, readRefMaybe, useLayoutEffect, useRef, useState, (/\))
|
import React.Basic.Hooks (Hook, UseLayoutEffect, UseRef, UseState, coerceHook, readRefMaybe, useLayoutEffect, useRef, useState, (/\))
|
||||||
import React.Basic.Hooks as React
|
import React.Basic.Hooks as React
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
module Yoga.Imposter.Component where
|
module Yoga.Imposter.Component where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
import Data.Array (foldMap)
|
import Data.Foldable (foldMap)
|
||||||
import Data.Maybe (Maybe)
|
import Data.Maybe (Maybe)
|
||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
import React.Basic (JSX)
|
import React.Basic (JSX)
|
||||||
@ -16,19 +16,19 @@ import Yoga.Helpers (ifJustFalse, (?||))
|
|||||||
import Yoga.Imposter.Styles as Style
|
import Yoga.Imposter.Styles as Style
|
||||||
import Yoga.Theme.Styles (makeStylesJSS)
|
import Yoga.Theme.Styles (makeStylesJSS)
|
||||||
|
|
||||||
type Props
|
type Props =
|
||||||
= Record PropsR
|
Record PropsR
|
||||||
|
|
||||||
type PropsR
|
type PropsR =
|
||||||
= OptionalProps Style.PropsR
|
OptionalProps Style.PropsR
|
||||||
|
|
||||||
type OptionalProps r
|
type OptionalProps r =
|
||||||
= ( kids ∷ Array JSX
|
( kids ∷ Array JSX
|
||||||
, className ∷ Maybe String
|
, className ∷ Maybe String
|
||||||
, onClick ∷ Maybe EventHandler
|
, onClick ∷ Maybe EventHandler
|
||||||
, style ∷ Maybe CSS
|
, style ∷ Maybe CSS
|
||||||
| r
|
| r
|
||||||
)
|
)
|
||||||
|
|
||||||
makeComponent ∷ Effect (ReactComponent Props)
|
makeComponent ∷ Effect (ReactComponent Props)
|
||||||
makeComponent = do
|
makeComponent = do
|
||||||
|
@ -33,19 +33,19 @@ jssClasses ∷
|
|||||||
({ | theme } -> { | row }) -> JSSClasses theme props to
|
({ | theme } -> { | row }) -> JSSClasses theme props to
|
||||||
jssClasses f = JSSClasses f'
|
jssClasses f = JSSClasses f'
|
||||||
where
|
where
|
||||||
f' theme = built
|
f' theme = built
|
||||||
where
|
where
|
||||||
rec = f theme
|
rec = f theme
|
||||||
|
|
||||||
built ∷ Record to
|
built ∷ Record to
|
||||||
built = Builder.build builder {}
|
built = Builder.build builder {}
|
||||||
|
|
||||||
rlp = RL.RLProxy ∷ RL.RLProxy rowRL
|
rlp = RL.RLProxy ∷ RL.RLProxy rowRL
|
||||||
|
|
||||||
propsy = Proxy ∷ Proxy props
|
propsy = Proxy ∷ Proxy props
|
||||||
|
|
||||||
builder ∷ Builder.Builder (Record ()) (Record to)
|
builder ∷ Builder.Builder (Record ()) (Record to)
|
||||||
builder = jssifyFields propsy rlp rec
|
builder = jssifyFields propsy rlp rec
|
||||||
|
|
||||||
data JSSElem props
|
data JSSElem props
|
||||||
= PrimitiveJss (String |+| Int |+| Number)
|
= PrimitiveJss (String |+| Int |+| Number)
|
||||||
@ -93,7 +93,7 @@ instance jssAbleColor ∷ JSSAble p Color where
|
|||||||
instance jssAbleBackgroundImage ∷ JSSAble p BackgroundImage where
|
instance jssAbleBackgroundImage ∷ JSSAble p BackgroundImage where
|
||||||
jss v = PrimitiveJss (cast (render (value v)))
|
jss v = PrimitiveJss (cast (render (value v)))
|
||||||
where
|
where
|
||||||
render (Value val) = plain val
|
render (Value val) = plain val
|
||||||
|
|
||||||
instance jssAbleString ∷ JSSAble p String where
|
instance jssAbleString ∷ JSSAble p String where
|
||||||
jss = cast >>> PrimitiveJss
|
jss = cast >>> PrimitiveJss
|
||||||
@ -116,20 +116,20 @@ instance jssAbleNested ∷ JSSAble p jss => JSSAble p (Object jss) where
|
|||||||
instance jssAbleCss ∷ JSSAble p (StyleM Unit) where
|
instance jssAbleCss ∷ JSSAble p (StyleM Unit) where
|
||||||
jss someCss = NestedJss (foldMap ruleToObject rules)
|
jss someCss = NestedJss (foldMap ruleToObject rules)
|
||||||
where
|
where
|
||||||
rules = runS someCss
|
rules = runS someCss
|
||||||
|
|
||||||
ruleToObject = case _ of
|
ruleToObject = case _ of
|
||||||
Property (Key k) (Value v) -> Object.singleton (plain k) (jss (plain v))
|
Property (Key k) (Value v) -> Object.singleton (plain k) (jss (plain v))
|
||||||
Nested (Sub (Selector (Refinement preds) (Elem el))) rules -> Object.singleton (el <> foldMap predicate preds) (jss (foldMap ruleToObject rules))
|
Nested (Sub (Selector (Refinement preds) (Elem el))) rules -> Object.singleton (el <> foldMap predicate preds) (jss (foldMap ruleToObject rules))
|
||||||
Keyframe (Keyframes name frames) ->
|
Keyframe (Keyframes name frames) ->
|
||||||
frames
|
frames
|
||||||
# foldMap \(Tuple pos rules) ->
|
# foldMap \(Tuple pos rules) ->
|
||||||
Object.singleton
|
Object.singleton
|
||||||
(show (round pos) <> "%")
|
(show (round pos) <> "%")
|
||||||
(NestedJss (foldMap ruleToObject rules))
|
(NestedJss (foldMap ruleToObject rules))
|
||||||
x ->
|
x ->
|
||||||
unsafeCrashWith do
|
unsafeCrashWith do
|
||||||
"tried to create CSS that I couldn't understand"
|
"tried to create CSS that I couldn't understand"
|
||||||
|
|
||||||
instance jssAbleRecord ∷
|
instance jssAbleRecord ∷
|
||||||
( JSSAbleFields props rowRL row () to
|
( JSSAbleFields props rowRL row () to
|
||||||
@ -139,20 +139,20 @@ instance jssAbleRecord ∷
|
|||||||
JSSAble props (Record row) where
|
JSSAble props (Record row) where
|
||||||
jss rec = NestedJss <<< Object.fromHomogeneous $ built
|
jss rec = NestedJss <<< Object.fromHomogeneous $ built
|
||||||
where
|
where
|
||||||
built ∷ Record to
|
built ∷ Record to
|
||||||
built = Builder.build builder {}
|
built = Builder.build builder {}
|
||||||
|
|
||||||
rlp = RL.RLProxy ∷ RL.RLProxy rowRL
|
rlp = RL.RLProxy ∷ RL.RLProxy rowRL
|
||||||
|
|
||||||
propsy = Proxy ∷ Proxy props
|
propsy = Proxy ∷ Proxy props
|
||||||
|
|
||||||
builder ∷ Builder.Builder (Record ()) (Record to)
|
builder ∷ Builder.Builder (Record ()) (Record to)
|
||||||
builder = jssifyFields propsy rlp rec
|
builder = jssifyFields propsy rlp rec
|
||||||
|
|
||||||
propsJss ∷ ∀ p a. JSSAble p a => (p -> a) -> JSSElem p
|
propsJss ∷ ∀ p a. JSSAble p a => (p -> a) -> JSSElem p
|
||||||
propsJss fn = PropsJss (map jss fn)
|
propsJss fn = PropsJss (map jss fn)
|
||||||
|
|
||||||
class JSSAbleFields props (xs ∷ RowList) (row ∷ #Type) (from ∷ #Type) (to ∷ #Type) | xs -> props row from to where
|
class JSSAbleFields props (xs ∷ RowList Type) (row ∷ #Type) (from ∷ #Type) (to ∷ #Type) | xs -> props row from to where
|
||||||
jssifyFields ∷ Proxy props -> RLProxy xs -> Record row -> Builder (Record from) (Record to)
|
jssifyFields ∷ Proxy props -> RLProxy xs -> Record row -> Builder (Record from) (Record to)
|
||||||
|
|
||||||
instance jssAbleFieldsNil ∷ JSSAbleFields props Nil row () () where
|
instance jssAbleFieldsNil ∷ JSSAbleFields props Nil row () () where
|
||||||
@ -169,16 +169,16 @@ instance jssAbleFieldsCons ∷
|
|||||||
JSSAbleFields props (RL.Cons name a tail) row from to where
|
JSSAbleFields props (RL.Cons name a tail) row from to where
|
||||||
jssifyFields _ _ r = first <<< rest
|
jssifyFields _ _ r = first <<< rest
|
||||||
where
|
where
|
||||||
first = Builder.insert nameP (jss val)
|
first = Builder.insert nameP (jss val)
|
||||||
|
|
||||||
val = Record.get nameP r
|
val = Record.get nameP r
|
||||||
|
|
||||||
rest = jssifyFields propsP tailP r
|
rest = jssifyFields propsP tailP r
|
||||||
|
|
||||||
nameP = SProxy ∷ SProxy name
|
nameP = SProxy ∷ SProxy name
|
||||||
|
|
||||||
tailP = RL.RLProxy ∷ RL.RLProxy tail
|
tailP = RL.RLProxy ∷ RL.RLProxy tail
|
||||||
|
|
||||||
propsP = Proxy ∷ Proxy props
|
propsP = Proxy ∷ Proxy props
|
||||||
|
|
||||||
name = reflectSymbol nameP
|
name = reflectSymbol nameP
|
||||||
|
@ -17,7 +17,7 @@ import React.Basic.DOM.SVG as SVG
|
|||||||
import React.Basic.Emotion as E
|
import React.Basic.Emotion as E
|
||||||
import React.Basic.Hooks (ReactComponent)
|
import React.Basic.Hooks (ReactComponent)
|
||||||
import React.Basic.Hooks as React
|
import React.Basic.Hooks as React
|
||||||
import Yoga.Block.Container.Style (colour)
|
import Yoga.Block.Container.Style (DarkOrLightMode(..), colour)
|
||||||
import Yoga.DOM.Hook (useBoundingBox)
|
import Yoga.DOM.Hook (useBoundingBox)
|
||||||
import Yoga.SVG.Icon (Raw)
|
import Yoga.SVG.Icon (Raw)
|
||||||
import Yoga.Scroll.Hook (useScrollYPosition)
|
import Yoga.Scroll.Hook (useScrollYPosition)
|
||||||
@ -67,7 +67,7 @@ rotateStars =
|
|||||||
mkClasses theme =
|
mkClasses theme =
|
||||||
{ laptopBackground:
|
{ laptopBackground:
|
||||||
E.css
|
E.css
|
||||||
{ fill: E.str colour.background
|
{ fill: E.var colour.background
|
||||||
}
|
}
|
||||||
, lightEllipsis:
|
, lightEllipsis:
|
||||||
E.css
|
E.css
|
||||||
@ -82,7 +82,7 @@ mkClasses theme =
|
|||||||
}
|
}
|
||||||
, screenText:
|
, screenText:
|
||||||
E.css
|
E.css
|
||||||
{ fontFamily: E.var "--font-mono"
|
{ fontFamily: E.var "--mono-font"
|
||||||
, fontSize: E.str "0.85em"
|
, fontSize: E.str "0.85em"
|
||||||
, fill: E.str colour.text
|
, fill: E.str colour.text
|
||||||
}
|
}
|
||||||
@ -134,10 +134,10 @@ mkClasses theme =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mkLandingPageBackground ∷ Effect (ReactComponent { className ∷ String })
|
mkLandingPageBackground ∷ Effect (ReactComponent { className ∷ String, themeVariant ∷ DarkOrLightMode })
|
||||||
mkLandingPageBackground = do
|
mkLandingPageBackground = do
|
||||||
React.reactComponent "LandingPageBackground" \{ className } -> React.do
|
React.reactComponent "LandingPageBackground" \{ className, themeVariant } -> React.do
|
||||||
let theme = { isLight: true } -- [TODO]
|
let theme = { isLight: themeVariant == LightMode }
|
||||||
let classes = mkClasses theme
|
let classes = mkClasses theme
|
||||||
scrollY <- useScrollYPosition
|
scrollY <- useScrollYPosition
|
||||||
bb /\ ref <- useBoundingBox
|
bb /\ ref <- useBoundingBox
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
module Yoga.Switcher.Component where
|
module Yoga.Switcher.Component where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
import Data.Array (foldMap)
|
import Data.Foldable (foldMap)
|
||||||
import Data.Maybe (Maybe)
|
import Data.Maybe (Maybe)
|
||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
import React.Basic (JSX)
|
import React.Basic (JSX)
|
||||||
@ -12,17 +12,17 @@ import Record.Extra (pick)
|
|||||||
import Yoga.Switcher.Styles as Style
|
import Yoga.Switcher.Styles as Style
|
||||||
import Yoga.Theme.Styles (makeStylesJSS)
|
import Yoga.Theme.Styles (makeStylesJSS)
|
||||||
|
|
||||||
type Props
|
type Props =
|
||||||
= Record PropsR
|
Record PropsR
|
||||||
|
|
||||||
type PropsR
|
type PropsR =
|
||||||
= OptionalProps Style.PropsR
|
OptionalProps Style.PropsR
|
||||||
|
|
||||||
type OptionalProps r
|
type OptionalProps r =
|
||||||
= ( kids ∷ Array JSX
|
( kids ∷ Array JSX
|
||||||
, className ∷ Maybe String
|
, className ∷ Maybe String
|
||||||
| r
|
| r
|
||||||
)
|
)
|
||||||
|
|
||||||
makeComponent ∷ Effect (ReactComponent Props)
|
makeComponent ∷ Effect (ReactComponent Props)
|
||||||
makeComponent = do
|
makeComponent = do
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
module Yoga.WithSidebar.Component where
|
module Yoga.WithSidebar.Component where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
import Data.Array (foldMap)
|
import Data.Foldable (foldMap)
|
||||||
import Data.Array as A
|
import Data.Array as A
|
||||||
import Data.Maybe (Maybe(..))
|
import Data.Maybe (Maybe(..))
|
||||||
import Effect (Effect)
|
import Effect (Effect)
|
||||||
@ -12,23 +12,23 @@ import React.Basic.Hooks as React
|
|||||||
import Yoga.Theme.Styles (makeStylesJSS)
|
import Yoga.Theme.Styles (makeStylesJSS)
|
||||||
import Yoga.WithSidebar.Styles as WithSidebar
|
import Yoga.WithSidebar.Styles as WithSidebar
|
||||||
|
|
||||||
type Props
|
type Props =
|
||||||
= Record PropsR
|
Record PropsR
|
||||||
|
|
||||||
type PropsR
|
type PropsR =
|
||||||
= OptionalProps
|
OptionalProps
|
||||||
( sidebarChildren ∷ Array JSX
|
( sidebarChildren ∷ Array JSX
|
||||||
, notSidebarChildren ∷ Array JSX
|
, notSidebarChildren ∷ Array JSX
|
||||||
)
|
|
||||||
|
|
||||||
type OptionalProps r
|
|
||||||
= ( className ∷ Maybe String
|
|
||||||
, sidebarClassName ∷ Maybe String
|
|
||||||
, notSidebarClassName ∷ Maybe String
|
|
||||||
, sidebarRight ∷ Maybe Boolean
|
|
||||||
| r
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type OptionalProps r =
|
||||||
|
( className ∷ Maybe String
|
||||||
|
, sidebarClassName ∷ Maybe String
|
||||||
|
, notSidebarClassName ∷ Maybe String
|
||||||
|
, sidebarRight ∷ Maybe Boolean
|
||||||
|
| r
|
||||||
|
)
|
||||||
|
|
||||||
makeComponent ∷ Effect (ReactComponent Props)
|
makeComponent ∷ Effect (ReactComponent Props)
|
||||||
makeComponent = do
|
makeComponent = do
|
||||||
useStyles <- makeStylesJSS WithSidebar.styles
|
useStyles <- makeStylesJSS WithSidebar.styles
|
||||||
|
Loading…
Reference in New Issue
Block a user