[{"name":"DatePicker","comment":" The `DatePicker` component is a DatePicker that allows the user to\nselect a **single date**. It has its own [Model](DatePicker#Model)\nand [Msg](DatePicker#Msg) types which handle the rendering and date\nselection functionalities. It also exposes a list of **external messages**\n( [ExtMsg](DatePicker#ExtMsg) ) which can be used by the consumer to extract the **selected date**.\nYou can see a simple `DatePicker` application in\n[this ellie-app example](https://ellie-app.com/new) or you can clone [this\nexample repository](https://github.com/PanagiotisGeorgiadis/).\n\n@docs Model, Msg, ExtMsg\n\n@docs initialise, update, view\n\n","unions":[{"name":"ExtMsg","comment":" The _**external messages**_ that are being used to pass information to the\nparent component. These messages are being returned by the [update function](DatePicker#update)\nso that the consumer can pattern match on them and get the selected `DateTime`.\n","args":[],"cases":[["None",[]],["DateSelected",["Maybe.Maybe DateTime.DateTime"]]]}],"aliases":[{"name":"Model","comment":" The `DatePicker` Model.\n","args":[],"type":"DatePicker.Internal.Update.Model"},{"name":"Msg","comment":" The internal messages that are being used by the `DatePicker`. You can map\nthis message with your own message in order to \"wire up\" the `DatePicker` with your\napplication. Example of wiring up:\n\n    import DatePicker\n\n    type Msg\n        = DatePickerMsg DatePicker.Msg\n\n    DatePickerMsg subMsg ->\n        let\n            (subModel, subCmd, extMsg) =\n                DatePicker.update subMsg model.datePicker\n\n            selectedDateTime =\n                case extMsg of\n                    DatePicker.DateSelected dateTime ->\n                        dateTime\n\n                    DatePicker.None ->\n                        Nothing\n        in\n        ( { model | datePicker = subModel }\n        , Cmd.map DatePickerMsg subCmd\n        )\n\n","args":[],"type":"DatePicker.Internal.Update.Msg"}],"values":[{"name":"initialise","comment":" The initialisation function of the `DatePicker`.\n\n    import Clock\n    import DatePicker\n    import DateTime\n    import Time exposing (Month(..))\n    import TimePicker.Types as TimePicker\n\n    myInitialise : DateTime -> DatePicker.Model\n    myInitialise today =\n        let\n            ( date1, date2 ) =\n                ( DateTime.fromRawParts { day = 1, month = Jan, year = 2019 } { hours = 0, minutes = 0, seconds = 0, milliseconds = 0 }\n                , DateTime.fromRawParts { day = 31, month = Dec, year = 2019 } { hours = 0, minutes = 0, seconds = 0, milliseconds = 0 }\n                )\n\n            calendarConfig =\n                { today = today\n                , primaryDate = Nothing\n                , dateLimit =\n                    case ( date1, date2 ) of\n                        ( Just d1, Just d2 ) ->\n                            DateLimit { minDate = d1, maxDate = d2 }\n\n                        _ ->\n                            NoLimit { disablePastDates = False }\n                }\n\n            timePickerConfig =\n                Just\n                    { pickerType = TimePicker.HH_MM { hoursStep = 1, minutesStep = 5 }\n                    , defaultTime = Clock.midnight\n                    , pickerTitle = \"Date Time\"\n                    }\n        in\n        DatePicker.initialise DatePicker.Single calendarConfig timePickerConfig\n\n","type":"DatePicker.Types.ViewType -> DatePicker.Types.CalendarConfig -> Maybe.Maybe DatePicker.Types.TimePickerConfig -> DatePicker.Model"},{"name":"update","comment":" The `DatePicker's` update function. Can be used in order to \"wire up\" the `DatePicker`\nwith the **main application** as shown in the example of the [DatePicker.Msg](DatePicker#Msg).\n","type":"DatePicker.Msg -> DatePicker.Model -> ( DatePicker.Model, Platform.Cmd.Cmd DatePicker.Msg, DatePicker.ExtMsg )"},{"name":"view","comment":" The `DatePicker` view.\n","type":"DatePicker.Model -> Html.Html DatePicker.Msg"}],"binops":[]},{"name":"DatePicker.Types","comment":" Contains types that are being used by the _**parent application**_ in order to initialise\na `DatePicker`.\n\n\n# Types\n\n@docs ViewType\n\n@docs CalendarConfig, DateLimit\n\n@docs TimePickerConfig\n\n","unions":[{"name":"DateLimit","comment":" The _**optional**_ `DatePicker` date restrictions. You can cover most of the\ndate restriction cases with the type below. If by any change you need to achieve\na case which is not possible by the current implementation please raise an issue\non the repository of the package.\n\n    -- A Custom imposed restriction for the year 2019\n    -- inclusive of the minDate and maxDate.\n    DateLimit { minDate = 1 Jan 2019, maxDate = 31 Dec 2019 }\n\n    -- An unlimited Calendar.\n    NoLimit { disablePastDates = False }\n\n    -- Allows only `future date selection`.\n    NoLimit { disablePastDates = True }\n\n","args":[],"cases":[["DateLimit",["{ minDate : DateTime.DateTime, maxDate : DateTime.DateTime }"]],["NoLimit",["{ disablePastDates : Basics.Bool }"]]]},{"name":"ViewType","comment":" The Calendar ViewType.\n\n**Single date picker.**\n\n![Single date picker](https://raw.githubusercontent.com/PanagiotisGeorgiadis/Elm-DatePicker/master/assets/Single-Date-Picker.png \"Single date picker\")\n\n**Single date-time picker.**\n\n![Single date-time picker](https://raw.githubusercontent.com/PanagiotisGeorgiadis/Elm-DatePicker/master/assets/Single-DateTime-Picker.png \"Single date-time picker\")\n\n**Double date picker.**\n\n![Double date picker](https://raw.githubusercontent.com/PanagiotisGeorgiadis/Elm-DatePicker/master/assets/Double-Date-Picker.png \"Double date picker.\")\n\n**Double date picker.**\n\n![Double date-time picker](https://raw.githubusercontent.com/PanagiotisGeorgiadis/Elm-DatePicker/master/assets/Double-DateTime-Picker.png \"Double date-time picker\")\n\n","args":[],"cases":[["Single",[]],["Double",[]]]}],"aliases":[{"name":"CalendarConfig","comment":" Used in order to configure the `Calendar` part of the `DatePicker`.\n\n  - **`today`:** Represents today as `DateTime` provided by the **parent application**.\n\n  - **`primaryDate`:** Represents the default `month - year` calendar screen.\n      - If the **primaryDate** is set to `Nothing` the `DatePicker` will\n        set the **primaryDate** equal to the **today** property.\n\n      - If the consumer has provided both a **primaryDate** and a **dateLimit**\n        but the **primaryDate** is out of bounds, the `DatePicker` will set\n        the **primaryDate** equal to the minium date of the constrains.\n\n  - **`dateLimit`:** Used to impose date restrictions on the `DatePicker`.\n    The different configuration settings can be seen on the\n    [DateLimit](DatePicker.Types#DateLimit) definition.\n\n","args":[],"type":"{ today : DateTime.DateTime, primaryDate : Maybe.Maybe DateTime.DateTime, dateLimit : DatePicker.Types.DateLimit }"},{"name":"TimePickerConfig","comment":" Used in order to configure the `TimePicker` part of the `DatePicker`.\n\n  - **`pickerType`:** Defines the type of the picker as described in the [TimePicker module](TimePicker.Types#PickerType).\n\n  - **`defaultTime`:** Defines the defaultTime that will be used as the default value of the `TimePicker`.\n\n  - **`pickerTitle`:** Defines the `TimePicker` title.\n\n","args":[],"type":"{ pickerType : TimePicker.Types.PickerType, defaultTime : Clock.Time, pickerTitle : String.String }"}],"values":[],"binops":[]},{"name":"DateRangePicker","comment":" The `DateRangePicker` component is a DatePicker that allows the user to\nselect a **range of dates**. It has its own [Model](DateRangePicker#Model)\nand [Msg](DateRangePicker#Msg) types which handle the rendering and date\nselection functionalities. It also exposes a list of **external messages**\n( [ExtMsg](DateRangePicker#ExtMsg) ) which can be used by the consumer to extract the selected dates in\nthe form of a **startDate** and an **endDate**. You can see a simple `DateRangePicker`\napplication in [this ellie-app example](https://ellie-app.com/new) or you can clone [this\nexample repository](https://github.com/PanagiotisGeorgiadis/).\n\n@docs Model, Msg, ExtMsg, SelectedDateRange\n\n@docs initialise, update, view\n\n","unions":[{"name":"ExtMsg","comment":" The _**external messages**_ that are being used to pass information to the\nparent component. These messages are being returned by the [update function](DateRangePicker#update)\nso that the consumer can pattern match on them and get the selected `DateTime`.\n","args":[],"cases":[["None",[]],["DateRangeSelected",["Maybe.Maybe DateRangePicker.SelectedDateRange"]]]}],"aliases":[{"name":"Model","comment":" The `DateRangePicker` model.\n","args":[],"type":"DateRangePicker.Internal.Update.Model"},{"name":"Msg","comment":" The internal messages that are being used by the `DateRangePicker`. You can map\nthis message with your own message in order to \"wire up\" the `DateRangePicker` with your\napplication. Example of wiring up:\n\n    import DateRangePicker\n\n    type Msg\n        = DateRangePickerMsg DateRangePicker.Msg\n\n    DateRangePickerMsg subMsg ->\n        let\n            ( subModel, subCmd, extMsg ) =\n                DateRangePicker.update subMsg model.dateRangePicker\n\n            selectedDateRange =\n                case extMsg of\n                    DateRangePicker.DateRangeSelected dateRange ->\n                        dateRange\n\n                    DateRangePicker.None ->\n                        Nothing\n        in\n        ( { model | dateRangePicker = subModel }\n        , Cmd.map DateRangePickerMsg subCmd\n        )\n\n","args":[],"type":"DateRangePicker.Internal.Update.Msg"},{"name":"SelectedDateRange","comment":" The start and end dates returned as a payload by the `DateRangeSelected` external message.\n","args":[],"type":"{ startDate : DateTime.DateTime, endDate : DateTime.DateTime }"}],"values":[{"name":"initialise","comment":" The initialisation function of the `DateRangePicker`.\n\n    import Clock\n    import DateRangePicker\n    import DateTime\n    import Time exposing (Month(..))\n    import TimePicker.Types as TimePicker\n\n    myInitialise : DateTime -> DateRangePicker.Model\n    myInitialise today =\n        let\n            ( date1, date2 ) =\n                ( DateTime.fromRawParts { day = 1, month = Jan, year = 2019 } { hours = 0, minutes = 0, seconds = 0, milliseconds = 0 }\n                , DateTime.fromRawParts { day = 31, month = Dec, year = 2019 } { hours = 0, minutes = 0, seconds = 0, milliseconds = 0 }\n                )\n\n            calendarConfig =\n                { today = today\n                , primaryDate = Nothing\n                , dateLimit =\n                    case ( date1, date2 ) of\n                        ( Just d1, Just d2 ) ->\n                            DateLimit { minDate = d1, maxDate = d2 }\n\n                        _ ->\n                            NoLimit { disablePastDates = False }\n                , dateRangeOffset = Just { minDateRangeLength = 7 }\n                }\n\n            timePickerConfig =\n                Just\n                    { pickerType = TimePicker.HH_MM { hoursStep = 1, minutesStep = 5 }\n                    , defaultTime = Clock.midnight\n                    , pickerTitles = { start = \"Start Date Time\", end = \"End Date Time\" }\n                    , mirrorTimes = True\n                    }\n        in\n        DateRangePicker.initialise DateRangePicker.Single calendarConfig timePickerConfig\n\n","type":"DateRangePicker.Types.ViewType -> DateRangePicker.Types.CalendarConfig -> Maybe.Maybe DateRangePicker.Types.TimePickerConfig -> DateRangePicker.Model"},{"name":"update","comment":" The `DateRangePicker's` update function. Can be used in order to \"wire up\" the `DateRangePicker`\nwith the **main application** as shown in the example of the [DateRangePicker.Msg](DateRangePicker#Msg).\n","type":"DateRangePicker.Msg -> DateRangePicker.Model -> ( DateRangePicker.Model, Platform.Cmd.Cmd DateRangePicker.Msg, DateRangePicker.ExtMsg )"},{"name":"view","comment":" The `DateRangePicker` view function.\n","type":"DateRangePicker.Model -> Html.Html DateRangePicker.Msg"}],"binops":[]},{"name":"DateRangePicker.Types","comment":" Contains types that are being used by the _**parent application**_ in order to initialise\na `DateRangePicker`.\n\n\n# Types\n\n@docs ViewType\n\n@docs CalendarConfig, DateLimit\n\n@docs TimePickerConfig\n\n","unions":[{"name":"DateLimit","comment":" The _**optional**_ `DateRangePicker` date restrictions. You can cover most of the\ndate restriction cases with the type below. If by any change you need to achieve\na case which is not possible by the current implementation please raise an issue\non the repository of the package.\n\n    -- A Custom imposed restriction for the year 2019\n    -- inclusive of the minDate and maxDate.\n    DateLimit { minDate = 1 Jan 2019, maxDate = 31 Dec 2019 }\n\n    -- An unlimited Calendar.\n    NoLimit { disablePastDates = False }\n\n    -- Allows only `future date selection`.\n    NoLimit { disablePastDates = True }\n\n","args":[],"cases":[["DateLimit",["{ minDate : DateTime.DateTime, maxDate : DateTime.DateTime }"]],["NoLimit",["{ disablePastDates : Basics.Bool }"]]]},{"name":"ViewType","comment":" The Calendar ViewType.\n\n**Single date range picker.**\n\n![Single date range picker](https://raw.githubusercontent.com/PanagiotisGeorgiadis/Elm-DatePicker/master/assets/Single-Date-RangePicker.png \"Single date range picker\")\n\n**Single date-time range picker.**\n\n![Single date-time range picker](https://raw.githubusercontent.com/PanagiotisGeorgiadis/Elm-DatePicker/master/assets/Single-DateTime-RangePicker.png \"Single date-time range picker\")\n\n**Double date range picker.**\n\n![Double date range picker](https://raw.githubusercontent.com/PanagiotisGeorgiadis/Elm-DatePicker/master/assets/Double-Date-RangePicker.png \"Double date-time range picker\")\n\n**Double date-time range picker.**\n\n![Double date-time range picker (Calendar)](https://raw.githubusercontent.com/PanagiotisGeorgiadis/Elm-DatePicker/master/assets/Double-DateTime-RangePicker-1.png \"Double date range picker (Calendar).\")\n![Double date-time range picker (Time Pickers)](https://raw.githubusercontent.com/PanagiotisGeorgiadis/Elm-DatePicker/master/assets/Double-DateTime-RangePicker-2.png \"Double date range picker (Time Pickers).\")\n\n","args":[],"cases":[["Single",[]],["Double",[]]]}],"aliases":[{"name":"CalendarConfig","comment":" Used in order to configure the `Calendar` part of the `DateRangePicker`.\n\n  - **`today`:** Represents today as `DateTime` provided by the **parent application**.\n\n  - **`primaryDate`:** Represents the default `month - year` calendar screen.\n      - If the **primaryDate** is set to `Nothing` the `DateRangePicker` will\n        set the **primaryDate** equal to the **today** property.\n\n      - If the consumer has provided both a **primaryDate** and a **dateLimit**\n        but the **primaryDate** is out of bounds, the `DateRangePicker` will set\n        the **primaryDate** equal to the minium date of the constrains.\n\n  - **`dateLimit`:** Used to impose date restrictions on the `DateRangePicker`.\n    The different configuration settings can be seen on the\n    [DateLimit](DateRangePicker.Types#DateLimit) definition.\n\n  - **`dateRangeOffset`:** Used to set a minimum length on the selected date range.\n    This basically means that if we set a **minimumDateRangeLength** of 3, the user\n    will be able to select a minimum of 3 dates.\n\n","args":[],"type":"{ today : DateTime.DateTime, primaryDate : Maybe.Maybe DateTime.DateTime, dateLimit : DateRangePicker.Types.DateLimit, dateRangeOffset : Maybe.Maybe { minDateRangeLength : Basics.Int } }"},{"name":"TimePickerConfig","comment":" Used in order to configure the `TimePicker` part of the `DateRangePicker`.\n\n  - **`pickerType`:** Defines the type of the picker as described in the [TimePicker module](TimePicker.Types#PickerType).\n\n  - **`defaultTime`:** Defines the defaultTime that will be used as the default value of the `TimePicker`.\n\n  - **`pickerTitles`:** Defines the `TimePicker` titles.\n\n  - **`mirrorTimes`:** Dictates if both the `TimePickers` should be in sync.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n    **Note:** The synchronisation takes place using the\n    [onBlur](https://package.elm-lang.org/packages/elm/html/latest/Html-Events#onBlur)\n    event of the input.\n\n","args":[],"type":"{ pickerType : TimePicker.Types.PickerType, defaultTime : Clock.Time, pickerTitles : { start : String.String, end : String.String }, mirrorTimes : Basics.Bool }"}],"values":[],"binops":[]},{"name":"TimePicker.Types","comment":" This module contains the `Public types` that are being used by the\n_**parent application**_ in order to create a `TimePickerConfig` for either\nthe `DatePicker` or the `DateRangePicker` modules.\n\n\n# Types\n\n@docs PickerType\n\n","unions":[{"name":"PickerType","comment":" Describes the different _**picker types**_ along with their _**stepping function**_.\n\n    -- An `Hours` and `Minutes` picker. The `Hours` part\n    -- will increment / decrement their value by 1 whereas\n    -- the `Minutes` will increment / decrement by 5.\n    HH_MM { hoursStep = 1, minutesStep = 5 }\n\n    -- An `Hours`, `Minutes` and `Seconds` picker.\n    -- The `Hours` and `Minutes` will increment / decrement\n    -- their values by 1 whereas the `Seconds` will\n    -- increment / decrement by 10.\n    HH_MM_SS { hoursStep = 1, minutesStep = 1, secondsStep = 10 }\n\n","args":[],"cases":[["HH",["{ hoursStep : Basics.Int }"]],["HH_MM",["{ hoursStep : Basics.Int, minutesStep : Basics.Int }"]],["HH_MM_SS",["{ hoursStep : Basics.Int, minutesStep : Basics.Int, secondsStep : Basics.Int }"]],["HH_MM_SS_MMMM",["{ hoursStep : Basics.Int, minutesStep : Basics.Int, secondsStep : Basics.Int, millisecondsStep : Basics.Int }"]]]}],"aliases":[],"values":[],"binops":[]}]