git.iko.soy/rowtype-yoga/psfp
on 133b502 help sign in
55 lines 1.6 kB history raw
1module Theme.Styles
2 ( makeStyles_
3 , makeStyles
4 , useTheme
5 , UseStyles
6 , UseTheme
7 , classNames
8 ) where
10import Prelude
12import Data.Foldable (intercalate)
13import Effect (Effect)
14import Effect.Uncurried (EffectFn1, runEffectFn1)
15import Prim.RowList (class RowToList)
16import React.Basic.DOM (CSS)
17import React.Basic.Hooks (Hook)
18import Record.Extra (class MapRecord)
19import Theme.Types (CSSTheme)
20import Type.Row.Homogeneous (class Homogeneous)
22foreign import data UseStyles ∷ Type -> Type -> Type
24foreign import makeStylesImpl ∷
25 ∀ css classNames.
26 EffectFn1 {|css} (Hook (UseStyles { | css}) { | classNames })
28foreign import makeStylesThemedImpl ∷
29 ∀ theme css classNames.
30 EffectFn1 ({|theme} -> {|css}) (Hook (UseStyles { | css}) { | classNames })
32makeStyles ∷
33 ∀ theme css cssList classNames.
34 RowToList css cssList =>
35 MapRecord cssList css CSS String () classNames =>
36 ({ | theme } -> { | css }) ->
37 Effect (Hook (UseStyles { | css }) { | classNames })
38makeStyles = runEffectFn1 makeStylesThemedImpl
40makeStyles_ ∷
41 ∀ css cssList classNames.
42 RowToList css cssList =>
43 MapRecord cssList css CSS String () classNames =>
44 { | css } ->
45 Effect (Hook (UseStyles { | css }) { | classNames })
46makeStyles_ = runEffectFn1 makeStylesImpl
48foreign import data UseTheme ∷ Type -> Type
49foreign import useThemeImpl ∷ ∀ classNames.
50 Hook (UseTheme ) { | classNames }
51useTheme ∷ Hook (UseTheme) CSSTheme
52useTheme = useThemeImpl
54classNames ∷ ∀ r. Homogeneous r String => Array (Record r -> String) -> Record r -> String
55classNames cs allClasses = (cs <#> \x -> x allClasses) # intercalate " "