flatpickr 4.6.6.0 → 4.6.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/lib/flatpickr/version.rb +1 -1
  3. data/package.json +5 -0
  4. data/vendor/assets/javascripts/flatpickr/l10n/ar-dz.js +61 -0
  5. data/vendor/assets/javascripts/flatpickr/l10n/ar.js +12 -2
  6. data/vendor/assets/javascripts/flatpickr/l10n/at.js +2 -1
  7. data/vendor/assets/javascripts/flatpickr/l10n/az.js +1 -1
  8. data/vendor/assets/javascripts/flatpickr/l10n/be.js +1 -1
  9. data/vendor/assets/javascripts/flatpickr/l10n/bg.js +1 -1
  10. data/vendor/assets/javascripts/flatpickr/l10n/bn.js +1 -1
  11. data/vendor/assets/javascripts/flatpickr/l10n/bs.js +1 -1
  12. data/vendor/assets/javascripts/flatpickr/l10n/cat.js +2 -1
  13. data/vendor/assets/javascripts/flatpickr/l10n/ckb.js +68 -0
  14. data/vendor/assets/javascripts/flatpickr/l10n/cs.js +1 -1
  15. data/vendor/assets/javascripts/flatpickr/l10n/cy.js +1 -1
  16. data/vendor/assets/javascripts/flatpickr/l10n/da.js +1 -1
  17. data/vendor/assets/javascripts/flatpickr/l10n/de.js +1 -1
  18. data/vendor/assets/javascripts/flatpickr/l10n/default.js +1 -1
  19. data/vendor/assets/javascripts/flatpickr/l10n/eo.js +1 -1
  20. data/vendor/assets/javascripts/flatpickr/l10n/es.js +1 -1
  21. data/vendor/assets/javascripts/flatpickr/l10n/et.js +1 -1
  22. data/vendor/assets/javascripts/flatpickr/l10n/fa.js +1 -1
  23. data/vendor/assets/javascripts/flatpickr/l10n/fi.js +33 -33
  24. data/vendor/assets/javascripts/flatpickr/l10n/fo.js +1 -1
  25. data/vendor/assets/javascripts/flatpickr/l10n/fr.js +1 -1
  26. data/vendor/assets/javascripts/flatpickr/l10n/ga.js +1 -1
  27. data/vendor/assets/javascripts/flatpickr/l10n/gr.js +7 -3
  28. data/vendor/assets/javascripts/flatpickr/l10n/he.js +1 -1
  29. data/vendor/assets/javascripts/flatpickr/l10n/hi.js +1 -1
  30. data/vendor/assets/javascripts/flatpickr/l10n/hr.js +1 -1
  31. data/vendor/assets/javascripts/flatpickr/l10n/hu.js +1 -1
  32. data/vendor/assets/javascripts/flatpickr/l10n/hy.js +86 -0
  33. data/vendor/assets/javascripts/flatpickr/l10n/id.js +1 -1
  34. data/vendor/assets/javascripts/flatpickr/l10n/index.js +442 -226
  35. data/vendor/assets/javascripts/flatpickr/l10n/is.js +1 -1
  36. data/vendor/assets/javascripts/flatpickr/l10n/it.js +1 -1
  37. data/vendor/assets/javascripts/flatpickr/l10n/ja.js +6 -2
  38. data/vendor/assets/javascripts/flatpickr/l10n/ka.js +1 -1
  39. data/vendor/assets/javascripts/flatpickr/l10n/km.js +1 -1
  40. data/vendor/assets/javascripts/flatpickr/l10n/ko.js +2 -1
  41. data/vendor/assets/javascripts/flatpickr/l10n/kz.js +1 -1
  42. data/vendor/assets/javascripts/flatpickr/l10n/lt.js +1 -1
  43. data/vendor/assets/javascripts/flatpickr/l10n/lv.js +1 -1
  44. data/vendor/assets/javascripts/flatpickr/l10n/mk.js +1 -1
  45. data/vendor/assets/javascripts/flatpickr/l10n/mn.js +1 -1
  46. data/vendor/assets/javascripts/flatpickr/l10n/ms.js +3 -3
  47. data/vendor/assets/javascripts/flatpickr/l10n/my.js +1 -1
  48. data/vendor/assets/javascripts/flatpickr/l10n/nl.js +1 -1
  49. data/vendor/assets/javascripts/flatpickr/l10n/nn.js +73 -0
  50. data/vendor/assets/javascripts/flatpickr/l10n/no.js +1 -1
  51. data/vendor/assets/javascripts/flatpickr/l10n/pa.js +1 -1
  52. data/vendor/assets/javascripts/flatpickr/l10n/pl.js +1 -1
  53. data/vendor/assets/javascripts/flatpickr/l10n/pt.js +1 -1
  54. data/vendor/assets/javascripts/flatpickr/l10n/ro.js +1 -1
  55. data/vendor/assets/javascripts/flatpickr/l10n/ru.js +1 -1
  56. data/vendor/assets/javascripts/flatpickr/l10n/si.js +1 -1
  57. data/vendor/assets/javascripts/flatpickr/l10n/sk.js +1 -1
  58. data/vendor/assets/javascripts/flatpickr/l10n/sl.js +1 -1
  59. data/vendor/assets/javascripts/flatpickr/l10n/sq.js +1 -1
  60. data/vendor/assets/javascripts/flatpickr/l10n/sr-cyr.js +1 -1
  61. data/vendor/assets/javascripts/flatpickr/l10n/sr.js +1 -1
  62. data/vendor/assets/javascripts/flatpickr/l10n/sv.js +34 -33
  63. data/vendor/assets/javascripts/flatpickr/l10n/th.js +1 -1
  64. data/vendor/assets/javascripts/flatpickr/l10n/tr.js +1 -1
  65. data/vendor/assets/javascripts/flatpickr/l10n/uk.js +1 -1
  66. data/vendor/assets/javascripts/flatpickr/l10n/uz.js +1 -1
  67. data/vendor/assets/javascripts/flatpickr/l10n/uz_latn.js +1 -1
  68. data/vendor/assets/javascripts/flatpickr/l10n/vn.js +3 -3
  69. data/vendor/assets/javascripts/flatpickr/l10n/zh-tw.js +1 -1
  70. data/vendor/assets/javascripts/flatpickr/l10n/zh.js +1 -1
  71. data/vendor/assets/javascripts/flatpickr/plugins/confirmDate/confirmDate.js +6 -2
  72. data/vendor/assets/javascripts/flatpickr/plugins/labelPlugin/labelPlugin.js +1 -1
  73. data/vendor/assets/javascripts/flatpickr/plugins/minMaxTimePlugin.js +24 -7
  74. data/vendor/assets/javascripts/flatpickr/plugins/momentPlugin.js +1 -1
  75. data/vendor/assets/javascripts/flatpickr/plugins/monthSelect/index.js +108 -53
  76. data/vendor/assets/javascripts/flatpickr/plugins/rangePlugin.js +26 -16
  77. data/vendor/assets/javascripts/flatpickr/plugins/scrollPlugin.js +23 -15
  78. data/vendor/assets/javascripts/flatpickr/plugins/weekSelect/weekSelect.js +1 -1
  79. data/vendor/assets/javascripts/flatpickr.js +220 -164
  80. data/vendor/assets/stylesheets/flatpickr/plugins/monthSelect/style.css +45 -7
  81. data/vendor/assets/stylesheets/flatpickr/themes/airbnb.css +4 -0
  82. data/vendor/assets/stylesheets/flatpickr/themes/confetti.css +4 -0
  83. data/vendor/assets/stylesheets/flatpickr/themes/dark.css +4 -0
  84. data/vendor/assets/stylesheets/flatpickr/themes/light.css +4 -0
  85. data/vendor/assets/stylesheets/flatpickr/themes/material_blue.css +4 -0
  86. data/vendor/assets/stylesheets/flatpickr/themes/material_green.css +4 -0
  87. data/vendor/assets/stylesheets/flatpickr/themes/material_orange.css +4 -0
  88. data/vendor/assets/stylesheets/flatpickr/themes/material_red.css +4 -0
  89. data/vendor/assets/stylesheets/flatpickr.css +4 -0
  90. metadata +12 -7
