noredink-ui/styleguide-app/Examples/DisclosureIndicator.elm

92 lines
2.4 KiB
Elm
Raw Normal View History

2020-03-31 22:43:32 +03:00
module Examples.DisclosureIndicator exposing (Msg, State, example)
2019-05-07 22:14:51 +03:00
{-|
2020-03-31 22:43:32 +03:00
@docs Msg, State, example
2019-05-07 22:14:51 +03:00
-}
import Category exposing (Category(..))
import Css
2020-03-31 23:20:03 +03:00
import Example exposing (Example)
import Html.Styled as Html
import Html.Styled.Attributes exposing (css)
import Html.Styled.Events exposing (onClick)
import Nri.Ui.Button.V8 as Button
import Nri.Ui.Colors.V1 as Colors
import Nri.Ui.DisclosureIndicator.V2 as DisclosureIndicator
import Nri.Ui.Text.V2 as Text
{-| -}
type alias State =
2019-05-09 19:46:57 +03:00
{ largeState : Bool
, mediumState : Bool
}
{-| -}
2020-03-31 23:20:03 +03:00
example : Example State Msg
2020-03-31 22:43:32 +03:00
example =
{ name = "Nri.Ui.DisclosureIndicator.V2"
2020-03-31 22:43:32 +03:00
, categories = [ Widgets ]
, state = init
, update = update
2020-03-31 22:48:26 +03:00
, subscriptions = \_ -> Sub.none
2020-03-31 22:43:32 +03:00
, view =
\state ->
[ Text.smallBodyGray [ Html.text "The disclosure indicator is only the caret. It is NOT a button -- you must create a button or clickabletext yourself!" ]
, Html.div [ css [ Css.displayFlex, Css.padding (Css.px 8) ] ]
[ toggleButton ToggleLarge "Toggle large indicator"
, toggleButton ToggleMedium "Toggle medium indicator"
]
, Html.div [ css [ Css.displayFlex, Css.alignItems Css.center, Css.marginBottom (Css.px 8) ] ]
[ DisclosureIndicator.large [ Css.marginRight (Css.px 10) ] state.largeState
, Html.text "I'm a 17px caret icon."
]
, Html.div [ css [ Css.displayFlex, Css.alignItems Css.center, Css.marginBottom (Css.px 8) ] ]
[ DisclosureIndicator.medium [ Css.paddingRight (Css.px 8) ] state.mediumState
, Html.text "I'm a 15px caret icon."
]
]
2019-05-07 22:34:33 +03:00
}
2019-05-07 22:27:25 +03:00
2019-05-07 22:34:33 +03:00
toggleButton : msg -> String -> Html.Html msg
toggleButton msg label =
Button.button
{ onClick = msg
, size = Button.Small
, style = Button.Secondary
, width = Button.WidthUnbounded
}
{ label = label
, state = Button.Enabled
, icon = Nothing
}
2019-05-07 22:27:25 +03:00
{-| -}
init : State
init =
2019-05-09 19:46:57 +03:00
{ largeState = False
, mediumState = False
}
2019-05-07 22:34:33 +03:00
{-| -}
type Msg
2019-05-09 19:46:57 +03:00
= ToggleLarge
| ToggleMedium
2019-05-07 22:34:33 +03:00
{-| -}
update : Msg -> State -> ( State, Cmd Msg )
update msg state =
case msg of
2019-05-09 19:46:57 +03:00
ToggleLarge ->
( { state | largeState = not state.largeState }, Cmd.none )
2019-05-07 22:34:33 +03:00
ToggleMedium ->
( { state | mediumState = not state.mediumState }, Cmd.none )