flatpickr 4.6.3.0 → 4.6.13.1

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 (98) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/lib/flatpickr/version.rb +1 -1
  4. data/vendor/assets/javascripts/flatpickr/l10n/ar-dz.js +61 -0
  5. data/vendor/assets/javascripts/flatpickr/l10n/ar.js +17 -7
  6. data/vendor/assets/javascripts/flatpickr/l10n/at.js +8 -7
  7. data/vendor/assets/javascripts/flatpickr/l10n/az.js +8 -8
  8. data/vendor/assets/javascripts/flatpickr/l10n/be.js +7 -7
  9. data/vendor/assets/javascripts/flatpickr/l10n/bg.js +7 -7
  10. data/vendor/assets/javascripts/flatpickr/l10n/bn.js +7 -7
  11. data/vendor/assets/javascripts/flatpickr/l10n/bs.js +7 -7
  12. data/vendor/assets/javascripts/flatpickr/l10n/cat.js +9 -8
  13. data/vendor/assets/javascripts/flatpickr/l10n/ckb.js +76 -0
  14. data/vendor/assets/javascripts/flatpickr/l10n/cs.js +7 -7
  15. data/vendor/assets/javascripts/flatpickr/l10n/cy.js +7 -7
  16. data/vendor/assets/javascripts/flatpickr/l10n/da.js +7 -7
  17. data/vendor/assets/javascripts/flatpickr/l10n/de.js +7 -7
  18. data/vendor/assets/javascripts/flatpickr/l10n/default.js +7 -6
  19. data/vendor/assets/javascripts/flatpickr/l10n/eo.js +7 -7
  20. data/vendor/assets/javascripts/flatpickr/l10n/es.js +7 -7
  21. data/vendor/assets/javascripts/flatpickr/l10n/et.js +7 -7
  22. data/vendor/assets/javascripts/flatpickr/l10n/fa.js +7 -7
  23. data/vendor/assets/javascripts/flatpickr/l10n/fi.js +39 -39
  24. data/vendor/assets/javascripts/flatpickr/l10n/fo.js +7 -7
  25. data/vendor/assets/javascripts/flatpickr/l10n/fr.js +7 -7
  26. data/vendor/assets/javascripts/flatpickr/l10n/ga.js +7 -7
  27. data/vendor/assets/javascripts/flatpickr/l10n/gr.js +13 -9
  28. data/vendor/assets/javascripts/flatpickr/l10n/he.js +7 -7
  29. data/vendor/assets/javascripts/flatpickr/l10n/hi.js +7 -7
  30. data/vendor/assets/javascripts/flatpickr/l10n/hr.js +7 -7
  31. data/vendor/assets/javascripts/flatpickr/l10n/hu.js +7 -7
  32. data/vendor/assets/javascripts/flatpickr/l10n/hy.js +78 -0
  33. data/vendor/assets/javascripts/flatpickr/l10n/id.js +7 -7
  34. data/vendor/assets/javascripts/flatpickr/l10n/index.js +820 -474
  35. data/vendor/assets/javascripts/flatpickr/l10n/is.js +7 -7
  36. data/vendor/assets/javascripts/flatpickr/l10n/it.js +7 -7
  37. data/vendor/assets/javascripts/flatpickr/l10n/ja.js +11 -7
  38. data/vendor/assets/javascripts/flatpickr/l10n/ka.js +7 -7
  39. data/vendor/assets/javascripts/flatpickr/l10n/km.js +7 -7
  40. data/vendor/assets/javascripts/flatpickr/l10n/ko.js +8 -7
  41. data/vendor/assets/javascripts/flatpickr/l10n/kz.js +7 -7
  42. data/vendor/assets/javascripts/flatpickr/l10n/lt.js +8 -7
  43. data/vendor/assets/javascripts/flatpickr/l10n/lv.js +7 -7
  44. data/vendor/assets/javascripts/flatpickr/l10n/mk.js +7 -7
  45. data/vendor/assets/javascripts/flatpickr/l10n/mn.js +7 -7
  46. data/vendor/assets/javascripts/flatpickr/l10n/ms.js +8 -16
  47. data/vendor/assets/javascripts/flatpickr/l10n/my.js +7 -7
  48. data/vendor/assets/javascripts/flatpickr/l10n/nl.js +8 -8
  49. data/vendor/assets/javascripts/flatpickr/l10n/nn.js +73 -0
  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 +14 -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 +40 -39
  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 +38 -18
  72. data/vendor/assets/javascripts/flatpickr/plugins/labelPlugin/labelPlugin.js +4 -4
  73. data/vendor/assets/javascripts/flatpickr/plugins/minMaxTimePlugin.js +47 -24
  74. data/vendor/assets/javascripts/flatpickr/plugins/momentPlugin.js +69 -0
  75. data/vendor/assets/javascripts/flatpickr/plugins/monthSelect/index.js +154 -56
  76. data/vendor/assets/javascripts/flatpickr/plugins/rangePlugin.js +175 -142
  77. data/vendor/assets/javascripts/flatpickr/plugins/scrollPlugin.js +53 -18
  78. data/vendor/assets/javascripts/flatpickr/plugins/weekSelect/weekSelect.js +18 -5
  79. data/vendor/assets/javascripts/flatpickr.js +435 -321
  80. data/vendor/assets/stylesheets/flatpickr/plugins/monthSelect/style.css +45 -7
  81. data/vendor/assets/stylesheets/flatpickr/themes/airbnb.css +13 -2
  82. data/vendor/assets/stylesheets/flatpickr/themes/confetti.css +15 -4
  83. data/vendor/assets/stylesheets/flatpickr/themes/dark.css +13 -2
  84. data/vendor/assets/stylesheets/flatpickr/themes/light.css +15 -4
  85. data/vendor/assets/stylesheets/flatpickr/themes/material_blue.css +15 -4
  86. data/vendor/assets/stylesheets/flatpickr/themes/material_green.css +15 -4
  87. data/vendor/assets/stylesheets/flatpickr/themes/material_orange.css +15 -4
  88. data/vendor/assets/stylesheets/flatpickr/themes/material_red.css +15 -4
  89. data/vendor/assets/stylesheets/flatpickr.css +13 -2
  90. metadata +15 -17
  91. data/.gitignore +0 -10
  92. data/.rspec +0 -2
  93. data/.travis.yml +0 -5
  94. data/Gemfile +0 -3
  95. data/Rakefile +0 -44
  96. data/bin/console +0 -7
  97. data/bin/setup +0 -6
  98. data/flatpickr.gemspec +0 -26
