flatpickr 4.6.3.0 → 4.6.9.0

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.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/LICENSE.txt +1 -1
  4. data/Rakefile +14 -15
  5. data/flatpickr.gemspec +1 -1
  6. data/lib/flatpickr/version.rb +1 -1
  7. data/package.json +5 -0
  8. data/vendor/assets/javascripts/flatpickr/l10n/ar.js +7 -7
  9. data/vendor/assets/javascripts/flatpickr/l10n/at.js +7 -7
  10. data/vendor/assets/javascripts/flatpickr/l10n/az.js +8 -8
  11. data/vendor/assets/javascripts/flatpickr/l10n/be.js +7 -7
  12. data/vendor/assets/javascripts/flatpickr/l10n/bg.js +7 -7
  13. data/vendor/assets/javascripts/flatpickr/l10n/bn.js +7 -7
  14. data/vendor/assets/javascripts/flatpickr/l10n/bs.js +7 -7
  15. data/vendor/assets/javascripts/flatpickr/l10n/cat.js +8 -8
  16. data/vendor/assets/javascripts/flatpickr/l10n/cs.js +7 -7
  17. data/vendor/assets/javascripts/flatpickr/l10n/cy.js +7 -7
  18. data/vendor/assets/javascripts/flatpickr/l10n/da.js +7 -7
  19. data/vendor/assets/javascripts/flatpickr/l10n/de.js +7 -7
  20. data/vendor/assets/javascripts/flatpickr/l10n/default.js +7 -6
  21. data/vendor/assets/javascripts/flatpickr/l10n/eo.js +7 -7
  22. data/vendor/assets/javascripts/flatpickr/l10n/es.js +7 -7
  23. data/vendor/assets/javascripts/flatpickr/l10n/et.js +7 -7
  24. data/vendor/assets/javascripts/flatpickr/l10n/fa.js +7 -7
  25. data/vendor/assets/javascripts/flatpickr/l10n/fi.js +7 -7
  26. data/vendor/assets/javascripts/flatpickr/l10n/fo.js +7 -7
  27. data/vendor/assets/javascripts/flatpickr/l10n/fr.js +7 -7
  28. data/vendor/assets/javascripts/flatpickr/l10n/ga.js +7 -7
  29. data/vendor/assets/javascripts/flatpickr/l10n/gr.js +7 -7
  30. data/vendor/assets/javascripts/flatpickr/l10n/he.js +7 -7
  31. data/vendor/assets/javascripts/flatpickr/l10n/hi.js +7 -7
  32. data/vendor/assets/javascripts/flatpickr/l10n/hr.js +7 -7
  33. data/vendor/assets/javascripts/flatpickr/l10n/hu.js +7 -7
  34. data/vendor/assets/javascripts/flatpickr/l10n/id.js +7 -7
  35. data/vendor/assets/javascripts/flatpickr/l10n/index.js +394 -259
  36. data/vendor/assets/javascripts/flatpickr/l10n/is.js +7 -7
  37. data/vendor/assets/javascripts/flatpickr/l10n/it.js +7 -7
  38. data/vendor/assets/javascripts/flatpickr/l10n/ja.js +11 -7
  39. data/vendor/assets/javascripts/flatpickr/l10n/ka.js +7 -7
  40. data/vendor/assets/javascripts/flatpickr/l10n/km.js +7 -7
  41. data/vendor/assets/javascripts/flatpickr/l10n/ko.js +7 -7
  42. data/vendor/assets/javascripts/flatpickr/l10n/kz.js +7 -7
  43. data/vendor/assets/javascripts/flatpickr/l10n/lt.js +8 -7
  44. data/vendor/assets/javascripts/flatpickr/l10n/lv.js +7 -7
  45. data/vendor/assets/javascripts/flatpickr/l10n/mk.js +7 -7
  46. data/vendor/assets/javascripts/flatpickr/l10n/mn.js +7 -7
  47. data/vendor/assets/javascripts/flatpickr/l10n/ms.js +7 -7
  48. data/vendor/assets/javascripts/flatpickr/l10n/my.js +7 -7
  49. data/vendor/assets/javascripts/flatpickr/l10n/nl.js +8 -8
  50. data/vendor/assets/javascripts/flatpickr/l10n/no.js +7 -7
  51. data/vendor/assets/javascripts/flatpickr/l10n/pa.js +7 -7
  52. data/vendor/assets/javascripts/flatpickr/l10n/pl.js +7 -7
  53. data/vendor/assets/javascripts/flatpickr/l10n/pt.js +7 -7
  54. data/vendor/assets/javascripts/flatpickr/l10n/ro.js +7 -7
  55. data/vendor/assets/javascripts/flatpickr/l10n/ru.js +7 -7
  56. data/vendor/assets/javascripts/flatpickr/l10n/si.js +7 -7
  57. data/vendor/assets/javascripts/flatpickr/l10n/sk.js +7 -7
  58. data/vendor/assets/javascripts/flatpickr/l10n/sl.js +7 -7
  59. data/vendor/assets/javascripts/flatpickr/l10n/sq.js +7 -7
  60. data/vendor/assets/javascripts/flatpickr/l10n/sr-cyr.js +7 -7
  61. data/vendor/assets/javascripts/flatpickr/l10n/sr.js +7 -7
  62. data/vendor/assets/javascripts/flatpickr/l10n/sv.js +7 -7
  63. data/vendor/assets/javascripts/flatpickr/l10n/th.js +7 -7
  64. data/vendor/assets/javascripts/flatpickr/l10n/tr.js +7 -7
  65. data/vendor/assets/javascripts/flatpickr/l10n/uk.js +7 -7
  66. data/vendor/assets/javascripts/flatpickr/l10n/uz.js +75 -0
  67. data/vendor/assets/javascripts/flatpickr/l10n/uz_latn.js +75 -0
  68. data/vendor/assets/javascripts/flatpickr/l10n/vn.js +9 -9
  69. data/vendor/assets/javascripts/flatpickr/l10n/zh-tw.js +7 -7
  70. data/vendor/assets/javascripts/flatpickr/l10n/zh.js +7 -7
  71. data/vendor/assets/javascripts/flatpickr/plugins/confirmDate/confirmDate.js +34 -18
  72. data/vendor/assets/javascripts/flatpickr/plugins/labelPlugin/labelPlugin.js +4 -4
  73. data/vendor/assets/javascripts/flatpickr/plugins/minMaxTimePlugin.js +24 -20
  74. data/vendor/assets/javascripts/flatpickr/plugins/momentPlugin.js +69 -0
  75. data/vendor/assets/javascripts/flatpickr/plugins/monthSelect/index.js +53 -29
  76. data/vendor/assets/javascripts/flatpickr/plugins/rangePlugin.js +167 -142
  77. data/vendor/assets/javascripts/flatpickr/plugins/scrollPlugin.js +33 -6
  78. data/vendor/assets/javascripts/flatpickr/plugins/weekSelect/weekSelect.js +18 -5
  79. data/vendor/assets/javascripts/flatpickr.js +295 -227
  80. data/vendor/assets/stylesheets/flatpickr/themes/airbnb.css +9 -2
  81. data/vendor/assets/stylesheets/flatpickr/themes/confetti.css +11 -4
  82. data/vendor/assets/stylesheets/flatpickr/themes/dark.css +9 -2
  83. data/vendor/assets/stylesheets/flatpickr/themes/light.css +11 -4
  84. data/vendor/assets/stylesheets/flatpickr/themes/material_blue.css +11 -4
  85. data/vendor/assets/stylesheets/flatpickr/themes/material_green.css +11 -4
  86. data/vendor/assets/stylesheets/flatpickr/themes/material_orange.css +11 -4
  87. data/vendor/assets/stylesheets/flatpickr/themes/material_red.css +11 -4
  88. data/vendor/assets/stylesheets/flatpickr.css +9 -2
  89. metadata +12 -8
@@ -1,23 +1,23 @@
1
- /* flatpickr v4.6.2, @license MIT */
1
+ /* flatpickr v4.6.9, @license MIT */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
4
4
  typeof define === 'function' && define.amd ? define(factory) :
