{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}

module WikiMusic.SSR.View.Css where

import Data.Text qualified as T
import Optics
import Relude
import Text.Blaze.Html qualified as BlazeHtml
import Text.Blaze.Html5.Attributes qualified as A
import WikiMusic.SSR.Model.Api

newtype Css = Css {Css -> Text
className :: Text} deriving ((forall x. Css -> Rep Css x)
-> (forall x. Rep Css x -> Css) -> Generic Css
forall x. Rep Css x -> Css
forall x. Css -> Rep Css x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Css -> Rep Css x
from :: forall x. Css -> Rep Css x
$cto :: forall x. Rep Css x -> Css
to :: forall x. Rep Css x -> Css
Generic, Css -> Css -> Bool
(Css -> Css -> Bool) -> (Css -> Css -> Bool) -> Eq Css
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Css -> Css -> Bool
== :: Css -> Css -> Bool
$c/= :: Css -> Css -> Bool
/= :: Css -> Css -> Bool
Eq, Int -> Css -> ShowS
[Css] -> ShowS
Css -> String
(Int -> Css -> ShowS)
-> (Css -> String) -> ([Css] -> ShowS) -> Show Css
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Css -> ShowS
showsPrec :: Int -> Css -> ShowS
$cshow :: Css -> String
show :: Css -> String
$cshowList :: [Css] -> ShowS
showList :: [Css] -> ShowS
Show)

makeFieldLabelsNoPrefix ''Css