@@ -1,23 +1,23 @@
1
- /* flatpickr v4.6.2, @license MIT */
1
+ /* flatpickr v4.6.13, @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,25 @@
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
+ var args = arguments;
212
+ clearTimeout(t);
213
+ t = setTimeout(function () { return fn.apply(_this, args); }, wait);
208
214
  };
209
215
  }
210
216
  var arrayify = function (obj) {
@@ -254,11 +260,16 @@
254
260
  return wrapper;
255
261
  }
256
262
  function getEventTarget(event) {
257
- if (typeof event.composedPath === "function") {
258
- var path = event.composedPath();
259
- return path[0];
263
+ try {
264
+ if (typeof event.composedPath === "function") {
265
+ var path = event.composedPath();
266
+ return path[0];
267
+ }
268
+ return event.target;
269
+ }
270
+ catch (error) {
271
+ return event.target;
260
272
  }
261
- return event.target;
262
273
  }
263
274
 
264
275
  var doNothing = function () { return undefined; };
@@ -269,7 +280,7 @@
269
280
  dateObj.setMonth(locale.months.longhand.indexOf(monthName));
270
281
  },
271
282
  G: function (dateObj, hour) {
272
- dateObj.setHours(parseFloat(hour));
283
+ dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));
273
284
  },
274
285
  H: function (dateObj, hour) {
275
286
  dateObj.setHours(parseFloat(hour));
@@ -302,7 +313,7 @@
302
313
  dateObj.setDate(parseFloat(day));
303
314
  },
304
315
  h: function (dateObj, hour) {
305
- dateObj.setHours(parseFloat(hour));
316
+ dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));
306
317
  },
307
318
  i: function (dateObj, minutes) {
308
319
  dateObj.setMinutes(parseFloat(minutes));
@@ -326,16 +337,16 @@
326
337
  w: doNothing,
327
338
  y: function (dateObj, year) {
328
339
  dateObj.setFullYear(2000 + parseFloat(year));
329
- }
340
+ },
330
341
  };
331
342
  var tokenRegex = {
332
- D: "(\\w+)",
333
- F: "(\\w+)",
343
+ D: "",
344
+ F: "",
334
345
  G: "(\\d\\d|\\d)",
335
346
  H: "(\\d\\d|\\d)",
336
347
  J: "(\\d\\d|\\d)\\w+",
337
348
  K: "",
338
- M: "(\\w+)",
349
+ M: "",
339
350
  S: "(\\d\\d|\\d)",
340
351
  U: "(.+)",
341
352
  W: "(\\d\\d|\\d)",
@@ -345,13 +356,13 @@
345
356
  h: "(\\d\\d|\\d)",
346
357
  i: "(\\d\\d|\\d)",
347
358
  j: "(\\d\\d|\\d)",
348
- l: "(\\w+)",
359
+ l: "",
349
360
  m: "(\\d\\d|\\d)",
350
361
  n: "(\\d\\d|\\d)",
351
362
  s: "(\\d\\d|\\d)",
352
363
  u: "(.+)",
353
364
  w: "(\\d\\d|\\d)",
354
- y: "(\\d{2})"
365
+ y: "(\\d{2})",
355
366
  };
356
367
  var formats = {
357
368
  // get the date in UTC
@@ -389,8 +400,8 @@
389
400
  W: function (date, _, options) {
390
401
  return options.getWeek(date);
391
402
  },
392
- // full year e.g. 2016
393
- Y: function (date) { return date.getFullYear(); },
403
+ // full year e.g. 2016, padded (0001-9999)
404
+ Y: function (date) { return pad(date.getFullYear(), 4); },
394
405
  // day in month, padded (01-30)
395
406
  d: function (date) { return pad(date.getDate()); },
396
407
  // hour from 1-12 (am/pm)
@@ -414,14 +425,14 @@
414
425
  // number of the day of the week
415
426
  w: function (date) { return date.getDay(); },
416
427
  // last two digits of year e.g. 16 for 2016
417
- y: function (date) { return String(date.getFullYear()).substring(2); }
428
+ y: function (date) { return String(date.getFullYear()).substring(2); },
418
429
  };
419
430
 
420
431
  var createDateFormatter = function (_a) {
421
- var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;
432
+ 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
433
  return function (dateObj, frmt, overrideLocale) {
423
434
  var locale = overrideLocale || l10n;
424
- if (config.formatDate !== undefined) {
435
+ if (config.formatDate !== undefined && !isMobile) {
425
436
  return config.formatDate(dateObj, frmt, locale);
426
437
  }
427
438
  return frmt
@@ -459,17 +470,15 @@
459
470
  parsedDate = new Date();
460
471
  timeless = true;
461
472
  }
473
+ else if (config && config.parseDate) {
474
+ parsedDate = config.parseDate(date, format);
475
+ }
462
476
  else if (/Z$/.test(datestr) ||
463
477
  /GMT$/.test(datestr) // datestrings w/ timezone
464
- )
478
+ ) {
465
479
  parsedDate = new Date(date);
466
- else if (config && config.parseDate)
467
- parsedDate = config.parseDate(date, format);
480
+ }
468
481
  else {
469
- parsedDate =
470
- !config || !config.noCalendar
471
- ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)
472
- : new Date(new Date().setHours(0, 0, 0, 0));
473
482
  var matched = void 0, ops = [];
474
483
  for (var i = 0, matchIndex = 0, regexStr = ""; i < format.length; i++) {
475
484
  var token_1 = format[i];
@@ -481,17 +490,21 @@
481
490
  if (match && (matched = true)) {
482
491
  ops[token_1 !== "Y" ? "push" : "unshift"]({
483
492
  fn: revFormat[token_1],
484
- val: match[++matchIndex]
493
+ val: match[++matchIndex],
485
494
  });
486
495
  }
487
496
  }
488
497
  else if (!isBackSlash)
489
498
  regexStr += "."; // don't really care
490
- ops.forEach(function (_a) {
491
- var fn = _a.fn, val = _a.val;
492
- return (parsedDate = fn(parsedDate, val, locale) || parsedDate);
493
- });
494
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
+ });
495
508
  parsedDate = matched ? parsedDate : undefined;
496
509
  }
497
510
  }
@@ -519,9 +532,44 @@
519
532
  var isBetween = function (ts, ts1, ts2) {
520
533
  return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);
521
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
+ };
522
542
  var duration = {
523
- DAY: 86400000
543
+ DAY: 86400000,
524
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
+ }
525
573
 
526
574
  if (typeof Object.assign !== "function") {
527
575
  Object.assign = function (target) {
@@ -548,8 +596,8 @@
548
596
  var DEBOUNCED_CHANGE_MS = 300;
549
597
  function FlatpickrInstance(element, instanceConfig) {
550
598
  var self = {
551
- config: __assign({}, defaults, flatpickr.defaultConfig),
552
- l10n: english
599
+ config: __assign(__assign({}, defaults), flatpickr.defaultConfig),
600
+ l10n: english,
553
601
  };
554
602
  self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
555
603
  self._handlers = [];
@@ -562,10 +610,13 @@
562
610
  self.changeYear = changeYear;
563
611
  self.clear = clear;
564
612
  self.close = close;
613
+ self.onMouseOver = onMouseOver;
565
614
  self._createElement = createElement;
615
+ self.createDay = createDay;
566
616
  self.destroy = destroy;
567
617
  self.isEnabled = isEnabled;
568
618
  self.jumpToDate = jumpToDate;
619
+ self.updateValue = updateValue;
569
620
  self.open = open;
570
621
  self.redraw = redraw;
571
622
  self.set = set;
@@ -579,7 +630,7 @@
579
630
  if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))
580
631
  return 29;
581
632
  return self.l10n.daysInMonth[month];
582
- }
633
+ },
583
634
  };
584
635
  }
585
636
  function init() {
@@ -595,15 +646,11 @@
595
646
  bindEvents();
596
647
  if (self.selectedDates.length || self.config.noCalendar) {
597
648
  if (self.config.enableTime) {
598
- setHoursFromDate(self.config.noCalendar
599
- ? self.latestSelectedDateObj || self.config.minDate
600
- : undefined);
649
+ setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);
601
650
  }
602
651
  updateValue(false);
603
652
  }
604
653
  setCalendarWidth();
605
- self.showTimeInput =
606
- self.selectedDates.length > 0 || self.config.noCalendar;
607
654
  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
608
655
  /* TODO: investigate this further
609
656
 
@@ -618,13 +665,19 @@
618
665
  }
619
666
  triggerEvent("onReady");
620
667
  }
668
+ function getClosestActiveElement() {
669
+ var _a;
670
+ return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())
671
+ .activeElement || document.activeElement);
672
+ }
621
673
  function bindToInstance(fn) {
622
674
  return fn.bind(self);
623
675
  }
624
676
  function setCalendarWidth() {
625
677
  var config = self.config;
626
- if (config.weekNumbers === false && config.showMonths === 1)
678
+ if (config.weekNumbers === false && config.showMonths === 1) {
627
679
  return;
680
+ }
628
681
  else if (config.noCalendar !== true) {
629
682
  window.requestAnimationFrame(function () {
630
683
  if (self.calendarContainer !== undefined) {
@@ -651,7 +704,14 @@
651
704
  */
652
705
  function updateTime(e) {
653
706
  if (self.selectedDates.length === 0) {
654
- setDefaultTime();
707
+ var defaultDate = self.config.minDate === undefined ||
708
+ compareDates(new Date(), self.config.minDate) >= 0
709
+ ? new Date()
710
+ : new Date(self.config.minDate.getTime());
711
+ var defaults = getDefaultHours(self.config);
712
+ defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());
713
+ self.selectedDates = [defaultDate];
714
+ self.latestSelectedDateObj = defaultDate;
655
715
  }
656
716
  if (e !== undefined && e.type !== "blur") {
657
717
  timeWrapper(e);
@@ -699,25 +759,40 @@
699
759
  self.latestSelectedDateObj &&
700
760
  compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===
701
761
  0);