5
- (global = global || self, global.flatpickr = factory());
6
- }(this, function () { 'use strict';
5
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.flatpickr = factory());
6
+ }(this, (function () { 'use strict';
7
7
 
8
8
  /*! *****************************************************************************
9
- Copyright (c) Microsoft Corporation. All rights reserved.
10
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use
11
- this file except in compliance with the License. You may obtain a copy of the
12
- License at http://www.apache.org/licenses/LICENSE-2.0
9
+ Copyright (c) Microsoft Corporation.
13
10
 
14
- THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
16
- WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
17
- MERCHANTABLITY OR NON-INFRINGEMENT.
11
+ Permission to use, copy, modify, and/or distribute this software for any
12
+ purpose with or without fee is hereby granted.
18
13
 
19
- See the Apache Version 2.0 License for specific language governing permissions
20
- and limitations under the License.
14
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
15
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
16
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
17
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
18
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
19
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20
+ PERFORMANCE OF THIS SOFTWARE.
21
21
  ***************************************************************************** */
22
22
 
23
23
  var __assign = function() {
@@ -29,7 +29,15 @@
29
29
  return t;
30
30
  };
31
31
  return __assign.apply(this, arguments);
32
- };
32
+ };
33
+
34
+ function __spreadArrays() {
35
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
36
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
37
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
38
+ r[k] = a[j];
39
+ return r;
40
+ }
33
41
 
34
42
  var HOOKS = [
35
43
  "onChange",
@@ -47,14 +55,15 @@
47
55
  ];
48
56
  var defaults = {
49
57
  _disable: [],
50
- _enable: [],
51
58
  allowInput: false,
59
+ allowInvalidPreload: false,
52
60
  altFormat: "F j, Y",
53
61
  altInput: false,
54
62
  altInputClass: "form-control input",
55
63
  animate: typeof window === "object" &&
56
64
  window.navigator.userAgent.indexOf("MSIE") === -1,
57
65
  ariaDateFormat: "F j, Y",
66
+ autoFillDefaultTime: true,
58
67
  clickOpens: true,
59
68
  closeOnSelect: true,
60
69
  conjunction: ", ",
@@ -64,7 +73,6 @@
64
73
  defaultSeconds: 0,
65
74
  disable: [],
66
75
  disableMobile: false,
67
- enable: [],
68
76
  enableSeconds: false,
69
77
  enableTime: false,
70
78
  errorHandler: function (err) {
@@ -115,7 +123,7 @@
115
123
  static: false,
116
124
  time_24hr: false,
117
125
  weekNumbers: false,
118
- wrap: false
126
+ wrap: false,
119
127
  };
120
128
 
121
129
  var english = {
@@ -129,7 +137,7 @@
129
137
  "Thursday",
130
138
  "Friday",
131
139
  "Saturday",
132
- ]
140
+ ],
133
141
  },
134
142
  months: {
135
143
  shorthand: [
@@ -159,7 +167,7 @@
159
167
  "October",
160
168
  "November",
161
169
  "December",
162
- ]
170
+ ],
163
171
  },
164
172
  daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
165
173
  firstDayOfWeek: 0,
@@ -184,27 +192,24 @@
184
192
  toggleTitle: "Click to toggle",
185
193
  amPM: ["AM", "PM"],
186
194
  yearAriaLabel: "Year",
195
+ monthAriaLabel: "Month",
187
196
  hourAriaLabel: "Hour",
188
197
  minuteAriaLabel: "Minute",
189
- time_24hr: false
198
+ time_24hr: false,
190
199
  };
191
200
 
192
- var pad = function (number) { return ("0" + number).slice(-2); };
201
+ var pad = function (number, length) {
202
+ if (length === void 0) { length = 2; }
203
+ return ("000" + number).slice(length * -1);
204
+ };
193
205
  var int = function (bool) { return (bool === true ? 1 : 0); };
194
206
  /* istanbul ignore next */
195
- function debounce(func, wait, immediate) {
196
- if (immediate === void 0) { immediate = false; }
197
- var timeout;
207
+ function debounce(fn, wait) {
208
+ var t;
198
209
  return function () {
199
- var context = this, args = arguments;
200
- timeout !== null && clearTimeout(timeout);
201
- timeout = window.setTimeout(function () {
202
- timeout = null;
203
- if (!immediate)
204
- func.apply(context, args);
205
- }, wait);
206
- if (immediate && !timeout)
207
- func.apply(context, args);
210
+ var _this = this;
211
+ clearTimeout(t);
212
+ t = setTimeout(function () { return fn.apply(_this, arguments); }, wait);
208
213
  };
209
214
  }
210
215
  var arrayify = function (obj) {
@@ -254,11 +259,16 @@
254
259
  return wrapper;
255
260
  }
256
261
  function getEventTarget(event) {
257
- if (typeof event.composedPath === "function") {
258
- var path = event.composedPath();
259
- return path[0];
262
+ try {
263
+ if (typeof event.composedPath === "function") {
264
+ var path = event.composedPath();
265
+ return path[0];
266
+ }
267
+ return event.target;
268
+ }
269
+ catch (error) {
270
+ return event.target;
260
271
  }
261
- return event.target;
262
272
  }
263
273
 
264
274
  var doNothing = function () { return undefined; };
@@ -326,7 +336,7 @@
326
336
  w: doNothing,
327
337
  y: function (dateObj, year) {
328
338
  dateObj.setFullYear(2000 + parseFloat(year));
329
- }
339
+ },
330
340
  };
331
341
  var tokenRegex = {
332
342
  D: "(\\w+)",
@@ -351,7 +361,7 @@
351
361
  s: "(\\d\\d|\\d)",
352
362
  u: "(.+)",
353
363
  w: "(\\d\\d|\\d)",
354
- y: "(\\d{2})"
364
+ y: "(\\d{2})",
355
365
  };
356
366
  var formats = {
357
367
  // get the date in UTC
@@ -389,8 +399,8 @@
389
399
  W: function (date, _, options) {
390
400
  return options.getWeek(date);
391
401
  },
392
- // full year e.g. 2016
393
- Y: function (date) { return date.getFullYear(); },
402
+ // full year e.g. 2016, padded (0001-9999)
403
+ Y: function (date) { return pad(date.getFullYear(), 4); },
394
404
  // day in month, padded (01-30)
395
405
  d: function (date) { return pad(date.getDate()); },
396
406
  // hour from 1-12 (am/pm)
@@ -414,14 +424,14 @@
414
424
  // number of the day of the week
415
425
  w: function (date) { return date.getDay(); },
416
426
  // last two digits of year e.g. 16 for 2016
417
- y: function (date) { return String(date.getFullYear()).substring(2); }
427
+ y: function (date) { return String(date.getFullYear()).substring(2); },
418
428
  };
419
429
 
420
430
  var createDateFormatter = function (_a) {
421
- var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;
431
+ var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;
422
432
  return function (dateObj, frmt, overrideLocale) {
423
433
  var locale = overrideLocale || l10n;
424
- if (config.formatDate !== undefined) {
434
+ if (config.formatDate !== undefined && !isMobile) {
425
435
  return config.formatDate(dateObj, frmt, locale);
426
436
  }
427
437
  return frmt
@@ -481,7 +491,7 @@
481
491
  if (match && (matched = true)) {
482
492
  ops[token_1 !== "Y" ? "push" : "unshift"]({
483
493
  fn: revFormat[token_1],
484
- val: match[++matchIndex]
494
+ val: match[++matchIndex],
485
495
  });
486
496
  }
487
497
  }
@@ -520,8 +530,36 @@
520
530
  return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);
521
531
  };
522
532
  var duration = {
523
- DAY: 86400000
533
+ DAY: 86400000,
524
534
  };