@@ -1,8 +1,8 @@
1
- /* flatpickr v4.6.6, @license MIT */
1
+ /* flatpickr v4.6.11, @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());
5
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.flatpickr = factory());
6
6
  }(this, (function () { 'use strict';
7
7
 
8
8
  /*! *****************************************************************************
@@ -55,7 +55,6 @@
55
55
  ];
56
56
  var defaults = {
57
57
  _disable: [],
58
- _enable: [],
59
58
  allowInput: false,
60
59
  allowInvalidPreload: false,
61
60
  altFormat: "F j, Y",
@@ -74,7 +73,6 @@
74
73
  defaultSeconds: 0,
75
74
  disable: [],
76
75
  disableMobile: false,
77
- enable: [],
78
76
  enableSeconds: false,
79
77
  enableTime: false,
80
78
  errorHandler: function (err) {
@@ -206,19 +204,13 @@
206
204
  };
207
205
  var int = function (bool) { return (bool === true ? 1 : 0); };
208
206
  /* istanbul ignore next */
209
- function debounce(func, wait, immediate) {
210
- if (immediate === void 0) { immediate = false; }
211
- var timeout;
207
+ function debounce(fn, wait) {
208
+ var t;
212
209
  return function () {
213
- var context = this, args = arguments;
214
- timeout !== null && clearTimeout(timeout);
215
- timeout = window.setTimeout(function () {
216
- timeout = null;
217
- if (!immediate)
218
- func.apply(context, args);
219
- }, wait);
220
- if (immediate && !timeout)
221
- func.apply(context, args);
210
+ var _this = this;
211
+ var args = arguments;
212
+ clearTimeout(t);
213
+ t = setTimeout(function () { return fn.apply(_this, args); }, wait);
222
214
  };
223
215
  }
224
216
  var arrayify = function (obj) {
@@ -288,7 +280,7 @@
288
280
  dateObj.setMonth(locale.months.longhand.indexOf(monthName));
289
281
  },
290
282
  G: function (dateObj, hour) {
291
- dateObj.setHours(parseFloat(hour));
283
+ dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));
292
284
  },
293
285
  H: function (dateObj, hour) {
294
286
  dateObj.setHours(parseFloat(hour));
@@ -321,7 +313,7 @@
321
313
  dateObj.setDate(parseFloat(day));
322
314
  },
323
315
  h: function (dateObj, hour) {
324
- dateObj.setHours(parseFloat(hour));
316
+ dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));
325
317
  },
326
318
  i: function (dateObj, minutes) {
327
319
  dateObj.setMinutes(parseFloat(minutes));
@@ -348,13 +340,13 @@
348
340
  },
349
341
  };