702
- if (limitMaxHours) {
703
- var maxTime = self.config.maxTime !== undefined
704
- ? self.config.maxTime
705
- : self.config.maxDate;
706
- hours = Math.min(hours, maxTime.getHours());
707
- if (hours === maxTime.getHours())
708
- minutes = Math.min(minutes, maxTime.getMinutes());
709
- if (minutes === maxTime.getMinutes())
710
- seconds = Math.min(seconds, maxTime.getSeconds());
711
- }
712
- if (limitMinHours) {
713
- var minTime = self.config.minTime !== undefined
714
- ? self.config.minTime
715
- : self.config.minDate;
716
- hours = Math.max(hours, minTime.getHours());
717
- if (hours === minTime.getHours())
718
- minutes = Math.max(minutes, minTime.getMinutes());
719
- if (minutes === minTime.getMinutes())
720
- seconds = Math.max(seconds, minTime.getSeconds());
762
+ if (self.config.maxTime !== undefined &&
763
+ self.config.minTime !== undefined &&
764
+ self.config.minTime > self.config.maxTime) {
765
+ var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());
766
+ var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());
767
+ var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);
768
+ if (currentTime > maxBound && currentTime < minBound) {
769
+ var result = parseSeconds(minBound);
770
+ hours = result[0];
771
+ minutes = result[1];
772
+ seconds = result[2];
773
+ }
774
+ }
775
+ else {
776
+ if (limitMaxHours) {
777
+ var maxTime = self.config.maxTime !== undefined
778
+ ? self.config.maxTime
779
+ : self.config.maxDate;
780
+ hours = Math.min(hours, maxTime.getHours());
781
+ if (hours === maxTime.getHours())
782
+ minutes = Math.min(minutes, maxTime.getMinutes());
783
+ if (minutes === maxTime.getMinutes())
784
+ seconds = Math.min(seconds, maxTime.getSeconds());
785
+ }
786
+ if (limitMinHours) {
787
+ var minTime = self.config.minTime !== undefined
788
+ ? self.config.minTime
789
+ : self.config.minDate;
790
+ hours = Math.max(hours, minTime.getHours());
791
+ if (hours === minTime.getHours() && minutes < minTime.getMinutes())
792
+ minutes = minTime.getMinutes();
793
+ if (minutes === minTime.getMinutes())
794
+ seconds = Math.max(seconds, minTime.getSeconds());
795
+ }
721
796
  }
722
797
  setHours(hours, minutes, seconds);
723
798
  }
@@ -726,32 +801,9 @@
726
801
  */
727
802
  function setHoursFromDate(dateObj) {
728
803
  var date = dateObj || self.latestSelectedDateObj;
729
- if (date)
804
+ if (date && date instanceof Date) {
730
805
  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
806
  }
754
- setHours(hours, minutes, seconds);
755
807
  }
756
808
  /**
757
809
  * Sets the hours, minutes, and optionally seconds
@@ -782,7 +834,8 @@
782
834
  * @param {Event} event the keyup or increment event
783
835
  */
784
836
  function onYearInput(event) {
785
- var year = parseInt(event.target.value) + (event.delta || 0);
837
+ var eventTarget = getEventTarget(event);
838
+ var year = parseInt(eventTarget.value) + (event.delta || 0);
786
839
  if (year / 1000 > 1 ||
787
840
  (event.key === "Enter" && !/[^\d]/.test(year.toString()))) {
788
841
  changeYear(year);
@@ -801,24 +854,9 @@
801
854
  return element.forEach(function (el) { return bind(el, event, handler, options); });
802
855
  element.addEventListener(event, handler, options);
803
856
  self._handlers.push({
804
- element: element,
805
- event: event,
806
- handler: handler,
807
- options: options
857
+ remove: function () { return element.removeEventListener(event, handler, options); },
808
858
  });
809
859
  }
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
860
  function triggerChange() {
823
861
  triggerEvent("onChange");
824
862
  }
@@ -842,44 +880,49 @@
842
880
  if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))
843
881
  bind(self.daysContainer, "mouseover", function (e) {
844
882
  if (self.config.mode === "range")
845
- onMouseOver(e.target);
883
+ onMouseOver(getEventTarget(e));
846
884
  });
847
- bind(window.document.body, "keydown", onKeyDown);
885
+ bind(self._input, "keydown", onKeyDown);
886
+ if (self.calendarContainer !== undefined) {
887
+ bind(self.calendarContainer, "keydown", onKeyDown);
888
+ }
848
889
  if (!self.config.inline && !self.config.static)
849
890
  bind(window, "resize", debouncedResize);
850
891
  if (window.ontouchstart !== undefined)
851
892
  bind(window.document, "touchstart", documentClick);
852
893
  else
853
- bind(window.document, "mousedown", onClick(documentClick));
894
+ bind(window.document, "mousedown", documentClick);
854
895
  bind(window.document, "focus", documentClick, { capture: true });
855
896
  if (self.config.clickOpens === true) {
856
897
  bind(self._input, "focus", self.open);
857
- bind(self._input, "mousedown", onClick(self.open));
898
+ bind(self._input, "click", self.open);
858
899
  }
859
900
  if (self.daysContainer !== undefined) {
860
- bind(self.monthNav, "mousedown", onClick(onMonthNavClick));
901
+ bind(self.monthNav, "click", onMonthNavClick);
861
902
  bind(self.monthNav, ["keyup", "increment"], onYearInput);
862
- bind(self.daysContainer, "mousedown", onClick(selectDate));
903
+ bind(self.daysContainer, "click", selectDate);
863
904
  }
864
905
  if (self.timeContainer !== undefined &&
865
906
  self.minuteElement !== undefined &&
866
907
  self.hourElement !== undefined) {
867
908
  var selText = function (e) {
868
- return e.target.select();
909
+ return getEventTarget(e).select();
869
910
  };
870
911
  bind(self.timeContainer, ["increment"], updateTime);
871
912
  bind(self.timeContainer, "blur", updateTime, { capture: true });
872
- bind(self.timeContainer, "mousedown", onClick(timeIncrement));
913
+ bind(self.timeContainer, "click", timeIncrement);
873
914
  bind([self.hourElement, self.minuteElement], ["focus", "click"], selText);
874
915
  if (self.secondElement !== undefined)
875
916
  bind(self.secondElement, "focus", function () { return self.secondElement && self.secondElement.select(); });
876
917
  if (self.amPM !== undefined) {
877
- bind(self.amPM, "mousedown", onClick(function (e) {
918
+ bind(self.amPM, "click", function (e) {
878
919
  updateTime(e);
879
- triggerChange();
880
- }));
920
+ });
881
921
  }
882
922
  }
923
+ if (self.config.allowInput) {
924
+ bind(self._input, "blur", onBlur);
925
+ }
883
926
  }
884
927
  /**
885
928
  * Set the calendar view to a particular date.
@@ -923,8 +966,9 @@
923
966
  * @param {Event} e the click event
924
967
  */
925
968
  function timeIncrement(e) {
926
- if (~e.target.className.indexOf("arrow"))
927
- incrementNumInput(e, e.target.classList.contains("arrowUp") ? 1 : -1);
969
+ var eventTarget = getEventTarget(e);
970
+ if (~eventTarget.className.indexOf("arrow"))
971
+ incrementNumInput(e, eventTarget.classList.contains("arrowUp") ? 1 : -1);
928
972
  }
929
973
  /**
930
974
  * Increments/decrements the value of input associ-
@@ -936,7 +980,7 @@
936
980
  * @param {Element} inputElem the input element
937
981
  */
938
982
  function incrementNumInput(e, delta, inputElem) {
939
- var target = e && e.target;
983
+ var target = e && getEventTarget(e);
940
984
  var input = inputElem ||
941
985
  (target && target.parentNode && target.parentNode.firstChild);
942
986
  var event = createEvent("increment");
@@ -999,8 +1043,8 @@
999
1043
  ? self.config.appendTo
1000
1044
  : window.document.body).appendChild(self.calendarContainer);
1001
1045
  }
1002
- function createDay(className, date, dayNumber, i) {
1003
- var dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", "flatpickr-day " + className, date.getDate().toString());
1046
+ function createDay(className, date, _dayNumber, i) {
1047
+ var dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", className, date.getDate().toString());
1004
1048
  dayElement.dateObj = date;
1005
1049
  dayElement.$i = i;
1006
1050
  dayElement.setAttribute("aria-label", self.formatDate(date, self.config.ariaDateFormat));
@@ -1035,7 +1079,7 @@
1035
1079
  if (self.weekNumbers &&
1036
1080
  self.config.showMonths === 1 &&
1037
1081
  className !== "prevMonthDay" &&
1038
- dayNumber % 7 === 1) {
1082
+ i % 7 === 6) {
1039
1083
  self.weekNumbers.insertAdjacentHTML("beforeend", "<span class='flatpickr-day'>" + self.config.getWeek(date) + "</span>");
1040
1084
  }
1041
1085
  triggerEvent("onDayCreate", dayElement);
@@ -1088,39 +1132,44 @@
1088
1132
  return undefined;
1089
1133
  }
1090
1134
  function focusOnDay(current, offset) {
1091
- var dayFocused = isInView(document.activeElement || document.body);
1135
+ var activeElement = getClosestActiveElement();
1136
+ var dayFocused = isInView(activeElement || document.body);
1092
1137
  var startElem = current !== undefined
1093
1138
  ? current
1094
1139
  : dayFocused
1095
- ? document.activeElement
1140
+ ? activeElement
1096
1141
  : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)
1097
1142
  ? self.selectedDateElem
1098
1143
  : self.todayDateElem !== undefined && isInView(self.todayDateElem)
1099
1144
  ? self.todayDateElem
1100
1145
  : 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);