535
+ function getDefaultHours(config) {
536
+ var hours = config.defaultHour;
537
+ var minutes = config.defaultMinute;
538
+ var seconds = config.defaultSeconds;
539
+ if (config.minDate !== undefined) {
540
+ var minHour = config.minDate.getHours();
541
+ var minMinutes = config.minDate.getMinutes();
542
+ var minSeconds = config.minDate.getSeconds();
543
+ if (hours < minHour) {
544
+ hours = minHour;
545
+ }
546
+ if (hours === minHour && minutes < minMinutes) {
547
+ minutes = minMinutes;
548
+ }
549
+ if (hours === minHour && minutes === minMinutes && seconds < minSeconds)
550
+ seconds = config.minDate.getSeconds();
551
+ }
552
+ if (config.maxDate !== undefined) {
553
+ var maxHr = config.maxDate.getHours();
554
+ var maxMinutes = config.maxDate.getMinutes();
555
+ hours = Math.min(hours, maxHr);
556
+ if (hours === maxHr)
557
+ minutes = Math.min(maxMinutes, minutes);
558
+ if (hours === maxHr && minutes === maxMinutes)
559
+ seconds = config.maxDate.getSeconds();
560
+ }
561
+ return { hours: hours, minutes: minutes, seconds: seconds };
562
+ }
525
563
 
526
564
  if (typeof Object.assign !== "function") {
527
565
  Object.assign = function (target) {
@@ -548,8 +586,8 @@
548
586
  var DEBOUNCED_CHANGE_MS = 300;
549
587
  function FlatpickrInstance(element, instanceConfig) {
550
588
  var self = {
551
- config: __assign({}, defaults, flatpickr.defaultConfig),
552
- l10n: english
589
+ config: __assign(__assign({}, defaults), flatpickr.defaultConfig),
590
+ l10n: english,
553
591
  };
554
592
  self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
555
593
  self._handlers = [];
@@ -579,7 +617,7 @@
579
617
  if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))
580
618
  return 29;
581
619
  return self.l10n.daysInMonth[month];
582
- }
620
+ },
583
621
  };
584
622
  }
585
623
  function init() {
@@ -595,15 +633,11 @@
595
633
  bindEvents();
596
634
  if (self.selectedDates.length || self.config.noCalendar) {
597
635
  if (self.config.enableTime) {
598
- setHoursFromDate(self.config.noCalendar
599
- ? self.latestSelectedDateObj || self.config.minDate
600
- : undefined);
636
+ setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);
601
637
  }
602
638
  updateValue(false);
603
639
  }
604
640
  setCalendarWidth();
605
- self.showTimeInput =
606
- self.selectedDates.length > 0 || self.config.noCalendar;
607
641
  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
608
642
  /* TODO: investigate this further
609
643
 
@@ -623,8 +657,9 @@
623
657
  }
624
658
  function setCalendarWidth() {
625
659
  var config = self.config;
626
- if (config.weekNumbers === false && config.showMonths === 1)
660
+ if (config.weekNumbers === false && config.showMonths === 1) {
627
661
  return;
662
+ }
628
663
  else if (config.noCalendar !== true) {
629
664
  window.requestAnimationFrame(function () {
630
665
  if (self.calendarContainer !== undefined) {
@@ -651,7 +686,14 @@
651
686
  */
652
687
  function updateTime(e) {
653
688
  if (self.selectedDates.length === 0) {
654
- setDefaultTime();
689
+ var defaultDate = self.config.minDate === undefined ||
690
+ compareDates(new Date(), self.config.minDate) >= 0
691
+ ? new Date()
692
+ : new Date(self.config.minDate.getTime());
693
+ var defaults = getDefaultHours(self.config);
694
+ defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());
695
+ self.selectedDates = [defaultDate];
696
+ self.latestSelectedDateObj = defaultDate;
655
697
  }
656
698
  if (e !== undefined && e.type !== "blur") {
657
699
  timeWrapper(e);
@@ -714,8 +756,8 @@
714
756
  ? self.config.minTime
715
757
  : self.config.minDate;
716
758
  hours = Math.max(hours, minTime.getHours());
717
- if (hours === minTime.getHours())
718
- minutes = Math.max(minutes, minTime.getMinutes());
759
+ if (hours === minTime.getHours() && minutes < minTime.getMinutes())
760
+ minutes = minTime.getMinutes();
719
761
  if (minutes === minTime.getMinutes())
720
762
  seconds = Math.max(seconds, minTime.getSeconds());
721
763
  }
@@ -726,32 +768,9 @@
726
768
  */
727
769
  function setHoursFromDate(dateObj) {
728
770
  var date = dateObj || self.latestSelectedDateObj;
729
- if (date)
771
+ if (date) {
730
772
  setHours(date.getHours(), date.getMinutes(), date.getSeconds());
731
- }
732
- function setDefaultHours() {
733
- var hours = self.config.defaultHour;
734
- var minutes = self.config.defaultMinute;
735
- var seconds = self.config.defaultSeconds;
736
- if (self.config.minDate !== undefined) {
737
- var minHr = self.config.minDate.getHours();
738
- var minMinutes = self.config.minDate.getMinutes();
739
- hours = Math.max(hours, minHr);
740
- if (hours === minHr)
741
- minutes = Math.max(minMinutes, minutes);
742
- if (hours === minHr && minutes === minMinutes)
743
- seconds = self.config.minDate.getSeconds();
744
- }
745
- if (self.config.maxDate !== undefined) {
746
- var maxHr = self.config.maxDate.getHours();
747
- var maxMinutes = self.config.maxDate.getMinutes();
748
- hours = Math.min(hours, maxHr);
749
- if (hours === maxHr)
750
- minutes = Math.min(maxMinutes, minutes);
751
- if (hours === maxHr && minutes === maxMinutes)
752
- seconds = self.config.maxDate.getSeconds();
753
773
  }
754
- setHours(hours, minutes, seconds);
755
774
  }
756
775
  /**
757
776
  * Sets the hours, minutes, and optionally seconds
@@ -782,7 +801,8 @@
782
801
  * @param {Event} event the keyup or increment event
783
802
  */
784
803
  function onYearInput(event) {
785
- var year = parseInt(event.target.value) + (event.delta || 0);
804
+ var eventTarget = getEventTarget(event);
805
+ var year = parseInt(eventTarget.value) + (event.delta || 0);
786
806
  if (year / 1000 > 1 ||
787
807
  (event.key === "Enter" && !/[^\d]/.test(year.toString()))) {
788
808
  changeYear(year);
@@ -801,24 +821,9 @@
801
821
  return element.forEach(function (el) { return bind(el, event, handler, options); });
802
822
  element.addEventListener(event, handler, options);
803
823
  self._handlers.push({
804
- element: element,
805
- event: event,
806
- handler: handler,
807
- options: options
824
+ remove: function () { return element.removeEventListener(event, handler); },
808
825
  });
809
826
  }
810
- /**
811
- * A mousedown handler which mimics click.
812
- * Minimizes latency, since we don't need to wait for mouseup in most cases.
813
- * Also, avoids handling right clicks.
814
- *
815
- * @param {Function} handler the event handler
816
- */
817
- function onClick(handler) {
818
- return function (evt) {
819
- evt.which === 1 && handler(evt);
820
- };
821
- }
822
827
  function triggerChange() {
823
828
  triggerEvent("onChange");
824
829
  }
@@ -842,7 +847,7 @@
842
847
  if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))
843
848
  bind(self.daysContainer, "mouseover", function (e) {
844
849
  if (self.config.mode === "range")
845
- onMouseOver(e.target);
850
+ onMouseOver(getEventTarget(e));
846
851
  });
847
852
  bind(window.document.body, "keydown", onKeyDown);
848
853
  if (!self.config.inline && !self.config.static)
@@ -850,36 +855,39 @@
850
855
  if (window.ontouchstart !== undefined)
851
856
  bind(window.document, "touchstart", documentClick);
852
857
  else
853
- bind(window.document, "mousedown", onClick(documentClick));
858
+ bind(window.document, "mousedown", documentClick);
854
859
  bind(window.document, "focus", documentClick, { capture: true });
855
860
  if (self.config.clickOpens === true) {
856
861
  bind(self._input, "focus", self.open);
857
- bind(self._input, "mousedown", onClick(self.open));
862
+ bind(self._input, "click", self.open);
858
863
  }
