@digitransit-component/digitransit-component-datetimepicker 0.6.15 → 0.6.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +3 -3
package/lib/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("prop-types"),require("react"),require("moment-timezone"),require("lodash/debounce"),require("moment/locale/fi"),require("lodash/uniqueId"),require("i18next"),require("@digitransit-component/digitransit-component-icon"),require("react-select"),require("react-modal"),require("react-autosuggest")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","moment-timezone","lodash/debounce","moment/locale/fi","lodash/uniqueId","i18next","@digitransit-component/digitransit-component-icon","react-select","react-modal","react-autosuggest"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-datetimepicker"]={},e.PropTypes,e.React,e.moment,e.debounce,null,e.uniqueId,e.i18next,e.Icon,e.Select,e.ReactModal,e.Autosuggest)}(this,(function(e,t,n,a,i,o,l,r,s,c,d,u){"use strict";function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=m(t),_=m(n),f=m(a),b=m(i),y=m(l),g=m(r),h=m(s),x=m(c),v=m(d),w=m(u);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function E(e,t){if(e){if("string"==typeof e)return k(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],a=!0,i=!1,o=void 0;try{for(var l,r=e[Symbol.iterator]();!(a=(l=r.next()).done)&&(n.push(l.value),!t||n.length!==t);a=!0);}catch(e){i=!0,o=e}finally{try{a||null==r.return||r.return()}finally{if(i)throw o}}return n}}(e,t)||E(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(e){return function(e){if(Array.isArray(e))return k(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||E(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var T={parseTypedTime:function(e){var t=e;return 3===t.length&&t.split("").every((function(e){return Number.isInteger(Number(e))}))&&(t=Number(t.slice(0,2))<=23?"".concat(t.slice(0,2),":").concat(t[2]):"".concat(t[0],":").concat(t.slice(1))),t}};var z={"sr-only":"styles_sr-only__2CeLM","dt-datetimepicker":"styles_dt-datetimepicker__1wz1m",hidden:"styles_hidden__1Ru0r","datetimepicker-open-container":"styles_datetimepicker-open-container__fawy2","top-row-container":"styles_top-row-container__EP3wT",closed:"styles_closed__3Nufa","time-icon":"styles_time-icon__1MXOL","dropdown-icon":"styles_dropdown-icon__1CTo1","close-icon":"styles_close-icon__325lp","label-open":"styles_label-open__1MDMT",textbutton:"styles_textbutton__1DPB1",active:"styles_active__3-bFB","combobox-left":"styles_combobox-left__1S_uJ","combobox-right":"styles_combobox-right__2KxYn","departure-or-arrival-container":"styles_departure-or-arrival-container__1lWPR","radio-textbutton-label":"styles_radio-textbutton-label__2POxN","first-radio":"styles_first-radio__3GCaF","radio-textbutton":"styles_radio-textbutton__1CAeh","departure-now-button":"styles_departure-now-button__2evH9","open-button":"styles_open-button__3MQJt","close-button":"styles_close-button__2xKiw","right-edge":"styles_right-edge__3AIDK","combobox-container":"styles_combobox-container__2p7JD","combobox-icon":"styles_combobox-icon__GFSlj","date-input-icon":"styles_date-input-icon__1CapH","time-input-icon":"styles_time-input-icon__cvYnu","datetimepicker-select-container":"styles_datetimepicker-select-container__joqht","picker-container":"styles_picker-container__1sany","combobox-mobile-container":"styles_combobox-mobile-container__a5cuJ","mobile-modal-overlay":"styles_mobile-modal-overlay__eYuHr","mobile-modal-content":"styles_mobile-modal-content__36efr","top-row":"styles_top-row__3cttP","modal-title":"styles_modal-title__1dohQ","tab-row":"styles_tab-row__21vQB","radio-tab-label":"styles_radio-tab-label__3wLjW","input-row":"styles_input-row__hxoV2","input-container":"styles_input-container__1c9oT","time-input-mobile":"styles_time-input-mobile__2sE5D","mobile-input-display":"styles_mobile-input-display__BfyTR","mobile-input-hidden":"styles_mobile-input-hidden__2Jerx",container:"styles_container__3_eaa",suggestion:"styles_suggestion__3BSiz",suggestionHighlighted:"styles_suggestionHighlighted__1eqIn",suggestionsContainerOpen:"styles_suggestionsContainerOpen__SoMrv",input:"styles_input__1gwqo","buttons-row":"styles_buttons-row__211nv","ready-button":"styles_ready-button__2P0aB"};function O(e){var t=e.value,a=e.onChange,i=e.getDisplay,o=e.timeChoices,l=e.validate,r=e.id,s=e.label,c=e.icon,d=e.disableTyping,u=e.timeZone;f.default.tz.setDefault(u);var m=C(n.useState(i(t)),2),p=m[0],b=m[1],y=C(n.useState(!1),2),g=y[0],h=y[1];n.useEffect((function(){return b(i(t))}),[t]);var v=function(e){var t=Number(e);!Number.isNaN(t)&&f.default(t).isValid()&&f.default(t).valueOf()===t&&a(t)},w=o.map((function(e){return{value:e.toString(),label:i(e)}})),k=w.reduce((function(e,n){return Math.abs(t-e.value)<Math.abs(t-n.value)?e:n})),E="".concat(r,"-input"),N="".concat(r,"-label");return _.default.createElement(_.default.Fragment,null,_.default.createElement("label",{className:z["combobox-container"],htmlFor:E},_.default.createElement("span",{className:z["sr-only"],id:N},s," ",p),c,_.default.createElement(x.default,{"aria-labelledby":N,ariaLiveMessages:{guidance:function(){return"."},onChange:function(){return""},onFilter:function(){return""},onFocus:function(e){var t=e.context,n=e.label;return"menu"===t?n:""}},options:w,inputId:E,onChange:function(e){if(g){var n=l(p,t);null!==n?(v(n),h(!1)):(b(i(t)),h(!1))}else v(e.value)},components:{IndicatorsContainer:function(){return null}},className:z["datetimepicker-select-container"],classNamePrefix:"datetimepicker-select",onInputChange:function(e,t){var n=t.action;if(!d&&"input-change"===n){var a=T.parseTypedTime(e);b(a),h(!0)}},inputValue:!d&&p,value:k,filterOption:function(){return!0},controlShouldRenderValue:d,tabSelectsValue:!1,placeholder:"",onFocus:function(e){d||e.target.select()},onBlur:function(){if(g){var e=l(p,t);null!==e?(v(e),h(!1)):(b(i(t)),h(!1))}},onKeyDown:function(e){["ArrowDown","ArrowUp"].includes(e.key)&&h(!1)},isSearchable:!d})))}!function(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var a=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&a.firstChild?a.insertBefore(i,a.firstChild):a.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}(".styles_sr-only__2CeLM:not(:focus):not(:active) {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n\n.styles_dt-datetimepicker__1wz1m {\n border: none;\n padding: 0;\n margin: 0;\n font-size: 15px;\n font-weight: var(--font-weight-medium); }\n .styles_dt-datetimepicker__1wz1m button, .styles_dt-datetimepicker__1wz1m label {\n font-size: 1em;\n font-weight: inherit; }\n .styles_dt-datetimepicker__1wz1m label button {\n cursor: pointer;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif; }\n .styles_dt-datetimepicker__1wz1m .styles_hidden__1Ru0r {\n display: none; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-open-container__fawy2 {\n background-color: #f4f4f5;\n border-radius: 5px;\n padding: 15px; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT.styles_closed__3Nufa {\n margin: 11px 0 6px 18px; }\n @media screen and (max-width: 319px) {\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT {\n margin-left: 14px; } }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT .styles_time-icon__1MXOL svg {\n width: 18px;\n height: 19px; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT .styles_dropdown-icon__1CTo1 {\n margin-left: 9px;\n position: relative;\n top: 1px; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT .styles_dropdown-icon__1CTo1 svg {\n width: 14px;\n height: 10px; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT .styles_close-icon__325lp svg {\n width: 12px;\n height: 12px;\n border-radius: 1px; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT .styles_close-icon__325lp svg path {\n stroke-width: 30; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT label {\n cursor: pointer; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT label.styles_label-open__1MDMT {\n -ms-flex-align: start;\n align-items: flex-start;\n display: -ms-flexbox;\n display: flex; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT button, .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT label {\n font-size: 1em;\n letter-spacing: -0.5px;\n line-height: 1; }\n .styles_dt-datetimepicker__1wz1m .styles_textbutton__1DPB1 {\n margin-left: 9px;\n margin-top: 1px;\n background: none;\n border: none;\n color: #666666;\n padding: 0; }\n @media screen and (min-width: 768px) {\n .styles_dt-datetimepicker__1wz1m .styles_textbutton__1DPB1 {\n margin-left: 14px; } }\n .styles_dt-datetimepicker__1wz1m .styles_textbutton__1DPB1.styles_active__3-bFB {\n color: var(--color); }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-left__1S_uJ {\n position: relative;\n margin-right: 4px;\n width: 63%; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-right__2KxYn {\n position: relative;\n margin-left: 4px;\n width: 37%; }\n .styles_dt-datetimepicker__1wz1m .styles_departure-or-arrival-container__1lWPR {\n height: calc(1rem + 20px);\n background-color: #dddddd;\n border-radius: 8px;\n display: -ms-flexbox;\n display: flex;\n width: calc(5px + 13em); }\n .styles_dt-datetimepicker__1wz1m .styles_radio-textbutton-label__2POxN {\n color: #333333;\n margin: 2px;\n background: none;\n border-radius: 6px;\n padding: 9px 0;\n width: 50%;\n cursor: pointer;\n height: calc(1rem + 16px);\n text-align: center;\n font-weight: 400;\n font-size: 15px;\n line-height: 18px;\n letter-spacing: -0.03em; }\n .styles_dt-datetimepicker__1wz1m .styles_radio-textbutton-label__2POxN.styles_active__3-bFB {\n font-weight: 500;\n background: white; }\n .styles_dt-datetimepicker__1wz1m .styles_radio-textbutton-label__2POxN:focus-within {\n /* First apply outline that is used in Edge and Firefox */\n outline: 1px dotted #212121;\n /* Then override outline for webkit browsers like Chrome, this has no effect on other browsers */\n outline: 5px auto -webkit-focus-ring-color;\n /* stylelint-disable-line declaration-block-no-duplicate-properties */ }\n .styles_dt-datetimepicker__1wz1m .styles_radio-textbutton-label__2POxN.styles_first-radio__3GCaF {\n margin: 0;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start; }\n .styles_dt-datetimepicker__1wz1m .styles_radio-textbutton__1CAeh {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n .styles_dt-datetimepicker__1wz1m .styles_departure-now-button__2evH9 {\n font-family: inherit;\n letter-spacing: -0.02em;\n height: calc(1rem + 18px);\n color: var(--color);\n padding: 8px 0;\n width: 6.6875rem;\n background: white;\n border: 1px solid #888888;\n border-radius: 30px;\n margin-left: 11px; }\n .styles_dt-datetimepicker__1wz1m .styles_open-button__3MQJt {\n display: -ms-flexbox;\n display: flex;\n margin-bottom: 0;\n margin-top: -1px;\n padding: 2px 0 2px 0; }\n .styles_dt-datetimepicker__1wz1m button.styles_close-button__2xKiw {\n width: 26px;\n height: 30px;\n transition: transform 0.2s;\n position: relative;\n top: -8px;\n right: -8px;\n border: 0;\n font-weight: normal;\n background: none;\n color: var(--color);\n padding: 0;\n line-height: normal; }\n .styles_dt-datetimepicker__1wz1m button.styles_close-button__2xKiw:hover {\n transform: scale(1.2); }\n .styles_dt-datetimepicker__1wz1m .styles_right-edge__3AIDK {\n margin-left: auto;\n margin-right: 0;\n position: relative;\n top: -2px; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-container__2p7JD {\n cursor: pointer; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-icon__GFSlj {\n color: var(--color);\n height: 40px;\n position: absolute;\n z-index: 7;\n pointer-events: none; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-icon__GFSlj.styles_date-input-icon__1CapH {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0;\n margin-left: 14px; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-icon__GFSlj.styles_date-input-icon__1CapH svg {\n width: 20px;\n height: 18px; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-icon__GFSlj.styles_time-input-icon__cvYnu {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0;\n margin-left: 8px; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-icon__GFSlj.styles_time-input-icon__cvYnu svg {\n margin-top: 1px;\n width: 22px;\n height: 22px; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht {\n position: relative;\n height: 40px; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__control {\n cursor: inherit;\n height: 40px;\n border: 1px solid #888888; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__value-container {\n padding: 0; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__single-value {\n margin: 0 0 0 47px; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__input {\n background: inherit;\n position: relative;\n margin-left: 40px; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__input input {\n opacity: 1 !important;\n background: inherit;\n box-shadow: none;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.5px;\n color: #333333;\n font-family: inherit;\n font-size: 15px;\n font-weight: var(--font-weight-medium); }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__input input:focus {\n box-shadow: none;\n outline: none;\n border: none; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__menu {\n z-index: 19;\n padding: 0;\n background: #fff;\n max-height: 250px;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__menu .datetimepicker-select__menu-list {\n max-height: 250px;\n padding: 0; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__menu .datetimepicker-select__menu-list .datetimepicker-select__option {\n height: 50px;\n border-top: 1px solid #dddddd;\n padding: 13px 0 0 12px;\n letter-spacing: -0.6px;\n color: #333333; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__menu .datetimepicker-select__menu-list .datetimepicker-select__option--is-selected {\n background: inherit; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__menu .datetimepicker-select__menu-list .datetimepicker-select__option--is-focused {\n background: #dfe5e8; }\n .styles_dt-datetimepicker__1wz1m .styles_picker-container__1sany {\n margin: 14px 0 0 0;\n display: -ms-flexbox;\n display: flex; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-mobile-container__a5cuJ {\n -ms-flex-positive: 1;\n flex-grow: 1; }\n\n.styles_mobile-modal-overlay__eYuHr {\n position: fixed;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n background-color: rgba(0, 0, 0, 0.6);\n z-index: 1000; }\n\n.styles_mobile-modal-content__36efr {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n background: white;\n width: 89%;\n position: absolute;\n left: 5.5%;\n padding: 31px 20px 33px 20px;\n top: 80px;\n border-radius: 5px; }\n .styles_mobile-modal-content__36efr .styles_top-row__3cttP {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: justify;\n justify-content: space-between;\n margin-bottom: 21px; }\n .styles_mobile-modal-content__36efr .styles_top-row__3cttP .styles_modal-title__1dohQ {\n font-weight: var(--font-weight-medium);\n font-size: 20px;\n line-height: 18px;\n letter-spacing: -0.5px;\n color: #333333;\n padding: 6px 0 0 8px; }\n .styles_mobile-modal-content__36efr .styles_top-row__3cttP .styles_departure-now-button__2evH9 {\n background-color: white;\n font-family: inherit;\n padding: 5px 15px;\n border: 1px solid #888888;\n border-radius: 50px;\n font-weight: var(--font-weight-medium);\n font-size: 15px;\n line-height: 18px;\n letter-spacing: -0.02em;\n color: var(--color); }\n .styles_mobile-modal-content__36efr .styles_tab-row__21vQB {\n display: -ms-flexbox;\n display: flex;\n border: 2px solid #dddddd;\n border-radius: 5px;\n margin-bottom: 16px;\n background-color: #dddddd; }\n .styles_mobile-modal-content__36efr .styles_tab-row__21vQB .styles_radio-tab-label__3wLjW {\n padding: 9px 0;\n font-size: 15px;\n line-height: 18px;\n letter-spacing: -0.5px;\n border-radius: 3px;\n font-weight: normal;\n width: 50%;\n text-align: center;\n color: #333333; }\n .styles_mobile-modal-content__36efr .styles_tab-row__21vQB .styles_radio-tab-label__3wLjW.styles_active__3-bFB {\n font-weight: var(--font-weight-medium);\n background-color: #ffffff; }\n .styles_mobile-modal-content__36efr .styles_tab-row__21vQB .styles_radio-textbutton__1CAeh {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 {\n display: -ms-flexbox;\n display: flex;\n margin-bottom: 25px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 label:first-child {\n -ms-flex-preferred-size: 60%;\n flex-basis: 60%;\n margin-right: 10px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 label:nth-child(2) {\n -ms-flex-preferred-size: 40%;\n flex-basis: 40%; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT {\n border: 1px solid #888888;\n border-radius: 5px;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n height: 40px;\n line-height: 1.5;\n font-size: 100%; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT:focus-within {\n background: rgba(0, 122, 201, 0.06);\n border: 2px solid var(--color); }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_combobox-icon__GFSlj {\n height: 18px;\n font-size: 18px;\n padding: 0 0 0 10px;\n border: none;\n position: relative;\n top: 3px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_combobox-icon__GFSlj.styles_time-input-icon__cvYnu > svg {\n height: 20px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_time-input-mobile__2sE5D {\n font-family: inherit;\n box-shadow: none;\n font-size: 18px;\n letter-spacing: -0.5px;\n line-height: 20px;\n font-weight: var(--font-weight-medium);\n border: none;\n outline: none;\n background: none;\n width: 50px;\n margin-left: 10px;\n color: #333333;\n height: 1.5265rem; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_mobile-input-display__BfyTR {\n position: relative;\n left: 10px;\n border: none;\n background: inherit;\n box-shadow: none;\n font-family: inherit;\n font-weight: var(--font-weight-medium);\n font-stretch: normal;\n font-style: normal;\n font-size: 16px;\n line-height: 1.33;\n letter-spacing: -0.5px;\n color: #333333; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_mobile-input-display__BfyTR:focus {\n outline: none;\n box-shadow: none;\n background: none; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_mobile-input-hidden__2Jerx {\n font-size: 16px;\n margin-bottom: 12px;\n height: 0px;\n width: 0;\n background: inherit;\n color: transparent;\n outline: none;\n box-shadow: none;\n border: none; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_mobile-input-hidden__2Jerx:focus {\n outline: none;\n box-shadow: none; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa {\n position: absolute;\n width: calc((100% - 50px) * 0.6);\n height: 25px;\n font-size: 15px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_suggestion__3BSiz {\n list-style: none;\n font-size: 16px;\n font-style: normal;\n font-weight: normal;\n line-height: 49px;\n height: 50px;\n margin: 0;\n padding: 0 0 0 16px;\n color: rgba(0, 0, 0, 0.87);\n background: white; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_suggestionHighlighted__1eqIn {\n background: #dfe5e8; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_suggestionsContainerOpen__SoMrv {\n position: absolute;\n z-index: 19;\n max-height: 250px;\n overflow-x: hidden;\n overflow-y: scroll;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid;\n top: 42px;\n left: -2px;\n width: 100%;\n font-size: 16px;\n line-height: 1;\n color: rgba(0, 0, 0, 0.87); }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_suggestionsContainerOpen__SoMrv ul {\n padding: 0;\n margin: 0; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_input__1gwqo {\n box-shadow: none;\n border: none;\n background: none;\n font-size: 16px;\n font-weight: var(--font-weight-medium);\n height: 25px;\n display: inline-block;\n font-family: inherit;\n line-height: 1.33;\n color: #333333;\n padding-left: 46px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_input__1gwqo:focus {\n outline: none;\n border: none;\n background: none; }\n .styles_mobile-modal-content__36efr .styles_buttons-row__211nv {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n font-size: 16px;\n font-weight: var(--font-weight-medium); }\n .styles_mobile-modal-content__36efr .styles_buttons-row__211nv button {\n background-color: white;\n font-family: inherit;\n font-weight: var(--font-weight-medium);\n font-size: 16px;\n letter-spacing: -0.02em;\n width: 100%;\n border-radius: 50px;\n height: 40px;\n color: var(--color);\n border: 1px solid #888888; }\n .styles_mobile-modal-content__36efr .styles_buttons-row__211nv button.styles_ready-button__2P0aB {\n color: white;\n background-color: var(--color);\n border: none;\n margin-bottom: 10px; }\n"),"production"!==process.env.NODE_ENV&&(O.propTypes={value:p.default.number.isRequired,onChange:p.default.func.isRequired,getDisplay:p.default.func.isRequired,timeChoices:p.default.arrayOf(p.default.number).isRequired,validate:p.default.func.isRequired,id:p.default.string.isRequired,label:p.default.node.isRequired,icon:p.default.node.isRequired,disableTyping:p.default.bool,timeZone:p.default.string}),O.defaultProps={disableTyping:!1,timeZone:"Europe/Helsinki"};var q={de:{today:"Heute",tomorrow:"Morgen","accessible-close":"Schließe die Auswahl","accessible-closed":"Auswahl geschlossen","accessible-open":"Öffne die Auswahl","accessible-opened":"Auswahl geöffnet","accessible-title":"Datum und Uhrzeitauswahl",arrival:"Ankunft",date:"Datum",departure:"Abfahrt","departure-now":"Abfahrt jetzt","choose-time":"Zeit wählen",ready:"Fertig",time:"Zeit",cancel:"Abbrechen"},en:{today:"Today",tomorrow:"Tomorrow","accessible-close":"Close the picker","accessible-closed":"Timepicker closed","accessible-open":"Open the picker","accessible-opened":"Timepicker opened","accessible-title":"Date and timepicker","accessible-update-instructions":"Changing time parameters will trigger a new search.",arrival:"Arrival",date:"Date",departure:"Departure","departure-now":"Leaving now",time:"Time","choose-time":"Choose time",ready:"Ready",cancel:"Cancel"},fi:{today:"Tänään",tomorrow:"Huomenna","accessible-close":"Sulje valitsin","accessible-closed":"Valitsin suljettu","accessible-open":"Avaa valitsin","accessible-opened":"Valitsin avattu","accessible-title":"Aika- ja päivämäärävalitsin","accessible-update-instructions":"Aikavalintojen muuttaminen laukaisee uuden haun.",arrival:"Perillä",date:"Päivä",departure:"Lähtöaika","departure-now":"Lähtö nyt",time:"Aika","choose-time":"Valitse aika",ready:"Valmis",cancel:"Peruuta"},sv:{today:"I dag",tomorrow:"I morgon","accessible-close":"Stäng väljaren","accessible-closed":"Väljaren stängde","accessible-open":"Öppna väljaren","accessible-opened":"Väljaren öppnade","accessible-title":"Tid- och datumväljaren","accessible-update-instructions":"Om du ändrar tiderna, startas en ny sökning automatiskt.",arrival:"Anländer",date:"Datum",departure:"Avgångstid","departure-now":"Avgår nu",time:"Tid","choose-time":"Välj tid",ready:"Färdig",cancel:"Avbryt"}};function R(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var S=["ref"];function A(e){var t=e.value,a=e.getDisplay,i=e.onChange,o=e.itemCount,l=e.startTime,r=e.id,s=e.label,c=e.icon,d=e.timeZone;f.default.tz.setDefault(d);var u=C(n.useState(!1),2),m=u[0],p=u[1],b=n.useRef(null),y=Array(o).fill().map((function(e,t){return f.default(l).add(t,"day").valueOf()})),g=y.map((function(e){return t-e})).findIndex((function(e){return e<6e4}));n.useLayoutEffect((function(){m&&b.current&&(b.current.scrollTop=50*g)}),[t,m]);var h=!(navigator.userAgent.toLowerCase().indexOf("android")>-1),x="".concat(r,"-input"),v="".concat(r,"-label");return _.default.createElement(_.default.Fragment,null,_.default.createElement("label",{className:z["input-container"],htmlFor:x},_.default.createElement("span",null,c),_.default.createElement("span",{className:z["sr-only"],id:v},s),h?_.default.createElement(_.default.Fragment,null,_.default.createElement("select",{className:z["mobile-input-display"],onChange:function(e){return i(Number(e.target.value))},value:t},y.map((function(e){return _.default.createElement("option",{key:e,value:e},a(e))})))):_.default.createElement(w.default,{id:r,suggestions:y,getSuggestionValue:function(e){return e.toString()},renderSuggestion:function(e){return a(e)},onSuggestionsFetchRequested:function(){return null},shouldRenderSuggestions:function(){return!0},inputProps:{value:a(t),onChange:function(e,t){var n=t.newValue;i(Number(n))},onFocus:function(){p(!0)},onBlur:function(){p(!1)},id:x,"aria-labelledby":v,"aria-autocomplete":"none",readOnly:!0},focusInputOnSuggestionClick:!1,onSuggestionsClearRequested:function(){return null},renderSuggestionsContainer:function(e){var t=e.containerProps,n=e.children,a=t.ref,i=R(t,S);return _.default.createElement("div",Object.assign({tabIndex:"-1"},i,{ref:function(e){e&&(b.current=e,a(e))}}),n)},theme:z})))}function D(e){var t=e.value,a=e.getDisplay,i=e.onChange,o=e.id,l=e.label,r=e.icon,s=e.timeZone,c=e.validate,d=C(n.useState(a(t)),2),u=d[0],m=d[1];f.default.tz.setDefault(s);var p="".concat(o,"-input"),b="".concat(o,"-label"),y=n.useRef(null);return n.useLayoutEffect((function(){y.current&&y.current.focus()}),[]),_.default.createElement(_.default.Fragment,null,_.default.createElement("label",{className:z["input-container"],htmlFor:p},_.default.createElement("span",null,r),_.default.createElement("span",{className:z["sr-only"],id:b},l),_.default.createElement("input",{id:p,inputMode:"numeric",type:"text",maxLength:"6",className:z["time-input-mobile"],value:u,onFocus:function(e){e.target.setSelectionRange(0,0)},onChange:function(e){var n=e.target.value;if(n.match(/[0-9]{3}:[0-9]{2}/)&&n.slice(1)===u&&(n=n.charAt(0)),!(n.length>5)){var a=T.parseTypedTime(n);m(a);var o=c(a,t);o&&i(o)}},ref:y})))}function j(e){var t=e.departureOrArrival,a=e.onNowClick,i=e.lang,o=e.color,l=e.timeZone,r=e.onSubmit,s=e.onCancel,c=e.timestamp,d=e.getTimeDisplay,u=e.dateSelectItemCount,m=e.getDateDisplay,p=e.validateTime,b=e.fontWeights;f.default.tz.setDefault(l);var x={lng:i},w=C(n.useState(c),2),k=w[0],E=w[1],N=C(n.useState(t),2),T=N[0],O=N[1];var q=C(n.useState(y.default("datetimepicker-")),1)[0],R=f.default().startOf("day").hour(f.default(k).hour()).minute(f.default(k).minute()).valueOf();return _.default.createElement(v.default,{appElement:document?document.querySelector("#app"):void 0,isOpen:!0,className:z["mobile-modal-content"],overlayClassName:z["mobile-modal-overlay"]},_.default.createElement("div",{style:{"--color":"".concat(o),"--font-weight-medium":b.medium}},_.default.createElement("div",{className:z["top-row"]},_.default.createElement("h3",{className:z["modal-title"]},g.default.t("choose-time",x)),_.default.createElement("button",{type:"button",className:z["departure-now-button"],onClick:a},g.default.t("departure-now",x))),_.default.createElement("div",{className:z["tab-row"]},_.default.createElement("label",{htmlFor:"".concat(q,"-modal-departure"),className:"".concat(z["radio-tab-label"],"\n ").concat(z["departure"===T?"active":void 0])},g.default.t("departure",x),_.default.createElement("input",{id:"".concat(q,"-modal-departure"),name:"departureOrArrival",type:"radio",value:"departure",className:z["radio-textbutton"],onChange:function(){O("departure")},checked:"departure"===T})),_.default.createElement("label",{htmlFor:"".concat(q,"-modal-arrival"),className:"".concat(z["radio-tab-label"],"\n ").concat(z["arrival"===T?"active":void 0])},g.default.t("arrival",x),_.default.createElement("input",{id:"".concat(q,"-modal-arrival"),name:"departureOrArrival",type:"radio",value:"arrival",className:z["radio-textbutton"],onChange:function(){O("arrival")},checked:"arrival"===T}))),_.default.createElement("div",{className:z["input-row"]},_.default.createElement(A,{value:k,getDisplay:m,onChange:function(e){E(e)},itemCount:u,startTime:R,id:"".concat(q,"-date"),label:g.default.t("date",x),icon:_.default.createElement("span",{className:"".concat(z["combobox-icon"]," ").concat(z["date-input-icon"])},_.default.createElement(h.default,{img:"calendar",color:o})),timeZone:l}),_.default.createElement(D,{value:k,getDisplay:d,onChange:function(e){E(e)},id:"".concat(q,"-time"),label:g.default.t("time",x),icon:_.default.createElement("span",{className:"".concat(z["combobox-icon"]," ").concat(z["time-input-icon"])},_.default.createElement(h.default,{img:"time",color:o})),timeZone:l,validate:p})),_.default.createElement("div",{className:z["buttons-row"]},_.default.createElement("button",{type:"button",className:z["ready-button"],onClick:function(){return r(k,T)}},g.default.t("ready",x)),_.default.createElement("button",{type:"button",className:z["cancel-button"],onClick:s},g.default.t("cancel",x)))))}function P(e){var t=e.timestamp,a=e.onTimeChange,i=e.onDateChange,o=e.departureOrArrival,l=e.onNowClick,r=e.onDepartureClick,s=e.onArrivalClick,c=e.embedWhenClosed,d=e.embedWhenOpen,u=e.lang,m=e.color,p=e.timeZone,b=e.onModalSubmit,x=e.fontWeights,v=e.serviceTimeRange,w=e.onOpen,k=e.onClose,E=e.openPicker;f.default.tz.setDefault(p);var T,R=C(n.useState(E||!1),2),S=R[0],A=R[1],D=C(n.useState(t||f.default().valueOf()),2),P=D[0],F=D[1],V=C(n.useState(null),2),M=V[0],I=V[1],B=C(n.useState(y.default("datetimepicker-")),1)[0],W=C(n.useState((T=navigator.userAgent||navigator.vendor||window.opera,/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(T)&&function(){if("undefined"==typeof window||null===window)return!1;var e=document.createElement("input");return e.type="date","date"===e.type&&(e.type="time","time"===e.type)}())),1)[0],Z=n.useRef(),H=n.useRef(),L=n.useRef(),G={lng:u};n.useEffect((function(){Object.keys(q).forEach((function(e){return g.default.addResourceBundle(e,"translation",q[u])}))}),[]),n.useEffect((function(){f.default.locale(u)}),[u]);var J=null===t;n.useEffect((function(){J?F(f.default().valueOf()):(M&&(clearInterval(M),I(null)),F(t))}),[t]),n.useEffect((function(){if(J){M&&clearInterval(M);var e=setInterval((function(){var t=f.default().valueOf();f.default(P).isSame(t,"minute")||(clearInterval(e),I(null),F(t))}),5e3);return I(e),function(){return clearInterval(e)}}}),[P]);var Q=n.useRef();n.useEffect((function(){Q.current=S}));var K=Q.current;n.useLayoutEffect((function(){var e;if(!K===S)if(S)H&&(null===(e=H.current)||void 0===e||e.focus());else if(Z){var t;null===(t=Z.current)||void 0===t||t.focus()}}));for(var Y=function(e){var t,n=f.default(e);return t=n.isSame(f.default(),"day")?g.default.t("today",G):n.isSame(f.default().add(1,"day"),"day")?g.default.t("tomorrow",G):n.format("dd D.M."),t="".concat(t.charAt(0).toUpperCase()).concat(t.slice(1))},U=function(e){return f.default(e).format("HH:mm")},X=function(e,t){var n=e.trim();if(null!==n.match(/^[0-9]{1,2}(\.|:)[0-9]{2}$/)){var a=n.includes(".")?".":":",i=n.split(a),o=Number(i[0]),l=!Number.isNaN(o)&&o>=0&&o<=23,r=Number(i[1]);return!Number.isNaN(r)&&r>=0&&r<=59&&l?f.default(t).hours(o).minutes(r).valueOf():null}return null},$=f.default(P),ee=f.default(P).startOf("day").valueOf(),te=[],ne=f.default(ee);ne.isSame(ee,"day");)te.push(ne.valueOf()),ne.add(15,"minutes");if(null===t){var ae,ie=3e5,oe=Math.ceil(P/ie)*ie,le=Array(7).fill().map((function(e,t){return oe+t*ie})),re=te.map((function(e){return P-e})).findIndex((function(e){return e<=0}));(ae=te).splice.apply(ae,[re,0].concat(N(le))),te=Array.from(new Set(te))}var se=f.default().startOf("day").hour($.hour()).minute($.minute()).valueOf(),ce=Array(v).fill().map((function(e,t){return f.default(se).add(t,"day").valueOf()}));function de(){L.current&&(L.current.innerHTML=g.default.t("accessible-closed",G),setTimeout((function(){L.current.innerHTML=null}),100))}return _.default.createElement("fieldset",{className:z["dt-datetimepicker"],id:"".concat(B,"-root"),style:{"--color":"".concat(m),"--font-weight-medium":x.medium}},_.default.createElement("legend",{className:z["sr-only"]},g.default.t("accessible-title",G)),_.default.createElement("span",{className:z["sr-only"]},g.default.t("accessible-update-instructions",G)),_.default.createElement(_.default.Fragment,null,_.default.createElement("div",{className:S?"".concat(z.hidden," datetimepicker-top-row"):"".concat(z["top-row-container"]," ").concat(z.closed," datetimepicker-top-row")},_.default.createElement("label",{className:z["label-open"],htmlFor:"".concat(B,"-open")},_.default.createElement("span",{className:z["time-icon"]},_.default.createElement(h.default,{img:"time",color:m})),_.default.createElement("span",{className:z["sr-only"]},g.default.t("accessible-open",G)),_.default.createElement("span",{role:"alert",className:z["sr-only"],ref:L}),_.default.createElement("button",{id:"".concat(B,"-open"),type:"button",className:"".concat(z.textbutton," ").concat(z.active," ").concat(z["open-button"]),"aria-controls":"".concat(B,"-root"),"aria-expanded":"false",onClick:function(){A(!0),L.current&&(L.current.innerHTML=g.default.t("accessible-opened",G),setTimeout((function(){L.current.innerHTML=null}),100)),w&&w()},ref:Z},_.default.createElement("span",null,J&&"departure"===o?g.default.t("departure-now",G):_.default.createElement(_.default.Fragment,null,g.default.t("departure"===o?"departure":"arrival",G)," ".concat(f.default().isSame(f.default(P),"day")?"":Y(P).toLowerCase()," ").concat(U(P)))),_.default.createElement("span",{className:z["dropdown-icon"]},_.default.createElement(h.default,{img:"arrow-dropdown",color:m})))),_.default.createElement("span",{className:z["right-edge"]},c)),_.default.createElement("div",null)),W?S&&_.default.createElement(j,{departureOrArrival:o,onNowClick:function(){A(!1),de(),l()},lang:u,color:m,onSubmit:function(e,t){b(e,t),A(!1),de()},onCancel:function(){A(!1),de(),k&&k()},getTimeDisplay:U,timeZone:p,timestamp:P,getDateDisplay:Y,dateSelectItemCount:v,getDisplay:U,validateTime:X,fontWeights:x}):_.default.createElement(_.default.Fragment,null,_.default.createElement("div",{className:"".concat(z["datetimepicker-open-container"]," ").concat(S?"":z.hidden)},_.default.createElement("div",{className:"".concat(S?z["top-row-container"]:z.hidden," datetimepicker-top-row")}," ",_.default.createElement("span",{role:"alert",className:z["sr-only"],ref:L}),_.default.createElement("span",null),_.default.createElement("span",{className:z["departure-or-arrival-container"]},_.default.createElement("label",{htmlFor:"".concat(B,"-departure"),className:"".concat(z["radio-textbutton-label"],"\n ").concat(z["departure"===o?"active":void 0])},g.default.t("departure",G),_.default.createElement("input",{id:"".concat(B,"-departure"),name:"departureOrArrival",type:"radio",value:"departure",className:z["radio-textbutton"],onChange:function(){r()},checked:"departure"===o})),_.default.createElement("label",{htmlFor:"".concat(B,"-arrival"),className:"".concat(z["radio-textbutton-label"],"\n ").concat(z["arrival"===o?"active":void 0])},g.default.t("arrival",G),_.default.createElement("input",{id:"".concat(B,"-arrival"),name:"departureOrArrival",type:"radio",value:"arrival",className:z["radio-textbutton"],onChange:function(){s()},checked:"arrival"===o}))),_.default.createElement("button",{id:"".concat(B,"-now"),type:"button",className:z["departure-now-button"],onClick:function(){A(!1),de(),k&&k(),l()},ref:H},g.default.t("departure-now",G)),_.default.createElement("span",{className:z["right-edge"]},_.default.createElement("button",{type:"button",className:z["close-button"],"aria-controls":"".concat(B,"-root"),"aria-expanded":"true",onClick:function(){A(!1),de(),k&&k()}},_.default.createElement("span",{className:z["close-icon"]},_.default.createElement(h.default,{img:"close",color:m})),_.default.createElement("span",{className:z["sr-only"]},g.default.t("accessible-close",G))))),_.default.createElement("div",{className:S?"".concat(z["picker-container"]):"".concat(z.hidden," datetimepicker-top-row")},_.default.createElement(_.default.Fragment,null,_.default.createElement("span",{className:z["combobox-left"]},_.default.createElement(O,{value:P,onChange:function(e){i(e)},getDisplay:Y,timeChoices:ce,validate:function(){return null},icon:_.default.createElement("span",{className:"".concat(z["combobox-icon"]," ").concat(z["date-input-icon"])},_.default.createElement(h.default,{img:"calendar",color:m})),id:"".concat(B,"-date"),label:g.default.t("date",G),disableTyping:!0,timeZone:p})),_.default.createElement("span",{className:z["combobox-right"]},_.default.createElement(O,{value:P,onChange:function(e){a(e)},getDisplay:U,timeChoices:te,validate:X,icon:_.default.createElement("span",{className:"".concat(z["combobox-icon"]," ").concat(z["time-input-icon"])},_.default.createElement(h.default,{img:"time",color:m})),id:"".concat(B,"-time"),label:g.default.t("time",G),timeZone:p}))))),_.default.createElement("span",{className:S?"":z.hidden},d),_.default.createElement("div",{className:S?"datetimepicker-bottom-row-open":""})))}function F(e){var t=e.realtime,a=e.initialArriveBy,i=e.initialTimestamp,o=e.onDepartureClick,l=e.onArrivalClick,r=e.onTimeChange,s=e.onDateChange,c=e.onNowClick,d=e.embedWhenClosed,u=e.embedWhenOpen,m=e.lang,p=e.color,y=e.timeZone,g=e.fontWeights,h=e.serviceTimeRange,x=e.onOpen,v=e.onClose,w=e.openPicker;f.default.locale(m),f.default.tz.setDefault(y);var k=t?null:f.default().valueOf(),E=C(n.useState(i?1e3*i:k),2),N=E[0],T=E[1],z=C(n.useState(!0===a?"arrival":"departure"),2),O=z[0],q=z[1];n.useEffect((function(){var e=null===N&&void 0===i,t=null===N||void 0===i,n=Math.round(N/1e3)===i;!e&&(t||!n)&&T(void 0===i?null:1e3*i),!a==("arrival"===O)&&q(!0===a?"arrival":"departure")}),[i,a]);var R=b.default((function(e){if(null===e)return T(f.default().valueOf()),void r(Math.round(f.default().valueOf()/1e3),"arrival"===O);T(e),r(Math.round(e/1e3),"arrival"===O)}),10),S=b.default((function(e){if(null===e)return T(f.default().valueOf()),void s(Math.round(f.default().valueOf()/1e3),"arrival"===O);T(e),s(Math.round(e/1e3),"arrival"===O)}),10);return _.default.createElement(P,{timestamp:N,onTimeChange:R,onDateChange:S,departureOrArrival:O,onNowClick:function(){q("departure");var e=t?null:f.default().valueOf();T(e),c(Math.round(e/1e3))},onDepartureClick:function(){var e=!1,t=N;if(null===N){var n=f.default().valueOf();T(n),t=n,e=!0}"departure"!==O&&(q("departure"),e=!0),e&&o(Math.round(t/1e3))},onArrivalClick:function(){var e=!1,t=N;if(null===N){var n=f.default().valueOf();T(n),t=n,e=!0}"arrival"!==O&&(q("arrival"),e=!0),e&&l(Math.round(t/1e3))},embedWhenClosed:d,embedWhenOpen:u,lang:m,color:p,timeZone:y,onModalSubmit:function(e,t){T(e),q(t),r(e/1e3,"arrival"===t,!0)},fontWeights:g,serviceTimeRange:h,onOpen:x,onClose:v,openPicker:w})}"production"!==process.env.NODE_ENV&&(A.propTypes={value:p.default.number.isRequired,getDisplay:p.default.func.isRequired,onChange:p.default.func.isRequired,itemCount:p.default.number.isRequired,startTime:p.default.number.isRequired,id:p.default.string.isRequired,label:p.default.string.isRequired,icon:p.default.node,dateTimeCombined:p.default.bool,timeZone:p.default.string}),A.defaultProps={icon:null,dateTimeCombined:!1,timeZone:"Europe/Helsinki"},"production"!==process.env.NODE_ENV&&(D.propTypes={value:p.default.number.isRequired,getDisplay:p.default.func.isRequired,onChange:p.default.func.isRequired,id:p.default.string.isRequired,label:p.default.string.isRequired,icon:p.default.node,timeZone:p.default.string,validate:p.default.func.isRequired}),D.defaultProps={icon:null,timeZone:"Europe/Helsinki"},f.default.locale("en"),g.default.init({lng:"en",resources:{}}),Object.keys(q).forEach((function(e){return g.default.addResourceBundle(e,"translation",q[e])})),"production"!==process.env.NODE_ENV&&(j.propTypes={timeZone:p.default.string,departureOrArrival:p.default.oneOf(["departure","arrival"]).isRequired,onNowClick:p.default.func.isRequired,lang:p.default.string.isRequired,color:p.default.string,onSubmit:p.default.func.isRequired,onCancel:p.default.func.isRequired,timestamp:p.default.number.isRequired,getTimeDisplay:p.default.func.isRequired,dateSelectItemCount:p.default.number.isRequired,getDateDisplay:p.default.func.isRequired,validateTime:p.default.func.isRequired,fontWeights:p.default.shape({medium:p.default.number.isRequired}).isRequired}),j.defaultProps={color:"#007ac9",timeZone:"Europe/Helsinki"},f.default.locale("en"),g.default.init({lng:"fi",fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}}),"production"!==process.env.NODE_ENV&&(P.propTypes={timestamp:p.default.number,timeZone:p.default.string,onTimeChange:p.default.func.isRequired,onDateChange:p.default.func.isRequired,departureOrArrival:p.default.oneOf(["departure","arrival"]).isRequired,onNowClick:p.default.func.isRequired,onDepartureClick:p.default.func.isRequired,onArrivalClick:p.default.func.isRequired,embedWhenClosed:p.default.node,embedWhenOpen:p.default.node,lang:p.default.string.isRequired,color:p.default.string,onModalSubmit:p.default.func.isRequired,fontWeights:p.default.shape({medium:p.default.number.isRequired}).isRequired,serviceTimeRange:p.default.number,onOpen:p.default.func,onClose:p.default.func,openPicker:p.default.bool}),P.defaultProps={timestamp:null,embedWhenClosed:null,embedWhenOpen:null,color:"#007ac9",timeZone:"Europe/Helsinki",serviceTimeRange:30,onOpen:null,onClose:null,openPicker:void 0},"production"!==process.env.NODE_ENV&&(F.propTypes={realtime:p.default.bool,initialTimestamp:p.default.number,initialArriveBy:p.default.bool,onDepartureClick:p.default.func.isRequired,onArrivalClick:p.default.func.isRequired,onTimeChange:p.default.func.isRequired,onDateChange:p.default.func.isRequired,onNowClick:p.default.func.isRequired,embedWhenClosed:p.default.node,embedWhenOpen:p.default.node,lang:p.default.string,color:p.default.string,timeZone:p.default.string,fontWeights:p.default.shape({medium:p.default.number}),serviceTimeRange:p.default.number,onOpen:p.default.func,onClose:p.default.func,openPicker:p.default.bool}),F.defaultProps={realtime:!1,initialArriveBy:void 0,initialTimestamp:void 0,embedWhenClosed:null,embedWhenOpen:null,lang:"en",color:"#007ac9",timeZone:"Europe/Helsinki",fontWeights:{medium:500},onOpen:null,onClose:null,openPicker:void 0},e.default=F,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("prop-types"),require("react"),require("moment-timezone"),require("lodash/debounce"),require("moment/locale/fi"),require("lodash/uniqueId"),require("i18next"),require("@digitransit-component/digitransit-component-icon"),require("react-select"),require("react-modal"),require("react-autosuggest")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","moment-timezone","lodash/debounce","moment/locale/fi","lodash/uniqueId","i18next","@digitransit-component/digitransit-component-icon","react-select","react-modal","react-autosuggest"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-datetimepicker"]={},e.PropTypes,e.React,e.moment,e.debounce,null,e.uniqueId,e.i18next,e.Icon,e.Select,e.ReactModal,e.Autosuggest)}(this,(function(e,t,n,a,i,o,l,r,s,c,d,u){"use strict";function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=m(t),_=m(n),f=m(a),b=m(i),y=m(l),g=m(r),h=m(s),v=m(c),x=m(d),w=m(u);function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function E(e,t){if(e){if("string"==typeof e)return k(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],a=!0,i=!1,o=void 0;try{for(var l,r=e[Symbol.iterator]();!(a=(l=r.next()).done)&&(n.push(l.value),!t||n.length!==t);a=!0);}catch(e){i=!0,o=e}finally{try{a||null==r.return||r.return()}finally{if(i)throw o}}return n}}(e,t)||E(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function N(e){return function(e){if(Array.isArray(e))return k(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||E(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var T={parseTypedTime:function(e){var t=e;return 3===t.length&&t.split("").every((function(e){return Number.isInteger(Number(e))}))&&(t=Number(t.slice(0,2))<=23?"".concat(t.slice(0,2),":").concat(t[2]):"".concat(t[0],":").concat(t.slice(1))),t}};var z={"sr-only":"styles_sr-only__2CeLM","dt-datetimepicker":"styles_dt-datetimepicker__1wz1m",hidden:"styles_hidden__1Ru0r","datetimepicker-open-container":"styles_datetimepicker-open-container__fawy2","top-row-container":"styles_top-row-container__EP3wT",closed:"styles_closed__3Nufa","time-icon":"styles_time-icon__1MXOL","dropdown-icon":"styles_dropdown-icon__1CTo1","close-icon":"styles_close-icon__325lp","label-open":"styles_label-open__1MDMT",textbutton:"styles_textbutton__1DPB1",active:"styles_active__3-bFB","combobox-left":"styles_combobox-left__1S_uJ","combobox-right":"styles_combobox-right__2KxYn","departure-or-arrival-container":"styles_departure-or-arrival-container__1lWPR","radio-textbutton-label":"styles_radio-textbutton-label__2POxN","first-radio":"styles_first-radio__3GCaF","radio-textbutton":"styles_radio-textbutton__1CAeh","departure-now-button":"styles_departure-now-button__2evH9","open-button":"styles_open-button__3MQJt","close-button":"styles_close-button__2xKiw","right-edge":"styles_right-edge__3AIDK","combobox-container":"styles_combobox-container__2p7JD","combobox-icon":"styles_combobox-icon__GFSlj","date-input-icon":"styles_date-input-icon__1CapH","time-input-icon":"styles_time-input-icon__cvYnu","datetimepicker-select-container":"styles_datetimepicker-select-container__joqht","picker-container":"styles_picker-container__1sany","combobox-mobile-container":"styles_combobox-mobile-container__a5cuJ","mobile-modal-overlay":"styles_mobile-modal-overlay__eYuHr","mobile-modal-content":"styles_mobile-modal-content__36efr","top-row":"styles_top-row__3cttP","modal-title":"styles_modal-title__1dohQ","tab-row":"styles_tab-row__21vQB","radio-tab-label":"styles_radio-tab-label__3wLjW","input-row":"styles_input-row__hxoV2","input-container":"styles_input-container__1c9oT","time-input-mobile":"styles_time-input-mobile__2sE5D","mobile-input-display":"styles_mobile-input-display__BfyTR","mobile-input-hidden":"styles_mobile-input-hidden__2Jerx",container:"styles_container__3_eaa",suggestion:"styles_suggestion__3BSiz",suggestionHighlighted:"styles_suggestionHighlighted__1eqIn",suggestionsContainerOpen:"styles_suggestionsContainerOpen__SoMrv",input:"styles_input__1gwqo","buttons-row":"styles_buttons-row__211nv","ready-button":"styles_ready-button__2P0aB"};function O(e){var t=e.value,a=e.onChange,i=e.getDisplay,o=e.timeChoices,l=e.validate,r=e.id,s=e.label,c=e.icon,d=e.disableTyping,u=e.timeZone;f.default.tz.setDefault(u);var m=C(n.useState(i(t)),2),p=m[0],b=m[1],y=C(n.useState(!1),2),g=y[0],h=y[1];n.useEffect((function(){return b(i(t))}),[t]);var x=function(e){var t=Number(e);!Number.isNaN(t)&&f.default(t).isValid()&&f.default(t).valueOf()===t&&a(t)},w=o.map((function(e){return{value:e.toString(),label:i(e)}})),k=w.reduce((function(e,n){return Math.abs(t-e.value)<Math.abs(t-n.value)?e:n})),E="".concat(r,"-input"),N="".concat(r,"-label");return _.default.createElement(_.default.Fragment,null,_.default.createElement("label",{className:z["combobox-container"],htmlFor:E},_.default.createElement("span",{className:z["sr-only"],id:N},s," ",p),c,_.default.createElement(v.default,{"aria-labelledby":N,ariaLiveMessages:{guidance:function(){return"."},onChange:function(){return""},onFilter:function(){return""},onFocus:function(e){var t=e.context,n=e.label;return"menu"===t?n:""}},options:w,inputId:E,onChange:function(e){if(g){var n=l(p,t);null!==n?(x(n),h(!1)):(b(i(t)),h(!1))}else x(e.value)},components:{IndicatorsContainer:function(){return null}},className:z["datetimepicker-select-container"],classNamePrefix:"datetimepicker-select",onInputChange:function(e,t){var n=t.action;if(!d&&"input-change"===n){var a=T.parseTypedTime(e);b(a),h(!0)}},inputValue:!d&&p,value:k,filterOption:function(){return!0},controlShouldRenderValue:d,tabSelectsValue:!1,placeholder:"",onFocus:function(e){d||e.target.select()},onBlur:function(){if(g){var e=l(p,t);null!==e?(x(e),h(!1)):(b(i(t)),h(!1))}},onKeyDown:function(e){["ArrowDown","ArrowUp"].includes(e.key)&&h(!1)},isSearchable:!d})))}!function(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var a=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&a.firstChild?a.insertBefore(i,a.firstChild):a.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}(".styles_sr-only__2CeLM:not(:focus):not(:active) {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n\n.styles_dt-datetimepicker__1wz1m {\n border: none;\n padding: 0;\n margin: 0;\n font-size: 15px;\n font-weight: var(--font-weight-medium); }\n .styles_dt-datetimepicker__1wz1m button, .styles_dt-datetimepicker__1wz1m label {\n font-size: 1em;\n font-weight: inherit; }\n .styles_dt-datetimepicker__1wz1m label button {\n cursor: pointer;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif; }\n .styles_dt-datetimepicker__1wz1m .styles_hidden__1Ru0r {\n display: none; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-open-container__fawy2 {\n background-color: #f4f4f5;\n border-radius: 5px;\n padding: 15px; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT {\n display: flex;\n flex-wrap: wrap; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT.styles_closed__3Nufa {\n margin: 11px 0 6px 18px; }\n @media screen and (max-width: 319px) {\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT {\n margin-left: 14px; } }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT .styles_time-icon__1MXOL svg {\n width: 18px;\n height: 19px; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT .styles_dropdown-icon__1CTo1 {\n margin-left: 9px;\n position: relative;\n top: 1px; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT .styles_dropdown-icon__1CTo1 svg {\n width: 14px;\n height: 10px; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT .styles_close-icon__325lp svg {\n width: 12px;\n height: 12px;\n border-radius: 1px; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT .styles_close-icon__325lp svg path {\n stroke-width: 30; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT label {\n cursor: pointer; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT label.styles_label-open__1MDMT {\n align-items: flex-start;\n display: flex; }\n .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT button, .styles_dt-datetimepicker__1wz1m .styles_top-row-container__EP3wT label {\n font-size: 1em;\n letter-spacing: -0.5px;\n line-height: 1; }\n .styles_dt-datetimepicker__1wz1m .styles_textbutton__1DPB1 {\n margin-left: 9px;\n margin-top: 1px;\n background: none;\n border: none;\n color: #666666;\n padding: 0; }\n @media screen and (min-width: 768px) {\n .styles_dt-datetimepicker__1wz1m .styles_textbutton__1DPB1 {\n margin-left: 14px; } }\n .styles_dt-datetimepicker__1wz1m .styles_textbutton__1DPB1.styles_active__3-bFB {\n color: var(--color); }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-left__1S_uJ {\n position: relative;\n margin-right: 4px;\n width: 63%; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-right__2KxYn {\n position: relative;\n margin-left: 4px;\n width: 37%; }\n .styles_dt-datetimepicker__1wz1m .styles_departure-or-arrival-container__1lWPR {\n height: calc(1rem + 20px);\n background-color: #dddddd;\n border-radius: 8px;\n display: flex;\n width: calc(5px + 13em); }\n .styles_dt-datetimepicker__1wz1m .styles_radio-textbutton-label__2POxN {\n color: #333333;\n margin: 2px;\n background: none;\n border-radius: 6px;\n padding: 9px 0;\n width: 50%;\n cursor: pointer;\n height: calc(1rem + 16px);\n text-align: center;\n font-weight: 400;\n font-size: 15px;\n line-height: 18px;\n letter-spacing: -0.03em; }\n .styles_dt-datetimepicker__1wz1m .styles_radio-textbutton-label__2POxN.styles_active__3-bFB {\n font-weight: 500;\n background: white; }\n .styles_dt-datetimepicker__1wz1m .styles_radio-textbutton-label__2POxN:focus-within {\n /* First apply outline that is used in Edge and Firefox */\n outline: 1px dotted #212121;\n /* Then override outline for webkit browsers like Chrome, this has no effect on other browsers */\n outline: 5px auto -webkit-focus-ring-color;\n /* stylelint-disable-line declaration-block-no-duplicate-properties */ }\n .styles_dt-datetimepicker__1wz1m .styles_radio-textbutton-label__2POxN.styles_first-radio__3GCaF {\n margin: 0;\n display: flex;\n align-items: flex-start; }\n .styles_dt-datetimepicker__1wz1m .styles_radio-textbutton__1CAeh {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n .styles_dt-datetimepicker__1wz1m .styles_departure-now-button__2evH9 {\n font-family: inherit;\n letter-spacing: -0.02em;\n height: calc(1rem + 18px);\n color: var(--color);\n padding: 8px 0;\n width: 6.6875rem;\n background: white;\n border: 1px solid #888888;\n border-radius: 30px;\n margin-left: 11px; }\n .styles_dt-datetimepicker__1wz1m .styles_open-button__3MQJt {\n display: flex;\n margin-bottom: 0;\n margin-top: -1px;\n padding: 2px 0 2px 0; }\n .styles_dt-datetimepicker__1wz1m button.styles_close-button__2xKiw {\n transition: transform 0.2s;\n position: relative;\n top: -8px;\n right: -8px;\n border: 0;\n font-weight: normal;\n background: none;\n color: var(--color);\n padding: 0;\n line-height: normal; }\n .styles_dt-datetimepicker__1wz1m button.styles_close-button__2xKiw:hover {\n transform: scale(1.2); }\n .styles_dt-datetimepicker__1wz1m .styles_right-edge__3AIDK {\n margin-left: auto;\n margin-right: 0;\n position: relative;\n top: -2px; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-container__2p7JD {\n cursor: pointer; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-icon__GFSlj {\n color: var(--color);\n height: 40px;\n position: absolute;\n z-index: 7;\n pointer-events: none; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-icon__GFSlj.styles_date-input-icon__1CapH {\n display: flex;\n align-items: center;\n padding: 0;\n margin-left: 14px; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-icon__GFSlj.styles_date-input-icon__1CapH svg {\n width: 20px;\n height: 18px; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-icon__GFSlj.styles_time-input-icon__cvYnu {\n display: flex;\n align-items: center;\n padding: 0;\n margin-left: 8px; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-icon__GFSlj.styles_time-input-icon__cvYnu svg {\n margin-top: 1px;\n width: 22px;\n height: 22px; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht {\n position: relative;\n height: 40px; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__control {\n cursor: inherit;\n height: 40px;\n border: 1px solid #888888; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__value-container {\n padding: 0; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__single-value {\n margin: 0 0 0 47px; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__input {\n background: inherit;\n position: relative;\n margin-left: 40px; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__input input {\n opacity: 1 !important;\n background: inherit;\n box-shadow: none;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.5px;\n color: #333333;\n font-family: inherit;\n font-size: 15px;\n font-weight: var(--font-weight-medium); }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__input input:focus {\n box-shadow: none;\n outline: none;\n border: none; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__menu {\n z-index: 19;\n padding: 0;\n background: #fff;\n max-height: 250px;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__menu .datetimepicker-select__menu-list {\n max-height: 250px;\n padding: 0; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__menu .datetimepicker-select__menu-list .datetimepicker-select__option {\n height: 50px;\n border-top: 1px solid #dddddd;\n padding: 13px 0 0 12px;\n letter-spacing: -0.6px;\n color: #333333; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__menu .datetimepicker-select__menu-list .datetimepicker-select__option--is-selected {\n background: inherit; }\n .styles_dt-datetimepicker__1wz1m .styles_datetimepicker-select-container__joqht .datetimepicker-select__menu .datetimepicker-select__menu-list .datetimepicker-select__option--is-focused {\n background: #dfe5e8; }\n .styles_dt-datetimepicker__1wz1m .styles_picker-container__1sany {\n margin: 14px 0 0 0;\n display: flex; }\n .styles_dt-datetimepicker__1wz1m .styles_combobox-mobile-container__a5cuJ {\n flex-grow: 1; }\n\n.styles_mobile-modal-overlay__eYuHr {\n position: fixed;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n background-color: rgba(0, 0, 0, 0.6);\n z-index: 1000; }\n\n.styles_mobile-modal-content__36efr {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n background: white;\n width: 89%;\n position: absolute;\n left: 5.5%;\n padding: 31px 20px 33px 20px;\n top: 80px;\n border-radius: 5px; }\n .styles_mobile-modal-content__36efr .styles_top-row__3cttP {\n display: flex;\n justify-content: space-between;\n margin-bottom: 21px; }\n .styles_mobile-modal-content__36efr .styles_top-row__3cttP .styles_modal-title__1dohQ {\n font-weight: var(--font-weight-medium);\n font-size: 20px;\n line-height: 18px;\n letter-spacing: -0.5px;\n color: #333333;\n padding: 6px 0 0 8px; }\n .styles_mobile-modal-content__36efr .styles_top-row__3cttP .styles_departure-now-button__2evH9 {\n background-color: white;\n font-family: inherit;\n padding: 5px 15px;\n border: 1px solid #888888;\n border-radius: 50px;\n font-weight: var(--font-weight-medium);\n font-size: 15px;\n line-height: 18px;\n letter-spacing: -0.02em;\n color: var(--color); }\n .styles_mobile-modal-content__36efr .styles_tab-row__21vQB {\n display: flex;\n border: 2px solid #dddddd;\n border-radius: 5px;\n margin-bottom: 16px;\n background-color: #dddddd; }\n .styles_mobile-modal-content__36efr .styles_tab-row__21vQB .styles_radio-tab-label__3wLjW {\n padding: 9px 0;\n font-size: 15px;\n line-height: 18px;\n letter-spacing: -0.5px;\n border-radius: 3px;\n font-weight: normal;\n width: 50%;\n text-align: center;\n color: #333333; }\n .styles_mobile-modal-content__36efr .styles_tab-row__21vQB .styles_radio-tab-label__3wLjW.styles_active__3-bFB {\n font-weight: var(--font-weight-medium);\n background-color: #ffffff; }\n .styles_mobile-modal-content__36efr .styles_tab-row__21vQB .styles_radio-textbutton__1CAeh {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 {\n display: flex;\n margin-bottom: 25px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 label:first-child {\n flex-basis: 60%;\n margin-right: 10px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 label:nth-child(2) {\n flex-basis: 40%; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT {\n border: 1px solid #888888;\n border-radius: 5px;\n display: flex;\n align-items: center;\n height: 40px;\n line-height: 1.5;\n font-size: 100%; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT:focus-within {\n background: rgba(0, 122, 201, 0.06);\n border: 2px solid var(--color); }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_combobox-icon__GFSlj {\n height: 18px;\n font-size: 18px;\n padding: 0 0 0 10px;\n border: none;\n position: relative;\n top: 3px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_combobox-icon__GFSlj.styles_time-input-icon__cvYnu > svg {\n height: 20px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_time-input-mobile__2sE5D {\n font-family: inherit;\n box-shadow: none;\n font-size: 18px;\n letter-spacing: -0.5px;\n line-height: 20px;\n font-weight: var(--font-weight-medium);\n border: none;\n outline: none;\n background: none;\n width: 50px;\n margin-left: 10px;\n color: #333333;\n height: 1.5265rem; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_mobile-input-display__BfyTR {\n position: relative;\n left: 10px;\n border: none;\n background: inherit;\n box-shadow: none;\n font-family: inherit;\n font-weight: var(--font-weight-medium);\n font-stretch: normal;\n font-style: normal;\n font-size: 16px;\n line-height: 1.33;\n letter-spacing: -0.5px;\n color: #333333; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_mobile-input-display__BfyTR:focus {\n outline: none;\n box-shadow: none;\n background: none; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_mobile-input-hidden__2Jerx {\n font-size: 16px;\n margin-bottom: 12px;\n height: 0px;\n width: 0;\n background: inherit;\n color: transparent;\n outline: none;\n box-shadow: none;\n border: none; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_mobile-input-hidden__2Jerx:focus {\n outline: none;\n box-shadow: none; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa {\n position: absolute;\n width: calc((100% - 50px) * 0.6);\n height: 25px;\n font-size: 15px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_suggestion__3BSiz {\n list-style: none;\n font-size: 16px;\n font-style: normal;\n font-weight: normal;\n line-height: 49px;\n height: 50px;\n margin: 0;\n padding: 0 0 0 16px;\n color: rgba(0, 0, 0, 0.87);\n background: white; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_suggestionHighlighted__1eqIn {\n background: #dfe5e8; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_suggestionsContainerOpen__SoMrv {\n position: absolute;\n z-index: 19;\n max-height: 250px;\n overflow-x: hidden;\n overflow-y: scroll;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid;\n top: 42px;\n left: -2px;\n width: 100%;\n font-size: 16px;\n line-height: 1;\n color: rgba(0, 0, 0, 0.87); }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_suggestionsContainerOpen__SoMrv ul {\n padding: 0;\n margin: 0; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_input__1gwqo {\n box-shadow: none;\n border: none;\n background: none;\n font-size: 16px;\n font-weight: var(--font-weight-medium);\n height: 25px;\n display: inline-block;\n font-family: inherit;\n line-height: 1.33;\n color: #333333;\n padding-left: 46px; }\n .styles_mobile-modal-content__36efr .styles_input-row__hxoV2 .styles_input-container__1c9oT .styles_container__3_eaa .styles_input__1gwqo:focus {\n outline: none;\n border: none;\n background: none; }\n .styles_mobile-modal-content__36efr .styles_buttons-row__211nv {\n display: flex;\n flex-direction: column;\n font-size: 16px;\n font-weight: var(--font-weight-medium); }\n .styles_mobile-modal-content__36efr .styles_buttons-row__211nv button {\n background-color: white;\n font-family: inherit;\n font-weight: var(--font-weight-medium);\n font-size: 16px;\n letter-spacing: -0.02em;\n width: 100%;\n border-radius: 50px;\n height: 40px;\n color: var(--color);\n border: 1px solid #888888; }\n .styles_mobile-modal-content__36efr .styles_buttons-row__211nv button.styles_ready-button__2P0aB {\n color: white;\n background-color: var(--color);\n border: none;\n margin-bottom: 10px; }\n"),"production"!==process.env.NODE_ENV&&(O.propTypes={value:p.default.number.isRequired,onChange:p.default.func.isRequired,getDisplay:p.default.func.isRequired,timeChoices:p.default.arrayOf(p.default.number).isRequired,validate:p.default.func.isRequired,id:p.default.string.isRequired,label:p.default.node.isRequired,icon:p.default.node.isRequired,disableTyping:p.default.bool,timeZone:p.default.string}),O.defaultProps={disableTyping:!1,timeZone:"Europe/Helsinki"};var q={de:{today:"Heute",tomorrow:"Morgen","accessible-close":"Schließe die Auswahl","accessible-closed":"Auswahl geschlossen","accessible-open":"Öffne die Auswahl","accessible-opened":"Auswahl geöffnet","accessible-title":"Datum und Uhrzeitauswahl",arrival:"Ankunft",date:"Datum",departure:"Abfahrt","departure-now":"Abfahrt jetzt","choose-time":"Zeit wählen",ready:"Fertig",time:"Zeit",cancel:"Abbrechen"},en:{today:"Today",tomorrow:"Tomorrow","accessible-close":"Close the picker","accessible-closed":"Timepicker closed","accessible-open":"Open the picker","accessible-opened":"Timepicker opened","accessible-title":"Date and timepicker","accessible-update-instructions":"Changing time parameters will trigger a new search.",arrival:"Arrival",date:"Date",departure:"Departure","departure-now":"Leaving now",time:"Time","choose-time":"Choose time",ready:"Ready",cancel:"Cancel"},fi:{today:"Tänään",tomorrow:"Huomenna","accessible-close":"Sulje valitsin","accessible-closed":"Valitsin suljettu","accessible-open":"Avaa valitsin","accessible-opened":"Valitsin avattu","accessible-title":"Aika- ja päivämäärävalitsin","accessible-update-instructions":"Aikavalintojen muuttaminen laukaisee uuden haun.",arrival:"Perillä",date:"Päivä",departure:"Lähtöaika","departure-now":"Lähtö nyt",time:"Aika","choose-time":"Valitse aika",ready:"Valmis",cancel:"Peruuta"},sv:{today:"I dag",tomorrow:"I morgon","accessible-close":"Stäng väljaren","accessible-closed":"Väljaren stängde","accessible-open":"Öppna väljaren","accessible-opened":"Väljaren öppnade","accessible-title":"Tid- och datumväljaren","accessible-update-instructions":"Om du ändrar tiderna, startas en ny sökning automatiskt.",arrival:"Anländer",date:"Datum",departure:"Avgångstid","departure-now":"Avgår nu",time:"Tid","choose-time":"Välj tid",ready:"Färdig",cancel:"Avbryt"}};function R(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var S=["ref"];function A(e){var t=e.value,a=e.getDisplay,i=e.onChange,o=e.itemCount,l=e.startTime,r=e.id,s=e.label,c=e.icon,d=e.timeZone;f.default.tz.setDefault(d);var u=C(n.useState(!1),2),m=u[0],p=u[1],b=n.useRef(null),y=Array(o).fill().map((function(e,t){return f.default(l).add(t,"day").valueOf()})),g=y.map((function(e){return t-e})).findIndex((function(e){return e<6e4}));n.useLayoutEffect((function(){m&&b.current&&(b.current.scrollTop=50*g)}),[t,m]);var h=!(navigator.userAgent.toLowerCase().indexOf("android")>-1),v="".concat(r,"-input"),x="".concat(r,"-label");return _.default.createElement(_.default.Fragment,null,_.default.createElement("label",{className:z["input-container"],htmlFor:v},_.default.createElement("span",null,c),_.default.createElement("span",{className:z["sr-only"],id:x},s),h?_.default.createElement(_.default.Fragment,null,_.default.createElement("select",{className:z["mobile-input-display"],onChange:function(e){return i(Number(e.target.value))},value:t},y.map((function(e){return _.default.createElement("option",{key:e,value:e},a(e))})))):_.default.createElement(w.default,{id:r,suggestions:y,getSuggestionValue:function(e){return e.toString()},renderSuggestion:function(e){return a(e)},onSuggestionsFetchRequested:function(){return null},shouldRenderSuggestions:function(){return!0},inputProps:{value:a(t),onChange:function(e,t){var n=t.newValue;i(Number(n))},onFocus:function(){p(!0)},onBlur:function(){p(!1)},id:v,"aria-labelledby":x,"aria-autocomplete":"none",readOnly:!0},focusInputOnSuggestionClick:!1,onSuggestionsClearRequested:function(){return null},renderSuggestionsContainer:function(e){var t=e.containerProps,n=e.children,a=t.ref,i=R(t,S);return _.default.createElement("div",Object.assign({tabIndex:"-1"},i,{ref:function(e){e&&(b.current=e,a(e))}}),n)},theme:z})))}function D(e){var t=e.value,a=e.getDisplay,i=e.onChange,o=e.id,l=e.label,r=e.icon,s=e.timeZone,c=e.validate,d=C(n.useState(a(t)),2),u=d[0],m=d[1];f.default.tz.setDefault(s);var p="".concat(o,"-input"),b="".concat(o,"-label"),y=n.useRef(null);return n.useLayoutEffect((function(){y.current&&y.current.focus()}),[]),_.default.createElement(_.default.Fragment,null,_.default.createElement("label",{className:z["input-container"],htmlFor:p},_.default.createElement("span",null,r),_.default.createElement("span",{className:z["sr-only"],id:b},l),_.default.createElement("input",{id:p,inputMode:"numeric",type:"text",maxLength:"6",className:z["time-input-mobile"],value:u,onFocus:function(e){e.target.setSelectionRange(0,0)},onChange:function(e){var n=e.target.value;if(n.match(/[0-9]{3}:[0-9]{2}/)&&n.slice(1)===u&&(n=n.charAt(0)),!(n.length>5)){var a=T.parseTypedTime(n);m(a);var o=c(a,t);o&&i(o)}},ref:y})))}function P(e){var t=e.departureOrArrival,a=e.onNowClick,i=e.lang,o=e.color,l=e.timeZone,r=e.onSubmit,s=e.onCancel,c=e.timestamp,d=e.getTimeDisplay,u=e.dateSelectItemCount,m=e.getDateDisplay,p=e.validateTime,b=e.fontWeights;f.default.tz.setDefault(l);var v={lng:i},w=C(n.useState(c),2),k=w[0],E=w[1],N=C(n.useState(t),2),T=N[0],O=N[1];var q=C(n.useState(y.default("datetimepicker-")),1)[0],R=f.default().startOf("day").hour(f.default(k).hour()).minute(f.default(k).minute()).valueOf();return _.default.createElement(x.default,{appElement:document?document.querySelector("#app"):void 0,isOpen:!0,className:z["mobile-modal-content"],overlayClassName:z["mobile-modal-overlay"]},_.default.createElement("div",{style:{"--color":"".concat(o),"--font-weight-medium":b.medium}},_.default.createElement("div",{className:z["top-row"]},_.default.createElement("h3",{className:z["modal-title"]},g.default.t("choose-time",v)),_.default.createElement("button",{type:"button",className:z["departure-now-button"],onClick:a},g.default.t("departure-now",v))),_.default.createElement("div",{className:z["tab-row"]},_.default.createElement("label",{htmlFor:"".concat(q,"-modal-departure"),className:"".concat(z["radio-tab-label"],"\n ").concat(z["departure"===T?"active":void 0])},g.default.t("departure",v),_.default.createElement("input",{id:"".concat(q,"-modal-departure"),name:"departureOrArrival",type:"radio",value:"departure",className:z["radio-textbutton"],onChange:function(){O("departure")},checked:"departure"===T})),_.default.createElement("label",{htmlFor:"".concat(q,"-modal-arrival"),className:"".concat(z["radio-tab-label"],"\n ").concat(z["arrival"===T?"active":void 0])},g.default.t("arrival",v),_.default.createElement("input",{id:"".concat(q,"-modal-arrival"),name:"departureOrArrival",type:"radio",value:"arrival",className:z["radio-textbutton"],onChange:function(){O("arrival")},checked:"arrival"===T}))),_.default.createElement("div",{className:z["input-row"]},_.default.createElement(A,{value:k,getDisplay:m,onChange:function(e){E(e)},itemCount:u,startTime:R,id:"".concat(q,"-date"),label:g.default.t("date",v),icon:_.default.createElement("span",{className:"".concat(z["combobox-icon"]," ").concat(z["date-input-icon"])},_.default.createElement(h.default,{img:"calendar",color:o})),timeZone:l}),_.default.createElement(D,{value:k,getDisplay:d,onChange:function(e){E(e)},id:"".concat(q,"-time"),label:g.default.t("time",v),icon:_.default.createElement("span",{className:"".concat(z["combobox-icon"]," ").concat(z["time-input-icon"])},_.default.createElement(h.default,{img:"time",color:o})),timeZone:l,validate:p})),_.default.createElement("div",{className:z["buttons-row"]},_.default.createElement("button",{type:"button",className:z["ready-button"],onClick:function(){return r(k,T)}},g.default.t("ready",v)),_.default.createElement("button",{type:"button",className:z["cancel-button"],onClick:s},g.default.t("cancel",v)))))}function j(e){var t=e.timestamp,a=e.onTimeChange,i=e.onDateChange,o=e.departureOrArrival,l=e.onNowClick,r=e.onDepartureClick,s=e.onArrivalClick,c=e.embedWhenClosed,d=e.embedWhenOpen,u=e.lang,m=e.color,p=e.timeZone,b=e.onModalSubmit,v=e.fontWeights,x=e.serviceTimeRange,w=e.onOpen,k=e.onClose,E=e.openPicker;f.default.tz.setDefault(p);var T,R=C(n.useState(E||!1),2),S=R[0],A=R[1],D=C(n.useState(t||f.default().valueOf()),2),j=D[0],F=D[1],V=C(n.useState(null),2),M=V[0],I=V[1],B=C(n.useState(y.default("datetimepicker-")),1)[0],W=C(n.useState((T=navigator.userAgent||navigator.vendor||window.opera,/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(T)&&function(){if("undefined"==typeof window||null===window)return!1;var e=document.createElement("input");return e.type="date","date"===e.type&&(e.type="time","time"===e.type)}())),1)[0],Z=n.useRef(),H=n.useRef(),L=n.useRef(),G={lng:u};n.useEffect((function(){Object.keys(q).forEach((function(e){return g.default.addResourceBundle(e,"translation",q[u])}))}),[]),n.useEffect((function(){f.default.locale(u)}),[u]);var J=null===t;n.useEffect((function(){J?F(f.default().valueOf()):(M&&(clearInterval(M),I(null)),F(t))}),[t]),n.useEffect((function(){if(J){M&&clearInterval(M);var e=setInterval((function(){var t=f.default().valueOf();f.default(j).isSame(t,"minute")||(clearInterval(e),I(null),F(t))}),5e3);return I(e),function(){return clearInterval(e)}}}),[j]);var Q=n.useRef();n.useEffect((function(){Q.current=S}));var K=Q.current;n.useLayoutEffect((function(){var e;if(!K===S)if(S)H&&(null===(e=H.current)||void 0===e||e.focus());else if(Z){var t;null===(t=Z.current)||void 0===t||t.focus()}}));for(var Y=function(e){var t,n=f.default(e);return t=n.isSame(f.default(),"day")?g.default.t("today",G):n.isSame(f.default().add(1,"day"),"day")?g.default.t("tomorrow",G):n.format("dd D.M."),t="".concat(t.charAt(0).toUpperCase()).concat(t.slice(1))},U=function(e){return f.default(e).format("HH:mm")},X=function(e,t){var n=e.trim();if(null!==n.match(/^[0-9]{1,2}(\.|:)[0-9]{2}$/)){var a=n.includes(".")?".":":",i=n.split(a),o=Number(i[0]),l=!Number.isNaN(o)&&o>=0&&o<=23,r=Number(i[1]);return!Number.isNaN(r)&&r>=0&&r<=59&&l?f.default(t).hours(o).minutes(r).valueOf():null}return null},$=f.default(j),ee=f.default(j).startOf("day").valueOf(),te=[],ne=f.default(ee);ne.isSame(ee,"day");)te.push(ne.valueOf()),ne.add(15,"minutes");if(null===t){var ae,ie=3e5,oe=Math.ceil(j/ie)*ie,le=Array(7).fill().map((function(e,t){return oe+t*ie})),re=te.map((function(e){return j-e})).findIndex((function(e){return e<=0}));(ae=te).splice.apply(ae,[re,0].concat(N(le))),te=Array.from(new Set(te))}var se=f.default().startOf("day").hour($.hour()).minute($.minute()).valueOf(),ce=Array(x).fill().map((function(e,t){return f.default(se).add(t,"day").valueOf()}));function de(){L.current&&(L.current.innerHTML=g.default.t("accessible-closed",G),setTimeout((function(){L.current.innerHTML=null}),100))}return _.default.createElement("fieldset",{className:z["dt-datetimepicker"],id:"".concat(B,"-root"),style:{"--color":"".concat(m),"--font-weight-medium":v.medium}},_.default.createElement("legend",{className:z["sr-only"]},g.default.t("accessible-title",G)),_.default.createElement("span",{className:z["sr-only"]},g.default.t("accessible-update-instructions",G)),_.default.createElement(_.default.Fragment,null,_.default.createElement("div",{className:S?"".concat(z.hidden," datetimepicker-top-row"):"".concat(z["top-row-container"]," ").concat(z.closed," datetimepicker-top-row")},_.default.createElement("label",{className:z["label-open"],htmlFor:"".concat(B,"-open")},_.default.createElement("span",{className:z["time-icon"]},_.default.createElement(h.default,{img:"time",color:m})),_.default.createElement("span",{className:z["sr-only"]},g.default.t("accessible-open",G)),_.default.createElement("span",{role:"alert",className:z["sr-only"],ref:L}),_.default.createElement("button",{id:"".concat(B,"-open"),type:"button",className:"".concat(z.textbutton," ").concat(z.active," ").concat(z["open-button"]),"aria-controls":"".concat(B,"-root"),"aria-expanded":"false",onClick:function(){A(!0),L.current&&(L.current.innerHTML=g.default.t("accessible-opened",G),setTimeout((function(){L.current.innerHTML=null}),100)),w&&w()},ref:Z},_.default.createElement("span",null,J&&"departure"===o?g.default.t("departure-now",G):_.default.createElement(_.default.Fragment,null,g.default.t("departure"===o?"departure":"arrival",G)," ".concat(f.default().isSame(f.default(j),"day")?"":Y(j).toLowerCase()," ").concat(U(j)))),_.default.createElement("span",{className:z["dropdown-icon"]},_.default.createElement(h.default,{img:"arrow-dropdown",color:m})))),_.default.createElement("span",{className:z["right-edge"]},c)),_.default.createElement("div",null)),W?S&&_.default.createElement(P,{departureOrArrival:o,onNowClick:function(){A(!1),de(),l()},lang:u,color:m,onSubmit:function(e,t){b(e,t),A(!1),de()},onCancel:function(){A(!1),de(),k&&k()},getTimeDisplay:U,timeZone:p,timestamp:j,getDateDisplay:Y,dateSelectItemCount:x,getDisplay:U,validateTime:X,fontWeights:v}):_.default.createElement(_.default.Fragment,null,_.default.createElement("div",{className:"".concat(z["datetimepicker-open-container"]," ").concat(S?"":z.hidden)},_.default.createElement("div",{className:"".concat(S?z["top-row-container"]:z.hidden," datetimepicker-top-row")}," ",_.default.createElement("span",{role:"alert",className:z["sr-only"],ref:L}),_.default.createElement("span",null),_.default.createElement("span",{className:z["departure-or-arrival-container"]},_.default.createElement("label",{htmlFor:"".concat(B,"-departure"),className:"".concat(z["radio-textbutton-label"],"\n ").concat(z["departure"===o?"active":void 0])},g.default.t("departure",G),_.default.createElement("input",{id:"".concat(B,"-departure"),name:"departureOrArrival",type:"radio",value:"departure",className:z["radio-textbutton"],onChange:function(){r()},checked:"departure"===o})),_.default.createElement("label",{htmlFor:"".concat(B,"-arrival"),className:"".concat(z["radio-textbutton-label"],"\n ").concat(z["arrival"===o?"active":void 0])},g.default.t("arrival",G),_.default.createElement("input",{id:"".concat(B,"-arrival"),name:"departureOrArrival",type:"radio",value:"arrival",className:z["radio-textbutton"],onChange:function(){s()},checked:"arrival"===o}))),_.default.createElement("button",{id:"".concat(B,"-now"),type:"button",className:z["departure-now-button"],onClick:function(){A(!1),de(),k&&k(),l()},ref:H},g.default.t("departure-now",G)),_.default.createElement("span",{className:z["right-edge"]},_.default.createElement("button",{type:"button",className:z["close-button"],"aria-controls":"".concat(B,"-root"),"aria-expanded":"true",onClick:function(){A(!1),de(),k&&k()}},_.default.createElement("span",{className:z["close-icon"]},_.default.createElement(h.default,{img:"close",color:m})),_.default.createElement("span",{className:z["sr-only"]},g.default.t("accessible-close",G))))),_.default.createElement("div",{className:S?"".concat(z["picker-container"]):"".concat(z.hidden," datetimepicker-top-row")},_.default.createElement(_.default.Fragment,null,_.default.createElement("span",{className:z["combobox-left"]},_.default.createElement(O,{value:j,onChange:function(e){i(e)},getDisplay:Y,timeChoices:ce,validate:function(){return null},icon:_.default.createElement("span",{className:"".concat(z["combobox-icon"]," ").concat(z["date-input-icon"])},_.default.createElement(h.default,{img:"calendar",color:m})),id:"".concat(B,"-date"),label:g.default.t("date",G),disableTyping:!0,timeZone:p})),_.default.createElement("span",{className:z["combobox-right"]},_.default.createElement(O,{value:j,onChange:function(e){a(e)},getDisplay:U,timeChoices:te,validate:X,icon:_.default.createElement("span",{className:"".concat(z["combobox-icon"]," ").concat(z["time-input-icon"])},_.default.createElement(h.default,{img:"time",color:m})),id:"".concat(B,"-time"),label:g.default.t("time",G),timeZone:p}))))),_.default.createElement("span",{className:S?"":z.hidden},d),_.default.createElement("div",{className:S?"datetimepicker-bottom-row-open":""})))}function F(e){var t=e.realtime,a=e.initialArriveBy,i=e.initialTimestamp,o=e.onDepartureClick,l=e.onArrivalClick,r=e.onTimeChange,s=e.onDateChange,c=e.onNowClick,d=e.embedWhenClosed,u=e.embedWhenOpen,m=e.lang,p=e.color,y=e.timeZone,g=e.fontWeights,h=e.serviceTimeRange,v=e.onOpen,x=e.onClose,w=e.openPicker;f.default.locale(m),f.default.tz.setDefault(y);var k=t?null:f.default().valueOf(),E=C(n.useState(i?1e3*i:k),2),N=E[0],T=E[1],z=C(n.useState(!0===a?"arrival":"departure"),2),O=z[0],q=z[1];n.useEffect((function(){var e=null===N&&void 0===i,t=null===N||void 0===i,n=Math.round(N/1e3)===i;!e&&(t||!n)&&T(void 0===i?null:1e3*i),!a==("arrival"===O)&&q(!0===a?"arrival":"departure")}),[i,a]);var R=b.default((function(e){if(null===e)return T(f.default().valueOf()),void r(Math.round(f.default().valueOf()/1e3),"arrival"===O);T(e),r(Math.round(e/1e3),"arrival"===O)}),10),S=b.default((function(e){if(null===e)return T(f.default().valueOf()),void s(Math.round(f.default().valueOf()/1e3),"arrival"===O);T(e),s(Math.round(e/1e3),"arrival"===O)}),10);return _.default.createElement(j,{timestamp:N,onTimeChange:R,onDateChange:S,departureOrArrival:O,onNowClick:function(){q("departure");var e=t?null:f.default().valueOf();T(e),c(Math.round(e/1e3))},onDepartureClick:function(){var e=!1,t=N;if(null===N){var n=f.default().valueOf();T(n),t=n,e=!0}"departure"!==O&&(q("departure"),e=!0),e&&o(Math.round(t/1e3))},onArrivalClick:function(){var e=!1,t=N;if(null===N){var n=f.default().valueOf();T(n),t=n,e=!0}"arrival"!==O&&(q("arrival"),e=!0),e&&l(Math.round(t/1e3))},embedWhenClosed:d,embedWhenOpen:u,lang:m,color:p,timeZone:y,onModalSubmit:function(e,t){T(e),q(t),r(e/1e3,"arrival"===t,!0)},fontWeights:g,serviceTimeRange:h,onOpen:v,onClose:x,openPicker:w})}"production"!==process.env.NODE_ENV&&(A.propTypes={value:p.default.number.isRequired,getDisplay:p.default.func.isRequired,onChange:p.default.func.isRequired,itemCount:p.default.number.isRequired,startTime:p.default.number.isRequired,id:p.default.string.isRequired,label:p.default.string.isRequired,icon:p.default.node,dateTimeCombined:p.default.bool,timeZone:p.default.string}),A.defaultProps={icon:null,dateTimeCombined:!1,timeZone:"Europe/Helsinki"},"production"!==process.env.NODE_ENV&&(D.propTypes={value:p.default.number.isRequired,getDisplay:p.default.func.isRequired,onChange:p.default.func.isRequired,id:p.default.string.isRequired,label:p.default.string.isRequired,icon:p.default.node,timeZone:p.default.string,validate:p.default.func.isRequired}),D.defaultProps={icon:null,timeZone:"Europe/Helsinki"},f.default.locale("en"),g.default.init({lng:"en",resources:{}}),Object.keys(q).forEach((function(e){return g.default.addResourceBundle(e,"translation",q[e])})),"production"!==process.env.NODE_ENV&&(P.propTypes={timeZone:p.default.string,departureOrArrival:p.default.oneOf(["departure","arrival"]).isRequired,onNowClick:p.default.func.isRequired,lang:p.default.string.isRequired,color:p.default.string,onSubmit:p.default.func.isRequired,onCancel:p.default.func.isRequired,timestamp:p.default.number.isRequired,getTimeDisplay:p.default.func.isRequired,dateSelectItemCount:p.default.number.isRequired,getDateDisplay:p.default.func.isRequired,validateTime:p.default.func.isRequired,fontWeights:p.default.shape({medium:p.default.number.isRequired}).isRequired}),P.defaultProps={color:"#007ac9",timeZone:"Europe/Helsinki"},f.default.locale("en"),g.default.init({lng:"fi",fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}}),"production"!==process.env.NODE_ENV&&(j.propTypes={timestamp:p.default.number,timeZone:p.default.string,onTimeChange:p.default.func.isRequired,onDateChange:p.default.func.isRequired,departureOrArrival:p.default.oneOf(["departure","arrival"]).isRequired,onNowClick:p.default.func.isRequired,onDepartureClick:p.default.func.isRequired,onArrivalClick:p.default.func.isRequired,embedWhenClosed:p.default.node,embedWhenOpen:p.default.node,lang:p.default.string.isRequired,color:p.default.string,onModalSubmit:p.default.func.isRequired,fontWeights:p.default.shape({medium:p.default.number.isRequired}).isRequired,serviceTimeRange:p.default.number,onOpen:p.default.func,onClose:p.default.func,openPicker:p.default.bool}),j.defaultProps={timestamp:null,embedWhenClosed:null,embedWhenOpen:null,color:"#007ac9",timeZone:"Europe/Helsinki",serviceTimeRange:30,onOpen:null,onClose:null,openPicker:void 0},"production"!==process.env.NODE_ENV&&(F.propTypes={realtime:p.default.bool,initialTimestamp:p.default.number,initialArriveBy:p.default.bool,onDepartureClick:p.default.func.isRequired,onArrivalClick:p.default.func.isRequired,onTimeChange:p.default.func.isRequired,onDateChange:p.default.func.isRequired,onNowClick:p.default.func.isRequired,embedWhenClosed:p.default.node,embedWhenOpen:p.default.node,lang:p.default.string,color:p.default.string,timeZone:p.default.string,fontWeights:p.default.shape({medium:p.default.number}),serviceTimeRange:p.default.number,onOpen:p.default.func,onClose:p.default.func,openPicker:p.default.bool}),F.defaultProps={realtime:!1,initialArriveBy:void 0,initialTimestamp:void 0,embedWhenClosed:null,embedWhenOpen:null,lang:"en",color:"#007ac9",timeZone:"Europe/Helsinki",fontWeights:{medium:500},onOpen:null,onClose:null,openPicker:void 0},e.default=F,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../../../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../../../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../../../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../../../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../../../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../src/helpers/utils.js","../src/helpers/DesktopDatetimepicker.js","../../../../node_modules/style-inject/dist/style-inject.es.js","../src/helpers/translations.js","../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../src/helpers/MobileDatepicker.js","../src/helpers/mobileDetection.js","../src/helpers/MobileTimepicker.js","../src/helpers/MobilePickerModal.js","../src/helpers/Datetimepicker.js","../src/helpers/dateTimeInputIsSupported.js","../src/index.js"],"sourcesContent":["export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","/**\n * Handle typing time and adding necessary :\n *\n * @param {string} typedValue\n *\n * @return {string}\n */\nfunction parseTypedTime(typedValue) {\n let actualValue = typedValue;\n if (\n actualValue.length === 3 &&\n actualValue.split('').every(n => Number.isInteger(Number(n)))\n ) {\n // add ':' if user types three numbers in a row\n if (Number(actualValue.slice(0, 2)) <= 23) {\n actualValue = `${actualValue.slice(0, 2)}:${actualValue[2]}`;\n } else {\n actualValue = `${actualValue[0]}:${actualValue.slice(1)}`;\n }\n }\n return actualValue;\n}\n\nexport default { parseTypedTime };\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect } from 'react';\nimport moment from 'moment-timezone';\nimport Select from 'react-select';\nimport utils from './utils';\nimport styles from './styles.scss';\n\n/**\n * Component to display a date or time input on desktop.\n *\n * @param {Object} props\n * @param {Number} props.value Currently selected time. Unix timestamp in milliseconds\n * @param {function} props.onChange This is called with new timestamp when input is changed\n * @param {function} props.getDisplay Function to get a string representation from a timestamp\n * @param {array} props.timeChoices Array of timestamps to choose from\n * @param {function} validate Function to validate input when user types something and hits enter. Parameter is input as stringstring, return number timestamp if input is valid or null if invalid.\n * @param {string} id Id prefix for labels and aria attributes. Should be unique in page\n * @param {string} label Text to show as input label\n * @param {node} icon JSX for icon to show in input\n * @param {boolean} disableTyping Set to true to disable typing in the input\n *\n * @example\n * <DesktopDatetimepicker\n * value={1590133823000}\n * onChange={timestamp => update(timestamp)}\n * getDisplay={timestamp => formatTime(timestamp)}\n * timeChoices={[1590133823000]}\n * validate=(input => validateTimeString(input))\n * id=\"timeinput\"\n * icon=\"<Icon />\"\n * disableTyping={false} // can be omitted if not true\n */\nfunction DesktopDatetimepicker({\n value,\n onChange,\n getDisplay,\n timeChoices,\n validate,\n id,\n label,\n icon,\n disableTyping,\n timeZone,\n}) {\n moment.tz.setDefault(timeZone);\n const [displayValue, changeDisplayValue] = useState(getDisplay(value));\n const [typing, setTyping] = useState(false);\n\n useEffect(() => changeDisplayValue(getDisplay(value)), [value]);\n\n // newValue is string\n const handleTimestamp = newValue => {\n const asNumber = Number(newValue);\n if (\n Number.isNaN(asNumber) ||\n !moment(asNumber).isValid() ||\n moment(asNumber).valueOf() !== asNumber\n ) {\n // TODO handle error?\n return;\n }\n onChange(asNumber);\n };\n\n const onInputChange = (newValue, { action }) => {\n if (disableTyping) {\n return;\n }\n if (action === 'input-change') {\n const validated = utils.parseTypedTime(newValue);\n changeDisplayValue(validated);\n setTyping(true);\n }\n };\n const options = timeChoices.map(t => {\n return { value: t.toString(), label: getDisplay(t) };\n });\n const closestOption = options.reduce((a, b) =>\n Math.abs(value - a.value) < Math.abs(value - b.value) ? a : b,\n );\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n return (\n <>\n <label className={styles['combobox-container']} htmlFor={inputId}>\n <span className={styles['sr-only']} id={labelId}>\n {label} {displayValue}\n </span>\n {icon}\n <Select\n aria-labelledby={labelId}\n ariaLiveMessages={{\n guidance: () => {\n return '.'; // this can't be empty for some reason\n },\n onChange: () => {\n return '';\n },\n onFilter: () => {\n return '';\n },\n onFocus: ({ context, label: itemLabel }) => {\n if (context === 'menu') {\n return itemLabel;\n }\n return '';\n },\n }}\n options={options}\n inputId={inputId}\n onChange={time => {\n if (typing) {\n const validated = validate(displayValue, value);\n if (validated !== null) {\n handleTimestamp(validated);\n setTyping(false);\n } else {\n // reset value\n changeDisplayValue(getDisplay(value));\n setTyping(false);\n }\n return;\n }\n handleTimestamp(time.value);\n }}\n components={{\n IndicatorsContainer: () => null,\n }}\n className={styles['datetimepicker-select-container']}\n classNamePrefix=\"datetimepicker-select\"\n onInputChange={onInputChange}\n inputValue={!disableTyping && displayValue}\n value={closestOption}\n filterOption={() => true}\n controlShouldRenderValue={disableTyping}\n tabSelectsValue={false}\n placeholder=\"\"\n onFocus={e => {\n if (!disableTyping) {\n e.target.select();\n }\n }}\n onBlur={() => {\n // removing focus also locks in value\n if (typing) {\n const validated = validate(displayValue, value);\n if (validated !== null) {\n handleTimestamp(validated);\n setTyping(false);\n } else {\n changeDisplayValue(getDisplay(value));\n setTyping(false);\n }\n }\n }}\n onKeyDown={e => {\n if (['ArrowDown', 'ArrowUp'].includes(e.key)) {\n setTyping(false);\n }\n }}\n isSearchable={!disableTyping}\n />\n </label>\n </>\n );\n}\nDesktopDatetimepicker.propTypes = {\n value: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n getDisplay: PropTypes.func.isRequired,\n timeChoices: PropTypes.arrayOf(PropTypes.number).isRequired,\n validate: PropTypes.func.isRequired,\n id: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n icon: PropTypes.node.isRequired,\n disableTyping: PropTypes.bool,\n timeZone: PropTypes.string,\n};\n\nDesktopDatetimepicker.defaultProps = {\n disableTyping: false,\n timeZone: 'Europe/Helsinki',\n};\n\nexport default DesktopDatetimepicker;\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","const translations = {\n de: {\n today: 'Heute',\n tomorrow: 'Morgen',\n 'accessible-close': 'Schließe die Auswahl',\n 'accessible-closed': 'Auswahl geschlossen',\n 'accessible-open': 'Öffne die Auswahl',\n 'accessible-opened': 'Auswahl geöffnet',\n 'accessible-title': 'Datum und Uhrzeitauswahl',\n arrival: 'Ankunft',\n date: 'Datum',\n departure: 'Abfahrt',\n 'departure-now': 'Abfahrt jetzt',\n 'choose-time': 'Zeit wählen',\n ready: 'Fertig',\n time: 'Zeit',\n cancel: 'Abbrechen',\n },\n en: {\n today: 'Today',\n tomorrow: 'Tomorrow',\n 'accessible-close': 'Close the picker',\n 'accessible-closed': 'Timepicker closed',\n 'accessible-open': 'Open the picker',\n 'accessible-opened': 'Timepicker opened',\n 'accessible-title': 'Date and timepicker',\n 'accessible-update-instructions':\n 'Changing time parameters will trigger a new search.',\n arrival: 'Arrival',\n date: 'Date',\n departure: 'Departure',\n 'departure-now': 'Leaving now',\n time: 'Time',\n 'choose-time': 'Choose time',\n ready: 'Ready',\n cancel: 'Cancel',\n },\n fi: {\n today: 'Tänään',\n tomorrow: 'Huomenna',\n 'accessible-close': 'Sulje valitsin',\n 'accessible-closed': 'Valitsin suljettu',\n 'accessible-open': 'Avaa valitsin',\n 'accessible-opened': 'Valitsin avattu',\n 'accessible-title': 'Aika- ja päivämäärävalitsin',\n 'accessible-update-instructions':\n 'Aikavalintojen muuttaminen laukaisee uuden haun.',\n arrival: 'Perillä',\n date: 'Päivä',\n departure: 'Lähtöaika',\n 'departure-now': 'Lähtö nyt',\n time: 'Aika',\n 'choose-time': 'Valitse aika',\n ready: 'Valmis',\n cancel: 'Peruuta',\n },\n sv: {\n today: 'I dag',\n tomorrow: 'I morgon',\n 'accessible-close': 'Stäng väljaren',\n 'accessible-closed': 'Väljaren stängde',\n 'accessible-open': 'Öppna väljaren',\n 'accessible-opened': 'Väljaren öppnade',\n 'accessible-title': 'Tid- och datumväljaren',\n 'accessible-update-instructions':\n 'Om du ändrar tiderna, startas en ny sökning automatiskt.',\n arrival: 'Anländer',\n date: 'Datum',\n departure: 'Avgångstid',\n 'departure-now': 'Avgår nu',\n time: 'Tid',\n 'choose-time': 'Välj tid',\n ready: 'Färdig',\n cancel: 'Avbryt',\n },\n};\n\nexport default translations;\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import PropTypes from 'prop-types';\nimport React, { useState, useRef, useLayoutEffect } from 'react';\nimport moment from 'moment-timezone';\nimport Autosuggest from 'react-autosuggest';\nimport styles from './styles.scss';\nimport { isAndroid } from './mobileDetection';\n\n/**\n * Component to display a date input on mobile\n */\nfunction MobileDatepicker({\n value,\n getDisplay,\n onChange,\n itemCount,\n startTime,\n id,\n label,\n icon,\n timeZone,\n}) {\n moment.tz.setDefault(timeZone);\n\n const [open, changeOpen] = useState(false);\n const scrollRef = useRef(null);\n const dateChoices = Array(itemCount)\n .fill()\n .map((_, i) => moment(startTime).add(i, 'day').valueOf());\n const minute = 1000 * 60;\n const diffs = dateChoices.map(t => value - t);\n const scrollIndex = diffs.findIndex(t => t < minute); // when time is now, the times might differ by less than one minute\n const elementHeight = 50;\n // scroll to selected time when dropdown is opened\n useLayoutEffect(() => {\n if (open && scrollRef.current) {\n scrollRef.current.scrollTop = elementHeight * scrollIndex;\n }\n }, [value, open]);\n const nativeInput = !isAndroid();\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n return (\n <>\n <label className={styles['input-container']} htmlFor={inputId}>\n <span>{icon}</span>\n <span className={styles['sr-only']} id={labelId}>\n {label}\n </span>\n {nativeInput ? (\n <>\n <select\n className={styles['mobile-input-display']}\n onChange={e => onChange(Number(e.target.value))}\n value={value}\n >\n {dateChoices.map(date => {\n return (\n <option key={date} value={date}>\n {getDisplay(date)}\n </option>\n );\n })}\n </select>\n </>\n ) : (\n <Autosuggest\n id={id}\n suggestions={dateChoices}\n getSuggestionValue={s => s.toString()}\n renderSuggestion={s => getDisplay(s)}\n onSuggestionsFetchRequested={() => null}\n shouldRenderSuggestions={() => true}\n inputProps={{\n value: getDisplay(value),\n onChange: (_, { newValue }) => {\n onChange(Number(newValue));\n },\n onFocus: () => {\n changeOpen(true);\n },\n onBlur: () => {\n changeOpen(false);\n },\n id: inputId,\n 'aria-labelledby': labelId,\n 'aria-autocomplete': 'none',\n readOnly: true,\n }}\n focusInputOnSuggestionClick={false}\n onSuggestionsClearRequested={() => null}\n renderSuggestionsContainer={({ containerProps, children }) => {\n // set refs for autosuggest library and scrollbar positioning\n const { ref, ...otherRefs } = containerProps;\n const containerRef = elem => {\n if (elem) {\n scrollRef.current = elem;\n ref(elem);\n }\n };\n return (\n <div tabIndex=\"-1\" {...otherRefs} ref={containerRef}>\n {children}\n </div>\n );\n }}\n theme={styles}\n />\n )}\n </label>\n </>\n );\n}\nMobileDatepicker.propTypes = {\n value: PropTypes.number.isRequired,\n getDisplay: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n itemCount: PropTypes.number.isRequired,\n startTime: PropTypes.number.isRequired,\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n icon: PropTypes.node,\n dateTimeCombined: PropTypes.bool,\n timeZone: PropTypes.string,\n};\n\nMobileDatepicker.defaultProps = {\n icon: null,\n dateTimeCombined: false,\n timeZone: 'Europe/Helsinki',\n};\n\nexport default MobileDatepicker;\n","/**\n * Detect if user is on a mobile device by parsing userAgent. This is not 100% reliable but close enough.\n *\n * @return {boolean}\n */\nfunction isMobile() {\n const userAgent = navigator.userAgent || navigator.vendor || window.opera;\n const mobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\n userAgent,\n );\n return mobile;\n}\n\n/**\n * Detect if user is on an android device. Not 100% reliable.\n */\nfunction isAndroid() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.indexOf('android') > -1;\n}\n\nexport { isMobile, isAndroid };\n","import PropTypes from 'prop-types';\nimport React, { useRef, useLayoutEffect, useState } from 'react';\nimport moment from 'moment-timezone';\nimport styles from './styles.scss';\nimport utils from './utils';\n\n/**\n * Component to display a time input on mobile\n */\nfunction MobileTimepicker({\n value,\n getDisplay,\n onChange,\n id,\n label,\n icon,\n timeZone,\n validate,\n}) {\n const [inputValue, changeInputValue] = useState(getDisplay(value));\n moment.tz.setDefault(timeZone);\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n const timeInputRef = useRef(null);\n\n useLayoutEffect(() => {\n if (timeInputRef.current) {\n timeInputRef.current.focus();\n }\n }, []);\n return (\n <>\n <label className={styles['input-container']} htmlFor={inputId}>\n <span>{icon}</span>\n <span className={styles['sr-only']} id={labelId}>\n {label}\n </span>\n <input\n id={inputId}\n inputMode=\"numeric\"\n type=\"text\"\n maxLength=\"6\"\n className={styles['time-input-mobile']}\n value={inputValue}\n onFocus={e => {\n e.target.setSelectionRange(0, 0); // set caret to start of input\n }}\n onChange={event => {\n let newValue = event.target.value;\n if (\n // number typed as first char => clear rest of the input\n newValue.match(/[0-9]{3}:[0-9]{2}/) &&\n newValue.slice(1) === inputValue\n ) {\n newValue = newValue.charAt(0);\n }\n if (newValue.length > 5) {\n return;\n }\n const actual = utils.parseTypedTime(newValue);\n changeInputValue(actual);\n const timestamp = validate(actual, value);\n if (timestamp) {\n onChange(timestamp);\n }\n }}\n ref={timeInputRef}\n />\n </label>\n </>\n );\n}\nMobileTimepicker.propTypes = {\n value: PropTypes.number.isRequired,\n getDisplay: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n icon: PropTypes.node,\n timeZone: PropTypes.string,\n validate: PropTypes.func.isRequired,\n};\n\nMobileTimepicker.defaultProps = {\n icon: null,\n timeZone: 'Europe/Helsinki',\n};\n\nexport default MobileTimepicker;\n","import PropTypes from 'prop-types';\nimport React, { useState } from 'react';\nimport moment from 'moment-timezone';\nimport 'moment/locale/fi';\nimport uniqueId from 'lodash/uniqueId';\nimport i18next from 'i18next';\nimport Modal from 'react-modal';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport MobileDatepicker from './MobileDatepicker';\nimport MobileTimepicker from './MobileTimepicker';\nimport translations from './translations';\nimport styles from './styles.scss';\n\nmoment.locale('en');\ni18next.init({ lng: 'en', resources: {} });\nObject.keys(translations).forEach(lang =>\n i18next.addResourceBundle(lang, 'translation', translations[lang]),\n);\n\n/**\n * TODO\n */\nfunction MobilePickerModal({\n departureOrArrival,\n onNowClick,\n lang,\n color,\n timeZone,\n onSubmit,\n onCancel,\n timestamp,\n getTimeDisplay,\n dateSelectItemCount,\n getDateDisplay,\n validateTime,\n fontWeights,\n}) {\n moment.tz.setDefault(timeZone);\n const translationSettings = { lng: lang };\n\n const [displayTimestamp, changeTimestamp] = useState(timestamp);\n\n const [departureOrArrivalCurrent, changeDepartureOrArrival] = useState(\n departureOrArrival,\n );\n\n function onArrivalClick() {\n changeDepartureOrArrival('arrival');\n }\n\n function onDepartureClick() {\n changeDepartureOrArrival('departure');\n }\n\n function onDateChange(newValue) {\n changeTimestamp(newValue);\n }\n\n function onTimeChange(newValue) {\n changeTimestamp(newValue);\n }\n\n // for input labels\n const [htmlId] = useState(uniqueId('datetimepicker-'));\n const dateSelectStartTime = moment()\n .startOf('day')\n .hour(moment(displayTimestamp).hour())\n .minute(moment(displayTimestamp).minute())\n .valueOf();\n\n return (\n <Modal\n appElement={document ? document.querySelector('#app') : undefined}\n isOpen\n className={styles['mobile-modal-content']}\n overlayClassName={styles['mobile-modal-overlay']}\n >\n <div\n style={{\n '--color': `${color}`,\n '--font-weight-medium': fontWeights.medium,\n }}\n >\n <div className={styles['top-row']}>\n <h3 className={styles['modal-title']}>\n {i18next.t('choose-time', translationSettings)}\n </h3>\n <button\n type=\"button\"\n className={styles['departure-now-button']}\n onClick={onNowClick}\n >\n {i18next.t('departure-now', translationSettings)}\n </button>\n </div>\n <div className={styles['tab-row']}>\n <label\n htmlFor={`${htmlId}-modal-departure`}\n className={`${styles['radio-tab-label']}\n ${\n styles[\n departureOrArrivalCurrent === 'departure'\n ? 'active'\n : undefined\n ]\n }`}\n >\n {i18next.t('departure', translationSettings)}\n <input\n id={`${htmlId}-modal-departure`}\n name=\"departureOrArrival\"\n type=\"radio\"\n value=\"departure\"\n className={styles['radio-textbutton']}\n onChange={() => {\n onDepartureClick();\n }}\n checked={departureOrArrivalCurrent === 'departure'}\n />\n </label>\n <label\n htmlFor={`${htmlId}-modal-arrival`}\n className={`${styles['radio-tab-label']}\n ${\n styles[\n departureOrArrivalCurrent === 'arrival'\n ? 'active'\n : undefined\n ]\n }`}\n >\n {i18next.t('arrival', translationSettings)}\n <input\n id={`${htmlId}-modal-arrival`}\n name=\"departureOrArrival\"\n type=\"radio\"\n value=\"arrival\"\n className={styles['radio-textbutton']}\n onChange={() => {\n onArrivalClick();\n }}\n checked={departureOrArrivalCurrent === 'arrival'}\n />\n </label>\n </div>\n <div className={styles['input-row']}>\n <MobileDatepicker\n value={displayTimestamp}\n getDisplay={getDateDisplay}\n onChange={onDateChange}\n itemCount={dateSelectItemCount}\n startTime={dateSelectStartTime}\n id={`${htmlId}-date`}\n label={i18next.t('date', translationSettings)}\n icon={\n <span\n className={`${styles['combobox-icon']} ${styles['date-input-icon']}`}\n >\n <Icon img=\"calendar\" color={color} />\n </span>\n }\n timeZone={timeZone}\n />\n <MobileTimepicker\n value={displayTimestamp}\n getDisplay={getTimeDisplay}\n onChange={onTimeChange}\n id={`${htmlId}-time`}\n label={i18next.t('time', translationSettings)}\n icon={\n <span\n className={`${styles['combobox-icon']} ${styles['time-input-icon']}`}\n >\n <Icon img=\"time\" color={color} />\n </span>\n }\n timeZone={timeZone}\n validate={validateTime}\n />\n </div>\n <div className={styles['buttons-row']}>\n <button\n type=\"button\"\n className={styles['ready-button']}\n onClick={() =>\n onSubmit(displayTimestamp, departureOrArrivalCurrent)\n }\n >\n {i18next.t('ready', translationSettings)}\n </button>\n <button\n type=\"button\"\n className={styles['cancel-button']}\n onClick={onCancel}\n >\n {i18next.t('cancel', translationSettings)}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n\nMobilePickerModal.propTypes = {\n timeZone: PropTypes.string,\n departureOrArrival: PropTypes.oneOf(['departure', 'arrival']).isRequired,\n onNowClick: PropTypes.func.isRequired,\n lang: PropTypes.string.isRequired,\n color: PropTypes.string,\n onSubmit: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n timestamp: PropTypes.number.isRequired,\n getTimeDisplay: PropTypes.func.isRequired,\n dateSelectItemCount: PropTypes.number.isRequired,\n getDateDisplay: PropTypes.func.isRequired,\n validateTime: PropTypes.func.isRequired,\n fontWeights: PropTypes.shape({\n medium: PropTypes.number.isRequired,\n }).isRequired,\n};\n\nMobilePickerModal.defaultProps = {\n color: '#007ac9',\n timeZone: 'Europe/Helsinki',\n};\n\nexport default MobilePickerModal;\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect, useRef, useLayoutEffect } from 'react';\nimport moment from 'moment-timezone';\nimport 'moment/locale/fi';\nimport uniqueId from 'lodash/uniqueId';\nimport i18next from 'i18next';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport DesktopDatetimepicker from './DesktopDatetimepicker';\nimport translations from './translations';\nimport styles from './styles.scss';\nimport { isMobile } from './mobileDetection';\nimport dateTimeInputIsSupported from './dateTimeInputIsSupported';\nimport MobilePickerModal from './MobilePickerModal';\n\nmoment.locale('en');\ni18next.init({\n lng: 'fi',\n fallbackLng: 'fi',\n defaultNS: 'translation',\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n});\n\n/**\n * This component renders combobox style inputs for selecting date and time. This is a controlled component, timestamp is the current value of both inputs.\n * @param {Object} props\n *\n * @param {Number} props.timestamp Currently selected time as a unix timestamp in milliseconds. Set to null to signify that \"now\" is selected. Displayed time is updated in realtime when set to null\n * @param {function} props.onTimeChange Called with new timestamp when time input changes\n * @param {function} props.onDateChange Called with new timestamp when date input changes\n * @param {'arrival'|'departure'} props.departureOrArrival Determine if input is set to choose departure or arrival time\n * @param {function} props.onNowClick Called when \"depart now\" button is clicked\n * @param {function} props.onDepartureClick Called when \"departure\" button is clicked\n * @param {function} props.onArrivalClick Called when \"arrival\" button is clicked\n * @param {node} props.embedWhenClosed JSX element to render in the corner when input is closed\n * @param {node} props.embedWhenOpen JSX element to render when input is open\n * @param {string} props.lang Language selection\n * @param {number} props.serviceTimeRange Determine number of days shown in timepicker. Optional. default is 30.\n * @param {function} props.onOpen Determine what to do when timepicker is open. Optional. no default implementation.\n * @param {function} props.onClose Determine what to do when timepicker is closed. Optional. no default implementation.\n * @param {function} props.openPicker Determine if timepicker should be open in intial render. Optional. Default is undefined.\n *\n *\n * @example\n * <Datetimepicker\n * timestamp={1590133823000}\n * onTimeChange={(newTimestamp) => update(newTimestamp)}\n * onDateChange={(newTimestamp) => update(newTimestamp)}\n * departureOrArrival={'departure'}\n * onNowClick={() => setTimestampToNull()}\n * onDepartureClick={() => departureClicked()}\n * onArrivalClick={() => arrivalClicked()}\n * embedWhenClosed={<button />}\n * lang={'en'}\n * serviceTimeRange={15}\n * />\n */\nfunction Datetimepicker({\n timestamp,\n onTimeChange,\n onDateChange,\n departureOrArrival,\n onNowClick,\n onDepartureClick,\n onArrivalClick,\n embedWhenClosed,\n embedWhenOpen,\n lang,\n color,\n timeZone,\n onModalSubmit,\n fontWeights,\n serviceTimeRange,\n onOpen,\n onClose,\n openPicker,\n}) {\n moment.tz.setDefault(timeZone);\n const [isOpen, changeOpen] = useState(openPicker || false);\n const [displayTimestamp, changeDisplayTimestamp] = useState(\n timestamp || moment().valueOf(),\n );\n // timer for updating displayTimestamp in real time\n const [timerId, setTimer] = useState(null);\n // for input labels\n const [htmlId] = useState(uniqueId('datetimepicker-'));\n const [useMobileInputs] = useState(isMobile() && dateTimeInputIsSupported());\n const openPickerRef = useRef();\n const inputRef = useRef();\n const alertRef = useRef();\n\n const translationSettings = { lng: lang };\n\n useEffect(() => {\n Object.keys(translations).forEach(language =>\n i18next.addResourceBundle(language, 'translation', translations[lang]),\n );\n }, []);\n\n useEffect(() => {\n moment.locale(lang);\n }, [lang]);\n\n const nowSelected = timestamp === null;\n useEffect(() => {\n if (nowSelected) {\n changeDisplayTimestamp(moment().valueOf());\n } else {\n // clear timer\n if (timerId) {\n clearInterval(timerId);\n setTimer(null);\n }\n changeDisplayTimestamp(timestamp);\n }\n }, [timestamp]);\n\n // set timer to update displayTimestamp when minute changes if nowSelected\n useEffect(() => {\n if (!nowSelected) {\n return undefined;\n }\n if (timerId) {\n clearInterval(timerId);\n }\n const newId = setInterval(() => {\n const now = moment().valueOf();\n const sameMinute = moment(displayTimestamp).isSame(now, 'minute');\n if (!sameMinute) {\n clearInterval(newId);\n setTimer(null);\n changeDisplayTimestamp(now);\n }\n }, 5000);\n setTimer(newId);\n return () => clearInterval(newId);\n }, [displayTimestamp]);\n\n const prevIsOpenRef = useRef();\n useEffect(() => {\n prevIsOpenRef.current = isOpen;\n });\n const prevIsOpen = prevIsOpenRef.current;\n\n useLayoutEffect(() => {\n if (!prevIsOpen === isOpen) {\n if (isOpen) {\n if (inputRef) {\n inputRef.current?.focus();\n }\n } else if (openPickerRef) {\n openPickerRef.current?.focus();\n }\n }\n });\n\n // param date is timestamp\n const getDateDisplay = date => {\n const time = moment(date);\n let formatted;\n if (time.isSame(moment(), 'day')) {\n formatted = i18next.t('today', translationSettings);\n } else if (time.isSame(moment().add(1, 'day'), 'day')) {\n formatted = i18next.t('tomorrow', translationSettings);\n } else {\n formatted = time.format('dd D.M.');\n }\n formatted = `${formatted.charAt(0).toUpperCase()}${formatted.slice(1)}`;\n return formatted;\n };\n\n // param time is timestamp\n const getTimeDisplay = time => {\n return moment(time).format('HH:mm');\n };\n\n const validateTime = (inputValue, currentTimestamp) => {\n const trimmed = inputValue.trim();\n if (trimmed.match(/^[0-9]{1,2}(\\.|:)[0-9]{2}$/) !== null) {\n const splitter = trimmed.includes('.') ? '.' : ':';\n const values = trimmed.split(splitter);\n const hours = Number(values[0]);\n const hoursValid = !Number.isNaN(hours) && hours >= 0 && hours <= 23;\n const minutes = Number(values[1]);\n const minutesValid =\n !Number.isNaN(minutes) && minutes >= 0 && minutes <= 59;\n if (!minutesValid || !hoursValid) {\n return null;\n }\n const newStamp = moment(currentTimestamp)\n .hours(hours)\n .minutes(minutes)\n .valueOf();\n return newStamp;\n }\n return null;\n };\n\n const selectedMoment = moment(displayTimestamp);\n const timeSelectStartTime = moment(displayTimestamp).startOf('day').valueOf();\n let timeChoices = [];\n const current = moment(timeSelectStartTime);\n while (current.isSame(timeSelectStartTime, 'day')) {\n timeChoices.push(current.valueOf());\n current.add(15, 'minutes');\n }\n if (timestamp === null) {\n // if time is set to now\n // add times in 5 min intervals for next 30 mins\n const fiveMinutes = 1000 * 60 * 5;\n const nextFiveMin = Math.ceil(displayTimestamp / fiveMinutes) * fiveMinutes;\n const timesToAdd = Array(7)\n .fill()\n .map((_, i) => nextFiveMin + i * fiveMinutes);\n const closestIndexAfter = timeChoices\n .map(t => displayTimestamp - t)\n .findIndex(t => t <= 0);\n timeChoices.splice(closestIndexAfter, 0, ...timesToAdd);\n timeChoices = Array.from(new Set(timeChoices)); // remove duplicates\n }\n\n const dateSelectStartTime = moment()\n .startOf('day')\n .hour(selectedMoment.hour())\n .minute(selectedMoment.minute())\n .valueOf();\n const dateChoices = Array(serviceTimeRange)\n .fill()\n .map((_, i) => moment(dateSelectStartTime).add(i, 'day').valueOf());\n\n function showScreenreaderCloseAlert() {\n if (alertRef.current) {\n alertRef.current.innerHTML = i18next.t(\n 'accessible-closed',\n translationSettings,\n );\n setTimeout(() => {\n alertRef.current.innerHTML = null;\n }, 100);\n }\n }\n\n function showScreenreaderOpenAlert() {\n if (alertRef.current) {\n alertRef.current.innerHTML = i18next.t(\n 'accessible-opened',\n translationSettings,\n );\n setTimeout(() => {\n alertRef.current.innerHTML = null;\n }, 100);\n }\n }\n\n function renderOpen() {\n if (useMobileInputs) {\n return (\n isOpen && (\n <MobilePickerModal\n departureOrArrival={departureOrArrival}\n onNowClick={() => {\n changeOpen(false);\n showScreenreaderCloseAlert();\n onNowClick();\n }}\n lang={lang}\n color={color}\n onSubmit={(newTimestamp, newDepartureOrArrival) => {\n onModalSubmit(newTimestamp, newDepartureOrArrival);\n changeOpen(false);\n showScreenreaderCloseAlert();\n }}\n onCancel={() => {\n changeOpen(false);\n showScreenreaderCloseAlert();\n if (onClose) {\n onClose();\n }\n }}\n getTimeDisplay={getTimeDisplay}\n timeZone={timeZone}\n timestamp={displayTimestamp}\n getDateDisplay={getDateDisplay}\n dateSelectItemCount={serviceTimeRange}\n getDisplay={getTimeDisplay}\n validateTime={validateTime}\n fontWeights={fontWeights}\n />\n )\n );\n }\n\n return (\n <>\n <div\n className={`${styles['datetimepicker-open-container']} ${\n !isOpen ? styles.hidden : ''\n }`}\n >\n <div\n className={\n isOpen\n ? `${styles['top-row-container']} datetimepicker-top-row`\n : `${styles.hidden} datetimepicker-top-row`\n }\n >\n {' '}\n <span role=\"alert\" className={styles['sr-only']} ref={alertRef} />\n <span />\n {/* This empty span prevents a weird focus bug on chrome */}\n <span className={styles['departure-or-arrival-container']}>\n <label\n htmlFor={`${htmlId}-departure`}\n className={`${styles['radio-textbutton-label']}\n ${\n styles[\n departureOrArrival === 'departure' ? 'active' : undefined\n ]\n }`}\n >\n {i18next.t('departure', translationSettings)}\n <input\n id={`${htmlId}-departure`}\n name=\"departureOrArrival\"\n type=\"radio\"\n value=\"departure\"\n className={styles['radio-textbutton']}\n onChange={() => {\n onDepartureClick();\n }}\n checked={departureOrArrival === 'departure'}\n />\n </label>\n <label\n htmlFor={`${htmlId}-arrival`}\n className={`${styles['radio-textbutton-label']}\n ${\n styles[\n departureOrArrival === 'arrival' ? 'active' : undefined\n ]\n }`}\n >\n {i18next.t('arrival', translationSettings)}\n <input\n id={`${htmlId}-arrival`}\n name=\"departureOrArrival\"\n type=\"radio\"\n value=\"arrival\"\n className={styles['radio-textbutton']}\n onChange={() => {\n onArrivalClick();\n }}\n checked={departureOrArrival === 'arrival'}\n />\n </label>\n </span>\n <button\n id={`${htmlId}-now`}\n type=\"button\"\n className={styles['departure-now-button']}\n onClick={() => {\n changeOpen(false);\n showScreenreaderCloseAlert();\n if (onClose) {\n onClose();\n }\n onNowClick();\n }}\n ref={inputRef}\n >\n {i18next.t('departure-now', translationSettings)}\n </button>\n <span className={styles['right-edge']}>\n <button\n type=\"button\"\n className={styles['close-button']}\n aria-controls={`${htmlId}-root`}\n aria-expanded=\"true\"\n onClick={() => {\n changeOpen(false);\n showScreenreaderCloseAlert();\n if (onClose) {\n onClose();\n }\n }}\n >\n <span className={styles['close-icon']}>\n <Icon img=\"close\" color={color} />\n </span>\n <span className={styles['sr-only']}>\n {i18next.t('accessible-close', translationSettings)}\n </span>\n </button>\n </span>\n </div>\n <div\n className={\n isOpen\n ? `${styles['picker-container']}`\n : `${styles.hidden} datetimepicker-top-row`\n }\n >\n <>\n <span className={styles['combobox-left']}>\n <DesktopDatetimepicker\n value={displayTimestamp}\n onChange={newValue => {\n onDateChange(newValue);\n }}\n getDisplay={getDateDisplay}\n timeChoices={dateChoices}\n validate={() => null}\n icon={\n <span\n className={`${styles['combobox-icon']} ${styles['date-input-icon']}`}\n >\n <Icon img=\"calendar\" color={color} />\n </span>\n }\n id={`${htmlId}-date`}\n label={i18next.t('date', translationSettings)}\n disableTyping\n timeZone={timeZone}\n />\n </span>\n <span className={styles['combobox-right']}>\n <DesktopDatetimepicker\n value={displayTimestamp}\n onChange={newValue => {\n onTimeChange(newValue);\n }}\n getDisplay={getTimeDisplay}\n timeChoices={timeChoices}\n validate={validateTime}\n icon={\n <span\n className={`${styles['combobox-icon']} ${styles['time-input-icon']}`}\n >\n <Icon img=\"time\" color={color} />\n </span>\n }\n id={`${htmlId}-time`}\n label={i18next.t('time', translationSettings)}\n timeZone={timeZone}\n />\n </span>\n </>\n </div>\n </div>\n <span className={isOpen ? '' : styles.hidden}>{embedWhenOpen}</span>\n <div className={isOpen ? 'datetimepicker-bottom-row-open' : ''} />\n </>\n );\n }\n\n return (\n <fieldset\n className={styles['dt-datetimepicker']}\n id={`${htmlId}-root`}\n style={{\n '--color': `${color}`,\n '--font-weight-medium': fontWeights.medium,\n }}\n >\n <legend className={styles['sr-only']}>\n {i18next.t('accessible-title', translationSettings)}\n </legend>\n <span className={styles['sr-only']}>\n {i18next.t('accessible-update-instructions', translationSettings)}\n </span>\n <>\n <div\n className={\n !isOpen\n ? `${styles['top-row-container']} ${styles.closed} datetimepicker-top-row`\n : `${styles.hidden} datetimepicker-top-row`\n }\n >\n <label className={styles['label-open']} htmlFor={`${htmlId}-open`}>\n <span className={styles['time-icon']}>\n <Icon img=\"time\" color={color} />\n </span>\n <span className={styles['sr-only']}>\n {i18next.t('accessible-open', translationSettings)}\n </span>\n <span role=\"alert\" className={styles['sr-only']} ref={alertRef} />\n <button\n id={`${htmlId}-open`}\n type=\"button\"\n className={`${styles.textbutton} ${styles.active} ${styles['open-button']}`}\n aria-controls={`${htmlId}-root`}\n aria-expanded=\"false\"\n onClick={() => {\n changeOpen(true);\n showScreenreaderOpenAlert();\n if (onOpen) {\n onOpen();\n }\n }}\n ref={openPickerRef}\n >\n <span>\n {nowSelected && departureOrArrival === 'departure' ? (\n i18next.t('departure-now', translationSettings)\n ) : (\n <>\n {i18next.t(\n departureOrArrival === 'departure'\n ? 'departure'\n : 'arrival',\n translationSettings,\n )}\n {` ${\n moment().isSame(moment(displayTimestamp), 'day')\n ? ''\n : getDateDisplay(displayTimestamp).toLowerCase()\n } ${getTimeDisplay(displayTimestamp)}`}\n </>\n )}\n </span>\n <span className={styles['dropdown-icon']}>\n <Icon img=\"arrow-dropdown\" color={color} />\n </span>\n </button>\n </label>\n <span className={styles['right-edge']}>{embedWhenClosed}</span>\n </div>\n <div />\n </>\n {renderOpen()}\n </fieldset>\n );\n}\n\nDatetimepicker.propTypes = {\n timestamp: PropTypes.number,\n timeZone: PropTypes.string,\n onTimeChange: PropTypes.func.isRequired,\n onDateChange: PropTypes.func.isRequired,\n departureOrArrival: PropTypes.oneOf(['departure', 'arrival']).isRequired,\n onNowClick: PropTypes.func.isRequired,\n onDepartureClick: PropTypes.func.isRequired,\n onArrivalClick: PropTypes.func.isRequired,\n embedWhenClosed: PropTypes.node,\n embedWhenOpen: PropTypes.node,\n lang: PropTypes.string.isRequired,\n color: PropTypes.string,\n onModalSubmit: PropTypes.func.isRequired,\n fontWeights: PropTypes.shape({\n medium: PropTypes.number.isRequired,\n }).isRequired,\n serviceTimeRange: PropTypes.number,\n onOpen: PropTypes.func,\n onClose: PropTypes.func,\n openPicker: PropTypes.bool,\n};\n\nDatetimepicker.defaultProps = {\n timestamp: null,\n embedWhenClosed: null,\n embedWhenOpen: null,\n color: '#007ac9',\n timeZone: 'Europe/Helsinki',\n serviceTimeRange: 30,\n onOpen: null,\n onClose: null,\n openPicker: undefined,\n};\n\nexport default Datetimepicker;\n","/**\n * Detect if input type=\"date\" and type=\"time\" are supported in by the browser\n *\n * @return {boolean}\n */\nfunction dateTimeInputIsSupported() {\n if (typeof window === 'undefined' || window === null) {\n return false;\n }\n const elem = document.createElement('input');\n elem.type = 'date';\n if (elem.type !== 'date') {\n return false;\n }\n elem.type = 'time';\n if (elem.type !== 'time') {\n return false;\n }\n return true;\n}\n\nexport default dateTimeInputIsSupported;\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect } from 'react';\nimport moment from 'moment-timezone';\nimport debounce from 'lodash/debounce';\nimport Datetimepicker from './helpers/Datetimepicker';\n\n/**\n * This component renders an input to choose a date and time. Renders separate input fields for date and time selection. Values for timestamp and arriveBy correspond to Digitransit query params time and arriveBy. This component will display a native date input on mobile and a custom one for desktop. Mobile detection is done by parsing user agent.\n *\n * @alias Datetimepicker\n *\n * @param {Object} props\n *\n * @param {boolean} props.realtime Determine if selected time should be updated in realtime when 'now' is selected.\n * @param {Number} props.initialTimestamp Initial value for selected time. Unix timestamp in seconds. Updating this will change timepicker value but the correct value is kept in component state even if this is not updated.\n * @param {boolean} props.initialArriveBy Initial value for arriveBy. Determines if picker is in arrival mode (true) or departure mode (false). Correct value is kept in component state even if this is not updated. Changing this will also trigger change in the component.\n * @param {function} props.onTimeChange Called with (time, arriveBy) when time input changes. time is number timestamp in seconds, arriveBy is boolean\n * @param {function} props.onDateChange Called with (time, arriveBy) when date input changes. time is number timestamp in seconds, arriveBy is boolean\n * @param {function} props.onNowClick Called when \"depart now\" button is clicked. time is current input value in seconds\n * @param {function} props.onDepartureClick Called with (time) when \"departure\" button is clicked. time is current input value in seconds\n * @param {function} props.onArrivalClick Called with (time) when \"arrival\" button is clicked. time is current input value in seconds\n * @param {node} props.embedWhenClosed JSX element to render in the corner when input is closed\n * @param {node} props.embedWhenOpen JSX element to render when input is open\n * @param {string} props.lang Language selection. Default 'en'\n * @param {number} props.serviceTimeRange Determine number of days shown in timepicker. Optional. default is 30.\n * @param {function} props.onOpen Determine what to do when timepicker is open. Optional. no default implementation.\n * @param {function} props.onClose Determine what to do when timepicker is closed. Optional. no default implementation.\n * @param {function} props.openPicker Determine if timepicker should be open in intial render. Optional. Default is undefined.\n * @example\n * <Datetimepicker\n * realtime={true}\n * initialTimestamp={1590133823}\n * initialArriveBy={false}\n * onTimeChange={(time, arriveBy) => changeUrl(time, arriveBy)}\n * onDateChange={(time, arriveBy) => changeUrl(time, arriveBy)}\n * onNowClick={(time) => changeUrl(undefined, undefined)}\n * onDepartureClick={(time) => changeUrl(time, 'true')}\n * onArrivalClick={(time) => changeUrl(time, undefined)}\n * embedWhenClosed={<button />}\n * lang={'en'}\n * serviceTimeRange={15}\n * />\n */\nfunction DatetimepickerStateContainer({\n realtime,\n initialArriveBy,\n initialTimestamp,\n onDepartureClick,\n onArrivalClick,\n onTimeChange,\n onDateChange,\n onNowClick,\n embedWhenClosed,\n embedWhenOpen,\n lang,\n color,\n timeZone,\n fontWeights,\n serviceTimeRange,\n onOpen,\n onClose,\n openPicker,\n}) {\n moment.locale(lang);\n moment.tz.setDefault(timeZone);\n const initialNow = realtime ? null : moment().valueOf();\n const [timestamp, changeTimestampState] = useState(\n initialTimestamp ? initialTimestamp * 1000 : initialNow,\n );\n const [departureOrArrival, changeDepartureOrArrival] = useState(\n initialArriveBy === true ? 'arrival' : 'departure',\n );\n\n // update state if props change\n useEffect(() => {\n const bothNull = timestamp === null && initialTimestamp === undefined;\n const oneNull = timestamp === null || initialTimestamp === undefined;\n const sameTime = Math.round(timestamp / 1000) === initialTimestamp;\n const timestampChanged = !bothNull && (oneNull || !sameTime);\n if (timestampChanged) {\n if (initialTimestamp === undefined) {\n changeTimestampState(null);\n } else {\n changeTimestampState(initialTimestamp * 1000);\n }\n }\n if (!initialArriveBy === (departureOrArrival === 'arrival')) {\n changeDepartureOrArrival(\n initialArriveBy === true ? 'arrival' : 'departure',\n );\n }\n }, [initialTimestamp, initialArriveBy]);\n\n const timeChanged = debounce(newTime => {\n if (newTime === null) {\n changeTimestampState(moment().valueOf());\n onTimeChange(\n Math.round(moment().valueOf() / 1000),\n departureOrArrival === 'arrival',\n );\n return;\n }\n changeTimestampState(newTime);\n onTimeChange(Math.round(newTime / 1000), departureOrArrival === 'arrival');\n }, 10);\n\n const dateChanged = debounce(newDate => {\n if (newDate === null) {\n changeTimestampState(moment().valueOf());\n onDateChange(\n Math.round(moment().valueOf() / 1000),\n departureOrArrival === 'arrival',\n );\n return;\n }\n changeTimestampState(newDate);\n onDateChange(Math.round(newDate / 1000), departureOrArrival === 'arrival');\n }, 10);\n\n const nowClicked = () => {\n changeDepartureOrArrival('departure');\n const newTimestamp = realtime ? null : moment().valueOf();\n changeTimestampState(newTimestamp);\n onNowClick(Math.round(newTimestamp / 1000));\n };\n\n const departureClicked = () => {\n let changed = false;\n let newTime = timestamp;\n if (timestamp === null) {\n const now = moment().valueOf();\n changeTimestampState(now);\n newTime = now;\n changed = true;\n }\n if (departureOrArrival !== 'departure') {\n changeDepartureOrArrival('departure');\n changed = true;\n }\n if (changed) {\n onDepartureClick(Math.round(newTime / 1000));\n }\n };\n\n const arrivalClicked = () => {\n let changed = false;\n let newTime = timestamp;\n if (timestamp === null) {\n const now = moment().valueOf();\n changeTimestampState(now);\n newTime = now;\n changed = true;\n }\n if (departureOrArrival !== 'arrival') {\n changeDepartureOrArrival('arrival');\n changed = true;\n }\n if (changed) {\n onArrivalClick(Math.round(newTime / 1000));\n }\n };\n const onModalSubmit = (time, mode) => {\n changeTimestampState(time);\n changeDepartureOrArrival(mode);\n onTimeChange(time / 1000, mode === 'arrival', true);\n };\n\n return (\n <Datetimepicker\n timestamp={timestamp}\n onTimeChange={timeChanged}\n onDateChange={dateChanged}\n departureOrArrival={departureOrArrival}\n onNowClick={nowClicked}\n onDepartureClick={departureClicked}\n onArrivalClick={arrivalClicked}\n embedWhenClosed={embedWhenClosed}\n embedWhenOpen={embedWhenOpen}\n lang={lang}\n color={color}\n timeZone={timeZone}\n onModalSubmit={onModalSubmit}\n fontWeights={fontWeights}\n serviceTimeRange={serviceTimeRange}\n onOpen={onOpen}\n onClose={onClose}\n openPicker={openPicker}\n />\n );\n}\n\nDatetimepickerStateContainer.propTypes = {\n realtime: PropTypes.bool,\n initialTimestamp: PropTypes.number,\n initialArriveBy: PropTypes.bool,\n onDepartureClick: PropTypes.func.isRequired,\n onArrivalClick: PropTypes.func.isRequired,\n onTimeChange: PropTypes.func.isRequired,\n onDateChange: PropTypes.func.isRequired,\n onNowClick: PropTypes.func.isRequired,\n embedWhenClosed: PropTypes.node,\n embedWhenOpen: PropTypes.node,\n lang: PropTypes.string,\n color: PropTypes.string,\n timeZone: PropTypes.string,\n fontWeights: PropTypes.shape({\n medium: PropTypes.number,\n }),\n serviceTimeRange: PropTypes.number,\n onOpen: PropTypes.func,\n onClose: PropTypes.func,\n openPicker: PropTypes.bool,\n};\n\nDatetimepickerStateContainer.defaultProps = {\n realtime: false,\n initialArriveBy: undefined,\n initialTimestamp: undefined,\n embedWhenClosed: null,\n embedWhenOpen: null,\n lang: 'en',\n color: '#007ac9',\n timeZone: 'Europe/Helsinki',\n fontWeights: {\n medium: 500,\n },\n onOpen: null,\n onClose: null,\n openPicker: undefined,\n};\n\nexport default DatetimepickerStateContainer;\n"],"names":["_arrayLikeToArray","arr","len","length","i","arr2","Array","_unsupportedIterableToArray","o","minLen","arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","from","test","_slicedToArray","isArray","arrayWithHoles","Symbol","iterator","_arr","_n","_d","_e","undefined","_s","_i","next","done","push","value","err","iterableToArrayLimit","unsupportedIterableToArray","TypeError","nonIterableRest","_toConsumableArray","arrayWithoutHoles","iter","iterableToArray","nonIterableSpread","parseTypedTime","typedValue","actualValue","split","every","Number","isInteger","DesktopDatetimepicker","onChange","getDisplay","timeChoices","validate","id","label","icon","disableTyping","timeZone","moment","tz","setDefault","useState","displayValue","changeDisplayValue","typing","setTyping","useEffect","handleTimestamp","newValue","asNumber","isNaN","isValid","valueOf","options","map","t","closestOption","reduce","a","b","Math","abs","inputId","labelId","React","className","styles","htmlFor","Select","ariaLiveMessages","guidance","onFilter","onFocus","context","itemLabel","time","validated","components","IndicatorsContainer","classNamePrefix","onInputChange","action","utils","inputValue","filterOption","controlShouldRenderValue","tabSelectsValue","placeholder","e","target","select","onBlur","onKeyDown","includes","key","isSearchable","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","process","propTypes","PropTypes","number","isRequired","func","arrayOf","string","node","bool","defaultProps","translations","de","today","tomorrow","arrival","date","departure","ready","cancel","en","fi","sv","_objectWithoutProperties","source","excluded","sourceKeys","keys","indexOf","objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","MobileDatepicker","itemCount","startTime","open","changeOpen","scrollRef","useRef","dateChoices","fill","_","add","scrollIndex","findIndex","useLayoutEffect","current","scrollTop","nativeInput","navigator","userAgent","toLowerCase","Autosuggest","suggestions","getSuggestionValue","s","renderSuggestion","onSuggestionsFetchRequested","shouldRenderSuggestions","inputProps","readOnly","focusInputOnSuggestionClick","onSuggestionsClearRequested","renderSuggestionsContainer","containerProps","children","otherRefs","tabIndex","elem","theme","MobileTimepicker","changeInputValue","timeInputRef","focus","inputMode","maxLength","setSelectionRange","event","match","charAt","actual","timestamp","MobilePickerModal","departureOrArrival","onNowClick","lang","color","onSubmit","onCancel","getTimeDisplay","dateSelectItemCount","getDateDisplay","validateTime","fontWeights","translationSettings","lng","displayTimestamp","changeTimestamp","departureOrArrivalCurrent","changeDepartureOrArrival","htmlId","uniqueId","dateSelectStartTime","startOf","hour","minute","Modal","appElement","querySelector","isOpen","overlayClassName","medium","i18next","onClick","checked","Icon","img","Datetimepicker","onTimeChange","onDateChange","onDepartureClick","onArrivalClick","embedWhenClosed","embedWhenOpen","onModalSubmit","serviceTimeRange","onOpen","onClose","openPicker","changeDisplayTimestamp","timerId","setTimer","useMobileInputs","vendor","window","opera","dateTimeInputIsSupported","openPickerRef","inputRef","alertRef","forEach","language","addResourceBundle","locale","nowSelected","clearInterval","newId","setInterval","now","isSame","prevIsOpenRef","prevIsOpen","formatted","format","toUpperCase","currentTimestamp","trimmed","trim","splitter","values","hours","hoursValid","minutes","selectedMoment","timeSelectStartTime","fiveMinutes","nextFiveMin","ceil","timesToAdd","closestIndexAfter","splice","Set","showScreenreaderCloseAlert","innerHTML","setTimeout","hidden","closed","role","textbutton","active","newTimestamp","newDepartureOrArrival","DatetimepickerStateContainer","realtime","initialArriveBy","initialTimestamp","initialNow","changeTimestampState","bothNull","oneNull","sameTime","round","timeChanged","debounce","newTime","dateChanged","newDate","changed","mode","dateTimeCombined","init","resources","oneOf","shape","fallbackLng","defaultNS","interpolation","escapeValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../../../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../../../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../../../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../../../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../../../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../src/helpers/utils.js","../src/helpers/DesktopDatetimepicker.js","../../../../node_modules/style-inject/dist/style-inject.es.js","../src/helpers/translations.js","../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../src/helpers/MobileDatepicker.js","../src/helpers/mobileDetection.js","../src/helpers/MobileTimepicker.js","../src/helpers/MobilePickerModal.js","../src/helpers/Datetimepicker.js","../src/helpers/dateTimeInputIsSupported.js","../src/index.js"],"sourcesContent":["export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","/**\n * Handle typing time and adding necessary :\n *\n * @param {string} typedValue\n *\n * @return {string}\n */\nfunction parseTypedTime(typedValue) {\n let actualValue = typedValue;\n if (\n actualValue.length === 3 &&\n actualValue.split('').every(n => Number.isInteger(Number(n)))\n ) {\n // add ':' if user types three numbers in a row\n if (Number(actualValue.slice(0, 2)) <= 23) {\n actualValue = `${actualValue.slice(0, 2)}:${actualValue[2]}`;\n } else {\n actualValue = `${actualValue[0]}:${actualValue.slice(1)}`;\n }\n }\n return actualValue;\n}\n\nexport default { parseTypedTime };\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect } from 'react';\nimport moment from 'moment-timezone';\nimport Select from 'react-select';\nimport utils from './utils';\nimport styles from './styles.scss';\n\n/**\n * Component to display a date or time input on desktop.\n *\n * @param {Object} props\n * @param {Number} props.value Currently selected time. Unix timestamp in milliseconds\n * @param {function} props.onChange This is called with new timestamp when input is changed\n * @param {function} props.getDisplay Function to get a string representation from a timestamp\n * @param {array} props.timeChoices Array of timestamps to choose from\n * @param {function} validate Function to validate input when user types something and hits enter. Parameter is input as stringstring, return number timestamp if input is valid or null if invalid.\n * @param {string} id Id prefix for labels and aria attributes. Should be unique in page\n * @param {string} label Text to show as input label\n * @param {node} icon JSX for icon to show in input\n * @param {boolean} disableTyping Set to true to disable typing in the input\n *\n * @example\n * <DesktopDatetimepicker\n * value={1590133823000}\n * onChange={timestamp => update(timestamp)}\n * getDisplay={timestamp => formatTime(timestamp)}\n * timeChoices={[1590133823000]}\n * validate=(input => validateTimeString(input))\n * id=\"timeinput\"\n * icon=\"<Icon />\"\n * disableTyping={false} // can be omitted if not true\n */\nfunction DesktopDatetimepicker({\n value,\n onChange,\n getDisplay,\n timeChoices,\n validate,\n id,\n label,\n icon,\n disableTyping,\n timeZone,\n}) {\n moment.tz.setDefault(timeZone);\n const [displayValue, changeDisplayValue] = useState(getDisplay(value));\n const [typing, setTyping] = useState(false);\n\n useEffect(() => changeDisplayValue(getDisplay(value)), [value]);\n\n // newValue is string\n const handleTimestamp = newValue => {\n const asNumber = Number(newValue);\n if (\n Number.isNaN(asNumber) ||\n !moment(asNumber).isValid() ||\n moment(asNumber).valueOf() !== asNumber\n ) {\n // TODO handle error?\n return;\n }\n onChange(asNumber);\n };\n\n const onInputChange = (newValue, { action }) => {\n if (disableTyping) {\n return;\n }\n if (action === 'input-change') {\n const validated = utils.parseTypedTime(newValue);\n changeDisplayValue(validated);\n setTyping(true);\n }\n };\n const options = timeChoices.map(t => {\n return { value: t.toString(), label: getDisplay(t) };\n });\n const closestOption = options.reduce((a, b) =>\n Math.abs(value - a.value) < Math.abs(value - b.value) ? a : b,\n );\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n return (\n <>\n <label className={styles['combobox-container']} htmlFor={inputId}>\n <span className={styles['sr-only']} id={labelId}>\n {label} {displayValue}\n </span>\n {icon}\n <Select\n aria-labelledby={labelId}\n ariaLiveMessages={{\n guidance: () => {\n return '.'; // this can't be empty for some reason\n },\n onChange: () => {\n return '';\n },\n onFilter: () => {\n return '';\n },\n onFocus: ({ context, label: itemLabel }) => {\n if (context === 'menu') {\n return itemLabel;\n }\n return '';\n },\n }}\n options={options}\n inputId={inputId}\n onChange={time => {\n if (typing) {\n const validated = validate(displayValue, value);\n if (validated !== null) {\n handleTimestamp(validated);\n setTyping(false);\n } else {\n // reset value\n changeDisplayValue(getDisplay(value));\n setTyping(false);\n }\n return;\n }\n handleTimestamp(time.value);\n }}\n components={{\n IndicatorsContainer: () => null,\n }}\n className={styles['datetimepicker-select-container']}\n classNamePrefix=\"datetimepicker-select\"\n onInputChange={onInputChange}\n inputValue={!disableTyping && displayValue}\n value={closestOption}\n filterOption={() => true}\n controlShouldRenderValue={disableTyping}\n tabSelectsValue={false}\n placeholder=\"\"\n onFocus={e => {\n if (!disableTyping) {\n e.target.select();\n }\n }}\n onBlur={() => {\n // removing focus also locks in value\n if (typing) {\n const validated = validate(displayValue, value);\n if (validated !== null) {\n handleTimestamp(validated);\n setTyping(false);\n } else {\n changeDisplayValue(getDisplay(value));\n setTyping(false);\n }\n }\n }}\n onKeyDown={e => {\n if (['ArrowDown', 'ArrowUp'].includes(e.key)) {\n setTyping(false);\n }\n }}\n isSearchable={!disableTyping}\n />\n </label>\n </>\n );\n}\nDesktopDatetimepicker.propTypes = {\n value: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n getDisplay: PropTypes.func.isRequired,\n timeChoices: PropTypes.arrayOf(PropTypes.number).isRequired,\n validate: PropTypes.func.isRequired,\n id: PropTypes.string.isRequired,\n label: PropTypes.node.isRequired,\n icon: PropTypes.node.isRequired,\n disableTyping: PropTypes.bool,\n timeZone: PropTypes.string,\n};\n\nDesktopDatetimepicker.defaultProps = {\n disableTyping: false,\n timeZone: 'Europe/Helsinki',\n};\n\nexport default DesktopDatetimepicker;\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","const translations = {\n de: {\n today: 'Heute',\n tomorrow: 'Morgen',\n 'accessible-close': 'Schließe die Auswahl',\n 'accessible-closed': 'Auswahl geschlossen',\n 'accessible-open': 'Öffne die Auswahl',\n 'accessible-opened': 'Auswahl geöffnet',\n 'accessible-title': 'Datum und Uhrzeitauswahl',\n arrival: 'Ankunft',\n date: 'Datum',\n departure: 'Abfahrt',\n 'departure-now': 'Abfahrt jetzt',\n 'choose-time': 'Zeit wählen',\n ready: 'Fertig',\n time: 'Zeit',\n cancel: 'Abbrechen',\n },\n en: {\n today: 'Today',\n tomorrow: 'Tomorrow',\n 'accessible-close': 'Close the picker',\n 'accessible-closed': 'Timepicker closed',\n 'accessible-open': 'Open the picker',\n 'accessible-opened': 'Timepicker opened',\n 'accessible-title': 'Date and timepicker',\n 'accessible-update-instructions':\n 'Changing time parameters will trigger a new search.',\n arrival: 'Arrival',\n date: 'Date',\n departure: 'Departure',\n 'departure-now': 'Leaving now',\n time: 'Time',\n 'choose-time': 'Choose time',\n ready: 'Ready',\n cancel: 'Cancel',\n },\n fi: {\n today: 'Tänään',\n tomorrow: 'Huomenna',\n 'accessible-close': 'Sulje valitsin',\n 'accessible-closed': 'Valitsin suljettu',\n 'accessible-open': 'Avaa valitsin',\n 'accessible-opened': 'Valitsin avattu',\n 'accessible-title': 'Aika- ja päivämäärävalitsin',\n 'accessible-update-instructions':\n 'Aikavalintojen muuttaminen laukaisee uuden haun.',\n arrival: 'Perillä',\n date: 'Päivä',\n departure: 'Lähtöaika',\n 'departure-now': 'Lähtö nyt',\n time: 'Aika',\n 'choose-time': 'Valitse aika',\n ready: 'Valmis',\n cancel: 'Peruuta',\n },\n sv: {\n today: 'I dag',\n tomorrow: 'I morgon',\n 'accessible-close': 'Stäng väljaren',\n 'accessible-closed': 'Väljaren stängde',\n 'accessible-open': 'Öppna väljaren',\n 'accessible-opened': 'Väljaren öppnade',\n 'accessible-title': 'Tid- och datumväljaren',\n 'accessible-update-instructions':\n 'Om du ändrar tiderna, startas en ny sökning automatiskt.',\n arrival: 'Anländer',\n date: 'Datum',\n departure: 'Avgångstid',\n 'departure-now': 'Avgår nu',\n time: 'Tid',\n 'choose-time': 'Välj tid',\n ready: 'Färdig',\n cancel: 'Avbryt',\n },\n};\n\nexport default translations;\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import PropTypes from 'prop-types';\nimport React, { useState, useRef, useLayoutEffect } from 'react';\nimport moment from 'moment-timezone';\nimport Autosuggest from 'react-autosuggest';\nimport styles from './styles.scss';\nimport { isAndroid } from './mobileDetection';\n\n/**\n * Component to display a date input on mobile\n */\nfunction MobileDatepicker({\n value,\n getDisplay,\n onChange,\n itemCount,\n startTime,\n id,\n label,\n icon,\n timeZone,\n}) {\n moment.tz.setDefault(timeZone);\n\n const [open, changeOpen] = useState(false);\n const scrollRef = useRef(null);\n const dateChoices = Array(itemCount)\n .fill()\n .map((_, i) => moment(startTime).add(i, 'day').valueOf());\n const minute = 1000 * 60;\n const diffs = dateChoices.map(t => value - t);\n const scrollIndex = diffs.findIndex(t => t < minute); // when time is now, the times might differ by less than one minute\n const elementHeight = 50;\n // scroll to selected time when dropdown is opened\n useLayoutEffect(() => {\n if (open && scrollRef.current) {\n scrollRef.current.scrollTop = elementHeight * scrollIndex;\n }\n }, [value, open]);\n const nativeInput = !isAndroid();\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n return (\n <>\n <label className={styles['input-container']} htmlFor={inputId}>\n <span>{icon}</span>\n <span className={styles['sr-only']} id={labelId}>\n {label}\n </span>\n {nativeInput ? (\n <>\n <select\n className={styles['mobile-input-display']}\n onChange={e => onChange(Number(e.target.value))}\n value={value}\n >\n {dateChoices.map(date => {\n return (\n <option key={date} value={date}>\n {getDisplay(date)}\n </option>\n );\n })}\n </select>\n </>\n ) : (\n <Autosuggest\n id={id}\n suggestions={dateChoices}\n getSuggestionValue={s => s.toString()}\n renderSuggestion={s => getDisplay(s)}\n onSuggestionsFetchRequested={() => null}\n shouldRenderSuggestions={() => true}\n inputProps={{\n value: getDisplay(value),\n onChange: (_, { newValue }) => {\n onChange(Number(newValue));\n },\n onFocus: () => {\n changeOpen(true);\n },\n onBlur: () => {\n changeOpen(false);\n },\n id: inputId,\n 'aria-labelledby': labelId,\n 'aria-autocomplete': 'none',\n readOnly: true,\n }}\n focusInputOnSuggestionClick={false}\n onSuggestionsClearRequested={() => null}\n renderSuggestionsContainer={({ containerProps, children }) => {\n // set refs for autosuggest library and scrollbar positioning\n const { ref, ...otherRefs } = containerProps;\n const containerRef = elem => {\n if (elem) {\n scrollRef.current = elem;\n ref(elem);\n }\n };\n return (\n <div tabIndex=\"-1\" {...otherRefs} ref={containerRef}>\n {children}\n </div>\n );\n }}\n theme={styles}\n />\n )}\n </label>\n </>\n );\n}\nMobileDatepicker.propTypes = {\n value: PropTypes.number.isRequired,\n getDisplay: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n itemCount: PropTypes.number.isRequired,\n startTime: PropTypes.number.isRequired,\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n icon: PropTypes.node,\n dateTimeCombined: PropTypes.bool,\n timeZone: PropTypes.string,\n};\n\nMobileDatepicker.defaultProps = {\n icon: null,\n dateTimeCombined: false,\n timeZone: 'Europe/Helsinki',\n};\n\nexport default MobileDatepicker;\n","/**\n * Detect if user is on a mobile device by parsing userAgent. This is not 100% reliable but close enough.\n *\n * @return {boolean}\n */\nfunction isMobile() {\n const userAgent = navigator.userAgent || navigator.vendor || window.opera;\n const mobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\n userAgent,\n );\n return mobile;\n}\n\n/**\n * Detect if user is on an android device. Not 100% reliable.\n */\nfunction isAndroid() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.indexOf('android') > -1;\n}\n\nexport { isMobile, isAndroid };\n","import PropTypes from 'prop-types';\nimport React, { useRef, useLayoutEffect, useState } from 'react';\nimport moment from 'moment-timezone';\nimport styles from './styles.scss';\nimport utils from './utils';\n\n/**\n * Component to display a time input on mobile\n */\nfunction MobileTimepicker({\n value,\n getDisplay,\n onChange,\n id,\n label,\n icon,\n timeZone,\n validate,\n}) {\n const [inputValue, changeInputValue] = useState(getDisplay(value));\n moment.tz.setDefault(timeZone);\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n const timeInputRef = useRef(null);\n\n useLayoutEffect(() => {\n if (timeInputRef.current) {\n timeInputRef.current.focus();\n }\n }, []);\n return (\n <>\n <label className={styles['input-container']} htmlFor={inputId}>\n <span>{icon}</span>\n <span className={styles['sr-only']} id={labelId}>\n {label}\n </span>\n <input\n id={inputId}\n inputMode=\"numeric\"\n type=\"text\"\n maxLength=\"6\"\n className={styles['time-input-mobile']}\n value={inputValue}\n onFocus={e => {\n e.target.setSelectionRange(0, 0); // set caret to start of input\n }}\n onChange={event => {\n let newValue = event.target.value;\n if (\n // number typed as first char => clear rest of the input\n newValue.match(/[0-9]{3}:[0-9]{2}/) &&\n newValue.slice(1) === inputValue\n ) {\n newValue = newValue.charAt(0);\n }\n if (newValue.length > 5) {\n return;\n }\n const actual = utils.parseTypedTime(newValue);\n changeInputValue(actual);\n const timestamp = validate(actual, value);\n if (timestamp) {\n onChange(timestamp);\n }\n }}\n ref={timeInputRef}\n />\n </label>\n </>\n );\n}\nMobileTimepicker.propTypes = {\n value: PropTypes.number.isRequired,\n getDisplay: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n icon: PropTypes.node,\n timeZone: PropTypes.string,\n validate: PropTypes.func.isRequired,\n};\n\nMobileTimepicker.defaultProps = {\n icon: null,\n timeZone: 'Europe/Helsinki',\n};\n\nexport default MobileTimepicker;\n","import PropTypes from 'prop-types';\nimport React, { useState } from 'react';\nimport moment from 'moment-timezone';\nimport 'moment/locale/fi';\nimport uniqueId from 'lodash/uniqueId';\nimport i18next from 'i18next';\nimport Modal from 'react-modal';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport MobileDatepicker from './MobileDatepicker';\nimport MobileTimepicker from './MobileTimepicker';\nimport translations from './translations';\nimport styles from './styles.scss';\n\nmoment.locale('en');\ni18next.init({ lng: 'en', resources: {} });\nObject.keys(translations).forEach(lang =>\n i18next.addResourceBundle(lang, 'translation', translations[lang]),\n);\n\n/**\n * TODO\n */\nfunction MobilePickerModal({\n departureOrArrival,\n onNowClick,\n lang,\n color,\n timeZone,\n onSubmit,\n onCancel,\n timestamp,\n getTimeDisplay,\n dateSelectItemCount,\n getDateDisplay,\n validateTime,\n fontWeights,\n}) {\n moment.tz.setDefault(timeZone);\n const translationSettings = { lng: lang };\n\n const [displayTimestamp, changeTimestamp] = useState(timestamp);\n\n const [departureOrArrivalCurrent, changeDepartureOrArrival] = useState(\n departureOrArrival,\n );\n\n function onArrivalClick() {\n changeDepartureOrArrival('arrival');\n }\n\n function onDepartureClick() {\n changeDepartureOrArrival('departure');\n }\n\n function onDateChange(newValue) {\n changeTimestamp(newValue);\n }\n\n function onTimeChange(newValue) {\n changeTimestamp(newValue);\n }\n\n // for input labels\n const [htmlId] = useState(uniqueId('datetimepicker-'));\n const dateSelectStartTime = moment()\n .startOf('day')\n .hour(moment(displayTimestamp).hour())\n .minute(moment(displayTimestamp).minute())\n .valueOf();\n\n return (\n <Modal\n appElement={document ? document.querySelector('#app') : undefined}\n isOpen\n className={styles['mobile-modal-content']}\n overlayClassName={styles['mobile-modal-overlay']}\n >\n <div\n style={{\n '--color': `${color}`,\n '--font-weight-medium': fontWeights.medium,\n }}\n >\n <div className={styles['top-row']}>\n <h3 className={styles['modal-title']}>\n {i18next.t('choose-time', translationSettings)}\n </h3>\n <button\n type=\"button\"\n className={styles['departure-now-button']}\n onClick={onNowClick}\n >\n {i18next.t('departure-now', translationSettings)}\n </button>\n </div>\n <div className={styles['tab-row']}>\n <label\n htmlFor={`${htmlId}-modal-departure`}\n className={`${styles['radio-tab-label']}\n ${\n styles[\n departureOrArrivalCurrent === 'departure'\n ? 'active'\n : undefined\n ]\n }`}\n >\n {i18next.t('departure', translationSettings)}\n <input\n id={`${htmlId}-modal-departure`}\n name=\"departureOrArrival\"\n type=\"radio\"\n value=\"departure\"\n className={styles['radio-textbutton']}\n onChange={() => {\n onDepartureClick();\n }}\n checked={departureOrArrivalCurrent === 'departure'}\n />\n </label>\n <label\n htmlFor={`${htmlId}-modal-arrival`}\n className={`${styles['radio-tab-label']}\n ${\n styles[\n departureOrArrivalCurrent === 'arrival'\n ? 'active'\n : undefined\n ]\n }`}\n >\n {i18next.t('arrival', translationSettings)}\n <input\n id={`${htmlId}-modal-arrival`}\n name=\"departureOrArrival\"\n type=\"radio\"\n value=\"arrival\"\n className={styles['radio-textbutton']}\n onChange={() => {\n onArrivalClick();\n }}\n checked={departureOrArrivalCurrent === 'arrival'}\n />\n </label>\n </div>\n <div className={styles['input-row']}>\n <MobileDatepicker\n value={displayTimestamp}\n getDisplay={getDateDisplay}\n onChange={onDateChange}\n itemCount={dateSelectItemCount}\n startTime={dateSelectStartTime}\n id={`${htmlId}-date`}\n label={i18next.t('date', translationSettings)}\n icon={\n <span\n className={`${styles['combobox-icon']} ${styles['date-input-icon']}`}\n >\n <Icon img=\"calendar\" color={color} />\n </span>\n }\n timeZone={timeZone}\n />\n <MobileTimepicker\n value={displayTimestamp}\n getDisplay={getTimeDisplay}\n onChange={onTimeChange}\n id={`${htmlId}-time`}\n label={i18next.t('time', translationSettings)}\n icon={\n <span\n className={`${styles['combobox-icon']} ${styles['time-input-icon']}`}\n >\n <Icon img=\"time\" color={color} />\n </span>\n }\n timeZone={timeZone}\n validate={validateTime}\n />\n </div>\n <div className={styles['buttons-row']}>\n <button\n type=\"button\"\n className={styles['ready-button']}\n onClick={() =>\n onSubmit(displayTimestamp, departureOrArrivalCurrent)\n }\n >\n {i18next.t('ready', translationSettings)}\n </button>\n <button\n type=\"button\"\n className={styles['cancel-button']}\n onClick={onCancel}\n >\n {i18next.t('cancel', translationSettings)}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n\nMobilePickerModal.propTypes = {\n timeZone: PropTypes.string,\n departureOrArrival: PropTypes.oneOf(['departure', 'arrival']).isRequired,\n onNowClick: PropTypes.func.isRequired,\n lang: PropTypes.string.isRequired,\n color: PropTypes.string,\n onSubmit: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n timestamp: PropTypes.number.isRequired,\n getTimeDisplay: PropTypes.func.isRequired,\n dateSelectItemCount: PropTypes.number.isRequired,\n getDateDisplay: PropTypes.func.isRequired,\n validateTime: PropTypes.func.isRequired,\n fontWeights: PropTypes.shape({\n medium: PropTypes.number.isRequired,\n }).isRequired,\n};\n\nMobilePickerModal.defaultProps = {\n color: '#007ac9',\n timeZone: 'Europe/Helsinki',\n};\n\nexport default MobilePickerModal;\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect, useRef, useLayoutEffect } from 'react';\nimport moment from 'moment-timezone';\nimport 'moment/locale/fi';\nimport uniqueId from 'lodash/uniqueId';\nimport i18next from 'i18next';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport DesktopDatetimepicker from './DesktopDatetimepicker';\nimport translations from './translations';\nimport styles from './styles.scss';\nimport { isMobile } from './mobileDetection';\nimport dateTimeInputIsSupported from './dateTimeInputIsSupported';\nimport MobilePickerModal from './MobilePickerModal';\n\nmoment.locale('en');\ni18next.init({\n lng: 'fi',\n fallbackLng: 'fi',\n defaultNS: 'translation',\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n});\n\n/**\n * This component renders combobox style inputs for selecting date and time. This is a controlled component, timestamp is the current value of both inputs.\n * @param {Object} props\n *\n * @param {Number} props.timestamp Currently selected time as a unix timestamp in milliseconds. Set to null to signify that \"now\" is selected. Displayed time is updated in realtime when set to null\n * @param {function} props.onTimeChange Called with new timestamp when time input changes\n * @param {function} props.onDateChange Called with new timestamp when date input changes\n * @param {'arrival'|'departure'} props.departureOrArrival Determine if input is set to choose departure or arrival time\n * @param {function} props.onNowClick Called when \"depart now\" button is clicked\n * @param {function} props.onDepartureClick Called when \"departure\" button is clicked\n * @param {function} props.onArrivalClick Called when \"arrival\" button is clicked\n * @param {node} props.embedWhenClosed JSX element to render in the corner when input is closed\n * @param {node} props.embedWhenOpen JSX element to render when input is open\n * @param {string} props.lang Language selection\n * @param {number} props.serviceTimeRange Determine number of days shown in timepicker. Optional. default is 30.\n * @param {function} props.onOpen Determine what to do when timepicker is open. Optional. no default implementation.\n * @param {function} props.onClose Determine what to do when timepicker is closed. Optional. no default implementation.\n * @param {function} props.openPicker Determine if timepicker should be open in intial render. Optional. Default is undefined.\n *\n *\n * @example\n * <Datetimepicker\n * timestamp={1590133823000}\n * onTimeChange={(newTimestamp) => update(newTimestamp)}\n * onDateChange={(newTimestamp) => update(newTimestamp)}\n * departureOrArrival={'departure'}\n * onNowClick={() => setTimestampToNull()}\n * onDepartureClick={() => departureClicked()}\n * onArrivalClick={() => arrivalClicked()}\n * embedWhenClosed={<button />}\n * lang={'en'}\n * serviceTimeRange={15}\n * />\n */\nfunction Datetimepicker({\n timestamp,\n onTimeChange,\n onDateChange,\n departureOrArrival,\n onNowClick,\n onDepartureClick,\n onArrivalClick,\n embedWhenClosed,\n embedWhenOpen,\n lang,\n color,\n timeZone,\n onModalSubmit,\n fontWeights,\n serviceTimeRange,\n onOpen,\n onClose,\n openPicker,\n}) {\n moment.tz.setDefault(timeZone);\n const [isOpen, changeOpen] = useState(openPicker || false);\n const [displayTimestamp, changeDisplayTimestamp] = useState(\n timestamp || moment().valueOf(),\n );\n // timer for updating displayTimestamp in real time\n const [timerId, setTimer] = useState(null);\n // for input labels\n const [htmlId] = useState(uniqueId('datetimepicker-'));\n const [useMobileInputs] = useState(isMobile() && dateTimeInputIsSupported());\n const openPickerRef = useRef();\n const inputRef = useRef();\n const alertRef = useRef();\n\n const translationSettings = { lng: lang };\n\n useEffect(() => {\n Object.keys(translations).forEach(language =>\n i18next.addResourceBundle(language, 'translation', translations[lang]),\n );\n }, []);\n\n useEffect(() => {\n moment.locale(lang);\n }, [lang]);\n\n const nowSelected = timestamp === null;\n useEffect(() => {\n if (nowSelected) {\n changeDisplayTimestamp(moment().valueOf());\n } else {\n // clear timer\n if (timerId) {\n clearInterval(timerId);\n setTimer(null);\n }\n changeDisplayTimestamp(timestamp);\n }\n }, [timestamp]);\n\n // set timer to update displayTimestamp when minute changes if nowSelected\n useEffect(() => {\n if (!nowSelected) {\n return undefined;\n }\n if (timerId) {\n clearInterval(timerId);\n }\n const newId = setInterval(() => {\n const now = moment().valueOf();\n const sameMinute = moment(displayTimestamp).isSame(now, 'minute');\n if (!sameMinute) {\n clearInterval(newId);\n setTimer(null);\n changeDisplayTimestamp(now);\n }\n }, 5000);\n setTimer(newId);\n return () => clearInterval(newId);\n }, [displayTimestamp]);\n\n const prevIsOpenRef = useRef();\n useEffect(() => {\n prevIsOpenRef.current = isOpen;\n });\n const prevIsOpen = prevIsOpenRef.current;\n\n useLayoutEffect(() => {\n if (!prevIsOpen === isOpen) {\n if (isOpen) {\n if (inputRef) {\n inputRef.current?.focus();\n }\n } else if (openPickerRef) {\n openPickerRef.current?.focus();\n }\n }\n });\n\n // param date is timestamp\n const getDateDisplay = date => {\n const time = moment(date);\n let formatted;\n if (time.isSame(moment(), 'day')) {\n formatted = i18next.t('today', translationSettings);\n } else if (time.isSame(moment().add(1, 'day'), 'day')) {\n formatted = i18next.t('tomorrow', translationSettings);\n } else {\n formatted = time.format('dd D.M.');\n }\n formatted = `${formatted.charAt(0).toUpperCase()}${formatted.slice(1)}`;\n return formatted;\n };\n\n // param time is timestamp\n const getTimeDisplay = time => {\n return moment(time).format('HH:mm');\n };\n\n const validateTime = (inputValue, currentTimestamp) => {\n const trimmed = inputValue.trim();\n if (trimmed.match(/^[0-9]{1,2}(\\.|:)[0-9]{2}$/) !== null) {\n const splitter = trimmed.includes('.') ? '.' : ':';\n const values = trimmed.split(splitter);\n const hours = Number(values[0]);\n const hoursValid = !Number.isNaN(hours) && hours >= 0 && hours <= 23;\n const minutes = Number(values[1]);\n const minutesValid =\n !Number.isNaN(minutes) && minutes >= 0 && minutes <= 59;\n if (!minutesValid || !hoursValid) {\n return null;\n }\n const newStamp = moment(currentTimestamp)\n .hours(hours)\n .minutes(minutes)\n .valueOf();\n return newStamp;\n }\n return null;\n };\n\n const selectedMoment = moment(displayTimestamp);\n const timeSelectStartTime = moment(displayTimestamp).startOf('day').valueOf();\n let timeChoices = [];\n const current = moment(timeSelectStartTime);\n while (current.isSame(timeSelectStartTime, 'day')) {\n timeChoices.push(current.valueOf());\n current.add(15, 'minutes');\n }\n if (timestamp === null) {\n // if time is set to now\n // add times in 5 min intervals for next 30 mins\n const fiveMinutes = 1000 * 60 * 5;\n const nextFiveMin = Math.ceil(displayTimestamp / fiveMinutes) * fiveMinutes;\n const timesToAdd = Array(7)\n .fill()\n .map((_, i) => nextFiveMin + i * fiveMinutes);\n const closestIndexAfter = timeChoices\n .map(t => displayTimestamp - t)\n .findIndex(t => t <= 0);\n timeChoices.splice(closestIndexAfter, 0, ...timesToAdd);\n timeChoices = Array.from(new Set(timeChoices)); // remove duplicates\n }\n\n const dateSelectStartTime = moment()\n .startOf('day')\n .hour(selectedMoment.hour())\n .minute(selectedMoment.minute())\n .valueOf();\n const dateChoices = Array(serviceTimeRange)\n .fill()\n .map((_, i) => moment(dateSelectStartTime).add(i, 'day').valueOf());\n\n function showScreenreaderCloseAlert() {\n if (alertRef.current) {\n alertRef.current.innerHTML = i18next.t(\n 'accessible-closed',\n translationSettings,\n );\n setTimeout(() => {\n alertRef.current.innerHTML = null;\n }, 100);\n }\n }\n\n function showScreenreaderOpenAlert() {\n if (alertRef.current) {\n alertRef.current.innerHTML = i18next.t(\n 'accessible-opened',\n translationSettings,\n );\n setTimeout(() => {\n alertRef.current.innerHTML = null;\n }, 100);\n }\n }\n\n function renderOpen() {\n if (useMobileInputs) {\n return (\n isOpen && (\n <MobilePickerModal\n departureOrArrival={departureOrArrival}\n onNowClick={() => {\n changeOpen(false);\n showScreenreaderCloseAlert();\n onNowClick();\n }}\n lang={lang}\n color={color}\n onSubmit={(newTimestamp, newDepartureOrArrival) => {\n onModalSubmit(newTimestamp, newDepartureOrArrival);\n changeOpen(false);\n showScreenreaderCloseAlert();\n }}\n onCancel={() => {\n changeOpen(false);\n showScreenreaderCloseAlert();\n if (onClose) {\n onClose();\n }\n }}\n getTimeDisplay={getTimeDisplay}\n timeZone={timeZone}\n timestamp={displayTimestamp}\n getDateDisplay={getDateDisplay}\n dateSelectItemCount={serviceTimeRange}\n getDisplay={getTimeDisplay}\n validateTime={validateTime}\n fontWeights={fontWeights}\n />\n )\n );\n }\n\n return (\n <>\n <div\n className={`${styles['datetimepicker-open-container']} ${\n !isOpen ? styles.hidden : ''\n }`}\n >\n <div\n className={\n isOpen\n ? `${styles['top-row-container']} datetimepicker-top-row`\n : `${styles.hidden} datetimepicker-top-row`\n }\n >\n {' '}\n <span role=\"alert\" className={styles['sr-only']} ref={alertRef} />\n <span />\n {/* This empty span prevents a weird focus bug on chrome */}\n <span className={styles['departure-or-arrival-container']}>\n <label\n htmlFor={`${htmlId}-departure`}\n className={`${styles['radio-textbutton-label']}\n ${\n styles[\n departureOrArrival === 'departure' ? 'active' : undefined\n ]\n }`}\n >\n {i18next.t('departure', translationSettings)}\n <input\n id={`${htmlId}-departure`}\n name=\"departureOrArrival\"\n type=\"radio\"\n value=\"departure\"\n className={styles['radio-textbutton']}\n onChange={() => {\n onDepartureClick();\n }}\n checked={departureOrArrival === 'departure'}\n />\n </label>\n <label\n htmlFor={`${htmlId}-arrival`}\n className={`${styles['radio-textbutton-label']}\n ${\n styles[\n departureOrArrival === 'arrival' ? 'active' : undefined\n ]\n }`}\n >\n {i18next.t('arrival', translationSettings)}\n <input\n id={`${htmlId}-arrival`}\n name=\"departureOrArrival\"\n type=\"radio\"\n value=\"arrival\"\n className={styles['radio-textbutton']}\n onChange={() => {\n onArrivalClick();\n }}\n checked={departureOrArrival === 'arrival'}\n />\n </label>\n </span>\n <button\n id={`${htmlId}-now`}\n type=\"button\"\n className={styles['departure-now-button']}\n onClick={() => {\n changeOpen(false);\n showScreenreaderCloseAlert();\n if (onClose) {\n onClose();\n }\n onNowClick();\n }}\n ref={inputRef}\n >\n {i18next.t('departure-now', translationSettings)}\n </button>\n <span className={styles['right-edge']}>\n <button\n type=\"button\"\n className={styles['close-button']}\n aria-controls={`${htmlId}-root`}\n aria-expanded=\"true\"\n onClick={() => {\n changeOpen(false);\n showScreenreaderCloseAlert();\n if (onClose) {\n onClose();\n }\n }}\n >\n <span className={styles['close-icon']}>\n <Icon img=\"close\" color={color} />\n </span>\n <span className={styles['sr-only']}>\n {i18next.t('accessible-close', translationSettings)}\n </span>\n </button>\n </span>\n </div>\n <div\n className={\n isOpen\n ? `${styles['picker-container']}`\n : `${styles.hidden} datetimepicker-top-row`\n }\n >\n <>\n <span className={styles['combobox-left']}>\n <DesktopDatetimepicker\n value={displayTimestamp}\n onChange={newValue => {\n onDateChange(newValue);\n }}\n getDisplay={getDateDisplay}\n timeChoices={dateChoices}\n validate={() => null}\n icon={\n <span\n className={`${styles['combobox-icon']} ${styles['date-input-icon']}`}\n >\n <Icon img=\"calendar\" color={color} />\n </span>\n }\n id={`${htmlId}-date`}\n label={i18next.t('date', translationSettings)}\n disableTyping\n timeZone={timeZone}\n />\n </span>\n <span className={styles['combobox-right']}>\n <DesktopDatetimepicker\n value={displayTimestamp}\n onChange={newValue => {\n onTimeChange(newValue);\n }}\n getDisplay={getTimeDisplay}\n timeChoices={timeChoices}\n validate={validateTime}\n icon={\n <span\n className={`${styles['combobox-icon']} ${styles['time-input-icon']}`}\n >\n <Icon img=\"time\" color={color} />\n </span>\n }\n id={`${htmlId}-time`}\n label={i18next.t('time', translationSettings)}\n timeZone={timeZone}\n />\n </span>\n </>\n </div>\n </div>\n <span className={isOpen ? '' : styles.hidden}>{embedWhenOpen}</span>\n <div className={isOpen ? 'datetimepicker-bottom-row-open' : ''} />\n </>\n );\n }\n\n return (\n <fieldset\n className={styles['dt-datetimepicker']}\n id={`${htmlId}-root`}\n style={{\n '--color': `${color}`,\n '--font-weight-medium': fontWeights.medium,\n }}\n >\n <legend className={styles['sr-only']}>\n {i18next.t('accessible-title', translationSettings)}\n </legend>\n <span className={styles['sr-only']}>\n {i18next.t('accessible-update-instructions', translationSettings)}\n </span>\n <>\n <div\n className={\n !isOpen\n ? `${styles['top-row-container']} ${styles.closed} datetimepicker-top-row`\n : `${styles.hidden} datetimepicker-top-row`\n }\n >\n <label className={styles['label-open']} htmlFor={`${htmlId}-open`}>\n <span className={styles['time-icon']}>\n <Icon img=\"time\" color={color} />\n </span>\n <span className={styles['sr-only']}>\n {i18next.t('accessible-open', translationSettings)}\n </span>\n <span role=\"alert\" className={styles['sr-only']} ref={alertRef} />\n <button\n id={`${htmlId}-open`}\n type=\"button\"\n className={`${styles.textbutton} ${styles.active} ${styles['open-button']}`}\n aria-controls={`${htmlId}-root`}\n aria-expanded=\"false\"\n onClick={() => {\n changeOpen(true);\n showScreenreaderOpenAlert();\n if (onOpen) {\n onOpen();\n }\n }}\n ref={openPickerRef}\n >\n <span>\n {nowSelected && departureOrArrival === 'departure' ? (\n i18next.t('departure-now', translationSettings)\n ) : (\n <>\n {i18next.t(\n departureOrArrival === 'departure'\n ? 'departure'\n : 'arrival',\n translationSettings,\n )}\n {` ${\n moment().isSame(moment(displayTimestamp), 'day')\n ? ''\n : getDateDisplay(displayTimestamp).toLowerCase()\n } ${getTimeDisplay(displayTimestamp)}`}\n </>\n )}\n </span>\n <span className={styles['dropdown-icon']}>\n <Icon img=\"arrow-dropdown\" color={color} />\n </span>\n </button>\n </label>\n <span className={styles['right-edge']}>{embedWhenClosed}</span>\n </div>\n <div />\n </>\n {renderOpen()}\n </fieldset>\n );\n}\n\nDatetimepicker.propTypes = {\n timestamp: PropTypes.number,\n timeZone: PropTypes.string,\n onTimeChange: PropTypes.func.isRequired,\n onDateChange: PropTypes.func.isRequired,\n departureOrArrival: PropTypes.oneOf(['departure', 'arrival']).isRequired,\n onNowClick: PropTypes.func.isRequired,\n onDepartureClick: PropTypes.func.isRequired,\n onArrivalClick: PropTypes.func.isRequired,\n embedWhenClosed: PropTypes.node,\n embedWhenOpen: PropTypes.node,\n lang: PropTypes.string.isRequired,\n color: PropTypes.string,\n onModalSubmit: PropTypes.func.isRequired,\n fontWeights: PropTypes.shape({\n medium: PropTypes.number.isRequired,\n }).isRequired,\n serviceTimeRange: PropTypes.number,\n onOpen: PropTypes.func,\n onClose: PropTypes.func,\n openPicker: PropTypes.bool,\n};\n\nDatetimepicker.defaultProps = {\n timestamp: null,\n embedWhenClosed: null,\n embedWhenOpen: null,\n color: '#007ac9',\n timeZone: 'Europe/Helsinki',\n serviceTimeRange: 30,\n onOpen: null,\n onClose: null,\n openPicker: undefined,\n};\n\nexport default Datetimepicker;\n","/**\n * Detect if input type=\"date\" and type=\"time\" are supported in by the browser\n *\n * @return {boolean}\n */\nfunction dateTimeInputIsSupported() {\n if (typeof window === 'undefined' || window === null) {\n return false;\n }\n const elem = document.createElement('input');\n elem.type = 'date';\n if (elem.type !== 'date') {\n return false;\n }\n elem.type = 'time';\n if (elem.type !== 'time') {\n return false;\n }\n return true;\n}\n\nexport default dateTimeInputIsSupported;\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect } from 'react';\nimport moment from 'moment-timezone';\nimport debounce from 'lodash/debounce';\nimport Datetimepicker from './helpers/Datetimepicker';\n\n/**\n * This component renders an input to choose a date and time. Renders separate input fields for date and time selection. Values for timestamp and arriveBy correspond to Digitransit query params time and arriveBy. This component will display a native date input on mobile and a custom one for desktop. Mobile detection is done by parsing user agent.\n *\n * @alias Datetimepicker\n *\n * @param {Object} props\n *\n * @param {boolean} props.realtime Determine if selected time should be updated in realtime when 'now' is selected.\n * @param {Number} props.initialTimestamp Initial value for selected time. Unix timestamp in seconds. Updating this will change timepicker value but the correct value is kept in component state even if this is not updated.\n * @param {boolean} props.initialArriveBy Initial value for arriveBy. Determines if picker is in arrival mode (true) or departure mode (false). Correct value is kept in component state even if this is not updated. Changing this will also trigger change in the component.\n * @param {function} props.onTimeChange Called with (time, arriveBy) when time input changes. time is number timestamp in seconds, arriveBy is boolean\n * @param {function} props.onDateChange Called with (time, arriveBy) when date input changes. time is number timestamp in seconds, arriveBy is boolean\n * @param {function} props.onNowClick Called when \"depart now\" button is clicked. time is current input value in seconds\n * @param {function} props.onDepartureClick Called with (time) when \"departure\" button is clicked. time is current input value in seconds\n * @param {function} props.onArrivalClick Called with (time) when \"arrival\" button is clicked. time is current input value in seconds\n * @param {node} props.embedWhenClosed JSX element to render in the corner when input is closed\n * @param {node} props.embedWhenOpen JSX element to render when input is open\n * @param {string} props.lang Language selection. Default 'en'\n * @param {number} props.serviceTimeRange Determine number of days shown in timepicker. Optional. default is 30.\n * @param {function} props.onOpen Determine what to do when timepicker is open. Optional. no default implementation.\n * @param {function} props.onClose Determine what to do when timepicker is closed. Optional. no default implementation.\n * @param {function} props.openPicker Determine if timepicker should be open in intial render. Optional. Default is undefined.\n * @example\n * <Datetimepicker\n * realtime={true}\n * initialTimestamp={1590133823}\n * initialArriveBy={false}\n * onTimeChange={(time, arriveBy) => changeUrl(time, arriveBy)}\n * onDateChange={(time, arriveBy) => changeUrl(time, arriveBy)}\n * onNowClick={(time) => changeUrl(undefined, undefined)}\n * onDepartureClick={(time) => changeUrl(time, 'true')}\n * onArrivalClick={(time) => changeUrl(time, undefined)}\n * embedWhenClosed={<button />}\n * lang={'en'}\n * serviceTimeRange={15}\n * />\n */\nfunction DatetimepickerStateContainer({\n realtime,\n initialArriveBy,\n initialTimestamp,\n onDepartureClick,\n onArrivalClick,\n onTimeChange,\n onDateChange,\n onNowClick,\n embedWhenClosed,\n embedWhenOpen,\n lang,\n color,\n timeZone,\n fontWeights,\n serviceTimeRange,\n onOpen,\n onClose,\n openPicker,\n}) {\n moment.locale(lang);\n moment.tz.setDefault(timeZone);\n const initialNow = realtime ? null : moment().valueOf();\n const [timestamp, changeTimestampState] = useState(\n initialTimestamp ? initialTimestamp * 1000 : initialNow,\n );\n const [departureOrArrival, changeDepartureOrArrival] = useState(\n initialArriveBy === true ? 'arrival' : 'departure',\n );\n\n // update state if props change\n useEffect(() => {\n const bothNull = timestamp === null && initialTimestamp === undefined;\n const oneNull = timestamp === null || initialTimestamp === undefined;\n const sameTime = Math.round(timestamp / 1000) === initialTimestamp;\n const timestampChanged = !bothNull && (oneNull || !sameTime);\n if (timestampChanged) {\n if (initialTimestamp === undefined) {\n changeTimestampState(null);\n } else {\n changeTimestampState(initialTimestamp * 1000);\n }\n }\n if (!initialArriveBy === (departureOrArrival === 'arrival')) {\n changeDepartureOrArrival(\n initialArriveBy === true ? 'arrival' : 'departure',\n );\n }\n }, [initialTimestamp, initialArriveBy]);\n\n const timeChanged = debounce(newTime => {\n if (newTime === null) {\n changeTimestampState(moment().valueOf());\n onTimeChange(\n Math.round(moment().valueOf() / 1000),\n departureOrArrival === 'arrival',\n );\n return;\n }\n changeTimestampState(newTime);\n onTimeChange(Math.round(newTime / 1000), departureOrArrival === 'arrival');\n }, 10);\n\n const dateChanged = debounce(newDate => {\n if (newDate === null) {\n changeTimestampState(moment().valueOf());\n onDateChange(\n Math.round(moment().valueOf() / 1000),\n departureOrArrival === 'arrival',\n );\n return;\n }\n changeTimestampState(newDate);\n onDateChange(Math.round(newDate / 1000), departureOrArrival === 'arrival');\n }, 10);\n\n const nowClicked = () => {\n changeDepartureOrArrival('departure');\n const newTimestamp = realtime ? null : moment().valueOf();\n changeTimestampState(newTimestamp);\n onNowClick(Math.round(newTimestamp / 1000));\n };\n\n const departureClicked = () => {\n let changed = false;\n let newTime = timestamp;\n if (timestamp === null) {\n const now = moment().valueOf();\n changeTimestampState(now);\n newTime = now;\n changed = true;\n }\n if (departureOrArrival !== 'departure') {\n changeDepartureOrArrival('departure');\n changed = true;\n }\n if (changed) {\n onDepartureClick(Math.round(newTime / 1000));\n }\n };\n\n const arrivalClicked = () => {\n let changed = false;\n let newTime = timestamp;\n if (timestamp === null) {\n const now = moment().valueOf();\n changeTimestampState(now);\n newTime = now;\n changed = true;\n }\n if (departureOrArrival !== 'arrival') {\n changeDepartureOrArrival('arrival');\n changed = true;\n }\n if (changed) {\n onArrivalClick(Math.round(newTime / 1000));\n }\n };\n const onModalSubmit = (time, mode) => {\n changeTimestampState(time);\n changeDepartureOrArrival(mode);\n onTimeChange(time / 1000, mode === 'arrival', true);\n };\n\n return (\n <Datetimepicker\n timestamp={timestamp}\n onTimeChange={timeChanged}\n onDateChange={dateChanged}\n departureOrArrival={departureOrArrival}\n onNowClick={nowClicked}\n onDepartureClick={departureClicked}\n onArrivalClick={arrivalClicked}\n embedWhenClosed={embedWhenClosed}\n embedWhenOpen={embedWhenOpen}\n lang={lang}\n color={color}\n timeZone={timeZone}\n onModalSubmit={onModalSubmit}\n fontWeights={fontWeights}\n serviceTimeRange={serviceTimeRange}\n onOpen={onOpen}\n onClose={onClose}\n openPicker={openPicker}\n />\n );\n}\n\nDatetimepickerStateContainer.propTypes = {\n realtime: PropTypes.bool,\n initialTimestamp: PropTypes.number,\n initialArriveBy: PropTypes.bool,\n onDepartureClick: PropTypes.func.isRequired,\n onArrivalClick: PropTypes.func.isRequired,\n onTimeChange: PropTypes.func.isRequired,\n onDateChange: PropTypes.func.isRequired,\n onNowClick: PropTypes.func.isRequired,\n embedWhenClosed: PropTypes.node,\n embedWhenOpen: PropTypes.node,\n lang: PropTypes.string,\n color: PropTypes.string,\n timeZone: PropTypes.string,\n fontWeights: PropTypes.shape({\n medium: PropTypes.number,\n }),\n serviceTimeRange: PropTypes.number,\n onOpen: PropTypes.func,\n onClose: PropTypes.func,\n openPicker: PropTypes.bool,\n};\n\nDatetimepickerStateContainer.defaultProps = {\n realtime: false,\n initialArriveBy: undefined,\n initialTimestamp: undefined,\n embedWhenClosed: null,\n embedWhenOpen: null,\n lang: 'en',\n color: '#007ac9',\n timeZone: 'Europe/Helsinki',\n fontWeights: {\n medium: 500,\n },\n onOpen: null,\n onClose: null,\n openPicker: undefined,\n};\n\nexport default DatetimepickerStateContainer;\n"],"names":["_arrayLikeToArray","arr","len","length","i","arr2","Array","_unsupportedIterableToArray","o","minLen","arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","from","test","_slicedToArray","isArray","arrayWithHoles","Symbol","iterator","_arr","_n","_d","_e","undefined","_s","_i","next","done","push","value","err","iterableToArrayLimit","unsupportedIterableToArray","TypeError","nonIterableRest","_toConsumableArray","arrayWithoutHoles","iter","iterableToArray","nonIterableSpread","parseTypedTime","typedValue","actualValue","split","every","Number","isInteger","DesktopDatetimepicker","onChange","getDisplay","timeChoices","validate","id","label","icon","disableTyping","timeZone","moment","tz","setDefault","useState","displayValue","changeDisplayValue","typing","setTyping","useEffect","handleTimestamp","newValue","asNumber","isNaN","isValid","valueOf","options","map","t","closestOption","reduce","a","b","Math","abs","inputId","labelId","React","className","styles","htmlFor","Select","ariaLiveMessages","guidance","onFilter","onFocus","context","itemLabel","time","validated","components","IndicatorsContainer","classNamePrefix","onInputChange","action","utils","inputValue","filterOption","controlShouldRenderValue","tabSelectsValue","placeholder","e","target","select","onBlur","onKeyDown","includes","key","isSearchable","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","process","propTypes","PropTypes","number","isRequired","func","arrayOf","string","node","bool","defaultProps","translations","de","today","tomorrow","arrival","date","departure","ready","cancel","en","fi","sv","_objectWithoutProperties","source","excluded","sourceKeys","keys","indexOf","objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","MobileDatepicker","itemCount","startTime","open","changeOpen","scrollRef","useRef","dateChoices","fill","_","add","scrollIndex","findIndex","useLayoutEffect","current","scrollTop","nativeInput","navigator","userAgent","toLowerCase","Autosuggest","suggestions","getSuggestionValue","s","renderSuggestion","onSuggestionsFetchRequested","shouldRenderSuggestions","inputProps","readOnly","focusInputOnSuggestionClick","onSuggestionsClearRequested","renderSuggestionsContainer","containerProps","children","otherRefs","tabIndex","elem","theme","MobileTimepicker","changeInputValue","timeInputRef","focus","inputMode","maxLength","setSelectionRange","event","match","charAt","actual","timestamp","MobilePickerModal","departureOrArrival","onNowClick","lang","color","onSubmit","onCancel","getTimeDisplay","dateSelectItemCount","getDateDisplay","validateTime","fontWeights","translationSettings","lng","displayTimestamp","changeTimestamp","departureOrArrivalCurrent","changeDepartureOrArrival","htmlId","uniqueId","dateSelectStartTime","startOf","hour","minute","Modal","appElement","querySelector","isOpen","overlayClassName","medium","i18next","onClick","checked","Icon","img","Datetimepicker","onTimeChange","onDateChange","onDepartureClick","onArrivalClick","embedWhenClosed","embedWhenOpen","onModalSubmit","serviceTimeRange","onOpen","onClose","openPicker","changeDisplayTimestamp","timerId","setTimer","useMobileInputs","vendor","window","opera","dateTimeInputIsSupported","openPickerRef","inputRef","alertRef","forEach","language","addResourceBundle","locale","nowSelected","clearInterval","newId","setInterval","now","isSame","prevIsOpenRef","prevIsOpen","formatted","format","toUpperCase","currentTimestamp","trimmed","trim","splitter","values","hours","hoursValid","minutes","selectedMoment","timeSelectStartTime","fiveMinutes","nextFiveMin","ceil","timesToAdd","closestIndexAfter","splice","Set","showScreenreaderCloseAlert","innerHTML","setTimeout","hidden","closed","role","textbutton","active","newTimestamp","newDepartureOrArrival","DatetimepickerStateContainer","realtime","initialArriveBy","initialTimestamp","initialNow","changeTimestampState","bothNull","oneNull","sameTime","round","timeChanged","debounce","newTime","dateChanged","newDate","changed","mode","dateTimeCombined","init","resources","oneOf","shape","fallbackLng","defaultNS","interpolation","escapeValue"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digitransit-component/digitransit-component-datetimepicker",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.16",
|
|
4
4
|
"description": "digitransit-component datetimepicker module",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"files": [
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"author": "Digitransit Authors",
|
|
29
29
|
"license": "(AGPL-3.0 OR EUPL-1.2)",
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"@digitransit-component/digitransit-component-icon": "^0.1.
|
|
31
|
+
"@digitransit-component/digitransit-component-icon": "^0.1.14",
|
|
32
32
|
"i18next": "^19.3.3",
|
|
33
33
|
"lodash": "4.17.21",
|
|
34
34
|
"lodash-es": "4.17.21",
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"react-modal": "~3.11.2",
|
|
41
41
|
"react-select": "4.3.0"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "603820a6925ae59a815c4cdfa6d63c37143fcea1"
|
|
44
44
|
}
|