-----------------------------------------------------------------------------
{-# LANGUAGE OverloadedStrings #-}
-----------------------------------------------------------------------------
-- | Shared types used by the props API of every @Miso.UI.*@ component.
module Miso.UI.Types
  ( -- ** Types
    Variant (..)
  , Size (..)
  , Side (..)
  , Align (..)
    -- ** Helpers
  , variantSuffix
  , sizeSuffix
  , sideText
  , alignText
  ) where
-----------------------------------------------------------------------------
import           Miso.String (MisoString)
-----------------------------------------------------------------------------
-- | Style variant shared by 'Miso.UI.Button.button_', 'Miso.UI.Badge.badge_', etc.
data Variant
  = Primary
  | Secondary
  | Destructive
  | Outline
  | Ghost
  | Link
  deriving (Int -> Variant -> ShowS
[Variant] -> ShowS
Variant -> String
(Int -> Variant -> ShowS)
-> (Variant -> String) -> ([Variant] -> ShowS) -> Show Variant
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Variant -> ShowS
showsPrec :: Int -> Variant -> ShowS
$cshow :: Variant -> String
show :: Variant -> String
$cshowList :: [Variant] -> ShowS
showList :: [Variant] -> ShowS
Show, Variant -> Variant -> Bool
(Variant -> Variant -> Bool)
-> (Variant -> Variant -> Bool) -> Eq Variant
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Variant -> Variant -> Bool
== :: Variant -> Variant -> Bool
$c/= :: Variant -> Variant -> Bool
/= :: Variant -> Variant -> Bool
Eq)
-----------------------------------------------------------------------------
-- | Component sizing
data Size
  = DefaultSize
  | Small
  | Large
  deriving (Int -> Size -> ShowS
[Size] -> ShowS
Size -> String
(Int -> Size -> ShowS)
-> (Size -> String) -> ([Size] -> ShowS) -> Show Size
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Size -> ShowS
showsPrec :: Int -> Size -> ShowS
$cshow :: Size -> String
show :: Size -> String
$cshowList :: [Size] -> ShowS
showList :: [Size] -> ShowS
Show, Size -> Size -> Bool
(Size -> Size -> Bool) -> (Size -> Size -> Bool) -> Eq Size
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Size -> Size -> Bool
== :: Size -> Size -> Bool
$c/= :: Size -> Size -> Bool
/= :: Size -> Size -> Bool
Eq)
-----------------------------------------------------------------------------
-- | Placement side, used by tooltips, popovers and dropdown menus.
data Side
  = TopSide
  | RightSide
  | BottomSide
  | LeftSide
  deriving (Int -> Side -> ShowS
[Side] -> ShowS
Side -> String
(Int -> Side -> ShowS)
-> (Side -> String) -> ([Side] -> ShowS) -> Show Side
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Side -> ShowS
showsPrec :: Int -> Side -> ShowS
$cshow :: Side -> String
show :: Side -> String
$cshowList :: [Side] -> ShowS
showList :: [Side] -> ShowS
Show, Side -> Side -> Bool
(Side -> Side -> Bool) -> (Side -> Side -> Bool) -> Eq Side
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Side -> Side -> Bool
== :: Side -> Side -> Bool
$c/= :: Side -> Side -> Bool
/= :: Side -> Side -> Bool
Eq)
-----------------------------------------------------------------------------
-- | Placement alignment, used by tooltips, popovers and dropdown menus.
data Align
  = StartAlign
  | CenterAlign
  | EndAlign
  deriving (Int -> Align -> ShowS
[Align] -> ShowS
Align -> String
(Int -> Align -> ShowS)
-> (Align -> String) -> ([Align] -> ShowS) -> Show Align
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Align -> ShowS
showsPrec :: Int -> Align -> ShowS
$cshow :: Align -> String
show :: Align -> String
$cshowList :: [Align] -> ShowS
showList :: [Align] -> ShowS
Show, Align -> Align -> Bool
(Align -> Align -> Bool) -> (Align -> Align -> Bool) -> Eq Align
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Align -> Align -> Bool
== :: Align -> Align -> Bool
$c/= :: Align -> Align -> Bool
/= :: Align -> Align -> Bool
Eq)
-----------------------------------------------------------------------------
-- | Suffix used when building basecoat class names (e.g. @btn-outline@)
variantSuffix :: Variant -> MisoString
variantSuffix :: Variant -> MisoString
variantSuffix = \Variant
v ->
  case Variant
v of
    Variant
Primary     -> MisoString
"primary"
    Variant
Secondary   -> MisoString
"secondary"
    Variant
Destructive -> MisoString
"destructive"
    Variant
Outline     -> MisoString
"outline"
    Variant
Ghost       -> MisoString
"ghost"
    Variant
Link        -> MisoString
"link"
-----------------------------------------------------------------------------
-- | Suffix used when building basecoat class names (e.g. @btn-sm@)
sizeSuffix :: Size -> MisoString
sizeSuffix :: Size -> MisoString
sizeSuffix = \Size
s ->
  case Size
s of
    Size
DefaultSize -> MisoString
""
    Size
Small       -> MisoString
"sm"
    Size
Large       -> MisoString
"lg"
-----------------------------------------------------------------------------
-- | Value for @data-side@ attributes
sideText :: Side -> MisoString
sideText :: Side -> MisoString
sideText = \Side
s ->
  case Side
s of
    Side
TopSide    -> MisoString
"top"
    Side
RightSide  -> MisoString
"right"
    Side
BottomSide -> MisoString
"bottom"
    Side
LeftSide   -> MisoString
"left"
-----------------------------------------------------------------------------
-- | Value for @data-align@ attributes
alignText :: Align -> MisoString
alignText :: Align -> MisoString
alignText = \Align
a ->
  case Align
a of
    Align
StartAlign  -> MisoString
"start"
    Align
CenterAlign -> MisoString
"center"
    Align
EndAlign    -> MisoString
"end"
-----------------------------------------------------------------------------