1146
+ if (startElem === undefined) {
1147
+ self._input.focus();
1148
+ }
1149
+ else if (!dayFocused) {
1150
+ focusOnDayElem(startElem);
1151
+ }
1152
+ else {
1153
+ getNextAvailableDay(startElem, offset);
1154
+ }
1106
1155
  }
1107
1156
  function buildMonthDays(year, month) {
1108
1157
  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";
1158
+ var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);
1159
+ 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
1160
  var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;
1112
1161
  // prepend days from the ending of previous month
1113
1162
  for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {
1114
- days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));
1163
+ days.appendChild(createDay("flatpickr-day " + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));
1115
1164
  }
1116
1165
  // Start at 1 since there is no 0th day
1117
1166
  for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {
1118
- days.appendChild(createDay("", new Date(year, month, dayNumber), dayNumber, dayIndex));
1167
+ days.appendChild(createDay("flatpickr-day", new Date(year, month, dayNumber), dayNumber, dayIndex));
1119
1168
  }
1120
1169
  // append days from the next month
1121
1170
  for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&
1122
1171
  (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {
1123
- days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));
1172
+ days.appendChild(createDay("flatpickr-day " + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));
1124
1173
  }
1125
1174
  //updateNavigationCurrentMonth();
1126
1175
  var dayContainer = createElement("div", "dayContainer");
@@ -1186,8 +1235,9 @@
1186
1235
  }
1187
1236
  else {
1188
1237
  self.monthsDropdownContainer = createElement("select", "flatpickr-monthDropdown-months");
1238
+ self.monthsDropdownContainer.setAttribute("aria-label", self.l10n.monthAriaLabel);
1189
1239
  bind(self.monthsDropdownContainer, "change", function (e) {
1190
- var target = e.target;
1240
+ var target = getEventTarget(e);
1191
1241
  var selectedMonth = parseInt(target.value, 10);
1192
1242
  self.changeMonth(selectedMonth - self.currentMonth);
1193
1243
  triggerEvent("onMonthChange");
@@ -1215,7 +1265,7 @@
1215
1265
  return {
1216
1266
  container: container,
1217
1267
  yearElement: yearElement,
1218
- monthElement: monthElement
1268
+ monthElement: monthElement,
1219
1269
  };
1220
1270
  }
1221
1271
  function buildMonths() {
@@ -1249,7 +1299,7 @@
1249
1299
  toggleClass(self.prevMonthNav, "flatpickr-disabled", bool);
1250
1300
  self.__hidePrevMonthArrow = bool;
1251
1301
  }
1252
- }
1302
+ },
1253
1303
  });
1254
1304
  Object.defineProperty(self, "_hideNextMonthArrow", {
1255
1305
  get: function () { return self.__hideNextMonthArrow; },
@@ -1258,7 +1308,7 @@
1258
1308
  toggleClass(self.nextMonthNav, "flatpickr-disabled", bool);
1259
1309
  self.__hideNextMonthArrow = bool;
1260
1310
  }
1261
- }
1311
+ },
1262
1312
  });
1263
1313
  self.currentYearElement = self.yearElements[0];
1264
1314
  updateNavigationCurrentMonth();
@@ -1268,32 +1318,35 @@
1268
1318
  self.calendarContainer.classList.add("hasTime");
1269
1319
  if (self.config.noCalendar)
1270
1320
  self.calendarContainer.classList.add("noCalendar");
1321
+ var defaults = getDefaultHours(self.config);
1271
1322
  self.timeContainer = createElement("div", "flatpickr-time");
1272
1323
  self.timeContainer.tabIndex = -1;
1273
1324
  var separator = createElement("span", "flatpickr-time-separator", ":");
1274
1325
  var hourInput = createNumberInput("flatpickr-hour", {
1275
- "aria-label": self.l10n.hourAriaLabel
1326
+ "aria-label": self.l10n.hourAriaLabel,
1276
1327
  });
1277
1328
  self.hourElement = hourInput.getElementsByTagName("input")[0];
1278
1329
  var minuteInput = createNumberInput("flatpickr-minute", {
1279
- "aria-label": self.l10n.minuteAriaLabel
1330
+ "aria-label": self.l10n.minuteAriaLabel,
1280
1331
  });
1281
1332
  self.minuteElement = minuteInput.getElementsByTagName("input")[0];
1282
1333
  self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;
1283
1334
  self.hourElement.value = pad(self.latestSelectedDateObj
1284
1335
  ? self.latestSelectedDateObj.getHours()
1285
1336
  : self.config.time_24hr
1286
- ? self.config.defaultHour
1287
- : military2ampm(self.config.defaultHour));
1337
+ ? defaults.hours
1338
+ : military2ampm(defaults.hours));
1288
1339
  self.minuteElement.value = pad(self.latestSelectedDateObj
1289
1340
  ? self.latestSelectedDateObj.getMinutes()
1290
- : self.config.defaultMinute);
1341
+ : defaults.minutes);
1291
1342
  self.hourElement.setAttribute("step", self.config.hourIncrement.toString());
1292
1343
  self.minuteElement.setAttribute("step", self.config.minuteIncrement.toString());
1293
1344
  self.hourElement.setAttribute("min", self.config.time_24hr ? "0" : "1");
1294
1345
  self.hourElement.setAttribute("max", self.config.time_24hr ? "23" : "12");
1346
+ self.hourElement.setAttribute("maxlength", "2");
1295
1347
  self.minuteElement.setAttribute("min", "0");
1296
1348
  self.minuteElement.setAttribute("max", "59");
1349
+ self.minuteElement.setAttribute("maxlength", "2");
1297
1350
  self.timeContainer.appendChild(hourInput);
1298
1351
  self.timeContainer.appendChild(separator);
1299
1352
  self.timeContainer.appendChild(minuteInput);
@@ -1305,10 +1358,11 @@
1305
1358
  self.secondElement = secondInput.getElementsByTagName("input")[0];
1306
1359
  self.secondElement.value = pad(self.latestSelectedDateObj
1307
1360
  ? self.latestSelectedDateObj.getSeconds()
1308
- : self.config.defaultSeconds);
1361
+ : defaults.seconds);
1309
1362
  self.secondElement.setAttribute("step", self.minuteElement.getAttribute("step"));
1310
1363
  self.secondElement.setAttribute("min", "0");
1311
1364
  self.secondElement.setAttribute("max", "59");
1365
+ self.secondElement.setAttribute("maxlength", "2");
1312
1366
  self.timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":"));
1313
1367
  self.timeContainer.appendChild(secondInput);
1314
1368
  }
@@ -1340,9 +1394,9 @@
1340
1394
  return;
1341
1395
  }
1342
1396
  var firstDayOfWeek = self.l10n.firstDayOfWeek;
1343
- var weekdays = self.l10n.weekdays.shorthand.slice();
1397
+ var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);
1344
1398
  if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {
1345
- weekdays = weekdays.splice(firstDayOfWeek, weekdays.length).concat(weekdays.splice(0, firstDayOfWeek));
1399
+ weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));
1346
1400
  }
1347
1401
  for (var i = self.config.showMonths; i--;) {
1348
1402
  self.weekdayContainer.children[i].innerHTML = "\n <span class='flatpickr-weekday'>\n " + weekdays.join("</span><span class='flatpickr-weekday'>") + "\n </span>\n ";
@@ -1357,7 +1411,7 @@
1357
1411
  weekWrapper.appendChild(weekNumbers);
1358
1412
  return {
1359
1413
  weekWrapper: weekWrapper,
1360
- weekNumbers: weekNumbers
1414
+ weekNumbers: weekNumbers,
1361
1415
  };
1362
1416
  }
1363
1417
  function changeMonth(value, isOffset) {
@@ -1391,9 +1445,9 @@
1391
1445
  self.currentYear = self._initialDate.getFullYear();
1392
1446
  self.currentMonth = self._initialDate.getMonth();
1393
1447
  }
1394
- self.showTimeInput = false;
1395
1448
  if (self.config.enableTime === true) {
1396
- setDefaultHours();
1449
+ var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;
1450
+ setHours(hours, minutes, seconds);
1397
1451
  }
1398
1452
  self.redraw();
1399
1453
  if (triggerChangeEvent)
@@ -1416,8 +1470,7 @@
1416
1470
  if (self.config !== undefined)
1417
1471
  triggerEvent("onDestroy");
1418
1472
  for (var i = self._handlers.length; i--;) {
1419
- var h = self._handlers[i];
1420
- h.element.removeEventListener(h.event, h.handler, h.options);
1473
+ self._handlers[i].remove();
1421
1474
  }
1422
1475
  self._handlers = [];
1423
1476
  if (self.mobileInput) {
@@ -1448,7 +1501,6 @@
1448
1501
  self.input.type = self.input._type;
1449
1502
  self.input.classList.remove("flatpickr-input");
1450
1503
  self.input.removeAttribute("readonly");
1451
- self.input.value = "";
1452
1504
  }
