@haiilo/catalyst 6.2.3 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/catalyst/catalyst.css +52 -19
  2. package/dist/catalyst/catalyst.esm.js +1 -1
  3. package/dist/catalyst/catalyst.esm.js.map +1 -1
  4. package/dist/catalyst/index.esm.js +2 -2
  5. package/dist/catalyst/index.esm.js.map +1 -1
  6. package/dist/catalyst/p-90e9d18f.entry.js +10 -0
  7. package/dist/catalyst/p-90e9d18f.entry.js.map +1 -0
  8. package/dist/catalyst/p-dd8ae83e.js +2 -0
  9. package/dist/catalyst/p-dd8ae83e.js.map +1 -0
  10. package/dist/catalyst/scss/vendor/_flatpickr.scss +62 -14
  11. package/dist/cjs/{cat-alert_25.cjs.entry.js → cat-alert_26.cjs.entry.js} +7194 -8022
  12. package/dist/cjs/cat-alert_26.cjs.entry.js.map +1 -0
  13. package/dist/cjs/catalyst.cjs.js +1 -1
  14. package/dist/cjs/index.cjs.js +28 -8
  15. package/dist/cjs/index.cjs.js.map +1 -1
  16. package/dist/cjs/loader.cjs.js +1 -1
  17. package/dist/cjs/of-d9fa1990.js +1435 -0
  18. package/dist/cjs/of-d9fa1990.js.map +1 -0
  19. package/dist/collection/collection-manifest.json +1 -0
  20. package/dist/collection/components/cat-button-group/cat-button-group.js +4 -0
  21. package/dist/collection/components/cat-button-group/cat-button-group.js.map +1 -1
  22. package/dist/collection/components/cat-datepicker/cat-datepicker.config.js +41 -20
  23. package/dist/collection/components/cat-datepicker/cat-datepicker.config.js.map +1 -1
  24. package/dist/collection/components/cat-datepicker/cat-datepicker.format.js +22 -0
  25. package/dist/collection/components/cat-datepicker/cat-datepicker.format.js.map +1 -0
  26. package/dist/collection/components/cat-datepicker/cat-datepicker.js +30 -48
  27. package/dist/collection/components/cat-datepicker/cat-datepicker.js.map +1 -1
  28. package/dist/collection/components/cat-datepicker/cat-datepicker.locale.js.map +1 -1
  29. package/dist/collection/components/cat-datepicker/cat-datepicker.mode.js +2 -0
  30. package/dist/collection/components/cat-datepicker/cat-datepicker.mode.js.map +1 -0
  31. package/dist/collection/components/cat-datepicker-inline/cat-datepicker-inline.css +1146 -0
  32. package/dist/collection/components/cat-datepicker-inline/cat-datepicker-inline.e2e.js +10 -0
  33. package/dist/collection/components/cat-datepicker-inline/cat-datepicker-inline.e2e.js.map +1 -0
  34. package/dist/collection/components/cat-datepicker-inline/cat-datepicker-inline.js +236 -0
  35. package/dist/collection/components/cat-datepicker-inline/cat-datepicker-inline.js.map +1 -0
  36. package/dist/collection/components/cat-datepicker-inline/cat-datepicker-inline.spec.js +20 -0
  37. package/dist/collection/components/cat-datepicker-inline/cat-datepicker-inline.spec.js.map +1 -0
  38. package/dist/collection/components/cat-dropdown/cat-dropdown.css +1 -1
  39. package/dist/collection/components/cat-input/cat-input.css +3 -0
  40. package/dist/collection/components/cat-input/cat-input.js +3 -2
  41. package/dist/collection/components/cat-input/cat-input.js.map +1 -1
  42. package/dist/collection/components/cat-select/cat-select.css +1 -1
  43. package/dist/collection/components/cat-select/connectors.js +20 -0
  44. package/dist/collection/components/cat-select/connectors.js.map +1 -0
  45. package/dist/collection/components/cat-textarea/cat-textarea.css +4 -0
  46. package/dist/collection/components/cat-textarea/cat-textarea.js +1 -0
  47. package/dist/collection/components/cat-textarea/cat-textarea.js.map +1 -1
  48. package/dist/collection/components/cat-tooltip/cat-tooltip.css +1 -1
  49. package/dist/collection/index.js +4 -3
  50. package/dist/collection/index.js.map +1 -1
  51. package/dist/collection/scss/vendor/_flatpickr.scss +62 -14
  52. package/dist/components/cat-button-group.js.map +1 -1
  53. package/dist/components/cat-datepicker-inline.d.ts +11 -0
  54. package/dist/components/cat-datepicker-inline.js +100 -0
  55. package/dist/components/cat-datepicker-inline.js.map +1 -0
  56. package/dist/components/cat-datepicker.js +21 -2767
  57. package/dist/components/cat-datepicker.js.map +1 -1
  58. package/dist/components/cat-datepicker.locale.js +2768 -0
  59. package/dist/components/cat-datepicker.locale.js.map +1 -0
  60. package/dist/components/cat-dropdown2.js +1 -1
  61. package/dist/components/cat-dropdown2.js.map +1 -1
  62. package/dist/components/cat-input2.js +4 -3
  63. package/dist/components/cat-input2.js.map +1 -1
  64. package/dist/components/cat-scrollable2.js +2 -910
  65. package/dist/components/cat-scrollable2.js.map +1 -1
  66. package/dist/components/cat-select-demo.js +4 -2
  67. package/dist/components/cat-select-demo.js.map +1 -1
  68. package/dist/components/cat-select2.js +5 -8
  69. package/dist/components/cat-select2.js.map +1 -1
  70. package/dist/components/cat-textarea.js +2 -1
  71. package/dist/components/cat-textarea.js.map +1 -1
  72. package/dist/components/cat-tooltip.js +1 -1
  73. package/dist/components/cat-tooltip.js.map +1 -1
  74. package/dist/components/from.js +912 -0
  75. package/dist/components/from.js.map +1 -0
  76. package/dist/components/index.js +21 -1
  77. package/dist/components/index.js.map +1 -1
  78. package/dist/components/of.js +10 -0
  79. package/dist/components/of.js.map +1 -0
  80. package/dist/esm/{cat-alert_25.entry.js → cat-alert_26.entry.js} +7177 -8006
  81. package/dist/esm/cat-alert_26.entry.js.map +1 -0
  82. package/dist/esm/catalyst.js +1 -1
  83. package/dist/esm/index.js +22 -3
  84. package/dist/esm/index.js.map +1 -1
  85. package/dist/esm/loader.js +1 -1
  86. package/dist/esm/of-5472d434.js +1408 -0
  87. package/dist/esm/of-5472d434.js.map +1 -0
  88. package/dist/types/components/cat-button-group/cat-button-group.d.ts +4 -0
  89. package/dist/types/components/cat-datepicker/cat-datepicker.config.d.ts +13 -1
  90. package/dist/types/components/cat-datepicker/cat-datepicker.d.ts +4 -3
  91. package/dist/types/components/cat-datepicker/cat-datepicker.format.d.ts +2 -0
  92. package/dist/types/components/cat-datepicker/cat-datepicker.locale.d.ts +2 -2
  93. package/dist/types/components/cat-datepicker/cat-datepicker.mode.d.ts +1 -0
  94. package/dist/types/components/cat-datepicker-inline/cat-datepicker-inline.d.ts +43 -0
  95. package/dist/types/components/cat-select/connectors.d.ts +8 -0
  96. package/dist/types/components.d.ts +97 -2
  97. package/dist/types/index.d.ts +4 -3
  98. package/package.json +3 -3
  99. package/dist/catalyst/p-0c98e803.entry.js +0 -10
  100. package/dist/catalyst/p-0c98e803.entry.js.map +0 -1
  101. package/dist/catalyst/p-42e63e08.js +0 -2
  102. package/dist/catalyst/p-42e63e08.js.map +0 -1
  103. package/dist/cjs/cat-alert_25.cjs.entry.js.map +0 -1
  104. package/dist/cjs/cat-icon-registry-5c292d3f.js +0 -502
  105. package/dist/cjs/cat-icon-registry-5c292d3f.js.map +0 -1
  106. package/dist/esm/cat-alert_25.entry.js.map +0 -1
  107. package/dist/esm/cat-icon-registry-4fc73466.js +0 -494
  108. package/dist/esm/cat-icon-registry-4fc73466.js.map +0 -1
@@ -1,2734 +1,14 @@
1
- import { proxyCustomElement, HTMLElement as HTMLElement$1, createEvent, h } from '@stencil/core/internal/client';
2
- import { c as createCommonjsModule, a as commonjsGlobal } from './loglevel.js';
1
+ import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
+ import { f as flatpickr, g as getConfig, a as getLocale, b as getFormat } from './cat-datepicker.locale.js';
3
3
  import { c as catI18nRegistry } from './cat-i18n-registry.js';
4
4
  import { d as defineCustomElement$5 } from './cat-button2.js';
5
5
  import { d as defineCustomElement$4 } from './cat-icon2.js';
6
6
  import { d as defineCustomElement$3 } from './cat-input2.js';
7
7
  import { d as defineCustomElement$2 } from './cat-spinner2.js';
8
8
 
