packages feed

miso-css-0.0.3: src/Miso/Css/Operator.hs

{-# LANGUAGE RequiredTypeArguments #-}
{-# LANGUAGE UndecidableInstances #-}
module Miso.Css.Operator where

import Data.Char (Char)
import GHC.TypeLits (Nat, KnownNat, KnownChar)
import Miso ( View )
import Miso.Css.Event ( EventFactory )
import Miso.Css.List ( FilterOut, Append )
import Miso.Css.Prelude ( Proxy(..), Maybe(Just, Nothing), KnownSymbol, type (~) )
import Miso.Css.Segment ( SubSeg(A, T), ApplyClass )
import Miso.Css.Style
import Miso.JSON ( ToJSON )


(=.) :: (KnownSymbol en, KnownSymbol c) =>
  E ctx props model action en Composite r ei atrs kids cls eacs children cfor tabx ak ->
  OrClass p c ->
  E ctx props model action en Composite r ei ("class" : atrs) kids (c:cls)
    (ConstraintsAfterClassApp ei en atrs cls p c eacs)
    children cfor tabx ak
e =. c = AppClsE c e

infixl 3 =.

atr :: forall k v. (KnownSymbol k, ToJSON v) => v -> ElAtr k v
atr = ElAtr

(=<|) :: (KnownSymbol k, ToJSON v, RegularAtr k ~ "") =>
  E ctx props model action en Composite r ei atrs kids cls eacs children cfor tabx ak ->
  ElAtr k v ->
  E ctx props model action en Composite r ei (k : atrs) kids cls
    (ApplyClass '[] (A k) eacs) -- eacs
    children cfor tabx ak
e =<| a = AddAtrE a e

infixl 3 =<|

for :: forall ctx props model action en r ei catrs kids cls eacs children ee cfor tabx ak.
  (KnownSymbol en, KnownSymbol ee) =>
  E ctx props model action en Composite r ei catrs kids cls eacs children cfor tabx ak ->
  forall fi -> (fi ~ ElementId ee) =>
  E ctx props model action en Composite r ei catrs kids cls eacs children
  (AddForId ee cfor kids) tabx ak
e `for` _ = AddForAtrE (Proxy @ee) e
infixl 3 `for`

tabIndex :: forall ctx props model action en r ei catrs kids cls eacs children cfor tabx ak.
  (KnownSymbol en) =>
  E ctx props model action en Composite r ei catrs kids cls eacs children cfor tabx ak ->
  forall (ti :: Nat) -> KnownNat ti =>
  E ctx props model action en Composite r ei catrs kids cls eacs children cfor (Just ti : tabx) ak
e `tabIndex` _ = TabIndexE (Proxy ) e
infixl 3 `tabIndex`

accessKey :: forall ctx props model action en r ei catrs kids cls eacs children cfor tabx ak.
  (KnownSymbol en) =>
  E ctx props model action en Composite r ei catrs kids cls eacs children cfor tabx ak ->
  forall (nc :: Char) -> KnownChar nc =>
  E ctx props model action en Composite r ei catrs kids cls eacs children cfor tabx (nc : ak)
e `accessKey` _ = AccessKeyE Proxy e
infixl 3 `accessKey`

tabIndexMinus1 ::
  E ctx props model action en Composite r ei atrs kids cls eacs children cfor tabx ak ->
  E ctx props model action en Composite r ei atrs kids cls eacs children cfor (Nothing : tabx) ak
tabIndexMinus1 e = TabIndexMinus1E e

ariaLabelledBy :: forall ctx props model action en r ei catrs kids cls eacs children ee cfor tabx ak.
  (KnownSymbol en, KnownSymbol ee) =>
  E ctx props model action en Composite r ei catrs kids cls eacs children cfor tabx ak ->
  forall fi -> (fi ~ ElementId ee) =>
  E ctx props model action en Composite r ei catrs kids cls eacs children
  (AddForId ee cfor kids) tabx ak
e `ariaLabelledBy` _ = AddAriaIdAtrE (Proxy @"aria-labelledby") (Proxy @ee) e
infixl 3 `ariaLabelledBy`

ariaDescribedBy :: forall ctx props model action en r ei catrs kids cls eacs children ee cfor tabx ak.
  (KnownSymbol en, KnownSymbol ee) =>
  E ctx props model action en Composite r ei catrs kids cls eacs children cfor tabx ak ->
  forall fi -> (fi ~ ElementId ee) =>
  E ctx props model action en Composite r ei catrs kids cls eacs children
  (AddForId ee cfor kids) tabx ak
e `ariaDescribedBy` _ = AddAriaIdAtrE (Proxy @"aria-describedby") (Proxy @ee) e
infixl 3 `ariaDescribedBy`

(=#) :: forall ctx props model action en r catrs kids cls eacs children ee cfor tabx ak.
  (KnownSymbol en, KnownSymbol ee) =>
  E ctx props model action en Composite r Nothing catrs kids cls eacs children cfor tabx ak ->
  forall ei -> (ei ~ ElementId ee) =>
  E ctx props model action
    en
    Composite
    r
    (Just ee)
    ("id" : catrs)
    (AddTagId ee kids)
    cls
    (ConstraintsAfteId ee eacs)
    children
    (FilterOut ee cfor)
    tabx ak
e =# _ = IdE (Proxy @ee) e

infixl 3 =#

(=!) ::
  EventFactory ef model action =>
  E ctx props model action en es r ei atrs kids cls eacs children cfor tabx ak ->
  ef ->
  E ctx props model action en es r ei atrs kids cls eacs children cfor tabx ak
e =! ef = BindEventE ef e

infixl 3 =!

(</) ::
  KnownSymbol cen =>
  E ctx props model action pen Composite r       pi patrs pKids pcls peacs pchildren pfor ptabx pak ->
  E ctx props model action cen cs        Nothing ci catrs cKids ccls ceacs cchildren cfor ctabx cak ->
  E ctx props model action pen Composite r       pi patrs
    (MergeKids cKids pKids)
    pcls
    (ConstraintsAfterAppend pchildren ceacs pi pen patrs pcls peacs)
    (ChildrenConstrAfterAppend ci cen ccls pchildren)
    (MergeFors pKids cKids pfor cfor)
    (Append ptabx ctabx)
    (Append pak cak)
p </ c = AppendChildE c p

infixl 2 </

(<@) ::
  E ctx props model action pen Composite r pi patrs kids pcls peacs pchildren pfor tabx ak ->
  E ctx props model action CD Atomic Nothing Nothing '[] EmptyKids '[] '[] '[] '[] '[] '[] ->
  E ctx props model action
    pen
    Composite
    r
    pi
    patrs
    (MergeKids EmptyKids kids)
    pcls
    (ConstraintsAfterAppend pchildren '[] pi pen patrs pcls peacs)
    (ChildrenConstrAfterAppend Nothing CD '[] pchildren)
    (MergeFors kids EmptyKids pfor '[])
    (Append tabx '[])
    (Append ak '[])
(<@) = (</)

infixl 2 <@

(=<) ::
  E ctx props model action pen Composite r pi atrs kids pcls peacs pchildren pfor tabx ak ->
  View ctx props model action ->
  E ctx props model action
    pen
    Composite
    r
    pi
    atrs
    (MergeKids EmptyKids kids)
    pcls
    (ConstraintsAfterAppend pchildren '[] pi pen atrs pcls peacs)
    ('[T RMV] : pchildren)
    (MergeFors kids EmptyKids pfor '[])
    (Append tabx '[])
    (Append ak '[])
p =< rmv = p </ RawMisoView rmv

infixl 2 =<