859
864
  if (self.daysContainer !== undefined) {
860
- bind(self.monthNav, "mousedown", onClick(onMonthNavClick));
865
+ bind(self.monthNav, "click", onMonthNavClick);
861
866
  bind(self.monthNav, ["keyup", "increment"], onYearInput);
862
- bind(self.daysContainer, "mousedown", onClick(selectDate));
867
+ bind(self.daysContainer, "click", selectDate);
863
868
  }
864
869
  if (self.timeContainer !== undefined &&
865
870
  self.minuteElement !== undefined &&
866
871
  self.hourElement !== undefined) {
867
872
  var selText = function (e) {
868
- return e.target.select();
873
+ return getEventTarget(e).select();
869
874
  };
870
875
  bind(self.timeContainer, ["increment"], updateTime);
871
876
  bind(self.timeContainer, "blur", updateTime, { capture: true });
872
- bind(self.timeContainer, "mousedown", onClick(timeIncrement));
877
+ bind(self.timeContainer, "click", timeIncrement);
873
878
  bind([self.hourElement, self.minuteElement], ["focus", "click"], selText);
874
879
  if (self.secondElement !== undefined)
875
880
  bind(self.secondElement, "focus", function () { return self.secondElement && self.secondElement.select(); });
876
881
  if (self.amPM !== undefined) {
877
- bind(self.amPM, "mousedown", onClick(function (e) {
882
+ bind(self.amPM, "click", function (e) {
878
883
  updateTime(e);
879
884
  triggerChange();
880
- }));
885
+ });
881
886
  }
882
887
  }
888
+ if (self.config.allowInput) {
889
+ bind(self._input, "blur", onBlur);
890
+ }
883
891
  }
884
892
  /**
885
893
  * Set the calendar view to a particular date.
@@ -923,8 +931,9 @@
923
931
  * @param {Event} e the click event
924
932
  */
925
933
  function timeIncrement(e) {
926
- if (~e.target.className.indexOf("arrow"))
927
- incrementNumInput(e, e.target.classList.contains("arrowUp") ? 1 : -1);
934
+ var eventTarget = getEventTarget(e);
935
+ if (~eventTarget.className.indexOf("arrow"))
936
+ incrementNumInput(e, eventTarget.classList.contains("arrowUp") ? 1 : -1);
928
937
  }
929
938
  /**
930
939
  * Increments/decrements the value of input associ-
@@ -936,7 +945,7 @@
936
945
  * @param {Element} inputElem the input element
937
946
  */
938
947
  function incrementNumInput(e, delta, inputElem) {
939
- var target = e && e.target;
948
+ var target = e && getEventTarget(e);
940
949
  var input = inputElem ||
941
950
  (target && target.parentNode && target.parentNode.firstChild);
942
951
  var event = createEvent("increment");
@@ -1098,16 +1107,20 @@
1098
1107
  : self.todayDateElem !== undefined && isInView(self.todayDateElem)
1099
1108
  ? self.todayDateElem
1100
1109
  : getFirstAvailableDay(offset > 0 ? 1 : -1);
1101
- if (startElem === undefined)
1102
- return self._input.focus();
1103
- if (!dayFocused)
1104
- return focusOnDayElem(startElem);
1105
- getNextAvailableDay(startElem, offset);
1110
+ if (startElem === undefined) {
1111
+ self._input.focus();
1112
+ }
1113
+ else if (!dayFocused) {
1114
+ focusOnDayElem(startElem);
1115
+ }
1116
+ else {
1117
+ getNextAvailableDay(startElem, offset);
1118
+ }
1106
1119
  }
1107
1120
  function buildMonthDays(year, month) {
1108
1121
  var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;
1109
- var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12);
1110
- var daysInMonth = self.utils.getDaysInMonth(month), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? "prevMonthDay hidden" : "prevMonthDay", nextMonthDayClass = isMultiMonth ? "nextMonthDay hidden" : "nextMonthDay";
1122
+ var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);
1123
+ var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? "prevMonthDay hidden" : "prevMonthDay", nextMonthDayClass = isMultiMonth ? "nextMonthDay hidden" : "nextMonthDay";
1111
1124
  var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;
1112
1125
  // prepend days from the ending of previous month
1113
1126
  for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {
@@ -1186,8 +1199,9 @@
1186
1199
  }
1187
1200
  else {
1188
1201
  self.monthsDropdownContainer = createElement("select", "flatpickr-monthDropdown-months");
1202
+ self.monthsDropdownContainer.setAttribute("aria-label", self.l10n.monthAriaLabel);
1189
1203
  bind(self.monthsDropdownContainer, "change", function (e) {
1190
- var target = e.target;
1204
+ var target = getEventTarget(e);
1191
1205
  var selectedMonth = parseInt(target.value, 10);
1192
1206
  self.changeMonth(selectedMonth - self.currentMonth);
1193
1207
  triggerEvent("onMonthChange");
@@ -1215,7 +1229,7 @@
1215
1229
  return {
1216
1230
  container: container,
1217
1231
  yearElement: yearElement,
1218
- monthElement: monthElement
1232
+ monthElement: monthElement,
1219
1233
  };
1220
1234
  }
1221
1235
  function buildMonths() {
@@ -1249,7 +1263,7 @@
1249
1263
  toggleClass(self.prevMonthNav, "flatpickr-disabled", bool);
1250
1264
  self.__hidePrevMonthArrow = bool;
1251
1265
  }
1252
- }
1266
+ },
1253
1267
  });
1254
1268
  Object.defineProperty(self, "_hideNextMonthArrow", {
1255
1269
  get: function () { return self.__hideNextMonthArrow; },
@@ -1258,7 +1272,7 @@
1258
1272
  toggleClass(self.nextMonthNav, "flatpickr-disabled", bool);
1259
1273
  self.__hideNextMonthArrow = bool;
1260
1274
  }
1261
- }
1275
+ },
1262
1276
  });
1263
1277
  self.currentYearElement = self.yearElements[0];
1264
1278
  updateNavigationCurrentMonth();
@@ -1268,32 +1282,35 @@
1268
1282
  self.calendarContainer.classList.add("hasTime");
1269
1283
  if (self.config.noCalendar)
1270
1284
  self.calendarContainer.classList.add("noCalendar");
1285
+ var defaults = getDefaultHours(self.config);
1271
1286
  self.timeContainer = createElement("div", "flatpickr-time");
1272
1287
  self.timeContainer.tabIndex = -1;
1273
1288
  var separator = createElement("span", "flatpickr-time-separator", ":");
1274
1289
  var hourInput = createNumberInput("flatpickr-hour", {
1275
- "aria-label": self.l10n.hourAriaLabel
1290
+ "aria-label": self.l10n.hourAriaLabel,
1276
1291
  });
1277
1292
  self.hourElement = hourInput.getElementsByTagName("input")[0];
1278
1293
  var minuteInput = createNumberInput("flatpickr-minute", {
1279
- "aria-label": self.l10n.minuteAriaLabel
1294
+ "aria-label": self.l10n.minuteAriaLabel,
1280
1295
  });
1281
1296
  self.minuteElement = minuteInput.getElementsByTagName("input")[0];
1282
1297
  self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;
1283
1298
  self.hourElement.value = pad(self.latestSelectedDateObj
1284
1299
  ? self.latestSelectedDateObj.getHours()
1285
1300
  : self.config.time_24hr
1286
- ? self.config.defaultHour
1287
- : military2ampm(self.config.defaultHour));
1301
+ ? defaults.hours
1302
+ : military2ampm(defaults.hours));
1288
1303
  self.minuteElement.value = pad(self.latestSelectedDateObj
1289
1304
  ? self.latestSelectedDateObj.getMinutes()
1290
- : self.config.defaultMinute);
1305
+ : defaults.minutes);
1291
1306
  self.hourElement.setAttribute("step", self.config.hourIncrement.toString());
1292
1307
  self.minuteElement.setAttribute("step", self.config.minuteIncrement.toString());
1293
1308
  self.hourElement.setAttribute("min", self.config.time_24hr ? "0" : "1");