1453
1505
  [
1454
1506
  "_showTimeInput",
@@ -1488,8 +1540,6 @@
1488
1540
  });
1489
1541
  }
1490
1542
  function isCalendarElem(elem) {
1491
- if (self.config.appendTo && self.config.appendTo.contains(elem))
1492
- return true;
1493
1543
  return self.calendarContainer.contains(elem);
1494
1544
  }
1495
1545
  function documentClick(e) {
@@ -1505,27 +1555,30 @@
1505
1555
  e.path.indexOf &&
1506
1556
  (~e.path.indexOf(self.input) ||
1507
1557
  ~e.path.indexOf(self.altInput)));
1508
- var lostFocus = e.type === "blur"
1509
- ? isInput &&
1510
- e.relatedTarget &&
1511
- !isCalendarElem(e.relatedTarget)
1512
- : !isInput &&
1513
- !isCalendarElement &&
1514
- !isCalendarElem(e.relatedTarget);
1558
+ var lostFocus = !isInput &&
1559
+ !isCalendarElement &&
1560
+ !isCalendarElem(e.relatedTarget);
1515
1561
  var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {
1516
1562
  return elem.contains(eventTarget_1);
1517
1563
  });
1518
1564
  if (lostFocus && isIgnored) {
1565
+ if (self.config.allowInput) {
1566
+ self.setDate(self._input.value, false, self.config.altInput
1567
+ ? self.config.altFormat
1568
+ : self.config.dateFormat);
1569
+ }
1519
1570
  if (self.timeContainer !== undefined &&
1520
1571
  self.minuteElement !== undefined &&
1521
- self.hourElement !== undefined) {
1572
+ self.hourElement !== undefined &&
1573
+ self.input.value !== "" &&
1574
+ self.input.value !== undefined) {
1522
1575
  updateTime();
1523
1576
  }
1524
1577
  self.close();
1525
- if (self.config.mode === "range" && self.selectedDates.length === 1) {
1578
+ if (self.config &&
1579
+ self.config.mode === "range" &&
1580
+ self.selectedDates.length === 1)
1526
1581
  self.clear(false);
1527
- self.redraw();
1528
- }
1529
1582
  }
1530
1583
  }
1531
1584
  }
@@ -1551,6 +1604,7 @@
1551
1604
  }
1552
1605
  }