350
342
  var tokenRegex = {
351
- D: "(\\w+)",
352
- F: "(\\w+)",
343
+ D: "",
344
+ F: "",
353
345
  G: "(\\d\\d|\\d)",
354
346
  H: "(\\d\\d|\\d)",
355
347
  J: "(\\d\\d|\\d)\\w+",
356
348
  K: "",
357
- M: "(\\w+)",
349
+ M: "",
358
350
  S: "(\\d\\d|\\d)",
359
351
  U: "(.+)",
360
352
  W: "(\\d\\d|\\d)",
@@ -364,7 +356,7 @@
364
356
  h: "(\\d\\d|\\d)",
365
357
  i: "(\\d\\d|\\d)",
366
358
  j: "(\\d\\d|\\d)",
367
- l: "(\\w+)",
359
+ l: "",
368
360
  m: "(\\d\\d|\\d)",
369
361
  n: "(\\d\\d|\\d)",
370
362
  s: "(\\d\\d|\\d)",
@@ -478,17 +470,15 @@
478
470
  parsedDate = new Date();
479
471
  timeless = true;
480
472
  }
473
+ else if (config && config.parseDate) {
474
+ parsedDate = config.parseDate(date, format);
475
+ }
481
476
  else if (/Z$/.test(datestr) ||
482
477
  /GMT$/.test(datestr) // datestrings w/ timezone
483
- )
478
+ ) {
484
479
  parsedDate = new Date(date);
485
- else if (config && config.parseDate)
486
- parsedDate = config.parseDate(date, format);
480
+ }
487
481
  else {
488
- parsedDate =
489
- !config || !config.noCalendar
490
- ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)
491
- : new Date(new Date().setHours(0, 0, 0, 0));
492
482
  var matched = void 0, ops = [];
493
483
  for (var i = 0, matchIndex = 0, regexStr = ""; i < format.length; i++) {
494
484
  var token_1 = format[i];
@@ -506,11 +496,15 @@
506
496
  }
507
497
  else if (!isBackSlash)
508
498
  regexStr += "."; // don't really care
509
- ops.forEach(function (_a) {
510
- var fn = _a.fn, val = _a.val;
511
- return (parsedDate = fn(parsedDate, val, locale) || parsedDate);
512
- });
513
499
  }
500
+ parsedDate =
501
+ !config || !config.noCalendar
502
+ ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)
503
+ : new Date(new Date().setHours(0, 0, 0, 0));
504
+ ops.forEach(function (_a) {
505
+ var fn = _a.fn, val = _a.val;
506
+ return (parsedDate = fn(parsedDate, val, locale) || parsedDate);
507
+ });
514
508
  parsedDate = matched ? parsedDate : undefined;
515
509
  }
516
510
  }
@@ -538,9 +532,44 @@
538
532
  var isBetween = function (ts, ts1, ts2) {
539
533
  return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);
540
534
  };
535
+ var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {
536
+ return hours * 3600 + minutes * 60 + seconds;
537
+ };
538
+ var parseSeconds = function (secondsSinceMidnight) {
539
+ var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;
540
+ return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];
541
+ };
541
542
  var duration = {
542
543
  DAY: 86400000,
543
544
  };
545
+ function getDefaultHours(config) {
546
+ var hours = config.defaultHour;
547
+ var minutes = config.defaultMinute;
548
+ var seconds = config.defaultSeconds;
549
+ if (config.minDate !== undefined) {
550
+ var minHour = config.minDate.getHours();
551
+ var minMinutes = config.minDate.getMinutes();
552
+ var minSeconds = config.minDate.getSeconds();
553
+ if (hours < minHour) {
554
+ hours = minHour;
555
+ }
556
+ if (hours === minHour && minutes < minMinutes) {
557
+ minutes = minMinutes;
558
+ }
559
+ if (hours === minHour && minutes === minMinutes && seconds < minSeconds)
560
+ seconds = config.minDate.getSeconds();
561
+ }
562
+ if (config.maxDate !== undefined) {
563
+ var maxHr = config.maxDate.getHours();
564
+ var maxMinutes = config.maxDate.getMinutes();
565
+ hours = Math.min(hours, maxHr);
566
+ if (hours === maxHr)
567
+ minutes = Math.min(maxMinutes, minutes);
568
+ if (hours === maxHr && minutes === maxMinutes)
569
+ seconds = config.maxDate.getSeconds();
570
+ }
571
+ return { hours: hours, minutes: minutes, seconds: seconds };
572
+ }
544
573
 
545
574
  if (typeof Object.assign !== "function") {
546
575
  Object.assign = function (target) {
@@ -581,10 +610,13 @@
581
610
  self.changeYear = changeYear;
582
611
  self.clear = clear;
583
612
  self.close = close;
613
+ self.onMouseOver = onMouseOver;
584
614
  self._createElement = createElement;
615
+ self.createDay = createDay;
585
616
  self.destroy = destroy;
586
617
  self.isEnabled = isEnabled;
587
618
  self.jumpToDate = jumpToDate;
619
+ self.updateValue = updateValue;
588
620
  self.open = open;
589
621
  self.redraw = redraw;
590
622
  self.set = set;
@@ -614,9 +646,7 @@
614
646
  bindEvents();
615
647
  if (self.selectedDates.length || self.config.noCalendar) {
616
648
  if (self.config.enableTime) {
617
- setHoursFromDate(self.config.noCalendar
618
- ? self.latestSelectedDateObj || self.config.minDate
619
- : undefined);
649
+ setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);
620
650
  }
621
651
  updateValue(false);
622
652
  }
@@ -635,6 +665,10 @@
635
665
  }
636
666
  triggerEvent("onReady");