1294
1309
  self.hourElement.setAttribute("max", self.config.time_24hr ? "23" : "12");
1310
+ self.hourElement.setAttribute("maxlength", "2");
1295
1311
  self.minuteElement.setAttribute("min", "0");
1296
1312
  self.minuteElement.setAttribute("max", "59");
1313
+ self.minuteElement.setAttribute("maxlength", "2");
1297
1314
  self.timeContainer.appendChild(hourInput);
1298
1315
  self.timeContainer.appendChild(separator);
1299
1316
  self.timeContainer.appendChild(minuteInput);
@@ -1305,10 +1322,11 @@
1305
1322
  self.secondElement = secondInput.getElementsByTagName("input")[0];
1306
1323
  self.secondElement.value = pad(self.latestSelectedDateObj
1307
1324
  ? self.latestSelectedDateObj.getSeconds()
1308
- : self.config.defaultSeconds);
1325
+ : defaults.seconds);
1309
1326
  self.secondElement.setAttribute("step", self.minuteElement.getAttribute("step"));
1310
1327
  self.secondElement.setAttribute("min", "0");
1311
1328
  self.secondElement.setAttribute("max", "59");
1329
+ self.secondElement.setAttribute("maxlength", "2");
1312
1330
  self.timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":"));
1313
1331
  self.timeContainer.appendChild(secondInput);
1314
1332
  }
@@ -1340,9 +1358,9 @@
1340
1358
  return;
1341
1359
  }
1342
1360
  var firstDayOfWeek = self.l10n.firstDayOfWeek;
1343
- var weekdays = self.l10n.weekdays.shorthand.slice();
1361
+ var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);
1344
1362
  if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {
1345
- weekdays = weekdays.splice(firstDayOfWeek, weekdays.length).concat(weekdays.splice(0, firstDayOfWeek));
1363
+ weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));
1346
1364
  }
1347
1365
  for (var i = self.config.showMonths; i--;) {
1348
1366
  self.weekdayContainer.children[i].innerHTML = "\n <span class='flatpickr-weekday'>\n " + weekdays.join("</span><span class='flatpickr-weekday'>") + "\n </span>\n ";
@@ -1357,7 +1375,7 @@
1357
1375
  weekWrapper.appendChild(weekNumbers);
1358
1376
  return {
1359
1377
  weekWrapper: weekWrapper,
1360
- weekNumbers: weekNumbers
1378
+ weekNumbers: weekNumbers,
1361
1379
  };
1362
1380
  }
1363
1381
  function changeMonth(value, isOffset) {
@@ -1391,9 +1409,9 @@
1391
1409
  self.currentYear = self._initialDate.getFullYear();
1392
1410
  self.currentMonth = self._initialDate.getMonth();
1393
1411
  }
1394
- self.showTimeInput = false;
1395
1412
  if (self.config.enableTime === true) {
1396
- setDefaultHours();
1413
+ var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;
1414
+ setHours(hours, minutes, seconds);
1397
1415
  }
1398
1416
  self.redraw();
1399
1417
  if (triggerChangeEvent)
@@ -1416,8 +1434,7 @@
1416
1434
  if (self.config !== undefined)
1417
1435
  triggerEvent("onDestroy");
1418
1436
  for (var i = self._handlers.length; i--;) {
1419
- var h = self._handlers[i];
1420
- h.element.removeEventListener(h.event, h.handler, h.options);
1437
+ self._handlers[i].remove();
1421
1438
  }
1422
1439
  self._handlers = [];
1423
1440
  if (self.mobileInput) {
@@ -1448,7 +1465,6 @@
1448
1465
  self.input.type = self.input._type;
1449
1466
  self.input.classList.remove("flatpickr-input");
1450
1467
  self.input.removeAttribute("readonly");
1451
- self.input.value = "";
1452
1468
  }
