This package contains independend widgets (no components) written for Elm-Ui. These widgets have no dependencies to other parts of this package. So you can just use as much as you need.
It also supports custom themes and has a material design theme already ready to use.
Examples of all widgets can be found here.

Summary
Example
Let's look at the button widget.
button: ButtonStyle msg
->
{ text : String
, icon : Element Never
, onPress : Maybe msg
}
-> Element msgIn comparison to Elm-Ui's button, we see that List (Attribute msg) has changed into a Style Type.
type alias ButtonStyle msg =
{ container : List (Attribute msg)
, labelRow : List (Attribute msg)
, ifDisabled : List (Attribute msg)
, ifActive : List (Attribute msg)
}For actually displaying the button we have a few different implementations:
{-| Button with only an icon and no text -}
iconButton :
ButtonStyle msg
->
{ text : String --for screen readers
, icon : Element Never
, onPress : Maybe msg
}
-> Element msg
{-| Button with a text but no icon -}
textButton :
ButtonStyle msg
->
{ textButton
| text : String
, onPress : Maybe msg
}
-> Element msg
{-| Button with both icon and text -}
button :
ButtonStyle msg
->
{ text : String
, icon : Element Never
, onPress : Maybe msg
}
-> Element msgWe also have a Widget Type for the button:
type alias Button msg =
{ text : String
, icon : Element Never
, onPress : Maybe msg
}We can use it to build more complex widgets, for example a select button:
type alias Select msg =
{ selected : Maybe Int
, options :
List
{ text : String
, icon : Element Never
}
, onSelect : Int -> Maybe msg
}
select :
Select msg
-> List ( Bool, Button msg )
selectButton :
ButtonStyle msg
-> ( Bool, Button msg )
-> Element msgIn Elm we like to use reusable views instead of components. At first this packages had a few components, but they where so complicated to use in comparison, so they got slowly turned into reusable views one by one.
Most could be reduced even further into view functions: reusable views without a model.
Currently we have only three reusable views: Widget.Layout, Widget.ScrollingNav and Widget.Snackbar.
For comparison, here are some alternative packages for creating UIs:
After looking at the current packages that implement various reusable views (and components) I noticed two things:
Element to Html is easy, the opposite is not always possible (as a lot of styling in Elm-Ui would not be adapted to the Html element.)This package tries to solve both of these problems.