9
- var HOOKS = [
10
- "onChange",
11
- "onClose",
12
- "onDayCreate",
13
- "onDestroy",
14
- "onKeyDown",
15
- "onMonthChange",
16
- "onOpen",
17
- "onParseConfig",
18
- "onReady",
19
- "onValueUpdate",
20
- "onYearChange",
21
- "onPreCalendarPosition",
22
- ];
23
- var defaults = {
24
- _disable: [],
25
- allowInput: false,
26
- allowInvalidPreload: false,
27
- altFormat: "F j, Y",
28
- altInput: false,
29
- altInputClass: "form-control input",
30
- animate: typeof window === "object" &&
31
- window.navigator.userAgent.indexOf("MSIE") === -1,
32
- ariaDateFormat: "F j, Y",
33
- autoFillDefaultTime: true,
34
- clickOpens: true,
35
- closeOnSelect: true,
36
- conjunction: ", ",
37
- dateFormat: "Y-m-d",
38
- defaultHour: 12,
39
- defaultMinute: 0,
40
- defaultSeconds: 0,
41
- disable: [],
42
- disableMobile: false,
43
- enableSeconds: false,
44
- enableTime: false,
45
- errorHandler: function (err) {
46
- return typeof console !== "undefined" && console.warn(err);
47
- },
48
- getWeek: function (givenDate) {
49
- var date = new Date(givenDate.getTime());
50
- date.setHours(0, 0, 0, 0);
51
- date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));
52
- var week1 = new Date(date.getFullYear(), 0, 4);
53
- return (1 +
54
- Math.round(((date.getTime() - week1.getTime()) / 86400000 -
55
- 3 +
56
- ((week1.getDay() + 6) % 7)) /
57
- 7));
58
- },
59
- hourIncrement: 1,
60
- ignoredFocusElements: [],
61
- inline: false,
62
- locale: "default",
63
- minuteIncrement: 5,
64
- mode: "single",
65
- monthSelectorType: "dropdown",
66
- nextArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",
67
- noCalendar: false,
68
- now: new Date(),
69
- onChange: [],
70
- onClose: [],
71
- onDayCreate: [],
72
- onDestroy: [],
73
- onKeyDown: [],
74
- onMonthChange: [],
75
- onOpen: [],
76
- onParseConfig: [],
77
- onReady: [],
78
- onValueUpdate: [],
79
- onYearChange: [],
80
- onPreCalendarPosition: [],
81
- plugins: [],
82
- position: "auto",
83
- positionElement: undefined,
84
- prevArrow: "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",
85
- shorthandCurrentMonth: false,
86
- showMonths: 1,
87
- static: false,
88
- time_24hr: false,
89
- weekNumbers: false,
90
- wrap: false,
91
- };
92
-
93
- var english = {
94
- weekdays: {
95
- shorthand: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
96
- longhand: [
97
- "Sunday",
98
- "Monday",
99
- "Tuesday",
100
- "Wednesday",
101
- "Thursday",
102
- "Friday",
103
- "Saturday",
104
- ],
105
- },
106
- months: {
107
- shorthand: [
108
- "Jan",
109
- "Feb",
110
- "Mar",
111
- "Apr",
112
- "May",
113
- "Jun",
114
- "Jul",
115
- "Aug",
116
- "Sep",
117
- "Oct",
118
- "Nov",
119
- "Dec",
120
- ],
121
- longhand: [
122
- "January",
123
- "February",
124
- "March",
125
- "April",
126
- "May",
127
- "June",
128
- "July",
129
- "August",
130
- "September",
131
- "October",
132
- "November",
133
- "December",
134
- ],
135
- },
136
- daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
137
- firstDayOfWeek: 0,
138
- ordinal: function (nth) {
139
- var s = nth % 100;
140
- if (s > 3 && s < 21)
141
- return "th";
142
- switch (s % 10) {
143
- case 1:
144
- return "st";
145
- case 2:
146
- return "nd";
147
- case 3:
148
- return "rd";
149
- default:
150
- return "th";
151
- }
152
- },
153
- rangeSeparator: " to ",
154
- weekAbbreviation: "Wk",
155
- scrollTitle: "Scroll to increment",
156
- toggleTitle: "Click to toggle",
157
- amPM: ["AM", "PM"],
158
- yearAriaLabel: "Year",
159
- monthAriaLabel: "Month",
160
- hourAriaLabel: "Hour",
161
- minuteAriaLabel: "Minute",
162
- time_24hr: false,
163
- };
164
-
165
- var pad = function (number, length) {
166
- if (length === void 0) { length = 2; }
167
- return ("000" + number).slice(length * -1);
168
- };
169
- var int = function (bool) { return (bool === true ? 1 : 0); };
170
- function debounce(fn, wait) {
171
- var t;
172
- return function () {
173
- var _this = this;
174
- var args = arguments;
175
- clearTimeout(t);
176
- t = setTimeout(function () { return fn.apply(_this, args); }, wait);
177
- };
178
- }
179
- var arrayify = function (obj) {
180
- return obj instanceof Array ? obj : [obj];
181
- };
182
-
183
- function toggleClass(elem, className, bool) {
184
- if (bool === true)
185
- return elem.classList.add(className);
186
- elem.classList.remove(className);
187
- }
188
- function createElement(tag, className, content) {
189
- var e = window.document.createElement(tag);
190
- className = className || "";
191
- content = content || "";
192
- e.className = className;
193
- if (content !== undefined)
194
- e.textContent = content;
195
- return e;
196
- }
197
- function clearNode(node) {
198
- while (node.firstChild)
199
- node.removeChild(node.firstChild);
200
- }
201
- function findParent(node, condition) {
202
- if (condition(node))
203
- return node;
204
- else if (node.parentNode)
205
- return findParent(node.parentNode, condition);
206
- return undefined;
207
- }
208
- function createNumberInput(inputClassName, opts) {
209
- var wrapper = createElement("div", "numInputWrapper"), numInput = createElement("input", "numInput " + inputClassName), arrowUp = createElement("span", "arrowUp"), arrowDown = createElement("span", "arrowDown");
210
- if (navigator.userAgent.indexOf("MSIE 9.0") === -1) {
211
- numInput.type = "number";
212
- }
213
- else {
214
- numInput.type = "text";
215
- numInput.pattern = "\\d*";
216
- }
217
- if (opts !== undefined)
218
- for (var key in opts)
219
- numInput.setAttribute(key, opts[key]);
220
- wrapper.appendChild(numInput);
221
- wrapper.appendChild(arrowUp);
222
- wrapper.appendChild(arrowDown);
223
- return wrapper;
224
- }
225
- function getEventTarget(event) {
226
- try {
227
- if (typeof event.composedPath === "function") {
228
- var path = event.composedPath();
229
- return path[0];
230
- }
231
- return event.target;
232
- }
233
- catch (error) {
234
- return event.target;
235
- }
236
- }
237
-
238
- var doNothing = function () { return undefined; };
239
- var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? "shorthand" : "longhand"][monthNumber]; };
240
- var revFormat = {
241
- D: doNothing,
242
- F: function (dateObj, monthName, locale) {
243
- dateObj.setMonth(locale.months.longhand.indexOf(monthName));
244
- },
245
- G: function (dateObj, hour) {
246
- dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));
247
- },
248
- H: function (dateObj, hour) {
249
- dateObj.setHours(parseFloat(hour));
250
- },
251
- J: function (dateObj, day) {
252
- dateObj.setDate(parseFloat(day));
253
- },
254
- K: function (dateObj, amPM, locale) {
255
- dateObj.setHours((dateObj.getHours() % 12) +
256
- 12 * int(new RegExp(locale.amPM[1], "i").test(amPM)));
257
- },
258
- M: function (dateObj, shortMonth, locale) {
259
- dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));
260
- },
261
- S: function (dateObj, seconds) {
262
- dateObj.setSeconds(parseFloat(seconds));
263
- },
264
- U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },
265
- W: function (dateObj, weekNum, locale) {
266
- var weekNumber = parseInt(weekNum);
267
- var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);
268
- date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);
269
- return date;
270
- },
271
- Y: function (dateObj, year) {
272
- dateObj.setFullYear(parseFloat(year));
273
- },
274
- Z: function (_, ISODate) { return new Date(ISODate); },
275
- d: function (dateObj, day) {
276
- dateObj.setDate(parseFloat(day));
277
- },
278
- h: function (dateObj, hour) {
279
- dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));
280
- },
281
- i: function (dateObj, minutes) {
282
- dateObj.setMinutes(parseFloat(minutes));
283
- },
284
- j: function (dateObj, day) {
285
- dateObj.setDate(parseFloat(day));
286
- },
287
- l: doNothing,
288
- m: function (dateObj, month) {
289
- dateObj.setMonth(parseFloat(month) - 1);
290
- },
291
- n: function (dateObj, month) {
292
- dateObj.setMonth(parseFloat(month) - 1);
293
- },
294
- s: function (dateObj, seconds) {
295
- dateObj.setSeconds(parseFloat(seconds));
296
- },
297
- u: function (_, unixMillSeconds) {
298
- return new Date(parseFloat(unixMillSeconds));
299
- },
300
- w: doNothing,
301
- y: function (dateObj, year) {
302
- dateObj.setFullYear(2000 + parseFloat(year));
303
- },
304
- };
305
- var tokenRegex = {
306
- D: "",
307
- F: "",
308
- G: "(\\d\\d|\\d)",
309
- H: "(\\d\\d|\\d)",
310
- J: "(\\d\\d|\\d)\\w+",
311
- K: "",
312
- M: "",
313
- S: "(\\d\\d|\\d)",
314
- U: "(.+)",
315
- W: "(\\d\\d|\\d)",
316
- Y: "(\\d{4})",
317
- Z: "(.+)",
318
- d: "(\\d\\d|\\d)",
319
- h: "(\\d\\d|\\d)",
320
- i: "(\\d\\d|\\d)",
321
- j: "(\\d\\d|\\d)",
322
- l: "",
323
- m: "(\\d\\d|\\d)",
324
- n: "(\\d\\d|\\d)",
325
- s: "(\\d\\d|\\d)",
326
- u: "(.+)",
327
- w: "(\\d\\d|\\d)",
328
- y: "(\\d{2})",
329
- };
330
- var formats = {
331
- Z: function (date) { return date.toISOString(); },
332
- D: function (date, locale, options) {
333
- return locale.weekdays.shorthand[formats.w(date, locale, options)];
334
- },
335
- F: function (date, locale, options) {
336
- return monthToStr(formats.n(date, locale, options) - 1, false, locale);
337
- },
338
- G: function (date, locale, options) {
339
- return pad(formats.h(date, locale, options));
340
- },
341
- H: function (date) { return pad(date.getHours()); },
342
- J: function (date, locale) {
343
- return locale.ordinal !== undefined
344
- ? date.getDate() + locale.ordinal(date.getDate())
345
- : date.getDate();
346
- },
347
- K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },
348
- M: function (date, locale) {
349
- return monthToStr(date.getMonth(), true, locale);
350
- },
351
- S: function (date) { return pad(date.getSeconds()); },
352
- U: function (date) { return date.getTime() / 1000; },
353
- W: function (date, _, options) {
354
- return options.getWeek(date);
355
- },
356
- Y: function (date) { return pad(date.getFullYear(), 4); },
357
- d: function (date) { return pad(date.getDate()); },
358
- h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },
359
- i: function (date) { return pad(date.getMinutes()); },
360
- j: function (date) { return date.getDate(); },
361
- l: function (date, locale) {
362
- return locale.weekdays.longhand[date.getDay()];
363
- },
364
- m: function (date) { return pad(date.getMonth() + 1); },
365
- n: function (date) { return date.getMonth() + 1; },
366
- s: function (date) { return date.getSeconds(); },
367
- u: function (date) { return date.getTime(); },
368
- w: function (date) { return date.getDay(); },
369
- y: function (date) { return String(date.getFullYear()).substring(2); },
370
- };
371
-
372
- var createDateFormatter = function (_a) {
373
- 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;
374
- return function (dateObj, frmt, overrideLocale) {
375
- var locale = overrideLocale || l10n;
376
- if (config.formatDate !== undefined && !isMobile) {
377
- return config.formatDate(dateObj, frmt, locale);
378
- }
379
- return frmt
380
- .split("")
381
- .map(function (c, i, arr) {
382
- return formats[c] && arr[i - 1] !== "\\"
383
- ? formats[c](dateObj, locale, config)
384
- : c !== "\\"
385
- ? c
386
- : "";
387
- })
388
- .join("");
389
- };
390
- };
391
- var createDateParser = function (_a) {
392
- var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;
393
- return function (date, givenFormat, timeless, customLocale) {
394
- if (date !== 0 && !date)
395
- return undefined;
396
- var locale = customLocale || l10n;
397
- var parsedDate;
398
- var dateOrig = date;
399
- if (date instanceof Date)
400
- parsedDate = new Date(date.getTime());
401
- else if (typeof date !== "string" &&
402
- date.toFixed !== undefined)
403
- parsedDate = new Date(date);
404
- else if (typeof date === "string") {
405
- var format = givenFormat || (config || defaults).dateFormat;
406
- var datestr = String(date).trim();
407
- if (datestr === "today") {
408
- parsedDate = new Date();
409
- timeless = true;
410
- }
411
- else if (config && config.parseDate) {
412
- parsedDate = config.parseDate(date, format);
413
- }
414
- else if (/Z$/.test(datestr) ||
415
- /GMT$/.test(datestr)) {
416
- parsedDate = new Date(date);
417
- }
418
- else {
419
- var matched = void 0, ops = [];
420
- for (var i = 0, matchIndex = 0, regexStr = ""; i < format.length; i++) {
421
- var token = format[i];
422
- var isBackSlash = token === "\\";
423
- var escaped = format[i - 1] === "\\" || isBackSlash;
424
- if (tokenRegex[token] && !escaped) {
425
- regexStr += tokenRegex[token];
426
- var match = new RegExp(regexStr).exec(date);
427
- if (match && (matched = true)) {
428
- ops[token !== "Y" ? "push" : "unshift"]({
429
- fn: revFormat[token],
430
- val: match[++matchIndex],
431
- });
432
- }
433
- }
434
- else if (!isBackSlash)
435
- regexStr += ".";
436
- }
437
- parsedDate =
438
- !config || !config.noCalendar
439
- ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)
440
- : new Date(new Date().setHours(0, 0, 0, 0));
441
- ops.forEach(function (_a) {
442
- var fn = _a.fn, val = _a.val;
443
- return (parsedDate = fn(parsedDate, val, locale) || parsedDate);
444
- });
445
- parsedDate = matched ? parsedDate : undefined;
446
- }
447
- }
448
- if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {
449
- config.errorHandler(new Error("Invalid date provided: " + dateOrig));
450
- return undefined;
451
- }
452
- if (timeless === true)
453
- parsedDate.setHours(0, 0, 0, 0);
454
- return parsedDate;
455
- };
456
- };
457
- function compareDates(date1, date2, timeless) {
458
- if (timeless === void 0) { timeless = true; }
459
- if (timeless !== false) {
460
- return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -
461
- new Date(date2.getTime()).setHours(0, 0, 0, 0));
462
- }
463
- return date1.getTime() - date2.getTime();
464
- }
465
- var isBetween = function (ts, ts1, ts2) {
466
- return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);
467
- };
468
- var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {
469
- return hours * 3600 + minutes * 60 + seconds;
470
- };
471
- var parseSeconds = function (secondsSinceMidnight) {
472
- var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;
473
- return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];
474
- };
475
- var duration = {
476
- DAY: 86400000,
477
- };
478
- function getDefaultHours(config) {
479
- var hours = config.defaultHour;
480
- var minutes = config.defaultMinute;
481
- var seconds = config.defaultSeconds;
482
- if (config.minDate !== undefined) {
483
- var minHour = config.minDate.getHours();
484
- var minMinutes = config.minDate.getMinutes();
485
- var minSeconds = config.minDate.getSeconds();
486
- if (hours < minHour) {
487
- hours = minHour;
488
- }
489
- if (hours === minHour && minutes < minMinutes) {
490
- minutes = minMinutes;
491
- }
492
- if (hours === minHour && minutes === minMinutes && seconds < minSeconds)
493
- seconds = config.minDate.getSeconds();
494
- }
495
- if (config.maxDate !== undefined) {
496
- var maxHr = config.maxDate.getHours();
497
- var maxMinutes = config.maxDate.getMinutes();
498
- hours = Math.min(hours, maxHr);
499
- if (hours === maxHr)
500
- minutes = Math.min(maxMinutes, minutes);
501
- if (hours === maxHr && minutes === maxMinutes)
502
- seconds = config.maxDate.getSeconds();
503
- }
504
- return { hours: hours, minutes: minutes, seconds: seconds };
505
- }
506
-
507
- if (typeof Object.assign !== "function") {
508
- Object.assign = function (target) {
509
- var args = [];
510
- for (var _i = 1; _i < arguments.length; _i++) {
511
- args[_i - 1] = arguments[_i];
512
- }
513
- if (!target) {
514
- throw TypeError("Cannot convert undefined or null to object");
515
- }
516
- var _loop_1 = function (source) {
517
- if (source) {
518
- Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });
519
- }
520
- };
521
- for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {
522
- var source = args_1[_a];
523
- _loop_1(source);
524
- }
525
- return target;
526
- };
527
- }
528
-
529
- var __assign = (undefined && undefined.__assign) || function () {
530
- __assign = Object.assign || function(t) {
531
- for (var s, i = 1, n = arguments.length; i < n; i++) {
532
- s = arguments[i];
533
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
534
- t[p] = s[p];
535
- }
536
- return t;
537
- };
538
- return __assign.apply(this, arguments);
539
- };
540
- var __spreadArrays = (undefined && undefined.__spreadArrays) || function () {
541
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
542
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
543
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
544
- r[k] = a[j];
545
- return r;
546
- };
547
- var DEBOUNCED_CHANGE_MS = 300;
548
- function FlatpickrInstance(element, instanceConfig) {
549
- var self = {
550
- config: __assign(__assign({}, defaults), flatpickr.defaultConfig),
551
- l10n: english,
552
- };
553
- self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
554
- self._handlers = [];
555
- self.pluginElements = [];
556
- self.loadedPlugins = [];
557
- self._bind = bind;
558
- self._setHoursFromDate = setHoursFromDate;
559
- self._positionCalendar = positionCalendar;
560
- self.changeMonth = changeMonth;
561
- self.changeYear = changeYear;
562
- self.clear = clear;
563
- self.close = close;
564
- self.onMouseOver = onMouseOver;
565
- self._createElement = createElement;
566
- self.createDay = createDay;
567
- self.destroy = destroy;
568
- self.isEnabled = isEnabled;
569
- self.jumpToDate = jumpToDate;
570
- self.updateValue = updateValue;
571
- self.open = open;
572
- self.redraw = redraw;
573
- self.set = set;
574
- self.setDate = setDate;
575
- self.toggle = toggle;
576
- function setupHelperFunctions() {
577
- self.utils = {
578
- getDaysInMonth: function (month, yr) {
579
- if (month === void 0) { month = self.currentMonth; }
580
- if (yr === void 0) { yr = self.currentYear; }
581
- if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))
582
- return 29;
583
- return self.l10n.daysInMonth[month];
584
- },
585
- };
586
- }
587
- function init() {
588
- self.element = self.input = element;
589
- self.isOpen = false;
590
- parseConfig();
591
- setupLocale();
592
- setupInputs();
593
- setupDates();
594
- setupHelperFunctions();
595
- if (!self.isMobile)
596
- build();
597
- bindEvents();
598
- if (self.selectedDates.length || self.config.noCalendar) {
599
- if (self.config.enableTime) {
600
- setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);
601
- }
602
- updateValue(false);
603
- }
604
- setCalendarWidth();
605
- var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
606
- if (!self.isMobile && isSafari) {
607
- positionCalendar();
608
- }
609
- triggerEvent("onReady");
610
- }
611
- function getClosestActiveElement() {
612
- var _a;
613
- return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())
614
- .activeElement || document.activeElement);
615
- }
616
- function bindToInstance(fn) {
617
- return fn.bind(self);
618
- }
619
- function setCalendarWidth() {
620
- var config = self.config;
621
- if (config.weekNumbers === false && config.showMonths === 1) {
622
- return;
623
- }
624
- else if (config.noCalendar !== true) {
625
- window.requestAnimationFrame(function () {
626
- if (self.calendarContainer !== undefined) {
627
- self.calendarContainer.style.visibility = "hidden";
628
- self.calendarContainer.style.display = "block";
629
- }
630
- if (self.daysContainer !== undefined) {
631
- var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;
632
- self.daysContainer.style.width = daysWidth + "px";
633
- self.calendarContainer.style.width =
634
- daysWidth +
635
- (self.weekWrapper !== undefined
636
- ? self.weekWrapper.offsetWidth
637
- : 0) +
638
- "px";
639
- self.calendarContainer.style.removeProperty("visibility");
640
- self.calendarContainer.style.removeProperty("display");
641
- }
642
- });
643
- }
644
- }
645
- function updateTime(e) {
646
- if (self.selectedDates.length === 0) {
647
- var defaultDate = self.config.minDate === undefined ||
648
- compareDates(new Date(), self.config.minDate) >= 0
649
- ? new Date()
650
- : new Date(self.config.minDate.getTime());
651
- var defaults = getDefaultHours(self.config);
652
- defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());
653
- self.selectedDates = [defaultDate];
654
- self.latestSelectedDateObj = defaultDate;
655
- }
656
- if (e !== undefined && e.type !== "blur") {
657
- timeWrapper(e);
658
- }
659
- var prevValue = self._input.value;
660
- setHoursFromInputs();
661
- updateValue();
662
- if (self._input.value !== prevValue) {
663
- self._debouncedChange();
664
- }
665
- }
666
- function ampm2military(hour, amPM) {
667
- return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);
668
- }
669
- function military2ampm(hour) {
670
- switch (hour % 24) {
671
- case 0:
672
- case 12:
673
- return 12;
674
- default:
675
- return hour % 12;
676
- }
677
- }
678
- function setHoursFromInputs() {
679
- if (self.hourElement === undefined || self.minuteElement === undefined)
680
- return;
681
- var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined
682
- ? (parseInt(self.secondElement.value, 10) || 0) % 60
683
- : 0;
684
- if (self.amPM !== undefined) {
685
- hours = ampm2military(hours, self.amPM.textContent);
686
- }
687
- var limitMinHours = self.config.minTime !== undefined ||
688
- (self.config.minDate &&
689
- self.minDateHasTime &&
690
- self.latestSelectedDateObj &&
691
- compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===
692
- 0);
693
- var limitMaxHours = self.config.maxTime !== undefined ||
694
- (self.config.maxDate &&
695
- self.maxDateHasTime &&
696
- self.latestSelectedDateObj &&
697
- compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===
698
- 0);
699
- if (self.config.maxTime !== undefined &&
700
- self.config.minTime !== undefined &&
701
- self.config.minTime > self.config.maxTime) {
702
- var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());
703
- var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());
704
- var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);
705
- if (currentTime > maxBound && currentTime < minBound) {
706
- var result = parseSeconds(minBound);
707
- hours = result[0];
708
- minutes = result[1];
709
- seconds = result[2];
710
- }
711
- }
712
- else {
713
- if (limitMaxHours) {
714
- var maxTime = self.config.maxTime !== undefined
715
- ? self.config.maxTime
716
- : self.config.maxDate;
717
- hours = Math.min(hours, maxTime.getHours());
718
- if (hours === maxTime.getHours())
719
- minutes = Math.min(minutes, maxTime.getMinutes());
720
- if (minutes === maxTime.getMinutes())
721
- seconds = Math.min(seconds, maxTime.getSeconds());
722
- }
723
- if (limitMinHours) {
724
- var minTime = self.config.minTime !== undefined
725
- ? self.config.minTime
726
- : self.config.minDate;
727
- hours = Math.max(hours, minTime.getHours());
728
- if (hours === minTime.getHours() && minutes < minTime.getMinutes())
729
- minutes = minTime.getMinutes();
730
- if (minutes === minTime.getMinutes())
731
- seconds = Math.max(seconds, minTime.getSeconds());
732
- }
733
- }
734
- setHours(hours, minutes, seconds);
735
- }
736
- function setHoursFromDate(dateObj) {
737
- var date = dateObj || self.latestSelectedDateObj;
738
- if (date && date instanceof Date) {
739
- setHours(date.getHours(), date.getMinutes(), date.getSeconds());
740
- }
741
- }
742
- function setHours(hours, minutes, seconds) {
743
- if (self.latestSelectedDateObj !== undefined) {
744
- self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);
745
- }
746
- if (!self.hourElement || !self.minuteElement || self.isMobile)
747
- return;
748
- self.hourElement.value = pad(!self.config.time_24hr
749
- ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)
750
- : hours);
751
- self.minuteElement.value = pad(minutes);
752
- if (self.amPM !== undefined)
753
- self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];
754
- if (self.secondElement !== undefined)
755
- self.secondElement.value = pad(seconds);
756
- }
757
- function onYearInput(event) {
758
- var eventTarget = getEventTarget(event);
759
- var year = parseInt(eventTarget.value) + (event.delta || 0);
760
- if (year / 1000 > 1 ||
761
- (event.key === "Enter" && !/[^\d]/.test(year.toString()))) {
762
- changeYear(year);
763
- }
764
- }
765
- function bind(element, event, handler, options) {
766
- if (event instanceof Array)
767
- return event.forEach(function (ev) { return bind(element, ev, handler, options); });
768
- if (element instanceof Array)
769
- return element.forEach(function (el) { return bind(el, event, handler, options); });
770
- element.addEventListener(event, handler, options);
771
- self._handlers.push({
772
- remove: function () { return element.removeEventListener(event, handler, options); },
773
- });
774
- }
775
- function triggerChange() {
776
- triggerEvent("onChange");
777
- }
778
- function bindEvents() {
779
- if (self.config.wrap) {
780
- ["open", "close", "toggle", "clear"].forEach(function (evt) {
781
- Array.prototype.forEach.call(self.element.querySelectorAll("[data-" + evt + "]"), function (el) {
782
- return bind(el, "click", self[evt]);
783
- });
784
- });
785
- }
786
- if (self.isMobile) {
787
- setupMobile();
788
- return;
789
- }
790
- var debouncedResize = debounce(onResize, 50);
791
- self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);
792
- if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))
793
- bind(self.daysContainer, "mouseover", function (e) {
794
- if (self.config.mode === "range")
795
- onMouseOver(getEventTarget(e));
796
- });
797
- bind(self._input, "keydown", onKeyDown);
798
- if (self.calendarContainer !== undefined) {
799
- bind(self.calendarContainer, "keydown", onKeyDown);
800
- }
801
- if (!self.config.inline && !self.config.static)
802
- bind(window, "resize", debouncedResize);
803
- if (window.ontouchstart !== undefined)
804
- bind(window.document, "touchstart", documentClick);
805
- else
806
- bind(window.document, "mousedown", documentClick);
807
- bind(window.document, "focus", documentClick, { capture: true });
808
- if (self.config.clickOpens === true) {
809
- bind(self._input, "focus", self.open);
810
- bind(self._input, "click", self.open);
811
- }
812
- if (self.daysContainer !== undefined) {
813
- bind(self.monthNav, "click", onMonthNavClick);
814
- bind(self.monthNav, ["keyup", "increment"], onYearInput);
815
- bind(self.daysContainer, "click", selectDate);
816
- }
817
- if (self.timeContainer !== undefined &&
818
- self.minuteElement !== undefined &&
819
- self.hourElement !== undefined) {
820
- var selText = function (e) {
821
- return getEventTarget(e).select();
822
- };
823
- bind(self.timeContainer, ["increment"], updateTime);
824
- bind(self.timeContainer, "blur", updateTime, { capture: true });
825
- bind(self.timeContainer, "click", timeIncrement);
826
- bind([self.hourElement, self.minuteElement], ["focus", "click"], selText);
827
- if (self.secondElement !== undefined)
828
- bind(self.secondElement, "focus", function () { return self.secondElement && self.secondElement.select(); });
829
- if (self.amPM !== undefined) {
830
- bind(self.amPM, "click", function (e) {
831
- updateTime(e);
832
- });
833
- }
834
- }
835
- if (self.config.allowInput) {
836
- bind(self._input, "blur", onBlur);
837
- }
838
- }
839
- function jumpToDate(jumpDate, triggerChange) {
840
- var jumpTo = jumpDate !== undefined
841
- ? self.parseDate(jumpDate)
842
- : self.latestSelectedDateObj ||
843
- (self.config.minDate && self.config.minDate > self.now
844
- ? self.config.minDate
845
- : self.config.maxDate && self.config.maxDate < self.now
846
- ? self.config.maxDate
847
- : self.now);
848
- var oldYear = self.currentYear;
849
- var oldMonth = self.currentMonth;
850
- try {
851
- if (jumpTo !== undefined) {
852
- self.currentYear = jumpTo.getFullYear();
853
- self.currentMonth = jumpTo.getMonth();
854
- }
855
- }
856
- catch (e) {
857
- e.message = "Invalid date supplied: " + jumpTo;
858
- self.config.errorHandler(e);
859
- }
860
- if (triggerChange && self.currentYear !== oldYear) {
861
- triggerEvent("onYearChange");
862
- buildMonthSwitch();
863
- }
864
- if (triggerChange &&
865
- (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {
866
- triggerEvent("onMonthChange");
867
- }
868
- self.redraw();
869
- }
870
- function timeIncrement(e) {
871
- var eventTarget = getEventTarget(e);
872
- if (~eventTarget.className.indexOf("arrow"))
873
- incrementNumInput(e, eventTarget.classList.contains("arrowUp") ? 1 : -1);
874
- }
875
- function incrementNumInput(e, delta, inputElem) {
876
- var target = e && getEventTarget(e);
877
- var input = inputElem ||
878
- (target && target.parentNode && target.parentNode.firstChild);
879
- var event = createEvent("increment");
880
- event.delta = delta;
881
- input && input.dispatchEvent(event);
882
- }
883
- function build() {
884
- var fragment = window.document.createDocumentFragment();
885
- self.calendarContainer = createElement("div", "flatpickr-calendar");
886
- self.calendarContainer.tabIndex = -1;
887
- if (!self.config.noCalendar) {
888
- fragment.appendChild(buildMonthNav());
889
- self.innerContainer = createElement("div", "flatpickr-innerContainer");
890
- if (self.config.weekNumbers) {
891
- var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;
892
- self.innerContainer.appendChild(weekWrapper);
893
- self.weekNumbers = weekNumbers;
894
- self.weekWrapper = weekWrapper;
895
- }
896
- self.rContainer = createElement("div", "flatpickr-rContainer");
897
- self.rContainer.appendChild(buildWeekdays());
898
- if (!self.daysContainer) {
899
- self.daysContainer = createElement("div", "flatpickr-days");
900
- self.daysContainer.tabIndex = -1;
901
- }
902
- buildDays();
903
- self.rContainer.appendChild(self.daysContainer);
904
- self.innerContainer.appendChild(self.rContainer);
905
- fragment.appendChild(self.innerContainer);
906
- }
907
- if (self.config.enableTime) {
908
- fragment.appendChild(buildTime());
909
- }
910
- toggleClass(self.calendarContainer, "rangeMode", self.config.mode === "range");
911
- toggleClass(self.calendarContainer, "animate", self.config.animate === true);
912
- toggleClass(self.calendarContainer, "multiMonth", self.config.showMonths > 1);
913
- self.calendarContainer.appendChild(fragment);
914
- var customAppend = self.config.appendTo !== undefined &&
915
- self.config.appendTo.nodeType !== undefined;
916
- if (self.config.inline || self.config.static) {
917
- self.calendarContainer.classList.add(self.config.inline ? "inline" : "static");
918
- if (self.config.inline) {
919
- if (!customAppend && self.element.parentNode)
920
- self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);
921
- else if (self.config.appendTo !== undefined)
922
- self.config.appendTo.appendChild(self.calendarContainer);
923
- }
924
- if (self.config.static) {
925
- var wrapper = createElement("div", "flatpickr-wrapper");
926
- if (self.element.parentNode)
927
- self.element.parentNode.insertBefore(wrapper, self.element);
928
- wrapper.appendChild(self.element);
929
- if (self.altInput)
930
- wrapper.appendChild(self.altInput);
931
- wrapper.appendChild(self.calendarContainer);
932
- }
933
- }
934
- if (!self.config.static && !self.config.inline)
935
- (self.config.appendTo !== undefined
936
- ? self.config.appendTo
937
- : window.document.body).appendChild(self.calendarContainer);
938
- }
939
- function createDay(className, date, _dayNumber, i) {
940
- var dateIsEnabled = isEnabled(date, true), dayElement = createElement("span", className, date.getDate().toString());
941
- dayElement.dateObj = date;
942
- dayElement.$i = i;
943
- dayElement.setAttribute("aria-label", self.formatDate(date, self.config.ariaDateFormat));
944
- if (className.indexOf("hidden") === -1 &&
945
- compareDates(date, self.now) === 0) {
946
- self.todayDateElem = dayElement;
947
- dayElement.classList.add("today");
948
- dayElement.setAttribute("aria-current", "date");
949
- }
950
- if (dateIsEnabled) {
951
- dayElement.tabIndex = -1;
952
- if (isDateSelected(date)) {
953
- dayElement.classList.add("selected");
954
- self.selectedDateElem = dayElement;
955
- if (self.config.mode === "range") {
956
- toggleClass(dayElement, "startRange", self.selectedDates[0] &&
957
- compareDates(date, self.selectedDates[0], true) === 0);
958
- toggleClass(dayElement, "endRange", self.selectedDates[1] &&
959
- compareDates(date, self.selectedDates[1], true) === 0);
960
- if (className === "nextMonthDay")
961
- dayElement.classList.add("inRange");
962
- }
963
- }
964
- }
965
- else {
966
- dayElement.classList.add("flatpickr-disabled");
967
- }
968
- if (self.config.mode === "range") {
969
- if (isDateInRange(date) && !isDateSelected(date))
970
- dayElement.classList.add("inRange");
971
- }
972
- if (self.weekNumbers &&
973
- self.config.showMonths === 1 &&
974
- className !== "prevMonthDay" &&
975
- i % 7 === 6) {
976
- self.weekNumbers.insertAdjacentHTML("beforeend", "<span class='flatpickr-day'>" + self.config.getWeek(date) + "</span>");
977
- }
978
- triggerEvent("onDayCreate", dayElement);
979
- return dayElement;
980
- }
981
- function focusOnDayElem(targetNode) {
982
- targetNode.focus();
983
- if (self.config.mode === "range")
984
- onMouseOver(targetNode);
985
- }
986
- function getFirstAvailableDay(delta) {
987
- var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;
988
- var endMonth = delta > 0 ? self.config.showMonths : -1;
989
- for (var m = startMonth; m != endMonth; m += delta) {
990
- var month = self.daysContainer.children[m];
991
- var startIndex = delta > 0 ? 0 : month.children.length - 1;
992
- var endIndex = delta > 0 ? month.children.length : -1;
993
- for (var i = startIndex; i != endIndex; i += delta) {
994
- var c = month.children[i];
995
- if (c.className.indexOf("hidden") === -1 && isEnabled(c.dateObj))
996
- return c;
997
- }
998
- }
999
- return undefined;
1000
- }
1001
- function getNextAvailableDay(current, delta) {
1002
- var givenMonth = current.className.indexOf("Month") === -1
1003
- ? current.dateObj.getMonth()
1004
- : self.currentMonth;
1005
- var endMonth = delta > 0 ? self.config.showMonths : -1;
1006
- var loopDelta = delta > 0 ? 1 : -1;
1007
- for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {
1008
- var month = self.daysContainer.children[m];
1009
- var startIndex = givenMonth - self.currentMonth === m
1010
- ? current.$i + delta
1011
- : delta < 0
1012
- ? month.children.length - 1
1013
- : 0;
1014
- var numMonthDays = month.children.length;
1015
- for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {
1016
- var c = month.children[i];
1017
- if (c.className.indexOf("hidden") === -1 &&
1018
- isEnabled(c.dateObj) &&
1019
- Math.abs(current.$i - i) >= Math.abs(delta))
1020
- return focusOnDayElem(c);
1021
- }
1022
- }
1023
- self.changeMonth(loopDelta);
1024
- focusOnDay(getFirstAvailableDay(loopDelta), 0);
1025
- return undefined;
1026
- }
1027
- function focusOnDay(current, offset) {
1028
- var activeElement = getClosestActiveElement();
1029
- var dayFocused = isInView(activeElement || document.body);
1030
- var startElem = current !== undefined
1031
- ? current
1032
- : dayFocused
1033
- ? activeElement
1034
- : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)
1035
- ? self.selectedDateElem
1036
- : self.todayDateElem !== undefined && isInView(self.todayDateElem)
1037
- ? self.todayDateElem
1038
- : getFirstAvailableDay(offset > 0 ? 1 : -1);
1039
- if (startElem === undefined) {
1040
- self._input.focus();
1041
- }
1042
- else if (!dayFocused) {
1043
- focusOnDayElem(startElem);
1044
- }
1045
- else {
1046
- getNextAvailableDay(startElem, offset);
1047
- }
1048
- }
1049
- function buildMonthDays(year, month) {
1050
- var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;
1051
- var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);
1052
- 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";
1053
- var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;
1054
- for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {
1055
- days.appendChild(createDay("flatpickr-day " + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));
1056
- }
1057
- for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {
1058
- days.appendChild(createDay("flatpickr-day", new Date(year, month, dayNumber), dayNumber, dayIndex));
1059
- }
1060
- for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&
1061
- (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {
1062
- days.appendChild(createDay("flatpickr-day " + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));
1063
- }
1064
- var dayContainer = createElement("div", "dayContainer");
1065
- dayContainer.appendChild(days);
1066
- return dayContainer;
1067
- }
1068
- function buildDays() {
1069
- if (self.daysContainer === undefined) {
1070
- return;
1071
- }
1072
- clearNode(self.daysContainer);
1073
- if (self.weekNumbers)
1074
- clearNode(self.weekNumbers);
1075
- var frag = document.createDocumentFragment();
1076
- for (var i = 0; i < self.config.showMonths; i++) {
1077
- var d = new Date(self.currentYear, self.currentMonth, 1);
1078
- d.setMonth(self.currentMonth + i);
1079
- frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));
1080
- }
1081
- self.daysContainer.appendChild(frag);
1082
- self.days = self.daysContainer.firstChild;
1083
- if (self.config.mode === "range" && self.selectedDates.length === 1) {
1084
- onMouseOver();
1085
- }
1086
- }
1087
- function buildMonthSwitch() {
1088
- if (self.config.showMonths > 1 ||
1089
- self.config.monthSelectorType !== "dropdown")
1090
- return;
1091
- var shouldBuildMonth = function (month) {
1092
- if (self.config.minDate !== undefined &&
1093
- self.currentYear === self.config.minDate.getFullYear() &&
1094
- month < self.config.minDate.getMonth()) {
1095
- return false;
1096
- }
1097
- return !(self.config.maxDate !== undefined &&
1098
- self.currentYear === self.config.maxDate.getFullYear() &&
1099
- month > self.config.maxDate.getMonth());
1100
- };
1101
- self.monthsDropdownContainer.tabIndex = -1;
1102
- self.monthsDropdownContainer.innerHTML = "";
1103
- for (var i = 0; i < 12; i++) {
1104
- if (!shouldBuildMonth(i))
1105
- continue;
1106
- var month = createElement("option", "flatpickr-monthDropdown-month");
1107
- month.value = new Date(self.currentYear, i).getMonth().toString();
1108
- month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);
1109
- month.tabIndex = -1;
1110
- if (self.currentMonth === i) {
1111
- month.selected = true;
1112
- }
1113
- self.monthsDropdownContainer.appendChild(month);
1114
- }
1115
- }
1116
- function buildMonth() {
1117
- var container = createElement("div", "flatpickr-month");
1118
- var monthNavFragment = window.document.createDocumentFragment();
1119
- var monthElement;
1120
- if (self.config.showMonths > 1 ||
1121
- self.config.monthSelectorType === "static") {
1122
- monthElement = createElement("span", "cur-month");
1123
- }
1124
- else {
1125
- self.monthsDropdownContainer = createElement("select", "flatpickr-monthDropdown-months");
1126
- self.monthsDropdownContainer.setAttribute("aria-label", self.l10n.monthAriaLabel);
1127
- bind(self.monthsDropdownContainer, "change", function (e) {
1128
- var target = getEventTarget(e);
1129
- var selectedMonth = parseInt(target.value, 10);
1130
- self.changeMonth(selectedMonth - self.currentMonth);
1131
- triggerEvent("onMonthChange");
1132
- });
1133
- buildMonthSwitch();
1134
- monthElement = self.monthsDropdownContainer;
1135
- }
1136
- var yearInput = createNumberInput("cur-year", { tabindex: "-1" });
1137
- var yearElement = yearInput.getElementsByTagName("input")[0];
1138
- yearElement.setAttribute("aria-label", self.l10n.yearAriaLabel);
1139
- if (self.config.minDate) {
1140
- yearElement.setAttribute("min", self.config.minDate.getFullYear().toString());
1141
- }
1142
- if (self.config.maxDate) {
1143
- yearElement.setAttribute("max", self.config.maxDate.getFullYear().toString());
1144
- yearElement.disabled =
1145
- !!self.config.minDate &&
1146
- self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();
1147
- }
1148
- var currentMonth = createElement("div", "flatpickr-current-month");
1149
- currentMonth.appendChild(monthElement);
1150
- currentMonth.appendChild(yearInput);
1151
- monthNavFragment.appendChild(currentMonth);
1152
- container.appendChild(monthNavFragment);
1153
- return {
1154
- container: container,
1155
- yearElement: yearElement,
1156
- monthElement: monthElement,
1157
- };
1158
- }
1159
- function buildMonths() {
1160
- clearNode(self.monthNav);
1161
- self.monthNav.appendChild(self.prevMonthNav);
1162
- if (self.config.showMonths) {
1163
- self.yearElements = [];
1164
- self.monthElements = [];
1165
- }
1166
- for (var m = self.config.showMonths; m--;) {
1167
- var month = buildMonth();
1168
- self.yearElements.push(month.yearElement);
1169
- self.monthElements.push(month.monthElement);
1170
- self.monthNav.appendChild(month.container);
1171
- }
1172
- self.monthNav.appendChild(self.nextMonthNav);
1173
- }
1174
- function buildMonthNav() {
1175
- self.monthNav = createElement("div", "flatpickr-months");
1176
- self.yearElements = [];
1177
- self.monthElements = [];
1178
- self.prevMonthNav = createElement("span", "flatpickr-prev-month");
1179
- self.prevMonthNav.innerHTML = self.config.prevArrow;
1180
- self.nextMonthNav = createElement("span", "flatpickr-next-month");
1181
- self.nextMonthNav.innerHTML = self.config.nextArrow;
1182
- buildMonths();
1183
- Object.defineProperty(self, "_hidePrevMonthArrow", {
1184
- get: function () { return self.__hidePrevMonthArrow; },
1185
- set: function (bool) {
1186
- if (self.__hidePrevMonthArrow !== bool) {
1187
- toggleClass(self.prevMonthNav, "flatpickr-disabled", bool);
1188
- self.__hidePrevMonthArrow = bool;
1189
- }
1190
- },
1191
- });
1192
- Object.defineProperty(self, "_hideNextMonthArrow", {
1193
- get: function () { return self.__hideNextMonthArrow; },
1194
- set: function (bool) {
1195
- if (self.__hideNextMonthArrow !== bool) {
1196
- toggleClass(self.nextMonthNav, "flatpickr-disabled", bool);
1197
- self.__hideNextMonthArrow = bool;
1198
- }
1199
- },
1200
- });
1201
- self.currentYearElement = self.yearElements[0];
1202
- updateNavigationCurrentMonth();
1203
- return self.monthNav;
1204
- }
1205
- function buildTime() {
1206
- self.calendarContainer.classList.add("hasTime");
1207
- if (self.config.noCalendar)
1208
- self.calendarContainer.classList.add("noCalendar");
1209
- var defaults = getDefaultHours(self.config);
1210
- self.timeContainer = createElement("div", "flatpickr-time");
1211
- self.timeContainer.tabIndex = -1;
1212
- var separator = createElement("span", "flatpickr-time-separator", ":");
1213
- var hourInput = createNumberInput("flatpickr-hour", {
1214
- "aria-label": self.l10n.hourAriaLabel,
1215
- });
1216
- self.hourElement = hourInput.getElementsByTagName("input")[0];
1217
- var minuteInput = createNumberInput("flatpickr-minute", {
1218
- "aria-label": self.l10n.minuteAriaLabel,
1219
- });
1220
- self.minuteElement = minuteInput.getElementsByTagName("input")[0];
1221
- self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;
1222
- self.hourElement.value = pad(self.latestSelectedDateObj
1223
- ? self.latestSelectedDateObj.getHours()
1224
- : self.config.time_24hr
1225
- ? defaults.hours
1226
- : military2ampm(defaults.hours));
1227
- self.minuteElement.value = pad(self.latestSelectedDateObj
1228
- ? self.latestSelectedDateObj.getMinutes()
1229
- : defaults.minutes);
1230
- self.hourElement.setAttribute("step", self.config.hourIncrement.toString());
1231
- self.minuteElement.setAttribute("step", self.config.minuteIncrement.toString());
1232
- self.hourElement.setAttribute("min", self.config.time_24hr ? "0" : "1");
1233
- self.hourElement.setAttribute("max", self.config.time_24hr ? "23" : "12");
1234
- self.hourElement.setAttribute("maxlength", "2");
1235
- self.minuteElement.setAttribute("min", "0");
1236
- self.minuteElement.setAttribute("max", "59");
1237
- self.minuteElement.setAttribute("maxlength", "2");
1238
- self.timeContainer.appendChild(hourInput);
1239
- self.timeContainer.appendChild(separator);
1240
- self.timeContainer.appendChild(minuteInput);
1241
- if (self.config.time_24hr)
1242
- self.timeContainer.classList.add("time24hr");
1243
- if (self.config.enableSeconds) {
1244
- self.timeContainer.classList.add("hasSeconds");
1245
- var secondInput = createNumberInput("flatpickr-second");
1246
- self.secondElement = secondInput.getElementsByTagName("input")[0];
1247
- self.secondElement.value = pad(self.latestSelectedDateObj
1248
- ? self.latestSelectedDateObj.getSeconds()
1249
- : defaults.seconds);
1250
- self.secondElement.setAttribute("step", self.minuteElement.getAttribute("step"));
1251
- self.secondElement.setAttribute("min", "0");
1252
- self.secondElement.setAttribute("max", "59");
1253
- self.secondElement.setAttribute("maxlength", "2");
1254
- self.timeContainer.appendChild(createElement("span", "flatpickr-time-separator", ":"));
1255
- self.timeContainer.appendChild(secondInput);
1256
- }
1257
- if (!self.config.time_24hr) {
1258
- self.amPM = createElement("span", "flatpickr-am-pm", self.l10n.amPM[int((self.latestSelectedDateObj
1259
- ? self.hourElement.value
1260
- : self.config.defaultHour) > 11)]);
1261
- self.amPM.title = self.l10n.toggleTitle;
1262
- self.amPM.tabIndex = -1;
1263
- self.timeContainer.appendChild(self.amPM);
1264
- }
1265
- return self.timeContainer;
1266
- }
1267
- function buildWeekdays() {
1268
- if (!self.weekdayContainer)
1269
- self.weekdayContainer = createElement("div", "flatpickr-weekdays");
1270
- else
1271
- clearNode(self.weekdayContainer);
1272
- for (var i = self.config.showMonths; i--;) {
1273
- var container = createElement("div", "flatpickr-weekdaycontainer");
1274
- self.weekdayContainer.appendChild(container);
1275
- }
1276
- updateWeekdays();
1277
- return self.weekdayContainer;
1278
- }
1279
- function updateWeekdays() {
1280
- if (!self.weekdayContainer) {
1281
- return;
1282
- }
1283
- var firstDayOfWeek = self.l10n.firstDayOfWeek;
1284
- var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);
1285
- if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {
1286
- weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));
1287
- }
1288
- for (var i = self.config.showMonths; i--;) {
1289
- self.weekdayContainer.children[i].innerHTML = "\n <span class='flatpickr-weekday'>\n " + weekdays.join("</span><span class='flatpickr-weekday'>") + "\n </span>\n ";
1290
- }
1291
- }
1292
- function buildWeeks() {
1293
- self.calendarContainer.classList.add("hasWeeks");
1294
- var weekWrapper = createElement("div", "flatpickr-weekwrapper");
1295
- weekWrapper.appendChild(createElement("span", "flatpickr-weekday", self.l10n.weekAbbreviation));
1296
- var weekNumbers = createElement("div", "flatpickr-weeks");
1297
- weekWrapper.appendChild(weekNumbers);
1298
- return {
1299
- weekWrapper: weekWrapper,
1300
- weekNumbers: weekNumbers,
1301
- };
1302
- }
1303
- function changeMonth(value, isOffset) {
1304
- if (isOffset === void 0) { isOffset = true; }
1305
- var delta = isOffset ? value : value - self.currentMonth;
1306
- if ((delta < 0 && self._hidePrevMonthArrow === true) ||
1307
- (delta > 0 && self._hideNextMonthArrow === true))
1308
- return;
1309
- self.currentMonth += delta;
1310
- if (self.currentMonth < 0 || self.currentMonth > 11) {
1311
- self.currentYear += self.currentMonth > 11 ? 1 : -1;
1312
- self.currentMonth = (self.currentMonth + 12) % 12;
1313
- triggerEvent("onYearChange");
1314
- buildMonthSwitch();
1315
- }
1316
- buildDays();
1317
- triggerEvent("onMonthChange");
1318
- updateNavigationCurrentMonth();
1319
- }
1320
- function clear(triggerChangeEvent, toInitial) {
1321
- if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }
1322
- if (toInitial === void 0) { toInitial = true; }
1323
- self.input.value = "";
1324
- if (self.altInput !== undefined)
1325
- self.altInput.value = "";
1326
- if (self.mobileInput !== undefined)
1327
- self.mobileInput.value = "";
1328
- self.selectedDates = [];
1329
- self.latestSelectedDateObj = undefined;
1330
- if (toInitial === true) {
1331
- self.currentYear = self._initialDate.getFullYear();
1332
- self.currentMonth = self._initialDate.getMonth();
1333
- }
1334
- if (self.config.enableTime === true) {
1335
- var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;
1336
- setHours(hours, minutes, seconds);
1337
- }
1338
- self.redraw();
1339
- if (triggerChangeEvent)
1340
- triggerEvent("onChange");
1341
- }
1342
- function close() {
1343
- self.isOpen = false;
1344
- if (!self.isMobile) {
1345
- if (self.calendarContainer !== undefined) {
1346
- self.calendarContainer.classList.remove("open");
1347
- }
1348
- if (self._input !== undefined) {
1349
- self._input.classList.remove("active");
1350
- }
1351
- }
1352
- triggerEvent("onClose");
1353
- }
1354
- function destroy() {
1355
- if (self.config !== undefined)
1356
- triggerEvent("onDestroy");
1357
- for (var i = self._handlers.length; i--;) {
1358
- self._handlers[i].remove();
1359
- }
1360
- self._handlers = [];
1361
- if (self.mobileInput) {
1362
- if (self.mobileInput.parentNode)
1363
- self.mobileInput.parentNode.removeChild(self.mobileInput);
1364
- self.mobileInput = undefined;
1365
- }
1366
- else if (self.calendarContainer && self.calendarContainer.parentNode) {
1367
- if (self.config.static && self.calendarContainer.parentNode) {
1368
- var wrapper = self.calendarContainer.parentNode;
1369
- wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);
1370
- if (wrapper.parentNode) {
1371
- while (wrapper.firstChild)
1372
- wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);
1373
- wrapper.parentNode.removeChild(wrapper);
1374
- }
1375
- }
1376
- else
1377
- self.calendarContainer.parentNode.removeChild(self.calendarContainer);
1378
- }
1379
- if (self.altInput) {
1380
- self.input.type = "text";
1381
- if (self.altInput.parentNode)
1382
- self.altInput.parentNode.removeChild(self.altInput);
1383
- delete self.altInput;
1384
- }
1385
- if (self.input) {
1386
- self.input.type = self.input._type;
1387
- self.input.classList.remove("flatpickr-input");
1388
- self.input.removeAttribute("readonly");
1389
- }
1390
- [
1391
- "_showTimeInput",
1392
- "latestSelectedDateObj",
1393
- "_hideNextMonthArrow",
1394
- "_hidePrevMonthArrow",
1395
- "__hideNextMonthArrow",
1396
- "__hidePrevMonthArrow",
1397
- "isMobile",
1398
- "isOpen",
1399
- "selectedDateElem",
1400
- "minDateHasTime",
1401
- "maxDateHasTime",
1402
- "days",
1403
- "daysContainer",
1404
- "_input",
1405
- "_positionElement",
1406
- "innerContainer",
1407
- "rContainer",
1408
- "monthNav",
1409
- "todayDateElem",
1410
- "calendarContainer",
1411
- "weekdayContainer",
1412
- "prevMonthNav",
1413
- "nextMonthNav",
1414
- "monthsDropdownContainer",
1415
- "currentMonthElement",
1416
- "currentYearElement",
1417
- "navigationCurrentMonth",
1418
- "selectedDateElem",
1419
- "config",
1420
- ].forEach(function (k) {
1421
- try {
1422
- delete self[k];
1423
- }
1424
- catch (_) { }
1425
- });
1426
- }
1427
- function isCalendarElem(elem) {
1428
- return self.calendarContainer.contains(elem);
1429
- }
1430
- function documentClick(e) {
1431
- if (self.isOpen && !self.config.inline) {
1432
- var eventTarget_1 = getEventTarget(e);
1433
- var isCalendarElement = isCalendarElem(eventTarget_1);
1434
- var isInput = eventTarget_1 === self.input ||
1435
- eventTarget_1 === self.altInput ||
1436
- self.element.contains(eventTarget_1) ||
1437
- (e.path &&
1438
- e.path.indexOf &&
1439
- (~e.path.indexOf(self.input) ||
1440
- ~e.path.indexOf(self.altInput)));
1441
- var lostFocus = !isInput &&
1442
- !isCalendarElement &&
1443
- !isCalendarElem(e.relatedTarget);
1444
- var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {
1445
- return elem.contains(eventTarget_1);
1446
- });
1447
- if (lostFocus && isIgnored) {
1448
- if (self.config.allowInput) {
1449
- self.setDate(self._input.value, false, self.config.altInput
1450
- ? self.config.altFormat
1451
- : self.config.dateFormat);
1452
- }
1453
- if (self.timeContainer !== undefined &&
1454
- self.minuteElement !== undefined &&
1455
- self.hourElement !== undefined &&
1456
- self.input.value !== "" &&
1457
- self.input.value !== undefined) {
1458
- updateTime();
1459
- }
1460
- self.close();
1461
- if (self.config &&
1462
- self.config.mode === "range" &&
1463
- self.selectedDates.length === 1)
1464
- self.clear(false);
1465
- }
1466
- }
1467
- }
1468
- function changeYear(newYear) {
1469
- if (!newYear ||
1470
- (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||
1471
- (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))
1472
- return;
1473
- var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;
1474
- self.currentYear = newYearNum || self.currentYear;
1475
- if (self.config.maxDate &&
1476
- self.currentYear === self.config.maxDate.getFullYear()) {
1477
- self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);
1478
- }
1479
- else if (self.config.minDate &&
1480
- self.currentYear === self.config.minDate.getFullYear()) {
1481
- self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);
1482
- }
1483
- if (isNewYear) {
1484
- self.redraw();
1485
- triggerEvent("onYearChange");
1486
- buildMonthSwitch();
1487
- }
1488
- }
1489
- function isEnabled(date, timeless) {
1490
- var _a;
1491
- if (timeless === void 0) { timeless = true; }
1492
- var dateToCheck = self.parseDate(date, undefined, timeless);
1493
- if ((self.config.minDate &&
1494
- dateToCheck &&
1495
- compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||
1496
- (self.config.maxDate &&
1497
- dateToCheck &&
1498
- compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))
1499
- return false;
1500
- if (!self.config.enable && self.config.disable.length === 0)
1501
- return true;
1502
- if (dateToCheck === undefined)
1503
- return false;
1504
- var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;
1505
- for (var i = 0, d = void 0; i < array.length; i++) {
1506
- d = array[i];
1507
- if (typeof d === "function" &&
1508
- d(dateToCheck))
1509
- return bool;
1510
- else if (d instanceof Date &&
1511
- dateToCheck !== undefined &&
1512
- d.getTime() === dateToCheck.getTime())
1513
- return bool;
1514
- else if (typeof d === "string") {
1515
- var parsed = self.parseDate(d, undefined, true);
1516
- return parsed && parsed.getTime() === dateToCheck.getTime()
1517
- ? bool
1518
- : !bool;
1519
- }
1520
- else if (typeof d === "object" &&
1521
- dateToCheck !== undefined &&
1522
- d.from &&
1523
- d.to &&
1524
- dateToCheck.getTime() >= d.from.getTime() &&
1525
- dateToCheck.getTime() <= d.to.getTime())
1526
- return bool;
1527
- }
1528
- return !bool;
1529
- }
1530
- function isInView(elem) {
1531
- if (self.daysContainer !== undefined)
1532
- return (elem.className.indexOf("hidden") === -1 &&
1533
- elem.className.indexOf("flatpickr-disabled") === -1 &&
1534
- self.daysContainer.contains(elem));
1535
- return false;
1536
- }
1537
- function onBlur(e) {
1538
- var isInput = e.target === self._input;
1539
- var valueChanged = self._input.value.trimEnd() !== getDateStr();
1540
- if (isInput &&
1541
- valueChanged &&
1542
- !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {
1543
- self.setDate(self._input.value, true, e.target === self.altInput
1544
- ? self.config.altFormat
1545
- : self.config.dateFormat);
1546
- }
1547
- }
1548
- function onKeyDown(e) {
1549
- var eventTarget = getEventTarget(e);
1550
- var isInput = self.config.wrap
1551
- ? element.contains(eventTarget)
1552
- : eventTarget === self._input;
1553
- var allowInput = self.config.allowInput;
1554
- var allowKeydown = self.isOpen && (!allowInput || !isInput);
1555
- var allowInlineKeydown = self.config.inline && isInput && !allowInput;
1556
- if (e.keyCode === 13 && isInput) {
1557
- if (allowInput) {
1558
- self.setDate(self._input.value, true, eventTarget === self.altInput
1559
- ? self.config.altFormat
1560
- : self.config.dateFormat);
1561
- self.close();
1562
- return eventTarget.blur();
1563
- }
1564
- else {
1565
- self.open();
1566
- }
1567
- }
1568
- else if (isCalendarElem(eventTarget) ||
1569
- allowKeydown ||
1570
- allowInlineKeydown) {
1571
- var isTimeObj = !!self.timeContainer &&
1572
- self.timeContainer.contains(eventTarget);
1573
- switch (e.keyCode) {
1574
- case 13:
1575
- if (isTimeObj) {
1576
- e.preventDefault();
1577
- updateTime();
1578
- focusAndClose();
1579
- }
1580
- else
1581
- selectDate(e);
1582
- break;
1583
- case 27:
1584
- e.preventDefault();
1585
- focusAndClose();
1586
- break;
1587
- case 8:
1588
- case 46:
1589
- if (isInput && !self.config.allowInput) {
1590
- e.preventDefault();
1591
- self.clear();
1592
- }
1593
- break;
1594
- case 37:
1595
- case 39:
1596
- if (!isTimeObj && !isInput) {
1597
- e.preventDefault();
1598
- var activeElement = getClosestActiveElement();
1599
- if (self.daysContainer !== undefined &&
1600
- (allowInput === false ||
1601
- (activeElement && isInView(activeElement)))) {
1602
- var delta_1 = e.keyCode === 39 ? 1 : -1;
1603
- if (!e.ctrlKey)
1604
- focusOnDay(undefined, delta_1);
1605
- else {
1606
- e.stopPropagation();
1607
- changeMonth(delta_1);
1608
- focusOnDay(getFirstAvailableDay(1), 0);
1609
- }
1610
- }
1611
- }
1612
- else if (self.hourElement)
1613
- self.hourElement.focus();
1614
- break;
1615
- case 38:
1616
- case 40:
1617
- e.preventDefault();
1618
- var delta = e.keyCode === 40 ? 1 : -1;
1619
- if ((self.daysContainer &&
1620
- eventTarget.$i !== undefined) ||
1621
- eventTarget === self.input ||
1622
- eventTarget === self.altInput) {
1623
- if (e.ctrlKey) {
1624
- e.stopPropagation();
1625
- changeYear(self.currentYear - delta);
1626
- focusOnDay(getFirstAvailableDay(1), 0);
1627
- }
1628
- else if (!isTimeObj)
1629
- focusOnDay(undefined, delta * 7);
1630
- }
1631
- else if (eventTarget === self.currentYearElement) {
1632
- changeYear(self.currentYear - delta);
1633
- }
1634
- else if (self.config.enableTime) {
1635
- if (!isTimeObj && self.hourElement)
1636
- self.hourElement.focus();
1637
- updateTime(e);
1638
- self._debouncedChange();
1639
- }
1640
- break;
1641
- case 9:
1642
- if (isTimeObj) {
1643
- var elems = [
1644
- self.hourElement,
1645
- self.minuteElement,
1646
- self.secondElement,
1647
- self.amPM,
1648
- ]
1649
- .concat(self.pluginElements)
1650
- .filter(function (x) { return x; });
1651
- var i = elems.indexOf(eventTarget);
1652
- if (i !== -1) {
1653
- var target = elems[i + (e.shiftKey ? -1 : 1)];
1654
- e.preventDefault();
1655
- (target || self._input).focus();
1656
- }
1657
- }
1658
- else if (!self.config.noCalendar &&
1659
- self.daysContainer &&
1660
- self.daysContainer.contains(eventTarget) &&
1661
- e.shiftKey) {
1662
- e.preventDefault();
1663
- self._input.focus();
1664
- }
1665
- break;
1666
- }
1667
- }
1668
- if (self.amPM !== undefined && eventTarget === self.amPM) {
1669
- switch (e.key) {
1670
- case self.l10n.amPM[0].charAt(0):
1671
- case self.l10n.amPM[0].charAt(0).toLowerCase():
1672
- self.amPM.textContent = self.l10n.amPM[0];
1673
- setHoursFromInputs();
1674
- updateValue();
1675
- break;
1676
- case self.l10n.amPM[1].charAt(0):
1677
- case self.l10n.amPM[1].charAt(0).toLowerCase():
1678
- self.amPM.textContent = self.l10n.amPM[1];
1679
- setHoursFromInputs();
1680
- updateValue();
1681
- break;
1682
- }
1683
- }
1684
- if (isInput || isCalendarElem(eventTarget)) {
1685
- triggerEvent("onKeyDown", e);
1686
- }
1687
- }
1688
- function onMouseOver(elem, cellClass) {
1689
- if (cellClass === void 0) { cellClass = "flatpickr-day"; }
1690
- if (self.selectedDates.length !== 1 ||
1691
- (elem &&
1692
- (!elem.classList.contains(cellClass) ||
1693
- elem.classList.contains("flatpickr-disabled"))))
1694
- return;
1695
- var hoverDate = elem
1696
- ? elem.dateObj.getTime()
1697
- : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());
1698
- var containsDisabled = false;
1699
- var minRange = 0, maxRange = 0;
1700
- for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {
1701
- if (!isEnabled(new Date(t), true)) {
1702
- containsDisabled =
1703
- containsDisabled || (t > rangeStartDate && t < rangeEndDate);
1704
- if (t < initialDate && (!minRange || t > minRange))
1705
- minRange = t;
1706
- else if (t > initialDate && (!maxRange || t < maxRange))
1707
- maxRange = t;
1708
- }
1709
- }
1710
- var hoverableCells = Array.from(self.rContainer.querySelectorAll("*:nth-child(-n+" + self.config.showMonths + ") > ." + cellClass));
1711
- hoverableCells.forEach(function (dayElem) {
1712
- var date = dayElem.dateObj;
1713
- var timestamp = date.getTime();
1714
- var outOfRange = (minRange > 0 && timestamp < minRange) ||
1715
- (maxRange > 0 && timestamp > maxRange);
1716
- if (outOfRange) {
1717
- dayElem.classList.add("notAllowed");
1718
- ["inRange", "startRange", "endRange"].forEach(function (c) {
1719
- dayElem.classList.remove(c);
1720
- });
1721
- return;
1722
- }
1723
- else if (containsDisabled && !outOfRange)
1724
- return;
1725
- ["startRange", "inRange", "endRange", "notAllowed"].forEach(function (c) {
1726
- dayElem.classList.remove(c);
1727
- });
1728
- if (elem !== undefined) {
1729
- elem.classList.add(hoverDate <= self.selectedDates[0].getTime()
1730
- ? "startRange"
1731
- : "endRange");
1732
- if (initialDate < hoverDate && timestamp === initialDate)
1733
- dayElem.classList.add("startRange");
1734
- else if (initialDate > hoverDate && timestamp === initialDate)
1735
- dayElem.classList.add("endRange");
1736
- if (timestamp >= minRange &&
1737
- (maxRange === 0 || timestamp <= maxRange) &&
1738
- isBetween(timestamp, initialDate, hoverDate))
1739
- dayElem.classList.add("inRange");
1740
- }
1741
- });
1742
- }
1743
- function onResize() {
1744
- if (self.isOpen && !self.config.static && !self.config.inline)
1745
- positionCalendar();
1746
- }
1747
- function open(e, positionElement) {
1748
- if (positionElement === void 0) { positionElement = self._positionElement; }
1749
- if (self.isMobile === true) {
1750
- if (e) {
1751
- e.preventDefault();
1752
- var eventTarget = getEventTarget(e);
1753
- if (eventTarget) {
1754
- eventTarget.blur();
1755
- }
1756
- }
1757
- if (self.mobileInput !== undefined) {
1758
- self.mobileInput.focus();
1759
- self.mobileInput.click();
1760
- }
1761
- triggerEvent("onOpen");
1762
- return;
1763
- }
1764
- else if (self._input.disabled || self.config.inline) {
1765
- return;
1766
- }
1767
- var wasOpen = self.isOpen;
1768
- self.isOpen = true;
1769
- if (!wasOpen) {
1770
- self.calendarContainer.classList.add("open");
1771
- self._input.classList.add("active");
1772
- triggerEvent("onOpen");
1773
- positionCalendar(positionElement);
1774
- }
1775
- if (self.config.enableTime === true && self.config.noCalendar === true) {
1776
- if (self.config.allowInput === false &&
1777
- (e === undefined ||
1778
- !self.timeContainer.contains(e.relatedTarget))) {
1779
- setTimeout(function () { return self.hourElement.select(); }, 50);
1780
- }
1781
- }
1782
- }
1783
- function minMaxDateSetter(type) {
1784
- return function (date) {
1785
- var dateObj = (self.config["_" + type + "Date"] = self.parseDate(date, self.config.dateFormat));
1786
- var inverseDateObj = self.config["_" + (type === "min" ? "max" : "min") + "Date"];
1787
- if (dateObj !== undefined) {
1788
- self[type === "min" ? "minDateHasTime" : "maxDateHasTime"] =
1789
- dateObj.getHours() > 0 ||
1790
- dateObj.getMinutes() > 0 ||
1791
- dateObj.getSeconds() > 0;
1792
- }
1793
- if (self.selectedDates) {
1794
- self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });
1795
- if (!self.selectedDates.length && type === "min")
1796
- setHoursFromDate(dateObj);
1797
- updateValue();
1798
- }
1799
- if (self.daysContainer) {
1800
- redraw();
1801
- if (dateObj !== undefined)
1802
- self.currentYearElement[type] = dateObj.getFullYear().toString();
1803
- else
1804
- self.currentYearElement.removeAttribute(type);
1805
- self.currentYearElement.disabled =
1806
- !!inverseDateObj &&
1807
- dateObj !== undefined &&
1808
- inverseDateObj.getFullYear() === dateObj.getFullYear();
1809
- }
1810
- };
1811
- }
1812
- function parseConfig() {
1813
- var boolOpts = [
1814
- "wrap",
1815
- "weekNumbers",
1816
- "allowInput",
1817
- "allowInvalidPreload",
1818
- "clickOpens",
1819
- "time_24hr",
1820
- "enableTime",
1821
- "noCalendar",
1822
- "altInput",
1823
- "shorthandCurrentMonth",
1824
- "inline",
1825
- "static",
1826
- "enableSeconds",
1827
- "disableMobile",
1828
- ];
1829
- var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);
1830
- var formats = {};
1831
- self.config.parseDate = userConfig.parseDate;
1832
- self.config.formatDate = userConfig.formatDate;
1833
- Object.defineProperty(self.config, "enable", {
1834
- get: function () { return self.config._enable; },
1835
- set: function (dates) {
1836
- self.config._enable = parseDateRules(dates);
1837
- },
1838
- });
1839
- Object.defineProperty(self.config, "disable", {
1840
- get: function () { return self.config._disable; },
1841
- set: function (dates) {
1842
- self.config._disable = parseDateRules(dates);
1843
- },
1844
- });
1845
- var timeMode = userConfig.mode === "time";
1846
- if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {
1847
- var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;
1848
- formats.dateFormat =
1849
- userConfig.noCalendar || timeMode
1850
- ? "H:i" + (userConfig.enableSeconds ? ":S" : "")
1851
- : defaultDateFormat + " H:i" + (userConfig.enableSeconds ? ":S" : "");
1852
- }
1853
- if (userConfig.altInput &&
1854
- (userConfig.enableTime || timeMode) &&
1855
- !userConfig.altFormat) {
1856
- var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;
1857
- formats.altFormat =
1858
- userConfig.noCalendar || timeMode
1859
- ? "h:i" + (userConfig.enableSeconds ? ":S K" : " K")
1860
- : defaultAltFormat + (" h:i" + (userConfig.enableSeconds ? ":S" : "") + " K");
1861
- }
1862
- Object.defineProperty(self.config, "minDate", {
1863
- get: function () { return self.config._minDate; },
1864
- set: minMaxDateSetter("min"),
1865
- });
1866
- Object.defineProperty(self.config, "maxDate", {
1867
- get: function () { return self.config._maxDate; },
1868
- set: minMaxDateSetter("max"),
1869
- });
1870
- var minMaxTimeSetter = function (type) { return function (val) {
1871
- self.config[type === "min" ? "_minTime" : "_maxTime"] = self.parseDate(val, "H:i:S");
1872
- }; };
1873
- Object.defineProperty(self.config, "minTime", {
1874
- get: function () { return self.config._minTime; },
1875
- set: minMaxTimeSetter("min"),
1876
- });
1877
- Object.defineProperty(self.config, "maxTime", {
1878
- get: function () { return self.config._maxTime; },
1879
- set: minMaxTimeSetter("max"),
1880
- });
1881
- if (userConfig.mode === "time") {
1882
- self.config.noCalendar = true;
1883
- self.config.enableTime = true;
1884
- }
1885
- Object.assign(self.config, formats, userConfig);
1886
- for (var i = 0; i < boolOpts.length; i++)
1887
- self.config[boolOpts[i]] =
1888
- self.config[boolOpts[i]] === true ||
1889
- self.config[boolOpts[i]] === "true";
1890
- HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {
1891
- self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);
1892
- });
1893
- self.isMobile =
1894
- !self.config.disableMobile &&
1895
- !self.config.inline &&
1896
- self.config.mode === "single" &&
1897
- !self.config.disable.length &&
1898
- !self.config.enable &&
1899
- !self.config.weekNumbers &&
1900
- /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
1901
- for (var i = 0; i < self.config.plugins.length; i++) {
1902
- var pluginConf = self.config.plugins[i](self) || {};
1903
- for (var key in pluginConf) {
1904
- if (HOOKS.indexOf(key) > -1) {
1905
- self.config[key] = arrayify(pluginConf[key])
1906
- .map(bindToInstance)
1907
- .concat(self.config[key]);
1908
- }
1909
- else if (typeof userConfig[key] === "undefined")
1910
- self.config[key] = pluginConf[key];
1911
- }
1912
- }
1913
- if (!userConfig.altInputClass) {
1914
- self.config.altInputClass =
1915
- getInputElem().className + " " + self.config.altInputClass;
1916
- }
1917
- triggerEvent("onParseConfig");
1918
- }
1919
- function getInputElem() {
1920
- return self.config.wrap
1921
- ? element.querySelector("[data-input]")
1922
- : element;
1923
- }
1924
- function setupLocale() {
1925
- if (typeof self.config.locale !== "object" &&
1926
- typeof flatpickr.l10ns[self.config.locale] === "undefined")
1927
- self.config.errorHandler(new Error("flatpickr: invalid locale " + self.config.locale));
1928
- self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === "object"
1929
- ? self.config.locale
1930
- : self.config.locale !== "default"
1931
- ? flatpickr.l10ns[self.config.locale]
1932
- : undefined));
1933
- tokenRegex.D = "(" + self.l10n.weekdays.shorthand.join("|") + ")";
1934
- tokenRegex.l = "(" + self.l10n.weekdays.longhand.join("|") + ")";
1935
- tokenRegex.M = "(" + self.l10n.months.shorthand.join("|") + ")";
1936
- tokenRegex.F = "(" + self.l10n.months.longhand.join("|") + ")";
1937
- tokenRegex.K = "(" + self.l10n.amPM[0] + "|" + self.l10n.amPM[1] + "|" + self.l10n.amPM[0].toLowerCase() + "|" + self.l10n.amPM[1].toLowerCase() + ")";
1938
- var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));
1939
- if (userConfig.time_24hr === undefined &&
1940
- flatpickr.defaultConfig.time_24hr === undefined) {
1941
- self.config.time_24hr = self.l10n.time_24hr;
1942
- }
1943
- self.formatDate = createDateFormatter(self);
1944
- self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });
1945
- }
1946
- function positionCalendar(customPositionElement) {
1947
- if (typeof self.config.position === "function") {
1948
- return void self.config.position(self, customPositionElement);
1949
- }
1950
- if (self.calendarContainer === undefined)
1951
- return;
1952
- triggerEvent("onPreCalendarPosition");
1953
- var positionElement = customPositionElement || self._positionElement;
1954
- var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(" "), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === "above" ||
1955
- (configPosVertical !== "below" &&
1956
- distanceFromBottom < calendarHeight &&
1957
- inputBounds.top > calendarHeight);
1958
- var top = window.pageYOffset +
1959
- inputBounds.top +
1960
- (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);
1961
- toggleClass(self.calendarContainer, "arrowTop", !showOnTop);
1962
- toggleClass(self.calendarContainer, "arrowBottom", showOnTop);
1963
- if (self.config.inline)
1964
- return;
1965
- var left = window.pageXOffset + inputBounds.left;
1966
- var isCenter = false;
1967
- var isRight = false;
1968
- if (configPosHorizontal === "center") {
1969
- left -= (calendarWidth - inputBounds.width) / 2;
1970
- isCenter = true;
1971
- }
1972
- else if (configPosHorizontal === "right") {
1973
- left -= calendarWidth - inputBounds.width;
1974
- isRight = true;
1975
- }
1976
- toggleClass(self.calendarContainer, "arrowLeft", !isCenter && !isRight);
1977
- toggleClass(self.calendarContainer, "arrowCenter", isCenter);
1978
- toggleClass(self.calendarContainer, "arrowRight", isRight);
1979
- var right = window.document.body.offsetWidth -
1980
- (window.pageXOffset + inputBounds.right);
1981
- var rightMost = left + calendarWidth > window.document.body.offsetWidth;
1982
- var centerMost = right + calendarWidth > window.document.body.offsetWidth;
1983
- toggleClass(self.calendarContainer, "rightMost", rightMost);
1984
- if (self.config.static)
1985
- return;
1986
- self.calendarContainer.style.top = top + "px";
1987
- if (!rightMost) {
1988
- self.calendarContainer.style.left = left + "px";
1989
- self.calendarContainer.style.right = "auto";
1990
- }
1991
- else if (!centerMost) {
1992
- self.calendarContainer.style.left = "auto";
1993
- self.calendarContainer.style.right = right + "px";
1994
- }
1995
- else {
1996
- var doc = getDocumentStyleSheet();
1997
- if (doc === undefined)
1998
- return;
1999
- var bodyWidth = window.document.body.offsetWidth;
2000
- var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);
2001
- var centerBefore = ".flatpickr-calendar.centerMost:before";
2002
- var centerAfter = ".flatpickr-calendar.centerMost:after";
2003
- var centerIndex = doc.cssRules.length;
2004
- var centerStyle = "{left:" + inputBounds.left + "px;right:auto;}";
2005
- toggleClass(self.calendarContainer, "rightMost", false);
2006
- toggleClass(self.calendarContainer, "centerMost", true);
2007
- doc.insertRule(centerBefore + "," + centerAfter + centerStyle, centerIndex);
2008
- self.calendarContainer.style.left = centerLeft + "px";
2009
- self.calendarContainer.style.right = "auto";
2010
- }
2011
- }
2012
- function getDocumentStyleSheet() {
2013
- var editableSheet = null;
2014
- for (var i = 0; i < document.styleSheets.length; i++) {
2015
- var sheet = document.styleSheets[i];
2016
- if (!sheet.cssRules)
2017
- continue;
2018
- editableSheet = sheet;
2019
- break;
2020
- }
2021
- return editableSheet != null ? editableSheet : createStyleSheet();
2022
- }
2023
- function createStyleSheet() {
2024
- var style = document.createElement("style");
2025
- document.head.appendChild(style);
2026
- return style.sheet;
2027
- }
2028
- function redraw() {
2029
- if (self.config.noCalendar || self.isMobile)
2030
- return;
2031
- buildMonthSwitch();
2032
- updateNavigationCurrentMonth();
2033
- buildDays();
2034
- }
2035
- function focusAndClose() {
2036
- self._input.focus();
2037
- if (window.navigator.userAgent.indexOf("MSIE") !== -1 ||
2038
- navigator.msMaxTouchPoints !== undefined) {
2039
- setTimeout(self.close, 0);
2040
- }
2041
- else {
2042
- self.close();
2043
- }
2044
- }
2045
- function selectDate(e) {
2046
- e.preventDefault();
2047
- e.stopPropagation();
2048
- var isSelectable = function (day) {
2049
- return day.classList &&
2050
- day.classList.contains("flatpickr-day") &&
2051
- !day.classList.contains("flatpickr-disabled") &&
2052
- !day.classList.contains("notAllowed");
2053
- };
2054
- var t = findParent(getEventTarget(e), isSelectable);
2055
- if (t === undefined)
2056
- return;
2057
- var target = t;
2058
- var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));
2059
- var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||
2060
- selectedDate.getMonth() >
2061
- self.currentMonth + self.config.showMonths - 1) &&
2062
- self.config.mode !== "range";
2063
- self.selectedDateElem = target;
2064
- if (self.config.mode === "single")
2065
- self.selectedDates = [selectedDate];
2066
- else if (self.config.mode === "multiple") {
2067
- var selectedIndex = isDateSelected(selectedDate);
2068
- if (selectedIndex)
2069
- self.selectedDates.splice(parseInt(selectedIndex), 1);
2070
- else
2071
- self.selectedDates.push(selectedDate);
2072
- }
2073
- else if (self.config.mode === "range") {
2074
- if (self.selectedDates.length === 2) {
2075
- self.clear(false, false);
2076
- }
2077
- self.latestSelectedDateObj = selectedDate;
2078
- self.selectedDates.push(selectedDate);
2079
- if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)
2080
- self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
2081
- }
2082
- setHoursFromInputs();
2083
- if (shouldChangeMonth) {
2084
- var isNewYear = self.currentYear !== selectedDate.getFullYear();
2085
- self.currentYear = selectedDate.getFullYear();
2086
- self.currentMonth = selectedDate.getMonth();
2087
- if (isNewYear) {
2088
- triggerEvent("onYearChange");
2089
- buildMonthSwitch();
2090
- }
2091
- triggerEvent("onMonthChange");
2092
- }
2093
- updateNavigationCurrentMonth();
2094
- buildDays();
2095
- updateValue();
2096
- if (!shouldChangeMonth &&
2097
- self.config.mode !== "range" &&
2098
- self.config.showMonths === 1)
2099
- focusOnDayElem(target);
2100
- else if (self.selectedDateElem !== undefined &&
2101
- self.hourElement === undefined) {
2102
- self.selectedDateElem && self.selectedDateElem.focus();
2103
- }
2104
- if (self.hourElement !== undefined)
2105
- self.hourElement !== undefined && self.hourElement.focus();
2106
- if (self.config.closeOnSelect) {
2107
- var single = self.config.mode === "single" && !self.config.enableTime;
2108
- var range = self.config.mode === "range" &&
2109
- self.selectedDates.length === 2 &&
2110
- !self.config.enableTime;
2111
- if (single || range) {
2112
- focusAndClose();
2113
- }
2114
- }
2115
- triggerChange();
2116
- }
2117
- var CALLBACKS = {
2118
- locale: [setupLocale, updateWeekdays],
2119
- showMonths: [buildMonths, setCalendarWidth, buildWeekdays],
2120
- minDate: [jumpToDate],
2121
- maxDate: [jumpToDate],
2122
- positionElement: [updatePositionElement],
2123
- clickOpens: [
2124
- function () {
2125
- if (self.config.clickOpens === true) {
2126
- bind(self._input, "focus", self.open);
2127
- bind(self._input, "click", self.open);
2128
- }
2129
- else {
2130
- self._input.removeEventListener("focus", self.open);
2131
- self._input.removeEventListener("click", self.open);
2132
- }
2133
- },
2134
- ],
2135
- };
2136
- function set(option, value) {
2137
- if (option !== null && typeof option === "object") {
2138
- Object.assign(self.config, option);
2139
- for (var key in option) {
2140
- if (CALLBACKS[key] !== undefined)
2141
- CALLBACKS[key].forEach(function (x) { return x(); });
2142
- }
2143
- }
2144
- else {
2145
- self.config[option] = value;
2146
- if (CALLBACKS[option] !== undefined)
2147
- CALLBACKS[option].forEach(function (x) { return x(); });
2148
- else if (HOOKS.indexOf(option) > -1)
2149
- self.config[option] = arrayify(value);
2150
- }
2151
- self.redraw();
2152
- updateValue(true);
2153
- }
2154
- function setSelectedDate(inputDate, format) {
2155
- var dates = [];
2156
- if (inputDate instanceof Array)
2157
- dates = inputDate.map(function (d) { return self.parseDate(d, format); });
2158
- else if (inputDate instanceof Date || typeof inputDate === "number")
2159
- dates = [self.parseDate(inputDate, format)];
2160
- else if (typeof inputDate === "string") {
2161
- switch (self.config.mode) {
2162
- case "single":
2163
- case "time":
2164
- dates = [self.parseDate(inputDate, format)];
2165
- break;
2166
- case "multiple":
2167
- dates = inputDate
2168
- .split(self.config.conjunction)
2169
- .map(function (date) { return self.parseDate(date, format); });
2170
- break;
2171
- case "range":
2172
- dates = inputDate
2173
- .split(self.l10n.rangeSeparator)
2174
- .map(function (date) { return self.parseDate(date, format); });
2175
- break;
2176
- }
2177
- }
2178
- else
2179
- self.config.errorHandler(new Error("Invalid date supplied: " + JSON.stringify(inputDate)));
2180
- self.selectedDates = (self.config.allowInvalidPreload
2181
- ? dates
2182
- : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));
2183
- if (self.config.mode === "range")
2184
- self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });
2185
- }
2186
- function setDate(date, triggerChange, format) {
2187
- if (triggerChange === void 0) { triggerChange = false; }
2188
- if (format === void 0) { format = self.config.dateFormat; }
2189
- if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))
2190
- return self.clear(triggerChange);
2191
- setSelectedDate(date, format);
2192
- self.latestSelectedDateObj =
2193
- self.selectedDates[self.selectedDates.length - 1];
2194
- self.redraw();
2195
- jumpToDate(undefined, triggerChange);
2196
- setHoursFromDate();
2197
- if (self.selectedDates.length === 0) {
2198
- self.clear(false);
2199
- }
2200
- updateValue(triggerChange);
2201
- if (triggerChange)
2202
- triggerEvent("onChange");
2203
- }
2204
- function parseDateRules(arr) {
2205
- return arr
2206
- .slice()
2207
- .map(function (rule) {
2208
- if (typeof rule === "string" ||
2209
- typeof rule === "number" ||
2210
- rule instanceof Date) {
2211
- return self.parseDate(rule, undefined, true);
2212
- }
2213
- else if (rule &&
2214
- typeof rule === "object" &&
2215
- rule.from &&
2216
- rule.to)
2217
- return {
2218
- from: self.parseDate(rule.from, undefined),
2219
- to: self.parseDate(rule.to, undefined),
2220
- };
2221
- return rule;
2222
- })
2223
- .filter(function (x) { return x; });
2224
- }
2225
- function setupDates() {
2226
- self.selectedDates = [];
2227
- self.now = self.parseDate(self.config.now) || new Date();
2228
- var preloadedDate = self.config.defaultDate ||
2229
- ((self.input.nodeName === "INPUT" ||
2230
- self.input.nodeName === "TEXTAREA") &&
2231
- self.input.placeholder &&
2232
- self.input.value === self.input.placeholder
2233
- ? null
2234
- : self.input.value);
2235
- if (preloadedDate)
2236
- setSelectedDate(preloadedDate, self.config.dateFormat);
2237
- self._initialDate =
2238
- self.selectedDates.length > 0
2239
- ? self.selectedDates[0]
2240
- : self.config.minDate &&
2241
- self.config.minDate.getTime() > self.now.getTime()
2242
- ? self.config.minDate
2243
- : self.config.maxDate &&
2244
- self.config.maxDate.getTime() < self.now.getTime()
2245
- ? self.config.maxDate
2246
- : self.now;
2247
- self.currentYear = self._initialDate.getFullYear();
2248
- self.currentMonth = self._initialDate.getMonth();
2249
- if (self.selectedDates.length > 0)
2250
- self.latestSelectedDateObj = self.selectedDates[0];
2251
- if (self.config.minTime !== undefined)
2252
- self.config.minTime = self.parseDate(self.config.minTime, "H:i");
2253
- if (self.config.maxTime !== undefined)
2254
- self.config.maxTime = self.parseDate(self.config.maxTime, "H:i");
2255
- self.minDateHasTime =
2256
- !!self.config.minDate &&
2257
- (self.config.minDate.getHours() > 0 ||
2258
- self.config.minDate.getMinutes() > 0 ||
2259
- self.config.minDate.getSeconds() > 0);
2260
- self.maxDateHasTime =
2261
- !!self.config.maxDate &&
2262
- (self.config.maxDate.getHours() > 0 ||
2263
- self.config.maxDate.getMinutes() > 0 ||
2264
- self.config.maxDate.getSeconds() > 0);
2265
- }
2266
- function setupInputs() {
2267
- self.input = getInputElem();
2268
- if (!self.input) {
2269
- self.config.errorHandler(new Error("Invalid input element specified"));
2270
- return;
2271
- }
2272
- self.input._type = self.input.type;
2273
- self.input.type = "text";
2274
- self.input.classList.add("flatpickr-input");
2275
- self._input = self.input;
2276
- if (self.config.altInput) {
2277
- self.altInput = createElement(self.input.nodeName, self.config.altInputClass);
2278
- self._input = self.altInput;
2279
- self.altInput.placeholder = self.input.placeholder;
2280
- self.altInput.disabled = self.input.disabled;
2281
- self.altInput.required = self.input.required;
2282
- self.altInput.tabIndex = self.input.tabIndex;
2283
- self.altInput.type = "text";
2284
- self.input.setAttribute("type", "hidden");
2285
- if (!self.config.static && self.input.parentNode)
2286
- self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);
2287
- }
2288
- if (!self.config.allowInput)
2289
- self._input.setAttribute("readonly", "readonly");
2290
- updatePositionElement();
2291
- }
2292
- function updatePositionElement() {
2293
- self._positionElement = self.config.positionElement || self._input;
2294
- }
2295
- function setupMobile() {
2296
- var inputType = self.config.enableTime
2297
- ? self.config.noCalendar
2298
- ? "time"
2299
- : "datetime-local"
2300
- : "date";
2301
- self.mobileInput = createElement("input", self.input.className + " flatpickr-mobile");
2302
- self.mobileInput.tabIndex = 1;
2303
- self.mobileInput.type = inputType;
2304
- self.mobileInput.disabled = self.input.disabled;
2305
- self.mobileInput.required = self.input.required;
2306
- self.mobileInput.placeholder = self.input.placeholder;
2307
- self.mobileFormatStr =
2308
- inputType === "datetime-local"
2309
- ? "Y-m-d\\TH:i:S"
2310
- : inputType === "date"
2311
- ? "Y-m-d"
2312
- : "H:i:S";
2313
- if (self.selectedDates.length > 0) {
2314
- self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);
2315
- }
2316
- if (self.config.minDate)
2317
- self.mobileInput.min = self.formatDate(self.config.minDate, "Y-m-d");
2318
- if (self.config.maxDate)
2319
- self.mobileInput.max = self.formatDate(self.config.maxDate, "Y-m-d");
2320
- if (self.input.getAttribute("step"))
2321
- self.mobileInput.step = String(self.input.getAttribute("step"));
2322
- self.input.type = "hidden";
2323
- if (self.altInput !== undefined)
2324
- self.altInput.type = "hidden";
2325
- try {
2326
- if (self.input.parentNode)
2327
- self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);
2328
- }
2329
- catch (_a) { }
2330
- bind(self.mobileInput, "change", function (e) {
2331
- self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);
2332
- triggerEvent("onChange");
2333
- triggerEvent("onClose");
2334
- });
2335
- }
2336
- function toggle(e) {
2337
- if (self.isOpen === true)
2338
- return self.close();
2339
- self.open(e);
2340
- }
2341
- function triggerEvent(event, data) {
2342
- if (self.config === undefined)
2343
- return;
2344
- var hooks = self.config[event];
2345
- if (hooks !== undefined && hooks.length > 0) {
2346
- for (var i = 0; hooks[i] && i < hooks.length; i++)
2347
- hooks[i](self.selectedDates, self.input.value, self, data);
2348
- }
2349
- if (event === "onChange") {
2350
- self.input.dispatchEvent(createEvent("change"));
2351
- self.input.dispatchEvent(createEvent("input"));
2352
- }
2353
- }
2354
- function createEvent(name) {
2355
- var e = document.createEvent("Event");
2356
- e.initEvent(name, true, true);
2357
- return e;
2358
- }
2359
- function isDateSelected(date) {
2360
- for (var i = 0; i < self.selectedDates.length; i++) {
2361
- var selectedDate = self.selectedDates[i];
2362
- if (selectedDate instanceof Date &&
2363
- compareDates(selectedDate, date) === 0)
2364
- return "" + i;
2365
- }
2366
- return false;
2367
- }
2368
- function isDateInRange(date) {
2369
- if (self.config.mode !== "range" || self.selectedDates.length < 2)
2370
- return false;
2371
- return (compareDates(date, self.selectedDates[0]) >= 0 &&
2372
- compareDates(date, self.selectedDates[1]) <= 0);
2373
- }
2374
- function updateNavigationCurrentMonth() {
2375
- if (self.config.noCalendar || self.isMobile || !self.monthNav)
2376
- return;
2377
- self.yearElements.forEach(function (yearElement, i) {
2378
- var d = new Date(self.currentYear, self.currentMonth, 1);
2379
- d.setMonth(self.currentMonth + i);
2380
- if (self.config.showMonths > 1 ||
2381
- self.config.monthSelectorType === "static") {
2382
- self.monthElements[i].textContent =
2383
- monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + " ";
2384
- }
2385
- else {
2386
- self.monthsDropdownContainer.value = d.getMonth().toString();
2387
- }
2388
- yearElement.value = d.getFullYear().toString();
2389
- });
2390
- self._hidePrevMonthArrow =
2391
- self.config.minDate !== undefined &&
2392
- (self.currentYear === self.config.minDate.getFullYear()
2393
- ? self.currentMonth <= self.config.minDate.getMonth()
2394
- : self.currentYear < self.config.minDate.getFullYear());
2395
- self._hideNextMonthArrow =
2396
- self.config.maxDate !== undefined &&
2397
- (self.currentYear === self.config.maxDate.getFullYear()
2398
- ? self.currentMonth + 1 > self.config.maxDate.getMonth()
2399
- : self.currentYear > self.config.maxDate.getFullYear());
2400
- }
2401
- function getDateStr(specificFormat) {
2402
- var format = specificFormat ||
2403
- (self.config.altInput ? self.config.altFormat : self.config.dateFormat);
2404
- return self.selectedDates
2405
- .map(function (dObj) { return self.formatDate(dObj, format); })
2406
- .filter(function (d, i, arr) {
2407
- return self.config.mode !== "range" ||
2408
- self.config.enableTime ||
2409
- arr.indexOf(d) === i;
2410
- })
2411
- .join(self.config.mode !== "range"
2412
- ? self.config.conjunction
2413
- : self.l10n.rangeSeparator);
2414
- }
2415
- function updateValue(triggerChange) {
2416
- if (triggerChange === void 0) { triggerChange = true; }
2417
- if (self.mobileInput !== undefined && self.mobileFormatStr) {
2418
- self.mobileInput.value =
2419
- self.latestSelectedDateObj !== undefined
2420
- ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)
2421
- : "";
2422
- }
2423
- self.input.value = getDateStr(self.config.dateFormat);
2424
- if (self.altInput !== undefined) {
2425
- self.altInput.value = getDateStr(self.config.altFormat);
2426
- }
2427
- if (triggerChange !== false)
2428
- triggerEvent("onValueUpdate");
2429
- }
2430
- function onMonthNavClick(e) {
2431
- var eventTarget = getEventTarget(e);
2432
- var isPrevMonth = self.prevMonthNav.contains(eventTarget);
2433
- var isNextMonth = self.nextMonthNav.contains(eventTarget);
2434
- if (isPrevMonth || isNextMonth) {
2435
- changeMonth(isPrevMonth ? -1 : 1);
2436
- }
2437
- else if (self.yearElements.indexOf(eventTarget) >= 0) {
2438
- eventTarget.select();
2439
- }
2440
- else if (eventTarget.classList.contains("arrowUp")) {
2441
- self.changeYear(self.currentYear + 1);
2442
- }
2443
- else if (eventTarget.classList.contains("arrowDown")) {
2444
- self.changeYear(self.currentYear - 1);
2445
- }
2446
- }
2447
- function timeWrapper(e) {
2448
- e.preventDefault();
2449
- var isKeyDown = e.type === "keydown", eventTarget = getEventTarget(e), input = eventTarget;
2450
- if (self.amPM !== undefined && eventTarget === self.amPM) {
2451
- self.amPM.textContent =
2452
- self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
2453
- }
2454
- var min = parseFloat(input.getAttribute("min")), max = parseFloat(input.getAttribute("max")), step = parseFloat(input.getAttribute("step")), curValue = parseInt(input.value, 10), delta = e.delta ||
2455
- (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);
2456
- var newValue = curValue + step * delta;
2457
- if (typeof input.value !== "undefined" && input.value.length === 2) {
2458
- var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;
2459
- if (newValue < min) {
2460
- newValue =
2461
- max +
2462
- newValue +
2463
- int(!isHourElem) +
2464
- (int(isHourElem) && int(!self.amPM));
2465
- if (isMinuteElem)
2466
- incrementNumInput(undefined, -1, self.hourElement);
2467
- }
2468
- else if (newValue > max) {
2469
- newValue =
2470
- input === self.hourElement ? newValue - max - int(!self.amPM) : min;
2471
- if (isMinuteElem)
2472
- incrementNumInput(undefined, 1, self.hourElement);
2473
- }
2474
- if (self.amPM &&
2475
- isHourElem &&
2476
- (step === 1
2477
- ? newValue + curValue === 23
2478
- : Math.abs(newValue - curValue) > step)) {
2479
- self.amPM.textContent =
2480
- self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];
2481
- }
2482
- input.value = pad(newValue);
2483
- }
2484
- }
2485
- init();
2486
- return self;
2487
- }
2488
- function _flatpickr(nodeList, config) {
2489
- var nodes = Array.prototype.slice
2490
- .call(nodeList)
2491
- .filter(function (x) { return x instanceof HTMLElement; });
2492
- var instances = [];
2493
- for (var i = 0; i < nodes.length; i++) {
2494
- var node = nodes[i];
2495
- try {
2496
- if (node.getAttribute("data-fp-omit") !== null)
2497
- continue;
2498
- if (node._flatpickr !== undefined) {
2499
- node._flatpickr.destroy();
2500
- node._flatpickr = undefined;
2501
- }
2502
- node._flatpickr = FlatpickrInstance(node, config || {});
2503
- instances.push(node._flatpickr);
2504
- }
2505
- catch (e) {
2506
- console.error(e);
2507
- }
2508
- }
2509
- return instances.length === 1 ? instances[0] : instances;
2510
- }
2511
- if (typeof HTMLElement !== "undefined" &&
2512
- typeof HTMLCollection !== "undefined" &&
2513
- typeof NodeList !== "undefined") {
2514
- HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {
2515
- return _flatpickr(this, config);
2516
- };
2517
- HTMLElement.prototype.flatpickr = function (config) {
2518
- return _flatpickr([this], config);
2519
- };
2520
- }
2521
- var flatpickr = function (selector, config) {
2522
- if (typeof selector === "string") {
2523
- return _flatpickr(window.document.querySelectorAll(selector), config);
2524
- }
2525
- else if (selector instanceof Node) {
2526
- return _flatpickr([selector], config);
2527
- }
2528
- else {
2529
- return _flatpickr(selector, config);
2530
- }
2531
- };
2532
- flatpickr.defaultConfig = {};
2533
- flatpickr.l10ns = {
2534
- en: __assign({}, english),
2535
- default: __assign({}, english),
2536
- };
2537
- flatpickr.localize = function (l10n) {
2538
- flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);
2539
- };
2540
- flatpickr.setDefaults = function (config) {
2541
- flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);
2542
- };
2543
- flatpickr.parseDate = createDateParser({});
2544
- flatpickr.formatDate = createDateFormatter({});
2545
- flatpickr.compareDates = compareDates;
2546
- if (typeof jQuery !== "undefined" && typeof jQuery.fn !== "undefined") {
2547
- jQuery.fn.flatpickr = function (config) {
2548
- return _flatpickr(this, config);
2549
- };
2550
- }
2551
- Date.prototype.fp_incr = function (days) {
2552
- return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === "string" ? parseInt(days, 10) : days));
2553
- };
2554
- if (typeof window !== "undefined") {
2555
- window.flatpickr = flatpickr;
2556
- }
2557
-
2558
- var weekSelect = createCommonjsModule(function (module, exports) {
2559
- (function (global, factory) {
2560
- module.exports = factory() ;
2561
- }(commonjsGlobal, (function () {
2562
- function getEventTarget(event) {
2563
- try {
2564
- if (typeof event.composedPath === "function") {
2565
- var path = event.composedPath();
2566
- return path[0];
2567
- }
2568
- return event.target;
2569
- }
2570
- catch (error) {
2571
- return event.target;
2572
- }
2573
- }
2574
-
2575
- function weekSelectPlugin() {
2576
- return function (fp) {
2577
- function onDayHover(event) {
2578
- var day = getEventTarget(event);
2579
- if (!day.classList.contains("flatpickr-day"))
2580
- return;
2581
- var days = fp.days.childNodes;
2582
- var dayIndex = day.$i;
2583
- var dayIndSeven = dayIndex / 7;
2584
- var weekStartDay = days[7 * Math.floor(dayIndSeven)]
2585
- .dateObj;
2586
- var weekEndDay = days[7 * Math.ceil(dayIndSeven + 0.01) - 1].dateObj;
2587
- for (var i = days.length; i--;) {
2588
- var day_1 = days[i];
2589
- var date = day_1.dateObj;
2590
- if (date > weekEndDay || date < weekStartDay)
2591
- day_1.classList.remove("inRange");
2592
- else
2593
- day_1.classList.add("inRange");
2594
- }
2595
- }
2596
- function highlightWeek() {
2597
- var selDate = fp.latestSelectedDateObj;
2598
- if (selDate !== undefined &&
2599
- selDate.getMonth() === fp.currentMonth &&
2600
- selDate.getFullYear() === fp.currentYear) {
2601
- fp.weekStartDay = fp.days.childNodes[7 * Math.floor(fp.selectedDateElem.$i / 7)].dateObj;
2602
- fp.weekEndDay = fp.days.childNodes[7 * Math.ceil(fp.selectedDateElem.$i / 7 + 0.01) - 1].dateObj;
2603
- }
2604
- var days = fp.days.childNodes;
2605
- for (var i = days.length; i--;) {
2606
- var date = days[i].dateObj;
2607
- if (date >= fp.weekStartDay && date <= fp.weekEndDay)
2608
- days[i].classList.add("week", "selected");
2609
- }
2610
- }
2611
- function clearHover() {
2612
- var days = fp.days.childNodes;
2613
- for (var i = days.length; i--;)
2614
- days[i].classList.remove("inRange");
2615
- }
2616
- function onReady() {
2617
- if (fp.daysContainer !== undefined)
2618
- fp.daysContainer.addEventListener("mouseover", onDayHover);
2619
- }
2620
- function onDestroy() {
2621
- if (fp.daysContainer !== undefined)
2622
- fp.daysContainer.removeEventListener("mouseover", onDayHover);
2623
- }
2624
- return {
2625
- onValueUpdate: highlightWeek,
2626
- onMonthChange: highlightWeek,
2627
- onYearChange: highlightWeek,
2628
- onOpen: highlightWeek,
2629
- onClose: clearHover,
2630
- onParseConfig: function () {
2631
- fp.config.mode = "single";
2632
- fp.config.enableTime = false;
2633
- fp.config.dateFormat = fp.config.dateFormat
2634
- ? fp.config.dateFormat
2635
- : "\\W\\e\\e\\k #W, Y";
2636
- fp.config.altFormat = fp.config.altFormat
2637
- ? fp.config.altFormat
2638
- : "\\W\\e\\e\\k #W, Y";
2639
- },
2640
- onReady: [
2641
- onReady,
2642
- highlightWeek,
2643
- function () {
2644
- fp.loadedPlugins.push("weekSelect");
2645
- },
2646
- ],
2647
- onDestroy: onDestroy,
2648
- };
2649
- };
2650
- }
2651
-
2652
- return weekSelectPlugin;
2653
-
2654
- })));
2655
- });
2656
-
2657
- function getFormat(language, mode) {
2658
- const date = new Date(2000, 1, 3, 4, 5, 6);
2659
- const formatDate = { year: 'numeric', month: '2-digit', day: '2-digit' };
2660
- const formatTime = { hour: '2-digit', minute: '2-digit' };
2661
- return mode === 'week'
2662
- ? 'W'
2663
- : new Intl.DateTimeFormat(language, {
2664
- date: formatDate,
2665
- time: formatTime,
2666
- datetime: { ...formatDate, ...formatTime },
2667
- daterange: formatDate
2668
- }[mode])
2669
- .format(date)
2670
- .replace('2000', 'Y')
2671
- .replace('00', 'y')
2672
- .replace('02', 'm')
2673
- .replace('03', 'd')
2674
- .replace('04', 'H')
2675
- .replace('05', 'i')
2676
- .replace(/AM|PM/i, 'K');
2677
- }
2678
-
2679
- function getHour12(language) {
2680
- const dateStr = new Intl.DateTimeFormat(language, { hour: '2-digit', minute: '2-digit' })
2681
- .format(new Date())
2682
- .toLowerCase();
2683
- return dateStr.includes('am') || dateStr.includes('pm');
2684
- }
2685
- function getFirstDayOfWeek(language) {
2686
- const locale = new Intl.Locale(language);
2687
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2688
- const weekInfo = locale.getWeekInfo?.() ?? locale.weekInfo;
2689
- return weekInfo?.firstDay ?? 1;
2690
- }
2691
- function daysForLocale(language, weekday = 'long') {
2692
- const date = new Date();
2693
- const firstDayOfWeek = date.getUTCDate() - date.getUTCDay();
2694
- const format = new Intl.DateTimeFormat(language, { weekday }).format;
2695
- return [...Array(7).keys()].map(day => format(date.setUTCDate(firstDayOfWeek + day)));
2696
- }
2697
- function monthsForLocale(language, month = 'long') {
2698
- const date = new Date();
2699
- const format = new Intl.DateTimeFormat(language, { month }).format;
2700
- return [...Array(12).keys()].map(month => format(date.setUTCMonth(month)));
2701
- }
2702
- function getLocale(language) {
2703
- return {
2704
- firstDayOfWeek: getFirstDayOfWeek(language),
2705
- rangeSeparator: ' - ',
2706
- weekAbbreviation: '',
2707
- yearAriaLabel: catI18nRegistry.t('datepicker.year'),
2708
- monthAriaLabel: catI18nRegistry.t('datepicker.month'),
2709
- hourAriaLabel: catI18nRegistry.t('datepicker.hour'),
2710
- minuteAriaLabel: catI18nRegistry.t('datepicker.minute'),
2711
- toggleTitle: catI18nRegistry.t('datepicker.toggle'),
2712
- scrollTitle: catI18nRegistry.t('datepicker.scroll'),
2713
- time_24hr: !getHour12(language),
2714
- weekdays: {
2715
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2716
- shorthand: daysForLocale(language, 'short'),
2717
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2718
- longhand: daysForLocale(language, 'long')
2719
- },
2720
- months: {
2721
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2722
- shorthand: monthsForLocale(language, 'short'),
2723
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2724
- longhand: monthsForLocale(language, 'long')
2725
- }
2726
- };
2727
- }
2728
-
2729
9
  const catDatepickerCss = ":host{display:flex;margin-bottom:1rem}:host([hidden]){display:none}cat-input{flex:1 1 auto;margin:0}";
