{-# OPTIONS_GHC -Wno-missing-role-annotations #-} {-# OPTIONS_GHC -Wno-term-variable-capture #-} module Dashi.Components.ActionBar where import Clay hiding ( area , fullWidth , left , legend , name , not , option , required , right , selected , span_ , type_ ) import Clay qualified import Dashi.Prelude hiding (Left, Right, has, (#), (&), (**), (|>)) import Dashi.Style.Tokens import Dashi.Style.Util import Miso.Html.Element (div_) import Miso.Html.Property (class_) data Area = Left | Centre | Right deriving stock (Area -> Area -> Bool (Area -> Area -> Bool) -> (Area -> Area -> Bool) -> Eq Area forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Area -> Area -> Bool == :: Area -> Area -> Bool $c/= :: Area -> Area -> Bool /= :: Area -> Area -> Bool Eq, Eq Area Eq Area => (Area -> Area -> Ordering) -> (Area -> Area -> Bool) -> (Area -> Area -> Bool) -> (Area -> Area -> Bool) -> (Area -> Area -> Bool) -> (Area -> Area -> Area) -> (Area -> Area -> Area) -> Ord Area Area -> Area -> Bool Area -> Area -> Ordering Area -> Area -> Area forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: Area -> Area -> Ordering compare :: Area -> Area -> Ordering $c< :: Area -> Area -> Bool < :: Area -> Area -> Bool $c<= :: Area -> Area -> Bool <= :: Area -> Area -> Bool $c> :: Area -> Area -> Bool > :: Area -> Area -> Bool $c>= :: Area -> Area -> Bool >= :: Area -> Area -> Bool $cmax :: Area -> Area -> Area max :: Area -> Area -> Area $cmin :: Area -> Area -> Area min :: Area -> Area -> Area Ord, Area Area -> Area -> Bounded Area forall a. a -> a -> Bounded a $cminBound :: Area minBound :: Area $cmaxBound :: Area maxBound :: Area Bounded, Int -> Area Area -> Int Area -> [Area] Area -> Area Area -> Area -> [Area] Area -> Area -> Area -> [Area] (Area -> Area) -> (Area -> Area) -> (Int -> Area) -> (Area -> Int) -> (Area -> [Area]) -> (Area -> Area -> [Area]) -> (Area -> Area -> [Area]) -> (Area -> Area -> Area -> [Area]) -> Enum Area forall a. (a -> a) -> (a -> a) -> (Int -> a) -> (a -> Int) -> (a -> [a]) -> (a -> a -> [a]) -> (a -> a -> [a]) -> (a -> a -> a -> [a]) -> Enum a $csucc :: Area -> Area succ :: Area -> Area $cpred :: Area -> Area pred :: Area -> Area $ctoEnum :: Int -> Area toEnum :: Int -> Area $cfromEnum :: Area -> Int fromEnum :: Area -> Int $cenumFrom :: Area -> [Area] enumFrom :: Area -> [Area] $cenumFromThen :: Area -> Area -> [Area] enumFromThen :: Area -> Area -> [Area] $cenumFromTo :: Area -> Area -> [Area] enumFromTo :: Area -> Area -> [Area] $cenumFromThenTo :: Area -> Area -> Area -> [Area] enumFromThenTo :: Area -> Area -> Area -> [Area] Enum) instance Token Area where tokenName :: forall s. (IsString s, Semigroup s) => Area -> s tokenName Area Left = s "left" tokenName Area Centre = s "centre" tokenName Area Right = s "right" data ActionBar model action = ActionBar { forall model action. ActionBar model action -> [View model action] left :: [View model action] , forall model action. ActionBar model action -> [View model action] centre :: [View model action] , forall model action. ActionBar model action -> [View model action] right :: [View model action] } instance Widget (ActionBar model action) model action where widget' :: [Attribute action] -> ActionBar model action -> View model action widget' [Attribute action] attrs ActionBar{[View model action] left :: forall model action. ActionBar model action -> [View model action] centre :: forall model action. ActionBar model action -> [View model action] right :: forall model action. ActionBar model action -> [View model action] left :: [View model action] centre :: [View model action] right :: [View model action] ..} = [Attribute action] -> [View model action] -> View model action forall action model. [Attribute action] -> [View model action] -> View model action div_ (MisoString -> Attribute action forall action. MisoString -> Attribute action class_ MisoString "action-bar" Attribute action -> [Attribute action] -> [Attribute action] forall a. a -> [a] -> [a] : [Attribute action] attrs) ([View model action] -> View model action) -> ([[View model action]] -> [View model action]) -> [[View model action]] -> View model action forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . [[View model action]] -> [View model action] forall a. Monoid a => [a] -> a mconcat ([[View model action]] -> View model action) -> [[View model action]] -> View model action forall a b. (a -> b) -> a -> b $ [ [[Attribute action] -> [View model action] -> View model action forall action model. [Attribute action] -> [View model action] -> View model action div_ [Area -> Attribute action forall t action. Token t => t -> Attribute action forall action. Area -> Attribute action tokenAttr Area Left] [View model action] left | Bool -> Bool not (Bool -> Bool) -> Bool -> Bool forall a b. (a -> b) -> a -> b $ [View model action] -> Bool forall a. [a] -> Bool forall (t :: * -> *) a. Foldable t => t a -> Bool null [View model action] left] , [[Attribute action] -> [View model action] -> View model action forall action model. [Attribute action] -> [View model action] -> View model action div_ [Area -> Attribute action forall t action. Token t => t -> Attribute action forall action. Area -> Attribute action tokenAttr Area Centre] [View model action] centre | Bool -> Bool not (Bool -> Bool) -> Bool -> Bool forall a b. (a -> b) -> a -> b $ [View model action] -> Bool forall a. [a] -> Bool forall (t :: * -> *) a. Foldable t => t a -> Bool null [View model action] centre] , [[Attribute action] -> [View model action] -> View model action forall action model. [Attribute action] -> [View model action] -> View model action div_ [Area -> Attribute action forall t action. Token t => t -> Attribute action forall action. Area -> Attribute action tokenAttr Area Right] [View model action] right | Bool -> Bool not (Bool -> Bool) -> Bool -> Bool forall a b. (a -> b) -> a -> b $ [View model action] -> Bool forall a. [a] -> Bool forall (t :: * -> *) a. Foldable t => t a -> Bool null [View model action] right] ] style :: Css style = do Selector forall a. IsString a => a form Selector -> Css -> Css ? Selector ".action-bar" Selector -> Css -> Css ? Size LengthUnit -> Css forall a. Size a -> Css marginTop (Space -> ValueType Space forall t. (Token t, Val (ValueType t), Other (ValueType t)) => t -> ValueType t token (Space -> ValueType Space) -> Space -> ValueType Space forall a b. (a -> b) -> a -> b $ SizeToken -> Space Space SizeToken Medium) Selector ".action-bar" Selector -> Css -> Css ? do Css fullWidth NonEmpty Refinement -> Refinement forall a. Semigroup a => NonEmpty a -> a sconcat (Selector -> Refinement has (Selector -> Refinement) -> (Area -> Selector) -> Area -> Refinement forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (Selector "" Selector -> Refinement -> Selector #) (Refinement -> Selector) -> (Area -> Refinement) -> Area -> Selector forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Area -> Refinement forall t. Token t => t -> Refinement byToken (Area -> Refinement) -> NonEmpty Area -> NonEmpty Refinement forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall t l. (Token t, IsList l, Item l ~ t) => l allTokens @Area) Refinement -> Css -> Css & do Display -> Css display Display grid (Area -> Css) -> Css forall t. Token t => (t -> Css) -> Css byTokens \Area area -> do Key MisoString "grid-area" Key MisoString -> MisoString -> Css -: Area -> MisoString forall s. (IsString s, Semigroup s) => Area -> s forall t s. (Token t, IsString s, Semigroup s) => t -> s tokenName Area area Display -> Css display Display flex FlexDirection -> Css flexDirection FlexDirection row SizeToken -> Css gap' SizeToken XSmall JustifyContentValue -> Css justifyContent (JustifyContentValue -> Css) -> JustifyContentValue -> Css forall a b. (a -> b) -> a -> b $ case Area area of Area Left -> JustifyContentValue forall a. FlexStart a => a flexStart Area Centre -> JustifyContentValue forall a. Center a => a center Area Right -> JustifyContentValue forall a. FlexEnd a => a flexEnd [[Value]] -> Css gridTemplateAreas [Area -> Value forall s. (IsString s, Semigroup s) => Area -> s forall t s. (Token t, IsString s, Semigroup s) => t -> s tokenName (Area -> Value) -> [Area] -> [Value] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall t l. (Token t, IsList l, Item l ~ t) => l allTokens @Area] [Size LengthUnit] -> Css forall a. [Size a] -> Css gridTemplateColumns [Number -> Size LengthUnit fr Number 1, Number -> Size LengthUnit fr Number 1, Number -> Size LengthUnit fr Number 1] Refinement -> Refinement forall a. Not a => a -> Refinement Clay.not (Selector -> Refinement has (Selector "" Selector -> Refinement -> Selector # Area -> Refinement forall t. Token t => t -> Refinement byToken Area Centre)) Refinement -> Css -> Css & do Display -> Css display Display flex FlexDirection -> Css flexDirection FlexDirection row AlignItemsValue -> Css alignItems AlignItemsValue forall a. Baseline a => a baseline JustifyContentValue -> Css justifyContent JustifyContentValue forall a. SpaceBetween a => a spaceBetween Selector "" Selector -> Css -> Css ? (Area -> Css) -> Css forall t. Token t => (t -> Css) -> Css byTokens \case Area Left -> () -> Css forall a. a -> StyleM a forall (f :: * -> *) a. Applicative f => a -> f a pure () Area Centre -> () -> Css forall a. a -> StyleM a forall (f :: * -> *) a. Applicative f => a -> f a pure () Area Right -> AlignItemsValue -> Css alignItems AlignItemsValue forall a. FlexEnd a => a flexEnd Selector self Selector -> Selector -> Selector |> Selector star Selector -> Css -> Css ? do Display -> Css display Display flex FlexDirection -> Css flexDirection FlexDirection row SizeToken -> Css gap' SizeToken XSmall