Create Tailwind module
Moving the UI.tw function into Tailwind.use. Creating and consuming some functions like Tailwind.if_ and Tailwind.when to make it easier to conditionally style some of my components.
This commit is contained in:
parent
7b2163d804
commit
f92fe97aff
5 changed files with 49 additions and 27 deletions
|
@ -5,6 +5,7 @@ import Html.Attributes exposing (..)
|
||||||
import Html.Events exposing (..)
|
import Html.Events exposing (..)
|
||||||
import Responsive
|
import Responsive
|
||||||
import State
|
import State
|
||||||
|
import Tailwind
|
||||||
import UI
|
import UI
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +17,7 @@ header1 copy =
|
||||||
, "pb-12"
|
, "pb-12"
|
||||||
, Responsive.h1
|
, Responsive.h1
|
||||||
]
|
]
|
||||||
|> UI.tw
|
|> Tailwind.use
|
||||||
|> class
|
|> class
|
||||||
]
|
]
|
||||||
[ text copy ]
|
[ text copy ]
|
||||||
|
@ -29,7 +30,7 @@ header2 copy =
|
||||||
, "pb-10"
|
, "pb-10"
|
||||||
, Responsive.h2
|
, Responsive.h2
|
||||||
]
|
]
|
||||||
|> UI.tw
|
|> Tailwind.use
|
||||||
|> class
|
|> class
|
||||||
]
|
]
|
||||||
[ text copy ]
|
[ text copy ]
|
||||||
|
@ -41,7 +42,7 @@ paragraph copy =
|
||||||
[ [ "pb-10"
|
[ [ "pb-10"
|
||||||
, Responsive.h3
|
, Responsive.h3
|
||||||
]
|
]
|
||||||
|> UI.tw
|
|> Tailwind.use
|
||||||
|> class
|
|> class
|
||||||
]
|
]
|
||||||
[ text copy ]
|
[ text copy ]
|
||||||
|
@ -59,15 +60,15 @@ numberedList items =
|
||||||
, "list-decimal"
|
, "list-decimal"
|
||||||
, Responsive.h3
|
, Responsive.h3
|
||||||
]
|
]
|
||||||
|> UI.tw
|
|> Tailwind.use
|
||||||
|> class
|
|> class
|
||||||
]
|
]
|
||||||
(items |> List.map (\x -> li [ [ "pb-10" ] |> UI.tw |> class ] [ text x ]))
|
(items |> List.map (\x -> li [ [ "pb-10" ] |> Tailwind.use |> class ] [ text x ]))
|
||||||
|
|
||||||
|
|
||||||
render : State.Model -> Html State.Msg
|
render : State.Model -> Html State.Msg
|
||||||
render model =
|
render model =
|
||||||
div [ [ "container", "mx-auto" ] |> UI.tw |> class ]
|
div [ [ "container", "mx-auto" ] |> Tailwind.use |> class ]
|
||||||
[ header1 "Welcome to LearnPianoChords.app!"
|
[ header1 "Welcome to LearnPianoChords.app!"
|
||||||
, paragraph """
|
, paragraph """
|
||||||
Learn Piano Chords helps piano players master chords.
|
Learn Piano Chords helps piano players master chords.
|
||||||
|
@ -110,7 +111,7 @@ render model =
|
||||||
"""
|
"""
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
, div [ [ "text-center", "py-20" ] |> UI.tw |> class ]
|
, div [ [ "text-center", "py-20" ] |> Tailwind.use |> class ]
|
||||||
[ UI.simpleButton
|
[ UI.simpleButton
|
||||||
{ label = "Let's get started"
|
{ label = "Let's get started"
|
||||||
, handleClick = State.SetView State.Preferences
|
, handleClick = State.SetView State.Preferences
|
||||||
|
|
|
@ -6,6 +6,7 @@ import Html.Events exposing (..)
|
||||||
import Icon
|
import Icon
|
||||||
import Responsive
|
import Responsive
|
||||||
import State
|
import State
|
||||||
|
import Tailwind
|
||||||
import Tempo
|
import Tempo
|
||||||
import Theory
|
import Theory
|
||||||
import UI
|
import UI
|
||||||
|
@ -105,7 +106,7 @@ keyCheckboxes model =
|
||||||
, "pt-10"
|
, "pt-10"
|
||||||
, Responsive.h2
|
, Responsive.h2
|
||||||
]
|
]
|
||||||
|> UI.tw
|
|> Tailwind.use
|
||||||
|> class
|
|> class
|
||||||
]
|
]
|
||||||
[ text "Select keys" ]
|
[ text "Select keys" ]
|
||||||
|
@ -134,7 +135,7 @@ closePreferences =
|
||||||
, "top-0"
|
, "top-0"
|
||||||
, "z-10"
|
, "z-10"
|
||||||
]
|
]
|
||||||
|> UI.tw
|
|> Tailwind.use
|
||||||
|> class
|
|> class
|
||||||
, onClick (State.SetView State.Practice)
|
, onClick (State.SetView State.Practice)
|
||||||
]
|
]
|
||||||
|
|
29
website/sandbox/learnpianochords/src/Tailwind.elm
Normal file
29
website/sandbox/learnpianochords/src/Tailwind.elm
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
module Tailwind exposing (..)
|
||||||
|
|
||||||
|
{-| Functions to make Tailwind development in Elm even more pleasant.
|
||||||
|
-}
|
||||||
|
|
||||||
|
|
||||||
|
{-| Conditionally use `class` selection when `condition` is true.
|
||||||
|
-}
|
||||||
|
when : Bool -> String -> String
|
||||||
|
when condition class =
|
||||||
|
if condition then
|
||||||
|
class
|
||||||
|
|
||||||
|
else
|
||||||
|
""
|
||||||
|
|
||||||
|
|
||||||
|
if_ : Bool -> String -> String -> String
|
||||||
|
if_ condition whenTrue whenFalse =
|
||||||
|
if condition then
|
||||||
|
whenTrue
|
||||||
|
|
||||||
|
else
|
||||||
|
whenFalse
|
||||||
|
|
||||||
|
|
||||||
|
use : List String -> String
|
||||||
|
use styles =
|
||||||
|
String.join " " styles
|
|
@ -4,6 +4,7 @@ import Html exposing (..)
|
||||||
import Html.Attributes exposing (..)
|
import Html.Attributes exposing (..)
|
||||||
import Html.Events exposing (..)
|
import Html.Events exposing (..)
|
||||||
import Responsive
|
import Responsive
|
||||||
|
import Tailwind
|
||||||
import UI
|
import UI
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +21,7 @@ render { tempo, handleInput } =
|
||||||
[ [ "py-10"
|
[ [ "py-10"
|
||||||
, Responsive.h2
|
, Responsive.h2
|
||||||
]
|
]
|
||||||
|> UI.tw
|
|> Tailwind.use
|
||||||
|> class
|
|> class
|
||||||
]
|
]
|
||||||
[ text (String.fromInt tempo ++ " BPM") ]
|
[ text (String.fromInt tempo ++ " BPM") ]
|
||||||
|
|
|
@ -4,6 +4,7 @@ import Html exposing (..)
|
||||||
import Html.Attributes exposing (..)
|
import Html.Attributes exposing (..)
|
||||||
import Html.Events exposing (..)
|
import Html.Events exposing (..)
|
||||||
import Responsive
|
import Responsive
|
||||||
|
import Tailwind
|
||||||
|
|
||||||
|
|
||||||
type Color
|
type Color
|
||||||
|
@ -31,11 +32,6 @@ textForColor color =
|
||||||
"text-black"
|
"text-black"
|
||||||
|
|
||||||
|
|
||||||
tw : List String -> String
|
|
||||||
tw styles =
|
|
||||||
String.join " " styles
|
|
||||||
|
|
||||||
|
|
||||||
simpleButton :
|
simpleButton :
|
||||||
{ label : String
|
{ label : String
|
||||||
, handleClick : msg
|
, handleClick : msg
|
||||||
|
@ -57,7 +53,7 @@ simpleButton { label, handleClick, color, classes } =
|
||||||
]
|
]
|
||||||
in
|
in
|
||||||
button
|
button
|
||||||
[ class (tw <| List.concat [ buttonClasses, classes ])
|
[ class (Tailwind.use <| List.concat [ buttonClasses, classes ])
|
||||||
, onClick handleClick
|
, onClick handleClick
|
||||||
]
|
]
|
||||||
[ text label ]
|
[ text label ]
|
||||||
|
@ -90,7 +86,7 @@ textToggleButton { label, toggled, handleClick, classes } =
|
||||||
]
|
]
|
||||||
in
|
in
|
||||||
button
|
button
|
||||||
[ class (tw <| List.concat [ buttonClasses, classes ])
|
[ class (Tailwind.use <| List.concat [ buttonClasses, classes ])
|
||||||
, onClick handleClick
|
, onClick handleClick
|
||||||
]
|
]
|
||||||
[ text label ]
|
[ text label ]
|
||||||
|
@ -116,7 +112,7 @@ textField { placeholderText, handleInput, classes } =
|
||||||
]
|
]
|
||||||
in
|
in
|
||||||
input
|
input
|
||||||
[ class (tw <| List.concat [ inputClasses, classes ])
|
[ class (Tailwind.use <| List.concat [ inputClasses, classes ])
|
||||||
, onInput handleInput
|
, onInput handleInput
|
||||||
, placeholder placeholderText
|
, placeholder placeholderText
|
||||||
]
|
]
|
||||||
|
@ -139,17 +135,11 @@ overlayButton { label, handleClick, isVisible } =
|
||||||
, "z-30"
|
, "z-30"
|
||||||
, "w-screen"
|
, "w-screen"
|
||||||
, "h-screen"
|
, "h-screen"
|
||||||
|
, Tailwind.if_ isVisible "opacity-100" "opacity-0"
|
||||||
]
|
]
|
||||||
|
|
||||||
extraClasses =
|
|
||||||
if isVisible then
|
|
||||||
[ "opacity-100" ]
|
|
||||||
|
|
||||||
else
|
|
||||||
[ "opacity-0" ]
|
|
||||||
in
|
in
|
||||||
button
|
button
|
||||||
[ List.concat [ classes, extraClasses ] |> tw |> class
|
[ classes |> Tailwind.use |> class
|
||||||
, style "background-color" "rgba(0,0,0,0.30)"
|
, style "background-color" "rgba(0,0,0,0.30)"
|
||||||
, onClick handleClick
|
, onClick handleClick
|
||||||
]
|
]
|
||||||
|
@ -157,7 +147,7 @@ overlayButton { label, handleClick, isVisible } =
|
||||||
[ style "-webkit-text-stroke-width" "2px"
|
[ style "-webkit-text-stroke-width" "2px"
|
||||||
, style "-webkit-text-stroke-color" "black"
|
, style "-webkit-text-stroke-color" "black"
|
||||||
, class <|
|
, class <|
|
||||||
tw
|
Tailwind.use
|
||||||
[ "transform"
|
[ "transform"
|
||||||
, "-rotate-90"
|
, "-rotate-90"
|
||||||
, "text-white"
|
, "text-white"
|
||||||
|
|
Loading…
Reference in a new issue