From bb3ae50376b8b9b8c98ab46d8c3e34f5c6cce194 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 25 May 2020 07:40:46 +0200 Subject: [PATCH] Added images for doc, starting with doc --- docs/assets/button.png | Bin 0 -> 2639 bytes docs/assets/dialog.png | Bin 0 -> 4753 bytes docs/assets/expansionPanel.png | Bin 0 -> 2704 bytes docs/assets/list.png | Bin 0 -> 2095 bytes docs/assets/material-style.png | Bin 0 -> 17218 bytes docs/assets/modal.png | Bin 0 -> 4426 bytes docs/assets/multiSelect.png | Bin 0 -> 2429 bytes docs/assets/select.png | Bin 0 -> 2141 bytes docs/assets/snackbar.png | Bin 0 -> 6274 bytes docs/assets/sortTable.png | Bin 0 -> 6221 bytes docs/assets/tab.png | Bin 0 -> 2538 bytes docs/assets/template-style.png | Bin 0 -> 22214 bytes docs/assets/textInput.png | Bin 0 -> 2804 bytes docs/select.png | Bin 933 -> 0 bytes elm.json | 8 +- example/elm.json | 4 +- example/src/Data/Example.elm | 210 +++++++++----- example/src/Data/Section.elm | 2 - example/src/Data/Style.elm | 32 +-- example/src/Data/Style/Material.elm | 5 +- example/src/Data/Theme.elm | 1 + example/src/Example/Dialog.elm | 4 +- example/src/Main.elm | 412 +++++++++++++++------------- src/Widget/Layout.elm | 3 +- src/Widget/ScrollingNav.elm | 58 +++- src/Widget/Snackbar.elm | 7 +- src/Widget/Style.elm | 31 +++ src/Widget/Style/Material.elm | 5 +- src/Widget/Style/Template.elm | 3 + 29 files changed, 490 insertions(+), 295 deletions(-) create mode 100644 docs/assets/button.png create mode 100644 docs/assets/dialog.png create mode 100644 docs/assets/expansionPanel.png create mode 100644 docs/assets/list.png create mode 100644 docs/assets/material-style.png create mode 100644 docs/assets/modal.png create mode 100644 docs/assets/multiSelect.png create mode 100644 docs/assets/select.png create mode 100644 docs/assets/snackbar.png create mode 100644 docs/assets/sortTable.png create mode 100644 docs/assets/tab.png create mode 100644 docs/assets/template-style.png create mode 100644 docs/assets/textInput.png delete mode 100644 docs/select.png diff --git a/docs/assets/button.png b/docs/assets/button.png new file mode 100644 index 0000000000000000000000000000000000000000..0c468e3ef2eec32764101323a319d964109af767 GIT binary patch literal 2639 zcmb7Fdpy)x8$T9>%GyOH+oam8RT?RYvb97~sE|uk%#h0z)fhiaQDd~NXbBr-6fw-W zc0r6Gl&O?UVpwyjmuAZ4H_XInX3X!M_WkGm>;1g@e7@&-p7VXa=lpY?&vSl1?B%vX z&r}Zpu)=-6i#GroOm%)*M^o*eDyF_w2MvO^n=`2CS^Y`9(TZ^LbOPZ1AIp@X+5l*R z!ydk_Y90U->Z@M|fCE5Ts)Hp;odJgpYSI}1_04zy2mqx931#IBHsCCsa1KZD2mY=R z)HM{qZ2%;DfU{pma6;idEuCF)_%jCxq0SHlUAS-opeVpK7q}OqoG9RE8H&il0{GO@ z=~GMKQ##WTI&jo7arAOAUSEs_^H{KO+CWS+n@RX_CSk+O#Z9v**0au`6z`~99I+64 zPH~J(0^}~#l^z>%mrZ()!!?Q%#ydwl5J-xJ7$01 zBcTJB4(6}Ae9ZEgz2POzIV>$a`I#E>nHD=oC(JX5^Bn;00P{oV;GuI1taR^cGOmjZ zy2uV)=?8jl9pjgH_t5Y|Gy=bYB%*nX7{|mlIPn9#xB)L~B_W-p403gGaWRF~mC?X& zOqVgUWz4LF*2=%=tttu|$?Zl8IkM^jaoGS;EkNo=#bskiy%=GM5SA2S$&jHMim0{l z>76e_MT%z+-gmUB`X0*rAIaY~$%oq%!Xj8$G(Xp>#)7D~P~4e|j24Oq%ESZJVoo(O zRwf%`AtDwcWg#*ao6YX+?d|XH9~>MU9UbLzxqLofAP{tLkl`l^ez#okO3@`ndJtqt zj0_t##D8aEB_b0e3K4>c5XDz&W@ct~c2**hNTt%bxjC8Iq{tkCATk-Ekg3DM z!ors?UzAGa;^HELC{-$zy7;w`|A}Fjj@ha8x@Y$XsvB9q^Xt-J$5w=?NmQI`K%7tP zsW>R~d^k888Wj_Vi3yKeYm2eL*c$#C`4oU9kKA3Hd=pMgQ-6buTv1OfjGXRYN@p41 zbs|At#eLZ@NqfDXmTo#r7HLq2b_)1SD><;x)I0Bqa%^rX(vV8McGI+ul}0rSJca&g(N@6&-h`BJ(OOGoh;w zi_58a&$#FApIOnBRlILI^T%b(d;bX6a+qcqqv!8%MV;K0kNDD3-QCG?nY#H18iJfZ z|6-D3+0xjUugTsMJ0diQzq$EMlVPe5Yp471E{|uS#q2iaH4Q|oSkPUA^2uPmsUDNZ z%{gd)-E%EFk6nK?Yv+^APOcW@@FsE!g6YZ>DDN2`zSicT)iI9~*j`G(tTtr!)ZR4|8zZopO zNF6%fk=<;>xJW1Vz>d!bskz_gpDFzSViec-WgL27<5~Tl7rCbw|u!9FW?sT z3-n&icsG;(9~Mw|dB!WL*^lK`Y(cqBo=CqtpDQs)u7*M(lOUlR;mPxG8)arOm!WfI zl>zF5g zwT3a5FWK={Euq3JhoD7myZm`-TFpl#i^}gf^#nNyw8ir&Ftbe$i`9&&t!zf2kh>Pwd%Y zWiOf0&Ocxf46Qg%)BVZT?-oFZv9|^LDr3LLz&~M4-W_{ou2aR_>fqzG3X9cL7kQapJ({MB_|h1&XzV);jFb81G-MWqjMg`cJ{9 zQ+--nBT{dNL4Vb0KlWke*^c%2R#9P|=ccD2WjW1Hnm6T|C!R|*-`YBA3%~OC0eU!= zrWNQL(&Tdo17iix)9(2xRfI!4&%&$iFX{Rd-%Qr{3M&ug-n2gW9^Bnk-TrtJIc3tR zHn-33v~%#9_FHFO+g38-Wzh*ojx1CgcTsHFn|^?W+wmuJV&{jCZ}ln1X05G&Ki{JFNrE{Zpf=^ymi*+0jw{oSMl^0G>^nZy z_%{J*B`wN&PJ_D57W%7^O$bB)zp&yE6#S&kK?)Hex%ICd%aUU>r4Zb8yb zih!zh8ZMbG4jfZP#x6V#TsMivBuA`LH$Tyig9%g?AOS6<4I@d=4UN-qSey?bGRm`F zP!VVv%@4~%YYy|Cl~AY8OfI?wks@-tF{_xn>Np?VhPf;4n{bg&;Ex^u6D3?5TY8P^ Z+wrQ2wld#`Klz3;v56>4InCvZUg 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 I!r|;c08#^ksQ>@~ literal 0 HcmV?d00001 diff --git a/docs/assets/material-style.png b/docs/assets/material-style.png new file mode 100644 index 0000000000000000000000000000000000000000..d83a905671304db536a15a6740bcf61d605373ed GIT binary patch literal 17218 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 literal 0 HcmV?d00001 diff --git a/docs/assets/modal.png b/docs/assets/modal.png new file mode 100644 index 0000000000000000000000000000000000000000..64d11bb97d205fe30959da3dc15b6ef3b482aa95 GIT binary patch literal 4426 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 B7XJVM literal 0 HcmV?d00001 diff --git a/docs/assets/multiSelect.png b/docs/assets/multiSelect.png new file mode 100644 index 0000000000000000000000000000000000000000..9a64163100e1a4710e11d96d6541e9c25b6e9cf0 GIT binary patch literal 2429 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 GliS_kLVm$njb%~ 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 Fe*mfW|A+tp literal 0 HcmV?d00001 diff --git a/docs/assets/sortTable.png b/docs/assets/sortTable.png new file mode 100644 index 0000000000000000000000000000000000000000..18fcab45d852bef9f8e8b2a8fea9a90689d70990 GIT binary patch literal 6221 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 No)%oQUfu4+e*kCJjDr9G literal 0 HcmV?d00001 diff --git a/docs/assets/tab.png b/docs/assets/tab.png new file mode 100644 index 0000000000000000000000000000000000000000..616d1cda6e45d1b9160e8f6a67d43d8fdfd16f64 GIT binary patch literal 2538 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 C$gCLv literal 0 HcmV?d00001 diff --git a/docs/assets/template-style.png b/docs/assets/template-style.png new file mode 100644 index 0000000000000000000000000000000000000000..f2200a8326e2cb922ec99c555dacea761f98d734 GIT binary patch literal 22214 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 Bk6r)( literal 0 HcmV?d00001 diff --git a/docs/assets/textInput.png b/docs/assets/textInput.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6cf98cc91b1c9c9989f1a3ff2f020767ddd6c GIT binary patch literal 2804 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 TUG)9@?Qh_U^V-LAIuidUTp(NU literal 0 HcmV?d00001 diff --git a/docs/select.png b/docs/select.png deleted file mode 100644 index b544c665a9ee4505d29832528524f06bf63b4b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmV;W16urvP)r001fo0ssI2Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;JKBXv6>j0~Sd{K~#8N?c70b(?Apk;1Obj)K%3Dk>CpS z5}Y9F5qgN`5LqP~x@5tM6p)}GAy`$4L<@m7aoQ%zswi1m$_aQges;!Vdy+aco^g4< z-X@t!na<}owxhaixm+IK-R=k98^bT`_XoQ*c#ri9>K)YcKc}}9<|fW{obh-(olbGs zkHCCpv)N*?02+4u_h#?%R9#0KHIR9@4f_dof|IHwh!gXG4FtzL3m}0I+Yi2}>u9M~ zHiAdku#4(=P$q2?1OX2F7w93@xU#>eK^3%)TOP3SnFkt(sq1K|5}x?16WOqf9?r#n z5J&JNtuq>paM;UK#*@FZvGb~VlGY&}sj@txbsX|UHpC-p#gp3EobwEaLmc)pPI=CO z=Pgdeeu$^IT=PUW5aP+JBAy?_ql*h3>9WlU57-b-x`?M#i05JRd~NOQ9zIsy%$9kc ze&=8}No(DALx^LAN6h3%zC-A>a9)sR=M3L1ku7=JPxuU~=MgJ%(CJ67PWWo*g%HOA zPruvbYp~)GHt|a_T3%=io;QblT0E8WoOPP%-??`rY2^iRjPvlBh$KAxSZPVElzZB7 zk)z9l;Bj;A;p;9wRLA4)+#||8Pqh25+dUA+9FMeR74wMWrgZB-YR$gb|rve^v z+!(Qe)RG5p)YZs0gK7}RK2QF>r@bfBWLut1%P3EYAdVFtiyCzm;(;QbQgOkh5~)@{_un#w*Jc?{7F4`%!ojAsqHB&^q(^oP}Ws zLeN7`t?qIKkN!Rze8lP4Ps9UJcqWqx{)8Wi{_O diff --git a/elm.json b/elm.json index 966a9b6..1b50a13 100644 --- a/elm.json +++ b/elm.json @@ -6,9 +6,11 @@ "version": "1.0.0", "exposed-modules": [ "Widget.Layout", - "Widget.Style", "Widget.ScrollingNav", - "Widget.Snackbar" + "Widget.Snackbar", + "Widget.Style", + "Widget.Style.Material", + "Widget.Style.Template" ], "elm-version": "0.19.0 <= v < 0.20.0", "dependencies": { @@ -29,4 +31,4 @@ "test-dependencies": { "elm-explorations/test": "1.2.1 <= v < 2.0.0" } -} +} \ No newline at end of file diff --git a/example/elm.json b/example/elm.json index d7b3bbb..c04d182 100644 --- a/example/elm.json +++ b/example/elm.json @@ -20,6 +20,7 @@ "mdgriffith/elm-ui": "1.1.5", "noahzgordon/elm-color-extra": "1.0.2", "ryannhg/elm-spa": "4.1.0", + "turboMaCk/any-set": "1.4.0", "turboMaCk/queue": "1.0.2", "wernerdegroot/listzipper": "4.0.0" }, @@ -28,7 +29,8 @@ "elm/regex": "1.0.0", "elm/url": "1.0.0", "elm/virtual-dom": "1.0.2", - "fredcy/elm-parseint": "2.0.1" + "fredcy/elm-parseint": "2.0.1", + "turboMaCk/any-dict": "2.3.0" } }, "test-dependencies": { diff --git a/example/src/Data/Example.elm b/example/src/Data/Example.elm index c43a4e9..9572ebb 100644 --- a/example/src/Data/Example.elm +++ b/example/src/Data/Example.elm @@ -1,4 +1,4 @@ -module Data.Example exposing (Example, asList, toString,fromString, Model, Msg, init, subscriptions, toCardList, update, view) +module Data.Example exposing (Example, Model, Msg, asList, fromString, init, subscriptions, toCardList, toString, update, view) import Data.Style exposing (Style) import Element exposing (Element) @@ -15,6 +15,7 @@ import Example.TextInput as TextInput import Framework.Grid as Grid import View.Test as Test + type Example = ButtonExample | SelectExample @@ -27,6 +28,7 @@ type Example | TextInputExample | ListExample + asList : List Example asList = [ ButtonExample @@ -40,65 +42,147 @@ asList = , TextInputExample , ListExample ] - |> List.sortBy toString + |> List.sortBy toString toString : Example -> String toString example = case example of - ButtonExample -> "Button" - SelectExample -> "Select" - MultiSelectExample -> "Multi Select" - ExpansionPanelExample -> "ExpansionPanel" - TabExample -> "Tab" - SortTableExample -> "SortTable" - ModalExample -> "Modal" - DialogExample -> "Dialog" - TextInputExample -> "TextInput" - ListExample -> "List" + ButtonExample -> + "Button" -fromString : String -> Maybe Example + SelectExample -> + "Select" + + MultiSelectExample -> + "Multi Select" + + ExpansionPanelExample -> + "ExpansionPanel" + + TabExample -> + "Tab" + + SortTableExample -> + "SortTable" + + ModalExample -> + "Modal" + + DialogExample -> + "Dialog" + + TextInputExample -> + "TextInput" + + ListExample -> + "List" + + +fromString : String -> Maybe Example fromString string = case string of - "Button" -> Just ButtonExample - "Select" -> Just SelectExample - "Multi Select" -> Just MultiSelectExample - "ExpansionPanel" -> Just ExpansionPanelExample - "Tab" -> Just TabExample - "SortTable" -> Just SortTableExample - "Modal" -> Just ModalExample - "Dialog" -> Just DialogExample - "TextInput" -> Just TextInputExample - "List" -> Just ListExample - _ -> Nothing + "Button" -> + Just ButtonExample + + "Select" -> + Just SelectExample + + "Multi Select" -> + Just MultiSelectExample + + "ExpansionPanel" -> + Just ExpansionPanelExample + + "Tab" -> + Just TabExample + + "SortTable" -> + Just SortTableExample + + "Modal" -> + Just ModalExample + + "Dialog" -> + Just DialogExample + + "TextInput" -> + Just TextInputExample + + "List" -> + Just ListExample + + _ -> + Nothing + get : Example -> ExampleView msg -> Element msg get example = case example of - ButtonExample -> .button - SelectExample -> .select - MultiSelectExample -> .multiSelect - ExpansionPanelExample -> .expansionPanel - TabExample -> .tab - SortTableExample -> .sortTable - ModalExample -> .modal - DialogExample -> .dialog - TextInputExample -> .textInput - ListExample -> .list + ButtonExample -> + .button + + SelectExample -> + .select + + MultiSelectExample -> + .multiSelect + + ExpansionPanelExample -> + .expansionPanel + + TabExample -> + .tab + + SortTableExample -> + .sortTable + + ModalExample -> + .modal + + DialogExample -> + .dialog + + TextInputExample -> + .textInput + + ListExample -> + .list + toTests : Example -> msg -> Style msg -> List ( String, Element msg ) toTests example = case example of - ButtonExample -> Test.button - SelectExample -> Test.select - MultiSelectExample -> Test.multiSelect - ExpansionPanelExample -> Test.expansionPanel - TabExample -> Test.tab - SortTableExample -> Test.sortTable - ModalExample -> Test.modal - DialogExample -> Test.dialog - TextInputExample -> Test.textInput - ListExample -> Test.list + ButtonExample -> + Test.button + + SelectExample -> + Test.select + + MultiSelectExample -> + Test.multiSelect + + ExpansionPanelExample -> + Test.expansionPanel + + TabExample -> + Test.tab + + SortTableExample -> + Test.sortTable + + ModalExample -> + Test.modal + + DialogExample -> + Test.dialog + + TextInputExample -> + Test.textInput + + ListExample -> + Test.list + type Msg = Button Button.Msg @@ -113,7 +197,6 @@ type Msg | List List.Msg - type alias Model = { button : Button.Model , select : Select.Model @@ -150,18 +233,20 @@ type alias UpgradeCollection = , list : UpgradeRecord List.Model List.Msg } + type alias ExampleView msg = { button : Element msg - , select : Element msg - , multiSelect : Element msg - , expansionPanel : Element msg - , tab : Element msg - , sortTable : Element msg - , modal : Element msg - , dialog : Element msg - , textInput : Element msg - , list : Element msg - } + , select : Element msg + , multiSelect : Element msg + , expansionPanel : Element msg + , tab : Element msg + , sortTable : Element msg + , modal : Element msg + , dialog : Element msg + , textInput : Element msg + , list : Element msg + } + init : ( Model, Cmd Msg ) init = @@ -358,7 +443,6 @@ view : -> Style msg -> Model -> ExampleView msg - view msgMapper style model = { button = Button.view (Button >> msgMapper) style (.button model) @@ -392,13 +476,13 @@ toCardList : -> List ( String, Element msg, Element msg ) toCardList { idle, msgMapper, style, model } = asList - |> List.map - (\example -> - { title = example |> toString - , example = example |> get - , test = example |> toTests - } - ) + |> List.map + (\example -> + { title = example |> toString + , example = example |> get + , test = example |> toTests + } + ) |> List.map (\{ title, example, test } -> ( title diff --git a/example/src/Data/Section.elm b/example/src/Data/Section.elm index 28d9d9a..ffb9f47 100644 --- a/example/src/Data/Section.elm +++ b/example/src/Data/Section.elm @@ -14,7 +14,6 @@ asList = toString : Section -> String toString section = case section of - ReusableViews -> "Reusable" @@ -25,7 +24,6 @@ toString section = fromString : String -> Maybe Section fromString string = case string of - "Reusable" -> Just ReusableViews diff --git a/example/src/Data/Style.elm b/example/src/Data/Style.elm index ba5d3c2..7886b7f 100644 --- a/example/src/Data/Style.elm +++ b/example/src/Data/Style.elm @@ -6,27 +6,27 @@ import Widget.Style , ColumnStyle , DialogStyle , ExpansionPanelStyle + , LayoutStyle , RowStyle , SortTableStyle , TabStyle , TextInputStyle - , LayoutStyle ) type alias Style msg = - { dialog : DialogStyle msg - , expansionPanel : ExpansionPanelStyle msg - , button : ButtonStyle msg - , primaryButton : ButtonStyle msg - , tab : TabStyle msg - , textInput : TextInputStyle msg - , chipButton : ButtonStyle msg - , row : RowStyle msg - , buttonRow : RowStyle msg - , column : ColumnStyle msg - , cardColumn : ColumnStyle msg - , sortTable : SortTableStyle msg - , selectButton : ButtonStyle msg - , layout : LayoutStyle msg - } + { dialog : DialogStyle msg + , expansionPanel : ExpansionPanelStyle msg + , button : ButtonStyle msg + , primaryButton : ButtonStyle msg + , tab : TabStyle msg + , textInput : TextInputStyle msg + , chipButton : ButtonStyle msg + , row : RowStyle msg + , buttonRow : RowStyle msg + , column : ColumnStyle msg + , cardColumn : ColumnStyle msg + , sortTable : SortTableStyle msg + , selectButton : ButtonStyle msg + , layout : LayoutStyle msg + } diff --git a/example/src/Data/Style/Material.elm b/example/src/Data/Style/Material.elm index bc41f53..890a166 100644 --- a/example/src/Data/Style/Material.elm +++ b/example/src/Data/Style/Material.elm @@ -9,6 +9,7 @@ import Element.Background as Background import Element.Border as Border import Element.Font as Font import Html.Attributes as Attributes +import Icons import Widget.Style exposing ( ButtonStyle @@ -24,7 +25,7 @@ import Widget.Style ) import Widget.Style.Material as Material exposing (Palette) import Widget.Style.Template as Template -import Icons + sortTable : Palette -> SortTableStyle msg sortTable palette = @@ -51,5 +52,5 @@ style palette = , chipButton = Material.chip palette , expansionPanel = Material.expansionPanel palette , dialog = Material.alertDialog palette - , layout = Material.layout palette "layout" + , layout = Material.layout palette } diff --git a/example/src/Data/Theme.elm b/example/src/Data/Theme.elm index 64d254a..dfaf9b0 100644 --- a/example/src/Data/Theme.elm +++ b/example/src/Data/Theme.elm @@ -6,6 +6,7 @@ import Data.Style.Material import Data.Style.Template import Widget.Style.Material + type Theme = ElmUiFramework | Template diff --git a/example/src/Example/Dialog.elm b/example/src/Example/Dialog.elm index 2153615..aeb182e 100644 --- a/example/src/Example/Dialog.elm +++ b/example/src/Example/Dialog.elm @@ -13,8 +13,8 @@ type alias Style style msg = } -type Model = - IsOpen Bool +type Model + = IsOpen Bool type Msg diff --git a/example/src/Main.elm b/example/src/Main.elm index 9833ee9..eeb7e3f 100644 --- a/example/src/Main.elm +++ b/example/src/Main.elm @@ -5,11 +5,11 @@ import Browser import Browser.Dom as Dom exposing (Viewport) import Browser.Events as Events import Browser.Navigation as Navigation +import Data.Example as Example exposing (Example) import Data.Section as Section exposing (Section(..)) import Data.Style exposing (Style) import Data.Theme as Theme exposing (Theme(..)) -import Data.Example as Example exposing (Example) -import Element exposing (DeviceClass(..)) +import Element exposing (Element,DeviceClass(..)) import Framework import Framework.Grid as Grid import Framework.Heading as Heading @@ -17,13 +17,14 @@ import Html exposing (Html) import Html.Attributes as Attributes import Icons import Reusable +import Set.Any as AnySet exposing (AnySet) import Stateless import Task import Time import Widget import Widget.Layout as Layout exposing (Layout, Part) import Widget.ScrollingNav as ScrollingNav - +import FeatherIcons type alias LoadedModel = { stateless : Stateless.Model @@ -40,6 +41,7 @@ type alias LoadedModel = , remaining : Int } , theme : Theme + , expanded : AnySet String Example } @@ -61,6 +63,7 @@ type LoadedMsg | ChangedSearch String | SetTheme Theme | Idle + | ToggledExample Example type Msg @@ -75,7 +78,7 @@ initialModel { viewport } = ScrollingNav.init { toString = Example.toString , fromString = Example.fromString - , arrangement = Example.asList + , arrangement = Example.asList , toMsg = \result -> case result of @@ -103,6 +106,7 @@ initialModel { viewport } = , remaining = 0 } , theme = Material + , expanded = AnySet.empty Example.toString } , [ cmd , statelessCmd |> Cmd.map StatelessSpecific @@ -118,187 +122,6 @@ init () = ) -view : Model -> Html Msg -view model = - case model of - Loading -> - Element.none |> Framework.responsiveLayout [] - - Loaded m -> - let - style : Style msg - style = - Theme.toStyle m.theme - in - Html.map LoadedSpecific <| - Layout.view style.layout - { dialog = - if m.displayDialog then - { text = "This is a dialog window" - , title = Just "Dialog" - , accept = - Just - { text = "Ok" - , onPress = Just <| ToggleDialog False - } - , dismiss = - Just - { text = "Dismiss" - , onPress = Just <| ToggleDialog False - } - } - |> Widget.dialog style.dialog - |> Just - - else - Nothing - , layout = m.layout - , window = m.window - , menu = - m.scrollingNav - |> ScrollingNav.toSelect - (\int -> - m.scrollingNav.arrangement - |> Array.fromList - |> Array.get int - |> Maybe.map JumpTo - ) - , actions = - [ { onPress = Just <| Load "https://package.elm-lang.org/packages/Orasund/elm-ui-widgets/latest/" - , text = "Docs" - , icon = Icons.book |> Element.html |> Element.el [] - } - , { onPress = Just <| Load "https://github.com/Orasund/elm-ui-widgets" - , text = "Github" - , icon = Icons.github |> Element.html |> Element.el [] - } - , { onPress = - if m.theme /= Material then - Just <| SetTheme <| Material - - else - Nothing - , text = "Material Theme" - , icon = Icons.penTool |> Element.html |> Element.el [] - } - , { onPress = - if m.theme /= DarkMaterial then - Just <| SetTheme <| DarkMaterial - - else - Nothing - , text = "Dark Material Theme" - , icon = Icons.penTool |> Element.html |> Element.el [] - } - - , { onPress = - if m.theme /= ElmUiFramework then - Just <| SetTheme <| ElmUiFramework - - else - Nothing - , text = "Elm-Ui-Framework Theme" - , icon = Icons.penTool |> Element.html |> Element.el [] - } - , { onPress = - if m.theme /= Template then - Just <| SetTheme <| Template - - else - Nothing - , text = "Template Theme" - , icon = Icons.penTool |> Element.html |> Element.el [] - } - ] - , onChangedSidebar = ChangedSidebar - , title = - "Elm-Ui-Widgets" - |> Element.text - |> Element.el Heading.h1 - , search = - Just - { text = m.search.raw - , onChange = ChangedSearch - , label = "Search" - } - } <| - ( - [ Element.el [ Element.height <| Element.px <| 42 ] <| Element.none - , [StatelessViews,ReusableViews] - |> List.map - (\section -> - (case section of - ReusableViews -> - Reusable.view - { theme = m.theme - , addSnackbar = AddSnackbar - } - - StatelessViews -> - Stateless.view - { theme = m.theme - , msgMapper = StatelessSpecific - , model = m.stateless - } - ) - |> (\{ title, description, items } -> - [ title - |> Element.text - |> Element.el ( Heading.h2 ) - , if m.search.current == "" then - description - |> Element.text - |> List.singleton - |> Element.paragraph [] - - else - Element.none - , items - |> (if m.search.current /= "" then - List.filter - (\( a, _, _ ) -> - a - |> String.toLower - |> String.contains (m.search.current |> String.toLower) - ) - - else - identity - ) - |> List.map - (\( name, elem, more ) -> - [ [ Element.text name - |> Element.el (Heading.h3 ++ [ Element.height <| Element.shrink - , name - |> Attributes.id - |> Element.htmlAttribute]) - , elem - ] - |> Element.column Grid.simple - , more - |> Element.el - [ Element.width <| Element.fill - ] - ] - |> Widget.column style.cardColumn - ) - |> Element.wrappedRow - (Grid.simple - ++ [ Element.height <| Element.shrink - ] - ) - ] - |> Element.column (Grid.section ++ [ Element.centerX ]) - ) - ) - -- |> Element.column Grid.section - --] - |> Element.column (Framework.container ++ style.layout.container) - ] - |> Element.column Grid.compact - ) - - updateLoaded : LoadedMsg -> LoadedModel -> ( LoadedModel, Cmd LoadedMsg ) updateLoaded msg model = case msg of @@ -414,6 +237,13 @@ updateLoaded msg model = , Cmd.none ) + ToggledExample example -> + ( { model + | expanded = model.expanded |> AnySet.toggle example + } + , Cmd.none + ) + Idle -> ( model, Cmd.none ) @@ -442,6 +272,218 @@ subscriptions _ = |> Sub.map LoadedSpecific +view : Model -> Html Msg +view model = + case model of + Loading -> + Element.none |> Framework.responsiveLayout [] + + Loaded m -> + let + style : Style msg + style = + Theme.toStyle m.theme + in + Html.map LoadedSpecific <| + Layout.view style.layout + { dialog = + if m.displayDialog then + { text = "This is a dialog window" + , title = Just "Dialog" + , accept = + Just + { text = "Ok" + , onPress = Just <| ToggleDialog False + } + , dismiss = + Just + { text = "Dismiss" + , onPress = Just <| ToggleDialog False + } + } + |> Widget.dialog style.dialog + |> Just + + else + Nothing + , layout = m.layout + , window = m.window + , menu = + m.scrollingNav + |> ScrollingNav.toSelect + (\int -> + m.scrollingNav.arrangement + |> Array.fromList + |> Array.get int + |> Maybe.map JumpTo + ) + , actions = + [ { onPress = Just <| Load "https://package.elm-lang.org/packages/Orasund/elm-ui-widgets/latest/" + , text = "Docs" + , icon = Icons.book |> Element.html |> Element.el [] + } + , { onPress = Just <| Load "https://github.com/Orasund/elm-ui-widgets" + , text = "Github" + , icon = Icons.github |> Element.html |> Element.el [] + } + , { onPress = + if m.theme /= Material then + Just <| SetTheme <| Material + + else + Nothing + , text = "Material Theme" + , icon = Icons.penTool |> Element.html |> Element.el [] + } + , { onPress = + if m.theme /= DarkMaterial then + Just <| SetTheme <| DarkMaterial + + else + Nothing + , text = "Dark Material Theme" + , icon = Icons.penTool |> Element.html |> Element.el [] + } + , { onPress = + if m.theme /= ElmUiFramework then + Just <| SetTheme <| ElmUiFramework + + else + Nothing + , text = "Elm-Ui-Framework Theme" + , icon = Icons.penTool |> Element.html |> Element.el [] + } + , { onPress = + if m.theme /= Template then + Just <| SetTheme <| Template + + else + Nothing + , text = "Template Theme" + , icon = Icons.penTool |> Element.html |> Element.el [] + } + ] + , onChangedSidebar = ChangedSidebar + , title = + "Elm-Ui-Widgets" + |> Element.text + |> Element.el Heading.h1 + , search = + Just + { text = m.search.raw + , onChange = ChangedSearch + , label = "Search" + } + } + <| + viewLoaded m + + +viewLoaded : LoadedModel -> Element LoadedMsg +viewLoaded m = + let + style : Style msg + style = + Theme.toStyle m.theme + in + [ Element.el [ Element.height <| Element.px <| 42 ] <| Element.none + , [ StatelessViews, ReusableViews ] + |> List.map + (\section -> + (case section of + ReusableViews -> + Reusable.view + { theme = m.theme + , addSnackbar = AddSnackbar + } + + StatelessViews -> + Stateless.view + { theme = m.theme + , msgMapper = StatelessSpecific + , model = m.stateless + } + ) + |> (\{ title, description, items } -> + [ title + |> Element.text + |> Element.el Heading.h2 + , if m.search.current == "" then + description + |> Element.text + |> List.singleton + |> Element.paragraph [] + + else + Element.none + , items + |> (if m.search.current /= "" then + List.filter + (\( a, _, _ ) -> + a + |> String.toLower + |> String.contains (m.search.current |> String.toLower) + ) + + else + identity + ) + |> List.map + (\( name, elem, more ) -> + [ [ Element.text name + |> Element.el + (Heading.h3 + ++ [ Element.height <| Element.shrink + , name + |> Attributes.id + |> Element.htmlAttribute + ] + ) + , elem + ] + |> Element.column Grid.simple + , + Widget.expansionPanel style.expansionPanel + + { onToggle = + always + (name + |> Example.fromString + |> Maybe.map ToggledExample + |> Maybe.withDefault Idle + ) + , icon = Element.none + , text = + "States" + , content = more + , isExpanded = + name + |> Example.fromString + |> Maybe.map + (\example -> + m.expanded + |> AnySet.member example + )|> Maybe.withDefault False + + + } + ] + |> Widget.column style.cardColumn + ) + |> Element.wrappedRow + (Grid.simple + ++ [ Element.height <| Element.shrink + ] + ) + ] + |> Element.column (Grid.section ++ [ Element.centerX ]) + ) + ) + |> Element.column (Framework.container ++ style.layout.container) + ] + |> Element.column Grid.compact + + main : Program () Model Msg main = Browser.element diff --git a/src/Widget/Layout.elm b/src/Widget/Layout.elm index 69faea8..230bc15 100644 --- a/src/Widget/Layout.elm +++ b/src/Widget/Layout.elm @@ -242,8 +242,7 @@ view style { search, title, onChangedSidebar, menu, actions, window, dialog, lay , menu |> Widget.select |> List.map - (Widget.selectButton style.sheetButton - ) + (Widget.selectButton style.sheetButton) ] |> List.concat |> Element.column [ Element.width <| Element.fill ] diff --git a/src/Widget/ScrollingNav.elm b/src/Widget/ScrollingNav.elm index 3c0f141..4cd7420 100644 --- a/src/Widget/ScrollingNav.elm +++ b/src/Widget/ScrollingNav.elm @@ -1,7 +1,6 @@ module Widget.ScrollingNav exposing - ( Model, init, view, current - , jumpTo, syncPositions - , getPos, jumpToWithOffset, setPos, toSelect + ( Model, init, view, current, toSelect + , jumpTo, jumpToWithOffset, syncPositions, getPos, setPos ) {-| The Scrolling Nav is a navigation bar thats updates while you scroll through @@ -10,18 +9,17 @@ the page. Clicking on a navigation button will scroll directly to that section. # Basics -@docs Model, Msg, init, update, subscriptions, view, viewSections, current +@docs Model, init, view, current, toSelect # Operations -@docs jumpTo, syncPositions +@docs jumpTo, jumpToWithOffset, syncPositions, getPos, setPos -} import Browser.Dom as Dom import Element exposing (Element) -import Framework.Grid as Grid import Html.Attributes as Attributes import IntDict exposing (IntDict) import Task exposing (Task) @@ -62,6 +60,8 @@ init { toString, fromString, arrangement, toMsg } = ) +{-| Syncs the position of of the viewport +-} getPos : Task x (Model selection -> Model selection) getPos = Dom.getViewport @@ -73,12 +73,14 @@ getPos = ) +{-| sets the position of the viewport to show a specific section +-} setPos : Int -> Model section -> Model section setPos pos model = { model | scrollPos = pos } -{-| scrolls the screen to the respective section +{-| Scrolls the screen to the respective section -} jumpTo : { section : section @@ -95,7 +97,7 @@ jumpTo { section, onChange } { toString } = |> Task.attempt onChange -{-| scrolls the screen to the respective section with some offset +{-| Scrolls the screen to the respective section with some offset -} jumpToWithOffset : { offset : Float @@ -113,7 +115,9 @@ jumpToWithOffset { offset, section, onChange } { toString } = |> Task.attempt onChange -{-| -} +{-| Updates the positions of all sections. +This functions should be called regularly if the height of elements on your page can change during time. +-} syncPositions : Model section -> Task Dom.Error (Model section -> Model section) syncPositions { toString, arrangement } = arrangement @@ -144,7 +148,8 @@ syncPositions { toString, arrangement } = ) -{-| -} +{-| Returns the current section +-} current : (String -> Maybe section) -> Model section -> Maybe section current fromString { positions, scrollPos } = positions @@ -155,6 +160,8 @@ current fromString { positions, scrollPos } = |> Maybe.andThen fromString +{-| Returns a select widget containing all section, with the current section selected. +-} toSelect : (Int -> Maybe msg) -> Model section -> Select msg toSelect onSelect ({ arrangement, toString, fromString } as model) = { selected = @@ -181,11 +188,37 @@ toSelect onSelect ({ arrangement, toString, fromString } as model) = } -{-| -} +{-| Opinionated way of viewing the section. + +This might be useful at first, but you should consider writing your own view function. + +``` view : (section -> Element msg) -> Model section - -> Element msg + -> List (Element msg) +view asElement { toString, arrangement } = + arrangement + |> List.map + (\header -> + Element.el + [ header + |> toString + |> Attributes.id + |> Element.htmlAttribute + , Element.width <| Element.fill + ] + <| + asElement <| + header + ) +``` + +-} +view : + (section -> Element msg) + -> Model section + -> List (Element msg) view asElement { toString, arrangement } = arrangement |> List.map @@ -201,4 +234,3 @@ view asElement { toString, arrangement } = asElement <| header ) - |> Element.column Grid.simple diff --git a/src/Widget/Snackbar.elm b/src/Widget/Snackbar.elm index 4116da1..b93c69c 100644 --- a/src/Widget/Snackbar.elm +++ b/src/Widget/Snackbar.elm @@ -1,7 +1,6 @@ module Widget.Snackbar exposing - ( Model, init, current, timePassed + ( Model, Message, init, current, timePassed, view , insert, insertFor, dismiss - , Message, view ) {-| A [snackbar](https://material.io/components/snackbars/) shows notification, one at a time. @@ -9,7 +8,7 @@ module Widget.Snackbar exposing # Basics -@docs Model, init, current, timePassed +@docs Model, Message, init, current, timePassed, view # Operations @@ -104,6 +103,8 @@ current model = model.current |> Maybe.map Tuple.first +{-| Views the current Message. (only one at a time) +-} view : SnackbarStyle msg -> (a -> Message msg) diff --git a/src/Widget/Style.elm b/src/Widget/Style.elm index 605f7ba..f1e6347 100644 --- a/src/Widget/Style.elm +++ b/src/Widget/Style.elm @@ -1,9 +1,16 @@ module Widget.Style exposing (ButtonStyle, ColumnStyle, DialogStyle, ExpansionPanelStyle, LayoutStyle, RowStyle, SnackbarStyle, SortTableStyle, TabStyle, TextInputStyle) +{-| This module contains style types for every widget. + +@docs ButtonStyle, ColumnStyle, DialogStyle, ExpansionPanelStyle, LayoutStyle, RowStyle, SnackbarStyle, SortTableStyle, TabStyle, TextInputStyle + +-} + import Element exposing (Attribute, Element) import Html exposing (Html) +{-| -} type alias ButtonStyle msg = { container : List (Attribute msg) , labelRow : List (Attribute msg) @@ -14,6 +21,7 @@ type alias ButtonStyle msg = } +{-| -} type alias DialogStyle msg = { containerColumn : List (Attribute msg) , title : List (Attribute msg) @@ -24,6 +32,12 @@ type alias DialogStyle msg = } +{-| Technical Remark: + + - If icons are defined in Svg, they might not display correctly. + To avoid that, make sure to wrap them in `Element.html >> Element.el []` + +-} type alias ExpansionPanelStyle msg = { containerColumn : List (Attribute msg) , panelRow : List (Attribute msg) @@ -34,6 +48,7 @@ type alias ExpansionPanelStyle msg = } +{-| -} type alias SnackbarStyle msg = { containerRow : List (Attribute msg) , text : List (Attribute msg) @@ -41,6 +56,7 @@ type alias SnackbarStyle msg = } +{-| -} type alias TextInputStyle msg = { chipButton : ButtonStyle msg , containerRow : List (Attribute msg) @@ -49,6 +65,7 @@ type alias TextInputStyle msg = } +{-| -} type alias TabStyle msg = { button : ButtonStyle msg , optionRow : List (Attribute msg) @@ -57,6 +74,7 @@ type alias TabStyle msg = } +{-| -} type alias RowStyle msg = { containerRow : List (Attribute msg) , element : List (Attribute msg) @@ -66,6 +84,7 @@ type alias RowStyle msg = } +{-| -} type alias ColumnStyle msg = { containerColumn : List (Attribute msg) , element : List (Attribute msg) @@ -75,6 +94,12 @@ type alias ColumnStyle msg = } +{-| Technical Remark: + + - If icons are defined in Svg, they might not display correctly. + To avoid that, make sure to wrap them in `Element.html >> Element.el []` + +-} type alias SortTableStyle msg = { containerTable : List (Attribute msg) , headerButton : ButtonStyle msg @@ -84,6 +109,12 @@ type alias SortTableStyle msg = } +{-| Technical Remark: + + - If icons are defined in Svg, they might not display correctly. + To avoid that, make sure to wrap them in `Element.html >> Element.el []` + +-} type alias LayoutStyle msg = { container : List (Attribute msg) , snackbar : SnackbarStyle msg diff --git a/src/Widget/Style/Material.elm b/src/Widget/Style/Material.elm index 9aac859..300a055 100644 --- a/src/Widget/Style/Material.elm +++ b/src/Widget/Style/Material.elm @@ -66,7 +66,6 @@ import Widget.Style , TabStyle , TextInputStyle ) -import Widget.Style.Template as Template @@ -1301,8 +1300,8 @@ drawerButton palette = - The drawer button as not taken from the specification (This will been to be added later) -} -layout : Palette -> String -> LayoutStyle msg -layout palette string = +layout : Palette -> LayoutStyle msg +layout palette = { container = (palette.background |> textAndBackground) ++ [ Font.family diff --git a/src/Widget/Style/Template.elm b/src/Widget/Style/Template.elm index 18535aa..49785ef 100644 --- a/src/Widget/Style/Template.elm +++ b/src/Widget/Style/Template.elm @@ -1,5 +1,8 @@ module Widget.Style.Template exposing (box, button, column, decoration, dialog, expansionPanel, icon, layout, row, snackbar, sortTable, tab, textInput) +{-| This package +-} + import Element exposing (Attribute, Element) import Element.Background as Background import Element.Border as Border