637
667
  }
668
+ function getClosestActiveElement() {
669
+ var _a;
670
+ return ((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode()).activeElement || document.activeElement;
671
+ }
638
672
  function bindToInstance(fn) {
639
673
  return fn.bind(self);
640
674
  }
@@ -669,12 +703,14 @@
669
703
  */
670
704
  function updateTime(e) {
671
705
  if (self.selectedDates.length === 0) {
672
- var defaultDate = self.config.minDate !== undefined
673
- ? new Date(self.config.minDate.getTime())
674
- : new Date();
675
- var _a = getDefaultHours(), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;
676
- defaultDate.setHours(hours, minutes, seconds, 0);
677
- self.setDate(defaultDate, false);
706
+ var defaultDate = self.config.minDate === undefined ||
707
+ compareDates(new Date(), self.config.minDate) >= 0
708
+ ? new Date()
709
+ : new Date(self.config.minDate.getTime());
710
+ var defaults = getDefaultHours(self.config);
711
+ defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());
712
+ self.selectedDates = [defaultDate];
713
+ self.latestSelectedDateObj = defaultDate;
678
714
  }
679
715
  if (e !== undefined && e.type !== "blur") {
680
716
  timeWrapper(e);
@@ -722,25 +758,40 @@
722
758
  self.latestSelectedDateObj &&
723
759
  compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===
724
760
  0);
725
- if (limitMaxHours) {
726
- var maxTime = self.config.maxTime !== undefined
727
- ? self.config.maxTime
728
- : self.config.maxDate;
729
- hours = Math.min(hours, maxTime.getHours());
730
- if (hours === maxTime.getHours())
731
- minutes = Math.min(minutes, maxTime.getMinutes());
732
- if (minutes === maxTime.getMinutes())
733
- seconds = Math.min(seconds, maxTime.getSeconds());
734
- }
735
- if (limitMinHours) {
736
- var minTime = self.config.minTime !== undefined
737
- ? self.config.minTime
738
- : self.config.minDate;
739
- hours = Math.max(hours, minTime.getHours());
740
- if (hours === minTime.getHours())
741
- minutes = Math.max(minutes, minTime.getMinutes());
742
- if (minutes === minTime.getMinutes())
743
- seconds = Math.max(seconds, minTime.getSeconds());
761
+ if (self.config.maxTime !== undefined &&
762
+ self.config.minTime !== undefined &&
763
+ self.config.minTime > self.config.maxTime) {
764
+ var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());
765
+ var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());
766
+ var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);
767
+ if (currentTime > maxBound && currentTime < minBound) {
768
+ var result = parseSeconds(minBound);
769
+ hours = result[0];
770
+ minutes = result[1];
771
+ seconds = result[2];
772
+ }
773
+ }
774
+ else {
775
+ if (limitMaxHours) {
776
+ var maxTime = self.config.maxTime !== undefined
777
+ ? self.config.maxTime
778
+ : self.config.maxDate;
779
+ hours = Math.min(hours, maxTime.getHours());
780
+ if (hours === maxTime.getHours())
781
+ minutes = Math.min(minutes, maxTime.getMinutes());
782
+ if (minutes === maxTime.getMinutes())
783
+ seconds = Math.min(seconds, maxTime.getSeconds());
784
+ }
785
+ if (limitMinHours) {
786
+ var minTime = self.config.minTime !== undefined
787
+ ? self.config.minTime
788
+ : self.config.minDate;
789
+ hours = Math.max(hours, minTime.getHours());
790
+ if (hours === minTime.getHours() && minutes < minTime.getMinutes())
791
+ minutes = minTime.getMinutes();
792
+ if (minutes === minTime.getMinutes())
793
+ seconds = Math.max(seconds, minTime.getSeconds());
794
+ }
744
795
  }
745
796
  setHours(hours, minutes, seconds);
746
797
  }
@@ -749,34 +800,10 @@
749
800
  */