1553
1606
  function isEnabled(date, timeless) {
1607
+ var _a;
1554
1608
  if (timeless === void 0) { timeless = true; }
1555
1609
  var dateToCheck = self.parseDate(date, undefined, timeless); // timeless
1556
1610
  if ((self.config.minDate &&
@@ -1560,11 +1614,11 @@
1560
1614
  dateToCheck &&
1561
1615
  compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))
1562
1616
  return false;
1563
- if (self.config.enable.length === 0 && self.config.disable.length === 0)
1617
+ if (!self.config.enable && self.config.disable.length === 0)
1564
1618
  return true;
1565
1619
  if (dateToCheck === undefined)
1566
1620
  return false;
1567
- var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;
1621
+ var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;
1568
1622
  for (var i = 0, d = void 0; i < array.length; i++) {
1569
1623
  d = array[i];
1570
1624
  if (typeof d === "function" &&
@@ -1576,7 +1630,7 @@
1576
1630
  d.getTime() === dateToCheck.getTime())
1577
1631
  // disabled by date
1578
1632
  return bool;
1579
- else if (typeof d === "string" && dateToCheck !== undefined) {
1633
+ else if (typeof d === "string") {
1580
1634
  // disabled by date string
1581
1635
  var parsed = self.parseDate(d, undefined, true);
1582
1636
  return parsed && parsed.getTime() === dateToCheck.getTime()
@@ -1598,9 +1652,21 @@
1598
1652
  function isInView(elem) {
1599
1653
  if (self.daysContainer !== undefined)
1600
1654
  return (elem.className.indexOf("hidden") === -1 &&
1655
+ elem.className.indexOf("flatpickr-disabled") === -1 &&
1601
1656
  self.daysContainer.contains(elem));
1602
1657
  return false;
1603
1658
  }
1659
+ function onBlur(e) {
1660
+ var isInput = e.target === self._input;
1661
+ var valueChanged = self._input.value.trimEnd() !== getDateStr();
1662
+ if (isInput &&
1663
+ valueChanged &&
1664
+ !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {
1665
+ self.setDate(self._input.value, true, e.target === self.altInput
1666
+ ? self.config.altFormat
1667
+ : self.config.dateFormat);
1668
+ }
1669
+ }
1604
1670
  function onKeyDown(e) {
1605
1671
  // e.key e.keyCode
1606
1672
  // "Backspace" 8
@@ -1612,26 +1678,30 @@
1612
1678
  // "ArrowRight" (IE "Right") 39
1613
1679
  // "ArrowDown" (IE "Down") 40
1614
1680
  // "Delete" (IE "Del") 46
1615
- var isInput = e.target === self._input;
1681
+ var eventTarget = getEventTarget(e);
1682
+ var isInput = self.config.wrap
1683
+ ? element.contains(eventTarget)
1684
+ : eventTarget === self._input;
1616
1685
  var allowInput = self.config.allowInput;
1617
1686
  var allowKeydown = self.isOpen && (!allowInput || !isInput);
1618
1687
  var allowInlineKeydown = self.config.inline && isInput && !allowInput;
1619
1688
  if (e.keyCode === 13 && isInput) {
1620
1689
  if (allowInput) {
1621
- self.setDate(self._input.value, true, e.target === self.altInput
1690
+ self.setDate(self._input.value, true, eventTarget === self.altInput
1622
1691
  ? self.config.altFormat
1623
1692
  : self.config.dateFormat);
1624
- return e.target.blur();
1693
+ self.close();
1694
+ return eventTarget.blur();
1625
1695
  }
1626
1696
  else {
1627
1697
  self.open();
1628
1698
  }
1629
1699
  }
1630
- else if (isCalendarElem(e.target) ||
1700
+ else if (isCalendarElem(eventTarget) ||
1631
1701
  allowKeydown ||
1632
1702
  allowInlineKeydown) {
1633
1703
  var isTimeObj = !!self.timeContainer &&
1634
- self.timeContainer.contains(e.target);
1704
+ self.timeContainer.contains(eventTarget);
1635
1705
  switch (e.keyCode) {
1636
1706
  case 13:
1637
1707
  if (isTimeObj) {
@@ -1657,9 +1727,10 @@
1657
1727
  case 39:
1658
1728
  if (!isTimeObj && !isInput) {
1659
1729
  e.preventDefault();
1730
+ var activeElement = getClosestActiveElement();
1660
1731
  if (self.daysContainer !== undefined &&
1661
1732
  (allowInput === false ||
1662
- (document.activeElement && isInView(document.activeElement)))) {
1733
+ (activeElement && isInView(activeElement)))) {
1663
1734
  var delta_1 = e.keyCode === 39 ? 1 : -1;
1664
1735
  if (!e.ctrlKey)
1665
1736
  focusOnDay(undefined, delta_1);
@@ -1677,9 +1748,10 @@
1677
1748
  case 40:
1678
1749
  e.preventDefault();
1679
1750
  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) {
1751
+ if ((self.daysContainer &&
1752
+ eventTarget.$i !== undefined) ||
1753
+ eventTarget === self.input ||
1754
+ eventTarget === self.altInput) {
1683
1755
  if (e.ctrlKey) {
1684
1756
  e.stopPropagation();
1685
1757
  changeYear(self.currentYear - delta);
@@ -1688,7 +1760,7 @@
1688
1760
  else if (!isTimeObj)
1689
1761
  focusOnDay(undefined, delta * 7);
1690
1762
  }
1691
- else if (e.target === self.currentYearElement) {
1763
+ else if (eventTarget === self.currentYearElement) {
1692
1764
  changeYear(self.currentYear - delta);
1693
1765
  }
1694
1766
  else if (self.config.enableTime) {
@@ -1708,7 +1780,7 @@
1708
1780
  ]
1709
1781
  .concat(self.pluginElements)
1710
1782
  .filter(function (x) { return x; });
1711
- var i = elems.indexOf(e.target);
1783
+ var i = elems.indexOf(eventTarget);
1712
1784
  if (i !== -1) {
1713
1785
  var target = elems[i + (e.shiftKey ? -1 : 1)];
1714
1786
  e.preventDefault();
@@ -1717,17 +1789,15 @@
1717
1789
  }
1718
1790
  else if (!self.config.noCalendar &&
1719
1791
  self.daysContainer &&
1720
- self.daysContainer.contains(e.target) &&
1792
+ self.daysContainer.contains(eventTarget) &&
1721
1793
  e.shiftKey) {
1722
1794
  e.preventDefault();
1723
1795
  self._input.focus();
1724
1796
  }
1725
1797
  break;
1726
- default:
1727
- break;
1728
1798
  }
1729
1799
  }
1730
- if (self.amPM !== undefined && e.target === self.amPM) {
1800
+ if (self.amPM !== undefined && eventTarget === self.amPM) {
1731
1801
  switch (e.key) {
1732
1802
  case self.l10n.amPM[0].charAt(0):
1733
1803
  case self.l10n.amPM[0].charAt(0).toLowerCase():
@@ -1743,14 +1813,15 @@
1743
1813
  break;
1744
1814
  }
1745
1815
  }
1746
- if (isInput || isCalendarElem(e.target)) {
1816
+ if (isInput || isCalendarElem(eventTarget)) {
1747
1817
  triggerEvent("onKeyDown", e);
1748
1818
  }
1749
1819
  }
1750
- function onMouseOver(elem) {
1820
+ function onMouseOver(elem, cellClass) {
1821
+ if (cellClass === void 0) { cellClass = "flatpickr-day"; }
1751
1822
  if (self.selectedDates.length !== 1 ||
1752
1823
  (elem &&
1753
- (!elem.classList.contains("flatpickr-day") ||
1824
+ (!elem.classList.contains(cellClass) ||
1754
1825
  elem.classList.contains("flatpickr-disabled"))))
1755
1826
  return;
1756
1827
  var hoverDate = elem
@@ -1768,61 +1839,52 @@
1768
1839
  maxRange = t;
1769
1840
  }
1770
1841
  }
1771
- for (var m = 0; m < self.config.showMonths; m++) {
1772
- var month = self.daysContainer.children[m];
1773
- var _loop_1 = function (i, l) {
1774
- var dayElem = month.children[i], date = dayElem.dateObj;
1775
- var timestamp = date.getTime();
1776
- var outOfRange = (minRange > 0 && timestamp < minRange) ||
1777
- (maxRange > 0 && timestamp > maxRange);
1778
- if (outOfRange) {
1779
- dayElem.classList.add("notAllowed");
1780
- ["inRange", "startRange", "endRange"].forEach(function (c) {
1781
- dayElem.classList.remove(c);
1782
- });
1783
- return "continue";
1784
- }
1785
- else if (containsDisabled && !outOfRange)
1786
- return "continue";
1787
- ["startRange", "inRange", "endRange", "notAllowed"].forEach(function (c) {
1842
+ var hoverableCells = Array.from(self.rContainer.querySelectorAll("*:nth-child(-n+" + self.config.showMonths + ") > ." + cellClass));
1843
+ hoverableCells.forEach(function (dayElem) {
1844
+ var date = dayElem.dateObj;
1845
+ var timestamp = date.getTime();
1846
+ var outOfRange = (minRange > 0 && timestamp < minRange) ||
1847
+ (maxRange > 0 && timestamp > maxRange);
1848
+ if (outOfRange) {
1849
+ dayElem.classList.add("notAllowed");
1850
+ ["inRange", "startRange", "endRange"].forEach(function (c) {
1788
1851
  dayElem.classList.remove(c);
1789
1852
  });
1790
- if (elem !== undefined) {
1791
- elem.classList.add(hoverDate <= self.selectedDates[0].getTime()
1792
- ? "startRange"
1793
- : "endRange");
1794
- if (initialDate < hoverDate && timestamp === initialDate)
1795
- dayElem.classList.add("startRange");
1796
- else if (initialDate > hoverDate && timestamp === initialDate)
1797
- dayElem.classList.add("endRange");
1798
- if (timestamp >= minRange &&
1799
- (maxRange === 0 || timestamp <= maxRange) &&
1800
- isBetween(timestamp, initialDate, hoverDate))
1801
- dayElem.classList.add("inRange");
1802
- }
1803
- };
1804
- for (var i = 0, l = month.children.length; i < l; i++) {
1805
- _loop_1(i, l);
1853
+ return;
1806
1854
  }
1807
- }
1855
+ else if (containsDisabled && !outOfRange)
1856
+ return;
1857
+ ["startRange", "inRange", "endRange", "notAllowed"].forEach(function (c) {
1858
+ dayElem.classList.remove(c);
1859
+ });
1860
+ if (elem !== undefined) {
1861
+ elem.classList.add(hoverDate <= self.selectedDates[0].getTime()
1862
+ ? "startRange"
1863
+ : "endRange");
1864
+ if (initialDate < hoverDate && timestamp === initialDate)
1865
+ dayElem.classList.add("startRange");
1866
+ else if (initialDate > hoverDate && timestamp === initialDate)
1867
+ dayElem.classList.add("endRange");
1868
+ if (timestamp >= minRange &&
1869
+ (maxRange === 0 || timestamp <= maxRange) &&
1870
+ isBetween(timestamp, initialDate, hoverDate))
1871
+ dayElem.classList.add("inRange");
1872
+ }
1873
+ });
1808
1874
  }
1809
1875
  function onResize() {
1810
1876
  if (self.isOpen && !self.config.static && !self.config.inline)
1811
1877
  positionCalendar();
1812
1878
  }
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
1879
  function open(e, positionElement) {
1821
1880
  if (positionElement === void 0) { positionElement = self._positionElement; }
1822
1881
  if (self.isMobile === true) {
1823
1882
  if (e) {
1824
1883
  e.preventDefault();
1825
- e.target && e.target.blur();
1884
+ var eventTarget = getEventTarget(e);
1885
+ if (eventTarget) {
1886
+ eventTarget.blur();
1887
+ }
1826
1888
  }
1827
1889
  if (self.mobileInput !== undefined) {
1828
1890
  self.mobileInput.focus();
@@ -1831,8 +1893,9 @@
1831
1893
  triggerEvent("onOpen");
1832
1894
  return;
1833
1895
  }
1834
- if (self._input.disabled || self.config.inline)
1896
+ else if (self._input.disabled || self.config.inline) {
1835
1897
  return;
1898
+ }
1836
1899
  var wasOpen = self.isOpen;
1837
1900
  self.isOpen = true;
1838
1901
  if (!wasOpen) {
@@ -1842,9 +1905,6 @@
1842
1905
  positionCalendar(positionElement);
1843
1906
  }
1844
1907
  if (self.config.enableTime === true && self.config.noCalendar === true) {
1845
- if (self.selectedDates.length === 0) {
1846
- setDefaultTime();
1847
- }
1848
1908
  if (self.config.allowInput === false &&
1849
1909
  (e === undefined ||
1850
1910
  !self.timeContainer.contains(e.relatedTarget))) {
@@ -1886,6 +1946,7 @@
1886
1946
  "wrap",
1887
1947
  "weekNumbers",
1888
1948
  "allowInput",
1949
+ "allowInvalidPreload",
1889
1950
  "clickOpens",
1890
1951
  "time_24hr",
1891
1952
  "enableTime",
@@ -1897,7 +1958,7 @@
1897
1958
  "enableSeconds",
1898
1959
  "disableMobile",
1899
1960
  ];
1900
- var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));
1961
+ var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);
1901
1962
  var formats = {};
1902
1963
  self.config.parseDate = userConfig.parseDate;
1903
1964
  self.config.formatDate = userConfig.formatDate;
@@ -1905,13 +1966,13 @@
1905
1966
  get: function () { return self.config._enable; },
1906
1967
  set: function (dates) {
1907
1968
  self.config._enable = parseDateRules(dates);
1908
- }
1969
+ },
1909
1970
  });
1910
1971
  Object.defineProperty(self.config, "disable", {
1911
1972
  get: function () { return self.config._disable; },
1912
1973
  set: function (dates) {
1913
1974
  self.config._disable = parseDateRules(dates);
1914
- }
1975
+ },
1915
1976
  });
1916
1977
  var timeMode = userConfig.mode === "time";
1917
1978
  if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {
@@ -1930,28 +1991,24 @@
1930
1991
  ? "h:i" + (userConfig.enableSeconds ? ":S K" : " K")
1931
1992
  : defaultAltFormat + (" h:i" + (userConfig.enableSeconds ? ":S" : "") + " K");
1932
1993
  }
1933
- if (!userConfig.altInputClass) {
1934
- self.config.altInputClass =
1935
- self.input.className + " " + self.config.altInputClass;
1936
- }
1937
1994
  Object.defineProperty(self.config, "minDate", {
1938
1995
  get: function () { return self.config._minDate; },
1939
- set: minMaxDateSetter("min")
1996
+ set: minMaxDateSetter("min"),
1940
1997
  });
1941
1998
  Object.defineProperty(self.config, "maxDate", {
1942
1999
  get: function () { return self.config._maxDate; },
1943
- set: minMaxDateSetter("max")
2000
+ set: minMaxDateSetter("max"),
1944
2001
  });
1945
2002
  var minMaxTimeSetter = function (type) { return function (val) {
1946
2003
  self.config[type === "min" ? "_minTime" : "_maxTime"] = self.parseDate(val, "H:i:S");
1947
2004
  }; };
1948
2005
  Object.defineProperty(self.config, "minTime", {
1949
2006
  get: function () { return self.config._minTime; },
1950
- set: minMaxTimeSetter("min")
2007
+ set: minMaxTimeSetter("min"),
1951
2008
  });
1952
2009
  Object.defineProperty(self.config, "maxTime", {
1953
2010
  get: function () { return self.config._maxTime; },
1954
- set: minMaxTimeSetter("max")
2011
+ set: minMaxTimeSetter("max"),
1955
2012
  });
1956
2013
  if (userConfig.mode === "time") {
1957
2014
  self.config.noCalendar = true;
@@ -1959,6 +2016,7 @@
1959
2016
  }
1960
2017
  Object.assign(self.config, formats, userConfig);
1961
2018
  for (var i = 0; i < boolOpts.length; i++)
2019
+ // https://github.com/microsoft/TypeScript/issues/31663
1962
2020
  self.config[boolOpts[i]] =
1963
2021
  self.config[boolOpts[i]] === true ||
1964
2022
  self.config[boolOpts[i]] === "true";
@@ -1970,7 +2028,7 @@
1970
2028
  !self.config.inline &&
1971
2029
  self.config.mode === "single" &&
1972
2030
  !self.config.disable.length &&
1973
- !self.config.enable.length &&
2031
+ !self.config.enable &&
1974
2032
  !self.config.weekNumbers &&
1975
2033
  /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
1976
2034
  for (var i = 0; i < self.config.plugins.length; i++) {
@@ -1985,19 +2043,32 @@
1985
2043
  self.config[key] = pluginConf[key];
1986
2044
  }
1987
2045
  }
2046
+ if (!userConfig.altInputClass) {
2047
+ self.config.altInputClass =
2048
+ getInputElem().className + " " + self.config.altInputClass;
2049
+ }
1988
2050
  triggerEvent("onParseConfig");
1989
2051
  }
2052
+ function getInputElem() {
2053
+ return self.config.wrap
2054
+ ? element.querySelector("[data-input]")
2055
+ : element;
2056
+ }
1990
2057
  function setupLocale() {
1991
2058
  if (typeof self.config.locale !== "object" &&
1992
2059
  typeof flatpickr.l10ns[self.config.locale] === "undefined")
1993
2060
  self.config.errorHandler(new Error("flatpickr: invalid locale " + self.config.locale));
1994
- self.l10n = __assign({}, flatpickr.l10ns["default"], (typeof self.config.locale === "object"
2061
+ self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === "object"
1995
2062
  ? self.config.locale
1996
2063
  : self.config.locale !== "default"
1997
2064
  ? flatpickr.l10ns[self.config.locale]
1998
2065
  : undefined));
2066
+ tokenRegex.D = "(" + self.l10n.weekdays.shorthand.join("|") + ")";
2067
+ tokenRegex.l = "(" + self.l10n.weekdays.longhand.join("|") + ")";
2068
+ tokenRegex.M = "(" + self.l10n.months.shorthand.join("|") + ")";
2069
+ tokenRegex.F = "(" + self.l10n.months.longhand.join("|") + ")";
1999
2070
  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 || {})));
2071
+ var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));
2001
2072
  if (userConfig.time_24hr === undefined &&
2002
2073
  flatpickr.defaultConfig.time_24hr === undefined) {
2003
2074
  self.config.time_24hr = self.l10n.time_24hr;
@@ -2006,6 +2077,9 @@
2006
2077
  self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
2007
2078
  }
2008
2079
  function positionCalendar(customPositionElement) {
2080
+ if (typeof self.config.position === "function") {
2081
+ return void self.config.position(self, customPositionElement);
2082
+ }
2009
2083
  if (self.calendarContainer === undefined)
2010
2084
  return;
2011
2085
  triggerEvent("onPreCalendarPosition");
@@ -2021,12 +2095,22 @@
2021
2095
  toggleClass(self.calendarContainer, "arrowBottom", showOnTop);
2022
2096
  if (self.config.inline)
2023
2097
  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);
2098
+ var left = window.pageXOffset + inputBounds.left;
2099
+ var isCenter = false;
2100
+ var isRight = false;
2101
+ if (configPosHorizontal === "center") {
2102
+ left -= (calendarWidth - inputBounds.width) / 2;
2103
+ isCenter = true;
2104
+ }
2105
+ else if (configPosHorizontal === "right") {
2106
+ left -= calendarWidth - inputBounds.width;
2107
+ isRight = true;
2108
+ }
2109
+ toggleClass(self.calendarContainer, "arrowLeft", !isCenter && !isRight);
2110
+ toggleClass(self.calendarContainer, "arrowCenter", isCenter);
2111
+ toggleClass(self.calendarContainer, "arrowRight", isRight);
2112
+ var right = window.document.body.offsetWidth -
2113
+ (window.pageXOffset + inputBounds.right);
2030
2114
  var rightMost = left + calendarWidth > window.document.body.offsetWidth;
2031
2115
  var centerMost = right + calendarWidth > window.document.body.offsetWidth;
2032
2116
  toggleClass(self.calendarContainer, "rightMost", rightMost);
@@ -2042,7 +2126,7 @@
2042
2126
  self.calendarContainer.style.right = right + "px";
2043
2127
  }
2044
2128
  else {
2045
- var doc = document.styleSheets[0];
2129
+ var doc = getDocumentStyleSheet();
2046
2130
  // some testing environments don't have css support
2047
2131
  if (doc === undefined)
2048
2132
  return;
@@ -2059,9 +2143,32 @@
2059
2143
  self.calendarContainer.style.right = "auto";
2060
2144
  }
2061
2145
  }
2146
+ function getDocumentStyleSheet() {
2147
+ var editableSheet = null;
2148
+ for (var i = 0; i < document.styleSheets.length; i++) {
2149
+ var sheet = document.styleSheets[i];
2150
+ if (!sheet.cssRules)
2151
+ continue;
2152
+ try {
2153
+ sheet.cssRules;
2154
+ }
2155
+ catch (err) {
2156
+ continue;
2157
+ }
2158
+ editableSheet = sheet;
2159
+ break;
2160
+ }
2161
+ return editableSheet != null ? editableSheet : createStyleSheet();
2162
+ }
2163
+ function createStyleSheet() {
2164
+ var style = document.createElement("style");
2165
+ document.head.appendChild(style);
2166
+ return style.sheet;
2167
+ }
2062
2168
  function redraw() {
2063
2169
  if (self.config.noCalendar || self.isMobile)
2064
2170
  return;
2171
+ buildMonthSwitch();
2065
2172
  updateNavigationCurrentMonth();
2066
2173
  buildDays();
2067
2174
  }
@@ -2085,7 +2192,7 @@
2085
2192
  !day.classList.contains("flatpickr-disabled") &&
2086
2193
  !day.classList.contains("notAllowed");
2087
2194
  };
2088
- var t = findParent(e.target, isSelectable);
2195
+ var t = findParent(getEventTarget(e), isSelectable);
2089
2196
  if (t === undefined)
2090
2197
  return;
2091
2198
  var target = t;
@@ -2128,8 +2235,6 @@
2128
2235
  updateNavigationCurrentMonth();
2129
2236
  buildDays();
2130
2237
  updateValue();
2131
- if (self.config.enableTime)
2132
- setTimeout(function () { return (self.showTimeInput = true); }, 50);
2133
2238
  // maintain focus
2134
2239
  if (!shouldChangeMonth &&
2135
2240
  self.config.mode !== "range" &&
@@ -2156,7 +2261,20 @@
2156
2261
  locale: [setupLocale, updateWeekdays],
2157
2262
  showMonths: [buildMonths, setCalendarWidth, buildWeekdays],
2158
2263
  minDate: [jumpToDate],
2159
- maxDate: [jumpToDate]
2264
+ maxDate: [jumpToDate],
2265
+ positionElement: [updatePositionElement],
2266
+ clickOpens: [
2267
+ function () {
2268
+ if (self.config.clickOpens === true) {
2269
+ bind(self._input, "focus", self.open);
2270
+ bind(self._input, "click", self.open);
2271
+ }
2272
+ else {
2273
+ self._input.removeEventListener("focus", self.open);
2274
+ self._input.removeEventListener("click", self.open);
2275
+ }
2276
+ },
2277
+ ],
2160
2278
  };
2161
2279
  function set(option, value) {
2162
2280
  if (option !== null && typeof option === "object") {
@@ -2174,7 +2292,7 @@
2174
2292
  self.config[option] = arrayify(value);
2175
2293
  }
2176
2294
  self.redraw();
2177
- updateValue(false);
2295
+ updateValue(true);
2178
2296
  }
2179
2297
  function setSelectedDate(inputDate, format) {
2180
2298
  var dates = [];
@@ -2198,13 +2316,13 @@
2198
2316
  .split(self.l10n.rangeSeparator)
2199
2317
  .map(function (date) { return self.parseDate(date, format); });
2200
2318
  break;
2201
- default:
2202
- break;
2203
2319
  }
2204
2320
  }
2205
2321
  else
2206
2322
  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); });