2730
10
 
2731
- const CatDatepickerFlat = /*@__PURE__*/ proxyCustomElement(class CatDatepickerFlat extends HTMLElement$1 {
11
+ const CatDatepickerFlat = /*@__PURE__*/ proxyCustomElement(class CatDatepickerFlat extends HTMLElement {
2732
12
  constructor() {
2733
13
  super();
2734
14
  this.__registerHost();
@@ -2775,8 +55,11 @@ const CatDatepickerFlat = /*@__PURE__*/ proxyCustomElement(class CatDatepickerFl
2775
55
  this.catChange.emit(undefined);
2776
56
  }
2777
57
  }
2778
- onDisabledChaned(value) {
2779
- this.pickr?.set('clickOpens', !value);
58
+ onDisabledChanged(value) {
59
+ this.pickr?.set('clickOpens', !value && !this.readonly);
60
+ }
61
+ onReadonlyChanged(value) {
62
+ this.pickr?.set('clickOpens', !value && !this.disabled);
2780
63
  }
2781
64
  componentDidLoad() {
2782
65
  if (this.input) {
@@ -2813,51 +96,22 @@ const CatDatepickerFlat = /*@__PURE__*/ proxyCustomElement(class CatDatepickerFl
2813
96
  } }));
2814
97
  }
2815
98
  initDatepicker(input) {
2816
- const locale = getLocale(catI18nRegistry.getLocale());
2817
- const format = getFormat(catI18nRegistry.getLocale(), this.mode);
2818
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2819
- const plugins = this.mode === 'week' ? [new weekSelect({})] : [];
2820
- return flatpickr(input, {
2821
- locale,
2822
- plugins,
2823
- altInput: true,
2824
- prevArrow: '←',
2825
- nextArrow: '→',
2826
- dateFormat: this.dateFormat,
2827
- altFormat: format,
2828
- ariaDateFormat: format,
2829
- mode: this.mode === 'daterange' ? 'range' : 'single',
2830
- minDate: this.min,
2831
- maxDate: this.max,
2832
- enableTime: this.mode === 'time' || this.mode === 'datetime',
2833
- noCalendar: this.mode === 'time',
2834
- weekNumbers: true,
2835
- minuteIncrement: this.step,
2836
- clickOpens: !this.disabled,
2837
- onChange: (dates, dateStr, flatpickr) => {
2838
- if (this.mode === 'week') {
2839
- this.value = dates[0] ? flatpickr.config.getWeek(dates[0]).toString() : undefined;
2840
- }
2841
- else {
2842
- this.value = dateStr || undefined;
2843
- }
2844
- }
2845
- });
2846
- }
2847
- get dateFormat() {
2848
- if (this.mode === 'week') {
2849
- return 'W';
2850
- }
2851
- else if (this.mode === 'time') {
2852
- return 'H:i';
2853
- }
2854
- else {
2855
- return 'Z';
2856
- }
99
+ return flatpickr(input, getConfig({
100
+ locale: getLocale(catI18nRegistry.getLocale()),
101
+ format: getFormat(catI18nRegistry.getLocale(), this.mode),
102
+ mode: this.mode,
103
+ min: this.min,
104
+ max: this.max,
105
+ step: this.step,
106
+ disabled: this.disabled,
107
+ readonly: this.readonly,
108
+ applyChange: value => (this.value = value)
109
+ }));
2857
110
  }
2858
111
  static get watchers() { return {
2859
112
  "value": ["onValueChanged"],
2860
- "disabled": ["onDisabledChaned"]
113
+ "disabled": ["onDisabledChanged"],
114
+ "readonly": ["onReadonlyChanged"]
2861
115
  }; }
2862
116
  static get style() { return catDatepickerCss; }
2863
117
  }, [1, "cat-datepicker", {