1453
1469
  [
1454
1470
  "_showTimeInput",
@@ -1518,11 +1534,15 @@
1518
1534
  if (lostFocus && isIgnored) {
1519
1535
  if (self.timeContainer !== undefined &&
1520
1536
  self.minuteElement !== undefined &&
1521
- self.hourElement !== undefined) {
1537
+ self.hourElement !== undefined &&
1538
+ self.input.value !== "" &&
1539
+ self.input.value !== undefined) {
1522
1540
  updateTime();
1523
1541
  }
1524
1542
  self.close();
1525
- if (self.config.mode === "range" && self.selectedDates.length === 1) {
1543
+ if (self.config &&
1544
+ self.config.mode === "range" &&
1545
+ self.selectedDates.length === 1) {
1526
1546
  self.clear(false);
1527
1547
  self.redraw();
1528
1548
  }
@@ -1551,6 +1571,7 @@
1551
1571
  }
1552
1572
  }
1553
1573
  function isEnabled(date, timeless) {
1574
+ var _a;
1554
1575
  if (timeless === void 0) { timeless = true; }
1555
1576
  var dateToCheck = self.parseDate(date, undefined, timeless); // timeless
1556
1577
  if ((self.config.minDate &&
@@ -1560,11 +1581,11 @@
1560
1581
  dateToCheck &&
1561
1582
  compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))
1562
1583
  return false;
1563
- if (self.config.enable.length === 0 && self.config.disable.length === 0)
1584
+ if (!self.config.enable && self.config.disable.length === 0)
1564
1585
  return true;
1565
1586
  if (dateToCheck === undefined)
1566
1587
  return false;
1567
- var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;
1588
+ var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;
1568
1589
  for (var i = 0, d = void 0; i < array.length; i++) {
1569
1590
  d = array[i];
1570
1591
  if (typeof d === "function" &&
@@ -1576,7 +1597,7 @@
1576
1597
  d.getTime() === dateToCheck.getTime())
1577
1598
  // disabled by date
1578
1599
  return bool;
1579
- else if (typeof d === "string" && dateToCheck !== undefined) {
1600
+ else if (typeof d === "string") {
1580
1601
  // disabled by date string
1581
1602
  var parsed = self.parseDate(d, undefined, true);
1582
1603
  return parsed && parsed.getTime() === dateToCheck.getTime()
@@ -1598,9 +1619,20 @@
1598
1619
  function isInView(elem) {
1599
1620
  if (self.daysContainer !== undefined)
1600
1621
  return (elem.className.indexOf("hidden") === -1 &&
1622
+ elem.className.indexOf("flatpickr-disabled") === -1 &&
1601
1623
  self.daysContainer.contains(elem));
1602
1624
  return false;
1603
1625
  }
1626
+ function onBlur(e) {
1627
+ var isInput = e.target === self._input;
1628
+ if (isInput &&
1629
+ (self.selectedDates.length > 0 || self._input.value.length > 0) &&
1630
+ !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {
1631
+ self.setDate(self._input.value, true, e.target === self.altInput
1632
+ ? self.config.altFormat
1633
+ : self.config.dateFormat);
1634
+ }
1635
+ }
1604
1636
  function onKeyDown(e) {
1605
1637
  // e.key e.keyCode
1606
1638
  // "Backspace" 8
@@ -1612,26 +1644,29 @@
1612
1644
  // "ArrowRight" (IE "Right") 39
1613
1645
  // "ArrowDown" (IE "Down") 40
1614
1646
  // "Delete" (IE "Del") 46
1615
- var isInput = e.target === self._input;
1647
+ var eventTarget = getEventTarget(e);
1648
+ var isInput = self.config.wrap
1649
+ ? element.contains(eventTarget)
1650
+ : eventTarget === self._input;
1616
1651
  var allowInput = self.config.allowInput;
1617
1652
  var allowKeydown = self.isOpen && (!allowInput || !isInput);
1618
1653
  var allowInlineKeydown = self.config.inline && isInput && !allowInput;
1619
1654
  if (e.keyCode === 13 && isInput) {
1620
1655
  if (allowInput) {
1621
- self.setDate(self._input.value, true, e.target === self.altInput
1656
+ self.setDate(self._input.value, true, eventTarget === self.altInput
1622
1657
  ? self.config.altFormat
1623
1658
  : self.config.dateFormat);
1624
- return e.target.blur();
1659
+ return eventTarget.blur();
1625
1660
  }
1626
1661
  else {
1627
1662
  self.open();
1628
1663
  }
1629
1664
  }
1630
- else if (isCalendarElem(e.target) ||
1665
+ else if (isCalendarElem(eventTarget) ||
1631
1666
  allowKeydown ||
1632
1667
  allowInlineKeydown) {
1633
1668
  var isTimeObj = !!self.timeContainer &&
1634
- self.timeContainer.contains(e.target);
1669
+ self.timeContainer.contains(eventTarget);
1635
1670
  switch (e.keyCode) {
1636
1671
  case 13:
1637
1672
  if (isTimeObj) {
@@ -1677,9 +1712,10 @@
1677
1712
  case 40:
1678
1713
  e.preventDefault();
1679
1714
  var delta = e.keyCode === 40 ? 1 : -1;
1680
- if ((self.daysContainer && e.target.$i !== undefined) ||
1681
- e.target === self.input ||
1682
- e.target === self.altInput) {
1715
+ if ((self.daysContainer &&
1716
+ eventTarget.$i !== undefined) ||
1717
+ eventTarget === self.input ||
1718
+ eventTarget === self.altInput) {
1683
1719
  if (e.ctrlKey) {
1684
1720
  e.stopPropagation();
1685
1721
  changeYear(self.currentYear - delta);
@@ -1688,7 +1724,7 @@
1688
1724
  else if (!isTimeObj)
1689
1725
  focusOnDay(undefined, delta * 7);
1690
1726
  }
1691
- else if (e.target === self.currentYearElement) {
1727
+ else if (eventTarget === self.currentYearElement) {
1692
1728
  changeYear(self.currentYear - delta);
1693
1729
  }
1694
1730
  else if (self.config.enableTime) {
@@ -1708,7 +1744,7 @@
1708
1744
  ]
1709
1745
  .concat(self.pluginElements)
1710
1746
  .filter(function (x) { return x; });
1711
- var i = elems.indexOf(e.target);
1747
+ var i = elems.indexOf(eventTarget);
1712
1748
  if (i !== -1) {
1713
1749
  var target = elems[i + (e.shiftKey ? -1 : 1)];
1714
1750
  e.preventDefault();
@@ -1717,17 +1753,15 @@
1717
1753
  }
1718
1754
  else if (!self.config.noCalendar &&
1719
1755
  self.daysContainer &&
1720
- self.daysContainer.contains(e.target) &&
1756
+ self.daysContainer.contains(eventTarget) &&
1721
1757
  e.shiftKey) {
1722
1758
  e.preventDefault();
1723
1759
  self._input.focus();
1724
1760
  }
1725
1761
  break;
1726
- default:
1727
- break;
1728
1762
  }
1729
1763
  }
1730
- if (self.amPM !== undefined && e.target === self.amPM) {
1764
+ if (self.amPM !== undefined && eventTarget === self.amPM) {
1731
1765
  switch (e.key) {
1732
1766
  case self.l10n.amPM[0].charAt(0):
1733
1767
  case self.l10n.amPM[0].charAt(0).toLowerCase():
@@ -1743,7 +1777,7 @@
1743
1777
  break;
1744
1778
  }
1745
1779
  }
1746
- if (isInput || isCalendarElem(e.target)) {
1780
+ if (isInput || isCalendarElem(eventTarget)) {
1747
1781
  triggerEvent("onKeyDown", e);
1748
1782
  }
1749
1783
  }
@@ -1810,19 +1844,15 @@
1810
1844
  if (self.isOpen && !self.config.static && !self.config.inline)
1811
1845
  positionCalendar();
1812
1846
  }
1813
- function setDefaultTime() {
1814
- self.setDate(self.config.minDate !== undefined
1815
- ? new Date(self.config.minDate.getTime())
1816
- : new Date(), true);
1817
- setDefaultHours();
1818
- updateValue();
1819
- }
1820
1847
  function open(e, positionElement) {
1821
1848
  if (positionElement === void 0) { positionElement = self._positionElement; }
1822
1849
  if (self.isMobile === true) {
1823
1850
  if (e) {
1824
1851
  e.preventDefault();
1825
- e.target && e.target.blur();
1852
+ var eventTarget = getEventTarget(e);
1853
+ if (eventTarget) {
1854
+ eventTarget.blur();
1855
+ }
1826
1856
  }
1827
1857
  if (self.mobileInput !== undefined) {
1828
1858
  self.mobileInput.focus();
@@ -1831,8 +1861,9 @@
1831
1861
  triggerEvent("onOpen");
1832
1862
  return;
1833
1863
  }
1834
- if (self._input.disabled || self.config.inline)
1864
+ else if (self._input.disabled || self.config.inline) {
1835
1865
  return;
1866
+ }
1836
1867
  var wasOpen = self.isOpen;
1837
1868
  self.isOpen = true;
1838
1869
  if (!wasOpen) {
@@ -1842,9 +1873,6 @@
1842
1873
  positionCalendar(positionElement);
1843
1874
  }
1844
1875
  if (self.config.enableTime === true && self.config.noCalendar === true) {
1845
- if (self.selectedDates.length === 0) {
1846
- setDefaultTime();
1847
- }
1848
1876
  if (self.config.allowInput === false &&
1849
1877
  (e === undefined ||
1850
1878
  !self.timeContainer.contains(e.relatedTarget))) {
@@ -1886,6 +1914,7 @@
1886
1914
  "wrap",
1887
1915
  "weekNumbers",
1888
1916
  "allowInput",
1917
+ "allowInvalidPreload",
1889
1918
  "clickOpens",
1890
1919
  "time_24hr",
1891
1920
  "enableTime",
@@ -1897,7 +1926,7 @@
1897
1926
  "enableSeconds",
1898
1927
  "disableMobile",
1899
1928
  ];
1900
- var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));
1929
+ var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);
1901
1930
  var formats = {};
1902
1931
  self.config.parseDate = userConfig.parseDate;
1903
1932
  self.config.formatDate = userConfig.formatDate;
@@ -1905,13 +1934,13 @@
1905
1934
  get: function () { return self.config._enable; },
1906
1935
  set: function (dates) {
1907
1936
  self.config._enable = parseDateRules(dates);
1908
- }
1937
+ },
1909
1938
  });
1910
1939
  Object.defineProperty(self.config, "disable", {
1911
1940
  get: function () { return self.config._disable; },
1912
1941
  set: function (dates) {
1913
1942
  self.config._disable = parseDateRules(dates);
1914
- }
1943
+ },
1915
1944
  });
1916
1945
  var timeMode = userConfig.mode === "time";
1917
1946
  if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {
@@ -1930,28 +1959,24 @@
1930
1959
  ? "h:i" + (userConfig.enableSeconds ? ":S K" : " K")
1931
1960
  : defaultAltFormat + (" h:i" + (userConfig.enableSeconds ? ":S" : "") + " K");
1932
1961
  }
1933
- if (!userConfig.altInputClass) {
1934
- self.config.altInputClass =
1935
- self.input.className + " " + self.config.altInputClass;
1936
- }
1937
1962
  Object.defineProperty(self.config, "minDate", {
1938
1963
  get: function () { return self.config._minDate; },
1939
- set: minMaxDateSetter("min")
1964
+ set: minMaxDateSetter("min"),
1940
1965
  });
1941
1966
  Object.defineProperty(self.config, "maxDate", {
1942
1967
  get: function () { return self.config._maxDate; },
1943
- set: minMaxDateSetter("max")
1968
+ set: minMaxDateSetter("max"),
1944
1969
  });
1945
1970
  var minMaxTimeSetter = function (type) { return function (val) {
1946
1971
  self.config[type === "min" ? "_minTime" : "_maxTime"] = self.parseDate(val, "H:i:S");
1947
1972
  }; };
1948
1973
  Object.defineProperty(self.config, "minTime", {
1949
1974
  get: function () { return self.config._minTime; },
1950
- set: minMaxTimeSetter("min")
1975
+ set: minMaxTimeSetter("min"),
1951
1976
  });
1952
1977
  Object.defineProperty(self.config, "maxTime", {
1953
1978
  get: function () { return self.config._maxTime; },
1954
- set: minMaxTimeSetter("max")
1979
+ set: minMaxTimeSetter("max"),
1955
1980
  });
1956
1981
  if (userConfig.mode === "time") {
1957
1982
  self.config.noCalendar = true;
@@ -1959,6 +1984,7 @@
1959
1984
  }
1960
1985
  Object.assign(self.config, formats, userConfig);
1961
1986
  for (var i = 0; i < boolOpts.length; i++)
1987
+ // https://github.com/microsoft/TypeScript/issues/31663
1962
1988
  self.config[boolOpts[i]] =
1963
1989
  self.config[boolOpts[i]] === true ||
1964
1990
  self.config[boolOpts[i]] === "true";
@@ -1970,7 +1996,7 @@
1970
1996
  !self.config.inline &&
1971
1997
  self.config.mode === "single" &&
1972
1998
  !self.config.disable.length &&
1973
- !self.config.enable.length &&
1999
+ !self.config.enable &&
1974
2000
  !self.config.weekNumbers &&
1975
2001
  /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
1976
2002
  for (var i = 0; i < self.config.plugins.length; i++) {
@@ -1985,19 +2011,28 @@
1985
2011
  self.config[key] = pluginConf[key];
1986
2012
  }
1987
2013
  }
2014
+ if (!userConfig.altInputClass) {
2015
+ self.config.altInputClass =
2016
+ getInputElem().className + " " + self.config.altInputClass;
2017
+ }
1988
2018
  triggerEvent("onParseConfig");
1989
2019
  }
2020
+ function getInputElem() {
2021
+ return self.config.wrap
2022
+ ? element.querySelector("[data-input]")
2023
+ : element;
2024
+ }
1990
2025
  function setupLocale() {
1991
2026
  if (typeof self.config.locale !== "object" &&
1992
2027
  typeof flatpickr.l10ns[self.config.locale] === "undefined")
1993
2028
  self.config.errorHandler(new Error("flatpickr: invalid locale " + self.config.locale));
1994
- self.l10n = __assign({}, flatpickr.l10ns["default"], (typeof self.config.locale === "object"
2029
+ self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === "object"
1995
2030
  ? self.config.locale
1996
2031
  : self.config.locale !== "default"
1997
2032
  ? flatpickr.l10ns[self.config.locale]
1998
2033
  : undefined));
1999
2034
  tokenRegex.K = "(" + self.l10n.amPM[0] + "|" + self.l10n.amPM[1] + "|" + self.l10n.amPM[0].toLowerCase() + "|" + self.l10n.amPM[1].toLowerCase() + ")";
2000
- var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));
2035
+ var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));
2001
2036
  if (userConfig.time_24hr === undefined &&
2002
2037
  flatpickr.defaultConfig.time_24hr === undefined) {
2003
2038
  self.config.time_24hr = self.l10n.time_24hr;
@@ -2006,6 +2041,9 @@
2006
2041
  self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
2007
2042
  }
2008
2043
  function positionCalendar(customPositionElement) {
2044
+ if (typeof self.config.position === "function") {
2045
+ return void self.config.position(self, customPositionElement);
2046
+ }
2009
2047
  if (self.calendarContainer === undefined)
2010
2048
  return;
2011
2049
  triggerEvent("onPreCalendarPosition");
@@ -2021,12 +2059,22 @@
2021
2059
  toggleClass(self.calendarContainer, "arrowBottom", showOnTop);
2022
2060
  if (self.config.inline)
2023
2061
  return;
2024
- var left = window.pageXOffset +
2025
- inputBounds.left -
2026
- (configPosHorizontal != null && configPosHorizontal === "center"
2027
- ? (calendarWidth - inputBounds.width) / 2
2028
- : 0);
2029
- var right = window.document.body.offsetWidth - (window.pageXOffset + inputBounds.right);
2062
+ var left = window.pageXOffset + inputBounds.left;
2063
+ var isCenter = false;
2064
+ var isRight = false;
2065
+ if (configPosHorizontal === "center") {
2066
+ left -= (calendarWidth - inputBounds.width) / 2;
2067
+ isCenter = true;
2068
+ }
2069
+ else if (configPosHorizontal === "right") {
2070
+ left -= calendarWidth - inputBounds.width;
2071
+ isRight = true;
2072
+ }
2073
+ toggleClass(self.calendarContainer, "arrowLeft", !isCenter && !isRight);
2074
+ toggleClass(self.calendarContainer, "arrowCenter", isCenter);
2075
+ toggleClass(self.calendarContainer, "arrowRight", isRight);
2076
+ var right = window.document.body.offsetWidth -
2077
+ (window.pageXOffset + inputBounds.right);
2030
2078
  var rightMost = left + calendarWidth > window.document.body.offsetWidth;
2031
2079
  var centerMost = right + calendarWidth > window.document.body.offsetWidth;
2032
2080
  toggleClass(self.calendarContainer, "rightMost", rightMost);
@@ -2042,7 +2090,7 @@
2042
2090
  self.calendarContainer.style.right = right + "px";
2043
2091
  }
2044
2092
  else {
2045
- var doc = document.styleSheets[0];
2093
+ var doc = getDocumentStyleSheet();
2046
2094
  // some testing environments don't have css support
2047
2095
  if (doc === undefined)
2048
2096
  return;
@@ -2059,9 +2107,30 @@
2059
2107
  self.calendarContainer.style.right = "auto";
2060
2108
  }
2061
2109
  }
2110
+ function getDocumentStyleSheet() {
2111
+ var editableSheet = null;
2112
+ for (var i = 0; i < document.styleSheets.length; i++) {
2113
+ var sheet = document.styleSheets[i];
2114
+ try {
2115
+ sheet.cssRules;
2116
+ }
2117
+ catch (err) {
2118
+ continue;
2119
+ }
2120
+ editableSheet = sheet;
2121
+ break;
2122
+ }
2123
+ return editableSheet != null ? editableSheet : createStyleSheet();
2124
+ }
2125
+ function createStyleSheet() {
2126
+ var style = document.createElement("style");
2127
+ document.head.appendChild(style);
2128
+ return style.sheet;
2129
+ }
2062
2130
  function redraw() {
2063
2131
  if (self.config.noCalendar || self.isMobile)
2064
2132
  return;
2133
+ buildMonthSwitch();
2065
2134
  updateNavigationCurrentMonth();
2066
2135
  buildDays();
2067
2136
  }
@@ -2085,7 +2154,7 @@
2085
2154
  !day.classList.contains("flatpickr-disabled") &&
2086
2155
  !day.classList.contains("notAllowed");
2087
2156
  };
2088
- var t = findParent(e.target, isSelectable);
2157
+ var t = findParent(getEventTarget(e), isSelectable);
2089
2158
  if (t === undefined)
2090
2159
  return;
2091
2160
  var target = t;
@@ -2128,8 +2197,6 @@
2128
2197
  updateNavigationCurrentMonth();
2129
2198
  buildDays();
2130
2199
  updateValue();
2131
- if (self.config.enableTime)
2132
- setTimeout(function () { return (self.showTimeInput = true); }, 50);
2133
2200
  // maintain focus
2134
2201
  if (!shouldChangeMonth &&
2135
2202
  self.config.mode !== "range" &&
@@ -2156,7 +2223,19 @@
2156
2223
  locale: [setupLocale, updateWeekdays],
2157
2224
  showMonths: [buildMonths, setCalendarWidth, buildWeekdays],
2158
2225
  minDate: [jumpToDate],
2159
- maxDate: [jumpToDate]
2226
+ maxDate: [jumpToDate],
2227
+ clickOpens: [
2228
+ function () {
2229
+ if (self.config.clickOpens === true) {
2230
+ bind(self._input, "focus", self.open);
2231
+ bind(self._input, "click", self.open);
2232
+ }
2233
+ else {
2234
+ self._input.removeEventListener("focus", self.open);
2235
+ self._input.removeEventListener("click", self.open);
2236
+ }
2237
+ },
2238
+ ],
2160
2239
  };
2161
2240
  function set(option, value) {
2162
2241
  if (option !== null && typeof option === "object") {
@@ -2174,7 +2253,7 @@
2174
2253
  self.config[option] = arrayify(value);
2175
2254
  }
2176
2255
  self.redraw();
2177
- updateValue(false);
2256
+ updateValue(true);
2178
2257
  }
2179
2258
  function setSelectedDate(inputDate, format) {
2180
2259
  var dates = [];
@@ -2198,13 +2277,13 @@
2198
2277
  .split(self.l10n.rangeSeparator)
2199
2278
  .map(function (date) { return self.parseDate(date, format); });
2200
2279
  break;
2201
- default:
2202
- break;
2203
2280
  }
2204
2281
  }
2205
2282
  else
2206
2283
  self.config.errorHandler(new Error("Invalid date supplied: " + JSON.stringify(inputDate)));
2207
- self.selectedDates = dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); });
2284
+ self.selectedDates = (self.config.allowInvalidPreload
2285
+ ? dates
2286
+ : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));
2208
2287
  if (self.config.mode === "range")
