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

111 lines
2.8 KiB
Elm
Raw Normal View History

module Examples.DisclosureIndicator exposing (Msg, State, example, init, update)
2019-05-07 22:14:51 +03:00
{-|
@docs Msg, State, example, init, update
-}
import Css
import Html.Styled as Html
import Html.Styled.Attributes exposing (css)
import Html.Styled.Events exposing (onClick)
import ModuleExample as ModuleExample exposing (Category(..), ModuleExample)
import Nri.Ui.DisclosureIndicator.V2 as DisclosureIndicator
import Nri.Ui.Fonts.V1 as Fonts
{-| -}
type alias State =
2019-05-09 19:46:57 +03:00
{ largeState : Bool
, mediumState : Bool
}
{-| -}
example : (Msg -> msg) -> State -> ModuleExample msg
example parentMessage state =
{ name = "Nri.Ui.DisclosureIndicator.V2"
2019-05-03 19:30:02 +03:00
, category = Widgets
, content =
2019-05-09 19:46:57 +03:00
[ viewExample ToggleLarge
state.largeState
(Css.px 17)
(DisclosureIndicator.large [ Css.marginRight (Css.px 10) ] state.largeState)
("DisclosureIndicator.large [ Css.marginRight (Css.px 10) ] True"
++ "\nI'm a 17px caret icon."
2019-05-07 22:34:33 +03:00
)
2019-05-09 19:46:57 +03:00
, viewExample ToggleMedium
state.mediumState
(Css.px 15)
(DisclosureIndicator.medium [ Css.paddingRight (Css.px 8) ] state.mediumState)
("DisclosureIndicator.medium [ Css.paddingRight (Css.px 8) ] True"
++ "\nI'm a 15px caret icon."
2019-05-07 22:34:33 +03:00
)
]
|> List.map (Html.map parentMessage)
}
2019-05-07 22:27:25 +03:00
2019-05-07 22:34:33 +03:00
viewExample : msg -> Bool -> Css.Px -> Html.Html msg -> String -> Html.Html msg
viewExample toggle isOpen fontSize disclosureView disclosureCode =
2019-05-09 19:46:57 +03:00
Html.div [ css [ Css.margin2 (Css.px 16) Css.zero ] ]
2019-05-07 22:34:33 +03:00
[ Html.div []
2019-05-07 22:27:25 +03:00
[ Html.button
[ css
[ Css.displayFlex
, Css.alignItems Css.center
, Css.borderStyle Css.none
, Css.outline Css.none
, Fonts.baseFont
2019-05-07 22:34:33 +03:00
, Css.fontSize fontSize
2019-05-07 22:27:25 +03:00
]
2019-05-07 22:34:33 +03:00
, onClick toggle
2019-05-07 22:27:25 +03:00
]
2019-05-07 22:34:33 +03:00
[ disclosureView
2019-05-09 19:46:57 +03:00
, Html.text "Toggle me!"
2019-05-07 22:27:25 +03:00
]
]
2019-05-07 22:34:33 +03:00
, if isOpen then
code disclosureCode
2019-05-07 22:27:25 +03:00
else
Html.text ""
]
2019-05-07 22:27:25 +03:00
code : String -> Html.Html msg
code copy =
Html.code
[ css
[ Css.fontSize (Css.px 12)
, Css.whiteSpace Css.pre
]
]
[ Html.text copy ]
{-| -}
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 )