cssToAttrValue :: [Text] -> BlazeHtml.AttributeValue
cssToAttrValue :: [Text] -> AttributeValue
cssToAttrValue = String -> AttributeValue
forall a. IsString a => String -> a
fromString (String -> AttributeValue)
-> ([Text] -> String) -> [Text] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
T.unpack (Text -> String) -> ([Text] -> Text) -> [Text] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Set Text -> Text
joinClasses (Set Text -> Text) -> ([Text] -> Set Text) -> [Text] -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Text] -> Set Text
[Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList
  where
    joinClasses :: Set Text -> Text
    joinClasses :: Set Text -> Text
joinClasses = Text -> [Text] -> Text
T.intercalate Text
" " ([Text] -> Text) -> (Set Text -> [Text]) -> Set Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Text] -> [Text]
forall a. Ord a => [a] -> [a]
sort ([Text] -> [Text]) -> (Set Text -> [Text]) -> Set Text -> [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Set Text -> [Text]
forall a. Set a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList

css' :: [Text] -> BlazeHtml.Attribute
css' :: [Text] -> Attribute
css' [Text]
xs = Set Text -> Attribute
css ([Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList [Text]
[Item (Set Text)]
xs :: Set Text)

css :: Set Text -> BlazeHtml.Attribute
css :: Set Text -> Attribute
css Set Text
xs = AttributeValue -> Attribute
A.class_ ([Text] -> AttributeValue
cssToAttrValue ([Text] -> AttributeValue) -> [Text] -> AttributeValue
forall a b. (a -> b) -> a -> b
$ Set Text -> [Text]
forall a. Set a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList Set Text
xs)

cssSubmitButton :: Set Text
cssSubmitButton :: Set Text
cssSubmitButton =
  [Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList
    [ Text
Item (Set Text)
"text-white",
      Text
Item (Set Text)
"bg-green-700/75",
      Text
Item (Set Text)
"hover:bg-green-800",
      Text
Item (Set Text)
"focus:outline-none",
      Text
Item (Set Text)
"focus:ring-4",
      Text
Item (Set Text)
"focus:ring-green-300",
      Text
Item (Set Text)
"font-medium",
      Text
Item (Set Text)
"rounded-2xl",
      Text
Item (Set Text)
"text-sm",
      Text
Item (Set Text)
"px-5",
      Text
Item (Set Text)
"py-2.5",
      Text
Item (Set Text)
"text-center",
      Text
Item (Set Text)
"font-mono",
      Text
Item (Set Text)
"w-fit"
    ]

cssButton :: ViewVars -> Set Text
cssButton :: ViewVars -> Set Text
cssButton ViewVars
vv =
  [Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList
    [ if ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars UiMode UiMode
#uiMode Optic A_Lens NoIx ViewVars ViewVars UiMode UiMode
-> Optic An_Iso NoIx UiMode UiMode Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx UiMode UiMode Text Text
#value Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
"dark" then Text
Item (Set Text)
"text-white" else Text
Item (Set Text)
"text-black",
      Text
"hover:bg-" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars Palette Palette
#palette Optic A_Lens NoIx ViewVars ViewVars Palette Palette
-> Optic An_Iso NoIx Palette Palette Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx Palette Palette Text Text
#value Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"-500/40",
      Text
Item (Set Text)
"focus:outline-none",
      Text
Item (Set Text)
"focus:ring-4",
      Text
Item (Set Text)
"focus:ring-gray-300",
      Text
Item (Set Text)
"font-medium",
      Text
Item (Set Text)
"rounded-2xl",
      Text
Item (Set Text)
"text-md",
      Text
Item (Set Text)
"px-5",
      Text
Item (Set Text)
"py-2.5",
      Text
Item (Set Text)
"font-mono",
      Text
Item (Set Text)
"w-fit",
      Text
Item (Set Text)
"border",
      Text
"border-" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars Palette Palette
#palette Optic A_Lens NoIx ViewVars ViewVars Palette Palette
-> Optic An_Iso NoIx Palette Palette Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx Palette Palette Text Text
#value Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"-500/40",
      Text
"bg-" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars Palette Palette
#palette Optic A_Lens NoIx ViewVars ViewVars Palette Palette
-> Optic An_Iso NoIx Palette Palette Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx Palette Palette Text Text
#value Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"-400/40"
    ]

cssSelect :: ViewVars -> Set Text
cssSelect :: ViewVars -> Set Text
cssSelect ViewVars
vv =
  [Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList
    [ if ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars UiMode UiMode
#uiMode Optic A_Lens NoIx ViewVars ViewVars UiMode UiMode
-> Optic An_Iso NoIx UiMode UiMode Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx UiMode UiMode Text Text
#value Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
"dark" then Text
Item (Set Text)
"text-white" else Text
Item (Set Text)
"text-black",
      Text
"bg-" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars Palette Palette
#palette Optic A_Lens NoIx ViewVars ViewVars Palette Palette
-> Optic An_Iso NoIx Palette Palette Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx Palette Palette Text Text
#value Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"-400/40",
      Text
"hover:bg-" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars Palette Palette
#palette Optic A_Lens NoIx ViewVars ViewVars Palette Palette
-> Optic An_Iso NoIx Palette Palette Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx Palette Palette Text Text
#value Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"-500/40",
      Text
Item (Set Text)
"focus:outline-none",
      Text
Item (Set Text)
"focus:ring-4",
      Text
Item (Set Text)
"focus:ring-gray-300",
      Text
Item (Set Text)
"font-medium",
      Text
Item (Set Text)
"rounded-2xl",
      Text
Item (Set Text)
"text-sm",
      Text
Item (Set Text)
"px-8",
      Text
Item (Set Text)
"cursor-pointer",
      Text
Item (Set Text)
"py-2",
      Text
Item (Set Text)
"font-mono",
      Text
Item (Set Text)
"w-fit",
      Text
Item (Set Text)
"h-fit",
      Text
"border-" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars Palette Palette
#palette Optic A_Lens NoIx ViewVars ViewVars Palette Palette
-> Optic An_Iso NoIx Palette Palette Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx Palette Palette Text Text
#value Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"-400/40"
    ]

cssCenteredCardGrid :: Set Text
cssCenteredCardGrid :: Set Text
cssCenteredCardGrid = [Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList [Text
Item (Set Text)
"flex", Text
Item (Set Text)
"flex-row", Text
Item (Set Text)
"flex-wrap", Text
Item (Set Text)
"gap-4", Text
Item (Set Text)
"justify-center", Text
Item (Set Text)
"align-center"]

cssInput :: Set Text
cssInput :: Set Text
cssInput = [Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList [Text
Item (Set Text)
"rounded-2xl", Text
Item (Set Text)
"px-5", Text
Item (Set Text)
"py-2.5", Text
Item (Set Text)
"font-mono", Text
Item (Set Text)
"w-full", Text
Item (Set Text)
"bg-white/40"]

cssTextarea :: Set Text
cssTextarea :: Set Text
cssTextarea = [Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList [Text
Item (Set Text)
"rounded-2xl", Text
Item (Set Text)
"px-5", Text
Item (Set Text)
"py-2.5", Text
Item (Set Text)
"w-full", Text
Item (Set Text)
"h-fit", Text
Item (Set Text)
"min-h-72", Text
Item (Set Text)
"bg-white/40"]

cssDetails :: ViewVars -> Set Text
cssDetails :: ViewVars -> Set Text
cssDetails ViewVars
vv =
  [Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList
    [ Text
Item (Set Text)
"border-2",
      Text
Item (Set Text)
"border",
      Text
Item (Set Text)
"border-gray-200",
      Text
Item (Set Text)
"p-4",
      Text
Item (Set Text)
"[&_svg]:open:-rotate-180]",
      Text
Item (Set Text)
"my-4",
      Text
Item (Set Text)
"rounded-2xl",
      if ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars UiMode UiMode
#uiMode Optic A_Lens NoIx ViewVars ViewVars UiMode UiMode
-> Optic An_Iso NoIx UiMode UiMode Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx UiMode UiMode Text Text
#value Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
"dark" then Text
Item (Set Text)
"bg-black/70" else Text
Item (Set Text)
"bg-white/80",
      if ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars UiMode UiMode
#uiMode Optic A_Lens NoIx ViewVars ViewVars UiMode UiMode
-> Optic An_Iso NoIx UiMode UiMode Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx UiMode UiMode Text Text
#value Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== Text
"dark" then Text
Item (Set Text)
"text-white" else Text
Item (Set Text)
"text-black"
    ]

cssSummary :: Set Text
cssSummary :: Set Text
cssSummary = [Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList [Text
Item (Set Text)
"text-xl", Text
Item (Set Text)
"font-bold", Text
Item (Set Text)
"cursor-pointer"]

cssLink :: ViewVars -> Set Text
cssLink :: ViewVars -> Set Text
cssLink ViewVars
vv = [Item (Set Text)] -> Set Text
forall l. IsList l => [Item l] -> l
fromList [Text
"text-" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ViewVars
vv ViewVars -> Optic' A_Lens NoIx ViewVars Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx ViewVars ViewVars Palette Palette
#palette Optic A_Lens NoIx ViewVars ViewVars Palette Palette
-> Optic An_Iso NoIx Palette Palette Text Text
-> Optic' A_Lens NoIx ViewVars Text
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic An_Iso NoIx Palette Palette Text Text
#value Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"-500", Text
Item (Set Text)
"font-bold", Text
Item (Set Text)
"font-mono", Text
Item (Set Text)
"cursor-pointer"]