2209
2288
  self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
2210
2289
  }
@@ -2214,11 +2293,10 @@
2214
2293
  if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))
2215
2294
  return self.clear(triggerChange);
2216
2295
  setSelectedDate(date, format);
2217
- self.showTimeInput = self.selectedDates.length > 0;
2218
2296
  self.latestSelectedDateObj =
2219
2297
  self.selectedDates[self.selectedDates.length - 1];
2220
2298
  self.redraw();
2221
- jumpToDate();
2299
+ jumpToDate(undefined, triggerChange);
2222
2300
  setHoursFromDate();
2223
2301
  if (self.selectedDates.length === 0) {
2224
2302
  self.clear(false);
@@ -2242,7 +2320,7 @@
2242
2320
  rule.to)
2243
2321
  return {
2244
2322
  from: self.parseDate(rule.from, undefined),
2245
- to: self.parseDate(rule.to, undefined)
2323
+ to: self.parseDate(rule.to, undefined),
2246
2324
  };
2247
2325
  return rule;
2248
2326
  })
@@ -2289,20 +2367,9 @@
2289
2367
  (self.config.maxDate.getHours() > 0 ||
2290
2368
  self.config.maxDate.getMinutes() > 0 ||
2291
2369
  self.config.maxDate.getSeconds() > 0);