750
801
  function setHoursFromDate(dateObj) {
751
802
  var date = dateObj || self.latestSelectedDateObj;
752
- if (date) {
803
+ if (date && date instanceof Date) {
753
804
  setHours(date.getHours(), date.getMinutes(), date.getSeconds());
754
805
  }
755
806
  }
756
- function getDefaultHours() {
757
- var hours = self.config.defaultHour;
758
- var minutes = self.config.defaultMinute;
759
- var seconds = self.config.defaultSeconds;
760
- if (self.config.minDate !== undefined) {
761
- var minHr = self.config.minDate.getHours();
762
- var minMinutes = self.config.minDate.getMinutes();
763
- hours = Math.max(hours, minHr);
764
- if (hours === minHr)
765
- minutes = Math.max(minMinutes, minutes);
766
- if (hours === minHr && minutes === minMinutes)
767
- seconds = self.config.minDate.getSeconds();
768
- }
769
- if (self.config.maxDate !== undefined) {
770
- var maxHr = self.config.maxDate.getHours();
771
- var maxMinutes = self.config.maxDate.getMinutes();
772
- hours = Math.min(hours, maxHr);
773
- if (hours === maxHr)
774
- minutes = Math.min(maxMinutes, minutes);
775
- if (hours === maxHr && minutes === maxMinutes)
776
- seconds = self.config.maxDate.getSeconds();
777
- }
778
- return { hours: hours, minutes: minutes, seconds: seconds };
779
- }
780
807
  /**
781
808
  * Sets the hours, minutes, and optionally seconds
782
809
  * of the latest selected date object and the
@@ -826,10 +853,7 @@
826
853
  return element.forEach(function (el) { return bind(el, event, handler, options); });
827
854
  element.addEventListener(event, handler, options);
828
855
  self._handlers.push({
829
- element: element,
830
- event: event,
831
- handler: handler,
832
- options: options,
856
+ remove: function () { return element.removeEventListener(event, handler, options); },
833
857
  });
834
858
  }
835
859
  function triggerChange() {
@@ -857,13 +881,16 @@
857
881
  if (self.config.mode === "range")
858
882
  onMouseOver(getEventTarget(e));
859
883
  });
860
- bind(window.document.body, "keydown", onKeyDown);
884
+ bind(self._input, "keydown", onKeyDown);
885
+ if (self.calendarContainer !== undefined) {
886
+ bind(self.calendarContainer, "keydown", onKeyDown);
887
+ }
861
888
  if (!self.config.inline && !self.config.static)
862
889
  bind(window, "resize", debouncedResize);
863
890
  if (window.ontouchstart !== undefined)
864
891
  bind(window.document, "touchstart", documentClick);
865
892
  else
866
- bind(window.document, "click", documentClick);
893
+ bind(window.document, "mousedown", documentClick);
867
894
  bind(window.document, "focus", documentClick, { capture: true });
868
895
  if (self.config.clickOpens === true) {
869
896
  bind(self._input, "focus", self.open);
@@ -889,12 +916,12 @@
889
916
  if (self.amPM !== undefined) {
890
917
  bind(self.amPM, "click", function (e) {
891
918
  updateTime(e);
892
- triggerChange();
893
919
  });
894
920
  }
895
921
  }
896
- if (self.config.allowInput)
922
+ if (self.config.allowInput) {
897
923
  bind(self._input, "blur", onBlur);
924
+ }
898
925
  }
899
926
  /**
900
927
  * Set the calendar view to a particular date.
@@ -1016,7 +1043,7 @@
1016
1043
  : window.document.body).appendChild(self.calendarContainer);
1017
1044
  }
1018
1045
  function createDay(className, date, dayNumber, i) {
1019
- var dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", "flatpickr-day " + className, date.getDate().toString());
1046
+ var dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", className, date.getDate().toString());
1020
1047
  dayElement.dateObj = date;
1021
1048
  dayElement.$i = i;
1022
1049
  dayElement.setAttribute("aria-label", self.formatDate(date, self.config.ariaDateFormat));
@@ -1104,11 +1131,12 @@
1104
1131
  return undefined;
1105
1132
  }
1106
1133
  function focusOnDay(current, offset) {
1107
- var dayFocused = isInView(document.activeElement || document.body);
1134
+ var activeElement = getClosestActiveElement();
1135
+ var dayFocused = isInView(activeElement || document.body);
1108
1136
  var startElem = current !== undefined
1109
1137
  ? current
1110
1138
  : dayFocused
1111
- ? document.activeElement
1139
+ ? activeElement
1112
1140
  : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)
1113
1141
  ? self.selectedDateElem
1114
1142
  : self.todayDateElem !== undefined && isInView(self.todayDateElem)
@@ -1131,16 +1159,16 @@
1131
1159
  var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;
1132
1160
  // prepend days from the ending of previous month
1133
1161
  for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {
1134
- days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));
1162
+ days.appendChild(createDay("flatpickr-day " + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));
1135
1163
  }
1136
1164
  // Start at 1 since there is no 0th day
1137
1165
  for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {
1138
- days.appendChild(createDay("", new Date(year, month, dayNumber), dayNumber, dayIndex));
1166
+ days.appendChild(createDay("flatpickr-day", new Date(year, month, dayNumber), dayNumber, dayIndex));
1139
1167
  }
1140
1168
  // append days from the next month
1141
1169
  for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&
1142
1170
  (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {
1143
- days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));
1171
+ days.appendChild(createDay("flatpickr-day " + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));
1144
1172
  }
1145
1173
  //updateNavigationCurrentMonth();
1146
1174
  var dayContainer = createElement("div", "dayContainer");
@@ -1289,6 +1317,7 @@
1289
1317
  self.calendarContainer.classList.add("hasTime");
1290
1318
  if (self.config.noCalendar)
1291
1319
  self.calendarContainer.classList.add("noCalendar");
1320
+ var defaults = getDefaultHours(self.config);
1292
1321
  self.timeContainer = createElement("div", "flatpickr-time");
1293
1322
  self.timeContainer.tabIndex = -1;
1294
1323
  var separator = createElement("span", "flatpickr-time-separator", ":");
@@ -1304,17 +1333,19 @@
1304
1333
  self.hourElement.value = pad(self.latestSelectedDateObj
1305
1334
  ? self.latestSelectedDateObj.getHours()
1306
1335
  : self.config.time_24hr
1307
- ? self.config.defaultHour
1308
- : military2ampm(self.config.defaultHour));
1336
+ ? defaults.hours
1337
+ : military2ampm(defaults.hours));
1309
1338
  self.minuteElement.value = pad(self.latestSelectedDateObj
1310
1339
  ? self.latestSelectedDateObj.getMinutes()
1311
- : self.config.defaultMinute);
1340
+ : defaults.minutes);
1312
1341
  self.hourElement.setAttribute("step", self.config.hourIncrement.toString());
1313
1342
  self.minuteElement.setAttribute("step", self.config.minuteIncrement.toString());
1314
1343
  self.hourElement.setAttribute("min", self.config.time_24hr ? "0" : "1");
1315
1344
  self.hourElement.setAttribute("max", self.config.time_24hr ? "23" : "12");
1345
+ self.hourElement.setAttribute("maxlength", "2");
1316
1346
  self.minuteElement.setAttribute("min", "0");
1317
1347
  self.minuteElement.setAttribute("max", "59");
1348
+ self.minuteElement.setAttribute("maxlength", "2");
1318
1349
  self.timeContainer.appendChild(hourInput);
1319
1350
  self.timeContainer.appendChild(separator);
1320
1351
  self.timeContainer.appendChild(minuteInput);
@@ -1326,10 +1357,11 @@
1326
1357
  self.secondElement = secondInput.getElementsByTagName("input")[0];
1327
1358
  self.secondElement.value = pad(self.latestSelectedDateObj
1328
1359
  ? self.latestSelectedDateObj.getSeconds()
1329
- : self.config.defaultSeconds);
1360
+ : defaults.seconds);
1330
1361
  self.secondElement.setAttribute("step", self.minuteElement.getAttribute("step"));
1331
1362
  self.secondElement.setAttribute("min", "0");
1332
1363
  self.secondElement.setAttribute("max", "59");
1364
+ self.secondElement.setAttribute("maxlength", "2");
1333
1365
  self.timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":"));
1334
1366
  self.timeContainer.appendChild(secondInput);
1335
1367
  }
@@ -1413,7 +1445,7 @@
1413
1445
  self.currentMonth = self._initialDate.getMonth();
1414
1446
  }
1415
1447
  if (self.config.enableTime === true) {
1416
- var _a = getDefaultHours(), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;
1448
+ var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;
1417
1449
  setHours(hours, minutes, seconds);
1418
1450
  }
1419
1451
  self.redraw();
@@ -1437,8 +1469,7 @@
1437
1469
  if (self.config !== undefined)
1438
1470
  triggerEvent("onDestroy");
1439
1471
  for (var i = self._handlers.length; i--;) {
1440
- var h = self._handlers[i];
1441
- h.element.removeEventListener(h.event, h.handler, h.options);
1472
+ self._handlers[i].remove();
1442
1473
  }
1443
1474
  self._handlers = [];
1444
1475
  if (self.mobileInput) {
@@ -1508,8 +1539,6 @@
1508
1539
  });
1509
1540
  }
1510
1541
  function isCalendarElem(elem) {
1511
- if (self.config.appendTo && self.config.appendTo.contains(elem))
1512
- return true;
1513
1542
  return self.calendarContainer.contains(elem);
1514
1543
  }
1515
1544
  function documentClick(e) {
@@ -1525,17 +1554,18 @@
1525
1554
  e.path.indexOf &&
1526
1555
  (~e.path.indexOf(self.input) ||
1527
1556
  ~e.path.indexOf(self.altInput)));
1528
- var lostFocus = e.type === "blur"
1529
- ? isInput &&
1530
- e.relatedTarget &&
1531
- !isCalendarElem(e.relatedTarget)
1532
- : !isInput &&
1533
- !isCalendarElement &&
1534
- !isCalendarElem(e.relatedTarget);
1557
+ var lostFocus = !isInput &&
1558
+ !isCalendarElement &&
1559
+ !isCalendarElem(e.relatedTarget);
1535
1560
  var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {
1536
1561
  return elem.contains(eventTarget_1);
1537
1562
  });
1538
1563
  if (lostFocus && isIgnored) {
1564
+ if (self.config.allowInput) {
1565
+ self.setDate(self._input.value, false, self.config.altInput
1566
+ ? self.config.altFormat
1567
+ : self.config.dateFormat);
1568
+ }
1539
1569
  if (self.timeContainer !== undefined &&
1540
1570
  self.minuteElement !== undefined &&
1541
1571
  self.hourElement !== undefined &&
@@ -1546,10 +1576,8 @@
1546
1576
  self.close();
1547
1577
  if (self.config &&
1548
1578
  self.config.mode === "range" &&
1549
- self.selectedDates.length === 1) {
1579
+ self.selectedDates.length === 1)
1550
1580
  self.clear(false);
1551
- self.redraw();
1552
- }
1553
1581
  }
1554
1582
  }
1555
1583
  }
@@ -1575,6 +1603,7 @@
1575
1603
  }
1576
1604
  }
1577
1605
  function isEnabled(date, timeless) {
1606
+ var _a;
1578
1607
  if (timeless === void 0) { timeless = true; }
1579
1608
  var dateToCheck = self.parseDate(date, undefined, timeless); // timeless
1580
1609
  if ((self.config.minDate &&
@@ -1584,11 +1613,11 @@
1584
1613
  dateToCheck &&
1585
1614
  compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))
1586
1615
  return false;
1587
- if (self.config.enable.length === 0 && self.config.disable.length === 0)
1616
+ if (!self.config.enable && self.config.disable.length === 0)
1588
1617
  return true;
1589
1618
  if (dateToCheck === undefined)
1590
1619
  return false;
1591
- var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;
1620
+ var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;
1592
1621
  for (var i = 0, d = void 0; i < array.length; i++) {
1593
1622
  d = array[i];
1594
1623
  if (typeof d === "function" &&
@@ -1600,7 +1629,7 @@
1600
1629
  d.getTime() === dateToCheck.getTime())
1601
1630
  // disabled by date
1602
1631
  return bool;
1603
- else if (typeof d === "string" && dateToCheck !== undefined) {
1632
+ else if (typeof d === "string") {
1604
1633
  // disabled by date string
1605
1634
  var parsed = self.parseDate(d, undefined, true);
1606
1635
  return parsed && parsed.getTime() === dateToCheck.getTime()
@@ -1629,6 +1658,7 @@
1629
1658
  function onBlur(e) {
1630
1659
  var isInput = e.target === self._input;
1631
1660
  if (isInput &&
1661
+ (self.selectedDates.length > 0 || self._input.value.length > 0) &&
1632
1662
  !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {
1633
1663
  self.setDate(self._input.value, true, e.target === self.altInput
1634
1664
  ? self.config.altFormat
@@ -1658,6 +1688,7 @@
1658
1688
  self.setDate(self._input.value, true, eventTarget === self.altInput
1659
1689
  ? self.config.altFormat
1660
1690
  : self.config.dateFormat);
1691
+ self.close();
1661
1692
  return eventTarget.blur();
1662
1693
  }
1663
1694
  else {
@@ -1694,9 +1725,10 @@
1694
1725
  case 39:
1695
1726
  if (!isTimeObj && !isInput) {
1696
1727
  e.preventDefault();
1728
+ var activeElement = getClosestActiveElement();
1697
1729
  if (self.daysContainer !== undefined &&
1698
1730
  (allowInput === false ||
1699
- (document.activeElement && isInView(document.activeElement)))) {
1731
+ (activeElement && isInView(activeElement)))) {
1700
1732
  var delta_1 = e.keyCode === 39 ? 1 : -1;
1701
1733
  if (!e.ctrlKey)
1702
1734
  focusOnDay(undefined, delta_1);
@@ -1783,10 +1815,11 @@
1783
1815
  triggerEvent("onKeyDown", e);
1784
1816
  }
1785
1817
  }
1786
- function onMouseOver(elem) {
1818
+ function onMouseOver(elem, cellClass) {
1819
+ if (cellClass === void 0) { cellClass = "flatpickr-day"; }
1787
1820
  if (self.selectedDates.length !== 1 ||
1788
1821
  (elem &&
1789
- (!elem.classList.contains("flatpickr-day") ||
1822
+ (!elem.classList.contains(cellClass) ||
1790
1823
  elem.classList.contains("flatpickr-disabled"))))
1791
1824
  return;
1792
1825
  var hoverDate = elem
@@ -1804,43 +1837,38 @@
1804
1837
  maxRange = t;
1805
1838
  }
1806
1839
  }
1807
- for (var m = 0; m < self.config.showMonths; m++) {
1808
- var month = self.daysContainer.children[m];
1809
- var _loop_1 = function (i, l) {
1810
- var dayElem = month.children[i], date = dayElem.dateObj;
1811
- var timestamp = date.getTime();
1812
- var outOfRange = (minRange > 0 && timestamp < minRange) ||
1813
- (maxRange > 0 && timestamp > maxRange);
1814
- if (outOfRange) {
1815
- dayElem.classList.add("notAllowed");
1816
- ["inRange", "startRange", "endRange"].forEach(function (c) {
1817
- dayElem.classList.remove(c);
1818
- });
1819
- return "continue";
1820
- }
1821
- else if (containsDisabled && !outOfRange)
1822
- return "continue";
1823
- ["startRange", "inRange", "endRange", "notAllowed"].forEach(function (c) {
1840
+ var hoverableCells = Array.from(self.rContainer.querySelectorAll("*:nth-child(-n+" + self.config.showMonths + ") > ." + cellClass));
1841
+ hoverableCells.forEach(function (dayElem) {
1842
+ var date = dayElem.dateObj;
1843
+ var timestamp = date.getTime();
1844
+ var outOfRange = (minRange > 0 && timestamp < minRange) ||
1845
+ (maxRange > 0 && timestamp > maxRange);
1846
+ if (outOfRange) {
1847
+ dayElem.classList.add("notAllowed");
1848
+ ["inRange", "startRange", "endRange"].forEach(function (c) {
1824
1849
  dayElem.classList.remove(c);
1825
1850
  });
1826
- if (elem !== undefined) {
1827
- elem.classList.add(hoverDate <= self.selectedDates[0].getTime()
1828
- ? "startRange"
1829
- : "endRange");
1830
- if (initialDate < hoverDate && timestamp === initialDate)
1831
- dayElem.classList.add("startRange");
1832
- else if (initialDate > hoverDate && timestamp === initialDate)
1833
- dayElem.classList.add("endRange");
1834
- if (timestamp >= minRange &&
1835
- (maxRange === 0 || timestamp <= maxRange) &&
1836
- isBetween(timestamp, initialDate, hoverDate))
1837
- dayElem.classList.add("inRange");
1838
- }
1839
- };
1840
- for (var i = 0, l = month.children.length; i < l; i++) {
1841
- _loop_1(i, l);
1851
+ return;
1842
1852
  }
1843
- }
1853
+ else if (containsDisabled && !outOfRange)
1854
+ return;
1855
+ ["startRange", "inRange", "endRange", "notAllowed"].forEach(function (c) {
1856
+ dayElem.classList.remove(c);
1857
+ });
1858
+ if (elem !== undefined) {
1859
+ elem.classList.add(hoverDate <= self.selectedDates[0].getTime()
1860
+ ? "startRange"
1861
+ : "endRange");
1862
+ if (initialDate < hoverDate && timestamp === initialDate)
1863
+ dayElem.classList.add("startRange");
1864
+ else if (initialDate > hoverDate && timestamp === initialDate)
1865
+ dayElem.classList.add("endRange");
1866
+ if (timestamp >= minRange &&
1867
+ (maxRange === 0 || timestamp <= maxRange) &&
1868
+ isBetween(timestamp, initialDate, hoverDate))
1869
+ dayElem.classList.add("inRange");
1870
+ }
1871
+ });
1844
1872
  }
1845
1873
  function onResize() {
1846
1874
  if (self.isOpen && !self.config.static && !self.config.inline)
@@ -1852,7 +1880,9 @@
1852
1880
  if (e) {
1853
1881
  e.preventDefault();
1854
1882
  var eventTarget = getEventTarget(e);
1855
- eventTarget && eventTarget.blur();
1883
+ if (eventTarget) {
1884
+ eventTarget.blur();
1885
+ }
1856
1886
  }
1857
1887
  if (self.mobileInput !== undefined) {
1858
1888
  self.mobileInput.focus();
@@ -1861,8 +1891,9 @@
1861
1891
  triggerEvent("onOpen");
1862
1892
  return;
1863
1893
  }
1864
- if (self._input.disabled || self.config.inline)
1894
+ else if (self._input.disabled || self.config.inline) {
1865
1895
  return;
1896
+ }
1866
1897
  var wasOpen = self.isOpen;
1867
1898
  self.isOpen = true;
1868
1899
  if (!wasOpen) {
@@ -1995,7 +2026,7 @@
1995
2026
  !self.config.inline &&
1996
2027
  self.config.mode === "single" &&
1997
2028
  !self.config.disable.length &&
1998
- !self.config.enable.length &&
2029
+ !self.config.enable &&
1999
2030
  !self.config.weekNumbers &&
2000
2031
  /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
2001
2032
  for (var i = 0; i < self.config.plugins.length; i++) {
@@ -2030,6 +2061,10 @@
2030
2061
  : self.config.locale !== "default"
2031
2062
  ? flatpickr.l10ns[self.config.locale]
2032
2063
  : undefined));
2064
+ tokenRegex.D = "(" + self.l10n.weekdays.shorthand.join("|") + ")";
2065
+ tokenRegex.l = "(" + self.l10n.weekdays.longhand.join("|") + ")";
2066
+ tokenRegex.M = "(" + self.l10n.months.shorthand.join("|") + ")";
2067
+ tokenRegex.F = "(" + self.l10n.months.longhand.join("|") + ")";
2033
2068
  tokenRegex.K = "(" + self.l10n.amPM[0] + "|" + self.l10n.amPM[1] + "|" + self.l10n.amPM[0].toLowerCase() + "|" + self.l10n.amPM[1].toLowerCase() + ")";
2034
2069
  var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));
2035
2070
  if (userConfig.time_24hr === undefined &&
@@ -2040,6 +2075,9 @@
2040
2075
  self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
2041
2076
  }
2042
2077
  function positionCalendar(customPositionElement) {
2078
+ if (typeof self.config.position === "function") {
2079
+ return void self.config.position(self, customPositionElement);
2080
+ }
2043
2081
  if (self.calendarContainer === undefined)
2044
2082
  return;
2045
2083
  triggerEvent("onPreCalendarPosition");
@@ -2107,6 +2145,8 @@
2107
2145
  var editableSheet = null;
2108
2146
  for (var i = 0; i < document.styleSheets.length; i++) {
2109
2147
  var sheet = document.styleSheets[i];
2148
+ if (!sheet.cssRules)
2149
+ continue;
2110
2150
  try {
2111
2151
  sheet.cssRules;
2112
2152
  }
@@ -2220,6 +2260,19 @@
2220
2260
  showMonths: [buildMonths, setCalendarWidth, buildWeekdays],
2221
2261
  minDate: [jumpToDate],
2222
2262
  maxDate: [jumpToDate],
2263
+ positionElement: [updatePositionElement],
2264
+ clickOpens: [
2265
+ function () {
2266
+ if (self.config.clickOpens === true) {
2267
+ bind(self._input, "focus", self.open);
2268
+ bind(self._input, "click", self.open);
2269
+ }
2270
+ else {
2271
+ self._input.removeEventListener("focus", self.open);
2272
+ self._input.removeEventListener("click", self.open);
2273
+ }
2274
+ },
2275
+ ],
2223
2276
  };
2224
2277
  function set(option, value) {
2225
2278
  if (option !== null && typeof option === "object") {
@@ -2379,6 +2432,9 @@
2379
2432
  }
2380
2433
  if (!self.config.allowInput)
2381
2434
  self._input.setAttribute("readonly", "readonly");
2435
+ updatePositionElement();
2436
+ }
2437
+ function updatePositionElement() {
2382
2438
  self._positionElement = self.config.positionElement || self._input;
2383
2439
  }
2384
2440
  function setupMobile() {
@@ -2449,7 +2505,8 @@
2449
2505
  }
2450
2506
  function isDateSelected(date) {
2451
2507
  for (var i = 0; i < self.selectedDates.length; i++) {
2452
- if (compareDates(self.selectedDates[i], date) === 0)
2508
+ var selectedDate = self.selectedDates[i];
2509
+ if (selectedDate instanceof Date && compareDates(selectedDate, date) === 0)
2453
2510
  return "" + i;
2454
2511
  }
2455
2512
  return false;
@@ -2645,7 +2702,6 @@
2645
2702
  return _flatpickr(this, config);
2646
2703
  };
2647
2704
  }
2648
- // eslint-disable-next-line @typescript-eslint/camelcase
2649
2705
  Date.prototype.fp_incr = function (days) {
2650
2706
  return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === "string" ? parseInt(days, 10) : days));
2651
2707
  };