2021-10-13 20:44:03 +03:00
|
|
|
|
module Examples.Container exposing (Msg, State, example)
|
|
|
|
|
|
|
|
|
|
{-|
|
|
|
|
|
|
|
|
|
|
@docs Msg, State, example
|
|
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
import Category exposing (Category(..))
|
2022-03-22 03:12:15 +03:00
|
|
|
|
import CommonControls
|
2021-10-13 20:44:03 +03:00
|
|
|
|
import Css
|
2021-10-22 01:36:55 +03:00
|
|
|
|
import Debug.Control as Control exposing (Control)
|
2021-10-22 03:20:29 +03:00
|
|
|
|
import Debug.Control.Extra as ControlExtra
|
2022-03-22 03:12:15 +03:00
|
|
|
|
import Debug.Control.View as ControlView
|
2021-10-13 20:44:03 +03:00
|
|
|
|
import Example exposing (Example)
|
2021-10-22 03:32:14 +03:00
|
|
|
|
import Html.Styled as Html exposing (Html)
|
2021-10-13 20:44:03 +03:00
|
|
|
|
import Html.Styled.Attributes exposing (css)
|
2021-10-21 22:17:48 +03:00
|
|
|
|
import Nri.Ui.Container.V2 as Container
|
2021-10-13 20:44:03 +03:00
|
|
|
|
import Nri.Ui.Heading.V2 as Heading
|
|
|
|
|
|
|
|
|
|
|
2022-03-25 17:41:28 +03:00
|
|
|
|
moduleName : String
|
|
|
|
|
moduleName =
|
|
|
|
|
"Container"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
version : Int
|
|
|
|
|
version =
|
|
|
|
|
2
|
|
|
|
|
|
|
|
|
|
|
2021-10-13 20:44:03 +03:00
|
|
|
|
{-| -}
|
|
|
|
|
example : Example State Msg
|
|
|
|
|
example =
|
2022-03-25 17:41:28 +03:00
|
|
|
|
{ name = moduleName
|
|
|
|
|
, version = version
|
2021-10-13 20:44:03 +03:00
|
|
|
|
, categories = [ Layout ]
|
|
|
|
|
, keyboardSupport = []
|
|
|
|
|
, state = init
|
|
|
|
|
, update = update
|
|
|
|
|
, subscriptions = \_ -> Sub.none
|
2021-11-05 22:35:01 +03:00
|
|
|
|
, preview =
|
|
|
|
|
[ Container.view []
|
|
|
|
|
, Container.view
|
|
|
|
|
[ Container.invalid
|
|
|
|
|
, Container.css [ Css.marginTop (Css.px 8) ]
|
|
|
|
|
]
|
|
|
|
|
, Container.view
|
|
|
|
|
[ Container.disabled
|
|
|
|
|
, Container.css [ Css.marginTop (Css.px 8) ]
|
|
|
|
|
]
|
|
|
|
|
]
|
2021-10-13 20:44:03 +03:00
|
|
|
|
, view =
|
2022-03-29 20:19:32 +03:00
|
|
|
|
\ellieLinkConfig state ->
|
2021-10-22 01:36:55 +03:00
|
|
|
|
let
|
|
|
|
|
attributes =
|
2022-03-22 03:12:15 +03:00
|
|
|
|
List.map Tuple.second (Control.currentValue state.control)
|
2021-10-22 01:36:55 +03:00
|
|
|
|
in
|
2022-03-22 03:12:15 +03:00
|
|
|
|
[ ControlView.view
|
2022-03-29 20:19:32 +03:00
|
|
|
|
{ ellieLinkConfig = ellieLinkConfig
|
|
|
|
|
, name = moduleName
|
2022-03-25 17:41:28 +03:00
|
|
|
|
, version = version
|
|
|
|
|
, update = UpdateControl
|
2022-03-22 03:12:15 +03:00
|
|
|
|
, settings = state.control
|
2022-04-13 03:08:59 +03:00
|
|
|
|
, mainType = "RootHtml.Html msg"
|
2022-04-13 03:32:46 +03:00
|
|
|
|
, extraImports = []
|
2022-03-22 03:12:15 +03:00
|
|
|
|
, toExampleCode =
|
|
|
|
|
\settings ->
|
|
|
|
|
let
|
|
|
|
|
stringAttributes =
|
|
|
|
|
List.map Tuple.first settings
|
|
|
|
|
in
|
|
|
|
|
[ { sectionName = "Default Container"
|
|
|
|
|
, code = viewExampleCode stringAttributes
|
|
|
|
|
}
|
|
|
|
|
, { sectionName = "Gray Container"
|
|
|
|
|
, code = viewExampleCode ("Container.gray" :: stringAttributes)
|
|
|
|
|
}
|
|
|
|
|
, { sectionName = "Pillow Container"
|
|
|
|
|
, code = viewExampleCode ("Container.pillow" :: stringAttributes)
|
|
|
|
|
}
|
|
|
|
|
, { sectionName = "Buttony Container"
|
|
|
|
|
, code = viewExampleCode ("Container.buttony" :: stringAttributes)
|
|
|
|
|
}
|
|
|
|
|
, { sectionName = "Disabled Container"
|
|
|
|
|
, code = viewExampleCode ("Container.disabled" :: stringAttributes)
|
|
|
|
|
}
|
|
|
|
|
, { sectionName = "Invalid Container"
|
|
|
|
|
, code = viewExampleCode ("Container.invalid" :: stringAttributes)
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
2021-10-22 03:32:14 +03:00
|
|
|
|
, viewExample
|
|
|
|
|
{ name = "Default Container"
|
|
|
|
|
, description = "Your go-to container."
|
|
|
|
|
}
|
|
|
|
|
(Container.default :: attributes)
|
|
|
|
|
, viewExample
|
|
|
|
|
{ name = "Gray Container"
|
|
|
|
|
, description = "A container that doesn’t draw too much attention to itself."
|
|
|
|
|
}
|
|
|
|
|
(Container.gray :: attributes)
|
|
|
|
|
, viewExample
|
|
|
|
|
{ name = "Pillow Container"
|
|
|
|
|
, description = "When you want something big and soft."
|
|
|
|
|
}
|
|
|
|
|
(Container.pillow :: attributes)
|
|
|
|
|
, viewExample
|
|
|
|
|
{ name = "Buttony Container"
|
|
|
|
|
, description = "Used for clickable button card things."
|
|
|
|
|
}
|
|
|
|
|
(Container.buttony :: attributes)
|
|
|
|
|
, viewExample
|
|
|
|
|
{ name = "Disabled Container"
|
|
|
|
|
, description = "Used to indicate content is locked/inaccessible"
|
|
|
|
|
}
|
|
|
|
|
(Container.disabled :: attributes)
|
|
|
|
|
, viewExample
|
|
|
|
|
{ name = "Invalid Container"
|
|
|
|
|
, description = "Used to indicate content is invalid"
|
|
|
|
|
}
|
|
|
|
|
(Container.invalid :: attributes)
|
2021-10-13 20:44:03 +03:00
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2021-10-22 03:32:14 +03:00
|
|
|
|
viewExample : { name : String, description : String } -> List (Container.Attribute msg) -> Html msg
|
|
|
|
|
viewExample { name, description } attributes =
|
|
|
|
|
Html.section
|
|
|
|
|
[ css
|
2021-10-22 19:27:14 +03:00
|
|
|
|
[ Css.marginTop (Css.px 20)
|
2021-10-22 03:32:14 +03:00
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
[ Heading.h3 [] [ Html.text name ]
|
|
|
|
|
, Html.text description
|
|
|
|
|
, Container.view attributes
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
2022-03-22 03:12:15 +03:00
|
|
|
|
viewExampleCode : List String -> String
|
|
|
|
|
viewExampleCode attributes =
|
2022-03-25 17:41:28 +03:00
|
|
|
|
moduleName
|
|
|
|
|
++ ".view\n [ "
|
2022-03-22 03:12:15 +03:00
|
|
|
|
++ String.join "\n , " attributes
|
|
|
|
|
++ "\n ]"
|
|
|
|
|
|
|
|
|
|
|
2021-10-22 01:36:55 +03:00
|
|
|
|
{-| -}
|
|
|
|
|
type alias State =
|
2022-03-22 03:12:15 +03:00
|
|
|
|
{ control : Control (List ( String, Container.Attribute Msg ))
|
2021-10-22 01:36:55 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2021-10-13 20:44:03 +03:00
|
|
|
|
{-| -}
|
|
|
|
|
init : State
|
|
|
|
|
init =
|
2021-10-22 01:36:55 +03:00
|
|
|
|
{ control =
|
2021-10-22 03:20:29 +03:00
|
|
|
|
ControlExtra.list
|
2021-10-22 03:27:29 +03:00
|
|
|
|
|> ControlExtra.optionalListItem "paddingPx" controlPaddingPx
|
2022-03-22 03:12:15 +03:00
|
|
|
|
|> CommonControls.css { moduleName = "Container", use = Container.css }
|
2021-10-22 03:20:29 +03:00
|
|
|
|
|> ControlExtra.listItem "content" controlContent
|
2021-10-22 01:36:55 +03:00
|
|
|
|
}
|
2021-10-13 20:44:03 +03:00
|
|
|
|
|
|
|
|
|
|
2022-03-22 03:12:15 +03:00
|
|
|
|
controlPaddingPx : Control ( String, Container.Attribute msg )
|
2021-10-22 03:27:29 +03:00
|
|
|
|
controlPaddingPx =
|
2022-03-22 03:12:15 +03:00
|
|
|
|
Control.map
|
|
|
|
|
(\val ->
|
|
|
|
|
( "Container.paddingPx " ++ String.fromFloat val
|
|
|
|
|
, Container.paddingPx val
|
|
|
|
|
)
|
2021-10-22 03:27:29 +03:00
|
|
|
|
)
|
2022-03-22 03:12:15 +03:00
|
|
|
|
(ControlExtra.float 20)
|
2021-10-22 03:23:59 +03:00
|
|
|
|
|
|
|
|
|
|
2022-03-22 03:12:15 +03:00
|
|
|
|
controlContent : Control ( String, Container.Attribute msg )
|
2021-10-22 01:36:55 +03:00
|
|
|
|
controlContent =
|
2022-03-22 03:12:15 +03:00
|
|
|
|
CommonControls.content
|
|
|
|
|
{ moduleName = "Container"
|
|
|
|
|
, plaintext = Container.plaintext
|
|
|
|
|
, markdown = Just Container.markdown
|
|
|
|
|
, html = Container.html
|
|
|
|
|
, httpError = Nothing
|
|
|
|
|
}
|
2021-10-13 20:44:03 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{-| -}
|
2021-10-22 01:36:55 +03:00
|
|
|
|
type Msg
|
2022-03-22 03:12:15 +03:00
|
|
|
|
= UpdateControl (Control (List ( String, Container.Attribute Msg )))
|
2021-10-13 20:44:03 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{-| -}
|
|
|
|
|
update : Msg -> State -> ( State, Cmd Msg )
|
|
|
|
|
update msg state =
|
2021-10-22 01:36:55 +03:00
|
|
|
|
case msg of
|
|
|
|
|
UpdateControl newControl ->
|
|
|
|
|
( { state | control = newControl }, Cmd.none )
|