2292
- Object.defineProperty(self, "showTimeInput", {
2293
- get: function () { return self._showTimeInput; },
2294
- set: function (bool) {
2295
- self._showTimeInput = bool;
2296
- if (self.calendarContainer)
2297
- toggleClass(self.calendarContainer, "showTimeInput", bool);
2298
- self.isOpen && positionCalendar();
2299
- }
2300
- });
2301
2370
  }
2302
2371
  function setupInputs() {
2303
- self.input = self.config.wrap
2304
- ? element.querySelector("[data-input]")
2305
- : element;
2372
+ self.input = getInputElem();
2306
2373
  /* istanbul ignore next */
2307
2374
  if (!self.input) {
2308
2375
  self.config.errorHandler(new Error("Invalid input element specified"));
@@ -2337,7 +2404,6 @@
2337
2404
  : "datetime-local"
2338
2405
  : "date";
2339
2406
  self.mobileInput = createElement("input", self.input.className + " flatpickr-mobile");
2340
- self.mobileInput.step = self.input.getAttribute("step") || "any";
2341
2407
  self.mobileInput.tabIndex = 1;
2342
2408
  self.mobileInput.type = inputType;
2343
2409
  self.mobileInput.disabled = self.input.disabled;
@@ -2356,6 +2422,8 @@
2356
2422
  self.mobileInput.min = self.formatDate(self.config.minDate, "Y-m-d");
2357
2423
  if (self.config.maxDate)
2358
2424
  self.mobileInput.max = self.formatDate(self.config.maxDate, "Y-m-d");
2425
+ if (self.input.getAttribute("step"))
2426
+ self.mobileInput.step = String(self.input.getAttribute("step"));
2359
2427
  self.input.type = "hidden";
2360
2428
  if (self.altInput !== undefined)
2361
2429
  self.altInput.type = "hidden";
@@ -2365,7 +2433,7 @@
2365
2433
  }
2366
2434
  catch (_a) { }
2367
2435
  bind(self.mobileInput, "change", function (e) {
2368
- self.setDate(e.target.value, false, self.mobileFormatStr);
2436
+ self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);
2369
2437
  triggerEvent("onChange");
2370
2438
  triggerEvent("onClose");
2371
2439
  });
@@ -2466,25 +2534,26 @@
2466
2534
  triggerEvent("onValueUpdate");
2467
2535
  }
2468
2536
  function onMonthNavClick(e) {
2469
- var isPrevMonth = self.prevMonthNav.contains(e.target);
2470
- var isNextMonth = self.nextMonthNav.contains(e.target);
2537
+ var eventTarget = getEventTarget(e);
2538
+ var isPrevMonth = self.prevMonthNav.contains(eventTarget);
2539
+ var isNextMonth = self.nextMonthNav.contains(eventTarget);
2471
2540
  if (isPrevMonth || isNextMonth) {
2472
2541
  changeMonth(isPrevMonth ? -1 : 1);
2473
2542
  }
2474
- else if (self.yearElements.indexOf(e.target) >= 0) {
2475
- e.target.select();
2543
+ else if (self.yearElements.indexOf(eventTarget) >= 0) {
2544
+ eventTarget.select();
2476
2545
  }
2477
- else if (e.target.classList.contains("arrowUp")) {
2546
+ else if (eventTarget.classList.contains("arrowUp")) {
2478
2547
  self.changeYear(self.currentYear + 1);
2479
2548
  }
2480
- else if (e.target.classList.contains("arrowDown")) {
2549
+ else if (eventTarget.classList.contains("arrowDown")) {
2481
2550
  self.changeYear(self.currentYear - 1);
2482
2551
  }
2483
2552
  }
2484
2553
  function timeWrapper(e) {
2485
2554
  e.preventDefault();
2486
- var isKeyDown = e.type === "keydown", input = e.target;
2487
- if (self.amPM !== undefined && e.target === self.amPM) {
2555
+ var isKeyDown = e.type === "keydown", eventTarget = getEventTarget(e), input = eventTarget;
2556
+ if (self.amPM !== undefined && eventTarget === self.amPM) {
2488
2557
  self.amPM.textContent =
2489
2558
  self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
2490
2559
  }
@@ -2575,13 +2644,13 @@
2575
2644
  flatpickr.defaultConfig = {};
2576
2645
  flatpickr.l10ns = {
2577
2646
  en: __assign({}, english),
2578
- "default": __assign({}, english)
2647
+ default: __assign({}, english),
2579
2648
  };
2580
2649
  flatpickr.localize = function (l10n) {
2581
- flatpickr.l10ns["default"] = __assign({}, flatpickr.l10ns["default"], l10n);
2650
+ flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);
2582
2651
  };
2583
2652
  flatpickr.setDefaults = function (config) {
2584
- flatpickr.defaultConfig = __assign({}, flatpickr.defaultConfig, config);
2653
+ flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);
2585
2654
  };
2586
2655
  flatpickr.parseDate = createDateParser({});
2587
2656
  flatpickr.formatDate = createDateFormatter({});
@@ -2592,7 +2661,6 @@
2592
2661
  return _flatpickr(this, config);
2593
2662
  };
2594
2663
  }
2595
- // eslint-disable-next-line @typescript-eslint/camelcase
2596
2664
  Date.prototype.fp_incr = function (days) {
2597
2665
  return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === "string" ? parseInt(days, 10) : days));
2598
2666
  };
@@ -2602,4 +2670,4 @@
2602
2670
 
2603
2671
  return flatpickr;
2604
2672
 
2605
- }));
2673
+ })));