2323
+ self.selectedDates = (self.config.allowInvalidPreload
2324
+ ? dates
2325
+ : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));
2208
2326
  if (self.config.mode === "range")
2209
2327
  self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
2210
2328
  }
@@ -2214,11 +2332,10 @@
2214
2332
  if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))
2215
2333
  return self.clear(triggerChange);
2216
2334
  setSelectedDate(date, format);
2217
- self.showTimeInput = self.selectedDates.length > 0;
2218
2335
  self.latestSelectedDateObj =
2219
2336
  self.selectedDates[self.selectedDates.length - 1];
2220
2337
  self.redraw();
2221
- jumpToDate();
2338
+ jumpToDate(undefined, triggerChange);
2222
2339
  setHoursFromDate();
2223
2340
  if (self.selectedDates.length === 0) {
2224
2341
  self.clear(false);
@@ -2242,7 +2359,7 @@
2242
2359
  rule.to)
2243
2360
  return {
2244
2361
  from: self.parseDate(rule.from, undefined),
2245
- to: self.parseDate(rule.to, undefined)
2362
+ to: self.parseDate(rule.to, undefined),
2246
2363
  };
2247
2364
  return rule;
2248
2365
  })
@@ -2289,20 +2406,9 @@
2289
2406
  (self.config.maxDate.getHours() > 0 ||
2290
2407
  self.config.maxDate.getMinutes() > 0 ||
2291
2408
  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
2409
  }
