@syncfusion/ej2-calendars 25.2.5 → 25.2.7-30676
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1220 -1218
- package/README.md +178 -178
- package/dist/ej2-calendars.umd.min.js +1 -10
- package/dist/ej2-calendars.umd.min.js.map +1 -1
- package/dist/es6/ej2-calendars.es2015.js +35 -32
- package/dist/es6/ej2-calendars.es2015.js.map +1 -1
- package/dist/es6/ej2-calendars.es5.js +110 -107
- package/dist/es6/ej2-calendars.es5.js.map +1 -1
- package/helpers/e2e/calendarHelper.js +13 -13
- package/helpers/e2e/datepickerHelper.js +13 -13
- package/helpers/e2e/daterangepickerHelper.js +13 -13
- package/helpers/e2e/datetimepickerHelper.js +13 -13
- package/helpers/e2e/index.js +3 -3
- package/helpers/e2e/timepickerHelper.js +13 -13
- package/license +10 -10
- package/package.json +85 -85
- package/src/calendar/calendar-model.d.ts +277 -277
- package/src/calendar/calendar.d.ts +20 -20
- package/src/calendar/calendar.js +25 -25
- package/src/common/maskplaceholder-model.d.ts +36 -36
- package/src/common/maskplaceholder.js +19 -19
- package/src/datepicker/datepicker-model.d.ts +289 -289
- package/src/datepicker/datepicker.d.ts +10 -10
- package/src/datepicker/datepicker.js +23 -23
- package/src/daterangepicker/daterangepicker-model.d.ts +427 -427
- package/src/daterangepicker/daterangepicker.d.ts +2 -2
- package/src/daterangepicker/daterangepicker.js +24 -21
- package/src/datetimepicker/datetimepicker-model.d.ts +453 -453
- package/src/datetimepicker/datetimepicker.d.ts +1 -1
- package/src/datetimepicker/datetimepicker.js +20 -20
- package/src/timepicker/timepicker-model.d.ts +350 -350
- package/src/timepicker/timepicker.d.ts +5 -5
- package/src/timepicker/timepicker.js +21 -21
- package/styles/bootstrap-dark.css +190 -984
- package/styles/bootstrap-dark.scss +20 -5
- package/styles/bootstrap.css +190 -985
- package/styles/bootstrap.scss +20 -5
- package/styles/bootstrap4.css +190 -992
- package/styles/bootstrap4.scss +20 -5
- package/styles/bootstrap5-dark.css +191 -1014
- package/styles/bootstrap5-dark.scss +20 -5
- package/styles/bootstrap5.css +191 -1014
- package/styles/bootstrap5.scss +20 -5
- package/styles/calendar/_all.scss +2 -2
- package/styles/calendar/_bds-definition.scss +273 -272
- package/styles/calendar/_bigger.scss +1142 -0
- package/styles/calendar/_bootstrap-dark-definition.scss +238 -238
- package/styles/calendar/_bootstrap-definition.scss +238 -238
- package/styles/calendar/_bootstrap4-definition.scss +238 -238
- package/styles/calendar/_bootstrap5-definition.scss +258 -258
- package/styles/calendar/_bootstrap5.3-definition.scss +260 -0
- package/styles/calendar/_fabric-dark-definition.scss +202 -202
- package/styles/calendar/_fabric-definition.scss +200 -200
- package/styles/calendar/_fluent-definition.scss +264 -262
- package/styles/calendar/_fluent2-definition.scss +294 -0
- package/styles/calendar/_fusionnew-definition.scss +260 -260
- package/styles/calendar/_highcontrast-definition.scss +199 -199
- package/styles/calendar/_highcontrast-light-definition.scss +202 -202
- package/styles/calendar/_layout.scss +565 -789
- package/styles/calendar/_material-dark-definition.scss +204 -204
- package/styles/calendar/_material-definition.scss +199 -199
- package/styles/calendar/_material3-definition.scss +196 -205
- package/styles/calendar/_tailwind-definition.scss +271 -271
- package/styles/calendar/_tailwind4-definition.scss +260 -0
- package/styles/calendar/_theme.scss +643 -555
- package/styles/calendar/bootstrap-dark.css +97 -375
- package/styles/calendar/bootstrap.css +97 -375
- package/styles/calendar/bootstrap4.css +97 -375
- package/styles/calendar/bootstrap5-dark.css +98 -396
- package/styles/calendar/bootstrap5.css +98 -396
- package/styles/calendar/fabric-dark.css +98 -377
- package/styles/calendar/fabric.css +99 -379
- package/styles/calendar/fluent-dark.css +116 -424
- package/styles/calendar/fluent.css +116 -424
- package/styles/calendar/fluent2.css +1747 -0
- package/styles/calendar/fluent2.scss +5 -0
- package/styles/calendar/highcontrast-light.css +97 -375
- package/styles/calendar/highcontrast.css +99 -379
- package/styles/calendar/icons/_bds.scss +13 -13
- package/styles/calendar/icons/_bootstrap-dark.scss +13 -13
- package/styles/calendar/icons/_bootstrap.scss +13 -13
- package/styles/calendar/icons/_bootstrap4.scss +13 -13
- package/styles/calendar/icons/_bootstrap5.3.scss +13 -0
- package/styles/calendar/icons/_bootstrap5.scss +13 -13
- package/styles/calendar/icons/_fabric-dark.scss +13 -13
- package/styles/calendar/icons/_fabric.scss +13 -13
- package/styles/calendar/icons/_fluent.scss +13 -13
- package/styles/calendar/icons/_fluent2.scss +13 -0
- package/styles/calendar/icons/_fusionnew.scss +13 -13
- package/styles/calendar/icons/_highcontrast-light.scss +13 -13
- package/styles/calendar/icons/_highcontrast.scss +13 -13
- package/styles/calendar/icons/_material-dark.scss +13 -13
- package/styles/calendar/icons/_material.scss +13 -13
- package/styles/calendar/icons/_material3.scss +13 -13
- package/styles/calendar/icons/_tailwind.scss +13 -13
- package/styles/calendar/icons/_tailwind4.scss +13 -0
- package/styles/calendar/material-dark.css +99 -379
- package/styles/calendar/material.css +99 -379
- package/styles/calendar/material3-dark.css +100 -380
- package/styles/calendar/material3-dark.scss +1 -1
- package/styles/calendar/material3.css +100 -380
- package/styles/calendar/material3.scss +1 -1
- package/styles/calendar/tailwind-dark.css +100 -428
- package/styles/calendar/tailwind.css +100 -428
- package/styles/datepicker/_all.scss +2 -2
- package/styles/datepicker/_bds-definition.scss +105 -105
- package/styles/datepicker/_bigger.scss +82 -0
- package/styles/datepicker/_bootstrap-dark-definition.scss +97 -97
- package/styles/datepicker/_bootstrap-definition.scss +96 -96
- package/styles/datepicker/_bootstrap4-definition.scss +101 -101
- package/styles/datepicker/_bootstrap5-definition.scss +107 -107
- package/styles/datepicker/_bootstrap5.3-definition.scss +108 -0
- package/styles/datepicker/_fabric-dark-definition.scss +98 -98
- package/styles/datepicker/_fabric-definition.scss +95 -95
- package/styles/datepicker/_fluent-definition.scss +107 -107
- package/styles/datepicker/_fluent2-definition.scss +118 -0
- package/styles/datepicker/_fusionnew-definition.scss +107 -107
- package/styles/datepicker/_highcontrast-definition.scss +96 -96
- package/styles/datepicker/_highcontrast-light-definition.scss +99 -99
- package/styles/datepicker/_layout.scss +459 -433
- package/styles/datepicker/_material-dark-definition.scss +103 -103
- package/styles/datepicker/_material-definition.scss +100 -100
- package/styles/datepicker/_material3-definition.scss +97 -116
- package/styles/datepicker/_tailwind-definition.scss +105 -105
- package/styles/datepicker/_tailwind4-definition.scss +108 -0
- package/styles/datepicker/_theme.scss +48 -53
- package/styles/datepicker/bootstrap-dark.css +2 -43
- package/styles/datepicker/bootstrap.css +2 -43
- package/styles/datepicker/bootstrap4.css +2 -45
- package/styles/datepicker/bootstrap5-dark.css +2 -45
- package/styles/datepicker/bootstrap5.css +2 -45
- package/styles/datepicker/fabric-dark.css +2 -43
- package/styles/datepicker/fabric.css +2 -43
- package/styles/datepicker/fluent-dark.css +2 -45
- package/styles/datepicker/fluent.css +2 -45
- package/styles/datepicker/fluent2.css +1617 -0
- package/styles/datepicker/fluent2.scss +7 -0
- package/styles/datepicker/highcontrast-light.css +2 -43
- package/styles/datepicker/highcontrast.css +2 -43
- package/styles/datepicker/icons/_bds.scss +52 -76
- package/styles/datepicker/icons/_bootstrap-dark.scss +49 -73
- package/styles/datepicker/icons/_bootstrap.scss +50 -72
- package/styles/datepicker/icons/_bootstrap4.scss +52 -76
- package/styles/datepicker/icons/_bootstrap5.3.scss +52 -0
- package/styles/datepicker/icons/_bootstrap5.scss +52 -76
- package/styles/datepicker/icons/_fabric-dark.scss +43 -65
- package/styles/datepicker/icons/_fabric.scss +43 -65
- package/styles/datepicker/icons/_fluent.scss +52 -76
- package/styles/datepicker/icons/_fluent2.scss +52 -0
- package/styles/datepicker/icons/_fusionnew.scss +52 -76
- package/styles/datepicker/icons/_highcontrast-light.scss +50 -72
- package/styles/datepicker/icons/_highcontrast.scss +50 -72
- package/styles/datepicker/icons/_material-dark.scss +59 -99
- package/styles/datepicker/icons/_material.scss +59 -99
- package/styles/datepicker/icons/_material3.scss +50 -79
- package/styles/datepicker/icons/_tailwind.scss +52 -76
- package/styles/datepicker/icons/_tailwind4.scss +52 -0
- package/styles/datepicker/material-dark.css +2 -60
- package/styles/datepicker/material.css +2 -60
- package/styles/datepicker/material3-dark.css +4 -52
- package/styles/datepicker/material3-dark.scss +1 -1
- package/styles/datepicker/material3.css +4 -52
- package/styles/datepicker/material3.scss +1 -1
- package/styles/datepicker/tailwind-dark.css +2 -50
- package/styles/datepicker/tailwind.css +2 -50
- package/styles/daterangepicker/_all.scss +2 -2
- package/styles/daterangepicker/_bds-definition.scss +294 -294
- package/styles/daterangepicker/_bigger.scss +971 -0
- package/styles/daterangepicker/_bootstrap-dark-definition.scss +258 -258
- package/styles/daterangepicker/_bootstrap-definition.scss +258 -258
- package/styles/daterangepicker/_bootstrap4-definition.scss +268 -268
- package/styles/daterangepicker/_bootstrap5-definition.scss +296 -296
- package/styles/daterangepicker/_bootstrap5.3-definition.scss +298 -0
- package/styles/daterangepicker/_fabric-dark-definition.scss +261 -261
- package/styles/daterangepicker/_fabric-definition.scss +258 -258
- package/styles/daterangepicker/_fluent-definition.scss +313 -322
- package/styles/daterangepicker/_fluent2-definition.scss +305 -0
- package/styles/daterangepicker/_fusionnew-definition.scss +295 -295
- package/styles/daterangepicker/_highcontrast-definition.scss +258 -258
- package/styles/daterangepicker/_highcontrast-light-definition.scss +261 -261
- package/styles/daterangepicker/_layout.scss +790 -1030
- package/styles/daterangepicker/_material-dark-definition.scss +266 -266
- package/styles/daterangepicker/_material-definition.scss +266 -266
- package/styles/daterangepicker/_material3-definition.scss +262 -282
- package/styles/daterangepicker/_tailwind-definition.scss +287 -287
- package/styles/daterangepicker/_tailwind4-definition.scss +298 -0
- package/styles/daterangepicker/_theme.scss +415 -455
- package/styles/daterangepicker/bootstrap-dark.css +67 -479
- package/styles/daterangepicker/bootstrap.css +67 -478
- package/styles/daterangepicker/bootstrap4.css +67 -483
- package/styles/daterangepicker/bootstrap5-dark.css +67 -483
- package/styles/daterangepicker/bootstrap5.css +67 -483
- package/styles/daterangepicker/fabric-dark.css +67 -473
- package/styles/daterangepicker/fabric.css +67 -473
- package/styles/daterangepicker/fluent-dark.css +66 -502
- package/styles/daterangepicker/fluent.css +66 -502
- package/styles/daterangepicker/fluent2.css +1998 -0
- package/styles/daterangepicker/fluent2.scss +7 -0
- package/styles/daterangepicker/highcontrast-light.css +67 -473
- package/styles/daterangepicker/highcontrast.css +67 -473
- package/styles/daterangepicker/icons/_bds.scss +74 -92
- package/styles/daterangepicker/icons/_bootstrap-dark.scss +61 -85
- package/styles/daterangepicker/icons/_bootstrap.scss +69 -85
- package/styles/daterangepicker/icons/_bootstrap4.scss +75 -94
- package/styles/daterangepicker/icons/_bootstrap5.3.scss +74 -0
- package/styles/daterangepicker/icons/_bootstrap5.scss +74 -92
- package/styles/daterangepicker/icons/_fabric-dark.scss +69 -85
- package/styles/daterangepicker/icons/_fabric.scss +69 -85
- package/styles/daterangepicker/icons/_fluent.scss +74 -92
- package/styles/daterangepicker/icons/_fluent2.scss +91 -0
- package/styles/daterangepicker/icons/_fusionnew.scss +74 -92
- package/styles/daterangepicker/icons/_highcontrast-light.scss +69 -85
- package/styles/daterangepicker/icons/_highcontrast.scss +69 -85
- package/styles/daterangepicker/icons/_material-dark.scss +85 -119
- package/styles/daterangepicker/icons/_material.scss +85 -119
- package/styles/daterangepicker/icons/_material3.scss +90 -129
- package/styles/daterangepicker/icons/_tailwind.scss +74 -92
- package/styles/daterangepicker/icons/_tailwind4.scss +74 -0
- package/styles/daterangepicker/material-dark.css +67 -490
- package/styles/daterangepicker/material.css +67 -495
- package/styles/daterangepicker/material3-dark.css +70 -504
- package/styles/daterangepicker/material3-dark.scss +1 -1
- package/styles/daterangepicker/material3.css +70 -504
- package/styles/daterangepicker/material3.scss +1 -1
- package/styles/daterangepicker/tailwind-dark.css +66 -478
- package/styles/daterangepicker/tailwind.css +66 -478
- package/styles/datetimepicker/_all.scss +2 -2
- package/styles/datetimepicker/_bds-definition.scss +65 -65
- package/styles/datetimepicker/_bigger.scss +105 -0
- package/styles/datetimepicker/_bootstrap-dark-definition.scss +60 -60
- package/styles/datetimepicker/_bootstrap-definition.scss +59 -59
- package/styles/datetimepicker/_bootstrap4-definition.scss +65 -65
- package/styles/datetimepicker/_bootstrap5-definition.scss +65 -65
- package/styles/datetimepicker/_bootstrap5.3-definition.scss +65 -0
- package/styles/datetimepicker/_fabric-dark-definition.scss +60 -60
- package/styles/datetimepicker/_fabric-definition.scss +57 -57
- package/styles/datetimepicker/_fluent-definition.scss +65 -65
- package/styles/datetimepicker/_fluent2-definition.scss +65 -0
- package/styles/datetimepicker/_fusionnew-definition.scss +65 -65
- package/styles/datetimepicker/_highcontrast-definition.scss +57 -57
- package/styles/datetimepicker/_highcontrast-light-definition.scss +60 -60
- package/styles/datetimepicker/_layout.scss +179 -238
- package/styles/datetimepicker/_material-dark-definition.scss +64 -64
- package/styles/datetimepicker/_material-definition.scss +62 -62
- package/styles/datetimepicker/_material3-definition.scss +61 -71
- package/styles/datetimepicker/_tailwind-definition.scss +65 -65
- package/styles/datetimepicker/_tailwind4-definition.scss +65 -0
- package/styles/datetimepicker/_theme.scss +70 -70
- package/styles/datetimepicker/bootstrap-dark.css +23 -42
- package/styles/datetimepicker/bootstrap.css +23 -42
- package/styles/datetimepicker/bootstrap4.css +23 -42
- package/styles/datetimepicker/bootstrap5-dark.css +23 -42
- package/styles/datetimepicker/bootstrap5.css +23 -42
- package/styles/datetimepicker/fabric-dark.css +23 -42
- package/styles/datetimepicker/fabric.css +23 -42
- package/styles/datetimepicker/fluent-dark.css +23 -42
- package/styles/datetimepicker/fluent.css +23 -42
- package/styles/datetimepicker/fluent2.css +1373 -0
- package/styles/datetimepicker/fluent2.scss +8 -0
- package/styles/datetimepicker/highcontrast-light.css +23 -42
- package/styles/datetimepicker/highcontrast.css +23 -42
- package/styles/datetimepicker/icons/_bds.scss +11 -11
- package/styles/datetimepicker/icons/_bootstrap-dark.scss +11 -11
- package/styles/datetimepicker/icons/_bootstrap.scss +11 -11
- package/styles/datetimepicker/icons/_bootstrap4.scss +11 -11
- package/styles/datetimepicker/icons/_bootstrap5.3.scss +11 -0
- package/styles/datetimepicker/icons/_bootstrap5.scss +11 -11
- package/styles/datetimepicker/icons/_fabric-dark.scss +11 -11
- package/styles/datetimepicker/icons/_fabric.scss +11 -11
- package/styles/datetimepicker/icons/_fluent.scss +11 -11
- package/styles/datetimepicker/icons/_fluent2.scss +11 -0
- package/styles/datetimepicker/icons/_fusionnew.scss +11 -11
- package/styles/datetimepicker/icons/_highcontrast-light.scss +11 -11
- package/styles/datetimepicker/icons/_highcontrast.scss +11 -11
- package/styles/datetimepicker/icons/_material-dark.scss +31 -53
- package/styles/datetimepicker/icons/_material.scss +40 -62
- package/styles/datetimepicker/icons/_material3.scss +11 -11
- package/styles/datetimepicker/icons/_tailwind.scss +11 -11
- package/styles/datetimepicker/icons/_tailwind4.scss +11 -0
- package/styles/datetimepicker/material-dark.css +23 -66
- package/styles/datetimepicker/material.css +23 -66
- package/styles/datetimepicker/material3-dark.css +24 -54
- package/styles/datetimepicker/material3-dark.scss +1 -1
- package/styles/datetimepicker/material3.css +24 -54
- package/styles/datetimepicker/material3.scss +1 -1
- package/styles/datetimepicker/tailwind-dark.css +23 -42
- package/styles/datetimepicker/tailwind.css +23 -42
- package/styles/fabric-dark.css +191 -980
- package/styles/fabric-dark.scss +20 -5
- package/styles/fabric.css +192 -984
- package/styles/fabric.scss +20 -5
- package/styles/fluent-dark.css +208 -1061
- package/styles/fluent-dark.scss +20 -5
- package/styles/fluent.css +208 -1061
- package/styles/fluent.scss +20 -5
- package/styles/fluent2.css +3549 -0
- package/styles/fluent2.scss +20 -0
- package/styles/highcontrast-light.css +190 -978
- package/styles/highcontrast-light.scss +20 -5
- package/styles/highcontrast.css +192 -984
- package/styles/highcontrast.scss +20 -5
- package/styles/material-dark.css +192 -1075
- package/styles/material-dark.scss +20 -5
- package/styles/material.css +192 -1106
- package/styles/material.scss +20 -5
- package/styles/material3-dark.css +194 -1083
- package/styles/material3-dark.scss +20 -5
- package/styles/material3.css +194 -1083
- package/styles/material3.scss +20 -5
- package/styles/tailwind-dark.css +192 -1046
- package/styles/tailwind-dark.scss +20 -5
- package/styles/tailwind.css +192 -1046
- package/styles/tailwind.scss +20 -5
- package/styles/timepicker/_all.scss +2 -2
- package/styles/timepicker/_bds-definition.scss +84 -84
- package/styles/timepicker/_bigger.scss +92 -0
- package/styles/timepicker/_bootstrap-dark-definition.scss +80 -80
- package/styles/timepicker/_bootstrap-definition.scss +77 -77
- package/styles/timepicker/_bootstrap4-definition.scss +85 -85
- package/styles/timepicker/_bootstrap5-definition.scss +86 -86
- package/styles/timepicker/_bootstrap5.3-definition.scss +85 -0
- package/styles/timepicker/_fabric-dark-definition.scss +80 -80
- package/styles/timepicker/_fabric-definition.scss +77 -77
- package/styles/timepicker/_fluent-definition.scss +86 -86
- package/styles/timepicker/_fluent2-definition.scss +84 -0
- package/styles/timepicker/_fusionnew-definition.scss +86 -86
- package/styles/timepicker/_highcontrast-definition.scss +77 -77
- package/styles/timepicker/_highcontrast-light-definition.scss +80 -80
- package/styles/timepicker/_layout.scss +227 -303
- package/styles/timepicker/_material-dark-definition.scss +84 -84
- package/styles/timepicker/_material-definition.scss +81 -81
- package/styles/timepicker/_material3-definition.scss +83 -99
- package/styles/timepicker/_tailwind-definition.scss +84 -84
- package/styles/timepicker/_tailwind4-definition.scss +86 -0
- package/styles/timepicker/_theme.scss +109 -114
- package/styles/timepicker/bootstrap-dark.css +1 -42
- package/styles/timepicker/bootstrap.css +1 -42
- package/styles/timepicker/bootstrap4.css +1 -42
- package/styles/timepicker/bootstrap5-dark.css +1 -42
- package/styles/timepicker/bootstrap5.css +1 -42
- package/styles/timepicker/fabric-dark.css +1 -42
- package/styles/timepicker/fabric.css +1 -42
- package/styles/timepicker/fluent-dark.css +1 -42
- package/styles/timepicker/fluent.css +1 -42
- package/styles/timepicker/fluent2.css +1470 -0
- package/styles/timepicker/fluent2.scss +6 -0
- package/styles/timepicker/highcontrast-light.css +1 -42
- package/styles/timepicker/highcontrast.css +1 -42
- package/styles/timepicker/icons/_bds.scss +24 -24
- package/styles/timepicker/icons/_bootstrap-dark.scss +23 -23
- package/styles/timepicker/icons/_bootstrap.scss +24 -24
- package/styles/timepicker/icons/_bootstrap4.scss +24 -24
- package/styles/timepicker/icons/_bootstrap5.3.scss +24 -0
- package/styles/timepicker/icons/_bootstrap5.scss +24 -24
- package/styles/timepicker/icons/_fabric-dark.scss +24 -24
- package/styles/timepicker/icons/_fabric.scss +24 -24
- package/styles/timepicker/icons/_fluent.scss +24 -24
- package/styles/timepicker/icons/_fluent2.scss +24 -0
- package/styles/timepicker/icons/_fusionnew.scss +24 -24
- package/styles/timepicker/icons/_highcontrast-light.scss +24 -24
- package/styles/timepicker/icons/_highcontrast.scss +24 -24
- package/styles/timepicker/icons/_material-dark.scss +37 -52
- package/styles/timepicker/icons/_material.scss +39 -54
- package/styles/timepicker/icons/_material3.scss +24 -24
- package/styles/timepicker/icons/_tailwind.scss +24 -24
- package/styles/timepicker/icons/_tailwind4.scss +24 -0
- package/styles/timepicker/material-dark.css +1 -59
- package/styles/timepicker/material.css +1 -59
- package/styles/timepicker/material3-dark.css +2 -51
- package/styles/timepicker/material3-dark.scss +1 -1
- package/styles/timepicker/material3.css +2 -51
- package/styles/timepicker/material3.scss +1 -1
- package/styles/timepicker/tailwind-dark.css +1 -42
- package/styles/timepicker/tailwind.css +1 -42
- package/.eslintrc.json +0 -260
- package/dist/ej2-calendars.min.js +0 -10
- package/dist/global/ej2-calendars.min.js +0 -11
- package/dist/global/ej2-calendars.min.js.map +0 -1
- package/dist/global/index.d.ts +0 -14
- package/tslint.json +0 -111
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-calendars.min.js","sources":["../../src/calendar/calendar.js","../../src/calendar/islamic.js","../../src/datepicker/datepicker.js","../../src/daterangepicker/daterangepicker.js","../../src/timepicker/timepicker.js","../../src/datetimepicker/datetimepicker.js","../../src/maskbase/masked-date-time.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-unused-expressions */\nimport { Component, EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined, throwError } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar OTHERDECADE = 'e-other-year';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar CONTENTTABLE = 'e-calendar-content-table';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar FOCUSEDCELL = 'e-focused-cell';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar DAYHEADERLONG = 'e-calendar-day-header-lg';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n __extends(CalendarBase, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarBaseModel} options - Specifies the CalendarBase model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function CalendarBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.isPopupClicked = false;\n _this.isDateSelected = true;\n _this.isTodayClicked = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.previousDates = false;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.render = function () {\n this.rangeValidation(this.min, this.max);\n this.calendarEleCopy = this.element.cloneNode(true);\n if (this.calendarMode === 'Islamic') {\n if (+(this.min.setSeconds(0)) === +new Date(1900, 0, 1, 0, 0, 0)) {\n this.min = new Date(1944, 2, 18);\n }\n if (+this.max === +new Date(2099, 11, 31)) {\n this.max = new Date(2069, 10, 16);\n }\n }\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'data-role': 'calendar'\n });\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.createHeader();\n this.createContent();\n this.wireEvents();\n };\n CalendarBase.prototype.rangeValidation = function (min, max) {\n if (isNullOrUndefined(min)) {\n this.setProperties({ min: new Date(1900, 0, 1) }, true);\n }\n if (isNullOrUndefined(max)) {\n this.setProperties({ max: new Date(2099, 11, 31) }, true);\n }\n };\n CalendarBase.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n altUpArrow: 'alt+uparrow',\n spacebar: 'space',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n return this.defaultKeyConfigs;\n };\n CalendarBase.prototype.validateDate = function (value) {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(this.max))) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n this.currentDate = new Date(this.checkValue(value));\n }\n };\n CalendarBase.prototype.setOverlayIndex = function (popupWrapper, popupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(popupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(popupElement.style.zIndex, 10) ? parseInt(popupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n CalendarBase.prototype.minMaxUpdate = function (value) {\n if (!(+this.min <= +this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n this.currentDate = new Date(this.checkValue(value));\n }\n else {\n if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n else {\n if (+this.currentDate < +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n }\n }\n };\n CalendarBase.prototype.createHeader = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n var tabIndexAttr = { 'tabindex': '0' };\n this.headerElement = this.createElement('div', { className: HEADER });\n var iconContainer = this.createElement('div', { className: ICONCONTAINER });\n this.previousIcon = this.createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n attributes(this.previousIcon, tabIndexAttr);\n this.nextIcon = this.createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n if (this.getModuleName() === 'daterangepicker') {\n attributes(this.previousIcon, { tabIndex: '-1' });\n attributes(this.nextIcon, { tabIndex: '-1' });\n }\n attributes(this.nextIcon, ariaNextAttrs);\n attributes(this.nextIcon, tabIndexAttr);\n this.headerTitleElement = this.createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n attributes(this.headerTitleElement, tabIndexAttr);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(this.createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(this.createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n this.adjustLongHeaderSize();\n };\n CalendarBase.prototype.createContent = function () {\n this.contentElement = this.createElement('div', { className: CONTENT });\n this.table = this.createElement('table', { attrs: { 'class': CONTENTTABLE, 'tabIndex': '0', 'role': 'grid', 'aria-activedescendant': '', 'aria-labelledby': this.element.id } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.createContentHeader();\n this.createContentBody();\n if (this.showTodayButton) {\n this.createContentFooter();\n }\n if (this.getModuleName() != 'daterangepicker') {\n EventHandler.add(this.table, 'focus', this.addContentFocus, this);\n EventHandler.add(this.table, 'blur', this.removeContentFocus, this);\n }\n };\n CalendarBase.prototype.addContentFocus = function (args) {\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n if (!isNullOrUndefined(selectedDate)) {\n selectedDate.classList.add(FOCUSEDCELL);\n }\n else if (!isNullOrUndefined(focusedDate)) {\n focusedDate.classList.add(FOCUSEDCELL);\n }\n };\n CalendarBase.prototype.removeContentFocus = function (args) {\n var focusedDate = !isNullOrUndefined(this.tableBodyElement) ? this.tableBodyElement.querySelector('tr td.e-focused-date') : null;\n var selectedDate = !isNullOrUndefined(this.tableBodyElement) ? this.tableBodyElement.querySelector('tr td.e-selected') : null;\n if (!isNullOrUndefined(selectedDate)) {\n selectedDate.classList.remove(FOCUSEDCELL);\n }\n else if (!isNullOrUndefined(focusedDate)) {\n focusedDate.classList.remove(FOCUSEDCELL);\n }\n };\n CalendarBase.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n var dayFormat = 'days.stand-alone.' + this.dayHeaderFormat.toLowerCase();\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue(dayFormat, getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n if (!isNullOrUndefined(cldrObj)) {\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n }\n return culShortNames;\n };\n CalendarBase.prototype.toCapitalize = function (text) {\n return !isNullOrUndefined(text) && text.length ? text[0].toUpperCase() + text.slice(1) : text;\n };\n CalendarBase.prototype.createContentHeader = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = this.createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '<th class=\"e-week-number\" aria-hidden=\"true\"></th>';\n if (this.getModuleName() === 'calendar') {\n addClass([this.element], '' + WEEKNUMBER);\n }\n else {\n addClass([this.calendarElement], '' + WEEKNUMBER);\n }\n }\n // eslint-disable-next-line max-len\n var shortNames = this.getCultureValues().length > 0 && this.getCultureValues() ? this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek) : null;\n if (!isNullOrUndefined(shortNames)) {\n for (var days = 0; days <= daysCount; days++) {\n html += '<th class=\"\">' + this.toCapitalize(shortNames[days]) + '</th>';\n }\n }\n html = '<tr>' + html + '</tr>';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n CalendarBase.prototype.createContentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n CalendarBase.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n this.todayElement.setAttribute('aria-label', this.l10.getConstant('today'));\n this.todayElement.setAttribute('tabindex', '0');\n };\n CalendarBase.prototype.createContentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(+this.min);\n var maximum = new Date(+this.max);\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = this.createElement('button', { attrs: { role: 'button' } });\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = this.createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n CalendarBase.prototype.wireEvents = function (id, ref, keyConfig, moduleName) {\n EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n };\n CalendarBase.prototype.dateWireEvents = function (id, ref, keyConfig, moduleName) {\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, keyConfig);\n this.serverModuleName = moduleName;\n };\n CalendarBase.prototype.todayButtonClick = function (e, value, isCustomDate) {\n if (this.showTodayButton) {\n if (this.currentView() === this.depth) {\n this.effect = '';\n }\n else {\n this.effect = 'e-zoomin';\n }\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date(this.checkValue(value)), isCustomDate);\n }\n else {\n this.navigateTo('Month', new Date(this.checkValue(value)), isCustomDate);\n }\n }\n };\n CalendarBase.prototype.resetCalendar = function () {\n this.calendarElement && detach(this.calendarElement);\n this.tableBodyElement && detach(this.tableBodyElement);\n this.table && detach(this.table);\n this.tableHeadElement && detach(this.tableHeadElement);\n this.nextIcon && detach(this.nextIcon);\n this.previousIcon && detach(this.previousIcon);\n this.footer && detach(this.footer);\n this.todayElement = null;\n this.renderDayCellArgs = null;\n this.calendarElement = this.tableBodyElement = this.footer = this.tableHeadElement =\n this.nextIcon = this.previousIcon = this.table = null;\n };\n CalendarBase.prototype.keyActionHandle = function (e, value, multiSelection) {\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate;\n if (multiSelection) {\n if (!isNullOrUndefined(focusedDate) && +value === parseInt(focusedDate.getAttribute('id').split('_')[0], 10)) {\n selectedDate = focusedDate;\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n var view = this.getViewNumber(this.currentView());\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n this.keyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n }\n break;\n case 'moveRight':\n if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n this.keyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n }\n break;\n case 'moveUp':\n if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n if (view === 0) {\n this.keyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.keyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n }\n break;\n case 'moveDown':\n if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n if (view === 0) {\n this.keyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.keyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n }\n break;\n case 'select':\n if (e.target === this.headerTitleElement) {\n this.navigateTitle(e);\n }\n else if (e.target === this.previousIcon) {\n this.navigatePrevious(e);\n }\n else if (e.target === this.nextIcon) {\n this.navigateNext(e);\n }\n else if (e.target === this.todayElement) {\n this.todayButtonClick(e, value);\n if (this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') {\n this.element.focus();\n }\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n // eslint-disable-next-line radix\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element));\n }\n else {\n this.contentClick(null, --view, (element), value);\n }\n if (this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') {\n this.element.focus();\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) && !levelRestrict || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n case 'tab':\n if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && e.target === this.todayElement) {\n e.preventDefault();\n this.element.focus();\n this.hide();\n }\n break;\n case 'shiftTab':\n if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && e.target === this.headerTitleElement) {\n e.preventDefault();\n this.element.focus();\n this.hide();\n }\n break;\n }\n };\n CalendarBase.prototype.keyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date(this.checkValue(this.currentDate));\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.calendarMode === 'Gregorian') {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n else {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n *\n * @param {Date} value - Specifies value of date.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.preRender = function (value) {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n CalendarBase.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n CalendarBase.prototype.renderMonths = function (e, value, isCustomDate) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(this.currentDate, value, null, null, isCustomDate, e);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n this.createContentHeader();\n if (this.calendarMode === 'Gregorian') {\n this.renderTemplate(tdEles, numCells, MONTH, e, value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(tdEles, numCells, MONTH, e, value);\n }\n };\n CalendarBase.prototype.renderDays = function (currentDate, value, multiSelection, values, isTodayDate, e) {\n var tdEles = [];\n var cellsCount = 42;\n var todayDate = isTodayDate ? new Date(+currentDate) : this.getDate(new Date(), this.timezone);\n var localDate = new Date(this.checkValue(currentDate));\n var minMaxDate;\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.createElement('td', { className: CELL });\n var weekAnchor = this.createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n // 6 days are added to get Last day of the week and 3 days are added to get middle day of the week.\n var numberOfDays = this.weekRule === 'FirstDay' ? 6 : (this.weekRule === 'FirstFourDayWeek' ? 3 : 0);\n var finalDate = new Date(localDate.getFullYear(), localDate.getMonth(), (localDate.getDate() + numberOfDays));\n weekAnchor.textContent = '' + this.getWeek(finalDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { format: 'd', type: 'date', skeleton: 'yMd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n dayLink.setAttribute('aria-disabled', 'true');\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.renderDayCellArgs;\n this.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n var selectDate = new Date(this.checkValue(value));\n var argsDate = new Date(this.checkValue(argument.date));\n if (multiSelection) {\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd' }));\n var tempDateString = +new Date(this.globalize.formatDate(values[index], { type: 'date', skeleton: 'yMd' }));\n if (localDateString === tempDateString) {\n values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (selectDate && +selectDate === +argsDate) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n dayLink.setAttribute('aria-disabled', 'true');\n if (+this.renderDayCellArgs.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n // if (args.isDisabled && +this.value === +args.date) {\n // this.setProperties({ value: null }, true);\n // }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var currentTarget = void 0;\n if (!isNullOrUndefined(e) && e.type === 'click') {\n currentTarget = e.currentTarget;\n }\n if (multiSelection && !isNullOrUndefined(values) && !disabledCls) {\n for (var tempValue = 0; tempValue < values.length; tempValue++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(localDate, formatOptions);\n var tempDateString = this.globalize.formatDate(values[tempValue], formatOptions);\n if ((localDateString === tempDateString && this.getDateVal(localDate, values[tempValue]))\n || (this.getDateVal(localDate, value))) {\n addClass([tdEle], SELECTED);\n }\n if (!isNullOrUndefined(currentTarget) && currentTarget.innerText === tdEle.innerText &&\n this.previousDates && tdEle.classList.contains(SELECTED) && currentTarget.classList.contains(SELECTED)) {\n removeClass([tdEle], SELECTED);\n this.previousDates = false;\n var copyValues = this.copyValues(values);\n for (var i = 0; i < copyValues.length; i++) {\n var type_1 = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions_1 = { format: null, type: 'date', skeleton: 'short', calendar: type_1 };\n var localDateString_1 = this.globalize.formatDate(date, formatOptions_1);\n var tempDateString_1 = this.globalize.formatDate(copyValues[i], formatOptions_1);\n if (localDateString_1 === tempDateString_1) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n values.splice(index, 1);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (values.length <= 0) {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n if (!isNullOrUndefined(date) && date.getFullYear() === todayDate.getFullYear() && date.getMonth() === todayDate.getMonth()\n && date.getDate() === todayDate.getDate()) {\n addClass([tdEle], TODAY);\n }\n tdEles.push(this.renderDayCellArgs.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n CalendarBase.prototype.updateFocus = function (otherMonth, disabled, localDate, tableElement, currentDate) {\n if (currentDate.getDate() === localDate.getDate() && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n else {\n // eslint-disable-next-line radix\n if (currentDate >= this.max && parseInt(tableElement.id, 0) === +this.max && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n // eslint-disable-next-line radix\n if (currentDate <= this.min && parseInt(tableElement.id, 0) === +this.min && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n }\n };\n CalendarBase.prototype.renderYears = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date(this.checkValue(this.currentDate));\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date(this.checkValue(this.min)).getFullYear();\n var minMonth = new Date(this.checkValue(this.min)).getMonth();\n var maxYr = new Date(this.checkValue(this.max)).getFullYear();\n var maxMonth = new Date(this.checkValue(this.max)).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n var localMonth = (value && (value).getMonth() === localDate.getMonth());\n var select = (value && (value).getFullYear() === yr && localMonth);\n var title = this.globalize.formatDate(localDate, { type: 'date', format: 'MMM y' });\n dayLink.textContent = this.toCapitalize(this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'MMM'\n }));\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n dayLink.setAttribute('title', '' + title);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e, value);\n };\n CalendarBase.prototype.renderDecades = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date(this.checkValue(this.currentDate));\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date(localDate.setFullYear((localYr - localYr % 10)));\n var endYr = new Date(localDate.setFullYear((localYr - localYr % 10 + (10 - 1))));\n var startFullYr = startYr.getFullYear();\n var endFullYr = endYr.getFullYear();\n var startHdrYr = this.globalize.formatDate(startYr, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n var endHdrYr = this.globalize.formatDate(endYr, { format: null, type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n if ((year < startFullYr) || (year > endFullYr)) {\n addClass([tdEle], OTHERDECADE);\n dayLink.setAttribute('aria-disabled', 'true');\n if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n }\n else if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n dayLink.setAttribute('title', '' + dayLink.textContent);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n CalendarBase.prototype.dayCell = function (localDate) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: type };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var value;\n if (!isNullOrUndefined(date)) {\n value = date.valueOf();\n }\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false' }\n };\n return this.createElement('td', attrs);\n };\n CalendarBase.prototype.firstDay = function (date) {\n var collection = this.currentView() !== 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.lastDay = function (date, view) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n if (view !== 2) {\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n }\n else {\n return this.findLastDay(this.firstDay(lastDate));\n }\n };\n CalendarBase.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n CalendarBase.prototype.findLastDay = function (date) {\n var collection = this.currentView() === 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.removeTableHeadElement = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = this.createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = this.createElement('tr');\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (this.weekNumber && rowIterator === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].\n classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n if (this.calendarMode === 'Gregorian') {\n this.iconHandler();\n }\n else {\n this.islamicModule.islamicIconHandler();\n }\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActiveDescendant();\n };\n CalendarBase.prototype.clickHandler = function (e, value) {\n this.clickEventEmitter(e);\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.contentClick(e, 0, null, value);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null, value);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null, value);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null);\n }\n else {\n this.contentClick(e, 0, eve, value);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n // Content click event handler required for extended components\n CalendarBase.prototype.clickEventEmitter = function (e) {\n e.preventDefault();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.contentClick = function (e, view, element, value) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, element);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setMonth(d.getMonth());\n if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n this.currentDate.setDate(0);\n }\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.currentDate = d;\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n break;\n case 1:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.selectDate(e, d, null);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.islamicPreviousHeader = this.headerElement.textContent;\n var islamicDate = this.islamicModule.getIslamicDate(d);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, islamicDate.month, 1);\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n CalendarBase.prototype.switchView = function (view, e, multiSelection, isCustomDate) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e, null, isCustomDate);\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n CalendarBase.prototype.getModuleName = function () {\n return 'calendar';\n };\n /**\n *\n * @returns {void}\n * @deprecated\n */\n CalendarBase.prototype.requiredModules = function () {\n var modules = [];\n if (this.calendarMode === 'Islamic') {\n modules.push({ args: [this], member: 'islamic', name: 'Islamic' });\n }\n return modules;\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n CalendarBase.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarBaseModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarBaseModel} oldProp - Returns the previous property value of the component.\n * @param {boolean} multiSelection - - Specifies whether multiple date selection is enabled or not.\n * @param {Date[]} values - Specifies the dates.\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp, multiSelection, values) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'dayHeaderFormat':\n this.getCultureValues();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n }\n this.adjustLongHeaderSize();\n break;\n case 'min':\n case 'max':\n this.rangeValidation(this.min, this.max);\n if (prop === 'min') {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(newProp.min))) }, true);\n }\n else {\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(newProp.max))) }, true);\n }\n this.setProperties({ start: this.currentView() }, true);\n if (this.tableBodyElement) {\n detach(this.tableBodyElement);\n }\n this.minMaxUpdate();\n if (multiSelection) {\n this.validateValues(multiSelection, values);\n }\n if (this.getModuleName() !== 'datepicker') {\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentBody();\n }\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n else {\n if ((this.footer) && (this.todayElement) && this.todayElement.classList.contains('e-disabled')) {\n removeClass([this.todayElement], DISABLED);\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n }\n break;\n case 'start':\n case 'depth':\n case 'weekNumber':\n case 'firstDayOfWeek':\n case 'weekRule':\n this.checkView();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n if (this.getModuleName() === 'calendar') {\n var l10nLocale = { today: 'Today' };\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n }\n this.l10.setLocale(this.locale);\n if (this.showTodayButton) {\n this.updateFooter();\n }\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.createContentFooter();\n }\n else {\n if (!isNullOrUndefined(this.todayElement) && !isNullOrUndefined(this.footer)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n /**\n * values property updated with considered disabled dates of the calendar.\n *\n * @param {boolean} multiSelection - Specifies whether multiple date selection is enabled.\n * @param {Date[]} values - Specifies the dates to validate.\n * @returns {void}\n */\n CalendarBase.prototype.validateValues = function (multiSelection, values) {\n if (multiSelection && !isNullOrUndefined(values) && values.length > 0) {\n var copyValues = this.copyValues(values);\n for (var skipIndex = 0; skipIndex < copyValues.length; skipIndex++) {\n var tempValue = copyValues[skipIndex];\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var tempValueString = void 0;\n if (this.calendarMode === 'Gregorian') {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'date', skeleton: 'yMd' });\n }\n else {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'dateTime', skeleton: 'full', calendar: 'islamic' });\n }\n var minFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var minStringValue = this.globalize.formatDate(this.min, minFormatOption);\n var minString = minStringValue;\n var maxFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var maxStringValue = this.globalize.formatDate(this.max, maxFormatOption);\n var maxString = maxStringValue;\n if (+new Date(tempValueString) < +new Date(minString) ||\n +new Date(tempValueString) > +new Date(maxString)) {\n copyValues.splice(skipIndex, 1);\n skipIndex = -1;\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n };\n CalendarBase.prototype.setValueUpdate = function () {\n if (!isNullOrUndefined(this.tableBodyElement)) {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\n }\n };\n CalendarBase.prototype.copyValues = function (values) {\n var copyValues = [];\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n copyValues.push(new Date(+values[index]));\n }\n }\n return copyValues;\n };\n CalendarBase.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n var dayFormatOptions;\n var monthFormatOptions;\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n if (this.calendarMode === 'Gregorian') {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM', calendar: type });\n monthFormatOptions = globalize.formatDate(date, {\n format: null, type: 'dateTime', skeleton: 'y', calendar: type\n });\n }\n else {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'MMMM y', calendar: type });\n monthFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'y', calendar: type });\n }\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = this.toCapitalize(dayFormatOptions);\n break;\n case 'months':\n this.headerTitleElement.textContent = monthFormatOptions;\n }\n };\n CalendarBase.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var title;\n var view = this.currentView();\n if (view === 'Month') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full', calendar: type });\n }\n else if (view === 'Year') {\n if (type !== 'islamic') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'yMMMM', calendar: type });\n }\n else {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'GyMMM', calendar: type });\n }\n }\n else {\n title = this.globalize.formatDate(this.currentDate, {\n format: null, type: 'date', skeleton: 'y', calendar: type\n });\n }\n if (selectedEle || focusedEle) {\n if (!isNullOrUndefined(selectedEle)) {\n selectedEle.setAttribute('aria-selected', 'true');\n }\n (focusedEle || selectedEle).setAttribute('aria-label', title);\n id = (focusedEle || selectedEle).getAttribute('id');\n }\n return id;\n };\n CalendarBase.prototype.iconHandler = function () {\n new Date(this.checkValue(this.currentDate)).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n CalendarBase.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar' && this.element) {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement && this.element) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar' && this.element) {\n if (!isNullOrUndefined(this.headerTitleElement)) {\n EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n }\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n if (!isNullOrUndefined(this.calendarEleCopy.getAttribute('tabindex'))) {\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.element.removeAttribute('tabindex');\n }\n }\n if (this.element) {\n this.element.innerHTML = '';\n }\n this.todayElement = null;\n this.tableBodyElement = null;\n this.todayButtonEvent = null;\n this.renderDayCellArgs = null;\n this.headerElement = null;\n this.nextIcon = null;\n this.table = null;\n this.tableHeadElement = null;\n this.previousIcon = null;\n this.headerTitleElement = null;\n this.footer = null;\n this.contentElement = null;\n _super.prototype.destroy.call(this);\n };\n CalendarBase.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n CalendarBase.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n CalendarBase.prototype.navigateTitle = function (e) {\n e.preventDefault();\n this.title(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigatePrevious = function (e) {\n !Browser.isDevice && e.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.previous();\n }\n else {\n this.islamicModule.islamicPrevious();\n }\n this.triggerNavigate(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigateNext = function (eve) {\n !Browser.isDevice && eve.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.next();\n }\n else {\n this.islamicModule.islamicNext();\n }\n this.triggerNavigate(eve);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n */\n CalendarBase.prototype.navigateTo = function (view, date, isCustomDate) {\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n if (+date >= +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n view = this.depth;\n }\n }\n this.switchView(this.getViewNumber(view), null, null, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n */\n CalendarBase.prototype.currentView = function () {\n if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n CalendarBase.prototype.getDateVal = function (date, value) {\n return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.getCultureObjects = function (ld, c) {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.' + this.dayHeaderFormat.toLowerCase();\n var islamicFormat = '.dates.calendars.islamic.days.format.' + this.dayHeaderFormat.toLowerCase();\n var mainVal = 'main.';\n if (this.calendarMode === 'Gregorian') {\n return getValue(mainVal + '' + this.locale + gregorianFormat, ld);\n }\n else {\n return getValue('main.' + '' + this.locale + islamicFormat, ld);\n }\n };\n CalendarBase.prototype.getWeek = function (d) {\n var currentDate = new Date(this.checkValue(d)).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n return Math.ceil((((currentDate - date) + dayMilliSeconds) / dayMilliSeconds) / 7);\n };\n CalendarBase.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n CalendarBase.prototype.addMonths = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, (islamicDate.month) + i, 1);\n }\n };\n CalendarBase.prototype.addYears = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year + i, (islamicDate.month), 1);\n }\n };\n CalendarBase.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: type };\n // eslint-disable-next-line radix\n var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n var date = this.globalize.parseDate(dateString, dateFormatOptions);\n var value = date.valueOf() - date.valueOf() % 1000;\n return new Date(value);\n //return this.globalize.parseDate(dateString, dateFormatOptions);\n };\n CalendarBase.prototype.adjustLongHeaderSize = function () {\n removeClass([this.element], DAYHEADERLONG);\n if (this.dayHeaderFormat === 'Wide') {\n addClass([this.getModuleName() === 'calendar' ? this.element : this.calendarElement], DAYHEADERLONG);\n }\n };\n CalendarBase.prototype.selectDate = function (e, date, node, multiSelection, values) {\n var element = node || e.currentTarget;\n this.isDateSelected = false;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n if (multiSelection && !this.checkPresentDate(date, values)) {\n var copyValues = this.copyValues(values);\n if (!isNullOrUndefined(values) && copyValues.length > 0) {\n copyValues.push(new Date(this.checkValue(date)));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: values[values.length - 1] }, true);\n }\n else {\n this.setProperties({ values: [new Date(this.checkValue(date))] }, true);\n }\n }\n else {\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n }\n this.currentDate = new Date(this.checkValue(date));\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDCELL))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDCELL)], FOCUSEDCELL);\n }\n if (multiSelection) {\n var copyValues = this.copyValues(values);\n var collection = Array.prototype.slice.call(this.tableBodyElement.querySelectorAll('td'));\n for (var index = 0; index < collection.length; index++) {\n var tempElement = tableBodyElement.querySelectorAll('td' + '.' + FOCUSEDDATE)[0];\n var selectedElement = tableBodyElement.querySelectorAll('td' + '.' + SELECTED)[0];\n if (collection[index] === tempElement) {\n removeClass([collection[index]], FOCUSEDDATE);\n }\n if (collection[index] === selectedElement &&\n !this.checkPresentDate(new Date(parseInt(selectedElement.getAttribute('id').split('_')[0], 10)), values)) {\n removeClass([collection[index]], SELECTED);\n }\n }\n if (element.classList.contains(SELECTED)) {\n removeClass([element], SELECTED);\n for (var i = 0; i < copyValues.length; i++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(date, formatOptions);\n var tempDateString = this.globalize.formatDate(copyValues[i], formatOptions);\n if (localDateString === tempDateString) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n addClass([element], FOCUSEDDATE);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n addClass([element], SELECTED);\n }\n }\n else {\n addClass([element], SELECTED);\n }\n this.isDateSelected = true;\n };\n CalendarBase.prototype.checkPresentDate = function (dates, values) {\n var previousValue = false;\n if (!isNullOrUndefined(values)) {\n for (var checkPrevious = 0; checkPrevious < values.length; checkPrevious++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var localDateString = this.globalize.formatDate(dates, {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n var tempDateString = this.globalize.formatDate(values[checkPrevious], {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n if (localDateString === tempDateString) {\n previousValue = true;\n }\n }\n }\n return previousValue;\n };\n CalendarBase.prototype.setAriaActiveDescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n CalendarBase.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n CalendarBase.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n CalendarBase.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n CalendarBase.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n CalendarBase.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n CalendarBase.prototype.isMonthYearRange = function (date) {\n if (this.calendarMode === 'Gregorian') {\n return date.getMonth() >= this.min.getMonth()\n && date.getFullYear() >= this.min.getFullYear()\n && date.getMonth() <= this.max.getMonth()\n && date.getFullYear() <= this.max.getFullYear();\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n return islamicDate.month >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).month\n && islamicDate.year >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).year\n && islamicDate.month <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).month\n && islamicDate.year <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).year;\n }\n };\n CalendarBase.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n CalendarBase.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n CalendarBase.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = void 0;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(value);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n collection = tdEles.filter(function (element) {\n return element.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n // eslint-disable-next-line radix\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n CalendarBase.prototype.getMaxDays = function (d) {\n var date;\n var tmpDate = new Date(this.checkValue(d));\n date = 28;\n var month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n CalendarBase.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n this.currentDate = new Date(this.checkValue(value));\n }\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n CalendarBase.prototype.checkValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n CalendarBase.prototype.checkView = function () {\n if (this.start !== 'Decade' && this.start !== 'Year') {\n this.setProperties({ start: 'Month' }, true);\n }\n if (this.depth !== 'Decade' && this.depth !== 'Year') {\n this.setProperties({ depth: 'Month' }, true);\n }\n if (this.getViewNumber(this.depth) > this.getViewNumber(this.start)) {\n this.setProperties({ depth: 'Month' }, true);\n }\n };\n CalendarBase.prototype.getDate = function (date, timezone) {\n if (timezone) {\n date = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n }\n return date;\n };\n __decorate([\n Property(new Date(1900, 0, 1))\n ], CalendarBase.prototype, \"min\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], CalendarBase.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], CalendarBase.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"weekNumber\", void 0);\n __decorate([\n Property('FirstDay')\n ], CalendarBase.prototype, \"weekRule\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], CalendarBase.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"renderDayCell\", void 0);\n CalendarBase = __decorate([\n NotifyPropertyChanges\n ], CalendarBase);\n return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n * <div id=\"calendar\"/>\n * ```\n * ```typescript\n * <script>\n * var calendarObj = new Calendar({ value: new Date() });\n * calendarObj.appendTo(\"#calendar\");\n * </script>\n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarModel} options - Specifies the Calendar model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function Calendar(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.render = function () {\n if (this.calendarMode === 'Islamic' && this.islamicModule === undefined) {\n throwError('Requires the injectable Islamic modules to render Calendar in Islamic mode');\n }\n if (this.isMultiSelection && typeof this.values === 'object' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var tempValues = [];\n var copyValues = [];\n for (var limit = 0; limit < this.values.length; limit++) {\n if (tempValues.indexOf(+this.values[limit]) === -1) {\n tempValues.push(+this.values[limit]);\n copyValues.push(this.values[limit]);\n }\n }\n this.setProperties({ values: copyValues }, true);\n for (var index = 0; index < this.values.length; index++) {\n if (!this.checkDateValue(this.values[index])) {\n if (typeof (this.values[index]) === 'string' && this.checkDateValue(new Date(this.checkValue(this.values[index])))) {\n var copyDate = new Date(this.checkValue(this.values[index]));\n this.values.splice(index, 1);\n this.values.splice(index, 0, copyDate);\n }\n else {\n this.values.splice(index, 1);\n }\n }\n }\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n this.previousValues = this.values.length;\n }\n this.validateDate();\n this.minMaxUpdate();\n if (this.getModuleName() === 'calendar') {\n this.setEnable(this.enabled);\n this.setClass(this.cssClass);\n }\n _super.prototype.render.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n this.setTimeZone(this.serverTimezoneOffset);\n }\n this.renderComplete();\n };\n Calendar.prototype.setEnable = function (enable) {\n if (!enable) {\n addClass([this.element], DISABLED);\n }\n else {\n removeClass([this.element], DISABLED);\n }\n };\n Calendar.prototype.setClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCssClass) && oldCssClass !== '') {\n removeClass([this.element], oldCssClass.split(' '));\n }\n if (!isNullOrUndefined(newCssClass)) {\n addClass([this.element], newCssClass.split(' '));\n }\n };\n Calendar.prototype.isDayLightSaving = function () {\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n Calendar.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var serverTimezoneDiff = offsetValue;\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date(this.value.getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n Calendar.prototype.formResetHandler = function () {\n this.setProperties({ value: null }, true);\n };\n Calendar.prototype.validateDate = function () {\n if (typeof this.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(this.checkValue(this.value))) }, true); // persist the value property.\n }\n _super.prototype.validateDate.call(this, this.value);\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date(this.checkValue(this.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n }\n if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.min);\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.max);\n }\n }\n }\n else {\n _super.prototype.minMaxUpdate.call(this, this.value);\n }\n };\n Calendar.prototype.generateTodayVal = function (value) {\n var tempValue = new Date();\n if (!isNullOrUndefined(this.timezone)) {\n tempValue = _super.prototype.getDate.call(this, tempValue, this.timezone);\n }\n if (value && isNullOrUndefined(this.timezone)) {\n tempValue.setHours(value.getHours());\n tempValue.setMinutes(value.getMinutes());\n tempValue.setSeconds(value.getSeconds());\n tempValue.setMilliseconds(value.getMilliseconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n }\n return tempValue;\n };\n Calendar.prototype.todayButtonClick = function (e) {\n if (this.showTodayButton) {\n var tempValue = this.generateTodayVal(this.value);\n this.setProperties({ value: tempValue }, true);\n this.isTodayClicked = true;\n this.todayButtonEvent = e;\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (!_super.prototype.checkPresentDate.call(this, tempValue, this.values)) {\n copyValues.push(tempValue);\n this.setProperties({ values: copyValues });\n }\n }\n _super.prototype.todayButtonClick.call(this, e, new Date(+this.value));\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n _super.prototype.keyActionHandle.call(this, e, this.value, this.isMultiSelection);\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n this.checkView();\n _super.prototype.preRender.call(this, this.value);\n };\n /**\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.createContent = function () {\n this.previousDate = this.value;\n this.previousDateTime = this.value;\n _super.prototype.createContent.call(this);\n };\n Calendar.prototype.minMaxDate = function (localDate) {\n return _super.prototype.minMaxDate.call(this, localDate);\n };\n Calendar.prototype.renderMonths = function (e, value, isCustomDate) {\n _super.prototype.renderMonths.call(this, e, this.value, isCustomDate);\n };\n Calendar.prototype.renderDays = function (currentDate, value, isMultiSelect, values, isCustomDate, e) {\n var tempDays = _super.prototype.renderDays.call(this, currentDate, this.value, this.isMultiSelection, this.values, isCustomDate, e);\n if (this.isMultiSelection) {\n _super.prototype.validateValues.call(this, this.isMultiSelection, this.values);\n }\n return tempDays;\n };\n Calendar.prototype.renderYears = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderYears.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderYears(e, this.value);\n }\n };\n Calendar.prototype.renderDecades = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderDecades.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderDecade(e, this.value);\n }\n };\n Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(elements, count, classNm, e, this.value);\n }\n this.changedArgs = { value: this.value, values: this.values };\n e && e.type === 'click' && e.currentTarget.classList.contains(OTHERMONTH) ? this.changeHandler(e) : this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n this.isPopupClicked = true;\n if (eve.classList.contains(OTHERMONTH)) {\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (copyValues.toString().indexOf(this.getIdValue(e, null).toString()) === -1) {\n copyValues.push(this.getIdValue(e, null));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n else {\n this.previousDates = true;\n }\n }\n else {\n this.setProperties({ value: this.getIdValue(e, null) }, true);\n }\n }\n var storeView = this.currentView();\n _super.prototype.clickHandler.call(this, e, this.value);\n if (this.isMultiSelection && this.currentDate !== this.value &&\n !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0]) && storeView === 'Year') {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n };\n Calendar.prototype.switchView = function (view, e, isMultiSelection, isCustomDate) {\n _super.prototype.switchView.call(this, view, e, this.isMultiSelection, isCustomDate);\n };\n /**\n * To get component name\n *\n * @returns {string} Return the component name.\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n _super.prototype.getModuleName.call(this);\n return 'calendar';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n Calendar.prototype.getPersistData = function () {\n _super.prototype.getPersistData.call(this);\n var keyEntity = ['value', 'values'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n this.rangeValidation(this.min, this.max);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (this.isDateSelected) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: new Date(this.checkValue(newProp.value)) }, true);\n }\n else {\n newProp.value = new Date(this.checkValue(newProp.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.update();\n }\n break;\n case 'values':\n if (this.isDateSelected) {\n if (typeof newProp.values === 'string' || typeof newProp.values === 'number') {\n this.setProperties({ values: null }, true);\n }\n else {\n var copyValues = this.copyValues(this.values);\n for (var index = 0; index < copyValues.length; index++) {\n var tempDate = copyValues[index];\n if (this.checkDateValue(tempDate) && !_super.prototype.checkPresentDate.call(this, tempDate, copyValues)) {\n copyValues.push(tempDate);\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.values.length > 0) {\n this.setProperties({ value: newProp.values[newProp.values.length - 1] }, true);\n }\n }\n this.validateValues(this.isMultiSelection, this.values);\n this.update();\n }\n break;\n case 'isMultiSelection':\n if (this.isDateSelected) {\n this.setProperties({ isMultiSelection: newProp.isMultiSelection }, true);\n this.update();\n }\n break;\n case 'enabled':\n this.setEnable(this.enabled);\n break;\n case 'cssClass':\n if (this.getModuleName() === 'calendar') {\n this.setClass(newProp.cssClass, oldProp.cssClass);\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp, this.isMultiSelection, this.values);\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n Calendar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'calendar') {\n this.changedArgs = null;\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.navigateTo = function (view, date, isCustomDate) {\n this.minMaxUpdate();\n _super.prototype.navigateTo.call(this, view, date, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n * @deprecated\n */\n Calendar.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * This method is used to add the single or multiple dates to the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates to be added to the values property of the Calendar.\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.addDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number') {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && (dates).length > 0) {\n var tempDates = dates;\n for (var i = 0; i < tempDates.length; i++) {\n if (this.checkDateValue(tempDates[i]) && !_super.prototype.checkPresentDate.call(this, tempDates[i], copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push(tempDates[i]);\n }\n else {\n copyValues = [new Date(+tempDates[i])];\n }\n }\n }\n }\n else {\n if (this.checkDateValue(dates) && !_super.prototype.checkPresentDate.call(this, dates, copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push((dates));\n }\n else {\n copyValues = [new Date(+dates)];\n }\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.validateValues(this.isMultiSelection, copyValues);\n this.update();\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * This method is used to remove the single or multiple dates from the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates which need to be removed from the values property of the Calendar.\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.removeDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && ((dates).length > 0)) {\n var tempDates = dates;\n for (var index = 0; index < tempDates.length; index++) {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +tempDates[index]) {\n copyValues.splice(i, 1);\n }\n }\n }\n }\n else {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +dates) {\n copyValues.splice(i, 1);\n }\n }\n }\n this.setProperties({ values: copyValues }, false);\n this.update();\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * To set custom today date in calendar\n *\n * @param {Date} date - Specifies date value to be set.\n * @private\n * @returns {void}\n */\n Calendar.prototype.setTodayDate = function (date) {\n var todayDate = new Date(+date);\n this.setProperties({ value: todayDate }, true);\n _super.prototype.todayButtonClick.call(this, null, todayDate, true);\n };\n Calendar.prototype.update = function () {\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.isMultiSelection, this.values);\n if (this.isMultiSelection && !isNullOrUndefined(this.values) && this.values.length > 0) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Calendar.prototype.changeEvent = function (e) {\n if ((this.value && this.value.valueOf()) !== (this.previousDate && +this.previousDate.valueOf())\n || this.isMultiSelection) {\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = new Date(+this.value);\n }\n };\n Calendar.prototype.triggerChange = function (e) {\n if (!isNullOrUndefined(this.todayButtonEvent) && this.isTodayClicked) {\n e = this.todayButtonEvent;\n this.isTodayClicked = false;\n }\n this.changedArgs.event = e || null;\n this.changedArgs.isInteracted = !isNullOrUndefined(e);\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n // eslint-disable-next-line use-isnan\n if (!this.isMultiSelection && +this.value !== Number.NaN && (!isNullOrUndefined(this.value) &&\n !isNullOrUndefined(this.previousDate) || this.previousDate === null\n && !isNaN(+this.value))) {\n this.changeEvent(e);\n }\n else if (!isNullOrUndefined(this.values) && this.previousValues !== this.values.length) {\n this.changeEvent(e);\n this.previousValues = this.values.length;\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Calendar.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(CalendarBase));\nexport { Calendar };\n","/**\n *\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, addClass, attributes, HijriParser } from '@syncfusion/ej2-base';\nimport { getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar dayMilliSeconds = 86400000;\nvar minDecade = 2060;\nvar maxDecade = 2069;\nvar Islamic = /** @class */ (function () {\n function Islamic(instance) {\n this.calendarInstance = instance;\n }\n Islamic.prototype.getModuleName = function () {\n return 'islamic';\n };\n Islamic.prototype.islamicTitleUpdate = function (date, view) {\n var globalize = new Internationalization(this.calendarInstance.locale);\n switch (view) {\n case 'days':\n this.calendarInstance.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', format: 'MMMMyyyy', calendar: 'islamic' });\n break;\n case 'months':\n this.calendarInstance.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', format: 'yyyy', calendar: 'islamic' });\n }\n };\n Islamic.prototype.islamicRenderDays = function (currentDate, value, multiSelection, values) {\n var tdEles = [];\n var cellsCount = 42;\n var localDate = new Date(this.islamicInValue(currentDate));\n var minMaxDate;\n this.islamicTitleUpdate(currentDate, 'days');\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = this.toGregorian(islamicDate.year, islamicDate.month, 1);\n var currentMonth = islamicDate.month;\n localDate = gregorianObject;\n while (localDate.getDay() !== this.calendarInstance.firstDayOfWeek) {\n this.calendarInstance.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.calendarInstance.createElement('td', { className: CELL });\n var weekAnchor = this.calendarInstance.createElement('span');\n if (day % 7 === 0 && this.calendarInstance.weekNumber) {\n weekAnchor.textContent = '' + this.calendarInstance.getWeek(localDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.calendarInstance.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: 'islamic' };\n var date = this.calendarInstance.globalize.parseDate(this.calendarInstance.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.islamicDayCell(localDate);\n var title = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'full', calendar: 'islamic' });\n var dayLink = this.calendarInstance.createElement('span');\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'd', calendar: 'islamic' });\n var disabled = (this.calendarInstance.min > localDate) || (this.calendarInstance.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n var hijriMonthObject = this.getIslamicDate(localDate);\n if (currentMonth !== hijriMonthObject.month) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.calendarInstance.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.calendarInstance.renderDayCellArgs;\n this.calendarInstance.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n if (this.calendarInstance.isMultiSelection) {\n if (!isNullOrUndefined(this.calendarInstance.values) && this.calendarInstance.values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.calendarInstance.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd', calendar: 'islamic' }));\n var tempDateString = +new Date(this.calendarInstance.globalize.formatDate(this.calendarInstance.values[index], { type: 'date', skeleton: 'yMd', calendar: 'islamic' }));\n if (localDateString === tempDateString) {\n this.calendarInstance.values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (value && +value === +argument.date) {\n this.calendarInstance.setProperties({ value: null }, true);\n }\n }\n if (this.calendarInstance.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.calendarInstance.renderDayCellArgs.date === +this.calendarInstance.todayDate) {\n this.calendarInstance.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n if (this.calendarInstance.isMultiSelection && !isNullOrUndefined(this.calendarInstance.values) &&\n !otherMnthBool && !disabledCls) {\n for (var tempValue = 0; tempValue < this.calendarInstance.values.length; tempValue++) {\n var localDateString = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'short', calendar: 'islamic' });\n var tempDateString = this.calendarInstance.globalize.formatDate(this.calendarInstance.values[tempValue], { type: 'date', skeleton: 'short', calendar: 'islamic' });\n if (localDateString === tempDateString &&\n this.calendarInstance.getDateVal(localDate, this.calendarInstance.values[tempValue])) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (this.calendarInstance.values.length <= 0) {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!otherMnthBool && !disabledCls && this.calendarInstance.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n if (date.getDate() === new Date().getDate() && date.getMonth() === new Date().getMonth()) {\n if (date.getFullYear() === new Date().getFullYear()) {\n addClass([tdEle], TODAY);\n }\n }\n localDate = new Date(+minMaxDate);\n tdEles.push(this.calendarInstance.renderDayCellArgs.element);\n this.calendarInstance.addDay(localDate, 1, null, this.calendarInstance.max, this.calendarInstance.min);\n }\n return tdEles;\n };\n Islamic.prototype.islamicIconHandler = function () {\n new Date(this.islamicInValue(this.calendarInstance.currentDate)).setDate(1);\n var date = new Date(this.islamicInValue(this.calendarInstance.currentDate));\n switch (this.calendarInstance.currentView()) {\n case 'Month':\n {\n var prevMonthCompare = this.islamicCompareMonth(date, this.calendarInstance.min) < 1;\n var nextMonthCompare = this.islamicCompareMonth(date, this.calendarInstance.max) > -1;\n this.calendarInstance.previousIconHandler(prevMonthCompare);\n this.calendarInstance.nextIconHandler(nextMonthCompare);\n }\n break;\n case 'Year':\n {\n var prevYearCompare = this.hijriCompareYear(date, this.calendarInstance.min) < 1;\n var nextYearCompare = this.hijriCompareYear(date, this.calendarInstance.max) > -1;\n this.calendarInstance.previousIconHandler(prevYearCompare);\n this.calendarInstance.nextIconHandler(nextYearCompare);\n }\n break;\n case 'Decade': {\n var startIslamicYear = 1361;\n var gregorianValue = HijriParser.toGregorian(startIslamicYear, 1, 1);\n var prevDecadeCompare = this.hijriCompareDecade(date, this.calendarInstance.min) < 1;\n var nextDecadeCompare = this.hijriCompareDecade(date, this.calendarInstance.max) > -1;\n prevDecadeCompare = HijriParser.toGregorian(this.calendarInstance.headerTitleElement.textContent.split('-')[0].trim(), 1, 1).getFullYear() === gregorianValue.getFullYear() ? true : prevDecadeCompare;\n this.calendarInstance.previousIconHandler(prevDecadeCompare);\n this.calendarInstance.nextIconHandler(nextDecadeCompare);\n }\n }\n };\n Islamic.prototype.islamicNext = function () {\n this.calendarInstance.effect = '';\n var view = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n var islamicDate = this.getIslamicDate(this.calendarInstance.currentDate);\n switch (this.calendarInstance.currentView()) {\n case 'Year':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year + 1, islamicDate.month, 1);\n this.calendarInstance.switchView(view);\n break;\n case 'Month':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year, islamicDate.month + 1, 1);\n this.calendarInstance.switchView(view);\n break;\n case 'Decade':\n this.calendarInstance.nextIconClicked = true;\n if (islamicDate.year - this.calendarInstance.headerElement.textContent.split('-')[0].trim() === 1) {\n islamicDate.year = islamicDate.year - this.calendarInstance.headerElement.textContent.split('-')[0].trim() === 1 ? islamicDate.year + 1 : islamicDate.year;\n }\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year + 10, islamicDate.month, 1);\n this.calendarInstance.switchView(view);\n break;\n }\n };\n Islamic.prototype.islamicPrevious = function () {\n var currentView = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n this.calendarInstance.effect = '';\n var islamicDate = this.getIslamicDate(this.calendarInstance.currentDate);\n switch (this.calendarInstance.currentView()) {\n case 'Month':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year, islamicDate.month - 1, 1);\n this.calendarInstance.switchView(currentView);\n break;\n case 'Year':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year - 1, islamicDate.month, 1);\n this.calendarInstance.switchView(currentView);\n break;\n case 'Decade':\n this.calendarInstance.previousIconClicked = true;\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year - 10, islamicDate.month - 1, 1);\n this.calendarInstance.switchView(currentView);\n break;\n }\n };\n Islamic.prototype.islamicRenderYears = function (e, value) {\n this.calendarInstance.removeTableHeadElement();\n var numCells = 4;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date(this.islamicInValue(this.calendarInstance.currentDate));\n var localDate = curDate;\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject;\n var mon = islamicDate.month;\n var yr = islamicDate.year;\n var curYrs = islamicDate.year;\n var minYr = (this.getIslamicDate(this.calendarInstance.min)).year;\n var minMonth = (this.getIslamicDate(this.calendarInstance.min)).month;\n var maxYr = (this.getIslamicDate(this.calendarInstance.max)).year;\n var maxMonth = (this.getIslamicDate(this.calendarInstance.max)).month;\n this.islamicTitleUpdate(this.calendarInstance.currentDate, 'months');\n for (var month = 1; month <= 12; ++month) {\n var islamicDate_1 = this.getIslamicDate(localDate);\n var gregorianObject_1 = HijriParser.toGregorian(islamicDate_1.year, month, 1);\n localDate = gregorianObject_1;\n var tdEle = this.islamicDayCell(localDate);\n var dayLink = this.calendarInstance.createElement('span');\n var localMonth = (value &&\n (this.getIslamicDate(value)).month === (this.getIslamicDate(localDate)).month);\n var select = (value && (this.getIslamicDate(value)).year === yr && localMonth);\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'dateTime', format: 'MMM', calendar: 'islamic' });\n if ((this.calendarInstance.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.calendarInstance.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if ((this.getIslamicDate(localDate)).month === mon &&\n (this.getIslamicDate(this.calendarInstance.currentDate)).month === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.islamicRenderTemplate(tdEles, numCells, YEAR, e, value);\n };\n Islamic.prototype.islamicRenderDecade = function (e, value) {\n this.calendarInstance.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date(this.islamicInValue(this.calendarInstance.currentDate));\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject;\n var localYr = localDate.getFullYear();\n var startYr = new Date(this.islamicInValue((localYr - localYr % 10)));\n var endYr = new Date(this.islamicInValue((localYr - localYr % 10 + (10 - 1))));\n var startFullYr = startYr.getFullYear();\n var endFullYr = endYr.getFullYear();\n var startHdrYr = this.calendarInstance.globalize.formatDate(startYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n var endHdrYr = this.calendarInstance.globalize.formatDate(endYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n if (this.calendarInstance.locale === 'ar') {\n startHdrYr = Number(startHdrYr.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) { return String.fromCharCode(d.charCodeAt(0) - 1632 + 48); }));\n endHdrYr = Number(endHdrYr.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) { return String.fromCharCode(d.charCodeAt(0) - 1632 + 48); }));\n }\n var splityear = this.calendarInstance.headerElement.textContent.split('-');\n if ((!isNullOrUndefined(e) && (splityear[0] !== startHdrYr) && e.action === 'home') || (!isNullOrUndefined(e) && e.type === 'keydown' && e.action === 'end')) {\n startHdrYr = this.calendarInstance.headerElement.textContent.split('-')[0].trim();\n endHdrYr = this.calendarInstance.headerElement.textContent.split('-')[1].trim();\n }\n if (this.calendarInstance.islamicPreviousHeader) {\n startHdrYr = this.calendarInstance.islamicPreviousHeader.split('-')[0].trim();\n endHdrYr = this.calendarInstance.islamicPreviousHeader.split('-')[1].trim();\n this.calendarInstance.islamicPreviousHeader = null;\n }\n if (this.calendarInstance.previousIconClicked) {\n // eslint-disable-next-line no-var\n for (var i = 0; i <= splityear.length; i++) {\n endHdrYr = endHdrYr - splityear[i] === 2 || splityear[i]\n - endHdrYr === 2 ? (parseInt(endHdrYr, 10) + 1).toString() :\n endHdrYr - splityear[i] === 3 || splityear[i] - endHdrYr === 3 ?\n (parseInt(endHdrYr, 10) + 2).toString() : endHdrYr - splityear[i] === 4 ||\n splityear[i] - endHdrYr === 4 ? (parseInt(endHdrYr, 10) + 3).toString() :\n endHdrYr - splityear[i] === 5 || splityear[i] - endHdrYr === 5 ?\n (parseInt(endHdrYr, 10) + 4).toString() : endHdrYr;\n if (endHdrYr - splityear[i] === 0 || splityear[i] - endHdrYr === 0) {\n endHdrYr = (parseInt(endHdrYr, 10) - 1).toString();\n }\n }\n if (endHdrYr - splityear[i] === 8 || splityear[i] - endHdrYr === 8) {\n endHdrYr = (parseInt(endHdrYr, 10) - 9).toString();\n startHdrYr = (parseInt(endHdrYr, 10) - 9).toString();\n }\n if (endHdrYr - splityear[i] === 7 || splityear[i] - endHdrYr === 7) {\n endHdrYr = (parseInt(endHdrYr, 10) - 8).toString();\n startHdrYr = (parseInt(endHdrYr, 10) - 9).toString();\n }\n startHdrYr = endHdrYr - startHdrYr === 10\n ? (parseInt(startHdrYr, 10) + 1).toString() : endHdrYr - startHdrYr === 11\n ? (parseInt(startHdrYr, 10) + 2).toString() : endHdrYr - startHdrYr === 12\n ? (parseInt(startHdrYr, 10) + 3).toString() : startHdrYr;\n if (endHdrYr - startHdrYr === 8) {\n startHdrYr = (parseInt(startHdrYr, 10) - 1).toString();\n }\n }\n if (this.calendarInstance.nextIconClicked) {\n for (var i_1 = 0; i_1 <= splityear.length; i_1++) {\n if (startHdrYr - splityear[i_1] === 0 || splityear[i_1] - startHdrYr === 0) {\n startHdrYr = (parseInt(startHdrYr, 10) + 1).toString();\n }\n if (startHdrYr - splityear[i_1] === 2 && startHdrYr > splityear[i_1].trim()) {\n startHdrYr = (parseInt(startHdrYr, 10) - 1).toString();\n }\n if (splityear[i_1] - startHdrYr === 1 && startHdrYr < splityear[i_1].trim()) {\n startHdrYr = (parseInt(startHdrYr, 10) + 2).toString();\n }\n }\n if (startHdrYr - this.calendarInstance.headerTitleElement.textContent.split('-')[1].trim() > 1) {\n startHdrYr = (parseInt(this.calendarInstance.headerTitleElement.textContent.split('-')[1].trim(), 10) + 1).toString();\n endHdrYr = (parseInt(startHdrYr, 10) + 9).toString();\n }\n endHdrYr = endHdrYr - startHdrYr === 10 ? (parseInt(endHdrYr, 10) - 1).toString() : endHdrYr;\n endHdrYr = endHdrYr - startHdrYr === 7\n ? (parseInt(endHdrYr, 10) + 2).toString() : endHdrYr - startHdrYr === 8\n ? (parseInt(endHdrYr, 10) + 1).toString() : endHdrYr;\n }\n if (this.calendarInstance.locale === 'ar') {\n var startHeaderYear = this.calendarInstance.globalize.formatDate(startYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n var endHeaderYear = this.calendarInstance.globalize.formatDate(endYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n this.calendarInstance.headerTitleElement.textContent = startHeaderYear + ' - ' + (endHeaderYear);\n }\n else {\n this.calendarInstance.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n }\n this.calendarInstance.nextIconClicked = this.calendarInstance.previousIconClicked = false;\n var year = (parseInt(startHdrYr, 10) - 2).toString();\n startFullYr = Math.round(parseInt(startHdrYr, 10) * 0.97 + 622);\n endFullYr = Math.round(parseInt(endHdrYr, 10) * 0.97 + 622);\n var startYear = Math.round(parseInt(year, 10) * 0.97 + 622);\n for (var rowCount = 1; rowCount <= yearCell; ++rowCount) {\n var year_1 = startYear + rowCount;\n localDate.setFullYear(year_1);\n localDate.setDate(1);\n localDate.setMonth(0);\n if ((this.getIslamicDate(localDate).year - islamicDate.year) > 1) {\n localDate.setMonth(1);\n rowCount = rowCount - 1;\n localDate.setFullYear(localDate.getFullYear() - 1);\n }\n islamicDate = this.getIslamicDate(localDate);\n var gregorianObject_2 = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject_2;\n if (islamicDate.year === parseInt(startHdrYr, 10) - 1 || islamicDate.year >= startHdrYr &&\n islamicDate.year <= endFullYr || islamicDate.year === parseInt(endHdrYr, 10) + 1) {\n var tdEle = this.islamicDayCell(localDate);\n attributes(tdEle, { 'role': 'gridcell' });\n var dayLink = this.calendarInstance.createElement('span');\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n if (islamicDate.year === parseInt(startHdrYr, 10) - 1 || (year_1 < startFullYr) ||\n (year_1 > endFullYr) && islamicDate.year !== parseInt(endHdrYr, 10)) {\n addClass([tdEle], OTHERMONTH);\n }\n else if (year_1 < new Date(this.islamicInValue(this.calendarInstance.min)).getFullYear()\n || year_1 > new Date(this.islamicInValue(this.calendarInstance.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) &&\n (this.getIslamicDate(localDate)).year ===\n (this.getIslamicDate(value)).year) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.calendarInstance.currentDate.getFullYear() &&\n !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n tdEle.appendChild(dayLink);\n if ((!isNullOrUndefined(e) && e.action === 'home' && islamicDate.year.toString() === startHdrYr) || (!isNullOrUndefined(e) && e.action === 'end' && islamicDate.year.toString() === endHdrYr)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n tdEles.push(tdEle);\n }\n }\n this.islamicRenderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n Islamic.prototype.islamicDayCell = function (localDate) {\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: 'islamic' };\n var formatDate = this.calendarInstance.globalize.formatDate(localDate, dateFormatOptions);\n var date = this.calendarInstance.globalize.parseDate(formatDate, dateFormatOptions);\n var value = date.valueOf();\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false', 'role': 'gridcell' }\n };\n return this.calendarInstance.createElement('td', attrs);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Islamic.prototype.islamicRenderTemplate = function (elements, count, classNm, e, value) {\n var view = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n var trEle;\n this.calendarInstance.tableBodyElement = this.calendarInstance.createElement('tbody');\n this.calendarInstance.table.appendChild(this.calendarInstance.tableBodyElement);\n removeClass([this.calendarInstance.contentElement, this.calendarInstance.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.calendarInstance.contentElement, this.calendarInstance.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowCount = 0;\n for (var dayCell = 0; dayCell < Math.round(elements.length / count); ++dayCell) {\n trEle = this.calendarInstance.createElement('tr', { attrs: { 'role': 'row' } });\n for (rowCount = 0 + rowCount; rowCount < row; rowCount++) {\n if (!elements[rowCount].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowCount].children[0])) {\n addClass([elements[rowCount].children[0]], [LINK]);\n rippleEffect(elements[rowCount].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowCount]);\n if (this.calendarInstance.weekNumber &&\n rowCount === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.calendarInstance.weekNumber\n && rowCount === otherMonthCell && elements[otherMonthCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.calendarInstance.weekNumber) {\n if (rowCount === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowCount === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowCount = rowCount + 0;\n this.calendarInstance.tableBodyElement.appendChild(trEle);\n }\n this.calendarInstance.table.querySelector('tbody').className = this.calendarInstance.effect;\n this.islamicIconHandler();\n if (view !== this.calendarInstance.getViewNumber(this.calendarInstance.currentView())\n || (view === 0 && view !== this.calendarInstance.getViewNumber(this.calendarInstance.currentView()))) {\n this.calendarInstance.navigateHandler(e);\n }\n this.calendarInstance.setAriaActiveDescendant();\n this.calendarInstance.changedArgs = { value: this.calendarInstance.value, values: this.calendarInstance.values };\n this.calendarInstance.changeHandler();\n };\n Islamic.prototype.islamicCompareMonth = function (start, end) {\n var hijriStart = (this.getIslamicDate(start));\n var hijriEnd = (this.getIslamicDate(end));\n var result;\n if (hijriStart.year > hijriEnd.year) {\n result = 1;\n }\n else if (hijriStart.year < hijriEnd.year) {\n result = -1;\n }\n else {\n result = hijriStart.month === hijriEnd.month ? 0 : hijriStart.month > hijriEnd.month ? 1 : -1;\n }\n return result;\n };\n Islamic.prototype.islamicCompare = function (startDate, endDate, modifier) {\n var hijriStart = this.getIslamicDate(startDate);\n var hijriEnd = this.getIslamicDate(endDate);\n var start = hijriEnd.year;\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (hijriStart.year > end) {\n result = 1;\n }\n else if ((this.calendarInstance.currentView() === 'Decade') && hijriStart.year < start &&\n !((startDate.getFullYear() >= minDecade && startDate.getFullYear() <= maxDecade))) {\n result = -1;\n }\n else if (hijriStart.year < start && (this.calendarInstance.currentView() === 'Year')) {\n result = -1;\n }\n return result;\n };\n Islamic.prototype.getIslamicDate = function (date) {\n return (HijriParser.getHijriDate(date));\n };\n Islamic.prototype.toGregorian = function (year, month, date) {\n return HijriParser.toGregorian(year, month, date);\n };\n Islamic.prototype.hijriCompareYear = function (start, end) {\n return this.islamicCompare(start, end, 0);\n };\n Islamic.prototype.hijriCompareDecade = function (start, end) {\n return this.islamicCompare(start, end, 10);\n };\n Islamic.prototype.destroy = function () {\n this.calendarInstance = null;\n };\n Islamic.prototype.islamicInValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n return Islamic;\n}());\nexport { Islamic };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path='../calendar/calendar-model.d.ts'/>\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, extend, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { detach, addClass, removeClass, closest, attributes, Touch } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar CLEARICON = 'e-clear-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar OFFSETVALUE = 4;\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar NONEDIT = 'e-non-edit';\nvar containerAttr = ['title', 'class', 'style'];\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * <input id='datepicker'/>\n * ```\n * ```typescript\n * <script>\n * let datePickerObject:DatePicker = new DatePicker({ value: new Date() });\n * datePickerObject.appendTo('#datepicker');\n * </script>\n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {DatePickerModel} options - Specifies the DatePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isDateIconClicked = false;\n _this.isAltKeyPressed = false;\n _this.isInteracted = true;\n _this.invalidValueString = null;\n _this.checkPreviousValue = null;\n _this.maskedDateValue = '';\n _this.isAngular = false;\n _this.preventChange = false;\n _this.isIconClicked = false;\n _this.isDynamicValueChanged = false;\n _this.moduleName = _this.getModuleName();\n _this.isFocused = false;\n _this.isBlur = false;\n _this.isKeyAction = false;\n _this.datepickerOptions = options;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n this.setTimeZone(this.serverTimezoneOffset);\n };\n DatePicker.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = offsetValue;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n this.updateInput();\n }\n };\n DatePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n DatePicker.prototype.setAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.updateIconState();\n };\n DatePicker.prototype.updateIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n else {\n addClass([this.inputWrapper.container], [NONEDIT]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n };\n DatePicker.prototype.initialize = function () {\n this.checkInvalidValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.createInput();\n this.updateHtmlAttributeToWrapper();\n this.setAllowEdit();\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInput(true);\n this.updateInputValue(this.maskedDateValue);\n }\n else if (!this.enableMask) {\n this.updateInput(true);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNullOrUndefined(this.value) ? new Date(+this.value) : null;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputValueCopy = this.value;\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-expanded': 'false',\n 'role': 'combobox', 'autocomplete': 'off', 'autocorrect': 'off',\n 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-invalid': 'false', 'aria-label': this.getModuleName()\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: this.placeholder };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (this.fullScreenMode && Browser.isDevice) {\n this.cssClass += ' ' + \"e-popup-expand\";\n }\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n var isBindClearAction = this.enableMask ? false : true;\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n bindClearAction: isBindClearAction,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n }, this.createElement);\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n Input.addAttributes({ 'aria-label': 'select', 'role': 'button' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function (isDynamic, isBlur) {\n if (isDynamic === void 0) { isDynamic = false; }\n if (isBlur === void 0) { isBlur = false; }\n var formatOptions;\n if (this.value && !this.isCalendar()) {\n this.disabledDates(isDynamic, isBlur);\n }\n if (isNaN(+new Date(this.checkValue(this.value)))) {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.validateDate.call(this);\n this.minMaxUpdates();\n _super.prototype.minMaxUpdate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateString = this.globalize.formatDate(this.value, formatOptions);\n }\n if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n this.updateInputValue(dateString);\n }\n else {\n var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n if (!this.strictMode && value) {\n this.updateInputValue(dateString);\n }\n }\n }\n if (isNullOrUndefined(this.value) && this.strictMode) {\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n else {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.updateInputValue(this.invalidValueString);\n }\n this.changedArgs = { value: this.value };\n this.errorClass();\n this.updateIconState();\n };\n DatePicker.prototype.minMaxUpdates = function () {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n };\n DatePicker.prototype.checkStringValue = function (val) {\n var returnDate = null;\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatOptions));\n if (isNullOrUndefined(returnDate) && (this.getModuleName() === 'datetimepicker')) {\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatDateTime));\n }\n return returnDate;\n };\n DatePicker.prototype.checkInvalidValue = function (value) {\n if (!(value instanceof Date) && !isNullOrUndefined(value)) {\n var valueDate = null;\n var valueString = value;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n var invalid = false;\n if (typeof valueString !== 'string') {\n valueString = null;\n invalid = true;\n }\n else {\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n valueDate = this.checkStringValue(valueString);\n if (!valueDate) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || (/^[a-zA-Z0-9- ]*$/).test(valueString) || isNaN(+new Date(this.checkValue(valueString)))) {\n invalid = true;\n }\n else {\n valueDate = new Date(valueString);\n }\n }\n }\n if (invalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n }\n else {\n this.setProperties({ value: valueDate }, true);\n }\n }\n };\n DatePicker.prototype.bindInputEvent = function () {\n if (!isNullOrUndefined(this.formatString) || this.enableMask) {\n if (this.enableMask || this.formatString.indexOf('y') === -1) {\n EventHandler.add(this.inputElement, 'input', this.inputHandler, this);\n }\n else {\n EventHandler.remove(this.inputElement, 'input', this.inputHandler);\n }\n }\n };\n DatePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'keyup', this.keyupHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n this.bindInputEvent();\n // To prevent the twice triggering.\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.resetFormHandler, this);\n }\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DatePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Home':\n case 'End':\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n if (e.code !== 'Delete') {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n DatePicker.prototype.unBindEvents = function () {\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dateIconHandler);\n }\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'keyup', this.keyupHandler);\n if (this.enableMask) {\n EventHandler.remove(this.inputElement, 'keydown', this.keydownHandler);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n };\n DatePicker.prototype.resetFormHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var value = this.inputElement.getAttribute('value');\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n value = '';\n this.inputValueCopy = null;\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: this.inputValueCopy }, true);\n this.restoreValue();\n if (this.inputElement) {\n this.updateInputValue(value);\n this.errorClass();\n }\n }\n };\n DatePicker.prototype.restoreValue = function () {\n this.currentDate = this.value ? this.value : new Date();\n this.previousDate = this.value;\n this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.globalize.formatDate(this.inputValueCopy, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n });\n };\n DatePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.mouseUpHandler = function (e) {\n if (this.enableMask) {\n e.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n var clearedArgs = {\n event: event\n };\n this.trigger('cleared', clearedArgs);\n this.invalidValueString = '';\n this.updateInput();\n this.popupUpdate();\n this.changeEvent(event);\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n DatePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.interopAdaptor.invokeMethodAsync('OnDateIconClick');\n };\n DatePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n this.inputElement.blur();\n }\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.isDateIconClicked = true;\n this.show(null, e);\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n this.isIconClicked = false;\n };\n DatePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (!isNullOrUndefined(this.htmlAttributes[\"\" + key])) {\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.inputWrapper.container.getAttribute(key);\n if (!isNullOrUndefined(setStyle)) {\n if (setStyle.charAt(setStyle.length - 1) === ';') {\n setStyle = setStyle + this.htmlAttributes[\"\" + key];\n }\n else {\n setStyle = setStyle + ';' + this.htmlAttributes[\"\" + key];\n }\n }\n else {\n setStyle = this.htmlAttributes[\"\" + key];\n }\n this.inputWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n }\n };\n DatePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n DatePicker.prototype.updateCssClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newCssClass, [this.inputWrapper.container], oldCssClass);\n if (this.popupWrapper) {\n Input.setCssClass(newCssClass, [this.popupWrapper], oldCssClass);\n }\n };\n DatePicker.prototype.calendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show(null, e);\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n this.isFocused = true;\n if (!this.enabled) {\n return;\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n var focusArguments = {\n model: this\n };\n this.isDateIconClicked = false;\n this.trigger('focus', focusArguments);\n this.updateIconState();\n if (this.openOnFocus && !this.isIconClicked) {\n this.show();\n }\n };\n DatePicker.prototype.inputHandler = function () {\n this.isPopupClicked = false;\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.strictModeUpdate();\n if (this.inputElement.value === '' && isNullOrUndefined(this.value)) {\n this.invalidValueString = null;\n this.updateInputValue('');\n }\n this.isBlur = true;\n this.updateInput(false, true);\n this.isBlur = false;\n this.popupUpdate();\n this.changeTrigger(e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.getModuleName() === 'datepicker') {\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n if (this.isCalendar()) {\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.calendarKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n this.isPopupClicked = false;\n };\n DatePicker.prototype.documentHandler = function (e) {\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(e.target) && e.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(e.target)))) && e.type !== 'touchstart') {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper')) && !isNullOrUndefined(this.inputWrapper)\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))\n && (!target.classList.contains('e-dlg-overlay'))) {\n this.hide(e);\n this.focusOut();\n }\n else if (closest(target, '.e-datepicker.e-popup-wrapper')) {\n // Fix for close the popup when select the previously selected value.\n if (target.classList.contains('e-day')\n && !isNullOrUndefined(e.target.parentElement)\n && e.target.parentElement.classList.contains('e-selected')\n && closest(target, '.e-content')\n && closest(target, '.e-content').classList.contains('e-' + this.depth.toLowerCase())) {\n this.hide(e);\n }\n else if (closest(target, '.e-footer-container')\n && target.classList.contains('e-today')\n && target.classList.contains('e-btn')\n && (+new Date(+this.value) === +_super.prototype.generateTodayVal.call(this, this.value))) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n var clickedView = this.currentView();\n switch (e.action) {\n case 'altUpArrow':\n this.isAltKeyPressed = false;\n this.hide(e);\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.isAltKeyPressed = true;\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n if (this.getModuleName() === 'datepicker') {\n this.show(null, e);\n }\n break;\n case 'escape':\n this.hide(e);\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.isCalendar()) {\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'tab':\n case 'shiftTab':\n {\n var start = this.inputElement.selectionStart;\n var end = this.inputElement.selectionEnd;\n if (this.enableMask && !this.popupObj && !this.readonly) {\n var length_1 = this.inputElement.value.length;\n if ((start === 0 && end === length_1) || (end !== length_1 && e.action === 'tab') || (start !== 0 && e.action === 'shiftTab')) {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n start = this.inputElement.selectionStart;\n end = this.inputElement.selectionEnd;\n }\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (this.enableMask) {\n this.inputElement.selectionStart = start;\n this.inputElement.selectionEnd = end;\n }\n if (e.action === 'tab' && e.target === this.inputElement && this.isCalendar() && document.activeElement === this.inputElement) {\n e.preventDefault();\n this.headerTitleElement.focus();\n }\n if (e.action === 'shiftTab' && e.target === this.inputElement && this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n break;\n }\n default:\n this.defaultAction(e);\n // Fix for close the popup when select the previously selected value.\n if (e.action === 'select' && clickedView === this.depth) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.defaultAction = function (e) {\n this.previousDate = ((!isNullOrUndefined(this.value) && new Date(+this.value)) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n if (this.isCalendar()) {\n attributes(this.inputElement, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n }\n }\n };\n DatePicker.prototype.popupUpdate = function () {\n if ((isNullOrUndefined(this.value)) && (!isNullOrUndefined(this.previousDate)) ||\n (((this.getModuleName() !== 'datetimepicker') && (+this.value !== +this.previousDate)) || ((this.getModuleName() === 'datetimepicker') && (+this.value !== +this.previousDateTime)))) {\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [SELECTED]);\n }\n }\n if (!isNullOrUndefined(this.value)) {\n if ((+this.value >= +this.min) && (+this.value <= +this.max)) {\n var targetdate = new Date(this.checkValue(this.value));\n _super.prototype.navigateTo.call(this, 'Month', targetdate);\n }\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n var pattern = /^y/;\n var charPattern = /[^a-zA-Z]/;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n format = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else if (!pattern.test(this.formatString) || charPattern.test(this.formatString)) {\n format = isNullOrUndefined(this.formatString) ? this.formatString : this.formatString.replace('dd', 'd');\n }\n if (!isNullOrUndefined(format)) {\n var len = format.split('M').length - 1;\n if (len < 3) {\n format = format.replace('MM', 'M');\n }\n }\n else {\n format = this.formatString;\n }\n var dateOptions;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateOptions = formatOptions;\n }\n var date;\n if (typeof this.inputElement.value === 'string') {\n this.inputElement.value = this.inputElement.value.trim();\n }\n if ((this.getModuleName() === 'datetimepicker')) {\n if (this.checkDateValue(this.globalize.parseDate(this.inputElement.value, dateOptions))) {\n var modifiedValue = this.inputElement.value.replace(/(am|pm|Am|aM|pM|Pm)/g, function (match) { return match.toLocaleUpperCase(); });\n date = this.globalize.parseDate(modifiedValue, dateOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.parseDate(this.inputElement.value, formatOptions);\n }\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n date = (!isNullOrUndefined(date) && isNaN(+date)) ? null : date;\n if (!isNullOrUndefined(this.formatString) && this.inputElement.value !== '' && this.strictMode) {\n if ((this.isPopupClicked || (!this.isPopupClicked && this.inputElement.value === this.previousElementValue))\n && this.formatString.indexOf('y') === -1) {\n date.setFullYear(this.value.getFullYear());\n }\n }\n }\n // EJ2-35061 - To prevent change event from triggering twice when using strictmode and format property\n if ((this.getModuleName() === 'datepicker') && (this.value && !isNaN(+this.value)) && date) {\n date.setHours(this.value.getHours(), this.value.getMinutes(), this.value.getSeconds(), this.value.getMilliseconds());\n }\n if (this.strictMode && date) {\n this.updateInputValue(this.globalize.formatDate(date, dateOptions));\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === (this.enableMask ? this.maskedDateValue : '')) {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = this.createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER, id: this.inputElement.id + '_options' });\n this.popupWrapper.setAttribute('aria-label', this.element.id);\n this.popupWrapper.setAttribute('role', 'dialog');\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : (this.enableRtl ? { X: 'right', Y: 'bottom' } : { X: 'left', Y: 'bottom' }),\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : (this.enableRtl ? { X: 'fit', Y: 'flip' } : { X: 'flip', Y: 'flip' }),\n open: function () {\n if (Browser.isDevice && _this.fullScreenMode) {\n _this.iconRight = parseInt(window.getComputedStyle(_this.calendarElement.querySelector('.e-header.e-month .e-prev')).marginRight, 10) > 16 ? true : false;\n _this.touchModule = new Touch(_this.calendarElement.querySelector(\".e-content.e-month\"), {\n swipe: _this.CalendarSwipeHandler.bind(_this)\n });\n EventHandler.add(_this.calendarElement.querySelector(\".e-content.e-month\"), \"touchstart\", _this.TouchStartHandler, _this);\n }\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement) {\n _this.defaultKeyConfigs = extend(_this.defaultKeyConfigs, _this.keyConfigs);\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n }\n }\n }, close: function () {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n if (_this.value) {\n _this.disabledDates();\n }\n if (_this.popupObj) {\n _this.popupObj.destroy();\n }\n _this.resetCalendar();\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.preventArgs = null;\n _this.calendarKeyboardModules = null;\n _this.setAriaAttributes();\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n this.popupObj.element.className += ' ' + this.cssClass;\n this.setAriaAttributes();\n };\n DatePicker.prototype.CalendarSwipeHandler = function (e) {\n var direction = 0;\n if (this.iconRight) {\n switch (e.swipeDirection) {\n case \"Left\":\n direction = 1;\n break;\n case \"Right\":\n direction = -1;\n break;\n default:\n break;\n }\n }\n else {\n switch (e.swipeDirection) {\n case \"Up\":\n direction = 1;\n break;\n case \"Down\":\n direction = -1;\n break;\n default:\n break;\n }\n }\n if (this.touchStart) {\n if (direction === 1) {\n this.navigateNext(e);\n }\n else if (direction === -1) {\n this.navigatePrevious(e);\n }\n this.touchStart = false;\n }\n };\n DatePicker.prototype.TouchStartHandler = function (e) {\n this.touchStart = true;\n };\n DatePicker.prototype.setAriaDisabled = function () {\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n };\n DatePicker.prototype.modelHeader = function () {\n var dateOptions;\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var yearHeading = this.createElement('h1', { className: 'e-model-year' });\n var h2 = this.createElement('div');\n var daySpan = this.createElement('span', { className: 'e-model-day' });\n var monthSpan = this.createElement('span', { className: 'e-model-month' });\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'y', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'y', skeleton: 'dateTime', calendar: 'islamic' };\n }\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'E', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'E', skeleton: 'dateTime', calendar: 'islamic' };\n }\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions) + ', ';\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime', calendar: 'islamic' };\n }\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.fullScreenMode) {\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.modelCloseHandler, this);\n var modelTodayButton = this.calendarElement.querySelector(\"button.e-today\");\n h2.classList.add(\"e-day-wrapper\");\n modelTodayButton.classList.add(\"e-outline\");\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTodayButton);\n }\n if (!this.fullScreenMode)\n modelHeader.appendChild(yearHeading);\n h2.appendChild(daySpan);\n h2.appendChild(monthSpan);\n modelHeader.appendChild(h2);\n this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n };\n DatePicker.prototype.modelCloseHandler = function (e) {\n this.hide();\n };\n DatePicker.prototype.changeTrigger = function (event) {\n if (this.inputElement.value !== this.previousElementValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n if (this.isDynamicValueChanged && this.isCalendar()) {\n this.popupUpdate();\n }\n this.changedArgs.value = this.value;\n this.changedArgs.event = event || null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNaN(+new Date(this.checkValue(this.value))) ? new Date(this.checkValue(this.value)) : null;\n this.isInteracted = true;\n }\n }\n this.isKeyAction = false;\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.keyupHandler = function (e) {\n this.isKeyAction = (this.inputElement.value !== this.previousElementValue) ? true : false;\n };\n DatePicker.prototype.changeEvent = function (event) {\n if (!this.isIconClicked && !(this.isBlur || this.isKeyAction)) {\n this.selectCalendar(event);\n }\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.event = event ? event : null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = this.isInteracted;\n if (!this.isDynamicValueChanged) {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = this.value && new Date(+this.value);\n if (!this.isDynamicValueChanged) {\n this.hide(event);\n }\n this.previousElementValue = this.inputElement.value;\n this.errorClass();\n }\n else if (event) {\n this.hide(event);\n }\n this.isKeyAction = false;\n };\n DatePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.calendarMode === 'Islamic') {\n modules.push({ args: [this], member: 'islamic', name: 'Islamic' });\n }\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else {\n tempFormat = this.formatString;\n }\n if (this.value) {\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!isNullOrUndefined(date)) {\n this.updateInputValue(date);\n if (this.enableMask) {\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n }\n };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Shows the Calendar.\n *\n * @returns {void}\n * @deprecated\n */\n DatePicker.prototype.show = function (type, e) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n var prevent_1 = true;\n var outOfRange = void 0;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +new Date(this.checkValue(this.min))\n && +this.value <= +new Date(this.checkValue(this.max)))) {\n outOfRange = new Date(this.checkValue(this.value));\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n if (Browser.isDevice) {\n this.mobilePopupWrapper = this.createElement('div', { className: 'e-datepick-mob-popup-wrap' });\n document.body.appendChild(this.mobilePopupWrapper);\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent_1 = false;\n },\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n appendTo: Browser.isDevice ? this.mobilePopupWrapper : document.body\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (prevent_1 && !_this.preventArgs.cancel) {\n addClass(_this.inputWrapper.buttons, ACTIVE);\n _this.preventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupObj.refreshPosition(_this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION\n };\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _super.prototype.setOverlayIndex.call(_this, _this.mobilePopupWrapper, _this.popupObj.element, _this.modal, Browser.isDevice);\n _this.setAriaAttributes();\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.popupObj = null;\n }\n if (!isNullOrUndefined(_this.inputElement) && _this.inputElement.value === '') {\n if (!isNullOrUndefined(_this.tableBodyElement) && _this.tableBodyElement.querySelectorAll('td.e-selected').length > 0) {\n addClass([_this.tableBodyElement.querySelector('td.e-selected')], FOCUSEDDATE);\n removeClass(_this.tableBodyElement.querySelectorAll('td.e-selected'), SELECTED);\n }\n }\n EventHandler.add(document, 'mousedown touchstart', _this.documentHandler, _this);\n });\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.mobilePopupWrapper.appendChild(dlgOverlay);\n }\n }\n };\n /**\n * Hide the Calendar.\n *\n * @returns {void}\n * @deprecated\n */\n DatePicker.prototype.hide = function (event) {\n var _this = this;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var prevent_2 = true;\n this.preventArgs = {\n preventDefault: function () {\n prevent_2 = false;\n },\n popup: this.popupObj,\n event: event || null,\n cancel: false\n };\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n var eventArgs = this.preventArgs;\n if (this.isCalendar()) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.closeEventCallback(prevent_2, eventArgs);\n });\n }\n else {\n this.closeEventCallback(prevent_2, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n DatePicker.prototype.closeEventCallback = function (prevent, eventArgs) {\n this.preventArgs = eventArgs;\n if (this.isCalendar() && (prevent && !this.preventArgs.cancel)) {\n this.popupObj.hide();\n this.isAltKeyPressed = false;\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(this.mobilePopupWrapper) && (prevent && (isNullOrUndefined(this.preventArgs) || !this.preventArgs.cancel))) {\n this.mobilePopupWrapper.remove();\n this.mobilePopupWrapper = null;\n }\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n /* eslint-disable jsdoc/require-param */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DatePicker.prototype.focusIn = function (triggerEvent) {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n /* eslint-enable jsdoc/require-param */\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DatePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.blur();\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the DatePicker.\n *\n * @returns {string}\n * @deprecated\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Navigates to specified month or year or decade view of the DatePicker.\n *\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns {void}\n * @deprecated\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DatePicker.prototype.destroy = function () {\n this.unBindEvents();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n _super.prototype.destroy.call(this);\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n if (!isNullOrUndefined(this.keyboardModules)) {\n this.keyboardModules.destroy();\n }\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-label': this.getModuleName()\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (!isNullOrUndefined(this.inputElementCopy.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n if (this.ngTag === null) {\n if (this.inputElement) {\n if (!isNullOrUndefined(this.inputWrapper)) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n }\n removeClass([this.inputElement], [INPUTROOT]);\n }\n removeClass([this.element], [ROOT]);\n if (!isNullOrUndefined(this.inputWrapper)) {\n detach(this.inputWrapper.container);\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n this.inputWrapper = null;\n this.keyboardModules = null;\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n var prop = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n prop[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < prop.length; i++) {\n if (isNullOrUndefined(this.inputElementCopy.getAttribute(prop[i]))) {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop[i]);\n }\n else {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = this.inputElementCopy.getAttribute(prop[i]);\n }\n this.inputElement.setAttribute(prop[i], this.inputElementCopy.getAttribute(prop[i]));\n }\n }\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputElementCopy = this.element.cloneNode(true);\n removeClass([this.inputElementCopy], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.formElement = closest(this.inputElement, 'form');\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n if (this.ngTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.checkHtmlAttributes(false);\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n _super.prototype.preRender.call(this);\n };\n DatePicker.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n shiftTab: 'shift+tab',\n tab: 'tab'\n };\n return this.defaultKeyConfigs;\n };\n DatePicker.prototype.validationAttribute = function (target, inputElement) {\n var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n inputElement.setAttribute('name', nameAttribute);\n target.removeAttribute('name');\n var attribute = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attribute.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n continue;\n }\n var attr = target.getAttribute(attribute[i]);\n inputElement.setAttribute(attribute[i], attr);\n target.removeAttribute(attribute[i]);\n }\n };\n DatePicker.prototype.checkFormat = function () {\n var culture = new Internationalization(this.locale);\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (this.format.skeleton !== '' && !isNullOrUndefined(this.format.skeleton)) {\n var skeletonString = this.format.skeleton;\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'dateTime' });\n }\n else {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'date' });\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = this.dateTimeFormat;\n }\n else {\n this.formatString = null;\n }\n }\n }\n else {\n this.formatString = null;\n }\n };\n DatePicker.prototype.checkHtmlAttributes = function (dynamic) {\n this.globalize = new Internationalization(this.locale);\n this.checkFormat();\n this.checkView();\n var attributes = dynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['enabled'] === undefined)) || dynamic)) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !dynamic);\n }\n break;\n case 'readonly':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['readonly'] === undefined)) || dynamic)) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !dynamic);\n }\n break;\n case 'placeholder':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['placeholder'] === undefined)) || dynamic)) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !dynamic);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['value'] === undefined)) || dynamic)) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), !dynamic);\n }\n break;\n case 'min':\n if ((+this.min === +new Date(1900, 0, 1)) || dynamic) {\n var min = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(min), {}), !dynamic);\n }\n break;\n case 'max':\n if ((+this.max === +new Date(2099, 11, 31)) || dynamic) {\n var max = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(max), {}), !dynamic);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function (isDynamic, isBlur) {\n if (isDynamic === void 0) { isDynamic = false; }\n if (isBlur === void 0) { isBlur = false; }\n var formatOptions;\n var globalize;\n var valueCopy = this.checkDateValue(this.value) ? new Date(+this.value) : new Date(this.checkValue(this.value));\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n this.minMaxUpdates();\n if (!isDynamic || (isDynamic && !isNullOrUndefined(this.renderDayCell))) {\n _super.prototype.render.call(this);\n }\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n this.setProperties({ value: valueCopy }, true);\n }\n }\n if (!isNullOrUndefined(this.calendarElement) && !isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n inputVal = globalize;\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n inputVal = this.globalize.formatDate(valueCopy, formatOptions);\n }\n if (!this.popupObj) {\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime', isBlur: isBlur\n });\n }\n }\n };\n DatePicker.prototype.setAriaAttributes = function () {\n if (this.isCalendar()) {\n Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n attributes(this.inputElement, { 'aria-owns': this.inputElement.id + '_options' });\n attributes(this.inputElement, { 'aria-controls': this.inputElement.id });\n if (this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': '' + this.setActiveDescendant() });\n }\n }\n else {\n Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-controls');\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DatePicker.prototype.errorClass = function () {\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n var isDisabledDate = this.calendarElement &&\n this.calendarElement.querySelectorAll(dateIdString)[0] &&\n this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n if ((!isNullOrUndefined(this.value) && !isNullOrUndefined(this.min) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !isNullOrUndefined(this.max) && !(new Date(this.value).setMilliseconds(0) >= new Date(this.min).setMilliseconds(0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n && new Date(this.value).setMilliseconds(0) <= new Date(this.max).setMilliseconds(0)))\n || (!this.strictMode && this.inputElement.value !== '' && this.inputElement.value !== this.maskedDateValue && isNullOrUndefined(this.value) || isDisabledDate)) {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else if (!isNullOrUndefined(this.inputWrapper)) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DatePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DatePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.isInteracted = false;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n this.previousElementValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n this.updateInputValue('');\n }\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput(true);\n if (+this.previousDate !== +this.value) {\n this.changeTrigger(null);\n }\n this.isInteracted = true;\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'format':\n this.checkFormat();\n this.bindInputEvent();\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'allowEdit':\n this.setAllowEdit();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n this.setAriaDisabled();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.datepickerOptions && this.datepickerOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n }\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'start':\n case 'depth':\n this.checkView();\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n this.index = this.showClearButton ? 2 : 1;\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n this.bindInputEvent();\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n default:\n if (this.calendarElement && this.isCalendar()) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property({})\n ], DatePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DatePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path='../calendar/calendar-model.d.ts'/>\nimport { Property, EventHandler, Internationalization, NotifyPropertyChanges, detach, getUniqueID } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Event, Browser, L10n, ChildProperty } from '@syncfusion/ej2-base';\nimport { addClass, createElement, remove, closest, select, prepend, removeClass, attributes, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, formatUnit, setValue, rippleEffect, merge, extend, Touch } from '@syncfusion/ej2-base';\nimport { CalendarBase } from '../calendar/calendar';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase } from '@syncfusion/ej2-lists';\nvar DATERANGEWRAPPER = 'e-date-range-wrapper';\nvar INPUTCONTAINER = 'e-input-group';\nvar DATERANGEICON = 'e-input-group-icon e-range-icon e-icons';\nvar POPUP = 'e-popup';\nvar LEFTCALENDER = 'e-left-calendar';\nvar RIGHTCALENDER = 'e-right-calendar';\nvar LEFTCONTAINER = 'e-left-container';\nvar RIGHTCONTAINER = 'e-right-container';\nvar ROOT = 'e-daterangepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar STARTENDCONTAINER = 'e-start-end';\nvar STARTDATE = 'e-start-date';\nvar ENDDATE = 'e-end-date';\nvar STARTBUTTON = 'e-start-btn';\nvar INPUTFOCUS = 'e-input-focus';\nvar ENDBUTTON = 'e-end-btn';\nvar RANGEHOVER = 'e-range-hover';\nvar OTHERMONTH = 'e-other-month';\nvar STARTLABEL = 'e-start-label';\nvar ENDLABEL = 'e-end-label';\nvar DISABLED = 'e-disabled';\nvar SELECTED = 'e-selected';\nvar CALENDAR = 'e-calendar';\nvar NEXTICON = 'e-next';\nvar PREVICON = 'e-prev';\nvar HEADER = 'e-header';\nvar TITLE = 'e-title';\nvar ICONCONTAINER = 'e-icon-container';\nvar RANGECONTAINER = 'e-date-range-container';\nvar RANGEHEADER = 'e-range-header';\nvar PRESETS = 'e-presets';\nvar FOOTER = 'e-footer';\nvar RANGEBORDER = 'e-range-border';\nvar TODAY = 'e-today';\nvar FOCUSDATE = 'e-focused-date';\nvar CONTENT = 'e-content';\nvar DAYSPAN = 'e-day-span';\nvar WEEKNUMBER = 'e-week-number';\nvar DATEDISABLED = 'e-date-disabled';\nvar ICONDISABLED = 'e-icon-disabled';\nvar CALENDARCONTAINER = 'e-calendar-container';\nvar SEPARATOR = 'e-separator';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar DEVICE = 'e-device';\nvar OVERLAY = 'e-overlay';\nvar CHANGEICON = 'e-change-icon e-icons';\nvar LISTCLASS = 'e-list-item';\nvar RTL = 'e-rtl';\nvar HOVER = 'e-hover';\nvar OVERFLOW = 'e-range-overflow';\nvar OFFSETVALUE = 4;\nvar PRIMARY = 'e-primary';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar ZOOMIN = 'e-zoomin';\nvar NONEDITABLE = 'e-non-edit';\nvar DAYHEADERLONG = 'e-daterange-day-header-lg';\nvar HIDDENELEMENT = 'e-daterange-hidden';\nvar wrapperAttr = ['title', 'class', 'style'];\nvar Presets = /** @class */ (function (_super) {\n __extends(Presets, _super);\n function Presets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Presets.prototype, \"label\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"start\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"end\", void 0);\n return Presets;\n}(ChildProperty));\nexport { Presets };\n/**\n * Represents the DateRangePicker component that allows user to select the date range from the calendar\n * or entering the range through the input element.\n * ```html\n * <input id=\"daterangepicker\"/>\n * ```\n * ```typescript\n * <script>\n * var dateRangePickerObj = new DateRangePicker({ startDate: new Date(\"05/07/2017\"), endDate: new Date(\"10/07/2017\") });\n * dateRangePickerObj.appendTo(\"#daterangepicker\");\n * </script>\n * ```\n */\nvar DateRangePicker = /** @class */ (function (_super) {\n __extends(DateRangePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DateRangePickerModel} options - Specifies the DateRangePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DateRangePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isCustomRange = false;\n _this.isCustomWindow = false;\n _this.presetsItem = [];\n _this.liCollections = [];\n _this.previousEleValue = '';\n _this.isKeyPopup = false;\n _this.dateDisabled = false;\n _this.isRangeIconClicked = false;\n _this.isMaxDaysClicked = false;\n _this.disabledDays = [];\n _this.preventBlur = false;\n _this.preventFocus = false;\n _this.invalidValueString = null;\n _this.isAngular = false;\n _this.preventChange = false;\n _this.dateRangeOptions = options;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DateRangePicker.prototype.render = function () {\n this.initialize();\n this.setProperties({ startDate: this.startValue }, true);\n this.setProperties({ endDate: this.endValue }, true);\n this.setModelValue();\n this.setDataAttribute(false);\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n DateRangePicker.prototype.preRender = function () {\n this.keyInputConfigs = {\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n tab: 'tab',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n spacebar: 'space'\n };\n this.defaultConstant = {\n placeholder: this.placeholder,\n startLabel: 'Start Date',\n endLabel: 'End Date',\n customRange: 'Custom Range',\n applyText: 'Apply',\n cancelText: 'Cancel',\n selectedDays: 'Selected Days',\n days: 'days'\n };\n /**\n * Mobile View\n */\n this.isMobile = (Browser.isDevice) ? true : window.matchMedia('(max-width:550px)').matches;\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [ROOT, CONTROL, LIBRARY]);\n this.updateHtmlAttributeToElement();\n if (this.element.getAttribute('id')) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n this.checkInvalidRange(this.value);\n if (!this.invalidValueString && (typeof (this.value) === 'string')) {\n var rangeArray = this.value.split(' ' + this.separator + ' ');\n this.value = [new Date(rangeArray[0]), new Date(rangeArray[1])];\n }\n this.initProperty();\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n _super.prototype.preRender.call(this);\n this.navNextFunction = this.navNextMonth.bind(this);\n this.navPrevFunction = this.navPrevMonth.bind(this);\n this.deviceNavNextFunction = this.deviceNavNext.bind(this);\n this.deviceNavPrevFunction = this.deviceNavPrevious.bind(this);\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n this.formElement = closest(this.element, 'form');\n };\n DateRangePicker.prototype.updateValue = function () {\n if (this.value && this.value.length > 0) {\n if (this.value[0] instanceof Date && !isNaN(+this.value[0])) {\n this.setProperties({ startDate: this.value[0] }, true);\n this.startValue = this.value[0];\n }\n else if (typeof this.value[0] === 'string') {\n if (+this.value[0] === 0 || isNaN(+(new Date(this.checkValue(this.value[0]))))) {\n this.startValue = null;\n this.setValue();\n }\n else {\n this.setProperties({ startDate: new Date(this.checkValue(this.value[0])) }, true);\n this.startValue = new Date(this.checkValue(this.value[0]));\n }\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value[1] instanceof Date && !isNaN(+this.value[1])) {\n this.setProperties({ endDate: this.value[1] }, true);\n this.endValue = this.value[1];\n }\n else if (typeof this.value[1] === 'string') {\n if (+this.value[0] === 0 || isNaN(+(new Date(this.checkValue(this.value[0]))))) {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n else {\n this.setProperties({ endDate: new Date(this.checkValue(this.value[1])) }, true);\n this.endValue = new Date(this.checkValue(this.value[1]));\n this.setValue();\n }\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (this.value && this.value.start) {\n if (this.value.start instanceof Date && !isNaN(+this.value.start)) {\n this.setProperties({ startDate: this.value.start }, true);\n this.startValue = this.value.start;\n }\n else if (typeof this.value.start === 'string') {\n this.setProperties({ startDate: new Date(this.checkValue(this.value.start)) }, true);\n this.startValue = new Date(this.checkValue(this.value.start));\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value.end instanceof Date && !isNaN(+this.value.end)) {\n this.setProperties({ endDate: this.value.end }, true);\n this.endValue = this.value.end;\n }\n else if (typeof this.value.end === 'string') {\n this.setProperties({ endDate: new Date(this.checkValue(this.value.end)) }, true);\n this.endValue = new Date(this.checkValue(this.value.end));\n this.setValue();\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (isNullOrUndefined(this.value)) {\n this.endValue = this.checkDateValue(new Date(this.checkValue(this.endDate)));\n this.startValue = this.checkDateValue(new Date(this.checkValue(this.startDate)));\n this.setValue();\n }\n };\n DateRangePicker.prototype.initProperty = function () {\n this.globalize = new Internationalization(this.locale);\n this.checkFormat();\n this.checkView();\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.updateValue();\n };\n DateRangePicker.prototype.checkFormat = function () {\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (this.format.skeleton !== '' && !isNullOrUndefined(this.format.skeleton)) {\n var skeletonString = this.format.skeleton;\n this.formatString = this.globalize.getDatePattern({ skeleton: skeletonString, type: 'date' });\n }\n else {\n this.formatString = null;\n }\n }\n else {\n this.formatString = null;\n }\n };\n DateRangePicker.prototype.initialize = function () {\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes(false);\n merge(this.defaultKeyConfigs, { shiftTab: 'shift+tab', tab: 'tab' });\n var start = this.checkDateValue(new Date(this.checkValue(this.startValue)));\n this.setProperties({ startDate: start }, true); // persist the value propeerty.\n this.setProperties({ endValue: this.checkDateValue(new Date(this.checkValue(this.endValue))) }, true);\n this.setValue();\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(this.max))) }, true);\n this.l10n = new L10n('daterangepicker', this.defaultConstant, this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.processPresets();\n this.createInput();\n this.updateHtmlAttributeToWrapper();\n this.setRangeAllowEdit();\n this.bindEvents();\n };\n DateRangePicker.prototype.setDataAttribute = function (isDynamic) {\n var attributes = {};\n if (!isDynamic) {\n for (var i = 0; i < this.element.attributes.length; i++) {\n attributes[this.element.attributes[i].name] =\n this.element.getAttribute(this.element.attributes[i].name);\n }\n }\n else {\n attributes = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (pro.indexOf('data') === 0) {\n this.firstHiddenChild.setAttribute(pro, attributes[\"\" + pro]);\n this.secondHiddenChild.setAttribute(pro, attributes[\"\" + pro]);\n }\n }\n };\n DateRangePicker.prototype.setRangeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.updateClearIconState();\n };\n DateRangePicker.prototype.updateClearIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [NONEDITABLE]);\n }\n else {\n addClass([this.inputWrapper.container], [NONEDITABLE]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [NONEDITABLE]);\n }\n };\n DateRangePicker.prototype.validationAttribute = function (element, input) {\n var name = element.getAttribute('name') ? element.getAttribute('name') : element.getAttribute('id');\n input.setAttribute('name', name);\n element.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(element.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = element.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n element.removeAttribute(attributes[i]);\n }\n };\n DateRangePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValue = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValue !== '') {\n addClass([this.inputWrapper.container], updatedClassValue.split(' '));\n }\n }\n else if (key === 'style') {\n var dateRangeStyle = this.inputWrapper.container.getAttribute(key);\n dateRangeStyle = !isNullOrUndefined(dateRangeStyle) ? (dateRangeStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputWrapper.container.setAttribute(key, dateRangeStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n DateRangePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n DateRangePicker.prototype.updateCssClass = function (cssNewClass, cssOldClass) {\n if (!isNullOrUndefined(cssOldClass)) {\n cssOldClass = (cssOldClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(cssNewClass)) {\n cssNewClass = (cssNewClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(cssNewClass, [this.inputWrapper.container], cssOldClass);\n if (this.popupWrapper) {\n Input.setCssClass(cssNewClass, [this.popupWrapper], cssOldClass);\n }\n };\n DateRangePicker.prototype.processPresets = function () {\n this.presetsItem = [];\n var i = 0;\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {\n var range = _a[_i];\n var id = range.label.replace(/\\s+/g, '') + '_' + (++i);\n if (typeof range.end === 'string') {\n this.presetsItem.push({\n id: id, text: range.label, end: new Date(this.checkValue(range.end)), start: new Date(this.checkValue(range.start))\n });\n }\n else {\n this.presetsItem.push({ id: id, text: range.label, start: range.start, end: range.end });\n }\n }\n var startDate = isNullOrUndefined(this.startValue) ? null : new Date(+this.startValue);\n var endDate = isNullOrUndefined(this.endValue) ? null : new Date(+this.endValue);\n this.presetsItem.push({ id: 'custom_range', text: this.l10n.getConstant('customRange'), start: startDate, end: endDate });\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.isCustomRange = true;\n this.activeIndex = this.presetsItem.length - 1;\n }\n }\n };\n DateRangePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n if (!this.isMobile) {\n this.keyInputConfigs = extend(this.keyInputConfigs, this.keyConfigs);\n this.inputKeyboardModule = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputHandler.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n if (this.enabled) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.tabIndex = -1;\n }\n };\n DateRangePicker.prototype.unBindEvents = function () {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.inputKeyboardModule)) {\n this.inputKeyboardModule.destroy();\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n this.inputElement.tabIndex = -1;\n };\n DateRangePicker.prototype.updateHiddenInput = function () {\n if (this.firstHiddenChild && this.secondHiddenChild) {\n var format = { format: this.formatString, type: 'datetime', skeleton: 'yMd' };\n if (typeof this.startDate === 'string') {\n this.startDate = this.globalize.parseDate(this.startDate, format);\n }\n if (typeof this.endDate === 'string') {\n this.endDate = this.globalize.parseDate(this.endDate, format);\n }\n this.firstHiddenChild.value = (this.startDate && this.globalize.formatDate(this.startDate, format))\n || (this.inputElement.value);\n this.secondHiddenChild.value = (this.endDate && this.globalize.formatDate(this.endDate, format)) ||\n (this.inputElement.value);\n this.dispatchEvent(this.firstHiddenChild, 'focusout');\n this.dispatchEvent(this.firstHiddenChild, 'change');\n }\n };\n DateRangePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DateRangePicker.prototype.resetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.valueType = this.value;\n e.preventDefault();\n this.clear();\n var clearedArgs = {\n event: e\n };\n this.setProperties({ endDate: this.checkDateValue(this.endValue) }, true);\n this.setProperties({ startDate: this.checkDateValue(this.startValue) }, true);\n this.trigger('cleared', clearedArgs);\n this.changeTrigger(e);\n this.clearRange();\n this.hide(e);\n if (closest(this.element, 'form')) {\n var element = this.firstHiddenChild;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n DateRangePicker.prototype.restoreValue = function () {\n this.previousEleValue = this.inputElement.value;\n this.previousStartValue = this.startValue;\n this.previousEndValue = this.endValue;\n this.valueType = null;\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n this.setValue();\n this.setModelValue();\n };\n DateRangePicker.prototype.formResetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.formElement && (e.target === this.formElement) && !this.inputElement.disabled) {\n var val = this.inputElement.getAttribute('value');\n if (!isNullOrUndefined(this.startCopy)) {\n if (!isNullOrUndefined(this.value) && !isNullOrUndefined(this.value.start)) {\n this.setProperties({ value: { start: this.startCopy, end: this.endCopy } }, true);\n this.startValue = this.value.start;\n this.endValue = this.value.end;\n }\n else {\n this.setProperties({ value: [this.startCopy, this.endCopy] }, true);\n this.startValue = this.value[0];\n this.endValue = this.value[1];\n }\n this.setProperties({ startDate: this.startValue, endDate: this.endValue }, true);\n }\n else {\n this.setProperties({ value: null, startDate: null, endDate: null }, true);\n this.startValue = this.endValue = null;\n }\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.setProperties({ value: null, startDate: null, endDate: null }, true);\n val = '';\n this.startValue = this.endValue = null;\n this.inputElement.setAttribute('value', '');\n }\n this.restoreValue();\n if (this.inputElement) {\n Input.setValue(val, this.inputElement, this.floatLabelType, this.showClearButton);\n this.errorClass();\n }\n }\n };\n DateRangePicker.prototype.clear = function () {\n if (this.startValue !== null) {\n this.startValue = null;\n }\n if (this.endValue !== null) {\n this.endValue = null;\n }\n if (this.value && this.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n if (this.value !== null && this.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n if (!(isNullOrUndefined(this.applyButton))) {\n this.applyButton.disabled = this.applyButton.element.disabled = true;\n }\n this.removeSelection();\n };\n DateRangePicker.prototype.rangeIconHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.isMobile) {\n this.inputElement.setAttribute('readonly', '');\n }\n e.preventDefault();\n this.targetElement = null;\n if (this.isPopupOpen() && document.body.contains(this.popupObj.element)) {\n this.applyFunction(e);\n }\n else {\n this.isRangeIconClicked = true;\n this.inputWrapper.container.children[0].focus();\n this.show(null, e);\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.isRangeIconClicked = false;\n this.calendarFocus();\n this.isRangeIconClicked = true;\n }\n }\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateRangePicker.prototype.checkHtmlAttributes = function (isDynamic) {\n this.globalize = new Internationalization(this.locale);\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['startDate', 'endDate', 'minDays', 'maxDays', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder',\n 'type', 'value'];\n var format = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['enabled'] === undefined)) || isDynamic) {\n var disabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ enabled: !disabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === 'true' || this.inputElement.getAttribute(prop) === '' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['value'] === undefined)) || isDynamic) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, value, {}), !isDynamic);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'min':\n if ((isNullOrUndefined(this.min) || +this.min === +new Date(1900, 0, 1)) || isDynamic) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), !isDynamic);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'max':\n if ((isNullOrUndefined(this.max) || +this.max === +new Date(2099, 11, 31)) || isDynamic) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), !isDynamic);\n }\n break;\n case 'startDate':\n if (isNullOrUndefined(this.startDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.startValue = dateValue;\n this.setValue();\n }\n break;\n case 'endDate':\n if (isNullOrUndefined(this.endDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.endValue = dateValue;\n this.setValue();\n }\n break;\n case 'minDays':\n if (isNullOrUndefined(this.minDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'maxDays':\n if (isNullOrUndefined(this.maxDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n DateRangePicker.prototype.createPopup = function () {\n for (var i = 0; i < this.presetsItem.length; i++) {\n if ((i !== (this.presetsItem.length - 1)) && this.presetsItem[i].id === 'custom_range') {\n this.presetsItem.splice(i, 1);\n }\n }\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n for (var i = 0; i <= this.presetsItem.length - 2; i++) {\n var startDate = this.presetsItem[i].start;\n var endDate = this.presetsItem[i].end;\n if (this.startValue && this.endValue) {\n if (startDate.getDate() == this.startValue.getDate() && startDate.getMonth() == this.startValue.getMonth() && startDate.getFullYear() == this.startValue.getFullYear()\n && endDate.getDate() == this.endValue.getDate() && endDate.getMonth() == this.endValue.getMonth() && endDate.getFullYear() == this.endValue.getFullYear()) {\n this.activeIndex = i;\n this.isCustomRange = false;\n }\n }\n }\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.popupWrapper.setAttribute('aria-label', this.element.id);\n this.popupWrapper.setAttribute('role', 'dialog');\n this.adjustLongHeaderWidth();\n var isPreset = (!this.isCustomRange || this.isMobile);\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.isCustomWindow = false;\n this.createPresets();\n this.listRippleEffect();\n this.renderPopup();\n }\n else {\n this.isCustomWindow = true;\n this.renderControl();\n }\n };\n DateRangePicker.prototype.renderControl = function () {\n this.createControl();\n this.bindCalendarEvents();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) &&\n !isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n this.updateHeader();\n };\n DateRangePicker.prototype.clearCalendarEvents = function () {\n if (this.leftCalPrevIcon && this.leftCalNextIcon && this.rightCalPrevIcon && this.rightCalNextIcon) {\n EventHandler.clearEvents(this.leftCalPrevIcon);\n EventHandler.clearEvents(this.leftCalNextIcon);\n EventHandler.clearEvents(this.rightCalPrevIcon);\n EventHandler.clearEvents(this.rightCalNextIcon);\n }\n };\n DateRangePicker.prototype.updateNavIcons = function () {\n _super.prototype.iconHandler.call(this);\n };\n DateRangePicker.prototype.calendarIconEvent = function () {\n this.clearCalendarEvents();\n if (this.leftCalPrevIcon && !this.leftCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.leftCalNextIcon && !this.leftCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalNextIcon, 'mousedown', this.navNextFunction);\n }\n if (this.rightCalPrevIcon && !this.rightCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.rightCalNextIcon && !this.rightCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalNextIcon, 'mousedown', this.navNextFunction);\n }\n };\n DateRangePicker.prototype.bindCalendarEvents = function () {\n if (!this.isMobile) {\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.headerTitleElement = this.popupObj.element.querySelector('.' + RIGHTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.headerTitleElement = this.popupObj.element.querySelector('.' + LEFTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.leftKeyboardModule = new KeyboardEvents(this.leftCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n this.rightKeyboardModule = new KeyboardEvents(this.rightCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n else {\n this.deviceCalendarEvent();\n EventHandler.add(this.startButton.element, 'click', this.deviceHeaderClick, this);\n EventHandler.add(this.endButton.element, 'click', this.deviceHeaderClick, this);\n }\n if (this.start === this.depth) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.calendarIconRipple = function () {\n rippleEffect(this.leftCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.leftCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n };\n DateRangePicker.prototype.deviceCalendarEvent = function () {\n EventHandler.clearEvents(this.nextIcon);\n EventHandler.clearEvents(this.previousIcon);\n rippleEffect(this.nextIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.previousIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n if (this.nextIcon && !this.nextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.nextIcon, 'mousedown', this.deviceNavNextFunction);\n }\n if (this.previousIcon && !this.previousIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.previousIcon, 'mousedown', this.deviceNavPrevFunction);\n }\n };\n DateRangePicker.prototype.deviceNavNext = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigateNext(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.deviceNavPrevious = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigatePrevious(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.updateDeviceCalendar = function (calendar) {\n if (calendar) {\n this.previousIcon = calendar.querySelector('.' + PREVICON);\n this.nextIcon = calendar.querySelector('.' + NEXTICON);\n this.calendarElement = calendar;\n this.deviceCalendar = calendar;\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n }\n };\n DateRangePicker.prototype.deviceHeaderClick = function (event) {\n var element = event.currentTarget;\n if (element.classList.contains(STARTBUTTON) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.classList.remove(ACTIVE);\n this.startButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + STARTDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.startValue);\n remove(this.tableBodyElement);\n this.createContentBody();\n this.deviceNavigation();\n }\n this.removeClassDisabled();\n }\n else if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + ENDDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.endValue);\n remove(this.tableBodyElement);\n this.createContentBody();\n this.deviceNavigation();\n }\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n this.selectableDates();\n }\n };\n DateRangePicker.prototype.inputFocusHandler = function () {\n if (!this.enabled) {\n return;\n }\n this.preventBlur = false;\n var focusArguments = {\n model: this\n };\n if (!this.preventFocus) {\n this.trigger('focus', focusArguments);\n }\n this.updateClearIconState();\n if (this.openOnFocus && !this.preventFocus) {\n this.preventFocus = true;\n this.show();\n }\n else {\n this.preventFocus = true;\n }\n };\n DateRangePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (!this.preventBlur) {\n var value = this.inputElement.value;\n if (!isNullOrUndefined(this.presetsItem)) {\n if (this.presetsItem.length > 0 && this.previousEleValue !== this.inputElement.value) {\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n }\n }\n if (!isNullOrUndefined(value) && value.trim() !== '') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length > 1) {\n this.invalidValueString = null;\n var dateOptions = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n var start = this.globalize.parseDate(range[0], dateOptions);\n var end = this.globalize.parseDate(range[1], dateOptions);\n var startDate = this.getStartEndDate(start, false, range, dateOptions);\n var endDate = this.getStartEndDate(end, true, range, dateOptions);\n if (!isNullOrUndefined(startDate) && !isNaN(+startDate) && !isNullOrUndefined(endDate) && !isNaN(+endDate)) {\n var prevStartVal = this.startValue;\n this.startValue = startDate;\n var prevEndVal = this.endValue;\n this.endValue = endDate;\n this.setValue();\n this.refreshControl();\n if (value !== this.previousEleValue) {\n this.changeTrigger(e);\n }\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n this.updateHiddenInput();\n // For Mobile mode, when a value is present and choose another range and click on console\n // when popup is open, two startvalues and end values are updated in the popup.\n if (this.isMobile && this.isPopupOpen()) {\n this.startValue = prevStartVal;\n this.endValue = prevEndVal;\n }\n return;\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n if (!this.strictMode) {\n if (isNullOrUndefined(this.popupObj)) {\n this.currentDate = null;\n }\n this.previousStartValue = this.previousEndValue = null;\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(value) && value.trim() === '') {\n this.startValue = null;\n this.endValue = null;\n }\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n }\n this.errorClass();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n }\n this.updateHiddenInput();\n };\n // eslint-disable-next-line @typescript-eslint/tslint/config\n DateRangePicker.prototype.getStartEndDate = function (date, isEnd, range, dateOptions) {\n if (this.depth === 'Month') {\n return this.globalize.parseDate(range[isEnd ? 1 : 0].trim(), dateOptions);\n }\n else if (this.depth === 'Year') {\n return new Date(date.getFullYear(), date.getMonth() + (isEnd ? 1 : 0), isEnd ? 0 : 1);\n }\n else {\n return new Date(date.getFullYear(), isEnd ? 11 : 0, isEnd ? 31 : 1);\n }\n };\n DateRangePicker.prototype.clearRange = function () {\n this.previousStartValue = this.previousEndValue = null;\n this.currentDate = null;\n };\n DateRangePicker.prototype.errorClass = function () {\n var inputStr = this.inputElement.value.trim();\n if (((isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue) && inputStr !== '') ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max))\n || ((this.startValue && this.isDateDisabled(this.startValue))\n || (this.endValue && this.isDateDisabled(this.endValue)))) && inputStr !== '') {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else {\n if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n }\n };\n DateRangePicker.prototype.keyCalendarUpdate = function (isLeftCalendar, ele, isRemoveFocus) {\n if (isRemoveFocus === void 0) { isRemoveFocus = true; }\n if (isRemoveFocus) {\n this.removeFocusedDate();\n }\n if (isLeftCalendar) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n ele = this.leftCalendar;\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n ele = this.rightCalendar;\n }\n this.updateCalendarElement(ele);\n this.table.focus();\n return ele;\n };\n DateRangePicker.prototype.navInCalendar = function (e, isLeftCalendar, leftLimit, rightLimit, ele) {\n var view = this.getViewNumber(this.currentView());\n var date;\n var min = this.min;\n var max;\n if (!isNullOrUndefined(this.maxDays) && this.isMaxDaysClicked && !isNullOrUndefined(this.startValue)) {\n max = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n }\n else {\n max = this.max;\n }\n switch (e.action) {\n case 'moveRight':\n date = new Date(+this.currentDate);\n this.addDay(date, 1, e, max, min);\n if (isLeftCalendar && +date === +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.keyboardNavigate(1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveLeft':\n date = new Date(+this.currentDate);\n this.addDay(date, -1, e, max, min);\n if (!isLeftCalendar) {\n if (+date === +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n }\n this.keyboardNavigate(-1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveUp':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, -7, e, max, min);\n if (+date <= +leftLimit && !isLeftCalendar) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.keyboardNavigate(-7, view, e, max, min);\n }\n else {\n this.keyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n this.keyNavigation(ele, e);\n break;\n case 'moveDown':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, 7, e, max, min);\n if (isLeftCalendar && +date >= +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.keyboardNavigate(7, view, e, max, min);\n }\n else {\n this.keyboardNavigate(4, view, e, this.max, this.min);\n }\n this.keyNavigation(ele, e);\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n remove(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n this.keyNavigation(ele, e);\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n remove(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n this.keyNavigation(ele, e);\n break;\n case 'tab':\n if (this.tabKeyValidation(ele, LEFTCALENDER)) {\n ele = this.keyCalendarUpdate(false, ele, false);\n this.currentDate = this.firstCellToFocus(this.rightCalendar);\n view = this.getViewNumber(this.currentView());\n this.keyboardNavigate(0, view, e, max, min);\n this.keyNavigation(ele, e);\n }\n break;\n case 'shiftTab':\n if (this.tabKeyValidation(ele, RIGHTCALENDER)) {\n ele = this.keyCalendarUpdate(true, ele, false);\n this.currentDate = this.firstCellToFocus(this.leftCalendar);\n this.keyboardNavigate(0, view, e, max, min);\n this.keyNavigation(ele, e);\n }\n break;\n }\n };\n DateRangePicker.prototype.firstCellToFocus = function (calendar) {\n var focusAbleEle = this.getViewNumber(this.currentView()) === 2 ? calendar.children[1].firstElementChild.querySelector('td.e-cell:not(.e-week-number):not(.e-disabled):not(.e-other-year)') : calendar.children[1].firstElementChild.querySelector('td.e-cell:not(.e-week-number):not(.e-disabled):not(.e-other-month)');\n var focusEleID = focusAbleEle && focusAbleEle.id ? focusAbleEle.id.split('_')[0] : null;\n var currentFirstDay = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth(), 1);\n var focusDate = focusEleID ? new Date(+focusEleID) : currentFirstDay;\n return focusDate;\n };\n DateRangePicker.prototype.keyInputHandler = function (e, value) {\n var date;\n var view = this.getViewNumber(this.currentView());\n var rightDateLimit = new Date(this.rightCalCurrentDate.getFullYear(), this.rightCalCurrentDate.getMonth(), 1);\n var leftDateLimit = new Date(this.leftCalCurrentDate.getFullYear(), this.leftCalCurrentDate.getMonth() + 1, 0);\n var ele = closest(e.target, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n var isLeftCalendar = ele.classList.contains(LEFTCALENDER);\n this.updateCalendarElement(ele);\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n var focusedDate = ele.querySelector('tr td.' + FOCUSDATE);\n var startDate = ele.querySelector('tr td.' + STARTDATE);\n var endDate = ele.querySelector('tr td.' + ENDDATE);\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n var leftCalendar = closest(e.target, '.' + LEFTCALENDER);\n var rightCalendar = closest(e.target, '.' + RIGHTCALENDER);\n var presetElement = closest(e.target, '.' + PRESETS);\n if (!isNullOrUndefined(focusedDate)) {\n // eslint-disable-next-line no-self-assign\n this.currentDate = this.currentDate;\n }\n else if (!isNullOrUndefined(endDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.endValue);\n }\n else if (!isNullOrUndefined(startDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.startValue);\n }\n else if (!this.dateDisabled) {\n this.currentDate.setDate(1);\n }\n this.effect = '';\n switch (e.action) {\n case 'altUpArrow':\n if (this.isPopupOpen()) {\n this.hide(e);\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n break;\n case 'select':\n if (levelRestrict) {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : startDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n this.selectRange(null, (element));\n }\n }\n else {\n if (!isNullOrUndefined(selectedDate) && !levelRestrict || !isNullOrUndefined(focusedDate)) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n }\n e.preventDefault();\n break;\n case 'controlHome':\n {\n var yearDate = new Date(this.currentDate.getFullYear(), 0, 1);\n if (!isLeftCalendar && +yearDate < +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n _super.prototype.navigateTo.call(this, 'Month', new Date(this.currentDate.getFullYear(), 0, 1));\n this.keyNavigation(ele, e);\n }\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else if (!isNullOrUndefined(rightCalendar)) {\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n if (this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(rightCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'controlUp':\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n this.calendarNavigation(e, this.calendarElement);\n }\n else {\n this.calendarNavigation(e, this.calendarElement);\n }\n e.preventDefault();\n break;\n case 'controlDown':\n if ((!isNullOrUndefined(selectedDate) || !isNullOrUndefined(focusedDate)) && !levelRestrict) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (selectedDate || focusedDate), value);\n }\n e.preventDefault();\n break;\n case 'controlEnd':\n {\n var yearDate = new Date(this.currentDate.getFullYear(), 11, 31);\n if (isLeftCalendar && +yearDate > +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n _super.prototype.navigateTo.call(this, 'Month', new Date(this.currentDate.getFullYear(), 11, 31));\n this.keyNavigation(ele, e);\n }\n break;\n case 'pageUp':\n date = new Date(+this.currentDate);\n this.addMonths(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addMonths(this.currentDate, -1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'pageDown':\n date = new Date(+this.currentDate);\n this.addMonths(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addMonths(this.currentDate, 1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageUp':\n date = new Date(+this.currentDate);\n this.addYears(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addYears(this.currentDate, -1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageDown':\n date = new Date(+this.currentDate);\n this.addYears(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addYears(this.currentDate, 1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftTab':\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.setAttribute('tabindex', '0');\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n if (isLeftCalendar) {\n e.preventDefault();\n }\n if (this.tabKeyValidation(ele, RIGHTCALENDER)) {\n this.currentDate = new Date(+this.leftCalCurrentDate);\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n }\n break;\n case 'spacebar':\n if (this.applyButton && !this.applyButton.disabled) {\n this.applyFunction(e);\n }\n break;\n case 'tab':\n if (this.tabKeyValidation(ele, LEFTCALENDER)) {\n this.currentDate = new Date(+this.rightCalCurrentDate);\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n }\n break;\n default:\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n this.checkMinMaxDays();\n }\n this.presetHeight();\n };\n DateRangePicker.prototype.tabKeyValidation = function (ele, calendarPos) {\n var isLeftCalendar = ele.classList.contains(calendarPos);\n var rightHeader = this.rightCalendar.querySelector('.e-header');\n var leftHeader = this.leftCalendar.querySelector('.e-header');\n var isRightMonth = rightHeader ? rightHeader.classList.contains('e-month') : false;\n var isLeftMonth = leftHeader ? leftHeader.classList.contains('e-month') : false;\n var isRightYear = rightHeader ? rightHeader.classList.contains('e-year') : false;\n var isLeftYear = leftHeader ? leftHeader.classList.contains('e-year') : false;\n var isRightDecade = rightHeader ? rightHeader.classList.contains('e-decade') : false;\n var isLeftDecade = leftHeader ? leftHeader.classList.contains('e-decade') : false;\n return isLeftCalendar && (isLeftMonth || isLeftYear || isLeftDecade) &&\n (isRightMonth || isRightYear || isRightDecade) && !this.isMobile;\n };\n DateRangePicker.prototype.keyNavigation = function (calendar, e) {\n this.bindCalendarCellEvents(calendar);\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n this.updateRange([calendar]);\n this.dateDisabled = this.isDateDisabled(this.currentDate);\n e.preventDefault();\n };\n DateRangePicker.prototype.inputHandler = function (e) {\n switch (e.action) {\n case 'altDownArrow':\n if (!this.isPopupOpen()) {\n if (this.inputElement.value === '') {\n this.clear();\n this.changeTrigger(e);\n this.clearRange();\n }\n this.show(null, e);\n this.isRangeIconClicked = false;\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.calendarFocus();\n }\n }\n this.isKeyPopup = true;\n }\n break;\n case 'escape':\n if (this.isPopupOpen()) {\n this.hide(e);\n }\n break;\n case 'enter':\n if (document.activeElement === this.inputElement) {\n this.inputBlurHandler(e);\n this.hide(e);\n }\n break;\n case 'tab':\n if (document.activeElement === this.inputElement && this.isPopupOpen()) {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.bindCalendarCellEvents = function (calendar) {\n var tdCells;\n if (calendar) {\n tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n }\n else {\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n }\n for (var _i = 0, tdCells_1 = tdCells; _i < tdCells_1.length; _i++) {\n var cell = tdCells_1[_i];\n EventHandler.clearEvents(cell);\n var disabledCell = cell.classList.contains(DISABLED) || cell.classList.contains(DATEDISABLED);\n if (!disabledCell && !cell.classList.contains(WEEKNUMBER)) {\n if (!this.isMobile) {\n EventHandler.add(cell, 'mouseover', this.hoverSelection, this);\n }\n EventHandler.add(cell, 'mousedown', this.selectRange, this);\n }\n }\n };\n DateRangePicker.prototype.removeFocusedDate = function () {\n var isDate = !isNullOrUndefined(this.startValue) || !isNullOrUndefined(this.endValue);\n var focusedDate = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' .' + FOCUSDATE);\n for (var _i = 0, focusedDate_1 = focusedDate; _i < focusedDate_1.length; _i++) {\n var ele = focusedDate_1[_i];\n var today = new Date();\n var eleDate = this.getIdValue(null, ele);\n if ((this.depth === 'Month' && this.currentView() === 'Month' &&\n (!ele.classList.contains(TODAY) || (ele.classList.contains(TODAY) && isDate)))\n || (this.depth === 'Year' && this.currentView() === 'Year' &&\n ((!this.isSameMonth(today, eleDate) && !this.isSameYear(today, eleDate)) || isDate))\n || (this.depth === 'Decade' && this.currentView() === 'Decade' &&\n (!this.isSameYear(today, eleDate) || isDate))) {\n ele.classList.remove(FOCUSDATE);\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(ENDDATE)) {\n ele.removeAttribute('aria-label');\n }\n }\n }\n };\n DateRangePicker.prototype.hoverSelection = function (event, element) {\n var currentElement = element || event.currentTarget;\n var currentDate = this.getIdValue(null, currentElement);\n if (!isNullOrUndefined(this.startValue) && +this.startValue >= +this.min && +this.startValue <= +this.max) {\n if ((!this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)\n && isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue))\n || (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))) {\n var tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n for (var _i = 0, tdCells_2 = tdCells; _i < tdCells_2.length; _i++) {\n var ele = tdCells_2[_i];\n var isDisabledCell = (!ele.classList.contains(DISABLED) || ele.classList.contains(DATEDISABLED));\n if (!ele.classList.contains(WEEKNUMBER) && isDisabledCell) {\n var eleDate = this.getIdValue(null, ele);\n var startDateValue = new Date(+this.startValue);\n var eleDateValue = new Date(+eleDate);\n if (eleDateValue.setHours(0, 0, 0, 0) >= startDateValue.setHours(0, 0, 0, 0) && +eleDate <= +currentDate) {\n addClass([ele], RANGEHOVER);\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.isSameStartEnd = function (startVal, endVal) {\n var isSame = false;\n if (this.depth === 'Month') {\n if ((startVal).setHours(0, 0, 0, 0) === (endVal).setHours(0, 0, 0, 0)) {\n isSame = true;\n }\n }\n else if (this.depth === 'Year') {\n if ((startVal.getFullYear() === endVal.getFullYear()) &&\n (startVal.getMonth() === endVal.getMonth())) {\n isSame = true;\n }\n }\n else if (this.depth === 'Decade') {\n if (startVal.getFullYear() === endVal.getFullYear()) {\n isSame = true;\n }\n }\n return isSame;\n };\n DateRangePicker.prototype.updateRange = function (elementCollection) {\n if (!isNullOrUndefined(this.startValue)) {\n for (var _i = 0, elementCollection_1 = elementCollection; _i < elementCollection_1.length; _i++) {\n var calendar = elementCollection_1[_i];\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n for (var _a = 0, tdCells_3 = tdCells; _a < tdCells_3.length; _a++) {\n var ele = tdCells_3[_a];\n if (!ele.classList.contains(WEEKNUMBER) && !ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n var eleDateValue = this.getIdValue(null, ele);\n if (!isNullOrUndefined(this.endValue)) {\n if (this.currentView() === this.depth &&\n +eleDateValue.setHours(0, 0, 0, 0) >= +new Date(+this.startValue).setHours(0, 0, 0, 0)\n && +eleDateValue.setHours(0, 0, 0, 0) <= +new Date(+this.endValue).setHours(0, 0, 0, 0) &&\n !this.isSameStartEnd(new Date(+this.startValue), new Date(+this.endValue)) &&\n +new Date(+this.startValue).setHours(0, 0, 0, 0) >= +this.min\n && +new Date(+this.endValue).setHours(0, 0, 0, 0) <= +this.max\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], RANGEHOVER);\n }\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n if (ele.classList.contains(SELECTED) && ele.classList.contains(ENDDATE) &&\n (+eleDateValue !== +this.endValue)) {\n removeClass([ele], [SELECTED]);\n removeClass([ele], [ENDDATE]);\n }\n if (ele.classList.contains(RANGEHOVER) && (+eleDateValue > +this.endValue)) {\n removeClass([ele], [RANGEHOVER]);\n }\n if (!ele.classList.contains(OTHERMONTH)) {\n var startDateValue = new Date(+this.startValue);\n var eleDateValue_1 = new Date(+eleDate);\n if (this.currentView() === this.depth &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +startDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) >= +startDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, true);\n }\n var endDateValue = new Date(+this.endValue);\n if (this.currentView() === 'Year') {\n eleDateValue_1 = new Date(eleDateValue_1.getFullYear(), eleDateValue_1.getMonth() + 1, 0);\n }\n else if (this.currentView() === 'Decade') {\n eleDateValue_1 = new Date(eleDateValue_1.getFullYear(), 11, 31);\n }\n if (this.currentView() === this.depth &&\n !isNullOrUndefined(this.endValue) &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +endDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) <= +endDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, false);\n }\n if (+eleDate === +this.startValue && !isNullOrUndefined(this.endValue) && +eleDate === +this.endValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.checkMinMaxDays = function () {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n if (!this.isMobile) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + LEFTCALENDER));\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + RIGHTCALENDER));\n }\n else {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n }\n };\n DateRangePicker.prototype.rangeArgs = function (e) {\n var inputValue;\n var range;\n var startDate = !isNullOrUndefined(this.startValue) ?\n this.globalize.formatDate(this.startValue, {\n format: this.formatString, type: 'date', skeleton: 'yMd'\n }) : null;\n var endDate = !isNullOrUndefined(this.endValue) ?\n this.globalize.formatDate(this.endValue, {\n format: this.formatString, type: 'date', skeleton: 'yMd'\n }) : null;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n inputValue = startDate + ' ' + this.separator + ' ' + endDate;\n range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n }\n else {\n inputValue = '';\n range = 0;\n }\n var args = {\n value: this.value,\n startDate: this.startValue,\n endDate: this.endValue,\n daySpan: range,\n event: e || null,\n element: this.element,\n isInteracted: !isNullOrUndefined(e),\n text: inputValue\n };\n return args;\n };\n DateRangePicker.prototype.otherMonthSelect = function (ele, isStartDate, sameDate) {\n var value = +this.getIdValue(null, ele);\n var dateIdString = '*[id^=\"/id\"]:not(.e-other-month)'.replace('/id', '' + value);\n var tdCell = this.popupObj && this.popupObj.element.querySelector(dateIdString);\n if (!isNullOrUndefined(tdCell)) {\n if (isStartDate) {\n addClass([tdCell], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.startValue, true);\n }\n else {\n addClass([tdCell], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.endValue, true);\n }\n if (sameDate) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n };\n DateRangePicker.prototype.selectRange = function (event, element) {\n var leftCalendar;\n var rightCalendar;\n if (event) {\n event.preventDefault();\n }\n var date = isNullOrUndefined(event) ? this.getIdValue(null, element)\n : this.getIdValue(event, null);\n var y = date.getFullYear();\n var m = date.getMonth();\n var firstDay = new Date(y, m, 1);\n var lastDay = new Date(y, m + 1, 0);\n var firstMonth = new Date(y, 0, 1);\n var lastMonth = new Date(y, 11, 31);\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n if (!this.isMobile || this.isMobile && !this.endButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n }\n else if (this.isMobile && this.startButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n var ele = element || event.currentTarget;\n if (isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.previousStartValue)) {\n date.setHours(this.previousStartValue.getHours());\n date.setMinutes(this.previousStartValue.getMinutes());\n date.setSeconds(this.previousStartValue.getSeconds());\n }\n this.startValue = (this.depth === 'Month') ? new Date(this.checkValue(date)) :\n (this.depth === 'Year') ? firstDay : firstMonth;\n this.endValue = null;\n this.setValue();\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n this.applyButton.disabled = true;\n this.applyButton.element.disabled = true;\n if (this.isMobile) {\n this.endButton.element.classList.add(ACTIVE);\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.removeAttribute('disabled');\n this.selectableDates();\n }\n this.trigger('select', this.rangeArgs(event));\n }\n else {\n if (+date === +this.startValue || +date > +this.startValue) {\n if (+date === +this.startValue && !isNullOrUndefined(this.minDays) && this.minDays > 1) {\n return;\n }\n this.endValue = null;\n this.setValue();\n if (this.isMobile || element) {\n this.hoverSelection(event, element);\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n date.setHours(this.previousEndValue.getHours());\n date.setMinutes(this.previousEndValue.getMinutes());\n date.setSeconds(this.previousEndValue.getSeconds());\n }\n this.endValue = (this.depth === 'Month') ? new Date(this.checkValue(date)) :\n (this.depth === 'Year') ? lastDay : lastMonth;\n this.setValue();\n var endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n if (this.isMobile) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n for (var _i = 0, endEle_1 = endEle; _i < endEle_1.length; _i++) {\n var ele_1 = endEle_1[_i];\n ele_1.removeAttribute('aria-label');\n if (!ele_1.classList.contains(STARTDATE)) {\n ele_1.setAttribute('aria-selected', 'false');\n removeClass([ele_1], [ENDDATE, SELECTED]);\n }\n else {\n this.addSelectedAttributes(ele_1, this.startValue, true);\n removeClass([ele_1], [ENDDATE]);\n }\n }\n }\n addClass([ele], ENDDATE);\n if (+this.endValue === +this.startValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n else {\n this.addSelectedAttributes(ele, this.endValue, false);\n }\n if (ele.classList.contains(OTHERMONTH)) {\n if (+this.endValue === +this.startValue) {\n this.otherMonthSelect(ele, false, true);\n }\n else {\n this.otherMonthSelect(ele, false);\n }\n }\n endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, endEle_2 = endEle; _a < endEle_2.length; _a++) {\n var ele_2 = endEle_2[_a];\n if (ele_2.classList.contains(STARTDATE)) {\n removeClass([ele_2], [RANGEHOVER]);\n }\n }\n this.applyButton.disabled = false;\n this.applyButton.element.disabled = false;\n if (!this.isMobile) {\n this.removeClassDisabled();\n }\n if (!isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n this.trigger('select', this.rangeArgs(event));\n }\n else if (+date < +this.startValue) {\n this.removeClassDisabled();\n this.startValue = (this.depth === 'Month') ? new Date(this.checkValue(date)) :\n (this.depth === 'Year') ? firstDay : firstMonth;\n this.setValue();\n this.removeSelectedAttributes();\n removeClass(this.popupObj.element.querySelectorAll('.' + STARTDATE), [STARTDATE, SELECTED]);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n }\n }\n if (event) {\n leftCalendar = closest(event.target, '.' + LEFTCALENDER);\n }\n if (!isNullOrUndefined(leftCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (event) {\n rightCalendar = event && closest(event.target, '.' + RIGHTCALENDER);\n }\n if (!isNullOrUndefined(rightCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n addClass([ele], SELECTED);\n this.calendarIconEvent();\n this.updateHeader();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.selectableDates = function () {\n if (!isNullOrUndefined(this.startValue)) {\n var tdCells = this.calendarElement.querySelectorAll('.' + CALENDAR + ' td');\n var isStartDate = false;\n if (this.currentView() === this.depth) {\n for (var _i = 0, tdCells_4 = tdCells; _i < tdCells_4.length; _i++) {\n var ele = tdCells_4[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n if (!ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n if (+eleDate < +this.startValue) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n continue;\n }\n else {\n break;\n }\n }\n }\n if (ele.classList.contains(STARTDATE) && !ele.classList.contains(OTHERMONTH)) {\n isStartDate = true;\n break;\n }\n }\n if (isStartDate) {\n if (!this.previousIcon.classList.contains(DISABLED)) {\n addClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n else {\n for (var _a = 0, tdCells_5 = tdCells; _a < tdCells_5.length; _a++) {\n var ele = tdCells_5[_a];\n var startMonth = this.startValue.getMonth();\n var startYear = this.startValue.getFullYear();\n var element = this.getIdValue(null, ele);\n if (!this.startButton.element.classList.contains(ACTIVE) && ((this.currentView() === 'Year' &&\n (element.getMonth() < startMonth) && (element.getFullYear() <= startYear))\n || (this.currentView() === 'Decade' && (element.getMonth() <= startMonth) &&\n (element.getFullYear() < startYear)))) {\n addClass([ele], [DISABLED]);\n }\n else {\n break;\n }\n }\n if (tdCells[0].classList.contains(DISABLED)) {\n this.previousIconHandler(true);\n }\n else if (tdCells[tdCells.length - 1].classList.contains(DISABLED)) {\n this.nextIconHandler(true);\n }\n }\n }\n };\n DateRangePicker.prototype.updateMinMaxDays = function (calendar) {\n if ((!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) ||\n (this.isMobile && this.endButton.element.classList.contains(ACTIVE))) {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n var startValueSelected = this.removeTimeValueFromDate(this.startValue);\n var minDate = new Date(new Date(+startValueSelected).setDate(startValueSelected.getDate() + (this.minDays - 1)));\n var maxDate = new Date(new Date(+startValueSelected).setDate(startValueSelected.getDate() + (this.maxDays - 1)));\n minDate = (!isNullOrUndefined(this.minDays) && this.minDays > 0) ? minDate : null;\n maxDate = (!isNullOrUndefined(this.maxDays) && this.maxDays > 0) ? maxDate : null;\n if (this.currentView() === 'Year') {\n minDate = isNullOrUndefined(minDate) ? null : new Date(minDate.getFullYear(), minDate.getMonth(), 0);\n maxDate = isNullOrUndefined(maxDate) ? null : new Date(maxDate.getFullYear(), maxDate.getMonth(), 1);\n }\n else if (this.currentView() === 'Decade') {\n minDate = isNullOrUndefined(minDate) ? null : new Date(minDate.getFullYear() - 1, 11, 1);\n maxDate = isNullOrUndefined(maxDate) ? null : new Date(maxDate.getFullYear(), 0, 1);\n }\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n var maxEle = void 0;\n for (var _i = 0, tdCells_6 = tdCells; _i < tdCells_6.length; _i++) {\n var ele = tdCells_6[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n var eleDate = this.getIdValue(null, ele);\n eleDate = this.removeTimeValueFromDate(eleDate);\n if (!isNullOrUndefined(minDate) && +eleDate === +minDate && ele.classList.contains(DISABLED)) {\n minDate.setDate(minDate.getDate() + 1);\n }\n if (!ele.classList.contains(DISABLED)) {\n if (+eleDate <= +startValueSelected) {\n continue;\n }\n if (!isNullOrUndefined(minDate) && +eleDate < +minDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n }\n if (!isNullOrUndefined(maxDate) && +eleDate > +maxDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n this.isMaxDaysClicked = true;\n EventHandler.clearEvents(ele);\n if (isNullOrUndefined(maxEle) && !ele.classList.contains(OTHERMONTH)) {\n maxEle = ele;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(maxEle)) {\n if (this.isMobile) {\n if (!this.nextIcon.classList.contains(DISABLED)) {\n addClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n var calendar_1 = closest(maxEle, '.' + RIGHTCALENDER);\n calendar_1 = isNullOrUndefined(calendar_1) ? this.leftCalendar : calendar_1;\n var isLeftCalendar = calendar_1.classList.contains(LEFTCALENDER);\n if (!isLeftCalendar) {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.leftCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.rightCalPrevIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n }\n }\n }\n else {\n this.isMaxDaysClicked = false;\n }\n };\n DateRangePicker.prototype.removeTimeValueFromDate = function (value) {\n var dateValue = new Date(value.getFullYear(), value.getMonth(), value.getDate());\n return dateValue;\n };\n DateRangePicker.prototype.removeClassDisabled = function () {\n var tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td' + '.' + DATEDISABLED);\n for (var _i = 0, tdCells_7 = tdCells; _i < tdCells_7.length; _i++) {\n var ele = tdCells_7[_i];\n if (ele.classList.contains(DATEDISABLED)) {\n removeClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.add(ele, 'click', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(ele, 'mouseover', this.hoverSelection, this);\n }\n }\n }\n if (this.isMobile) {\n if (this.nextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.previousIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (this.rightCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.rightCalPrevIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.leftCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n };\n DateRangePicker.prototype.updateHeader = function () {\n var format = { type: 'date', skeleton: 'yMMMd' };\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = range.toString() + ' ' + this.l10n.getConstant('days');\n }\n else {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n if (!isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n }\n }\n if ((this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue)) ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue))\n && +this.startValue > +this.endValue))) {\n if (!this.isMobile) {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n }\n if (this.popupObj.element.querySelector('#custom_range')) {\n this.popupObj.element.querySelector('#custom_range').textContent =\n this.l10n.getConstant('customRange') !== '' ? this.l10n.getConstant('customRange') : 'Custom Range';\n }\n };\n DateRangePicker.prototype.removeSelection = function () {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.removeSelectedAttributes();\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [STARTDATE, ENDDATE, SELECTED]);\n }\n if (this.popupObj.element.querySelectorAll('.' + FOCUSDATE).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + FOCUSDATE), FOCUSDATE);\n }\n if (this.popupObj.element.querySelectorAll('.' + RANGEHOVER).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + RANGEHOVER), [RANGEHOVER]);\n }\n }\n };\n DateRangePicker.prototype.addSelectedAttributes = function (ele, date, isStartDate, sameDate) {\n if (ele) {\n var title = this.globalize.formatDate(date, { type: 'date', skeleton: 'full' });\n if (!isNullOrUndefined(sameDate) && sameDate) {\n ele.setAttribute('aria-label', 'The current start and end date is ' + '' + title);\n }\n else {\n ele.setAttribute('aria-label', 'The current ' + (isStartDate ? 'start' : 'end') + ' date is ' + '' + title);\n }\n ele.setAttribute('aria-selected', 'true');\n }\n };\n DateRangePicker.prototype.removeSelectedAttributes = function () {\n if (this.popupObj) {\n var start = this.popupObj.element.querySelectorAll('.' + STARTDATE);\n for (var _i = 0, start_1 = start; _i < start_1.length; _i++) {\n var ele = start_1[_i];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n var end = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, end_1 = end; _a < end_1.length; _a++) {\n var ele = end_1[_a];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n }\n };\n DateRangePicker.prototype.updateCalendarElement = function (calendar) {\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.calendarElement = this.leftCalendar;\n this.currentDate = this.leftCalCurrentDate;\n this.previousIcon = this.leftCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.currentDate = this.rightCalCurrentDate;\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.rightCalNextIcon;\n }\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n };\n DateRangePicker.prototype.navPrevMonth = function (e) {\n e.preventDefault();\n var ele = closest(e.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(e.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigatePrevious(e);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.deviceNavigation = function (ele) {\n this.deviceCalendarEvent();\n this.updateRange([this.popupObj.element.querySelector('.' + CALENDAR)]);\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.selectableDates();\n }\n if (this.currentView() === this.depth) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.updateControl = function (calendar, customDate) {\n if (customDate === void 0) { customDate = null; }\n if (calendar.classList.contains(RIGHTCALENDER)) {\n this.rightCalCurrentDate = new Date(+(customDate ? customDate : this.currentDate));\n }\n else {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n this.calendarIconEvent();\n if ((((this.depth === 'Month')\n && this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-month'))\n || ((this.depth === 'Year')\n && this.leftCalendar.querySelector('.e-content').classList.contains('e-year')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-year'))\n || ((this.depth === 'Decade')\n && this.leftCalendar.querySelector('.e-content').classList.contains('e-decade')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-decade')))\n || this.isMobile) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.updateRange([calendar]);\n };\n DateRangePicker.prototype.navNextMonth = function (event) {\n event.preventDefault();\n var ele = closest(event.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(event.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigateNext(event);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.isPopupOpen = function () {\n if (!isNullOrUndefined(this.popupObj) && this.popupObj.element.classList.contains(POPUP)) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.createRangeHeader = function () {\n var labelContainer = this.createElement('div', { className: STARTENDCONTAINER });\n if (!this.isMobile) {\n var startLabel = this.createElement('a', { className: STARTLABEL });\n var endLabel = this.createElement('a', { className: ENDLABEL });\n var changeIcon = this.createElement('span', { className: CHANGEICON });\n attributes(startLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'Start Date', 'role': 'button' });\n attributes(endLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'End Date', 'role': 'button' });\n labelContainer.appendChild(startLabel);\n labelContainer.appendChild(changeIcon);\n labelContainer.appendChild(endLabel);\n startLabel.textContent = this.l10n.getConstant('startLabel');\n endLabel.textContent = this.l10n.getConstant('endLabel');\n }\n else {\n var endBtn = this.createElement('button', { className: ENDBUTTON });\n var startBtn = this.createElement('button', { className: STARTBUTTON });\n this.startButton = new Button({ content: this.l10n.getConstant('startLabel') }, startBtn);\n this.endButton = new Button({ content: this.l10n.getConstant('endLabel') }, endBtn);\n labelContainer.appendChild(startBtn);\n labelContainer.appendChild(endBtn);\n }\n return labelContainer;\n };\n DateRangePicker.prototype.disableInput = function () {\n if (this.strictMode) {\n if (!isNullOrUndefined(this.previousStartValue) && !isNullOrUndefined(this.previousEndValue)) {\n this.startValue = this.previousStartValue;\n this.endValue = this.previousEndValue;\n this.setValue();\n this.updateInput();\n }\n }\n else {\n this.updateInput();\n this.clearRange();\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.errorClass();\n }\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n };\n DateRangePicker.prototype.validateMinMax = function () {\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (!(this.min <= this.max)) {\n this.disableInput();\n return;\n }\n if (!isNullOrUndefined(this.minDays) && !isNullOrUndefined(this.maxDays)) {\n if (this.maxDays > 0 && this.minDays > 0 && (this.minDays > this.maxDays)) {\n this.maxDays = null;\n }\n }\n if (!isNullOrUndefined(this.minDays) && this.minDays < 0) {\n this.minDays = null;\n }\n if (!isNullOrUndefined(this.maxDays) && this.maxDays < 0) {\n this.maxDays = null;\n }\n };\n DateRangePicker.prototype.validateRangeStrict = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (+this.startValue <= +this.min) {\n this.startValue = this.min;\n this.setValue();\n }\n else if (+this.startValue >= +this.min && +this.startValue >= +this.max) {\n this.startValue = this.max;\n }\n }\n if (!isNullOrUndefined(this.endValue)) {\n if (+this.endValue > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else if (+this.endValue < +this.min) {\n this.endValue = this.min;\n this.setValue();\n }\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateRange = function () {\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateMinMaxDays = function () {\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n var range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) && !(range >= this.minDays)) {\n if (this.strictMode) {\n var date = new Date(+this.startValue);\n date.setDate(date.getDate() + (this.minDays - 1));\n if (+date > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else {\n this.endValue = date;\n this.setValue();\n }\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n if ((!isNullOrUndefined(this.maxDays) && this.maxDays > 0) && !(range <= this.maxDays)) {\n if (this.strictMode) {\n this.endValue = new Date(+this.startValue);\n this.endValue.setDate(this.endValue.getDate() + (this.maxDays - 1));\n this.setValue();\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n };\n DateRangePicker.prototype.renderCalendar = function () {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(CALENDAR);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n attributes(this.calendarElement, { 'data-role': 'calendar' });\n _super.prototype.createHeader.call(this);\n _super.prototype.createContent.call(this);\n };\n DateRangePicker.prototype.isSameMonth = function (start, end) {\n if (start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.isSameYear = function (start, end) {\n if (start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.isSameDecade = function (start, end) {\n var startYear = start.getFullYear();\n var endYear = end.getFullYear();\n if ((startYear - (startYear % 10)) === (endYear - (endYear % 10))) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.startMonthCurrentDate = function () {\n if (this.isSameMonth(this.min, this.max) || +this.currentDate > +this.max || this.isSameMonth(this.currentDate, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (this.currentDate < this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n };\n DateRangePicker.prototype.selectNextMonth = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameMonth(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n return;\n }\n if ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setDate(1);\n var month = this.currentDate.getMonth() + 1;\n this.currentDate.setMonth(month);\n }\n };\n DateRangePicker.prototype.selectNextYear = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameYear(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n this.currentDate.setMonth(0);\n var yr = this.currentDate.getFullYear() + 1;\n this.currentDate.setFullYear(yr);\n return;\n }\n if ((!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setMonth(0);\n this.currentDate.setFullYear(this.currentDate.getFullYear() + 1);\n }\n };\n DateRangePicker.prototype.selectNextDecade = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameDecade(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n var decyr = this.currentDate.getFullYear() + 10;\n this.currentDate.setFullYear(decyr);\n return;\n }\n if (((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setFullYear(this.currentDate.getFullYear() + 10);\n }\n };\n DateRangePicker.prototype.selectStartMonth = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.max) && this.isSameMonth(this.startValue, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (!(this.startValue >= this.min && this.startValue <= this.max)\n || this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n else {\n this.currentDate = new Date(+this.startValue);\n }\n }\n else {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.startMonthCurrentDate();\n }\n if ((!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.startMonthCurrentDate();\n };\n DateRangePicker.prototype.createCalendar = function () {\n var calendarContainer = this.createElement('div', { className: CALENDARCONTAINER });\n if (!this.isMobile) {\n this.selectStartMonth();\n this.renderCalendar();\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.calendarElement.classList.add(LEFTCALENDER);\n this.leftCalPrevIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + PREVICON);\n this.leftCalNextIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + NEXTICON);\n this.leftTitle = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalNextIcon);\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalPrevIcon);\n prepend([this.leftCalPrevIcon], this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER));\n this.leftCalendar = this.calendarElement;\n var leftContainer = this.createElement('div', { className: LEFTCONTAINER });\n var rightContainer = this.createElement('div', { className: RIGHTCONTAINER });\n leftContainer.appendChild(this.leftCalendar);\n calendarContainer.appendChild(leftContainer);\n if (!this.isMobile) {\n EventHandler.add(this.leftTitle, 'click', this.leftNavTitle, this);\n }\n if (this.start === 'Month') {\n this.selectNextMonth();\n }\n if (this.start === 'Year') {\n this.selectNextYear();\n }\n if (this.start === 'Decade') {\n this.selectNextDecade();\n }\n this.renderCalendar();\n this.rightCalCurrentDate = new Date(+this.currentDate);\n addClass([this.calendarElement], RIGHTCALENDER);\n this.rightCalendar = this.calendarElement;\n removeClass([this.leftCalendar && this.leftCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n removeClass([this.rightCalendar && this.rightCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n this.rightCalPrevIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + PREVICON);\n this.rightCalNextIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + NEXTICON);\n this.rightTitle = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('table').setAttribute('tabindex', '0');\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalNextIcon);\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalPrevIcon);\n prepend([this.rightCalPrevIcon], this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER));\n rightContainer.appendChild(this.rightCalendar);\n calendarContainer.appendChild(rightContainer);\n if (!this.isMobile) {\n EventHandler.add(this.rightTitle, 'click', this.rightNavTitle, this);\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.currentDate = new Date(+this.startValue);\n }\n _super.prototype.validateDate.call(this);\n _super.prototype.minMaxUpdate.call(this);\n _super.prototype.render.call(this);\n var prevIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + PREVICON);\n var nextIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + NEXTICON);\n remove(this.calendarElement.querySelector('.' + CALENDAR + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(nextIcon);\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(prevIcon);\n prepend([prevIcon], this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER));\n this.deviceCalendar = this.calendarElement;\n calendarContainer.appendChild(this.calendarElement);\n this.headerTitleElement = this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER + ' .' + TITLE);\n }\n return calendarContainer;\n };\n DateRangePicker.prototype.leftNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.leftCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.calendarNavigation = function (e, element) {\n this.table = element.querySelector('table');\n this.headerTitleElement = element.querySelector('.e-title');\n this.tableBodyElement = element.querySelector('tbody');\n this.tableHeadElement = element.querySelector('thead');\n this.contentElement = element.querySelector('.e-content');\n this.updateCalendarElement(element);\n _super.prototype.navigateTitle.call(this, e);\n this.updateNavIcons();\n };\n DateRangePicker.prototype.rightNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.rightCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.clickEventEmitter = function (e) {\n if (!this.isMobile) {\n if (closest(e.target, '.e-calendar.e-left-calendar')) {\n this.calendarElement = this.leftCalendar;\n this.updateCalendarElement(this.leftCalendar);\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.updateCalendarElement(this.rightCalendar);\n }\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n * @private\n * @hidden\n */\n DateRangePicker.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n DateRangePicker.prototype.getCalendarView = function (view) {\n if (view === 'Year') {\n return 'Year';\n }\n else if (view === 'Decade') {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n DateRangePicker.prototype.navigatedEvent = function (e) {\n this.trigger('navigated', this.navigatedArgs);\n if (!isNullOrUndefined(this.popupObj)) {\n var element = void 0;\n var view = this.getCalendarView(this.currentView());\n if (this.isMobile) {\n if (view === this.depth) {\n this.bindCalendarCellEvents();\n this.deviceNavigation();\n this.removeFocusedDate();\n this.checkMinMaxDays();\n }\n else {\n this.selectableDates();\n }\n }\n else {\n if (!this.isMobile && view === this.depth) {\n element = this.calendarElement.classList.contains('e-left-calendar') ? this.leftCalendar : this.rightCalendar;\n if (element === this.leftCalendar && ((e && !e.currentTarget.children[0].classList.contains('e-icons'))\n || (!isNullOrUndefined(this.controlDown)))) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.effect = '';\n this.currentDate = this.leftCalCurrentDate;\n this.updateCalendarElement(this.leftCalendar);\n this.updateControl(this.leftCalendar);\n this.updateCalendarElement(this.rightCalendar);\n _super.prototype.navigateTo.call(this, view, this.rightCalCurrentDate);\n var customDate = this.rightCalCurrentDate ? this.rightCalCurrentDate : this.currentDate;\n this.updateControl(this.rightCalendar, customDate);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.controlDown = null;\n }\n else if (e && !e.currentTarget.children[0].classList.contains('e-icons')\n || (!isNullOrUndefined(this.controlDown))) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n this.effect = '';\n this.currentDate = this.rightCalCurrentDate;\n this.updateCalendarElement(this.rightCalendar);\n this.updateControl(this.rightCalendar);\n this.updateCalendarElement(this.leftCalendar);\n if (this.startValue && isNullOrUndefined(this.endValue)) {\n if (view === 'Month' && this.startValue.getMonth() < this.rightCalCurrentDate.getMonth() &&\n this.startValue.getFullYear() <= this.rightCalCurrentDate.getFullYear()) {\n _super.prototype.navigateTo.call(this, view, new Date(+this.startValue));\n }\n else if (view === 'Year' && this.startValue.getFullYear() < this.rightCalCurrentDate.getFullYear()) {\n _super.prototype.navigateTo.call(this, view, new Date(+this.startValue));\n }\n else {\n _super.prototype.navigateTo.call(this, view, this.leftCalCurrentDate);\n }\n }\n else {\n _super.prototype.navigateTo.call(this, view, this.leftCalCurrentDate);\n }\n this.updateControl(this.leftCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.controlDown = null;\n }\n this.checkMinMaxDays();\n }\n else {\n this.updateNavIcons();\n this.calendarIconEvent();\n }\n }\n }\n };\n DateRangePicker.prototype.createControl = function () {\n var controlContainer = this.createElement('div', { className: RANGECONTAINER });\n var headerContainer = this.createElement('div', { className: RANGEHEADER });\n if (this.isMobile && this.fullScreenMode) {\n var modelHeaderIconWrapper = this.createElement(\"div\", { className: \"e-model-header-wrapper\" });\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.modelRangeCloseHandler, this);\n var modelApplyButton = this.createElement(\"span\", { className: \"e-apply\" });\n EventHandler.add(modelApplyButton, 'mousedown touchstart', this.applyFunction, this);\n modelHeaderIconWrapper.appendChild(modelCloseIcon);\n modelHeaderIconWrapper.appendChild(modelApplyButton);\n headerContainer.appendChild(modelHeaderIconWrapper);\n }\n var labelContainer = this.createRangeHeader();\n headerContainer.appendChild(labelContainer);\n var daySpan = this.createElement('div', { className: DAYSPAN });\n attributes(daySpan, { 'aria-label': 'Selected Days' });\n daySpan.textContent = this.l10n.getConstant('selectedDays');\n headerContainer.appendChild(daySpan);\n var separator = this.createElement('div', { className: SEPARATOR });\n var calendarContainer = this.createCalendar();\n controlContainer.appendChild(headerContainer);\n controlContainer.appendChild(separator);\n controlContainer.appendChild(calendarContainer);\n var footerSection = this.createElement('div', { className: FOOTER });\n var cancelBtn = this.createElement('button', { className: CANCEL + ' ' + FLAT + ' ' + CSS });\n var applyBtn = this.createElement('button');\n addClass([applyBtn], [APPLY, FLAT, PRIMARY, CSS]);\n footerSection.appendChild(applyBtn);\n footerSection.appendChild(cancelBtn);\n var enable = !isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue);\n this.cancelButton = new Button({ content: this.l10n.getConstant('cancelText') }, cancelBtn);\n this.applyButton = new Button({ content: this.l10n.getConstant('applyText'), disabled: !enable }, applyBtn);\n EventHandler.add(applyBtn, 'click', this.applyFunction, this);\n EventHandler.add(cancelBtn, 'click', this.cancelFunction, this);\n this.popupWrapper.appendChild(controlContainer);\n if (!this.isMobile) {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.createPresets();\n this.listRippleEffect();\n addClass([controlContainer], RANGEBORDER);\n addClass([this.popupWrapper], 'e-preset-wrapper');\n var presets = this.popupWrapper.querySelector('.' + PRESETS);\n presets.style.height = this.popupWrapper.querySelector('.' + RANGECONTAINER).getBoundingClientRect().height + 'px';\n }\n }\n this.popupWrapper.appendChild(footerSection);\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n this.renderPopup();\n };\n DateRangePicker.prototype.modelRangeCloseHandler = function (e) {\n this.hide();\n };\n DateRangePicker.prototype.cancelFunction = function (eve) {\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n eve.preventDefault();\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.startValue = null;\n this.endValue = null;\n this.removeSelection();\n this.hide(eve);\n };\n DateRangePicker.prototype.deviceHeaderUpdate = function () {\n if (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.endButton.element.setAttribute('disabled', '');\n this.startButton.element.classList.add(ACTIVE);\n }\n else if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.classList.add(ACTIVE);\n }\n };\n DateRangePicker.prototype.applyFunction = function (eve) {\n var isValueChanged = false;\n if (eve.type !== 'touchstart') {\n eve.preventDefault();\n }\n if (this.closeEventArgs && this.closeEventArgs.cancel) {\n this.startValue = this.popupWrapper.querySelector('.e-start-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-start-date'));\n this.endValue = this.popupWrapper.querySelector('.e-end-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-end-date'));\n this.setValue();\n }\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n if (eve.type !== 'touchstart' &&\n this.closeEventArgs && !this.closeEventArgs.cancel) {\n eve.preventDefault();\n }\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n if (!(this.previousStartValue && this.previousEndValue && this.startValue.getDate() == this.previousStartValue.getDate() && this.startValue.getMonth() == this.previousStartValue.getMonth() &&\n this.startValue.getFullYear() == this.previousStartValue.getFullYear()\n && this.endValue.getDate() == this.previousEndValue.getDate() && this.endValue.getMonth() == this.previousEndValue.getMonth()\n && this.endValue.getFullYear() == this.previousEndValue.getFullYear())) {\n Input.setValue(this.rangeArgs(eve).text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n this.previousEleValue = this.inputElement.value;\n if (+this.initStartDate !== +this.startValue || +this.initEndDate !== +this.endValue) {\n isValueChanged = true;\n }\n this.changeTrigger(eve);\n this.hide(eve ? eve : null);\n this.errorClass();\n isValueChanged = true;\n }\n else {\n this.hide(eve ? eve : null);\n }\n if (!(closest(eve.target, '.' + INPUTCONTAINER))\n && (!isValueChanged)) {\n this.focusOut();\n }\n if (!this.isMobile) {\n this.isKeyPopup = false;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.children[1].focus();\n this.keyInputConfigs = extend(this.keyInputConfigs, this.keyConfigs);\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyConfigs: this.keyInputConfigs,\n keyAction: this.popupKeyActionHandle.bind(this)\n });\n }\n }\n };\n DateRangePicker.prototype.onMouseClick = function (event, item) {\n if (event.type === 'touchstart') {\n return;\n }\n var target = item || event.target;\n var li = closest(target, '.' + LISTCLASS);\n var isClick = li && li.classList.contains(ACTIVE);\n if (li && li.classList.contains(LISTCLASS)) {\n this.setListSelection(li, event);\n }\n this.preventFocus = true;\n this.inputElement.focus();\n if (!this.isMobile) {\n this.preventFocus = true;\n if (li && li.classList.contains(LISTCLASS) && li.getAttribute('id') === 'custom_range') {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (!isClick && event.type === 'keydown') {\n this.inputElement.focus();\n }\n }\n }\n };\n DateRangePicker.prototype.onMouseOver = function (event) {\n var li = closest(event.target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS) && !li.classList.contains(HOVER)) {\n addClass([li], HOVER);\n }\n };\n DateRangePicker.prototype.onMouseLeave = function (event) {\n var item = closest(event.target, '.' + HOVER);\n if (!isNullOrUndefined(item)) {\n removeClass([item], HOVER);\n }\n };\n DateRangePicker.prototype.setListSelection = function (li, event) {\n if (li && (!li.classList.contains(ACTIVE) || (this.isMobile && li.classList.contains(ACTIVE)))) {\n if (this.isMobile && li.classList.contains(ACTIVE)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n var values_1 = this.presetsItem[this.activeIndex];\n if (values_1.id === 'custom_range') {\n this.renderCustomPopup();\n return;\n }\n return;\n }\n this.removeListSelection();\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n addClass([li], ACTIVE);\n li.setAttribute('aria-selected', 'true');\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.renderCustomPopup();\n }\n else {\n this.applyPresetRange(values, event);\n }\n }\n };\n DateRangePicker.prototype.removeListSelection = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n if (!isNullOrUndefined(item)) {\n removeClass([item], ACTIVE);\n item.removeAttribute('aria-selected');\n }\n };\n DateRangePicker.prototype.setValue = function () {\n this.modelValue = [this.startValue, this.endValue];\n };\n DateRangePicker.prototype.applyPresetRange = function (values, e) {\n this.hide(null);\n this.presetsItem[this.presetsItem.length - 1].start = null;\n this.presetsItem[this.presetsItem.length - 1].end = null;\n this.startValue = values.start;\n this.endValue = values.end;\n this.setValue();\n this.refreshControl();\n this.trigger('select', this.rangeArgs(e));\n this.changeTrigger(e);\n this.previousEleValue = this.inputElement.value;\n this.isCustomRange = false;\n this.leftCalendar = this.rightCalendar = null;\n if (this.isKeyPopup) {\n this.isRangeIconClicked = false;\n this.inputElement.focus();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.showPopup = function (element, event) {\n this.presetHeight();\n if (this.zIndex === 1000) {\n this.popupObj.show(null, this.element);\n }\n else {\n this.popupObj.show(null, null);\n }\n if (this.isMobile) {\n this.popupObj.refreshPosition();\n }\n };\n DateRangePicker.prototype.renderCustomPopup = function () {\n this.isCustomWindow = true;\n this.popupObj.hide();\n this.popupWrapper = this.createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.renderControl();\n this.openEventArgs.appendTo.appendChild(this.popupWrapper);\n this.showPopup();\n this.isCustomRange = true;\n if (!this.isMobile) {\n this.calendarFocus();\n }\n };\n DateRangePicker.prototype.listRippleEffect = function () {\n for (var _i = 0, _a = this.liCollections; _i < _a.length; _i++) {\n var li = _a[_i];\n rippleEffect(li);\n }\n };\n DateRangePicker.prototype.createPresets = function () {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.presetElement = this.createElement('div', { className: PRESETS, attrs: { 'tabindex': '0' } });\n var listTag = ListBase.createList(this.createElement, this.presetsItem, null, true);\n attributes(listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options', 'tabindex': '0', 'aria-label': 'daterangepicker-preset' });\n this.presetElement.appendChild(listTag);\n this.popupWrapper.appendChild(this.presetElement);\n var customElement = this.presetElement.querySelector('#custom_range');\n if (!isNullOrUndefined(customElement)) {\n customElement.textContent = this.l10n.getConstant('customRange') !== '' ? this.l10n.getConstant('customRange')\n : 'Custom Range';\n }\n this.liCollections = this.presetElement.querySelectorAll('.' + LISTCLASS);\n this.wireListEvents();\n if (this.isMobile) {\n if (this.fullScreenMode) {\n var modelWrapper = createElement('div', { className: 'e-range-mob-popup-wrap' });\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement(\"span\", { className: \"e-model-title\" });\n modelTitleSpan.textContent = \"Select Preset\";\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.modelRangeCloseHandler, this);\n var presetContent = this.presetElement;\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n modelWrapper.appendChild(modelHeader);\n modelWrapper.appendChild(presetContent);\n this.popupWrapper.insertBefore(modelWrapper, this.popupWrapper.firstElementChild);\n this.presetElement.style.width = '100%';\n }\n else {\n this.presetElement.style.width = this.inputWrapper.container.getBoundingClientRect().width + 'px';\n }\n }\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex > -1) {\n addClass([this.liCollections[this.activeIndex]], ACTIVE);\n }\n }\n };\n DateRangePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.presetElement, 'click', this.onMouseClick, this);\n if (!this.isMobile) {\n EventHandler.add(this.presetElement, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.presetElement, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateRangePicker.prototype.unWireListEvents = function () {\n if (!isNullOrUndefined(this.presetElement)) {\n EventHandler.remove(this.presetElement, 'click touchstart', this.onMouseClick);\n if (!this.isMobile) {\n EventHandler.remove(this.presetElement, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.presetElement, 'mouseout', this.onMouseLeave);\n }\n }\n };\n DateRangePicker.prototype.renderPopup = function () {\n var _this = this;\n this.popupWrapper.classList.add('e-control');\n var popupWidth = this.popupWrapper.getBoundingClientRect().width;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass.trim() !== '') {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (this.isMobile && this.isCustomWindow) {\n this.modal = this.createElement('div');\n document.body.appendChild(this.modal);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n relateTo: this.isMobile && this.isCustomWindow ? document.body :\n (!isNullOrUndefined(this.targetElement) ? this.targetElement : this.inputWrapper.container),\n position: (this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'left', Y: 'bottom' } : { X: 'center', Y: 'center' }) :\n this.enableRtl ? { X: 'left', Y: 'bottom' } : { X: 'right', Y: 'bottom' }),\n offsetX: this.isMobile || this.enableRtl ? 0 : -popupWidth,\n offsetY: OFFSETVALUE,\n collision: this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'fit' } : { X: 'fit', Y: 'fit' }) : { X: 'fit', Y: 'flip' },\n targetType: this.isMobile && this.isCustomWindow ? 'container' : 'relative',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n open: function () {\n if (_this.isMobile && _this.fullScreenMode) {\n _this.iconRangeRight = _this.calendarElement && window.getComputedStyle(_this.calendarElement.querySelector('.e-header.e-month .e-prev')).cssFloat;\n if (_this.iconRangeRight) {\n _this.touchRangeModule = new Touch(_this.calendarElement.querySelector(\".e-content.e-month\"), {\n swipe: _this.dateRangeSwipeHandler.bind(_this)\n });\n EventHandler.add(_this.calendarElement.querySelector(\".e-content.e-month\"), \"touchstart\", _this.touchStartRangeHandler, _this);\n }\n }\n attributes(_this.inputElement, { 'aria-expanded': 'true', 'aria-owns': _this.element.id, 'aria-controls': _this.inputElement.id });\n if (_this.value) {\n attributes(_this.inputElement, { 'aria-activedescendant': _this.inputElement.id });\n }\n else {\n _this.inputElement.removeAttribute('aria-activedescendant');\n }\n addClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.cancelButton) {\n _this.btnKeyboardModule = new KeyboardEvents(_this.cancelButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { tab: 'tab', altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n _this.btnKeyboardModule = new KeyboardEvents(_this.applyButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n }\n if (!isNullOrUndefined(_this.leftCalendar)) {\n if (!_this.isRangeIconClicked) {\n _this.calendarFocus();\n }\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.keyInputConfigs = extend(_this.keyInputConfigs, _this.keyConfigs);\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.presetKeyActionHandler.bind(_this),\n keyConfigs: _this.keyInputConfigs\n });\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n if (isNullOrUndefined(_this.leftCalendar)) {\n _this.preventBlur = true;\n _this.presetElement.focus();\n }\n else {\n _this.presetElement.setAttribute('tabindex', '-1');\n }\n }\n _this.popupKeyBoardHandler();\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.add(document, 'keydown', _this.popupCloseHandler, _this);\n }\n },\n close: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n _this.inputElement.removeAttribute('aria-owns');\n _this.inputElement.removeAttribute('aria-controls');\n _this.inputElement.removeAttribute('aria-activedescendant');\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (_this.isRangeIconClicked) {\n _this.inputWrapper.container.children[1].focus();\n }\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label)) {\n _this.unWireListEvents();\n }\n if (!isNullOrUndefined(_this.popupObj)) {\n if (!isNullOrUndefined(_this.popupObj.element.parentElement)) {\n detach(_this.popupObj.element);\n }\n _this.popupObj.destroy();\n _this.popupObj = null;\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.remove(document, 'keydown', _this.popupCloseHandler);\n }\n }, targetExitViewport: function () {\n var popupEle = _this.popupObj && _this.popupObj.element;\n if (!Browser.isDevice && popupEle && popupEle.getBoundingClientRect().height < window.innerHeight) {\n _this.hide();\n }\n }\n });\n if (this.isMobile) {\n this.popupObj.element.classList.add(DEVICE);\n if (!this.isMobile) {\n this.popupObj.element.classList.add('e-bigger');\n }\n }\n if (this.isMobile && this.isCustomWindow) {\n addClass([this.modal], [DEVICE, ROOT, 'e-range-modal']);\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n };\n DateRangePicker.prototype.dateRangeSwipeHandler = function (e) {\n var direction = 0;\n if (this.iconRangeRight == 'left') {\n switch (e.swipeDirection) {\n case \"Left\":\n direction = 1;\n break;\n case \"Right\":\n direction = -1;\n break;\n default:\n break;\n }\n }\n else {\n switch (e.swipeDirection) {\n case \"Up\":\n direction = 1;\n break;\n case \"Down\":\n direction = -1;\n break;\n default:\n break;\n }\n }\n if (this.touchRangeStart) {\n if (direction === 1) {\n this.navigateNext(e);\n }\n else if (direction === -1) {\n this.navigatePrevious(e);\n }\n this.touchRangeStart = false;\n }\n };\n DateRangePicker.prototype.touchStartRangeHandler = function (e) {\n this.touchRangeStart = true;\n };\n DateRangePicker.prototype.popupCloseHandler = function (e) {\n switch (e.keyCode) {\n case 27:\n this.hide(e);\n break;\n }\n };\n DateRangePicker.prototype.calendarFocus = function () {\n var startDate = this.popupObj && this.popupObj.element.querySelector('.' + STARTDATE);\n if (startDate) {\n var ele = closest(startDate, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n ele.children[1].firstElementChild.focus();\n }\n addClass([startDate], FOCUSDATE);\n }\n else {\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n };\n DateRangePicker.prototype.presetHeight = function () {\n var presets = this.popupObj && this.popupObj.element.querySelector('.' + PRESETS);\n var rangeContainer = this.popupObj && this.popupObj.element.querySelector('.' + RANGECONTAINER);\n if (!isNullOrUndefined(presets) && !isNullOrUndefined(rangeContainer)) {\n presets.style.height = rangeContainer.getBoundingClientRect().height + 'px';\n }\n };\n DateRangePicker.prototype.presetKeyActionHandler = function (e) {\n switch (e.action) {\n case 'moveDown':\n this.listMoveDown(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'moveUp':\n this.listMoveUp(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'enter':\n {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(this.leftCalendar) && !isNullOrUndefined(actItem)) {\n if (isNullOrUndefined(hvrItem) || (!isNullOrUndefined(actItem) && actItem === hvrItem)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(actItem);\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.calendarFocus();\n actItem.classList.remove(HOVER);\n e.preventDefault();\n return;\n }\n }\n }\n if (!isNullOrUndefined(hvrItem) || !isNullOrUndefined(actItem)) {\n this.onMouseClick(e, hvrItem || actItem);\n }\n e.preventDefault();\n }\n break;\n case 'tab':\n if (this.leftCalendar) {\n var item = this.getHoverLI();\n if (!isNullOrUndefined(item)) {\n item.classList.remove(HOVER);\n }\n }\n else {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.listMoveDown = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n else {\n addClass([this.liCollections[0]], HOVER);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.listMoveUp = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n };\n DateRangePicker.prototype.getHoverLI = function () {\n var item = this.presetElement.querySelector('.' + HOVER);\n return item;\n };\n DateRangePicker.prototype.getActiveLI = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n return item;\n };\n DateRangePicker.prototype.popupKeyBoardHandler = function () {\n this.popupKeyboardModule = new KeyboardEvents(this.popupWrapper, {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: { escape: 'escape' }\n });\n this.keyInputConfigs = extend(this.keyInputConfigs, this.keyConfigs);\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n };\n DateRangePicker.prototype.setScrollPosition = function () {\n var listHeight = this.presetElement.getBoundingClientRect().height;\n var hover = this.presetElement.querySelector('.' + HOVER);\n var active = this.presetElement.querySelector('.' + ACTIVE);\n var element = !isNullOrUndefined(hover) ? hover : active;\n if (!isNullOrUndefined(element)) {\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.presetElement.scrollTop = nextEle ? (height - (listHeight / 2 + liHeight / 2)) : height;\n }\n else {\n this.presetElement.scrollTop = 0;\n }\n }\n };\n DateRangePicker.prototype.popupKeyActionHandle = function (e) {\n var presetElement = closest(e.target, '.' + PRESETS);\n switch (e.action) {\n case 'escape':\n if (this.isPopupOpen()) {\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[1].blur();\n }\n break;\n case 'enter':\n if (!this.isPopupOpen()) {\n this.show(null, e);\n }\n else {\n this.inputWrapper.container.children[1].focus();\n }\n break;\n case 'tab':\n this.hide(e);\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n else {\n if (document.activeElement === this.cancelButton.element && this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (document.activeElement === this.applyButton.element && this.applyButton.element.disabled !== true) {\n this.cancelButton.element.focus();\n }\n else {\n if (!isNullOrUndefined(this.presetElement) && (document.activeElement === this.cancelButton.element)) {\n this.presetElement.focus();\n }\n else {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n }\n e.preventDefault();\n break;\n }\n };\n DateRangePicker.prototype.documentHandler = function (e) {\n if (isNullOrUndefined(this.popupObj)) {\n return;\n }\n var target = e.target;\n if (!this.inputWrapper.container.contains(target) ||\n (!isNullOrUndefined(this.popupObj) && !closest(target, '[id=\"' + this.popupWrapper.id + '\"]') && e.type !== 'mousedown')) {\n if (e.type !== 'touchstart' && ((e.type === 'mousedown') ||\n this.closeEventArgs && !this.closeEventArgs.cancel)) {\n e.preventDefault();\n }\n }\n if ((isNullOrUndefined(this.targetElement) ||\n (!isNullOrUndefined(this.targetElement) && !(target === this.targetElement))) &&\n !(closest(target, '[id=\"' + this.popupWrapper.id + '\"]'))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && !(closest(target, '.e-daterangepicker.e-popup') && (!target.classList.contains('e-day'))) && (!target.classList.contains('e-dlg-overlay'))) {\n this.preventBlur = false;\n if (this.isPopupOpen() && document.body.contains(this.popupObj.element)) {\n this.applyFunction(e);\n if (!this.isMobile) {\n this.isRangeIconClicked = false;\n }\n }\n }\n };\n DateRangePicker.prototype.createInput = function () {\n if (this.fullScreenMode && this.isMobile) {\n this.cssClass += ' ' + \"e-popup-expand\";\n }\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n this.inputWrapper = Input.createInput({\n floatLabelType: this.floatLabelType,\n element: this.inputElement,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [DATERANGEICON]\n }, this.createElement);\n attributes(this.inputElement, {\n 'tabindex': '0', 'aria-expanded': 'false', 'role': 'combobox',\n 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n });\n Input.addAttributes({ 'aria-label': 'select', 'role': 'button' }, this.inputWrapper.buttons[0]);\n // if (!isNullOrUndefined(this.placeholder) && this.placeholder.trim() !== '') {\n // Input.addAttributes({ 'aria-placeholder': this.placeholder }, this.inputElement);\n // }\n this.setEleWidth(this.width);\n addClass([this.inputWrapper.container], DATERANGEWRAPPER);\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.inputElement.type === 'hidden') {\n this.inputWrapper.container.style.display = 'none';\n }\n this.refreshControl();\n this.previousEleValue = this.inputElement.value;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.startCopy = this.startDate;\n this.endCopy = this.endDate;\n };\n DateRangePicker.prototype.setEleWidth = function (width) {\n if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (this.width);\n }\n else if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n DateRangePicker.prototype.adjustLongHeaderWidth = function () {\n if (this.dayHeaderFormat === 'Wide') {\n addClass([this.popupWrapper], DAYHEADERLONG);\n }\n };\n DateRangePicker.prototype.refreshControl = function () {\n this.validateMinMax();\n if (this.strictMode) {\n this.validateRangeStrict();\n }\n var isDisabled = this.disabledDates();\n if (this.strictMode && (isDisabled)) {\n this.startValue = this.previousStartValue;\n this.setProperties({ startDate: this.startValue }, true);\n this.endValue = this.previousEndValue;\n this.setProperties({ endDate: this.endValue }, true);\n this.setValue();\n }\n this.updateInput();\n if (!this.strictMode) {\n this.validateRange();\n }\n if (!this.strictMode && (isDisabled)) {\n this.clearRange();\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) &&\n !isDisabled && !isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n this.errorClass();\n this.previousStartValue = isNullOrUndefined(this.startValue) || isNaN(+this.startValue) ? null : new Date(+this.startValue);\n this.previousEndValue = isNullOrUndefined(this.endValue) || isNaN(+this.endValue) ? null : new Date(+this.endValue);\n };\n DateRangePicker.prototype.updateInput = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var formatOption = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n var startDate = this.globalize.formatDate(this.startValue, formatOption);\n var endDate = this.globalize.formatDate(this.endValue, formatOption);\n Input.setValue(startDate + ' ' + this.separator + ' ' + endDate, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n Input.setValue(this.invalidValueString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n };\n DateRangePicker.prototype.checkInvalidRange = function (value) {\n if (!isNullOrUndefined(value)) {\n var invalid = false;\n var startinvalue = void 0;\n var endinvalue = void 0;\n var startString = null;\n var endString = null;\n var valueString = null;\n var startObject = false;\n var endObject = false;\n var invalidobject = false;\n if (typeof (value) === 'string') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length === 2) {\n startString = range[0];\n endString = range[1];\n }\n else {\n invalid = true;\n valueString = value;\n }\n }\n else {\n if (value.length > 0) {\n startinvalue = value[0];\n endinvalue = value[1];\n }\n else {\n startinvalue = value.start;\n endinvalue = value.end;\n }\n if (!(startinvalue instanceof Date) && typeof (startinvalue) !== 'object') {\n startString = this.getstringvalue(startinvalue);\n }\n else if (startinvalue instanceof Date) {\n startObject = true;\n }\n else if (!isNullOrUndefined(startinvalue)) {\n invalidobject = true;\n }\n if (!(endinvalue instanceof Date) && typeof (endinvalue) !== 'object') {\n endString = this.getstringvalue(endinvalue);\n }\n else if (endinvalue instanceof Date) {\n endObject = true;\n }\n else if (!isNullOrUndefined(endinvalue)) {\n invalidobject = true;\n }\n }\n if ((isNullOrUndefined(startString) && !startObject && !isNullOrUndefined(endString)) ||\n (!isNullOrUndefined(startString) && !endObject && isNullOrUndefined(endString))) {\n invalid = true;\n }\n if (invalidobject) {\n startString = endString = valueString = null;\n invalid = true;\n }\n if (startString) {\n invalid = invalid || this.checkInvalidValue(startString);\n }\n if (endString) {\n invalid = invalid || this.checkInvalidValue(endString);\n }\n if (invalid) {\n if (startObject && !invalidobject) {\n startString = startinvalue.toLocaleDateString();\n }\n if (endObject && !invalidobject) {\n endString = endinvalue.toLocaleDateString();\n }\n if (!isNullOrUndefined(startString) && !isNullOrUndefined(endString)) {\n valueString = startString + ' ' + this.separator + ' ' + endString;\n }\n else if (!isNullOrUndefined(startString)) {\n valueString = startString;\n }\n else if (!isNullOrUndefined(endString)) {\n valueString = endString;\n }\n this.invalidValueString = valueString;\n this.setProperties({ value: null }, true);\n this.setProperties({ startValue: null }, true);\n this.setProperties({ endValue: null }, true);\n this.startDate = null;\n this.endDate = null;\n }\n }\n };\n DateRangePicker.prototype.getstringvalue = function (value) {\n var stringValue = null;\n if (!isNullOrUndefined(value) && (typeof value === 'number')) {\n stringValue = (value).toString();\n }\n else if (!isNullOrUndefined(value) && (typeof value === 'string')) {\n stringValue = '' + value;\n }\n return stringValue;\n };\n DateRangePicker.prototype.checkInvalidValue = function (value) {\n var valueString = value;\n var invalid = false;\n var formatOpt = null;\n formatOpt = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n if (typeof valueString !== 'string') {\n invalid = true;\n }\n else {\n var globalize = new Internationalization(this.locale);\n if (!this.checkDateValue(globalize.parseDate(valueString, formatOpt))) {\n var extISOStr = null;\n var basISOString = null;\n // eslint-disable-next-line\n extISOStr = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOStr.test(valueString) && !basISOString.test(valueString))\n || (/^[a-zA-Z0-9- ]*$/).test(valueString) || isNaN(+new Date(this.checkValue(valueString)))) {\n invalid = true;\n }\n }\n }\n return invalid;\n };\n DateRangePicker.prototype.isDateDisabled = function (date) {\n if (isNullOrUndefined(date)) {\n return false;\n }\n var value = new Date(+date);\n if (+value < +this.min || +value > +this.max) {\n return true;\n }\n this.virtualRenderCellArgs = {\n date: value,\n isDisabled: false\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.disabledDateRender = function () {\n this.disabledDays = [];\n this.disabledDayCnt = null;\n var localDate = new Date(+this.startValue);\n var count = 0;\n while (+localDate <= +this.endValue && +this.endValue <= +this.max) {\n this.virtualRenderCellArgs = {\n date: localDate,\n isDisabled: false\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n this.disabledDays.push(new Date(+args.date));\n if (+localDate > +this.startValue && +localDate < +this.endValue) {\n count++;\n }\n }\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n this.disabledDayCnt = count;\n };\n DateRangePicker.prototype.virtualRenderCellEvent = function (args) {\n extend(this.virtualRenderCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n DateRangePicker.prototype.disabledDates = function () {\n var isStartDisabled = false;\n var isEndDisabled = false;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n isStartDisabled = this.isDateDisabled(this.startValue);\n isEndDisabled = this.isDateDisabled(this.endValue);\n if (!this.isPopupOpen()) {\n this.currentDate = null;\n }\n this.setValue();\n }\n return (isStartDisabled || isEndDisabled);\n };\n DateRangePicker.prototype.setModelValue = function () {\n if (!this.value && this.startDate === null && this.endDate === null) {\n this.setProperties({ value: null }, true);\n }\n else if (this.value === null || this.value.start === null) {\n if (this.value === null) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n else if (this.value.start === null) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n else {\n if ((this.value && this.value.length > 0) ||\n this.valueType && this.valueType.length > 0) {\n if (+this.startDate !== +this.value[0] || +this.endDate !== +this.value[1]) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n if (this.value && this.value[0] == null && this.value[1] == null) {\n this.setProperties({ value: null }, true);\n }\n }\n else {\n if ((this.value && this.value.start)) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n }\n this.createHiddenInput();\n };\n /**\n * To dispatch the event manually\n *\n * @param {HTMLElement} element - Specifies the element to dispatch the event.\n * @param {string} type - Specifies the name of the event.\n * @returns {void}\n */\n DateRangePicker.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n this.firstHiddenChild.dispatchEvent(evt);\n };\n DateRangePicker.prototype.changeTrigger = function (e) {\n if (+this.initStartDate !== +this.startValue || +this.initEndDate !== +this.endValue) {\n this.setProperties({ endDate: this.checkDateValue(this.endValue) }, true);\n this.setProperties({ startDate: this.checkDateValue(this.startValue) }, true);\n this.setModelValue();\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.rangeArgs(e));\n }\n }\n this.previousEleValue = this.inputElement.value;\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns {void}\n * @hidden\n */\n DateRangePicker.prototype.navigateTo = function (view, date) {\n if (this.isPopupOpen()) {\n if (view.toLowerCase() === 'month') {\n view = 'Month';\n }\n else if (view.toLowerCase() === 'year') {\n view = 'Year';\n }\n else if (view.toLowerCase() === 'decade') {\n view = 'Decade';\n }\n else {\n return;\n }\n if (this.getViewNumber(view) < this.getViewNumber(this.depth)) {\n view = this.depth;\n }\n if (this.isMobile) {\n _super.prototype.navigateTo.call(this, view, date);\n }\n else {\n if (date < this.min) {\n date = new Date(+this.min);\n }\n else if (date >= this.max) {\n date = new Date(+this.max);\n }\n if (view === 'Month' && this.isSameMonth(date, this.max)) {\n date = new Date(this.max.getFullYear(), this.max.getMonth() - 1, this.min.getDate());\n }\n else if (view === 'Year' && this.isSameYear(date, this.max)) {\n date = new Date((this.max.getFullYear() - 1), this.max.getMonth(), this.max.getDate());\n }\n else if (view === 'Decade' && this.isSameDecade(date, this.max)) {\n date = new Date((this.max.getFullYear() - 10), this.max.getMonth(), this.max.getDate());\n }\n this.leftCalCurrentDate = date;\n this.navigate(this.leftCalendar, this.leftCalCurrentDate, view);\n if (view === 'Month') {\n date = new Date(this.currentDate.setMonth(this.currentDate.getMonth() + 1));\n }\n else if (view === 'Year') {\n date = new Date(this.currentDate.setFullYear(this.currentDate.getFullYear() + 1));\n }\n else {\n date = new Date(this.currentDate.setFullYear(this.currentDate.getFullYear() + 10));\n }\n this.rightCalCurrentDate = date;\n this.navigate(this.rightCalendar, this.rightCalCurrentDate, view);\n this.leftKeyboardModule = this.rightKeyboardModule = null;\n this.updateNavIcons();\n }\n if (this.currentView() === this.depth) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n }\n };\n DateRangePicker.prototype.navigate = function (calendar, date, view) {\n this.calendarElement = calendar;\n this.table = calendar.querySelector('table');\n this.tableBodyElement = calendar.querySelector('tbody');\n this.headerTitleElement = calendar.querySelector('.e-title');\n this.tableHeadElement = calendar.querySelector('thead');\n this.contentElement = calendar.querySelector('.e-content');\n this.previousIcon = calendar.querySelector('.e-prev');\n this.nextIcon = calendar.querySelector('.e-next');\n this.effect = ZOOMIN;\n _super.prototype.navigateTo.call(this, view, date);\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.focus();\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.focusOut = function () {\n var isBlur = this.preventBlur;\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.preventBlur = false;\n this.inputElement.blur();\n this.preventBlur = isBlur;\n }\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.destroy = function () {\n this.unBindEvents();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n this.hide(null);\n var ariaAttrs = {\n 'tabindex': '0', 'aria-expanded': 'false', 'role': 'combobox',\n 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'aria-invalid': 'false', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n removeClass([this.inputElement], [ROOT]);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (!isNullOrUndefined(this.cloneElement.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n this.ensureInputAttribute();\n this.inputElement.classList.remove('e-input');\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n detach(this.inputWrapper.container);\n }\n }\n if (!isNullOrUndefined(this.inputKeyboardModule) && !this.isMobile) {\n this.inputKeyboardModule.destroy();\n }\n if (this.popupObj) {\n if (!this.isMobile) {\n this.clearCalendarEvents();\n }\n }\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n this.inputWrapper = this.popupWrapper = this.popupObj = this.cloneElement = this.presetElement = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n if ((!isNullOrUndefined(this.firstHiddenChild))\n && (!isNullOrUndefined(this.secondHiddenChild))) {\n detach(this.firstHiddenChild);\n detach(this.secondHiddenChild);\n this.firstHiddenChild = this.secondHiddenChild = null;\n this.inputElement.setAttribute('name', this.element.getAttribute('data-name'));\n this.inputElement.removeAttribute('data-name');\n }\n this.closeEventArgs = null;\n this.leftCalendar = null;\n this.rightTitle = null;\n this.leftTitle = null;\n this.openEventArgs = null;\n this.leftCalNextIcon = null;\n this.rightCalendar = null;\n this.closeEventArgs = null;\n this.rightCalPrevIcon = null;\n this.leftCalPrevIcon = null;\n this.popupKeyboardModule = null;\n this.cancelButton = null;\n this.applyButton = null;\n this.calendarElement = null;\n this.leftKeyboardModule = null;\n this.rightCalNextIcon = null;\n this.leftCalNextIcon = null;\n this.btnKeyboardModule = null;\n this.rightKeyboardModule = null;\n this.leftKeyboardModule = null;\n this.presetKeyboardModule = null;\n this.liCollections = null;\n this.popupObj = null;\n this.popupWrapper = null;\n };\n DateRangePicker.prototype.ensureInputAttribute = function () {\n var attr = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n attr[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < attr.length; i++) {\n if (isNullOrUndefined(this.cloneElement.getAttribute(attr[i]))) {\n if (attr[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(attr[i]);\n }\n else {\n if (attr[i].toLowerCase() === 'value') {\n this.inputElement.value = this.cloneElement.getAttribute(attr[i]);\n }\n this.inputElement.setAttribute(attr[i], this.cloneElement.getAttribute(attr[i]));\n }\n }\n };\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DateRangePicker.prototype.getModuleName = function () {\n return 'daterangepicker';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Return the properties that are maintained upon browser refresh.\n *\n * @returns {string}\n */\n DateRangePicker.prototype.getPersistData = function () {\n var keyEntity = ['startDate', 'endDate', 'value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Return the selected range and day span in the DateRangePicker.\n *\n * @returns {Object}\n */\n DateRangePicker.prototype.getSelectedRange = function () {\n var range;\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n }\n else {\n range = 0;\n }\n return { startDate: this.startValue, endDate: this.endValue, daySpan: range };\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * To open the Popup container in the DateRangePicker component.\n *\n * @param {HTMLElement} element - Specifies element.\n * @returns {void}\n */\n DateRangePicker.prototype.show = function (element, event) {\n var _this = this;\n if (this.isMobile && this.popupObj) {\n this.popupObj.refreshPosition();\n }\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n if (!this.isPopupOpen()) {\n if (element) {\n this.targetElement = element;\n }\n this.createPopup();\n if (this.isMobile || Browser.isDevice) {\n this.mobileRangePopupWrap = this.createElement('div', { className: 'e-daterangepick-mob-popup-wrap' });\n document.body.appendChild(this.mobileRangePopupWrap);\n }\n this.openEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null,\n appendTo: this.isMobile || Browser.isDevice ? this.mobileRangePopupWrap : document.body\n };\n var eventArgs = this.openEventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.openEventArgs = eventArgs;\n if (!_this.openEventArgs.cancel) {\n _this.openEventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.showPopup(element, event);\n var isPreset = (!_this.isCustomRange || (_this.isMobile && _this.isCustomRange));\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label) && isPreset) {\n _this.setScrollPosition();\n }\n _this.checkMinMaxDays();\n if ((_this.isMobile) && (!isNullOrUndefined(_this.startDate)) && (isNullOrUndefined(_this.endDate))) {\n _this.endButton.element.classList.add(ACTIVE);\n _this.startButton.element.classList.remove(ACTIVE);\n _this.endButton.element.removeAttribute('disabled');\n _this.selectableDates();\n }\n _super.prototype.setOverlayIndex.call(_this, _this.mobileRangePopupWrap, _this.popupObj.element, _this.modal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.isMobile || Browser.isDevice);\n }\n });\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.mobileRangePopupWrap.appendChild(dlgOverlay);\n }\n }\n }\n };\n /**\n * To close the Popup container in the DateRangePicker component.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.hide = function (event) {\n var _this = this;\n if (this.popupObj) {\n if (isNullOrUndefined(this.previousEndValue) && isNullOrUndefined(this.previousStartValue)) {\n this.clearRange();\n }\n else {\n if (!isNullOrUndefined(this.previousStartValue)) {\n this.startValue = new Date(this.checkValue(this.previousStartValue));\n this.setValue();\n this.currentDate = new Date(this.checkValue(this.startValue));\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n this.endValue = new Date(this.checkValue(this.previousEndValue));\n this.setValue();\n }\n else {\n this.endValue = null;\n this.setValue();\n }\n }\n if (this.isPopupOpen()) {\n this.closeEventArgs = {\n cancel: false,\n popup: this.popupObj,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null\n };\n var eventArgs = this.closeEventArgs;\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.closeEventArgs = eventArgs;\n if (!_this.closeEventArgs.cancel) {\n if (_this.isMobile) {\n if (!isNullOrUndefined(_this.startButton) && !isNullOrUndefined(_this.endButton)) {\n EventHandler.remove(_this.startButton.element, 'click touchstart', _this.deviceHeaderClick);\n EventHandler.remove(_this.endButton.element, 'click touchstart', _this.deviceHeaderClick);\n }\n }\n if (_this.popupObj) {\n _this.popupObj.hide();\n if (_this.preventBlur) {\n _this.inputElement.focus();\n addClass([_this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n if (!_this.isMobile) {\n if (!isNullOrUndefined(_this.leftKeyboardModule) && !isNullOrUndefined(_this.rightKeyboardModule)) {\n _this.leftKeyboardModule.destroy();\n _this.rightKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.presetKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(_this.cancelButton)) {\n _this.btnKeyboardModule.destroy();\n }\n }\n _this.targetElement = null;\n removeClass([document.body], OVERFLOW);\n EventHandler.remove(document, 'mousedown touchstart', _this.documentHandler);\n if (_this.isMobile && _this.modal) {\n _this.modal.style.display = 'none';\n _this.modal.outerHTML = '';\n _this.modal = null;\n }\n if (_this.isMobile || Browser.isDevice) {\n if (!isNullOrUndefined(_this.mobileRangePopupWrap)) {\n _this.mobileRangePopupWrap.remove();\n _this.mobileRangePopupWrap = null;\n }\n }\n _this.isKeyPopup = _this.dateDisabled = false;\n }\n else {\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n }\n _this.updateClearIconState();\n _this.updateHiddenInput();\n if (_this.isMobile && _this.allowEdit && !_this.readonly) {\n _this.inputElement.removeAttribute('readonly');\n }\n });\n }\n }\n else {\n this.updateClearIconState();\n this.updateHiddenInput();\n if (this.isMobile && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n DateRangePicker.prototype.setLocale = function () {\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.dateRangeOptions && this.dateRangeOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n }\n this.updateInput();\n this.updateHiddenInput();\n this.changeTrigger();\n };\n DateRangePicker.prototype.refreshChange = function () {\n this.checkView();\n this.refreshControl();\n this.changeTrigger();\n };\n DateRangePicker.prototype.setDate = function () {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.refreshChange();\n };\n DateRangePicker.prototype.enableInput = function () {\n if (+this.min <= +this.max) {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.element.hasAttribute('disabled')) {\n this.bindEvents();\n }\n }\n };\n DateRangePicker.prototype.clearModelvalue = function (newProp, oldProp) {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n if (oldProp.value && oldProp.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n else if (oldProp.value && oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n else if (oldProp.value && !oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n this.updateValue();\n this.setDate();\n };\n DateRangePicker.prototype.createHiddenInput = function () {\n if (isNullOrUndefined(this.firstHiddenChild) && isNullOrUndefined(this.secondHiddenChild)) {\n this.firstHiddenChild = this.createElement('input');\n this.secondHiddenChild = this.createElement('input');\n }\n if (!isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n this.inputElement.setAttribute('data-name', this.inputElement.getAttribute('name'));\n this.inputElement.removeAttribute('name');\n }\n attributes(this.firstHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name'), 'class': HIDDENELEMENT\n });\n attributes(this.secondHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name'), 'class': HIDDENELEMENT\n });\n var format = { format: this.formatString, type: 'datetime', skeleton: 'yMd' };\n this.firstHiddenChild.value = this.startDate && this.globalize.formatDate(this.startDate, format);\n this.secondHiddenChild.value = this.endDate && this.globalize.formatDate(this.endDate, format);\n this.inputElement.parentElement.appendChild(this.firstHiddenChild);\n this.inputElement.parentElement.appendChild(this.secondHiddenChild);\n };\n DateRangePicker.prototype.setMinMaxDays = function () {\n if (this.isPopupOpen()) {\n this.removeClassDisabled();\n this.checkMinMaxDays();\n if (this.isMobile) {\n this.selectableDates();\n }\n if (!this.strictMode && (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))) {\n this.removeSelection();\n }\n else {\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n }\n this.updateHeader();\n }\n };\n // eslint-disable-next-line @typescript-eslint/tslint/config\n DateRangePicker.prototype.getStartEndValue = function (date, isEnd) {\n if (this.depth === 'Month') {\n return this.checkDateValue(new Date(this.checkValue(date)));\n }\n else if (this.depth === 'Year') {\n return new Date(date.getFullYear(), date.getMonth() + (isEnd ? 1 : 0), isEnd ? 0 : 1);\n }\n else {\n return new Date(date.getFullYear(), isEnd ? 11 : 0, isEnd ? 31 : 1);\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DateRangePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DateRangePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n DateRangePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var format = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var openPopup = ['maxDays', 'minDays', 'value'];\n if (openPopup.indexOf(prop) < 0) {\n this.hide(null);\n }\n switch (prop) {\n case 'width':\n this.setEleWidth(this.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'separator':\n this.previousEleValue = this.inputElement.value;\n this.setProperties({ separator: newProp.separator }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.setProperties({ placeholder: newProp.placeholder }, true);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n this.setRangeAllowEdit();\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.tabIndex = -1;\n }\n break;\n case 'allowEdit':\n this.setRangeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkFormat();\n this.updateInput();\n this.changeTrigger();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.dateRangeOptions && this.dateRangeOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n }\n this.setLocale();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.setDataAttribute(true);\n this.checkHtmlAttributes(true);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'startDate':\n if (typeof newProp.startDate === 'string') {\n newProp.startDate = this.globalize.parseDate(newProp.startDate, format);\n }\n if (+this.initStartDate !== +newProp.startDate) {\n this.startValue = this.getStartEndValue(newProp.startDate, false);\n this.setDate();\n this.setValue();\n }\n break;\n case 'endDate':\n if (typeof newProp.endDate === 'string') {\n newProp.endDate = this.globalize.parseDate(newProp.endDate, format);\n }\n if (+this.initEndDate !== +newProp.endDate) {\n this.endValue = this.getStartEndValue(newProp.endDate, true);\n this.setDate();\n this.setValue();\n }\n break;\n case 'value':\n this.invalidValueString = null;\n this.checkInvalidRange(newProp.value);\n if (typeof (newProp.value) === 'string') {\n if (!this.invalidValueString) {\n var rangeArray = newProp.value.split(' ' + this.separator + ' ');\n this.value = [new Date(rangeArray[0]), new Date(rangeArray[1])];\n this.updateValue();\n this.setDate();\n }\n else {\n this.clearModelvalue(newProp, oldProp);\n }\n }\n else {\n if ((!isNullOrUndefined(newProp.value) && newProp.value.length > 0)\n || !isNullOrUndefined(newProp.value) && newProp.value.start) {\n this.valueType = newProp.value;\n if (newProp.value[0] === null || (newProp.value.start === null)) {\n if (newProp.value.length === 1 || (newProp.value.start)) {\n this.clearModelvalue(newProp, oldProp);\n }\n else if (newProp.value[1] === null ||\n (newProp.value.start === null)) {\n this.clearModelvalue(newProp, oldProp);\n }\n }\n else if ((+this.initStartDate !== +newProp.value[0]\n || +this.initEndDate !== +newProp.value[1]) ||\n (+this.initStartDate !== +(newProp.value.start\n || +this.initEndDate !== +newProp.value.start))) {\n if (newProp.value.length === 1) {\n this.modelValue = newProp.value;\n }\n else if (newProp.value.start) {\n this.modelValue = newProp.value;\n }\n this.updateValue();\n this.setDate();\n }\n }\n else {\n if (isNullOrUndefined(this.value)\n || newProp.value.start == null) {\n this.valueType = newProp.value;\n this.startValue = null;\n this.endValue = null;\n this.clearModelvalue(newProp, oldProp);\n }\n }\n }\n if (this.isPopupOpen()) {\n if (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.removeSelection();\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n return;\n }\n if (this.isMobile) {\n this.navigate(this.deviceCalendar, this.startValue, this.currentView());\n this.deviceHeaderUpdate();\n }\n else {\n this.navigate(this.leftCalendar, this.startValue, this.currentView());\n this.updateControl(this.leftCalendar);\n this.navigate(this.rightCalendar, this.endValue, this.currentView());\n this.updateControl(this.rightCalendar);\n }\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n this.updateHeader();\n this.applyButton.disabled = this.applyButton.element.disabled = false;\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n break;\n case 'minDays':\n this.setProperties({ minDays: newProp.minDays }, true);\n this.refreshChange();\n this.setMinMaxDays();\n break;\n case 'maxDays':\n this.setProperties({ maxDays: newProp.maxDays }, true);\n this.refreshChange();\n this.setMinMaxDays();\n break;\n case 'min':\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(newProp.min))) }, true);\n this.previousEleValue = this.inputElement.value;\n this.enableInput();\n this.refreshChange();\n break;\n case 'max':\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(newProp.max))) }, true);\n this.enableInput();\n this.refreshChange();\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.refreshChange();\n break;\n case 'presets':\n this.setProperties({ presets: newProp.presets }, true);\n this.processPresets();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'start':\n this.setProperties({ start: newProp.start }, true);\n this.refreshChange();\n break;\n case 'depth':\n this.setProperties({ depth: newProp.depth }, true);\n this.refreshChange();\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateRangePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateRangePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"locale\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Property('Gregorian')\n ], DateRangePicker.prototype, \"calendarMode\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"renderDayCell\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"startDate\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"endDate\", void 0);\n __decorate([\n Collection([{}], Presets)\n ], DateRangePicker.prototype, \"presets\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], DateRangePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"depth\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property('-')\n ], DateRangePicker.prototype, \"separator\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"minDays\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"maxDays\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property('Never')\n ], DateRangePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], DateRangePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"blur\", void 0);\n DateRangePicker = __decorate([\n NotifyPropertyChanges\n ], DateRangePicker);\n return DateRangePicker;\n}(CalendarBase));\nexport { DateRangePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { remove, addClass, detach, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, extend, getUniqueID, ChildProperty } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar TIMEICON = 'e-time-icon';\nvar CLEARICON = 'e-clear-icon';\nvar FOCUS = 'e-input-focus';\nvar LISTCLASS = 'e-list-item';\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nvar OVERFLOW = 'e-time-overflow';\nvar OFFSETVAL = 4;\nvar EDITABLE = 'e-non-edit';\nvar wrapperAttributes = ['title', 'class', 'style'];\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var TimePickerBase;\n(function (TimePickerBase) {\n // eslint-disable-next-line max-len, jsdoc/require-jsdoc\n function createListItems(createdEl, min, max, globalize, timeFormat, step) {\n var formatOptions;\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: timeFormat, type: 'time' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: timeFormat, type: 'time', calendar: 'islamic' };\n }\n var start;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n var end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(createdEl, listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\nvar TimeMaskPlaceholder = /** @class */ (function (_super) {\n __extends(TimeMaskPlaceholder, _super);\n function TimeMaskPlaceholder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('day')\n ], TimeMaskPlaceholder.prototype, \"day\", void 0);\n __decorate([\n Property('month')\n ], TimeMaskPlaceholder.prototype, \"month\", void 0);\n __decorate([\n Property('year')\n ], TimeMaskPlaceholder.prototype, \"year\", void 0);\n __decorate([\n Property('day of the week')\n ], TimeMaskPlaceholder.prototype, \"dayOfTheWeek\", void 0);\n __decorate([\n Property('hour')\n ], TimeMaskPlaceholder.prototype, \"hour\", void 0);\n __decorate([\n Property('minute')\n ], TimeMaskPlaceholder.prototype, \"minute\", void 0);\n __decorate([\n Property('second')\n ], TimeMaskPlaceholder.prototype, \"second\", void 0);\n return TimeMaskPlaceholder;\n}(ChildProperty));\nexport { TimeMaskPlaceholder };\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * <input id='timepicker' type='text'/>\n * <script>\n * var timePickerObj = new TimePicker({ value: new Date() });\n * timePickerObj.appendTo('#timepicker');\n * </script>\n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {TimePickerModel} options - Specifies the TimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n _this.invalidValueString = null;\n _this.isAngular = false;\n _this.preventChange = false;\n _this.maskedDateValue = '';\n _this.moduleName = _this.getModuleName();\n _this.timeOptions = options;\n return _this;\n }\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.angularTag = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n this.openPopupEventArgs = {\n appendTo: document.body\n };\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.updateHtmlAttributeToWrapper();\n this.setTimeAllowEdit();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setTimeZone();\n this.setValue(this.getFormattedValue(this.value));\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.anchor = this.inputElement;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputEleValue = this.getDateObject(this.inputElement.value);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n };\n TimePicker.prototype.setTimeZone = function () {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = this.serverTimezoneOffset;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n TimePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n TimePicker.prototype.setTimeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.clearIconState();\n };\n TimePicker.prototype.clearIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n else {\n addClass([this.inputWrapper.container], [EDITABLE]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n if (!isNullOrUndefined(this.value)) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.validationAttribute = function (target, input) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n input.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n this.checkTimeFormat();\n this.checkInvalidValue(this.value);\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date(this.checkInValue(this.value))) }, true);\n this.setProperties({ min: this.checkDateValue(new Date(this.checkInValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkInValue(this.max))) }, true);\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(this.scrollTo))) }, true);\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.checkAttributes(false); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.checkTimeFormat = function () {\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (!isNullOrUndefined(this.format.skeleton) && this.format.skeleton !== '') {\n var skeletonString = this.format.skeleton;\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: skeletonString });\n }\n else {\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: 'short' });\n }\n }\n else {\n this.formatString = null;\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n if (this.fullScreenMode && Browser.isDevice) {\n this.cssClass += ' ' + \"e-popup-expand\";\n }\n var updatedCssClassesValue = this.cssClass;\n var isBindClearAction = this.enableMask ? false : true;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassesValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n bindClearAction: isBindClearAction,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassesValue,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n }, this.createElement);\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n TimePicker.prototype.getCldrDateTimeFormat = function () {\n var culture = new Internationalization(this.locale);\n var cldrTime;\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.cldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.checkInvalidValue = function (value) {\n var isInvalid = false;\n if (typeof value !== 'object' && !isNullOrUndefined(value)) {\n var valueString = value;\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n var valueExpression = null;\n var valueExp = null;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n else if (typeof value === 'string') {\n if (!(/^[a-zA-Z0-9- ]*$/).test(value)) {\n valueExpression = this.setCurrentDate(this.getDateObject(value));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n }));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n }));\n }\n }\n }\n }\n valueExp = this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n });\n valueExpression = (!isNullOrUndefined(valueExp) && valueExp instanceof Date && !isNaN(+valueExp)) ? valueExp : null;\n if (isNullOrUndefined(valueExpression) && valueString.replace(/\\s/g, '').length) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || ((/^[a-zA-Z0-9- ]*$/).test(value)) || isNaN(+new Date('' + valueString))) {\n isInvalid = true;\n }\n else {\n valueExpression = new Date('' + valueString);\n }\n }\n if (isInvalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n this.initValue = null;\n }\n else {\n this.setProperties({ value: valueExpression }, true);\n this.initValue = this.value;\n }\n }\n };\n TimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimePicker.prototype.cldrFormat = function (type) {\n var cldrDateTimeString;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTimeString = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTimeString = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTimeString;\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n if (!isNullOrUndefined(this.cloneElement.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n }\n if (this.inputWrapper.container) {\n detach(this.inputWrapper.container);\n }\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n this.rippleFn = null;\n this.openPopupEventArgs = null;\n this.selectedElement = null;\n this.listTag = null;\n this.liCollections = null;\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n var propertyList = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n propertyList[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < propertyList.length; i++) {\n if (!isNullOrUndefined(this.cloneElement.getAttribute(propertyList[i]))) {\n this.inputElement.setAttribute(propertyList[i], this.cloneElement.getAttribute(propertyList[i]));\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = this.cloneElement.getAttribute(propertyList[i]);\n }\n }\n else {\n this.inputElement.removeAttribute(propertyList[i]);\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = this.createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n this.popupWrapper.setAttribute('aria-label', this.element.id);\n this.popupWrapper.setAttribute('role', 'dialog');\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.generateList();\n append([this.listWrapper], this.popupWrapper);\n }\n this.addSelection();\n this.renderPopup();\n detach(this.popupWrapper);\n };\n TimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n TimePicker.prototype.generateList = function () {\n this.createListItems();\n this.wireListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n TimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n enableRtl: this.enableRtl,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n offsetY: OFFSETVAL,\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n if (Browser.isDevice && this.fullScreenMode) {\n this.popupObj.element.style.maxHeight = \"100%\";\n this.popupObj.element.style.width = \"100%\";\n }\n else {\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n }\n if (Browser.isDevice && this.fullScreenMode) {\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement(\"span\", { className: \"e-model-title\" });\n modelTitleSpan.textContent = \"Select time\";\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.timePopupCloseHandler, this);\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n this.popupWrapper.insertBefore(modelHeader, this.popupWrapper.firstElementChild);\n }\n };\n TimePicker.prototype.timePopupCloseHandler = function (e) {\n this.hide();\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassesValue = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassesValue !== '') {\n addClass([this.inputWrapper.container], updatedClassesValue.split(' '));\n }\n }\n else if (key === 'style') {\n var timeStyle = this.inputWrapper.container.getAttribute(key);\n timeStyle = !isNullOrUndefined(timeStyle) ? (timeStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputWrapper.container.setAttribute(key, timeStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n TimePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n TimePicker.prototype.updateCssClass = function (cssClassNew, cssClassOld) {\n if (!isNullOrUndefined(cssClassOld)) {\n cssClassOld = (cssClassOld.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(cssClassNew)) {\n cssClassNew = (cssClassNew.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(cssClassNew, [this.inputWrapper.container], cssClassOld);\n if (this.popupWrapper) {\n Input.setCssClass(cssClassNew, [this.popupWrapper], cssClassOld);\n }\n };\n TimePicker.prototype.removeErrorClass = function () {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if ((this.validateState(value) && !this.invalidValueString) ||\n (this.enableMask && this.inputElement.value === this.maskedDateValue)) {\n this.removeErrorClass();\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.setCursorToEnd = function () {\n this.inputElement.setSelectionRange((this.inputElement).value.length, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n var gregorianFormat = '.dates.calendars.gregorian.dayPeriods.format.abbreviated';\n var mainVal = 'main.';\n meridian = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.formatString)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.compareFormatChange(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.compareFormatChange = function (value) {\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n TimePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n this.interopAdaptor.invokeMethodAsync('OnTimeIconClick');\n };\n TimePicker.prototype.popupHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n e.preventDefault();\n if (this.isPopupOpen()) {\n this.closePopup(0, e);\n }\n else {\n this.inputElement.focus();\n this.show(e);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.readonly) {\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n if (this.enableMask) {\n event.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n return;\n }\n else {\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n // eslint-disable-next-line no-self-assign\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (!((event.action == 'right' || event.action == 'left' || event.action == 'tab') || ((event.action == 'home' || event.action == 'end' || event.action == 'up' || event.action == 'down') && !this.isPopupOpen() && !this.enableMask))) {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n if (!this.isPopupOpen()) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupObj = this.popupWrapper = null;\n }\n if (this.enableMask && !this.readonly && !this.isPopupOpen()) {\n event.preventDefault();\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: event\n });\n }\n if (this.isPopupOpen()) {\n this.keyHandler(event);\n }\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n this.isNavigate = false;\n if (this.isPopupOpen()) {\n event.stopPropagation();\n }\n break;\n case 'open':\n this.show(event);\n break;\n case 'escape':\n this.updateInputValue(this.objToString(this.value));\n if (this.enableMask) {\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n case 'right':\n case 'left':\n case 'tab':\n case 'shiftTab':\n if (!this.isPopupOpen() && this.enableMask && !this.readonly) {\n if ((this.inputElement.selectionStart === 0 && this.inputElement.selectionEnd === this.inputElement.value.length) ||\n (this.inputElement.selectionEnd !== this.inputElement.value.length && event.action === 'tab') ||\n (this.inputElement.selectionStart !== 0 && event.action === 'shiftTab') || (event.action === 'left' || event.action === 'right')) {\n event.preventDefault();\n }\n this.notify('keyDownHandler', { module: 'MaskedDateTime',\n e: event\n });\n }\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n }\n };\n TimePicker.prototype.closePopup = function (delay, e) {\n var _this = this;\n if (this.isPopupOpen() && this.popupWrapper) {\n var args = {\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n name: 'open'\n };\n removeClass([document.body], OVERFLOW);\n this.trigger('close', args, function (args) {\n if (!args.cancel) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n _this.popupObj.hide(new Animation(animModel));\n removeClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n _this.inputElement.removeAttribute('aria-owns');\n _this.inputElement.removeAttribute('aria-controls');\n _this.inputElement.removeAttribute('aria-activedescendant');\n EventHandler.remove(document, 'mousedown touchstart', _this.documentClickHandler);\n }\n if (Browser.isDevice && _this.modal) {\n _this.modal.style.display = 'none';\n _this.modal.outerHTML = '';\n _this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(_this.mobileTimePopupWrap)) {\n _this.mobileTimePopupWrap.remove();\n _this.mobileTimePopupWrap = null;\n }\n }\n if (Browser.isDevice && _this.allowEdit && !_this.readonly) {\n _this.inputElement.removeAttribute('readonly');\n }\n });\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n };\n TimePicker.prototype.disposeServerPopup = function () {\n if (this.popupWrapper) {\n this.popupWrapper.style.visibility = 'hidden';\n this.popupWrapper.style.top = '-9999px';\n this.popupWrapper.style.left = '-9999px';\n this.popupWrapper.style.width = '0px';\n this.popupWrapper.style.height = '0px';\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.initValue = this.valueWithMinutes = this.compareFormatChange(this.inputElement.value);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li)) {\n this.checkValue(li.getAttribute('data-value'));\n if (this.enableMask) {\n this.createMask();\n }\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n this.updateInputValue(this.getValue(this.initValue));\n if (this.enableMask) {\n this.createMask();\n }\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n EventHandler.add(this.inputElement, 'input', this.inputEventHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n if (!Browser.isDevice) {\n this.keyConfigure = extend(this.keyConfigure, this.keyConfigs);\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n if (this.showClearButton && this.inputElement) {\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n }\n }\n };\n TimePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n TimePicker.prototype.formResetHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var timeValue = this.inputElement.getAttribute('value');\n var val = this.checkDateValue(this.inputEleValue);\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n val = null;\n timeValue = '';\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: val }, true);\n this.prevDate = this.value;\n this.valueWithMinutes = this.value;\n this.initValue = this.value;\n if (this.inputElement) {\n this.updateInputValue(timeValue);\n if (this.enableMask) {\n if (!timeValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.checkErrorState(timeValue);\n this.prevValue = this.inputElement.value;\n }\n }\n };\n TimePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n TimePicker.prototype.inputEventHandler = function () {\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.unBindEvents = function () {\n if (this.inputWrapper) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'input', this.inputEventHandler);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n if (this.showClearButton && !isNullOrUndefined(this.inputWrapper) && !isNullOrUndefined(this.inputWrapper.clearButton)) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n };\n TimePicker.prototype.raiseClearedEvent = function (e) {\n var clearedArgs = {\n event: e\n };\n this.trigger('cleared', clearedArgs);\n };\n TimePicker.prototype.clearHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n if (!isNullOrUndefined(this.value)) {\n this.clear(e);\n }\n else {\n this.resetState();\n this.raiseClearedEvent(e);\n }\n if (this.popupWrapper) {\n this.popupWrapper.scrollTop = 0;\n }\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.raiseClearedEvent(event);\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n if (!inputVal) {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(val) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(val) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.getValue(date);\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, false);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.getDateObject(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n this.updateInputValue(value_1);\n if (this.enableMask) {\n if (!value_1) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n else {\n this.updateInputValue(time);\n if (this.enableMask) {\n if (time === '') {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(time) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(time) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n return time;\n };\n TimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n var collections = this.timeCollections;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(collections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n this.selectNextItem(event);\n }\n };\n TimePicker.prototype.selectNextItem = function (event) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || !isNullOrUndefined(this.inputWrapper)\n && this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n if (this.enableMask) {\n this.selectInputText();\n }\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (e) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n event: (e || null),\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n this.invalidValueString = null;\n this.checkErrorState(this.value);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(this.prevDate);\n }\n this.prevDate = this.valueWithMinutes = date;\n if ((typeof date !== 'number') || (this.value && +new Date(+this.value).setMilliseconds(0)) !== +date) {\n this.setProperties({ value: date }, true);\n if (this.enableMask && this.value) {\n this.createMask();\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.checkErrorState(this.invalidValueString);\n this.updateInputValue(this.invalidValueString);\n }\n this.clearIconState();\n };\n TimePicker.prototype.setActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n TimePicker.prototype.removeSelection = function () {\n this.removeHover(HOVER);\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n if (items.length) {\n removeClass(items, SELECTED);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.removeHover = function (className) {\n var hoveredItem = this.getHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n if (className === NAVIGATION) {\n hoveredItem[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.getHoverItem = function (className) {\n var hoveredItem;\n if (!isNullOrUndefined(this.popupWrapper)) {\n hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n TimePicker.prototype.setActiveClass = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if ((this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes))) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n };\n TimePicker.prototype.addSelection = function () {\n this.selectedElement = null;\n this.removeSelection();\n this.setActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n TimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n TimePicker.prototype.createDateObj = function (val) {\n var formatStr = null;\n var today = this.globalize.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n var value = null;\n if (typeof val === 'string') {\n if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n today = this.defaultCulture.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n if (isNullOrUndefined(value)) {\n value = this.timeParse(today, val);\n }\n }\n else {\n value = this.timeParse(today, val);\n }\n }\n else if (val instanceof Date) {\n value = val;\n }\n return value;\n };\n TimePicker.prototype.timeParse = function (today, val) {\n var value;\n value = this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n });\n value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n }) : value;\n value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n return value;\n };\n TimePicker.prototype.createListItems = function () {\n var _this = this;\n this.listWrapper = this.createElement('div', { className: CONTENT, attrs: { 'tabindex': '-1' } });\n var start;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n var end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs, function (eventArgs) {\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n });\n }\n };\n this.listTag = ListBase.createList(this.createElement, listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options', 'tabindex': '0' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + this.popupObj.element.id + '\"]')) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n target !== (this.inputWrapper && this.inputWrapper.container)\n && (!target.classList.contains('e-dlg-overlay'))) {\n if (this.isPopupOpen()) {\n this.hide();\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement)\n && (target === this.popupWrapper);\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n this.inputElement.tabIndex = -1;\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date(this.checkInValue(date.min)));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date(this.checkInValue(date.max)));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n TimePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup(0, e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n removeClass([this.inputWrapper.container], [FOCUS]);\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, e);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n if (this.inputElement.value === '') {\n this.invalidValueString = null;\n }\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n };\n /**\n * Focuses out the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n TimePicker.prototype.inputFocusHandler = function () {\n if (!this.enabled) {\n return;\n }\n var focusArguments = {\n model: this\n };\n if (!this.readonly && !Browser.isDevice && !this.enableMask) {\n this.selectInputText();\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n this.trigger('focus', focusArguments);\n this.clearIconState();\n if (this.openOnFocus) {\n this.show();\n }\n };\n /**\n * Focused the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n }\n };\n /**\n * Hides the TimePicker popup.\n *\n * @returns {void}\n * @deprecated\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100, null);\n this.clearIconState();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup to show the list items.\n *\n * @returns {void}\n * @deprecated\n */\n TimePicker.prototype.show = function (event) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n return;\n }\n else {\n this.popupCreation();\n if (Browser.isDevice && this.listWrapper) {\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n document.body.appendChild(this.modal);\n }\n if (Browser.isDevice) {\n this.mobileTimePopupWrap = this.createElement('div', { className: 'e-timepicker-mob-popup-wrap' });\n document.body.appendChild(this.mobileTimePopupWrap);\n }\n this.openPopupEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n event: event || null,\n name: 'open',\n appendTo: Browser.isDevice ? this.mobileTimePopupWrap : document.body\n };\n var eventArgs = this.openPopupEventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.openPopupEventArgs = eventArgs;\n if (!_this.openPopupEventArgs.cancel && !_this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n _this.openPopupEventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupAlignment(_this.openPopupEventArgs);\n _this.setScrollPosition();\n if (!Browser.isDevice) {\n _this.inputElement.focus();\n }\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION\n };\n _this.popupObj.refreshPosition(_this.anchor);\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n _this.setActiveDescendant();\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n attributes(_this.inputElement, { 'aria-controls': _this.inputElement.id });\n addClass([_this.inputWrapper.container], FOCUS);\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n _this.setOverlayIndex(_this.mobileTimePopupWrap, _this.popupObj.element, _this.modal, Browser.isDevice);\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.listTag = undefined;\n _this.liCollections = _this.timeCollections = _this.disableItemCollection = [];\n _this.popupObj = null;\n }\n });\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.mobileTimePopupWrap.appendChild(dlgOverlay);\n }\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n TimePicker.prototype.setOverlayIndex = function (popupWrapper, timePopupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(timePopupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(timePopupElement.style.zIndex, 10) ? parseInt(timePopupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n TimePicker.prototype.formatValues = function (type) {\n var value;\n if (typeof type === 'number') {\n value = formatUnit(type);\n }\n else if (typeof type === 'string') {\n value = (type.match(/px|%|em/)) ? type : isNaN(parseInt(type, 10)) ? type : formatUnit(type);\n }\n return value;\n };\n TimePicker.prototype.popupAlignment = function (args) {\n args.popup.position.X = this.formatValues(args.popup.position.X);\n args.popup.position.Y = this.formatValues(args.popup.position.Y);\n if (!isNaN(parseFloat(args.popup.position.X)) || !isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.targetType = 'container';\n }\n if (!isNaN(parseFloat(args.popup.position.X))) {\n this.popupObj.offsetX = parseFloat(args.popup.position.X);\n }\n if (!isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.offsetY = parseFloat(args.popup.position.Y);\n }\n if (!Browser.isDevice) {\n switch (args.popup.position.X) {\n case 'left':\n break;\n case 'right':\n args.popup.offsetX = this.containerStyle.width;\n break;\n case 'center':\n args.popup.offsetX = -(this.containerStyle.width / 2);\n break;\n }\n switch (args.popup.position.Y) {\n case 'top':\n break;\n case 'bottom':\n break;\n case 'center':\n args.popup.offsetY = -(this.containerStyle.height / 2);\n break;\n }\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.inputWrapper.container;\n this.anchor = this.inputElement;\n this.popupObj.targetType = 'relative';\n }\n }\n else {\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.offsetY = 0;\n this.popupObj.targetType = 'container';\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {TimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n this.setTimeAllowEdit();\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n this.setEnable();\n break;\n case 'allowEdit':\n this.setTimeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.timeOptions && this.timeOptions.placeholder == null) {\n this.updatePlaceHolder();\n }\n this.setValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkTimeFormat();\n this.setValue(this.value);\n if (this.enableMask) {\n this.createMask();\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'value':\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n if (!this.invalidValueString) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n newProp.value = this.value;\n }\n else {\n if ((newProp.value && +new Date(+newProp.value).setMilliseconds(0)) !== +this.value) {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n }\n this.initValue = newProp.value;\n newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n }\n else {\n this.updateInputValue(this.invalidValueString);\n this.checkErrorState(this.invalidValueString);\n }\n if (this.enableMask && isNullOrUndefined(newProp.value)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.checkValueChange(null, false);\n if (this.isPopupOpen()) {\n this.setScrollPosition();\n }\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo)))) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n }\n }\n };\n TimePicker.prototype.checkInValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property({})\n ], TimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], TimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///<reference path='../datepicker/datepicker-model.d.ts'/>\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = 'e-list-item';\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * <input id=\"dateTimePicker\"/>\n * ```\n * ```typescript\n * <script>\n * let dateTimePickerObject:DateTimePicker = new DateTimePicker({ value: new Date() });\n * dateTimePickerObject.appendTo(\"#dateTimePicker\");\n * </script>\n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DateTimePickerModel} options - Specifies the DateTimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.scrollInvoked = false;\n _this.moduleName = _this.getModuleName();\n _this.formatRegex = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yyy|yy|y|'[^']*'|'[^']*'/g;\n _this.dateFormatString = '';\n _this.dateTimeOptions = options;\n return _this;\n }\n DateTimePicker.prototype.focusHandler = function () {\n if (!this.enabled) {\n return;\n }\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusIn = function () {\n _super.prototype.focusIn.call(this);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateTimePicker.prototype.blurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isTimePopupOpen() && this.isPreventBlur) {\n this.inputElement.focus();\n return;\n }\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n var blurArguments = {\n model: this\n };\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n this.trigger('blur', blurArguments);\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.popupObject.destroy();\n detach(this.dateTimeWrapper);\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n this.liCollections = null;\n this.rippleFn = null;\n this.selectedElement = null;\n this.listTag = null;\n this.timeIcon = null;\n this.popupObject = null;\n this.preventArgs = null;\n this.keyboardModule = null;\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.isPreventBlur = false;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n if (typeof (this.min) === 'string') {\n this.min = this.checkDateValue(new Date(this.min));\n }\n if (typeof (this.max) === 'string') {\n this.max = this.checkDateValue(new Date(this.max));\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n _super.prototype.updateHtmlAttributeToElement.call(this);\n this.checkAttributes(false);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n _super.prototype.updateHtmlAttributeToWrapper.call(this);\n this.bindInputEvents();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.setValue(true);\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(this.scrollTo))) }, true);\n this.previousDateTime = this.value && new Date(+this.value);\n if (this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n if (!this.enabled) {\n this.inputElement.tabIndex = -1;\n }\n }\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n this.renderComplete();\n };\n DateTimePicker.prototype.setValue = function (isDynamic) {\n if (isDynamic === void 0) { isDynamic = false; }\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this, isDynamic);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n var dateOptions;\n if (!isNullOrUndefined(value)) {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n return this.globalize.formatDate(value, dateOptions);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.isDateObject = function (value) {\n return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n };\n DateTimePicker.prototype.createInputElement = function () {\n removeClass([this.inputElement], DATEPICKERROOT);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n addClass([this.inputElement], ROOT);\n this.renderTimeIcon();\n };\n DateTimePicker.prototype.renderTimeIcon = function () {\n this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n };\n DateTimePicker.prototype.bindInputEvents = function () {\n EventHandler.add(this.timeIcon, 'mousedown', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.blurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n }\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n if (this.calendarMode === 'Gregorian') {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n }\n else {\n return getValue('main.' + '' + this.locale + '.dates.calendars.islamic.timeFormats.short', ld);\n }\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n else {\n this.inputElement.focus();\n this.popupCreation('time', e);\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n this.isIconClicked = false;\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled) {\n return;\n }\n else {\n if (type === 'time' && !this.dateTimeWrapper) {\n if (this.isDatePopupOpen()) {\n this.hide(e);\n }\n this.popupCreation('time', e);\n }\n else if (!this.popupObj) {\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n _super.prototype.show.call(this);\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.toggle = function (e) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n this.show('time', null);\n }\n else if (this.isTimePopupOpen()) {\n this.hide(e);\n _super.prototype.show.call(this, null, e);\n this.popupCreation('date', null);\n }\n else {\n this.show(null, e);\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var dateObject;\n if (this.calendarMode === 'Gregorian') {\n this.cldrDateTimeFormat().replace(this.formatRegex, this.TimePopupFormat());\n if (this.dateFormatString === '') {\n this.dateFormatString = this.cldrDateTimeFormat();\n }\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.dateFormatString, type: 'datetime'\n });\n }\n else {\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.cldrDateTimeFormat(), type: 'datetime', calendar: 'islamic'\n });\n }\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n dateObject : new Date() : this.value;\n this.valueWithMinutes = value;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var min = this.startTime(value);\n var max = this.endTime(value);\n var listDetails = TimePickerBase.createListItems(this.createElement, min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type, e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (type === 'date') {\n if (!this.readonly && this.popupWrapper) {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_options' });\n }\n }\n else {\n if (!this.readonly) {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.listCreation();\n append([this.listWrapper], this.dateTimeWrapper);\n }\n document.body.appendChild(this.dateTimeWrapper);\n this.addTimeSelection();\n this.renderPopup();\n this.setTimeScrollPosition();\n this.openPopup(e);\n if (!Browser.isDevice || (Browser.isDevice && !this.fullScreenMode)) {\n this.popupObject.refreshPosition(this.inputElement);\n }\n if (Browser.isDevice && this.fullScreenMode) {\n this.dateTimeWrapper.style.left = '0px';\n }\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.timeModal.appendChild(dlgOverlay);\n }\n }\n }\n };\n DateTimePicker.prototype.openPopup = function (e) {\n var _this = this;\n this.preventArgs = {\n cancel: false,\n popup: this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (!_this.preventArgs.cancel && !_this.readonly) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n if (_this.zIndex === 1000) {\n _this.popupObject.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObject.show(new Animation(openAnimation), null);\n }\n addClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n attributes(_this.inputElement, { 'aria-controls': _this.inputElement.id });\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n }\n });\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObject) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObject.element && this.popupObject.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + (this.popupObject && this.popupObject.element.id + '\"]'))) && target !== this.inputElement\n && target !== this.timeIcon && !isNullOrUndefined(this.inputWrapper) && target !== this.inputWrapper.container && !target.classList.contains('e-dlg-overlay')) {\n if (this.isTimePopupOpen()) {\n this.hide(event);\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = ((document.activeElement === this.inputElement) && (Browser.isIE || Browser.info.name === 'edge')\n && target === this.popupObject.element);\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.timekeyConfigure = extend(_this.timekeyConfigure, _this.keyConfigs);\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.timeKeyActionHandle.bind(_this),\n keyConfigs: _this.timekeyConfigure,\n eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = undefined;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (Browser.isDevice && this.fullScreenMode) {\n this.popupObject.element.style.display = \"flex\";\n this.popupObject.element.style.maxHeight = \"100%\";\n this.popupObject.element.style.width = \"100%\";\n }\n else {\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n }\n if (Browser.isDevice && this.fullScreenMode) {\n var modelWrapper = createElement('div', { className: 'e-datetime-mob-popup-wrap' });\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement(\"span\", { className: \"e-model-title\" });\n modelTitleSpan.textContent = \"Select time\";\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.dateTimeCloseHandler, this);\n var timeContent = this.dateTimeWrapper.querySelector(\".e-content\");\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n modelWrapper.appendChild(modelHeader);\n modelWrapper.appendChild(timeContent);\n this.dateTimeWrapper.insertBefore(modelWrapper, this.dateTimeWrapper.firstElementChild);\n }\n };\n DateTimePicker.prototype.dateTimeCloseHandler = function (e) {\n this.hide();\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n // eslint-disable-next-line no-self-assign\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n if (Browser.isDevice && this.fullScreenMode) {\n return popupHeight;\n }\n else {\n return popupHeight > height ? height : popupHeight;\n }\n };\n DateTimePicker.prototype.changeEvent = function (e) {\n _super.prototype.changeEvent.call(this, e);\n if ((this.value && this.value.valueOf()) !== (this.previousDateTime && +this.previousDateTime.valueOf())) {\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n this.previousDateTime = this.value && new Date(+this.value);\n }\n };\n DateTimePicker.prototype.updateValue = function (e) {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs = {\n value: this.value, event: e || null,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.previousDate = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n this.findScrollTop(popupElement);\n }\n else if (this.dateTimeWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n DateTimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextElement = element.nextElementSibling;\n var height = nextElement ? nextElement.offsetTop : element.offsetTop;\n var lineHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n if (Browser.isDevice && this.fullScreenMode) {\n var listContent = this.dateTimeWrapper.querySelector('.e-content');\n listContent.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setScrollTo = function () {\n var element;\n var items = this.dateTimeWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length >= 0) {\n this.scrollInvoked = true;\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousElementValue = this.inputElement.value;\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n if (this.enableMask) {\n this.createMask();\n }\n }\n this.updateIconState();\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide(event);\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue(event);\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.TimePopupFormat = function () {\n var format = '';\n var formatCount = 0;\n var proxy = this;\n function formatValueSpecifier(formattext) {\n switch (formattext) {\n case 'd':\n case 'dd':\n case 'ddd':\n case 'dddd':\n case 'M':\n case 'MM':\n case 'MMM':\n case 'MMMM':\n case 'y':\n case 'yy':\n case 'yyy':\n case 'yyyy':\n if (format == '') {\n format = format + formattext;\n }\n else {\n format = format + \"/\" + formattext;\n }\n formatCount = formatCount + 1;\n break;\n }\n if (formatCount > 2) {\n proxy.dateFormatString = format;\n }\n return format;\n }\n return formatValueSpecifier;\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function (e) {\n var _this = this;\n if (this.popupObj || this.dateTimeWrapper) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObj || this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n if (isNullOrUndefined(this.popupObj)) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.dateTimeCloseEventCallback(e, eventArgs);\n });\n }\n else {\n this.dateTimeCloseEventCallback(e, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n DateTimePicker.prototype.dateTimeCloseEventCallback = function (e, eventArgs) {\n this.preventArgs = eventArgs;\n if (!this.preventArgs.cancel) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup(e);\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n }\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateTimePicker.prototype.closePopup = function (e) {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-controls');\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n this.checkFormat();\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.preRender.call(this);\n removeClass([this.inputElementCopy], [ROOT]);\n };\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === 'true' ||\n this.inputElement.getAttribute(prop) === '' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.calendarMode === 'Islamic') {\n modules.push({ args: [this], member: 'islamic', name: 'Islamic' });\n }\n if (this.enableMask) {\n modules.push(this.maskedDateModule());\n }\n return modules;\n };\n DateTimePicker.prototype.maskedDateModule = function () {\n var modules = { args: [this], member: 'MaskedDateTime' };\n return modules;\n };\n DateTimePicker.prototype.getTimeActiveElement = function () {\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.createDateObj = function (val) {\n return val instanceof Date ? val : null;\n };\n DateTimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = this.valueWithMinutes;\n var status_1 = !isNullOrUndefined(value);\n if (this.checkDateValue(dateValue)) {\n var date = status_1 ? value.getDate() : DAY;\n var month = status_1 ? value.getMonth() : MONTH;\n var year = status_1 ? value.getFullYear() : YEAR;\n var hour = status_1 ? value.getHours() : HOUR;\n var minute = status_1 ? value.getMinutes() : MINUTE;\n var second = status_1 ? value.getSeconds() : SECOND;\n var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n if (!this.scrollInvoked) {\n return new Date(year, month, date, hour, minute, second, millisecond);\n }\n else {\n this.scrollInvoked = false;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds(), dateValue.getMilliseconds());\n }\n }\n }\n return null;\n };\n DateTimePicker.prototype.findNextTimeElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var dateTimeVal = null;\n var listCount = this.liCollections.length;\n if (!isNullOrUndefined(this.activeIndex) || !isNullOrUndefined(this.checkDateValue(value))) {\n if (event.action === 'home') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n this.activeIndex = 0;\n }\n else if (event.action === 'end') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n this.activeIndex = this.timeCollections.length - 1;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < listCount; i++) {\n if (+value < this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = listCount - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n }\n };\n DateTimePicker.prototype.setTimeValue = function (date, value) {\n var dateString;\n var time;\n var val = this.validateMinMaxRange(value);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = new Date(+this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = new Date(+this.valueWithMinutes);\n }\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.timeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.previousDateTime = this.value;\n }\n }\n else {\n this.updateValue(event);\n }\n this.hide(event);\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n event.stopPropagation();\n break;\n case 'escape':\n this.hide(event);\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle(event);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DateTimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DateTimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @deprecated\n */\n DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n newProp.value = this.validateValue(newProp.value);\n if (this.enableMask) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n if (this.popupObj) {\n this.popupUpdate();\n }\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger(null);\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask && this.value) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n if (!isNullOrUndefined(oldProp.cssClass)) {\n oldProp.cssClass = (oldProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newProp.cssClass)) {\n newProp.cssClass = (newProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container], oldProp.cssClass);\n if (this.dateTimeWrapper) {\n Input.setCssClass(newProp.cssClass, [this.dateTimeWrapper], oldProp.cssClass);\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.dateTimeOptions && this.dateTimeOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n }\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.updateInput.call(this);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkFormat();\n this.dateTimeFormat = this.formatString;\n this.setValue();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.tabIndex = -1;\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkValue(newProp.scrollTo)))) {\n if (this.dateTimeWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.maskedDateValue = '';\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n DateTimePicker.prototype.restoreValue = function () {\n this.previousDateTime = this.previousDate;\n this.currentDate = this.value ? this.value : new Date();\n this.valueWithMinutes = this.value;\n this.previousDate = this.value;\n this.previousElementValue = this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.getFormattedValue(this.inputValueCopy);\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property({})\n ], DateTimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"values\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateTimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateTimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], DateTimePicker.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], DateTimePicker.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DateTimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","import { L10n, getValue, getDefaultDateObject, cldrData } from '@syncfusion/ej2-base';\nvar ARROWLEFT = 'ArrowLeft';\nvar ARROWRIGHT = 'ArrowRight';\nvar ARROWUP = 'ArrowUp';\nvar ARROWDOWN = 'ArrowDown';\nvar TAB = 'Tab';\nvar SHIFTTAB = 'shiftTab';\nvar END = 'End';\nvar HOME = 'Home';\nvar MaskedDateTime = /** @class */ (function () {\n function MaskedDateTime(parent) {\n this.mask = '';\n this.defaultConstant = {\n day: 'day',\n month: 'month',\n year: 'year',\n hour: 'hour',\n minute: 'minute',\n second: 'second',\n dayOfTheWeek: 'day of the week'\n };\n this.hiddenMask = '';\n this.validCharacters = 'dMyhmHfasz';\n this.isDayPart = false;\n this.isMonthPart = false;\n this.isYearPart = false;\n this.isHourPart = false;\n this.isMinutePart = false;\n this.isSecondsPart = false;\n this.isMilliSecondsPart = false;\n this.monthCharacter = '';\n this.periodCharacter = '';\n this.isHiddenMask = false;\n this.isComplete = false;\n this.isNavigate = false;\n this.navigated = false;\n this.isBlur = false;\n this.formatRegex = /EEEEE|EEEE|EEE|EE|E|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yyy|yy|y|HH|H|hh|h|mm|m|fff|ff|f|aa|a|ss|s|zzzz|zzz|zz|z|'[^']*'|'[^']*'/g;\n this.isDeletion = false;\n this.isShortYear = false;\n this.isDeleteKey = false;\n this.isDateZero = false;\n this.isMonthZero = false;\n this.isYearZero = false;\n this.isLeadingZero = false;\n this.dayTypeCount = 0;\n this.monthTypeCount = 0;\n this.hourTypeCount = 0;\n this.minuteTypeCount = 0;\n this.secondTypeCount = 0;\n this.parent = parent;\n this.dateformat = this.getCulturedFormat();\n this.maskDateValue = this.parent.value != null ? new Date(+this.parent.value) : new Date();\n this.maskDateValue.setMonth(0);\n this.maskDateValue.setHours(0);\n this.maskDateValue.setMinutes(0);\n this.maskDateValue.setSeconds(0);\n this.previousDate = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n this.removeEventListener();\n this.addEventListener();\n }\n MaskedDateTime.prototype.getModuleName = function () {\n return 'MaskedDateTime';\n };\n MaskedDateTime.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('createMask', this.createMask, this);\n this.parent.on('setMaskSelection', this.validCharacterCheck, this);\n this.parent.on('inputHandler', this.maskInputHandler, this);\n this.parent.on('keyDownHandler', this.maskKeydownHandler, this);\n this.parent.on('clearHandler', this.clearHandler, this);\n };\n MaskedDateTime.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('createMask', this.createMask);\n this.parent.off('setMaskSelection', this.validCharacterCheck);\n this.parent.off('inputHandler', this.maskInputHandler);\n this.parent.off('keyDownHandler', this.maskKeydownHandler);\n this.parent.off('clearHandler', this.clearHandler);\n };\n MaskedDateTime.prototype.createMask = function (mask) {\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = false;\n this.dateformat = this.getCulturedFormat();\n if (this.parent.maskPlaceholder.day) {\n this.defaultConstant['day'] = this.parent.maskPlaceholder.day;\n }\n if (this.parent.maskPlaceholder.month) {\n this.defaultConstant['month'] = this.parent.maskPlaceholder.month;\n }\n if (this.parent.maskPlaceholder.year) {\n this.defaultConstant['year'] = this.parent.maskPlaceholder.year;\n }\n if (this.parent.maskPlaceholder.hour) {\n this.defaultConstant['hour'] = this.parent.maskPlaceholder.hour;\n }\n if (this.parent.maskPlaceholder.minute) {\n this.defaultConstant['minute'] = this.parent.maskPlaceholder.minute;\n }\n if (this.parent.maskPlaceholder.second) {\n this.defaultConstant['second'] = this.parent.maskPlaceholder.second;\n }\n if (this.parent.maskPlaceholder.dayOfTheWeek) {\n this.defaultConstant['dayOfTheWeek'] = this.parent.maskPlaceholder.dayOfTheWeek.toString();\n }\n this.getCUltureMaskFormat();\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.mask = this.previousValue = inputValue;\n this.parent.maskedDateValue = this.mask;\n if (this.parent.value) {\n this.navigated = true;\n this.isBlur = mask.isBlur;\n this.setDynamicValue();\n }\n };\n MaskedDateTime.prototype.getCUltureMaskFormat = function () {\n this.l10n = new L10n(this.parent.moduleName, this.defaultConstant, this.parent.locale);\n this.objectString = Object.keys(this.defaultConstant);\n for (var i = 0; i < this.objectString.length; i++) {\n this.defaultConstant[this.objectString[i].toString()] =\n this.l10n.getConstant(this.objectString[i].toString());\n }\n };\n MaskedDateTime.prototype.validCharacterCheck = function () {\n var start = this.parent.inputElement.selectionStart;\n if (this.parent.moduleName !== 'timepicker') {\n if (start === this.hiddenMask.length && this.mask === this.parent.inputElement.value) {\n start = 0;\n }\n }\n for (var i = start, j = start - 1; i < this.hiddenMask.length || j >= 0; i++, j--) {\n if (i < this.hiddenMask.length && this.validCharacters.indexOf(this.hiddenMask[i]) !== -1) {\n this.setSelection(this.hiddenMask[i]);\n return;\n }\n if (j >= 0 && this.validCharacters.indexOf(this.hiddenMask[j]) !== -1) {\n this.setSelection(this.hiddenMask[j]);\n return;\n }\n }\n };\n MaskedDateTime.prototype.setDynamicValue = function () {\n this.maskDateValue = new Date(+this.parent.value);\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = true;\n this.updateValue();\n if (!this.isBlur) {\n this.validCharacterCheck();\n }\n };\n MaskedDateTime.prototype.setSelection = function (validChar) {\n var start = -1;\n var end = 0;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === validChar) {\n end = i + 1;\n if (start === -1) {\n start = i;\n }\n }\n }\n if (start < 0) {\n start = 0;\n }\n this.parent.inputElement.setSelectionRange(start, end);\n };\n MaskedDateTime.prototype.maskKeydownHandler = function (args) {\n this.dayTypeCount = this.monthTypeCount = this.hourTypeCount = this.minuteTypeCount = this.secondTypeCount = 0;\n if (args.e.key === 'Delete') {\n this.isDeleteKey = true;\n return;\n }\n if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWLEFT || args.e.key === ARROWRIGHT\n || args.e.key === SHIFTTAB || args.e.key === TAB || args.e.action === SHIFTTAB ||\n args.e.key === END || args.e.key === HOME)) {\n var start = this.parent.inputElement.selectionStart;\n var end = this.parent.inputElement.selectionEnd;\n var length_1 = this.parent.inputElement.value.length;\n if ((start === 0 && end === length_1) && (args.e.key === TAB || args.e.action === SHIFTTAB)) {\n var index = args.e.action === SHIFTTAB ? end : 0;\n this.parent.inputElement.selectionStart = this.parent.inputElement.selectionEnd = index;\n }\n if (args.e.key === END || args.e.key === HOME) {\n var range = args.e.key === END ? length_1 : 0;\n this.parent.inputElement.selectionStart = this.parent.inputElement.selectionEnd = range;\n }\n this.navigateSelection(args.e.key === ARROWLEFT || args.e.action === SHIFTTAB || args.e.key === END ? true : false);\n }\n if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWUP || args.e.key === ARROWDOWN)) {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n this.dateAlteration(args.e.key === ARROWDOWN ? true : false);\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.inputElement.value = inputValue;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (formatText === this.hiddenMask[i]) {\n start = i;\n break;\n }\n }\n this.parent.inputElement.selectionStart = start;\n this.validCharacterCheck();\n }\n };\n MaskedDateTime.prototype.isPersist = function () {\n var isPersist = this.parent.isFocused || this.navigated;\n return isPersist;\n };\n MaskedDateTime.prototype.differenceCheck = function () {\n var start = this.parent.inputElement.selectionStart;\n var inputValue = this.parent.inputElement.value;\n var previousVal = this.previousValue.substring(0, start + this.previousValue.length - inputValue.length);\n var newVal = inputValue.substring(0, start);\n var newDateValue = new Date(+this.maskDateValue);\n var maxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (previousVal.indexOf(newVal) === 0 && (newVal.length === 0 ||\n this.previousHiddenMask[newVal.length - 1] !== this.previousHiddenMask[newVal.length])) {\n for (var i = newVal.length; i < previousVal.length; i++) {\n if (this.previousHiddenMask[i] !== '' && this.validCharacters.indexOf(this.previousHiddenMask[i]) >= 0) {\n this.isDeletion = this.handleDeletion(this.previousHiddenMask[i], false);\n }\n }\n if (this.isDeletion) {\n return;\n }\n }\n switch (this.previousHiddenMask[start - 1]) {\n case 'd':\n {\n var date = (this.isDayPart && newDateValue.getDate().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getDate() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.isDateZero = (newVal[start - 1] === '0');\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(date)) {\n return;\n }\n for (var i = 0; date > maxDate; i++) {\n date = parseInt(date.toString().slice(1), 10);\n }\n if (date >= 1) {\n newDateValue.setDate(date);\n this.isNavigate = date.toString().length === 2;\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n if (newDateValue.getMonth() !== this.maskDateValue.getMonth()) {\n return;\n }\n this.isDayPart = true;\n this.dayTypeCount = this.dayTypeCount + 1;\n }\n else {\n this.isDayPart = false;\n this.dayTypeCount = this.isDateZero ? this.dayTypeCount + 1 : this.dayTypeCount;\n }\n break;\n }\n case 'M':\n {\n var month = void 0;\n if (newDateValue.getMonth().toString().length < 2 && !this.isPersist()) {\n month = (this.isMonthPart ? (newDateValue.getMonth() + 1) * 10 : 0) + parseInt(newVal[start - 1], 10);\n }\n else {\n month = parseInt(newVal[start - 1], 10);\n }\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n this.isMonthZero = (newVal[start - 1] === '0');\n if (!isNaN(month)) {\n while (month > 12) {\n month = parseInt(month.toString().slice(1), 10);\n }\n if (month >= 1) {\n newDateValue.setMonth(month - 1);\n if (month >= 10 || month == 1) {\n if (this.isLeadingZero && month == 1) {\n this.isNavigate = month.toString().length === 1;\n this.isLeadingZero = false;\n }\n else {\n this.isNavigate = month.toString().length === 2;\n }\n }\n else {\n this.isNavigate = month.toString().length === 1;\n }\n if (newDateValue.getMonth() !== month - 1) {\n newDateValue.setDate(1);\n newDateValue.setMonth(month - 1);\n }\n if (this.isDayPart) {\n var previousMaxDate = new Date(this.previousDate.getFullYear(), this.previousDate.getMonth() + 1, 0).getDate();\n var currentMaxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (this.previousDate.getDate() === previousMaxDate && currentMaxDate <= previousMaxDate) {\n newDateValue.setDate(currentMaxDate);\n }\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n this.isMonthPart = true;\n this.monthTypeCount = this.monthTypeCount + 1;\n this.isLeadingZero = false;\n }\n else {\n newDateValue.setMonth(0);\n this.isLeadingZero = true;\n this.isMonthPart = false;\n this.monthTypeCount = this.isMonthZero ? this.monthTypeCount + 1 : this.monthTypeCount;\n }\n }\n else {\n var monthString = (this.getCulturedValue('months[stand-alone].wide'));\n var monthValue = Object.keys(monthString);\n this.monthCharacter += newVal[start - 1].toLowerCase();\n while (this.monthCharacter.length > 0) {\n var i = 1;\n for (var _i = 0, monthValue_1 = monthValue; _i < monthValue_1.length; _i++) {\n var months = monthValue_1[_i];\n if (monthString[i].toLowerCase().indexOf(this.monthCharacter) === 0) {\n newDateValue.setMonth(i - 1);\n this.isMonthPart = true;\n this.maskDateValue = newDateValue;\n return;\n }\n i++;\n }\n this.monthCharacter = this.monthCharacter.substring(1, this.monthCharacter.length);\n }\n }\n break;\n }\n case 'y':\n {\n var year = (this.isYearPart && (newDateValue.getFullYear().toString().length < 4\n && !this.isShortYear) ? newDateValue.getFullYear() * 10 : 0) + parseInt(newVal[start - 1], 10);\n var yearValue = (this.dateformat.match(/y/g) || []).length;\n yearValue = yearValue !== 2 ? 4 : yearValue;\n this.isShortYear = false;\n this.isYearZero = (newVal[start - 1] === '0');\n if (isNaN(year)) {\n return;\n }\n while (year > 9999) {\n year = parseInt(year.toString().slice(1), 10);\n }\n if (year < 1) {\n this.isYearPart = false;\n }\n else {\n newDateValue.setFullYear(year);\n if (year.toString().length === yearValue) {\n this.isNavigate = true;\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n this.isYearPart = true;\n }\n break;\n }\n case 'h':\n this.hour = (this.isHourPart && (newDateValue.getHours() % 12 || 12).toString().length < 2\n && !this.isPersist() ? (newDateValue.getHours() % 12 || 12) * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(this.hour)) {\n return;\n }\n while (this.hour > 12) {\n this.hour = parseInt(this.hour.toString().slice(1), 10);\n }\n newDateValue.setHours(Math.floor(newDateValue.getHours() / 12) * 12 + (this.hour % 12));\n this.isNavigate = this.hour.toString().length === 2;\n this.isHourPart = true;\n this.hourTypeCount = this.hourTypeCount + 1;\n break;\n case 'H':\n this.hour = (this.isHourPart && newDateValue.getHours().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getHours() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(this.hour)) {\n return;\n }\n for (var i = 0; this.hour > 23; i++) {\n this.hour = parseInt(this.hour.toString().slice(1), 10);\n }\n newDateValue.setHours(this.hour);\n this.isNavigate = this.hour.toString().length === 2;\n this.isHourPart = true;\n this.hourTypeCount = this.hourTypeCount + 1;\n break;\n case 'm':\n {\n var minutes = (this.isMinutePart && newDateValue.getMinutes().toString().length < 2\n && !this.isPersist() ? newDateValue.getMinutes() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(minutes)) {\n return;\n }\n for (var i = 0; minutes > 59; i++) {\n minutes = parseInt(minutes.toString().slice(1), 10);\n }\n newDateValue.setMinutes(minutes);\n this.isNavigate = minutes.toString().length === 2;\n this.isMinutePart = true;\n this.minuteTypeCount = this.minuteTypeCount + 1;\n break;\n }\n case 's':\n {\n var seconds = (this.isSecondsPart && newDateValue.getSeconds().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getSeconds() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(seconds)) {\n return;\n }\n for (var i = 0; seconds > 59; i++) {\n seconds = parseInt(seconds.toString().slice(1), 10);\n }\n newDateValue.setSeconds(seconds);\n this.isNavigate = seconds.toString().length === 2;\n this.isSecondsPart = true;\n this.secondTypeCount = this.secondTypeCount + 1;\n break;\n }\n case 'a':\n {\n this.periodCharacter += newVal[start - 1].toLowerCase();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var periodString = (this.getCulturedValue('dayPeriods.format.wide'));\n var periodkeys = Object.keys(periodString);\n for (var i = 0; this.periodCharacter.length > 0; i++) {\n if ((periodString[periodkeys[0]].toLowerCase().indexOf(this.periodCharacter) === 0\n && newDateValue.getHours() >= 12) || (periodString[periodkeys[1]].toLowerCase().\n indexOf(this.periodCharacter) === 0 && newDateValue.getHours() < 12)) {\n newDateValue.setHours((newDateValue.getHours() + 12) % 24);\n this.maskDateValue = newDateValue;\n }\n this.periodCharacter = this.periodCharacter.substring(1, this.periodCharacter.length);\n }\n break;\n }\n default:\n break;\n }\n this.maskDateValue = newDateValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n MaskedDateTime.prototype.formatCheck = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n function formatValueSpecifier(formattext) {\n var result;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysAbbreviated = proxy.getCulturedValue('days[stand-alone].abbreviated');\n var dayKeyAbbreviated = Object.keys(daysAbbreviated);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysWide = (proxy.getCulturedValue('days[stand-alone].wide'));\n var dayKeyWide = Object.keys(daysWide);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysNarrow = (proxy.getCulturedValue('days[stand-alone].narrow'));\n var dayKeyNarrow = Object.keys(daysNarrow);\n var monthAbbreviated = (proxy.getCulturedValue('months[stand-alone].abbreviated'));\n var monthWide = (proxy.getCulturedValue('months[stand-alone].wide'));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var periodString = (proxy.getCulturedValue('dayPeriods.format.wide'));\n var periodkeys = Object.keys(periodString);\n var milliseconds;\n var dateOptions;\n switch (formattext) {\n case 'ddd':\n case 'dddd':\n case 'd':\n result = proxy.isDayPart ? proxy.maskDateValue.getDate().toString() : proxy.defaultConstant['day'].toString();\n result = proxy.zeroCheck(proxy.isDateZero, proxy.isDayPart, result);\n if (proxy.dayTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.dayTypeCount = 0;\n }\n break;\n case 'dd':\n result = proxy.isDayPart ? proxy.roundOff(proxy.maskDateValue.getDate(), 2) : proxy.defaultConstant['day'].toString();\n result = proxy.zeroCheck(proxy.isDateZero, proxy.isDayPart, result);\n if (proxy.dayTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.dayTypeCount = 0;\n }\n break;\n case 'E':\n case 'EE':\n case 'EEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysAbbreviated[dayKeyAbbreviated[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'EEEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysWide[dayKeyWide[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'EEEEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysNarrow[dayKeyNarrow[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'M':\n result = proxy.isMonthPart ? (proxy.maskDateValue.getMonth() + 1).toString() : proxy.defaultConstant['month'].toString();\n result = proxy.zeroCheck(proxy.isMonthZero, proxy.isMonthPart, result);\n if (proxy.monthTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.monthTypeCount = 0;\n }\n break;\n case 'MM':\n result = proxy.isMonthPart ? proxy.roundOff(proxy.maskDateValue.getMonth() + 1, 2) : proxy.defaultConstant['month'].toString();\n result = proxy.zeroCheck(proxy.isMonthZero, proxy.isMonthPart, result);\n if (proxy.monthTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.monthTypeCount = 0;\n }\n break;\n case 'MMM':\n result = proxy.isMonthPart ? monthAbbreviated[proxy.maskDateValue.getMonth() + 1] : proxy.defaultConstant['month'].toString();\n break;\n case 'MMMM':\n result = proxy.isMonthPart ? monthWide[proxy.maskDateValue.getMonth() + 1] : proxy.defaultConstant['month'].toString();\n break;\n case 'yy':\n result = proxy.isYearPart ? proxy.roundOff(proxy.maskDateValue.getFullYear() % 100, 2) : proxy.defaultConstant['year'].toString();\n result = proxy.zeroCheck(proxy.isYearZero, proxy.isYearPart, result);\n break;\n case 'y':\n case 'yyy':\n case 'yyyy':\n result = proxy.isYearPart ? proxy.roundOff(proxy.maskDateValue.getFullYear(), 4) : proxy.defaultConstant['year'].toString();\n result = proxy.zeroCheck(proxy.isYearZero, proxy.isYearPart, result);\n break;\n case 'h':\n result = proxy.isHourPart ? (proxy.maskDateValue.getHours() % 12 || 12).toString() : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'hh':\n result = proxy.isHourPart ? proxy.roundOff(proxy.maskDateValue.getHours() % 12 || 12, 2) : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'H':\n result = proxy.isHourPart ? proxy.maskDateValue.getHours().toString() : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'HH':\n result = proxy.isHourPart ? proxy.roundOff(proxy.maskDateValue.getHours(), 2) : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'm':\n result = proxy.isMinutePart ? proxy.maskDateValue.getMinutes().toString() : proxy.defaultConstant['minute'].toString();\n if (proxy.minuteTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.minuteTypeCount = 0;\n }\n break;\n case 'mm':\n result = proxy.isMinutePart ? proxy.roundOff(proxy.maskDateValue.getMinutes(), 2) : proxy.defaultConstant['minute'].toString();\n if (proxy.minuteTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.minuteTypeCount = 0;\n }\n break;\n case 's':\n result = proxy.isSecondsPart ? proxy.maskDateValue.getSeconds().toString() : proxy.defaultConstant['second'].toString();\n if (proxy.secondTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.secondTypeCount = 0;\n }\n break;\n case 'ss':\n result = proxy.isSecondsPart ? proxy.roundOff(proxy.maskDateValue.getSeconds(), 2) : proxy.defaultConstant['second'].toString();\n if (proxy.secondTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.secondTypeCount = 0;\n }\n break;\n case 'f':\n result = Math.floor(proxy.maskDateValue.getMilliseconds() / 100).toString();\n break;\n case 'ff':\n milliseconds = proxy.maskDateValue.getMilliseconds();\n if (proxy.maskDateValue.getMilliseconds() > 99) {\n milliseconds = Math.floor(proxy.maskDateValue.getMilliseconds() / 10);\n }\n result = proxy.roundOff(milliseconds, 2);\n break;\n case 'fff':\n result = proxy.roundOff(proxy.maskDateValue.getMilliseconds(), 3);\n break;\n case 'a':\n case 'aa':\n result = proxy.maskDateValue.getHours() < 12 ? periodString['am'] : periodString['pm'];\n break;\n case 'z':\n case 'zz':\n case 'zzz':\n case 'zzzz':\n dateOptions = {\n format: formattext,\n type: 'dateTime', skeleton: 'yMd', calendar: proxy.parent.calendarMode\n };\n result = proxy.parent.globalize.formatDate(proxy.maskDateValue, dateOptions);\n break;\n }\n result = result !== undefined ? result : formattext.slice(1, formattext.length - 1);\n if (proxy.isHiddenMask) {\n var hiddenChar = '';\n for (var i = 0; i < result.length; i++) {\n hiddenChar += formattext[0];\n }\n return hiddenChar;\n }\n else {\n return result;\n }\n }\n return formatValueSpecifier;\n };\n MaskedDateTime.prototype.maskInputHandler = function () {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n this.differenceCheck();\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isDateZero = this.isMonthZero = this.isYearZero = false;\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.inputElement.value = inputValue;\n this.parent.inputElement.value = inputValue;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (formatText === this.hiddenMask[i]) {\n start = i;\n break;\n }\n }\n this.parent.inputElement.selectionStart = start;\n this.validCharacterCheck();\n if ((this.isNavigate || this.isDeletion) && !this.isDeleteKey) {\n var isbackward = this.isNavigate ? false : true;\n this.isNavigate = this.isDeletion = false;\n this.navigateSelection(isbackward);\n }\n if (this.isDeleteKey) {\n this.isDeletion = false;\n }\n this.isDeleteKey = false;\n };\n MaskedDateTime.prototype.navigateSelection = function (isbackward) {\n var start = this.parent.inputElement.selectionStart;\n var end = this.parent.inputElement.selectionEnd;\n var formatIndex = isbackward ? start - 1 : end;\n this.navigated = true;\n while (formatIndex < this.hiddenMask.length && formatIndex >= 0) {\n if (this.validCharacters.indexOf(this.hiddenMask[formatIndex]) >= 0) {\n this.setSelection(this.hiddenMask[formatIndex]);\n break;\n }\n formatIndex = formatIndex + (isbackward ? -1 : 1);\n }\n };\n MaskedDateTime.prototype.roundOff = function (val, count) {\n var valueText = val.toString();\n var length = count - valueText.length;\n var result = '';\n for (var i = 0; i < length; i++) {\n result += '0';\n }\n return result + valueText;\n };\n MaskedDateTime.prototype.zeroCheck = function (isZero, isDayPart, resultValue) {\n var result = resultValue;\n if (isZero && !isDayPart) {\n result = '0';\n }\n return result;\n };\n MaskedDateTime.prototype.handleDeletion = function (format, isSegment) {\n switch (format) {\n case 'd':\n this.isDayPart = isSegment;\n break;\n case 'M':\n this.isMonthPart = isSegment;\n if (!isSegment) {\n this.maskDateValue.setMonth(0);\n this.monthCharacter = '';\n }\n break;\n case 'y':\n this.isYearPart = isSegment;\n break;\n case 'H':\n case 'h':\n this.isHourPart = isSegment;\n if (!isSegment) {\n this.periodCharacter = '';\n }\n break;\n case 'm':\n this.isMinutePart = isSegment;\n break;\n case 's':\n this.isSecondsPart = isSegment;\n break;\n default:\n return false;\n }\n return true;\n };\n MaskedDateTime.prototype.dateAlteration = function (isDecrement) {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n else {\n return;\n }\n var newDateValue = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n this.previousDate = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n var incrementValue = isDecrement ? -1 : 1;\n switch (formatText) {\n case 'd':\n newDateValue.setDate(newDateValue.getDate() + incrementValue);\n break;\n case 'M':\n {\n var newMonth = newDateValue.getMonth() + incrementValue;\n newDateValue.setDate(1);\n newDateValue.setMonth(newMonth);\n if (this.isDayPart) {\n var previousMaxDate = new Date(this.previousDate.getFullYear(), this.previousDate.getMonth() + 1, 0).getDate();\n var currentMaxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (this.previousDate.getDate() === previousMaxDate && currentMaxDate <= previousMaxDate) {\n newDateValue.setDate(currentMaxDate);\n }\n else {\n newDateValue.setDate(this.previousDate.getDate());\n }\n }\n else {\n newDateValue.setDate(this.previousDate.getDate());\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n break;\n }\n case 'y':\n newDateValue.setFullYear(newDateValue.getFullYear() + incrementValue);\n break;\n case 'H':\n case 'h':\n newDateValue.setHours(newDateValue.getHours() + incrementValue);\n break;\n case 'm':\n newDateValue.setMinutes(newDateValue.getMinutes() + incrementValue);\n break;\n case 's':\n newDateValue.setSeconds(newDateValue.getSeconds() + incrementValue);\n break;\n case 'a':\n newDateValue.setHours((newDateValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n this.maskDateValue = newDateValue.getFullYear() > 0 ? newDateValue : this.maskDateValue;\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n this.handleDeletion(this.hiddenMask[start], true);\n }\n };\n MaskedDateTime.prototype.getCulturedValue = function (format) {\n var locale = this.parent.locale;\n var result;\n if (locale === 'en' || locale === 'en-US') {\n result = getValue(format, getDefaultDateObject());\n }\n else {\n result = getValue('main.' + '' + locale + ('.dates.calendars.gregorian.' + format), cldrData);\n }\n return result;\n };\n MaskedDateTime.prototype.getCulturedFormat = function () {\n var formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.moduleName === 'datepicker') {\n formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.format && this.parent.formatString) {\n formatString = this.parent.formatString;\n }\n }\n if (this.parent.moduleName === 'datetimepicker') {\n formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.dateTimeFormat) {\n formatString = this.parent.dateTimeFormat;\n }\n }\n if (this.parent.moduleName === 'timepicker') {\n formatString = this.parent.cldrTimeFormat();\n }\n return formatString;\n };\n MaskedDateTime.prototype.clearHandler = function () {\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = false;\n this.updateValue();\n };\n MaskedDateTime.prototype.updateValue = function () {\n this.monthCharacter = this.periodCharacter = '';\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.updateInputValue(inputValue);\n };\n MaskedDateTime.prototype.destroy = function () {\n this.removeEventListener();\n };\n return MaskedDateTime;\n}());\nexport { MaskedDateTime };\n","import * as index from './index';\nindex.Calendar.Inject(index.Islamic);\nindex.DatePicker.Inject(index.Islamic, index.MaskedDateTime);\nindex.TimePicker.Inject(index.MaskedDateTime);\nindex.DateTimePicker.Inject(index.Islamic, index.MaskedDateTime);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","OTHERMONTH","ROOT","CONTENTTABLE","DISABLED","OVERLAY","SELECTED","FOCUSEDDATE","FOCUSEDCELL","CalendarBase","_super","options","element","_this","call","effect","isPopupClicked","isDateSelected","isTodayClicked","preventChange","isAngular","previousDates","render","rangeValidation","min","max","calendarEleCopy","cloneNode","calendarMode","setSeconds","Date","globalize","Internationalization","locale","isNullOrUndefined","firstDayOfWeek","setProperties","getFirstDayOfWeek","todayDisabled","todayDate","setHours","getModuleName","classList","add","enableRtl","Browser","isDevice","attributes","data-role","tabIndex","hasAttribute","getAttribute","setAttribute","calendarElement","createElement","closest","disabled","enabled","createHeader","createContent","wireEvents","getDefaultKeyConfig","defaultKeyConfigs","controlUp","controlDown","moveDown","moveUp","moveLeft","moveRight","select","home","end","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","altUpArrow","spacebar","altRightArrow","altLeftArrow","validateDate","value","checkDateValue","checkValue","currentDate","setOverlayIndex","popupWrapper","popupElement","modal","index","parseInt","style","zIndex","toString","minMaxUpdate","removeClass","addClass","ariaPrevAttrs","aria-disabled","aria-label","ariaNextAttrs","ariaTitleAttrs","aria-atomic","aria-live","tabIndexAttr","tabindex","headerElement","className","iconContainer","previousIcon","attrs","type","rippleEffect","duration","selector","isCenterRipple","nextIcon","headerTitleElement","appendChild","adjustLongHeaderSize","contentElement","table","class","role","aria-activedescendant","aria-labelledby","id","createContentHeader","createContentBody","showTodayButton","createContentFooter","EventHandler","addContentFocus","removeContentFocus","args","focusedDate","tableBodyElement","querySelector","selectedDate","remove","getCultureValues","cldrObj","culShortNames","dayFormat","dayHeaderFormat","toLowerCase","getValue","getDefaultDateObject","getCultureObjects","cldrData","_i","_a","keys","obj","push","toCapitalize","text","toUpperCase","slice","querySelectorAll","detach","html","tableHeadElement","weekNumber","shortNames","shiftArray","days","innerHTML","start","renderYears","renderDecades","renderMonths","updateFooter","todayElement","textContent","l10","getConstant","minimum","maximum","l10nLocale","today","L10n","footer","contains","todayButtonClick","ref","keyConfig","moduleName","navigateTitle","extend","keyConfigs","keyboardModule","KeyboardEvents","eventName","keyAction","keyActionHandle","bind","dateWireEvents","serverModuleName","e","isCustomDate","currentView","depth","getViewNumber","navigateTo","resetCalendar","renderDayCellArgs","multiSelection","split","view","depthValue","levelRestrict","action","keyboardNavigate","preventDefault","navigatePrevious","navigateNext","focus","selectDate","contentClick","title","firstDay","lastDay","addMonths","addYears","getFullYear","hide","number","date","isMonthYearRange","addDay","isMinMaxRange","preRender","navigatePreviousHandler","navigateNextHandler","navigateHandler","triggerNavigate","minMaxDate","localDate","minDate","maxDate","tdEles","numCells","renderDays","islamicModule","islamicRenderDays","renderTemplate","islamicRenderTemplate","values","isTodayDate","getDate","timezone","currentMonth","getMonth","titleUpdate","getHours","getMinutes","getSeconds","getMilliseconds","getDay","setStartDate","day","weekEle","weekAnchor","numberOfDays","weekRule","finalDate","getWeek","dateFormatOptions","skeleton","parseDate","formatDate","tdEle","dayCell","dayLink","format","isDisabled","isOutOfRange","argument","renderDayCellEvent","argsDate","localDateString","tempDateString","splice","otherMnthBool","disabledCls","clickHandler","currentTarget","getDateVal","tempValue","formatOptions","calendar","innerText","copyValues","formatOptions_1","indexOf","updateFocus","otherMonth","tableElement","removeTableHeadElement","valueUtil","curDate","mon","yr","curYrs","minYr","minMonth","maxYr","maxMonth","setMonth","setDate","month","localMonth","localYr","startYr","setFullYear","endYr","startFullYr","endFullYr","startHdrYr","endHdrYr","startYear","rowIterator","year","valueOf","getUniqueID","aria-selected","collection","lastDate","timeOffset","Math","abs","getTimezoneOffset","findLastDay","isNaN","elements","count","classNm","trEle","row","children","otherMonthCell","iconHandler","islamicIconHandler","setAriaActiveDescendant","clickEventEmitter","eve","getIdValue","islamicPreviousHeader","islamicDate","getIslamicDate","toGregorian","switchView","requiredModules","modules","member","name","getPersistData","keyEntity","addOnPersist","onPropertyChanged","newProp","oldProp","prop","validateValues","checkView","setLocale","undefined","skipIndex","tempValueString","minFormatOption","minString","maxFormatOption","maxString","setValueUpdate","dayFormatOptions","monthFormatOptions","setActiveDescendant","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","destroy","removeAttribute","todayButtonEvent","stringVal","previous","islamicPrevious","next","islamicNext","ld","gregorianFormat","islamicFormat","ceil","time","tzOffset","getTime","tzOffsetDiff","setTime","getMaxDays","dateString","node","setDateDecade","setDateYear","checkPresentDate","tempElement","selectedElement","dates","previousValue","checkPrevious","trigger","navigatedEvent","navigatedArgs","event","compare","startDate","endDate","modifier","result","array","concat","column","findNextTD","rangeValue","filter","tmpDate","inValue","toUTCString","toLocaleString","timeZone","Property","Event","NotifyPropertyChanges","Component","Calendar","throwError","isMultiSelection","tempValues","limit","copyDate","previousValues","setEnable","setClass","cssClass","form","formResetHandler","setTimeZone","serverTimezoneOffset","renderComplete","enable","newCssClass","oldCssClass","replace","trim","isDayLightSaving","secondOffset","firstOffset","offsetValue","timeZoneDiff","changedArgs","generateTodayVal","setMinutes","setMilliseconds","changeHandler","triggerChange","previousDate","previousDateTime","isMultiSelect","tempDays","islamicRenderYears","islamicRenderDecade","storeView","update","tempDate","addDate","tempDates","removeDate","setTodayDate","changeEvent","isInteracted","Number","NaN","Islamic","instance","calendarInstance","islamicTitleUpdate","islamicInValue","gregorianObject","islamicDayCell","prevMonthCompare","islamicCompareMonth","nextMonthCompare","prevYearCompare","hijriCompareYear","nextYearCompare","gregorianValue","HijriParser","prevDecadeCompare","hijriCompareDecade","nextDecadeCompare","nextIconClicked","previousIconClicked","islamicDate_1","String","fromCharCode","charCodeAt","splityear","i_1","startHeaderYear","endHeaderYear","round","rowCount","year_1","hijriStart","hijriEnd","islamicCompare","getHijriDate","containerAttr","DatePicker","isDateIconClicked","isAltKeyPressed","invalidValueString","checkPreviousValue","maskedDateValue","isIconClicked","isDynamicValueChanged","isFocused","isBlur","isKeyAction","datepickerOptions","initialize","bindEvents","floatLabelType","Input","calculateWidth","inputElement","inputWrapper","container","buttons","getElementsByClassName","updateInput","setAllowEdit","allowEdit","readonly","updateIconState","checkInvalidValue","enableMask","notify","module","createInput","updateHtmlAttributeToWrapper","placeholder","updateInputValue","previousElementValue","inputValueCopy","ariaAttrs","aria-expanded","autocomplete","autocorrect","autocapitalize","spellcheck","aria-invalid","l10n","fullScreenMode","updatedCssClassValues","isBindClearAction","bindClearAction","properties","showClearButton","INPUTWRAPPER","setWidth","width","addAttributes","isDynamic","isCalendar","disabledDates","strictMode","minMaxUpdates","dateValue","tempFormat","formatString","dateTimeFormat","errorClass","checkStringValue","val","returnDate","formatDateTime","culture","getDatePattern","valueDate","valueString","invalid","basicISOString","test","bindInputEvent","inputHandler","dateIconHandler","mouseUpHandler","inputFocusHandler","inputBlurHandler","keyupHandler","keydownHandler","inputChangeHandler","clearButton","resetHandler","formElement","resetFormHandler","keyboardModules","inputKeyActionHandle","code","popupObj","unBindEvents","tagName","restoreValue","stopPropagation","bindClearEvent","clear","clearedArgs","popupUpdate","keyupEvent","document","createEvent","initEvent","dispatchEvent","preventEventBubbling","interopAdaptor","invokeMethodAsync","setValue","blur","show","htmlAttributes","updatedClassValues","setStyle","charAt","updateHtmlAttributeToElement","updateCssClass","setCssClass","calendarKeyActionHandle","selectionStart","selectionEnd","focusArguments","model","openOnFocus","strictModeUpdate","changeTrigger","activeElement","blurArguments","calendarKeyboardModules","firstElementChild","documentHandler","parentElement","focusOut","clickedView","length_1","defaultAction","targetdate","pattern","charPattern","dateOptions","modifiedValue","match","toLocaleUpperCase","createCalendar","modelHeader","body","display","Popup","content","relateTo","position","X","Y","offsetY","targetType","collision","open","iconRight","window","getComputedStyle","marginRight","touchModule","Touch","swipe","CalendarSwipeHandler","TouchStartHandler","close","preventArgs","setAriaAttributes","targetExitViewport","direction","swipeDirection","touchStart","setAriaDisabled","yearHeading","h2","daySpan","monthSpan","modelCloseIcon","modelCloseHandler","modelTodayButton","insertBefore","selectCalendar","formatUnit","prevent_1","outOfRange","mobilePopupWrapper","popup","cancel","appendTo","eventArgs","refreshPosition","openAnimation","Animation","dlgOverlay","prevent_2","closeEventCallback","prevent","outerHTML","focusIn","triggerEvent","removeAttributes","inputElementCopy","ensureInputAttribute","ngTag","insertAdjacentElement","validationAttribute","checkHtmlAttributes","altDownArrow","escape","enter","shiftTab","tab","nameAttribute","attribute","attr","checkFormat","skeletonString","dynamic","attributes_1","valueCopy","previousValCopy","renderDayCell","dateIdString","inputVal","aria-owns","aria-controls","isDisabledDate","setPlaceholder","setReadonly","setEnabled","setEnableRtl","setClearButton","removeFloating","addFloating","hour","minute","second","dayOfTheWeek","LEFTCALENDER","RIGHTCALENDER","ACTIVE","STARTDATE","ENDDATE","RANGEHOVER","CALENDAR","FOCUSDATE","DAYSPAN","DATEDISABLED","ICONDISABLED","LISTCLASS","HOVER","wrapperAttr","Presets","apply","ChildProperty","DateRangePicker","isCustomRange","isCustomWindow","presetsItem","liCollections","previousEleValue","isKeyPopup","dateDisabled","isRangeIconClicked","isMaxDaysClicked","disabledDays","preventBlur","preventFocus","dateRangeOptions","startValue","endValue","setModelValue","setDataAttribute","keyInputConfigs","defaultConstant","startLabel","endLabel","customRange","applyText","cancelText","selectedDays","isMobile","matchMedia","matches","angularTag","cloneElement","checkInvalidRange","rangeArray","separator","initProperty","navNextFunction","navNextMonth","navPrevFunction","navPrevMonth","deviceNavNextFunction","deviceNavNext","deviceNavPrevFunction","deviceNavPrevious","initStartDate","initEndDate","updateValue","merge","processPresets","setRangeAllowEdit","pro","firstHiddenChild","secondHiddenChild","updateClearIconState","input","updatedClassValue","dateRangeStyle","cssNewClass","cssOldClass","isUndefined","presets","label","range","activeIndex","rangeIconHandler","inputKeyboardModule","updateHiddenInput","valueType","clearRange","previousStartValue","previousEndValue","startCopy","endCopy","applyButton","removeSelection","targetElement","isPopupOpen","applyFunction","leftCalendar","calendarFocus","minDays","maxDays","createPopup","adjustLongHeaderWidth","isPreset","createPresets","listRippleEffect","renderPopup","renderControl","createControl","bindCalendarEvents","updateRange","rightCalendar","disabledDateRender","updateHeader","clearCalendarEvents","leftCalPrevIcon","leftCalNextIcon","rightCalPrevIcon","rightCalNextIcon","clearEvents","updateNavIcons","calendarIconEvent","deviceCalendarEvent","startButton","deviceHeaderClick","endButton","calendarIconRipple","leftKeyboardModule","keyInputHandler","rightKeyboardModule","bindCalendarCellEvents","removeFocusedDate","updateDeviceCalendar","deviceNavigation","deviceCalendar","getElementsByTagName","removeClassDisabled","updateMinMaxDays","selectableDates","getStartEndDate","prevStartVal","prevEndVal","refreshControl","isEnd","inputStr","isDateDisabled","keyCalendarUpdate","isLeftCalendar","ele","isRemoveFocus","leftCalCurrentDate","rightCalCurrentDate","updateCalendarElement","navInCalendar","leftLimit","rightLimit","keyNavigation","tabKeyValidation","firstCellToFocus","focusAbleEle","focusEleID","currentFirstDay","rightDateLimit","leftDateLimit","presetElement","selectRange","yearDate","cancelButton","calendarNavigation","checkMinMaxDays","presetHeight","calendarPos","rightHeader","leftHeader","isRightMonth","isLeftMonth","isRightYear","isLeftYear","isRightDecade","isLeftDecade","tdCells","tdCells_1","cell","hoverSelection","isDate","focusedDate_1","eleDate","isSameMonth","isSameYear","currentElement","tdCells_2","isDisabledCell","startDateValue","isSameStartEnd","startVal","endVal","isSame","elementCollection","elementCollection_1","tdCells_3","eleDateValue","eleDateValue_1","addSelectedAttributes","endDateValue","rangeArgs","inputValue","removeTimeValueFromDate","otherMonthSelect","isStartDate","sameDate","tdCell","y","m","firstMonth","lastMonth","endEle","endEle_1","ele_1","endEle_2","ele_2","removeSelectedAttributes","tdCells_4","tdCells_5","startMonth","startValueSelected","maxEle","tdCells_6","calendar_1","tdCells_7","disabledDayCnt","start_1","end_1","updateControl","customDate","createRangeHeader","labelContainer","endBtn","startBtn","Button","changeIcon","disableInput","validateMinMax","validateRangeStrict","validateMinMaxDays","validateRange","renderCalendar","isSameDecade","endYear","startMonthCurrentDate","selectNextMonth","selectNextYear","selectNextDecade","decyr","selectStartMonth","calendarContainer","prevIcon","prepend","leftTitle","leftContainer","rightContainer","leftNavTitle","rightTitle","rightNavTitle","getCalendarView","controlContainer","headerContainer","modelHeaderIconWrapper","modelRangeCloseHandler","modelApplyButton","footerSection","cancelBtn","CANCEL","applyBtn","cancelFunction","height","getBoundingClientRect","deviceHeaderUpdate","isValueChanged","closeEventArgs","popupKeyboardModule","popupKeyActionHandle","onMouseClick","item","li","isClick","setListSelection","onMouseOver","onMouseLeave","renderCustomPopup","removeListSelection","applyPresetRange","modelValue","showPopup","openEventArgs","listTag","ListBase","createList","aria-hidden","customElement","wireListEvents","modelWrapper","modelTitleSpan","presetContent","unWireListEvents","popupWidth","offsetX","iconRangeRight","cssFloat","touchRangeModule","dateRangeSwipeHandler","touchStartRangeHandler","btnKeyboardModule","presetKeyboardModule","presetKeyActionHandler","popupKeyBoardHandler","popupCloseHandler","popupEle","innerHeight","touchRangeStart","keyCode","rangeContainer","listMoveDown","setScrollPosition","listMoveUp","hvrItem","getHoverLI","actItem","getActiveLI","nextElementSibling","previousElementSibling","listHeight","hover","active","nextEle","offsetTop","liHeight","scrollTop","updatedCssClassValue","setEleWidth","formatOption","startinvalue","endinvalue","startString","endString","startObject","endObject","invalidobject","getstringvalue","toLocaleDateString","stringValue","formatOpt","basISOString","virtualRenderCellArgs","virtualRenderCellEvent","isStartDisabled","isEndDisabled","createHiddenInput","evt","navigate","getSelectedRange","mobileRangePopupWrap","refreshChange","enableInput","clearModelvalue","setMinMaxDays","getStartEndValue","Collection","DAY","MONTH","YEAR","FOCUS","wrapperAttributes","TimePickerBase","createListItems","createdEl","timeFormat","step","interval","listItems","timeCollections","list","TimeMaskPlaceholder","TimePicker","disableItemCollection","timeOptions","keyConfigure","down","up","left","right","openPopupEventArgs","createInputElement","setTimeAllowEdit","validateInterval","validateDisable","getFormattedValue","checkErrorState","anchor","inputEleValue","getDateObject","clientTimeZoneDiff","clearIconState","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","defaultCulture","checkTimeFormat","checkInValue","scrollTo","checkAttributes","localeText","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","prevDate","updatedCssClassesValue","aria-autocomplete","isNullOrEmpty","inputStyle","getCldrDateTimeFormat","dateFormat","cldrFormat","isInvalid","valueExpression","valueExp","setCurrentDate","getCultureTimeObject","ariaAttribute","enableElement","rippleFn","propertyList","generateList","append","listWrapper","addSelection","getPopupHeight","popupHeight","rippleModel","containerStyle","setPopupWidth","visibility","maxHeight","timePopupCloseHandler","createDateObj","updatedClassesValue","timeStyle","cssClassNew","cssClassOld","removeErrorClass","validateState","disableTimeIcon","disableElement","selectInputText","setSelectionRange","setCursorToEnd","getMeridianText","meridian","getCursorSelection","getActiveElement","parseFloat","setScrollTo","findScrollTop","items","initialTime","scrollTime","getText","cldrTimeFormat","cldrDateFormat","getCultureDateObject","dateToNumeric","getExactDateTime","compareFormatChange","updatePlaceHolder","popupHandler","closePopup","mouseDownHandler","curPos","cursorDetails","focusSelection","regex","RegExp","isSeparator","keyHandler","objToString","createMask","previousState","setSelection","delay","animModel","documentClickHandler","mobileTimePopupWrap","disposeServerPopup","top","checkValueChange","isNavigation","valueProcess","prevValue","currentLi","setHover","isValidLI","removeHover","scrollHandler","minVal","maxVal","dateVal","strictOperation","maxValue","minValue","inputEventHandler","clearHandler","inputEvent","timeValue","raiseClearedEvent","setZIndex","dataBind","getTextFormat","strArray","validateValue","newval","value_1","findNextElement","textVal","timeVal","collections","selectNextItem","validLiElement","elementValue","backward","elementIndex","isCheck","nextItem","isUpdate","hoveredItem","getHoverItem","setActiveClass","timeParse","listBaseOptions","itemCreated","isIE","info","getProperty","popupAlignment","timePopupElement","formatValues","setStyleAttribute","HOUR","MINUTE","SECOND","MILLISECOND","DateTimePicker","scrollInvoked","formatRegex","dateFormatString","dateTimeOptions","focusHandler","blurHandler","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timeIcon","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isValidState","isDisable","renderTimeIcon","appendSpan","timeHandler","dateHandler","inputKeyAction","getCldrFormat","isDatePopupOpen","toggle","listCreation","dateObject","TimePopupFormat","startTime","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","timeKeyActionHandle","unWireTimeListEvents","dateTimeCloseHandler","timeContent","setDimension","setTimeHover","removeTimeHover","setInputValue","nextElement","lineHeight","getFullDateTime","tempVal","combineDateTime","minutes","seconds","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","method","hours","milliseconds","tempStartValue","tempMin","formatValueSpecifier","formattext","formatCount","proxy","tempEndValue","tempMax","getUTCFullYear","dateTimeCloseEventCallback","maskedDateModule","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","MaskedDateTime","parent","mask","hiddenMask","validCharacters","isDayPart","isMonthPart","isYearPart","isHourPart","isMinutePart","isSecondsPart","isMilliSecondsPart","monthCharacter","periodCharacter","isHiddenMask","isComplete","navigated","isDeletion","isShortYear","isDeleteKey","isDateZero","isMonthZero","isYearZero","isLeadingZero","dayTypeCount","monthTypeCount","hourTypeCount","minuteTypeCount","secondTypeCount","dateformat","getCulturedFormat","maskDateValue","removeEventListener","addEventListener","isDestroyed","on","validCharacterCheck","maskInputHandler","maskKeydownHandler","off","maskPlaceholder","getCUltureMaskFormat","formatCheck","previousHiddenMask","setDynamicValue","objectString","j","validChar","altKey","ctrlKey","navigateSelection","formatText","dateAlteration","isPersist","differenceCheck","previousVal","substring","newVal","newDateValue","handleDeletion","monthString","getCulturedValue","monthValue","monthValue_1","previousMaxDate","currentMaxDate","yearValue","floor","periodString","periodkeys","daysAbbreviated","dayKeyAbbreviated","daysWide","dayKeyWide","daysNarrow","dayKeyNarrow","monthAbbreviated","monthWide","zeroCheck","roundOff","hiddenChar","isbackward","formatIndex","valueText","isZero","resultValue","isSegment","isDecrement","incrementValue","newMonth","index.Calendar","Inject","index.Islamic","index.DatePicker","index.MaskedDateTime","index.TimePicker","index.DateTimePicker"],"mappings":"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"}
|