{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE MultilineStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Miso.UI.ButtonGroup
(
ButtonGroupProps (..)
, defaultButtonGroupProps
, buttonGroup_
, 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
data ButtonGroupProps action
= ButtonGroupProps
{ forall action. ButtonGroupProps action -> [MisoString]
buttonGroupClasses :: [MisoString]
, forall action. ButtonGroupProps action -> [Attribute action]
buttonGroupAttrs :: [Attribute action]
}
defaultButtonGroupProps :: ButtonGroupProps action
defaultButtonGroupProps :: forall action. ButtonGroupProps action
defaultButtonGroupProps
= ButtonGroupProps
{ buttonGroupClasses :: [MisoString]
buttonGroupClasses = []
, buttonGroupAttrs :: [Attribute action]
buttonGroupAttrs = []
}
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
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 = []
}
"""