-----------------------------------------------------------------------------
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE MultilineStrings  #-}
{-# LANGUAGE RecordWildCards   #-}
-----------------------------------------------------------------------------
module Miso.UI.ButtonGroup
  ( -- ** Props
    ButtonGroupProps (..)
  , defaultButtonGroupProps
    -- ** Views
  , buttonGroup_
    -- ** Samples
  , buttonGroupUsage
  , buttonGroupSample
  , buttonGroupCodeSample
  , buttonGroupPropsApi
  ) where
-----------------------------------------------------------------------------
import           Miso
import qualified Miso.Html.Element as H
import qualified Miso.Html.Property as P
-----------------------------------------------------------------------------
import           Miso.UI.Button
import           Miso.UI.DropDownMenu
import           Miso.UI.Icons
import           Miso.UI.Types
-----------------------------------------------------------------------------
-- | Props for 'buttonGroup_'
data ButtonGroupProps action
  = ButtonGroupProps
  { forall action. ButtonGroupProps action -> [MisoString]
buttonGroupClasses :: [MisoString]
    -- ^ Extra classes appended to @div.button-group@
  , forall action. ButtonGroupProps action -> [Attribute action]
buttonGroupAttrs :: [Attribute action]
  }
-----------------------------------------------------------------------------
-- | Smart constructor
defaultButtonGroupProps :: ButtonGroupProps action
defaultButtonGroupProps :: forall action. ButtonGroupProps action
defaultButtonGroupProps
  = ButtonGroupProps
  { buttonGroupClasses :: [MisoString]
buttonGroupClasses = []
  , buttonGroupAttrs :: [Attribute action]
buttonGroupAttrs = []
  }
-----------------------------------------------------------------------------
-- | <https://basecoatui.com/components/button-group/ Button Group>: attached
-- row of buttons (children are typically 'Miso.UI.Button.button_' views)
buttonGroup_
  :: ButtonGroupProps action
  -> [View model action]
  -> View model action
buttonGroup_ :: forall action model.
ButtonGroupProps action -> [View model action] -> View model action
buttonGroup_ ButtonGroupProps {[MisoString]
[Attribute action]
buttonGroupClasses :: forall action. ButtonGroupProps action -> [MisoString]
buttonGroupAttrs :: forall action. ButtonGroupProps action -> [Attribute action]
buttonGroupClasses :: [MisoString]
buttonGroupAttrs :: [Attribute action]
..} [View model action]
kids =
  [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.div_
    ( [MisoString] -> Attribute action
forall action. [MisoString] -> Attribute action
P.classes_ (MisoString
"button-group" MisoString -> [MisoString] -> [MisoString]
forall a. a -> [a] -> [a]
: [MisoString]
buttonGroupClasses)
    Attribute action -> [Attribute action] -> [Attribute action]
forall a. a -> [a] -> [a]
: MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.role_ MisoString
"group"
    Attribute action -> [Attribute action] -> [Attribute action]
forall a. a -> [a] -> [a]
: [Attribute action]
buttonGroupAttrs
    ) [View model action]
kids
-----------------------------------------------------------------------------
-- | Compact usage example (source of the kitchen sink "Code" tab)
buttonGroupUsage :: View model action
buttonGroupUsage :: forall model action. View model action
buttonGroupUsage =
  ButtonGroupProps action -> [View model action] -> View model action
forall action model.
ButtonGroupProps action -> [View model action] -> View model action
buttonGroup_ ButtonGroupProps action
forall action. ButtonGroupProps action
defaultButtonGroupProps
  [ ButtonProps action -> [View model action] -> View model action
forall action model.
ButtonProps action -> [View model action] -> View model action
button_ ButtonProps action
forall action. ButtonProps action
defaultButtonProps { buttonVariant = Outline } [ View model action
"Archive" ]
  , ButtonProps action -> [View model action] -> View model action
forall action model.
ButtonProps action -> [View model action] -> View model action
button_ ButtonProps action
forall action. ButtonProps action
defaultButtonProps { buttonVariant = Outline } [ View model action
"Report" ]
  , ButtonProps action -> [View model action] -> View model action
forall action model.
ButtonProps action -> [View model action] -> View model action
button_ ButtonProps action
forall action. ButtonProps action
defaultButtonProps { buttonVariant = Outline, buttonIcon = True }
    [ [Attribute action] -> View model action
forall action model. [Attribute action] -> View model action
dotsIcon [] ]
  ]
-----------------------------------------------------------------------------
buttonGroupSample :: View model action
buttonGroupSample :: forall model action. View model action
buttonGroupSample =
  [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.div_
  [ MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.class_ MisoString
"flex w-fit items-stretch gap-2" ]
  [ ButtonProps action -> [View model action] -> View model action
forall action model.
ButtonProps action -> [View model action] -> View model action
button_ ButtonProps (ZonkAny 0)
forall action. ButtonProps action
defaultButtonProps
    { buttonIcon = True
    , buttonVariant = Outline
    , buttonAttrs = [ P.aria_ "label" "Go Back" ]
    }
    [ [Attribute action] -> View model action
forall action model. [Attribute action] -> View model action
arrowLeftIcon [] ]
  , ButtonGroupProps action -> [View model action] -> View model action
forall action model.
ButtonGroupProps action -> [View model action] -> View model action
buttonGroup_ ButtonGroupProps action
forall action. ButtonGroupProps action
defaultButtonGroupProps
    [ ButtonProps action -> [View model action] -> View model action
forall action model.
ButtonProps action -> [View model action] -> View model action
button_ ButtonProps action
forall action. ButtonProps action
defaultButtonProps { buttonVariant = Outline } [ View model action
"Archive" ]
    , ButtonProps action -> [View model action] -> View model action
forall action model.
ButtonProps action -> [View model action] -> View model action
button_ ButtonProps action
forall action. ButtonProps action
defaultButtonProps { buttonVariant = Outline } [ View model action
"Report" ]
    ]
  , ButtonGroupProps action -> [View model action] -> View model action
forall action model.
ButtonGroupProps action -> [View model action] -> View model action
buttonGroup_ ButtonGroupProps action
forall action. ButtonGroupProps action
defaultButtonGroupProps
    [ ButtonProps action -> [View model action] -> View model action
forall action model.
ButtonProps action -> [View model action] -> View model action
button_ ButtonProps action
forall action. ButtonProps action
defaultButtonProps { buttonVariant = Outline } [ View model action
"Snooze" ]
    , DropdownMenuProps model action
-> [View model action] -> View model action
forall model action.
DropdownMenuProps model action
-> [View model action] -> View model action
dropdownMenu_ DropdownMenuProps (ZonkAny 1) action
forall model action. DropdownMenuProps model action
defaultDropdownMenuProps
      { dropdownMenuId = "dropdown-menu-button-group"
      , dropdownMenuTriggerClasses = [ "btn-icon-outline" ]
      , dropdownMenuTrigger = [ dotsIcon [] ]
      , dropdownMenuAlign = EndAlign
      }
      [ [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
menuItem_ [] [ View model action
"Mark as Read" ]
      , [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
menuItem_ [] [ View model action
"Archive" ]
      , View model action
forall model action. View model action
menuSeparator_
      , [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
menuItem_ [] [ View model action
"Snooze" ]
      , [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
menuItem_ [] [ View model action
"Add to Calendar" ]
      , [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
menuItem_ [] [ View model action
"Add to List" ]
      , View model action
forall model action. View model action
menuSeparator_
      , [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
menuItem_
        [ MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.class_ MisoString
"text-destructive hover:bg-destructive/10 dark:hover:bg-destructive/20 focus:bg-destructive/10 dark:focus:bg-destructive/20 focus:text-destructive [&_svg]:!text-destructive" ]
        [ [Attribute action] -> View model action
forall action model. [Attribute action] -> View model action
trashIcon [], View model action
"Trash" ]
      ]
    ]
  ]
-----------------------------------------------------------------------------
buttonGroupCodeSample :: View model action
buttonGroupCodeSample :: forall model action. View model action
buttonGroupCodeSample =
  View model action
"""
  -----------------------------------------------------------------------------
  module MyButtonGroup (buttonGroupUsage) where
  -----------------------------------------------------------------------------
  import           Miso
  import qualified Miso.Html.Element as H
  import qualified Miso.Html.Property as P
  import           Miso.UI.Button
  import           Miso.UI.DropDownMenu
  import           Miso.UI.Icons
  import           Miso.UI.Types
  import           Miso.UI.ButtonGroup
  -----------------------------------------------------------------------------
  buttonGroupUsage :: View model action
  buttonGroupUsage =
    buttonGroup_ defaultButtonGroupProps
    [ button_ defaultButtonProps { buttonVariant = Outline } [ "Archive" ]
    , button_ defaultButtonProps { buttonVariant = Outline } [ "Report" ]
    , button_ defaultButtonProps { buttonVariant = Outline, buttonIcon = True }
      [ dotsIcon [] ]
    ]
  """
-----------------------------------------------------------------------------
buttonGroupPropsApi :: View model action
buttonGroupPropsApi :: forall model action. View model action
buttonGroupPropsApi =
  View model action
"""
  -- | Props for 'buttonGroup_'
  data ButtonGroupProps action
    = ButtonGroupProps
    { buttonGroupClasses :: [MisoString]
      -- ^ Extra classes appended to @div.button-group@
    , buttonGroupAttrs :: [Attribute action]
    }
  -----------------------------------------------------------------------------
  -- | Smart constructor
  defaultButtonGroupProps :: ButtonGroupProps action
  defaultButtonGroupProps
    = ButtonGroupProps
    { buttonGroupClasses = []
    , buttonGroupAttrs = []
    }
  """
-----------------------------------------------------------------------------