2302
2410
  function setupInputs() {
2303
- self.input = self.config.wrap
2304
- ? element.querySelector("[data-input]")
2305
- : element;
2411
+ self.input = getInputElem();
2306
2412
  /* istanbul ignore next */
2307
2413
  if (!self.input) {
2308
2414
  self.config.errorHandler(new Error("Invalid input element specified"));
@@ -2328,6 +2434,9 @@
2328
2434
  }
2329
2435
  if (!self.config.allowInput)
2330
2436
  self._input.setAttribute("readonly", "readonly");
2437
+ updatePositionElement();
2438
+ }
2439
+ function updatePositionElement() {
2331
2440
  self._positionElement = self.config.positionElement || self._input;
2332
2441
  }
2333
2442
  function setupMobile() {
@@ -2337,7 +2446,6 @@
2337
2446
  : "datetime-local"
2338
2447
  : "date";
2339
2448
  self.mobileInput = createElement("input", self.input.className + " flatpickr-mobile");
2340
- self.mobileInput.step = self.input.getAttribute("step") || "any";
2341
2449
  self.mobileInput.tabIndex = 1;
2342
2450
  self.mobileInput.type = inputType;
2343
2451
  self.mobileInput.disabled = self.input.disabled;
@@ -2356,6 +2464,8 @@
2356
2464
  self.mobileInput.min = self.formatDate(self.config.minDate, "Y-m-d");
2357
2465
  if (self.config.maxDate)
2358
2466
  self.mobileInput.max = self.formatDate(self.config.maxDate, "Y-m-d");
2467
+ if (self.input.getAttribute("step"))
2468
+ self.mobileInput.step = String(self.input.getAttribute("step"));
2359
2469
  self.input.type = "hidden";
2360
2470
  if (self.altInput !== undefined)
2361
2471
  self.altInput.type = "hidden";
@@ -2365,7 +2475,7 @@
2365
2475
  }
2366
2476
  catch (_a) { }
2367
2477
  bind(self.mobileInput, "change", function (e) {
2368
- self.setDate(e.target.value, false, self.mobileFormatStr);
2478
+ self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);
2369
2479
  triggerEvent("onChange");
2370
2480
  triggerEvent("onClose");
2371
2481
  });
@@ -2397,7 +2507,9 @@
2397
2507
  }
2398
2508
  function isDateSelected(date) {
2399
2509
  for (var i = 0; i < self.selectedDates.length; i++) {
2400
- if (compareDates(self.selectedDates[i], date) === 0)
2510
+ var selectedDate = self.selectedDates[i];
2511
+ if (selectedDate instanceof Date &&
2512
+ compareDates(selectedDate, date) === 0)
2401
2513
  return "" + i;
2402
2514
  }
2403
2515
  return false;
@@ -2435,7 +2547,9 @@
2435
2547
  ? self.currentMonth + 1 > self.config.maxDate.getMonth()
2436
2548
  : self.currentYear > self.config.maxDate.getFullYear());
2437
2549
  }
2438
- function getDateStr(format) {
2550
+ function getDateStr(specificFormat) {
2551
+ var format = specificFormat ||
2552
+ (self.config.altInput ? self.config.altFormat : self.config.dateFormat);
2439
2553
  return self.selectedDates
2440
2554
  .map(function (dObj) { return self.formatDate(dObj, format); })
2441
2555
  .filter(function (d, i, arr) {
@@ -2466,25 +2580,26 @@
2466
2580
  triggerEvent("onValueUpdate");
2467
2581
  }
2468
2582
  function onMonthNavClick(e) {
2469
- var isPrevMonth = self.prevMonthNav.contains(e.target);
2470
- var isNextMonth = self.nextMonthNav.contains(e.target);
2583
+ var eventTarget = getEventTarget(e);
2584
+ var isPrevMonth = self.prevMonthNav.contains(eventTarget);
2585
+ var isNextMonth = self.nextMonthNav.contains(eventTarget);
2471
2586
  if (isPrevMonth || isNextMonth) {
2472
2587
  changeMonth(isPrevMonth ? -1 : 1);
2473
2588
  }
2474
- else if (self.yearElements.indexOf(e.target) >= 0) {
2475
- e.target.select();
2589
+ else if (self.yearElements.indexOf(eventTarget) >= 0) {
2590
+ eventTarget.select();
2476
2591
  }
2477
- else if (e.target.classList.contains("arrowUp")) {
2592
+ else if (eventTarget.classList.contains("arrowUp")) {
2478
2593
  self.changeYear(self.currentYear + 1);
2479
2594
  }
2480
- else if (e.target.classList.contains("arrowDown")) {
2595
+ else if (eventTarget.classList.contains("arrowDown")) {
2481
2596
  self.changeYear(self.currentYear - 1);
2482
2597
  }
2483
2598
  }
2484
2599
  function timeWrapper(e) {
2485
2600
  e.preventDefault();
2486
- var isKeyDown = e.type === "keydown", input = e.target;
2487
- if (self.amPM !== undefined && e.target === self.amPM) {
2601
+ var isKeyDown = e.type === "keydown", eventTarget = getEventTarget(e), input = eventTarget;
2602
+ if (self.amPM !== undefined && eventTarget === self.amPM) {
2488
2603
  self.amPM.textContent =
2489
2604
  self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
2490
2605
  }
@@ -2575,13 +2690,13 @@
2575
2690
  flatpickr.defaultConfig = {};
2576
2691
  flatpickr.l10ns = {
2577
2692
  en: __assign({}, english),
2578
- "default": __assign({}, english)
2693
+ default: __assign({}, english),
2579
2694
  };
2580
2695
  flatpickr.localize = function (l10n) {
2581
- flatpickr.l10ns["default"] = __assign({}, flatpickr.l10ns["default"], l10n);
2696
+ flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);
2582
2697
  };
2583
2698
  flatpickr.setDefaults = function (config) {
2584
- flatpickr.defaultConfig = __assign({}, flatpickr.defaultConfig, config);
2699
+ flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);
2585
2700
  };
2586
2701
  flatpickr.parseDate = createDateParser({});
2587
2702
  flatpickr.formatDate = createDateFormatter({});
@@ -2592,7 +2707,6 @@
2592
2707
  return _flatpickr(this, config);
2593
2708
  };
2594
2709
  }
2595
- // eslint-disable-next-line @typescript-eslint/camelcase
2596
2710
  Date.prototype.fp_incr = function (days) {
2597
2711
  return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === "string" ? parseInt(days, 10) : days));
2598
2712
  };
@@ -2602,4 +2716,4 @@
2602
2716
 
2603
2717
  return flatpickr;
2604
2718
 
2605
- }));
2719
+ })));