diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 442316fea..50f69db1c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -3,6 +3,10 @@ description: Tell us about your issue. title: "Provide a general summary of the issue" labels: ["Type: Bug", "State: Triage"] body: + - type: markdown + attributes: + value: "Note: I am no longer taking feature requests. + Beginning in 2024, tickets will be paid support only. Please see [this discussion](https://github.com/Eonasdan/tempus-dominus/discussions/2694)." - type: checkboxes attributes: label: Prerequisites diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 3485ff41d..72b067a64 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,5 +2,3 @@ contact_links: - name: Ask a question url: https://github.com/Eonasdan/tempus-dominus/discussions/new about: Ask and discuss questions with other community members - - name: Join the discord - url: https://discord.gg/BHS9jw9YPf diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index e04dbdc42..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Feature request -description: Suggest new or updated features. -title: "Suggest a new feature" -labels: ["Type: Feature Request", "State: Triage"] -assignees: [] -body: - - type: checkboxes - attributes: - label: Prerequisites - description: Take a couple minutes to help our maintainers work faster. - options: - - label: I have [searched](https://github.com/Eonasdan/tempus-dominus/issues?q=label%3A%22Type%3A+feature+request%22+) for duplicate or closed feature requests. - required: true - - label: I have read the [contributing guidelines](https://github.com/Eonasdan/tempus-dominus/blob/master/.github/CONTRIBUTING.md). - required: true - - type: textarea - id: proposal - attributes: - label: Proposal - description: Provide detailed information for what we should add, including relevant links to prior art, screenshots, or live demos whenever possible. - validations: - required: true - - type: textarea - id: motivation - attributes: - label: Motivation and context - description: Tell us why this change is needed or helpful, and what problems it may help solve. - validations: - required: true diff --git a/.gitignore b/.gitignore index 072566f39..9eea33311 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,7 @@ src/docs/partials/examples/test.html /docs/ /dist/plugins/examples/ coverage +dist +types .DS_Store diff --git a/README.md b/README.md index e2dd83426..6212ee6a1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/R6R53OEFF) -# Tempus Dominus Date/Time Picker v6.7.10 +# Tempus Dominus Date/Time Picker v6.7.16 Tempus Dominus is a powerful and robust date time picker for javascript. Version 6 is another major rewrite over the previous version. V6 is written with modern browsers in mind and is written in typescript. Bootstrap, momentjs and jQuery are no longer required dependencies. Popper2 is all that is required for the picker to position correctly. If you still require jQuery (seriously, you should move off that asap) there's a jQuery provider that wraps the native js functions. diff --git a/build/change-version.js b/build/change-version.js index 6b9803541..e7eaedb97 100644 --- a/build/change-version.js +++ b/build/change-version.js @@ -21,7 +21,10 @@ const DRY_RUN = // These are the filetypes we only care about replacing the version const GLOB = [ - '**/*.{css,html,js,json,md,scss,txt,yml,ts,nuspec,properties}', + '**/*.{css,js,json,md,scss,txt,yml,ts,nuspec,properties}', + '**/shell.html', + '**/installing.html', + '**/templates/index.html', '!**/change-log*', ]; const GLOBBY_OPTIONS = { diff --git a/dist/css/tempus-dominus.css b/dist/css/tempus-dominus.css deleted file mode 100644 index 2c830b1a5..000000000 --- a/dist/css/tempus-dominus.css +++ /dev/null @@ -1,700 +0,0 @@ -.visually-hidden, .tempus-dominus-widget [data-action]::after { - position: absolute !important; - width: 1px !important; - height: 1px !important; - padding: 0 !important; - margin: -1px !important; - overflow: hidden !important; - clip: rect(0, 0, 0, 0) !important; - white-space: nowrap !important; - border: 0 !important; -} - -.tempus-dominus-widget { - list-style: none; - padding: 4px; - width: 19rem; - border-radius: 4px; - display: none; - z-index: 9999; - box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12); -} -.tempus-dominus-widget.calendarWeeks { - width: 21rem; -} -.tempus-dominus-widget.calendarWeeks .date-container-days { - grid-auto-columns: 12.5%; - grid-template-areas: "a a a a a a a a"; -} -.tempus-dominus-widget [data-action] { - cursor: pointer; -} -.tempus-dominus-widget [data-action]::after { - content: attr(title); -} -.tempus-dominus-widget [data-action].disabled, .tempus-dominus-widget [data-action].disabled:hover { - background: none; - cursor: not-allowed; -} -.tempus-dominus-widget .arrow { - display: none; -} -.tempus-dominus-widget.show { - display: block; -} -.tempus-dominus-widget.show.date-container { - min-height: 315px; -} -.tempus-dominus-widget.show.time-container { - min-height: 217px; -} -.tempus-dominus-widget .td-collapse:not(.show) { - display: none; -} -.tempus-dominus-widget .td-collapsing { - height: 0; - overflow: hidden; - transition: height 0.35s ease; -} -@media (min-width: 576px) { - .tempus-dominus-widget.timepicker-sbs { - width: 38em; - } -} -@media (min-width: 768px) { - .tempus-dominus-widget.timepicker-sbs { - width: 38em; - } -} -@media (min-width: 992px) { - .tempus-dominus-widget.timepicker-sbs { - width: 38em; - } -} -.tempus-dominus-widget.timepicker-sbs .td-row { - display: flex; -} -.tempus-dominus-widget.timepicker-sbs .td-row .td-half { - flex: 0 0 auto; - width: 50%; -} -.tempus-dominus-widget div[data-action]:active { - box-shadow: none; -} -.tempus-dominus-widget .timepicker-hour, -.tempus-dominus-widget .timepicker-minute, -.tempus-dominus-widget .timepicker-second { - width: 54px; - font-weight: bold; - font-size: 1.2em; - margin: 0; -} -.tempus-dominus-widget button[data-action] { - padding: 6px; -} -.tempus-dominus-widget .toggleMeridiem { - text-align: center; - height: 38px; -} -.tempus-dominus-widget .calendar-header { - display: grid; - grid-template-areas: "a a a"; - margin-bottom: 10px; - font-weight: bold; -} -.tempus-dominus-widget .calendar-header .next { - text-align: right; - padding-right: 10px; -} -.tempus-dominus-widget .calendar-header .previous { - text-align: left; - padding-left: 10px; -} -.tempus-dominus-widget .calendar-header .picker-switch { - text-align: center; -} -.tempus-dominus-widget .toolbar { - display: grid; - grid-auto-flow: column; - grid-auto-rows: 40px; -} -.tempus-dominus-widget .toolbar div { - border-radius: 999px; - align-items: center; - justify-content: center; - box-sizing: border-box; - display: flex; -} -.tempus-dominus-widget .date-container-days { - display: grid; - grid-template-areas: "a a a a a a a"; - grid-auto-rows: 40px; - grid-auto-columns: 14.2857142857%; -} -.tempus-dominus-widget .date-container-days .range-in { - background-color: #01419e !important; - border: none; - border-radius: 0 !important; - box-shadow: -5px 0 0 #01419e, 5px 0 0 #01419e; -} -.tempus-dominus-widget .date-container-days .range-end { - border-radius: 0 50px 50px 0 !important; -} -.tempus-dominus-widget .date-container-days .range-start { - border-radius: 50px 0 0 50px !important; -} -.tempus-dominus-widget .date-container-days .dow { - align-items: center; - justify-content: center; - text-align: center; -} -.tempus-dominus-widget .date-container-days .cw { - width: 90%; - height: 90%; - align-items: center; - justify-content: center; - display: flex; - font-size: 0.8em; - line-height: 20px; - cursor: default; -} -.tempus-dominus-widget .date-container-decades, -.tempus-dominus-widget .date-container-years, -.tempus-dominus-widget .date-container-months { - display: grid; - grid-template-areas: "a a a"; - grid-auto-rows: calc((19rem - 8px) / 7); -} -.tempus-dominus-widget .time-container-hour, -.tempus-dominus-widget .time-container-minute, -.tempus-dominus-widget .time-container-second { - display: grid; - grid-template-areas: "a a a a"; - grid-auto-rows: calc((19rem - 8px) / 7); -} -.tempus-dominus-widget .time-container-clock { - display: grid; - grid-auto-rows: calc((19rem - 8px) / 7); -} -.tempus-dominus-widget .time-container-clock .no-highlight { - width: 90%; - height: 90%; - align-items: center; - justify-content: center; - display: flex; -} -.tempus-dominus-widget .date-container-decades div:not(.no-highlight), -.tempus-dominus-widget .date-container-years div:not(.no-highlight), -.tempus-dominus-widget .date-container-months div:not(.no-highlight), -.tempus-dominus-widget .date-container-days div:not(.no-highlight), -.tempus-dominus-widget .time-container-clock div:not(.no-highlight), -.tempus-dominus-widget .time-container-hour div:not(.no-highlight), -.tempus-dominus-widget .time-container-minute div:not(.no-highlight), -.tempus-dominus-widget .time-container-second div:not(.no-highlight) { - width: 90%; - height: 90%; - border-radius: 999px; - align-items: center; - justify-content: center; - box-sizing: border-box; - display: flex; -} -.tempus-dominus-widget .date-container-decades div:not(.no-highlight).disabled, .tempus-dominus-widget .date-container-decades div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget .date-container-years div:not(.no-highlight).disabled, -.tempus-dominus-widget .date-container-years div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget .date-container-months div:not(.no-highlight).disabled, -.tempus-dominus-widget .date-container-months div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget .date-container-days div:not(.no-highlight).disabled, -.tempus-dominus-widget .date-container-days div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget .time-container-clock div:not(.no-highlight).disabled, -.tempus-dominus-widget .time-container-clock div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget .time-container-hour div:not(.no-highlight).disabled, -.tempus-dominus-widget .time-container-hour div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget .time-container-minute div:not(.no-highlight).disabled, -.tempus-dominus-widget .time-container-minute div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget .time-container-second div:not(.no-highlight).disabled, -.tempus-dominus-widget .time-container-second div:not(.no-highlight).disabled:hover { - background: none; - cursor: not-allowed; -} -.tempus-dominus-widget .date-container-decades div:not(.no-highlight).today, -.tempus-dominus-widget .date-container-years div:not(.no-highlight).today, -.tempus-dominus-widget .date-container-months div:not(.no-highlight).today, -.tempus-dominus-widget .date-container-days div:not(.no-highlight).today, -.tempus-dominus-widget .time-container-clock div:not(.no-highlight).today, -.tempus-dominus-widget .time-container-hour div:not(.no-highlight).today, -.tempus-dominus-widget .time-container-minute div:not(.no-highlight).today, -.tempus-dominus-widget .time-container-second div:not(.no-highlight).today { - position: relative; -} -.tempus-dominus-widget .date-container-decades div:not(.no-highlight).today:before, -.tempus-dominus-widget .date-container-years div:not(.no-highlight).today:before, -.tempus-dominus-widget .date-container-months div:not(.no-highlight).today:before, -.tempus-dominus-widget .date-container-days div:not(.no-highlight).today:before, -.tempus-dominus-widget .time-container-clock div:not(.no-highlight).today:before, -.tempus-dominus-widget .time-container-hour div:not(.no-highlight).today:before, -.tempus-dominus-widget .time-container-minute div:not(.no-highlight).today:before, -.tempus-dominus-widget .time-container-second div:not(.no-highlight).today:before { - content: ""; - display: inline-block; - border: solid transparent; - border-width: 0 0 7px 7px; - position: absolute; - bottom: 6px; - right: 6px; -} -.tempus-dominus-widget .time-container { - margin-bottom: 0.5rem; -} -.tempus-dominus-widget button { - display: inline-block; - font-weight: 400; - line-height: 1.5; - text-align: center; - text-decoration: none; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - padding: 0.375rem 0.75rem; - font-size: 1rem; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -.tempus-dominus-widget.tempus-dominus-widget-readonly table td.day, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td.hour, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td.minute, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td.second, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementHours], -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementMinutes], -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementSeconds], -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementHours], -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementMinutes], -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementSeconds], -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showHours], -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showMinutes], -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showSeconds], -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=togglePeriod] { - pointer-events: none; - cursor: default; -} -.tempus-dominus-widget.tempus-dominus-widget-readonly table td.day:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td.hour:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td.minute:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td.second:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementHours]:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementMinutes]:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementSeconds]:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementHours]:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementMinutes]:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementSeconds]:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showHours]:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showMinutes]:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showSeconds]:hover, -.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=togglePeriod]:hover { - background: none; -} -.tempus-dominus-widget.light { - color: #000; - background-color: #fff; -} -.tempus-dominus-widget.light [data-action].disabled, .tempus-dominus-widget.light [data-action].disabled:hover { - color: #6c757d; -} -.tempus-dominus-widget.light .toolbar div:hover { - background: #e9ecef; -} -.tempus-dominus-widget.light .date-container-days .dow { - color: rgba(0, 0, 0, 0.5); -} -.tempus-dominus-widget.light .date-container-days .cw { - color: rgba(0, 0, 0, 0.38); -} -.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight):hover, -.tempus-dominus-widget.light .date-container-years div:not(.no-highlight):hover, -.tempus-dominus-widget.light .date-container-months div:not(.no-highlight):hover, -.tempus-dominus-widget.light .date-container-days div:not(.no-highlight):hover, -.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight):hover, -.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight):hover, -.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight):hover, -.tempus-dominus-widget.light .time-container-second div:not(.no-highlight):hover { - background: #e9ecef; -} -.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active, -.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active, -.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active, -.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active, -.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight), -.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight), -.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight), -.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active, -.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active, -.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active, -.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active { - background-color: #0d6efd; - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.old, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-in:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-in:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-end:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-end:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-start:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-start:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.new, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-in:not(.no-highlight).new, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-in:not(.no-highlight).new, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-end:not(.no-highlight).new, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-end:not(.no-highlight).new, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-start:not(.no-highlight).new, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.old, -.tempus-dominus-widget.light .date-container-years .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .date-container-years div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-years .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .date-container-years div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-years .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .date-container-years div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.new, -.tempus-dominus-widget.light .date-container-years .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .date-container-years div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-years .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .date-container-years div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-years .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .date-container-years div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.old, -.tempus-dominus-widget.light .date-container-months .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .date-container-months div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-months .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .date-container-months div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-months .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .date-container-months div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.new, -.tempus-dominus-widget.light .date-container-months .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .date-container-months div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-months .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .date-container-months div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-months .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .date-container-months div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.old, -.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.new, -.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.old, -.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.new, -.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.old, -.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.new, -.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.old, -.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.new, -.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.old, -.tempus-dominus-widget.light .time-container-second .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-second div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-second .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-second div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-second .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days .time-container-second div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.new, -.tempus-dominus-widget.light .time-container-second .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-second div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-second .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-second div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-second .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days .time-container-second div.range-start:not(.no-highlight).new { - color: #fff; -} -.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight).today:before, -.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight).today:before, -.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight).today:before, -.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.today:before { - border-bottom-color: #fff; -} -.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).new, -.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).old, -.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).new, -.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).old, -.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).new { - color: rgba(0, 0, 0, 0.38); -} -.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).disabled, .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).disabled, -.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).disabled, -.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).disabled, -.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).disabled, -.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).disabled, -.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).disabled, -.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).disabled, -.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).disabled:hover { - color: #6c757d; -} -.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).today:before, -.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).today:before, -.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).today:before, -.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).today:before, -.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).today:before, -.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).today:before, -.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).today:before, -.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).today:before { - border-bottom-color: #0d6efd; - border-top-color: rgba(0, 0, 0, 0.2); -} -.tempus-dominus-widget.light button { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; -} -.tempus-dominus-widget.dark { - color: #e3e3e3; - background-color: #1b1b1b; -} -.tempus-dominus-widget.dark [data-action].disabled, .tempus-dominus-widget.dark [data-action].disabled:hover { - color: #6c757d; -} -.tempus-dominus-widget.dark .toolbar div:hover { - background: rgb(35, 38, 39); -} -.tempus-dominus-widget.dark .date-container-days .dow { - color: rgba(232, 230, 227, 0.5); -} -.tempus-dominus-widget.dark .date-container-days .range-in { - background-color: #0071c7 !important; - box-shadow: -5px 0 0 #0071c7, 5px 0 0 #0071c7; -} -.tempus-dominus-widget.dark .date-container-days .cw { - color: rgba(232, 230, 227, 0.38); -} -.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight):hover, -.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight):hover, -.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight):hover, -.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight):hover, -.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight):hover, -.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight):hover, -.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight):hover, -.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight):hover { - background: rgb(35, 38, 39); -} -.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active, -.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active, -.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active, -.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active, -.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight), -.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight), -.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight), -.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active, -.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active, -.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active, -.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active { - background-color: #4db2ff; - color: #fff; - text-shadow: 0 -1px 0 rgba(232, 230, 227, 0.25); -} -.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.old, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-in:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-in:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-end:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-end:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-start:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-start:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.new, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-in:not(.no-highlight).new, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-in:not(.no-highlight).new, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-end:not(.no-highlight).new, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-end:not(.no-highlight).new, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-start:not(.no-highlight).new, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.old, -.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.new, -.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.old, -.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.new, -.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.old, -.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.new, -.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.old, -.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.new, -.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.old, -.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.new, -.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.old, -.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.new, -.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.old, -.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-in:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-end:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-start:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.new, -.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-in:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-end:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-start:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-start:not(.no-highlight).new { - color: #fff; -} -.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight).today:before, -.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight).today:before, -.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight).today:before, -.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.today:before, -.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.today:before { - border-bottom-color: #1b1b1b; -} -.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).new, -.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).old, -.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).new, -.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).old, -.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).new { - color: rgba(232, 230, 227, 0.38); -} -.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).disabled, .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).disabled, -.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).disabled, -.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).disabled, -.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).disabled, -.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).disabled, -.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).disabled, -.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).disabled:hover, -.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).disabled, -.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).disabled:hover { - color: #6c757d; -} -.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).today:before, -.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).today:before, -.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).today:before, -.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).today:before, -.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).today:before, -.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).today:before, -.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).today:before, -.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).today:before { - border-bottom-color: #4db2ff; - border-top-color: rgba(232, 230, 227, 0.2); -} -.tempus-dominus-widget.dark button { - color: #fff; - background-color: #4db2ff; - border-color: #4db2ff; -} -/*# sourceMappingURL=tempus-dominus.css.map */ \ No newline at end of file diff --git a/dist/css/tempus-dominus.css.map b/dist/css/tempus-dominus.css.map deleted file mode 100644 index 7564a0600..000000000 --- a/dist/css/tempus-dominus.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tempus-dominus.scss"],"names":[],"mappings":"AAAA;EACE,6BAA6B;EAC7B,qBAAqB;EACrB,sBAAsB;EACtB,qBAAqB;EACrB,uBAAuB;EACvB,2BAA2B;EAC3B,iCAAiC;EACjC,8BAA8B;EAC9B,oBAAoB;AACtB;;AAEA;EACE,gBAAgB;EAChB,YAAY;EACZ,YAAY;EACZ,kBAAkB;EAClB,aAAa;EACb,aAAa;EACb,gHAAgH;AAClH;AACA;EACE,YAAY;AACd;AACA;EACE,wBAAwB;EACxB,sCAAsC;AACxC;AACA;EACE,eAAe;AACjB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,gBAAgB;EAChB,mBAAmB;AACrB;AACA;EACE,aAAa;AACf;AACA;EACE,cAAc;AAChB;AACA;EACE,iBAAiB;AACnB;AACA;EACE,iBAAiB;AACnB;AACA;EACE,aAAa;AACf;AACA;EACE,SAAS;EACT,gBAAgB;EAChB,6BAA6B;AAC/B;AACA;EACE;IACE,WAAW;EACb;AACF;AACA;EACE;IACE,WAAW;EACb;AACF;AACA;EACE;IACE,WAAW;EACb;AACF;AACA;EACE,aAAa;AACf;AACA;EACE,cAAc;EACd,UAAU;AACZ;AACA;EACE,gBAAgB;AAClB;AACA;;;EAGE,WAAW;EACX,iBAAiB;EACjB,gBAAgB;EAChB,SAAS;AACX;AACA;EACE,YAAY;AACd;AACA;EACE,kBAAkB;EAClB,YAAY;AACd;AACA;EACE,aAAa;EACb,4BAA4B;EAC5B,mBAAmB;EACnB,iBAAiB;AACnB;AACA;EACE,iBAAiB;EACjB,mBAAmB;AACrB;AACA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;AACA;EACE,kBAAkB;AACpB;AACA;EACE,aAAa;EACb,sBAAsB;EACtB,oBAAoB;AACtB;AACA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,sBAAsB;EACtB,aAAa;AACf;AACA;EACE,aAAa;EACb,oCAAoC;EACpC,oBAAoB;EACpB,iCAAiC;AACnC;AACA;EACE,oCAAoC;EACpC,YAAY;EACZ,2BAA2B;EAC3B,6CAA6C;AAC/C;AACA;EACE,uCAAuC;AACzC;AACA;EA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","file":"tempus-dominus.css","sourcesContent":[".visually-hidden, .tempus-dominus-widget [data-action]::after {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.tempus-dominus-widget {\n list-style: none;\n padding: 4px;\n width: 19rem;\n border-radius: 4px;\n display: none;\n z-index: 9999;\n box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);\n}\n.tempus-dominus-widget.calendarWeeks {\n width: 21rem;\n}\n.tempus-dominus-widget.calendarWeeks .date-container-days {\n grid-auto-columns: 12.5%;\n grid-template-areas: \"a a a a a a a a\";\n}\n.tempus-dominus-widget [data-action] {\n cursor: pointer;\n}\n.tempus-dominus-widget [data-action]::after {\n content: attr(title);\n}\n.tempus-dominus-widget [data-action].disabled, .tempus-dominus-widget [data-action].disabled:hover {\n background: none;\n cursor: not-allowed;\n}\n.tempus-dominus-widget .arrow {\n display: none;\n}\n.tempus-dominus-widget.show {\n display: block;\n}\n.tempus-dominus-widget.show.date-container {\n min-height: 315px;\n}\n.tempus-dominus-widget.show.time-container {\n min-height: 217px;\n}\n.tempus-dominus-widget .td-collapse:not(.show) {\n display: none;\n}\n.tempus-dominus-widget .td-collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (min-width: 576px) {\n .tempus-dominus-widget.timepicker-sbs {\n width: 38em;\n }\n}\n@media (min-width: 768px) {\n .tempus-dominus-widget.timepicker-sbs {\n width: 38em;\n }\n}\n@media (min-width: 992px) {\n .tempus-dominus-widget.timepicker-sbs {\n width: 38em;\n }\n}\n.tempus-dominus-widget.timepicker-sbs .td-row {\n display: flex;\n}\n.tempus-dominus-widget.timepicker-sbs .td-row .td-half {\n flex: 0 0 auto;\n width: 50%;\n}\n.tempus-dominus-widget div[data-action]:active {\n box-shadow: none;\n}\n.tempus-dominus-widget .timepicker-hour,\n.tempus-dominus-widget .timepicker-minute,\n.tempus-dominus-widget .timepicker-second {\n width: 54px;\n font-weight: bold;\n font-size: 1.2em;\n margin: 0;\n}\n.tempus-dominus-widget button[data-action] {\n padding: 6px;\n}\n.tempus-dominus-widget .toggleMeridiem {\n text-align: center;\n height: 38px;\n}\n.tempus-dominus-widget .calendar-header {\n display: grid;\n grid-template-areas: \"a a a\";\n margin-bottom: 10px;\n font-weight: bold;\n}\n.tempus-dominus-widget .calendar-header .next {\n text-align: right;\n padding-right: 10px;\n}\n.tempus-dominus-widget .calendar-header .previous {\n text-align: left;\n padding-left: 10px;\n}\n.tempus-dominus-widget .calendar-header .picker-switch {\n text-align: center;\n}\n.tempus-dominus-widget .toolbar {\n display: grid;\n grid-auto-flow: column;\n grid-auto-rows: 40px;\n}\n.tempus-dominus-widget .toolbar div {\n border-radius: 999px;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n display: flex;\n}\n.tempus-dominus-widget .date-container-days {\n display: grid;\n grid-template-areas: \"a a a a a a a\";\n grid-auto-rows: 40px;\n grid-auto-columns: 14.2857142857%;\n}\n.tempus-dominus-widget .date-container-days .range-in {\n background-color: #01419e !important;\n border: none;\n border-radius: 0 !important;\n box-shadow: -5px 0 0 #01419e, 5px 0 0 #01419e;\n}\n.tempus-dominus-widget .date-container-days .range-end {\n border-radius: 0 50px 50px 0 !important;\n}\n.tempus-dominus-widget .date-container-days .range-start {\n border-radius: 50px 0 0 50px !important;\n}\n.tempus-dominus-widget .date-container-days .dow {\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n.tempus-dominus-widget .date-container-days .cw {\n width: 90%;\n height: 90%;\n align-items: center;\n justify-content: center;\n display: flex;\n font-size: 0.8em;\n line-height: 20px;\n cursor: default;\n}\n.tempus-dominus-widget .date-container-decades,\n.tempus-dominus-widget .date-container-years,\n.tempus-dominus-widget .date-container-months {\n display: grid;\n grid-template-areas: \"a a a\";\n grid-auto-rows: calc((19rem - 8px) / 7);\n}\n.tempus-dominus-widget .time-container-hour,\n.tempus-dominus-widget .time-container-minute,\n.tempus-dominus-widget .time-container-second {\n display: grid;\n grid-template-areas: \"a a a a\";\n grid-auto-rows: calc((19rem - 8px) / 7);\n}\n.tempus-dominus-widget .time-container-clock {\n display: grid;\n grid-auto-rows: calc((19rem - 8px) / 7);\n}\n.tempus-dominus-widget .time-container-clock .no-highlight {\n width: 90%;\n height: 90%;\n align-items: center;\n justify-content: center;\n display: flex;\n}\n.tempus-dominus-widget .date-container-decades div:not(.no-highlight),\n.tempus-dominus-widget .date-container-years div:not(.no-highlight),\n.tempus-dominus-widget .date-container-months div:not(.no-highlight),\n.tempus-dominus-widget .date-container-days div:not(.no-highlight),\n.tempus-dominus-widget .time-container-clock div:not(.no-highlight),\n.tempus-dominus-widget .time-container-hour div:not(.no-highlight),\n.tempus-dominus-widget .time-container-minute div:not(.no-highlight),\n.tempus-dominus-widget .time-container-second div:not(.no-highlight) {\n width: 90%;\n height: 90%;\n border-radius: 999px;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n display: flex;\n}\n.tempus-dominus-widget .date-container-decades div:not(.no-highlight).disabled, .tempus-dominus-widget .date-container-decades div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget .date-container-years div:not(.no-highlight).disabled,\n.tempus-dominus-widget .date-container-years div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget .date-container-months div:not(.no-highlight).disabled,\n.tempus-dominus-widget .date-container-months div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget .date-container-days div:not(.no-highlight).disabled,\n.tempus-dominus-widget .date-container-days div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget .time-container-clock div:not(.no-highlight).disabled,\n.tempus-dominus-widget .time-container-clock div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget .time-container-hour div:not(.no-highlight).disabled,\n.tempus-dominus-widget .time-container-hour div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget .time-container-minute div:not(.no-highlight).disabled,\n.tempus-dominus-widget .time-container-minute div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget .time-container-second div:not(.no-highlight).disabled,\n.tempus-dominus-widget .time-container-second div:not(.no-highlight).disabled:hover {\n background: none;\n cursor: not-allowed;\n}\n.tempus-dominus-widget .date-container-decades div:not(.no-highlight).today,\n.tempus-dominus-widget .date-container-years div:not(.no-highlight).today,\n.tempus-dominus-widget .date-container-months div:not(.no-highlight).today,\n.tempus-dominus-widget .date-container-days div:not(.no-highlight).today,\n.tempus-dominus-widget .time-container-clock div:not(.no-highlight).today,\n.tempus-dominus-widget .time-container-hour div:not(.no-highlight).today,\n.tempus-dominus-widget .time-container-minute div:not(.no-highlight).today,\n.tempus-dominus-widget .time-container-second div:not(.no-highlight).today {\n position: relative;\n}\n.tempus-dominus-widget .date-container-decades div:not(.no-highlight).today:before,\n.tempus-dominus-widget .date-container-years div:not(.no-highlight).today:before,\n.tempus-dominus-widget .date-container-months div:not(.no-highlight).today:before,\n.tempus-dominus-widget .date-container-days div:not(.no-highlight).today:before,\n.tempus-dominus-widget .time-container-clock div:not(.no-highlight).today:before,\n.tempus-dominus-widget .time-container-hour div:not(.no-highlight).today:before,\n.tempus-dominus-widget .time-container-minute div:not(.no-highlight).today:before,\n.tempus-dominus-widget .time-container-second div:not(.no-highlight).today:before {\n content: \"\";\n display: inline-block;\n border: solid transparent;\n border-width: 0 0 7px 7px;\n position: absolute;\n bottom: 6px;\n right: 6px;\n}\n.tempus-dominus-widget .time-container {\n margin-bottom: 0.5rem;\n}\n.tempus-dominus-widget button {\n display: inline-block;\n font-weight: 400;\n line-height: 1.5;\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td.day,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td.hour,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td.minute,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td.second,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementHours],\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementMinutes],\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementSeconds],\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementHours],\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementMinutes],\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementSeconds],\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showHours],\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showMinutes],\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showSeconds],\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=togglePeriod] {\n pointer-events: none;\n cursor: default;\n}\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td.day:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td.hour:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td.minute:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td.second:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementHours]:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementMinutes]:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementSeconds]:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementHours]:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementMinutes]:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementSeconds]:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showHours]:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showMinutes]:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showSeconds]:hover,\n.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=togglePeriod]:hover {\n background: none;\n}\n.tempus-dominus-widget.light {\n color: #000;\n background-color: #fff;\n}\n.tempus-dominus-widget.light [data-action].disabled, .tempus-dominus-widget.light [data-action].disabled:hover {\n color: #6c757d;\n}\n.tempus-dominus-widget.light .toolbar div:hover {\n background: #e9ecef;\n}\n.tempus-dominus-widget.light .date-container-days .dow {\n color: rgba(0, 0, 0, 0.5);\n}\n.tempus-dominus-widget.light .date-container-days .cw {\n color: rgba(0, 0, 0, 0.38);\n}\n.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight):hover,\n.tempus-dominus-widget.light .date-container-years div:not(.no-highlight):hover,\n.tempus-dominus-widget.light .date-container-months div:not(.no-highlight):hover,\n.tempus-dominus-widget.light .date-container-days div:not(.no-highlight):hover,\n.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight):hover,\n.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight):hover,\n.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight):hover,\n.tempus-dominus-widget.light .time-container-second div:not(.no-highlight):hover {\n background: #e9ecef;\n}\n.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active,\n.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active,\n.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active,\n.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active,\n.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight),\n.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight),\n.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight),\n.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active,\n.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active,\n.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active,\n.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active {\n background-color: #0d6efd;\n color: #fff;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.old, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-in:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-in:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-end:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-end:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-start:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-start:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.new, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-in:not(.no-highlight).new, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-in:not(.no-highlight).new, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-end:not(.no-highlight).new, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-end:not(.no-highlight).new, .tempus-dominus-widget.light .date-container-decades .date-container-days div.range-start:not(.no-highlight).new, .tempus-dominus-widget.light .date-container-days .date-container-decades div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.old,\n.tempus-dominus-widget.light .date-container-years .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .date-container-years div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-years .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .date-container-years div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-years .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .date-container-years div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.new,\n.tempus-dominus-widget.light .date-container-years .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .date-container-years div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-years .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .date-container-years div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-years .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .date-container-years div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.old,\n.tempus-dominus-widget.light .date-container-months .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .date-container-months div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-months .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .date-container-months div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-months .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .date-container-months div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.new,\n.tempus-dominus-widget.light .date-container-months .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .date-container-months div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-months .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .date-container-months div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-months .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .date-container-months div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.old,\n.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.new,\n.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.old,\n.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.new,\n.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.old,\n.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.new,\n.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.old,\n.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.new,\n.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.old,\n.tempus-dominus-widget.light .time-container-second .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-second div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-second .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-second div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-second .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days .time-container-second div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.new,\n.tempus-dominus-widget.light .time-container-second .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-second div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-second .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-second div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-second .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days .time-container-second div.range-start:not(.no-highlight).new {\n color: #fff;\n}\n.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight).today:before,\n.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight).today:before,\n.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight).today:before,\n.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.today:before {\n border-bottom-color: #fff;\n}\n.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).old, .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).new,\n.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).old,\n.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).new,\n.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).old,\n.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).new {\n color: rgba(0, 0, 0, 0.38);\n}\n.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).disabled, .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).disabled,\n.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).disabled,\n.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).disabled,\n.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).disabled,\n.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).disabled,\n.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).disabled,\n.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).disabled,\n.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).disabled:hover {\n color: #6c757d;\n}\n.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).today:before,\n.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).today:before,\n.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).today:before,\n.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).today:before,\n.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).today:before,\n.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).today:before,\n.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).today:before,\n.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).today:before {\n border-bottom-color: #0d6efd;\n border-top-color: rgba(0, 0, 0, 0.2);\n}\n.tempus-dominus-widget.light button {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.tempus-dominus-widget.dark {\n color: #e3e3e3;\n background-color: #1b1b1b;\n}\n.tempus-dominus-widget.dark [data-action].disabled, .tempus-dominus-widget.dark [data-action].disabled:hover {\n color: #6c757d;\n}\n.tempus-dominus-widget.dark .toolbar div:hover {\n background: rgb(35, 38, 39);\n}\n.tempus-dominus-widget.dark .date-container-days .dow {\n color: rgba(232, 230, 227, 0.5);\n}\n.tempus-dominus-widget.dark .date-container-days .range-in {\n background-color: #0071c7 !important;\n box-shadow: -5px 0 0 #0071c7, 5px 0 0 #0071c7;\n}\n.tempus-dominus-widget.dark .date-container-days .cw {\n color: rgba(232, 230, 227, 0.38);\n}\n.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight):hover,\n.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight):hover,\n.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight):hover,\n.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight):hover,\n.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight):hover,\n.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight):hover,\n.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight):hover,\n.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight):hover {\n background: rgb(35, 38, 39);\n}\n.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active,\n.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active,\n.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active,\n.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active,\n.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight),\n.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight),\n.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight),\n.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active,\n.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active,\n.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active,\n.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active {\n background-color: #4db2ff;\n color: #fff;\n text-shadow: 0 -1px 0 rgba(232, 230, 227, 0.25);\n}\n.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.old, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-in:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-in:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-end:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-end:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-start:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-start:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.new, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-in:not(.no-highlight).new, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-in:not(.no-highlight).new, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-end:not(.no-highlight).new, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-end:not(.no-highlight).new, .tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-start:not(.no-highlight).new, .tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.old,\n.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.new,\n.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.old,\n.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.new,\n.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.old,\n.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.new,\n.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.old,\n.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.new,\n.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.old,\n.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.new,\n.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.old,\n.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.new,\n.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.old,\n.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-in:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-end:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-start:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.new,\n.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-in:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-end:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-start:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-start:not(.no-highlight).new {\n color: #fff;\n}\n.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight).today:before,\n.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight).today:before,\n.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight).today:before,\n.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.today:before,\n.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.today:before {\n border-bottom-color: #1b1b1b;\n}\n.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).old, .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).new,\n.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).old,\n.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).new,\n.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).old,\n.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).new {\n color: rgba(232, 230, 227, 0.38);\n}\n.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).disabled, .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).disabled,\n.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).disabled,\n.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).disabled,\n.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).disabled,\n.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).disabled,\n.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).disabled,\n.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).disabled:hover,\n.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).disabled,\n.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).disabled:hover {\n color: #6c757d;\n}\n.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).today:before,\n.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).today:before,\n.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).today:before,\n.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).today:before,\n.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).today:before,\n.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).today:before,\n.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).today:before,\n.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).today:before {\n border-bottom-color: #4db2ff;\n border-top-color: rgba(232, 230, 227, 0.2);\n}\n.tempus-dominus-widget.dark button {\n color: #fff;\n background-color: #4db2ff;\n border-color: #4db2ff;\n}"]} \ No newline at end of file diff --git a/dist/css/tempus-dominus.min.css b/dist/css/tempus-dominus.min.css deleted file mode 100644 index 062b95926..000000000 --- a/dist/css/tempus-dominus.min.css +++ /dev/null @@ -1 +0,0 @@ -.tempus-dominus-widget [data-action]:after,.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.tempus-dominus-widget{border-radius:4px;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);display:none;list-style:none;padding:4px;width:19rem;z-index:9999}.tempus-dominus-widget.calendarWeeks{width:21rem}.tempus-dominus-widget.calendarWeeks .date-container-days{grid-auto-columns:12.5%;grid-template-areas:"a a a a a a a a"}.tempus-dominus-widget [data-action]{cursor:pointer}.tempus-dominus-widget [data-action]:after{content:attr(title)}.tempus-dominus-widget [data-action].disabled,.tempus-dominus-widget [data-action].disabled:hover{background:none;cursor:not-allowed}.tempus-dominus-widget .arrow{display:none}.tempus-dominus-widget.show{display:block}.tempus-dominus-widget.show.date-container{min-height:315px}.tempus-dominus-widget.show.time-container{min-height:217px}.tempus-dominus-widget .td-collapse:not(.show){display:none}.tempus-dominus-widget .td-collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (min-width:576px){.tempus-dominus-widget.timepicker-sbs{width:38em}}@media (min-width:768px){.tempus-dominus-widget.timepicker-sbs{width:38em}}@media (min-width:992px){.tempus-dominus-widget.timepicker-sbs{width:38em}}.tempus-dominus-widget.timepicker-sbs .td-row{display:flex}.tempus-dominus-widget.timepicker-sbs .td-row .td-half{flex:0 0 auto;width:50%}.tempus-dominus-widget div[data-action]:active{box-shadow:none}.tempus-dominus-widget .timepicker-hour,.tempus-dominus-widget .timepicker-minute,.tempus-dominus-widget .timepicker-second{font-size:1.2em;font-weight:700;margin:0;width:54px}.tempus-dominus-widget button[data-action]{padding:6px}.tempus-dominus-widget .toggleMeridiem{height:38px;text-align:center}.tempus-dominus-widget .calendar-header{display:grid;font-weight:700;grid-template-areas:"a a a";margin-bottom:10px}.tempus-dominus-widget .calendar-header .next{padding-right:10px;text-align:right}.tempus-dominus-widget .calendar-header .previous{padding-left:10px;text-align:left}.tempus-dominus-widget .calendar-header .picker-switch{text-align:center}.tempus-dominus-widget .toolbar{display:grid;grid-auto-flow:column;grid-auto-rows:40px}.tempus-dominus-widget .toolbar div{align-items:center;border-radius:999px;box-sizing:border-box;display:flex;justify-content:center}.tempus-dominus-widget .date-container-days{display:grid;grid-auto-columns:14.2857142857%;grid-auto-rows:40px;grid-template-areas:"a a a a a a a"}.tempus-dominus-widget .date-container-days .range-in{background-color:#01419e!important;border:none;border-radius:0!important;box-shadow:-5px 0 0 #01419e,5px 0 0 #01419e}.tempus-dominus-widget .date-container-days .range-end{border-radius:0 50px 50px 0!important}.tempus-dominus-widget .date-container-days .range-start{border-radius:50px 0 0 50px!important}.tempus-dominus-widget .date-container-days .dow{align-items:center;justify-content:center;text-align:center}.tempus-dominus-widget .date-container-days .cw{align-items:center;cursor:default;display:flex;font-size:.8em;height:90%;justify-content:center;line-height:20px;width:90%}.tempus-dominus-widget .date-container-decades,.tempus-dominus-widget .date-container-months,.tempus-dominus-widget .date-container-years{display:grid;grid-auto-rows:calc(2.71429rem - 1.14286px);grid-template-areas:"a a a"}.tempus-dominus-widget .time-container-hour,.tempus-dominus-widget .time-container-minute,.tempus-dominus-widget .time-container-second{display:grid;grid-auto-rows:calc(2.71429rem - 1.14286px);grid-template-areas:"a a a a"}.tempus-dominus-widget .time-container-clock{display:grid;grid-auto-rows:calc(2.71429rem - 1.14286px)}.tempus-dominus-widget .time-container-clock .no-highlight{align-items:center;display:flex;height:90%;justify-content:center;width:90%}.tempus-dominus-widget .date-container-days div:not(.no-highlight),.tempus-dominus-widget .date-container-decades div:not(.no-highlight),.tempus-dominus-widget .date-container-months div:not(.no-highlight),.tempus-dominus-widget .date-container-years div:not(.no-highlight),.tempus-dominus-widget .time-container-clock div:not(.no-highlight),.tempus-dominus-widget .time-container-hour div:not(.no-highlight),.tempus-dominus-widget .time-container-minute div:not(.no-highlight),.tempus-dominus-widget .time-container-second div:not(.no-highlight){align-items:center;border-radius:999px;box-sizing:border-box;display:flex;height:90%;justify-content:center;width:90%}.tempus-dominus-widget .date-container-days div:not(.no-highlight).disabled,.tempus-dominus-widget .date-container-days div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .date-container-decades div:not(.no-highlight).disabled,.tempus-dominus-widget .date-container-decades div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .date-container-months div:not(.no-highlight).disabled,.tempus-dominus-widget .date-container-months div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .date-container-years div:not(.no-highlight).disabled,.tempus-dominus-widget .date-container-years div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .time-container-clock div:not(.no-highlight).disabled,.tempus-dominus-widget .time-container-clock div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .time-container-hour div:not(.no-highlight).disabled,.tempus-dominus-widget .time-container-hour div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .time-container-minute div:not(.no-highlight).disabled,.tempus-dominus-widget .time-container-minute div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .time-container-second div:not(.no-highlight).disabled,.tempus-dominus-widget .time-container-second div:not(.no-highlight).disabled:hover{background:none;cursor:not-allowed}.tempus-dominus-widget .date-container-days div:not(.no-highlight).today,.tempus-dominus-widget .date-container-decades div:not(.no-highlight).today,.tempus-dominus-widget .date-container-months div:not(.no-highlight).today,.tempus-dominus-widget .date-container-years div:not(.no-highlight).today,.tempus-dominus-widget .time-container-clock div:not(.no-highlight).today,.tempus-dominus-widget .time-container-hour div:not(.no-highlight).today,.tempus-dominus-widget .time-container-minute div:not(.no-highlight).today,.tempus-dominus-widget .time-container-second div:not(.no-highlight).today{position:relative}.tempus-dominus-widget .date-container-days div:not(.no-highlight).today:before,.tempus-dominus-widget .date-container-decades div:not(.no-highlight).today:before,.tempus-dominus-widget .date-container-months div:not(.no-highlight).today:before,.tempus-dominus-widget .date-container-years div:not(.no-highlight).today:before,.tempus-dominus-widget .time-container-clock div:not(.no-highlight).today:before,.tempus-dominus-widget .time-container-hour div:not(.no-highlight).today:before,.tempus-dominus-widget .time-container-minute div:not(.no-highlight).today:before,.tempus-dominus-widget .time-container-second div:not(.no-highlight).today:before{border:solid transparent;border-width:0 0 7px 7px;bottom:6px;content:"";display:inline-block;position:absolute;right:6px}.tempus-dominus-widget .time-container{margin-bottom:.5rem}.tempus-dominus-widget button{border-radius:.25rem;cursor:pointer;display:inline-block;font-size:1rem;font-weight:400;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementHours],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementMinutes],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementSeconds],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementHours],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementMinutes],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementSeconds],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showHours],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showMinutes],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showSeconds],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=togglePeriod],.tempus-dominus-widget.tempus-dominus-widget-readonly table td.day,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.hour,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.minute,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.second{cursor:default;pointer-events:none}.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementHours]:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementMinutes]:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=decrementSeconds]:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementHours]:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementMinutes]:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=incrementSeconds]:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showHours]:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showMinutes]:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=showSeconds]:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action=togglePeriod]:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.day:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.hour:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.minute:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.second:hover{background:none}.tempus-dominus-widget.light{background-color:#fff;color:#000}.tempus-dominus-widget.light [data-action].disabled,.tempus-dominus-widget.light [data-action].disabled:hover{color:#6c757d}.tempus-dominus-widget.light .toolbar div:hover{background:#e9ecef}.tempus-dominus-widget.light .date-container-days .dow{color:rgba(0,0,0,.5)}.tempus-dominus-widget.light .date-container-days .cw{color:rgba(0,0,0,.38)}.tempus-dominus-widget.light .date-container-days div:not(.no-highlight):hover,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight):hover,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight):hover,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight):hover,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight):hover,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight):hover,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight):hover,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight):hover{background:#e9ecef}.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight),.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight),.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight),.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active{background-color:#0d6efd;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.tempus-dominus-widget.light .date-container-days .date-container-decades div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .date-container-decades div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .date-container-decades div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .date-container-decades div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .date-container-decades div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .date-container-decades div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .date-container-months div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .date-container-months div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .date-container-months div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .date-container-months div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .date-container-months div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .date-container-months div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .date-container-years div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .date-container-years div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .date-container-years div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .date-container-years div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .date-container-years div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .date-container-years div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-clock div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-hour div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-minute div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-second div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-second div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-second div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-second div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days .time-container-second div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days .time-container-second div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.new,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.old,.tempus-dominus-widget.light .date-container-decades .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-decades .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-decades .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-decades .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-decades .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-decades .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.new,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.old,.tempus-dominus-widget.light .date-container-months .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-months .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-months .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-months .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-months .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-months .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.new,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.old,.tempus-dominus-widget.light .date-container-years .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-years .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-years .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-years .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-years .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-years .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.new,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.old,.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-clock .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.new,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.old,.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-hour .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.new,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.old,.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-minute .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.new,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.old,.tempus-dominus-widget.light .time-container-second .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-second .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-second .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-second .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-second .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-second .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.new,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.old{color:#fff}.tempus-dominus-widget.light .date-container-days div.range-end:not(.no-highlight).today:before,.tempus-dominus-widget.light .date-container-days div.range-in:not(.no-highlight).today:before,.tempus-dominus-widget.light .date-container-days div.range-start:not(.no-highlight).today:before,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.today:before{border-bottom-color:#fff}.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).old{color:rgba(0,0,0,.38)}.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).disabled,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).disabled,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).disabled,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).disabled,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).disabled,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).disabled,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).disabled,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).disabled,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).disabled:hover{color:#6c757d}.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).today:before,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).today:before,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).today:before,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).today:before,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).today:before,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).today:before,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).today:before,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).today:before{border-bottom-color:#0d6efd;border-top-color:rgba(0,0,0,.2)}.tempus-dominus-widget.light button{background-color:#0d6efd;border-color:#0d6efd;color:#fff}.tempus-dominus-widget.dark{background-color:#1b1b1b;color:#e3e3e3}.tempus-dominus-widget.dark [data-action].disabled,.tempus-dominus-widget.dark [data-action].disabled:hover{color:#6c757d}.tempus-dominus-widget.dark .toolbar div:hover{background:#232627}.tempus-dominus-widget.dark .date-container-days .dow{color:hsla(36,10%,90%,.5)}.tempus-dominus-widget.dark .date-container-days .range-in{background-color:#0071c7!important;box-shadow:-5px 0 0 #0071c7,5px 0 0 #0071c7}.tempus-dominus-widget.dark .date-container-days .cw{color:hsla(36,10%,90%,.38)}.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight):hover,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight):hover,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight):hover,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight):hover,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight):hover,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight):hover,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight):hover,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight):hover{background:#232627}.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight),.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight),.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight),.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active{background-color:#4db2ff;color:#fff;text-shadow:0 -1px 0 hsla(36,10%,90%,.25)}.tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .date-container-decades div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .date-container-months div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .date-container-years div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-clock div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-hour div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-minute div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days .time-container-second div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-decades .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-months .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-years .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-clock .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-hour .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-minute .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-end:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-end:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-in:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-in:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-start:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-second .date-container-days div.range-start:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.old{color:#fff}.tempus-dominus-widget.dark .date-container-days div.range-end:not(.no-highlight).today:before,.tempus-dominus-widget.dark .date-container-days div.range-in:not(.no-highlight).today:before,.tempus-dominus-widget.dark .date-container-days div.range-start:not(.no-highlight).today:before,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.today:before{border-bottom-color:#1b1b1b}.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).old{color:hsla(36,10%,90%,.38)}.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).disabled:hover{color:#6c757d}.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).today:before{border-bottom-color:#4db2ff;border-top-color:hsla(36,10%,90%,.2)}.tempus-dominus-widget.dark button{background-color:#4db2ff;border-color:#4db2ff;color:#fff} \ No newline at end of file diff --git a/dist/js/jQuery-provider.js b/dist/js/jQuery-provider.js deleted file mode 100644 index 1bce54dbc..000000000 --- a/dist/js/jQuery-provider.js +++ /dev/null @@ -1,154 +0,0 @@ -/// -/*global $, tempusDominus */ - -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2021 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -tempusDominus.jQueryInterface = function (option, argument) { - if (this.length === 1) { - return tempusDominus.jQueryHandleThis(this, option, argument); - } - // "this" is jquery here - return this.each(function () { - tempusDominus.jQueryHandleThis(this, option, argument); - }); -}; - -tempusDominus.jQueryHandleThis = function (me, option, argument) { - let data = $(me).data(tempusDominus.Namespace.dataKey); - if (typeof option === 'object') { - option = $.extend({}, tempusDominus.DefaultOptions, option); - } - - if (!data) { - data = new tempusDominus.TempusDominus($(me)[0], option); - $(me).data(tempusDominus.Namespace.dataKey, data); - } - - if (typeof option === 'string') { - if (data[option] === undefined) { - throw new Error(`No method named "${option}"`); - } - if (argument === undefined) { - return data[option](); - } else { - if (option === 'date') { - data.isDateUpdateThroughDateOptionFromClientCode = true; - } - const ret = data[option](argument); - data.isDateUpdateThroughDateOptionFromClientCode = false; - return ret; - } - } -}; - -tempusDominus.getSelectorFromElement = function ($element) { - let selector = $element.data('target'), - $selector; - - if (!selector) { - selector = $element.attr('href') || ''; - selector = /^#[a-z]/i.test(selector) ? selector : null; - } - $selector = $(selector); - if ($selector.length === 0) { - return $element; - } - - if (!$selector.data(tempusDominus.Namespace.dataKey)) { - $.extend({}, $selector.data(), $(this).data()); - } - - return $selector; -}; - -/** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ -$(document) - .on( - `click${tempusDominus.Namespace.events.key}.data-api`, - `[data-toggle="${tempusDominus.Namespace.dataKey}"]`, - function () { - const $originalTarget = $(this), - $target = tempusDominus.getSelectorFromElement($originalTarget), - config = $target.data(tempusDominus.Namespace.dataKey); - if ($target.length === 0) { - return; - } - if ( - config._options.allowInputToggle && - $originalTarget.is('input[data-toggle="datetimepicker"]') - ) { - return; - } - tempusDominus.jQueryInterface.call($target, 'toggle'); - } - ) - .on( - tempusDominus.Namespace.events.change, - `.${tempusDominus.Namespace.NAME}-input`, - function (event) { - const $target = tempusDominus.getSelectorFromElement($(this)); - if ($target.length === 0 || event.isInit) { - return; - } - tempusDominus.jQueryInterface.call($target, '_change', event); - } - ) - .on( - tempusDominus.Namespace.events.blur, - `.${tempusDominus.Namespace.NAME}-input`, - function (event) { - const $target = tempusDominus.getSelectorFromElement($(this)), - config = $target.data(tempusDominus.Namespace.dataKey); - if ($target.length === 0) { - return; - } - if (config._options.debug || window.debug) { - return; - } - tempusDominus.jQueryInterface.call($target, 'hide', event); - } - ) - /*.on(tempusDominus.Namespace.Events.keydown, `.${tempusDominus.Namespace.NAME}-input`, function (event) { - const $target = tempusDominus.getSelectorFromElement($(this)); - if ($target.length === 0) { - return; - } - tempusDominus.jQueryInterface.call($target, '_keydown', event); - }) - .on(tempusDominus.Namespace.Events.keyup, `.${tempusDominus.Namespace.NAME}-input`, function (event) { - const $target = tempusDominus.getSelectorFromElement($(this)); - if ($target.length === 0) { - return; - } - tempusDominus.jQueryInterface.call($target, '_keyup', event); - })*/ - .on( - tempusDominus.Namespace.events.focus, - `.${tempusDominus.Namespace.NAME}-input`, - function (event) { - const $target = tempusDominus.getSelectorFromElement($(this)), - config = $target.data(tempusDominus.Namespace.dataKey); - if ($target.length === 0) { - return; - } - if (!config._options.allowInputToggle) { - return; - } - tempusDominus.jQueryInterface.call($target, 'show', event); - } - ); -const name = 'tempusDominus'; -const JQUERY_NO_CONFLICT = $.fn[name]; -$.fn[name] = tempusDominus.jQueryInterface; -$.fn[name].Constructor = tempusDominus.TempusDominus; -$.fn[name].noConflict = function () { - $.fn[name] = JQUERY_NO_CONFLICT; - return tempusDominus.jQueryInterface; -}; diff --git a/dist/js/jQuery-provider.min.js b/dist/js/jQuery-provider.min.js deleted file mode 100644 index f180e3107..000000000 --- a/dist/js/jQuery-provider.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2021 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -tempusDominus.jQueryInterface=function(e,t){return 1===this.length?tempusDominus.jQueryHandleThis(this,e,t):this.each((function(){tempusDominus.jQueryHandleThis(this,e,t)}))},tempusDominus.jQueryHandleThis=function(e,t,n){let s=$(e).data(tempusDominus.Namespace.dataKey);if("object"==typeof t&&(t=$.extend({},tempusDominus.DefaultOptions,t)),s||(s=new tempusDominus.TempusDominus($(e)[0],t),$(e).data(tempusDominus.Namespace.dataKey,s)),"string"==typeof t){if(void 0===s[t])throw new Error(`No method named "${t}"`);if(void 0===n)return s[t]();{"date"===t&&(s.isDateUpdateThroughDateOptionFromClientCode=!0);const e=s[t](n);return s.isDateUpdateThroughDateOptionFromClientCode=!1,e}}},tempusDominus.getSelectorFromElement=function(e){let t,n=e.data("target");return n||(n=e.attr("href")||"",n=/^#[a-z]/i.test(n)?n:null),t=$(n),0===t.length?e:(t.data(tempusDominus.Namespace.dataKey)||$.extend({},t.data(),$(this).data()),t)},$(document).on(`click${tempusDominus.Namespace.events.key}.data-api`,`[data-toggle="${tempusDominus.Namespace.dataKey}"]`,(function(){const e=$(this),t=tempusDominus.getSelectorFromElement(e),n=t.data(tempusDominus.Namespace.dataKey);0!==t.length&&(n._options.allowInputToggle&&e.is('input[data-toggle="datetimepicker"]')||tempusDominus.jQueryInterface.call(t,"toggle"))})).on(tempusDominus.Namespace.events.change,`.${tempusDominus.Namespace.NAME}-input`,(function(e){const t=tempusDominus.getSelectorFromElement($(this));0===t.length||e.isInit||tempusDominus.jQueryInterface.call(t,"_change",e)})).on(tempusDominus.Namespace.events.blur,`.${tempusDominus.Namespace.NAME}-input`,(function(e){const t=tempusDominus.getSelectorFromElement($(this)),n=t.data(tempusDominus.Namespace.dataKey);0!==t.length&&(n._options.debug||window.debug||tempusDominus.jQueryInterface.call(t,"hide",e))})).on(tempusDominus.Namespace.events.focus,`.${tempusDominus.Namespace.NAME}-input`,(function(e){const t=tempusDominus.getSelectorFromElement($(this)),n=t.data(tempusDominus.Namespace.dataKey);0!==t.length&&n._options.allowInputToggle&&tempusDominus.jQueryInterface.call(t,"show",e)}));const e="tempusDominus",t=$.fn[e];$.fn[e]=tempusDominus.jQueryInterface,$.fn[e].Constructor=tempusDominus.TempusDominus,$.fn[e].noConflict=function(){return $.fn[e]=t,tempusDominus.jQueryInterface}; diff --git a/dist/js/tempus-dominus.esm.js b/dist/js/tempus-dominus.esm.js deleted file mode 100644 index 6e580c7f6..000000000 --- a/dist/js/tempus-dominus.esm.js +++ /dev/null @@ -1,4599 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -class TdError extends Error { -} -class ErrorMessages { - constructor() { - this.base = 'TD:'; - //#endregion - //#region used with notify.error - /** - * Used with an Error Event type if the user selects a date that - * fails restriction validation. - */ - this.failedToSetInvalidDate = 'Failed to set invalid date'; - /** - * Used with an Error Event type when a user changes the value of the - * input field directly, and does not provide a valid date. - */ - this.failedToParseInput = 'Failed parse input field'; - //#endregion - } - //#region out to console - /** - * Throws an error indicating that a key in the options object is invalid. - * @param optionName - */ - unexpectedOption(optionName) { - const error = new TdError(`${this.base} Unexpected option: ${optionName} does not match a known option.`); - error.code = 1; - throw error; - } - /** - * Throws an error indicating that one more keys in the options object is invalid. - * @param optionName - */ - unexpectedOptions(optionName) { - const error = new TdError(`${this.base}: ${optionName.join(', ')}`); - error.code = 1; - throw error; - } - /** - * Throws an error when an option is provide an unsupported value. - * For example a value of 'cheese' for toolbarPlacement which only supports - * 'top', 'bottom', 'default'. - * @param optionName - * @param badValue - * @param validOptions - */ - unexpectedOptionValue(optionName, badValue, validOptions) { - const error = new TdError(`${this.base} Unexpected option value: ${optionName} does not accept a value of "${badValue}". Valid values are: ${validOptions.join(', ')}`); - error.code = 2; - throw error; - } - /** - * Throws an error when an option value is the wrong type. - * For example a string value was provided to multipleDates which only - * supports true or false. - * @param optionName - * @param badType - * @param expectedType - */ - typeMismatch(optionName, badType, expectedType) { - const error = new TdError(`${this.base} Mismatch types: ${optionName} has a type of ${badType} instead of the required ${expectedType}`); - error.code = 3; - throw error; - } - /** - * Throws an error when an option value is outside of the expected range. - * For example restrictions.daysOfWeekDisabled excepts a value between 0 and 6. - * @param optionName - * @param lower - * @param upper - */ - numbersOutOfRange(optionName, lower, upper) { - const error = new TdError(`${this.base} ${optionName} expected an array of number between ${lower} and ${upper}.`); - error.code = 4; - throw error; - } - /** - * Throws an error when a value for a date options couldn't be parsed. Either - * the option was an invalid string or an invalid Date object. - * @param optionName - * @param date - * @param soft If true, logs a warning instead of an error. - */ - //eslint-disable-next-line @typescript-eslint/no-explicit-any - failedToParseDate(optionName, date, soft = false) { - const error = new TdError(`${this.base} Could not correctly parse "${date}" to a date for ${optionName}.`); - error.code = 5; - if (!soft) - throw error; - console.warn(error); - } - /** - * Throws when an element to attach to was not provided in the constructor. - */ - mustProvideElement() { - const error = new TdError(`${this.base} No element was provided.`); - error.code = 6; - throw error; - } - /** - * Throws if providing an array for the events to subscribe method doesn't have - * the same number of callbacks. E.g., subscribe([1,2], [1]) - */ - subscribeMismatch() { - const error = new TdError(`${this.base} The subscribed events does not match the number of callbacks`); - error.code = 7; - throw error; - } - /** - * Throws if the configuration has conflicting rules e.g. minDate is after maxDate - */ - conflictingConfiguration(message) { - const error = new TdError(`${this.base} A configuration value conflicts with another rule. ${message}`); - error.code = 8; - throw error; - } - /** - * customDateFormat errors - */ - customDateFormatError(message) { - const error = new TdError(`${this.base} Custom Date Format: ${message}`); - error.code = 9; - throw error; - } - /** - * Logs a warning if a date option value is provided as a string, instead of - * a date/datetime object. - */ - dateString() { - console.warn(`${this.base} Using a string for date options is not recommended unless you specify an ISO string or use the customDateFormat plugin.`); - } - deprecatedWarning(message, remediation) { - console.warn(`${this.base} Warning ${message} is deprecated and will be removed in a future version. ${remediation}`); - } - throwError(message) { - const error = new TdError(`${this.base} ${message}`); - error.code = 9; - throw error; - } -} - -// this is not the way I want this to stay but nested classes seemed to blown up once its compiled. -const NAME = 'tempus-dominus', dataKey = 'td'; -/** - * Events - */ -class Events { - constructor() { - this.key = `.${dataKey}`; - /** - * Change event. Fired when the user selects a date. - * See also EventTypes.ChangeEvent - */ - this.change = `change${this.key}`; - /** - * Emit when the view changes for example from month view to the year view. - * See also EventTypes.ViewUpdateEvent - */ - this.update = `update${this.key}`; - /** - * Emits when a selected date or value from the input field fails to meet the provided validation rules. - * See also EventTypes.FailEvent - */ - this.error = `error${this.key}`; - /** - * Show event - * @event Events#show - */ - this.show = `show${this.key}`; - /** - * Hide event - * @event Events#hide - */ - this.hide = `hide${this.key}`; - // blur and focus are used in the jQuery provider but are otherwise unused. - // keyup/down will be used later for keybinding options - this.blur = `blur${this.key}`; - this.focus = `focus${this.key}`; - this.keyup = `keyup${this.key}`; - this.keydown = `keydown${this.key}`; - } -} -class Css { - constructor() { - /** - * The outer element for the widget. - */ - this.widget = `${NAME}-widget`; - /** - * Hold the previous, next and switcher divs - */ - this.calendarHeader = 'calendar-header'; - /** - * The element for the action to change the calendar view. E.g. month -> year. - */ - this.switch = 'picker-switch'; - /** - * The elements for all the toolbar options - */ - this.toolbar = 'toolbar'; - /** - * Disables the hover and rounding affect. - */ - this.noHighlight = 'no-highlight'; - /** - * Applied to the widget element when the side by side option is in use. - */ - this.sideBySide = 'timepicker-sbs'; - /** - * The element for the action to change the calendar view, e.g. August -> July - */ - this.previous = 'previous'; - /** - * The element for the action to change the calendar view, e.g. August -> September - */ - this.next = 'next'; - /** - * Applied to any action that would violate any restriction options. ALso applied - * to an input field if the disabled function is called. - */ - this.disabled = 'disabled'; - /** - * Applied to any date that is less than requested view, - * e.g. the last day of the previous month. - */ - this.old = 'old'; - /** - * Applied to any date that is greater than of requested view, - * e.g. the last day of the previous month. - */ - this.new = 'new'; - /** - * Applied to any date that is currently selected. - */ - this.active = 'active'; - //#region date element - /** - * The outer element for the calendar view. - */ - this.dateContainer = 'date-container'; - /** - * The outer element for the decades view. - */ - this.decadesContainer = `${this.dateContainer}-decades`; - /** - * Applied to elements within the decade container, e.g. 2020, 2030 - */ - this.decade = 'decade'; - /** - * The outer element for the years view. - */ - this.yearsContainer = `${this.dateContainer}-years`; - /** - * Applied to elements within the years container, e.g. 2021, 2021 - */ - this.year = 'year'; - /** - * The outer element for the month view. - */ - this.monthsContainer = `${this.dateContainer}-months`; - /** - * Applied to elements within the month container, e.g. January, February - */ - this.month = 'month'; - /** - * The outer element for the calendar view. - */ - this.daysContainer = `${this.dateContainer}-days`; - /** - * Applied to elements within the day container, e.g. 1, 2..31 - */ - this.day = 'day'; - /** - * If display.calendarWeeks is enabled, a column displaying the week of year - * is shown. This class is applied to each cell in that column. - */ - this.calendarWeeks = 'cw'; - /** - * Applied to the first row of the calendar view, e.g. Sunday, Monday - */ - this.dayOfTheWeek = 'dow'; - /** - * Applied to the current date on the calendar view. - */ - this.today = 'today'; - /** - * Applied to the locale's weekend dates on the calendar view, e.g. Sunday, Saturday - */ - this.weekend = 'weekend'; - this.rangeIn = 'range-in'; - this.rangeStart = 'range-start'; - this.rangeEnd = 'range-end'; - //#endregion - //#region time element - /** - * The outer element for all time related elements. - */ - this.timeContainer = 'time-container'; - /** - * Applied the separator columns between time elements, e.g. hour *:* minute *:* second - */ - this.separator = 'separator'; - /** - * The outer element for the clock view. - */ - this.clockContainer = `${this.timeContainer}-clock`; - /** - * The outer element for the hours selection view. - */ - this.hourContainer = `${this.timeContainer}-hour`; - /** - * The outer element for the minutes selection view. - */ - this.minuteContainer = `${this.timeContainer}-minute`; - /** - * The outer element for the seconds selection view. - */ - this.secondContainer = `${this.timeContainer}-second`; - /** - * Applied to each element in the hours selection view. - */ - this.hour = 'hour'; - /** - * Applied to each element in the minutes selection view. - */ - this.minute = 'minute'; - /** - * Applied to each element in the seconds selection view. - */ - this.second = 'second'; - /** - * Applied AM/PM toggle button. - */ - this.toggleMeridiem = 'toggleMeridiem'; - //#endregion - //#region collapse - /** - * Applied the element of the current view mode, e.g. calendar or clock. - */ - this.show = 'show'; - /** - * Applied to the currently showing view mode during a transition - * between calendar and clock views - */ - this.collapsing = 'td-collapsing'; - /** - * Applied to the currently hidden view mode. - */ - this.collapse = 'td-collapse'; - //#endregion - /** - * Applied to the widget when the option display.inline is enabled. - */ - this.inline = 'inline'; - /** - * Applied to the widget when the option display.theme is light. - */ - this.lightTheme = 'light'; - /** - * Applied to the widget when the option display.theme is dark. - */ - this.darkTheme = 'dark'; - /** - * Used for detecting if the system color preference is dark mode - */ - this.isDarkPreferredQuery = '(prefers-color-scheme: dark)'; - } -} -class Namespace { -} -Namespace.NAME = NAME; -// noinspection JSUnusedGlobalSymbols -Namespace.dataKey = dataKey; -Namespace.events = new Events(); -Namespace.css = new Css(); -Namespace.errorMessages = new ErrorMessages(); - -const DefaultFormatLocalization = { - dateFormats: { - LTS: 'h:mm:ss T', - LT: 'h:mm T', - L: 'MM/dd/yyyy', - LL: 'MMMM d, yyyy', - LLL: 'MMMM d, yyyy h:mm T', - LLLL: 'dddd, MMMM d, yyyy h:mm T', - }, - format: 'L LT', - locale: 'default', - hourCycle: undefined, - ordinal: (n) => { - const s = ['th', 'st', 'nd', 'rd']; - const v = n % 100; - return `[${n}${s[(v - 20) % 10] || s[v] || s[0]}]`; - }, -}; -var DefaultFormatLocalization$1 = { ...DefaultFormatLocalization }; - -var Unit; -(function (Unit) { - Unit["seconds"] = "seconds"; - Unit["minutes"] = "minutes"; - Unit["hours"] = "hours"; - Unit["date"] = "date"; - Unit["month"] = "month"; - Unit["year"] = "year"; -})(Unit || (Unit = {})); -const twoDigitTemplate = { - month: '2-digit', - day: '2-digit', - year: 'numeric', - hour: '2-digit', - minute: '2-digit', - second: '2-digit', -}; -/** - * Returns an Intl format object based on the provided object - * @param unit - */ -const getFormatByUnit = (unit) => { - switch (unit) { - case 'date': - return { dateStyle: 'short' }; - case 'month': - return { - month: 'numeric', - year: 'numeric', - }; - case 'year': - return { year: 'numeric' }; - } -}; -/** - * Attempts to guess the hour cycle of the given local - * @param locale - */ -const guessHourCycle = (locale) => { - if (!locale) - return 'h12'; - // noinspection SpellCheckingInspection - const template = { - hour: '2-digit', - minute: '2-digit', - numberingSystem: 'latn', - }; - const dt = new DateTime().setLocalization({ locale }); - dt.hours = 0; - const start = dt.parts(undefined, template).hour; - //midnight is 12 so en-US style 12 AM - if (start === '12') - return 'h12'; - //midnight is 24 is from 00-24 - if (start === '24') - return 'h24'; - dt.hours = 23; - const end = dt.parts(undefined, template).hour; - //if midnight is 00 and hour 23 is 11 then - if (start === '00' && end === '11') - return 'h11'; - if (start === '00' && end === '23') - return 'h23'; - console.warn(`couldn't determine hour cycle for ${locale}. start: ${start}. end: ${end}`); - return undefined; -}; -/** - * For the most part this object behaves exactly the same way - * as the native Date object with a little extra spice. - */ -class DateTime extends Date { - constructor() { - super(...arguments); - this.localization = DefaultFormatLocalization$1; - this.nonLeapLadder = [ - 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, - ]; - this.leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; - //#region CDF stuff - this.dateTimeRegex = - //is regex cannot be simplified beyond what it already is - /(\[[^[\]]*])|y{1,4}|M{1,4}|d{1,4}|H{1,2}|h{1,2}|t|T|m{1,2}|s{1,2}|f{3}/g; //NOSONAR - this.formattingTokens = /(\[[^[\]]*])|([-_:/.,()\s]+)|(T|t|yyyy|yy?|MM?M?M?|Do|dd?|hh?|HH?|mm?|ss?)/g; //NOSONAR is regex cannot be simplified beyond what it already is - this.match2 = /\d\d/; // 00 - 99 - this.match3 = /\d{3}/; // 000 - 999 - this.match4 = /\d{4}/; // 0000 - 9999 - this.match1to2 = /\d\d?/; // 0 - 99 - this.matchSigned = /[+-]?\d+/; // -inf - inf - this.matchOffset = /[+-]\d\d:?(\d\d)?|Z/; // +00:00 -00:00 +0000 or -0000 +00 or Z - this.matchWord = /[^\d_:/,\-()\s]+/; // Word - this.zoneExpressions = [ - this.matchOffset, - (obj, input) => { - obj.offset = this.offsetFromString(input); - }, - ]; - this.expressions = { - t: [ - this.matchWord, - (ojb, input) => { - ojb.afternoon = this.meridiemMatch(input); - }, - ], - T: [ - this.matchWord, - (ojb, input) => { - ojb.afternoon = this.meridiemMatch(input); - }, - ], - fff: [ - this.match3, - (ojb, input) => { - ojb.milliseconds = +input; - }, - ], - s: [this.match1to2, this.addInput('seconds')], - ss: [this.match1to2, this.addInput('seconds')], - m: [this.match1to2, this.addInput('minutes')], - mm: [this.match1to2, this.addInput('minutes')], - H: [this.match1to2, this.addInput('hours')], - h: [this.match1to2, this.addInput('hours')], - HH: [this.match1to2, this.addInput('hours')], - hh: [this.match1to2, this.addInput('hours')], - d: [this.match1to2, this.addInput('day')], - dd: [this.match2, this.addInput('day')], - Do: [ - this.matchWord, - (ojb, input) => { - [ojb.day] = input.match(/\d+/); - if (!this.localization.ordinal) - return; - for (let i = 1; i <= 31; i += 1) { - if (this.localization.ordinal(i).replace(/[[\]]/g, '') === input) { - ojb.day = i; - } - } - }, - ], - M: [this.match1to2, this.addInput('month')], - MM: [this.match2, this.addInput('month')], - MMM: [ - this.matchWord, - (obj, input) => { - const months = this.getAllMonths(); - const monthsShort = this.getAllMonths('short'); - const matchIndex = (monthsShort || months.map((_) => _.slice(0, 3))).indexOf(input) + 1; - if (matchIndex < 1) { - throw new Error(); - } - obj.month = matchIndex % 12 || matchIndex; - }, - ], - MMMM: [ - this.matchWord, - (obj, input) => { - const months = this.getAllMonths(); - const matchIndex = months.indexOf(input) + 1; - if (matchIndex < 1) { - throw new Error(); - } - obj.month = matchIndex % 12 || matchIndex; - }, - ], - y: [this.matchSigned, this.addInput('year')], - yy: [ - this.match2, - (obj, input) => { - obj.year = this.parseTwoDigitYear(input); - }, - ], - yyyy: [this.match4, this.addInput('year')], - // z: this.zoneExpressions, - // zz: this.zoneExpressions, - // zzz: this.zoneExpressions - }; - //#endregion CDF stuff - } - /** - * Chainable way to set the {@link locale} - * @param value - * @deprecated use setLocalization with a FormatLocalization object instead - */ - setLocale(value) { - if (!this.localization) { - this.localization = DefaultFormatLocalization$1; - this.localization.locale = value; - } - return this; - } - /** - * Chainable way to set the {@link localization} - * @param value - */ - setLocalization(value) { - this.localization = value; - return this; - } - /** - * Converts a plain JS date object to a DateTime object. - * Doing this allows access to format, etc. - * @param date - * @param locale this parameter is deprecated. Use formatLocalization instead. - * @param formatLocalization - */ - static convert(date, locale = 'default', formatLocalization = undefined) { - if (!date) - throw new Error(`A date is required`); - if (!formatLocalization) { - formatLocalization = DefaultFormatLocalization$1; - formatLocalization.locale = locale; - } - return new DateTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()).setLocalization(formatLocalization); - } - /** - * Native date manipulations are not pure functions. This function creates a duplicate of the DateTime object. - */ - get clone() { - return new DateTime(this.year, this.month, this.date, this.hours, this.minutes, this.seconds, this.getMilliseconds()).setLocalization(this.localization); - } - static isValid(d) { - if (d === undefined || JSON.stringify(d) === 'null') - return false; - if (d.constructor.name === DateTime.name) - return true; - return false; - } - /** - * Sets the current date to the start of the {@link unit} provided - * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).startOf('month') - * would return April 1, 2021, 12:00:00.000 AM (midnight) - * @param unit - * @param startOfTheWeek Allows for the changing the start of the week. - */ - startOf(unit, startOfTheWeek = 0) { - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - switch (unit) { - case 'seconds': - this.setMilliseconds(0); - break; - case 'minutes': - this.setSeconds(0, 0); - break; - case 'hours': - this.setMinutes(0, 0, 0); - break; - case 'date': - this.setHours(0, 0, 0, 0); - break; - case 'weekDay': { - this.startOf(Unit.date); - if (this.weekDay === startOfTheWeek) - break; - const goBack = (this.weekDay - startOfTheWeek + 7) % 7; - this.manipulate(goBack * -1, Unit.date); - break; - } - case 'month': - this.startOf(Unit.date); - this.setDate(1); - break; - case 'year': - this.startOf(Unit.date); - this.setMonth(0, 1); - break; - } - return this; - } - /** - * Sets the current date to the end of the {@link unit} provided - * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).endOf('month') - * would return April 30, 2021, 11:59:59.999 PM - * @param unit - * @param startOfTheWeek - */ - endOf(unit, startOfTheWeek = 0) { - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - switch (unit) { - case 'seconds': - this.setMilliseconds(999); - break; - case 'minutes': - this.setSeconds(59, 999); - break; - case 'hours': - this.setMinutes(59, 59, 999); - break; - case 'date': - this.setHours(23, 59, 59, 999); - break; - case 'weekDay': { - this.endOf(Unit.date); - const endOfWeek = 6 + startOfTheWeek; - if (this.weekDay === endOfWeek) - break; - this.manipulate(endOfWeek - this.weekDay, Unit.date); - break; - } - case 'month': - this.endOf(Unit.date); - this.manipulate(1, Unit.month); - this.setDate(0); - break; - case 'year': - this.endOf(Unit.date); - this.setMonth(11, 31); - break; - } - return this; - } - /** - * Change a {@link unit} value. Value can be positive or negative - * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).manipulate(1, 'month') - * would return May 30, 2021, 11:45:32.984 AM - * @param value A positive or negative number - * @param unit - */ - manipulate(value, unit) { - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - this[unit] += value; - return this; - } - /** - * Return true if {@link compare} is before this date - * @param compare The Date/DateTime to compare - * @param unit If provided, uses {@link startOf} for - * comparison. - */ - isBefore(compare, unit) { - // If the comparisons is undefined, return false - if (!DateTime.isValid(compare)) - return false; - if (!unit) - return this.valueOf() < compare.valueOf(); - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - return (this.clone.startOf(unit).valueOf() < compare.clone.startOf(unit).valueOf()); - } - /** - * Return true if {@link compare} is after this date - * @param compare The Date/DateTime to compare - * @param unit If provided, uses {@link startOf} for - * comparison. - */ - isAfter(compare, unit) { - // If the comparisons is undefined, return false - if (!DateTime.isValid(compare)) - return false; - if (!unit) - return this.valueOf() > compare.valueOf(); - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - return (this.clone.startOf(unit).valueOf() > compare.clone.startOf(unit).valueOf()); - } - /** - * Return true if {@link compare} is same this date - * @param compare The Date/DateTime to compare - * @param unit If provided, uses {@link startOf} for - * comparison. - */ - isSame(compare, unit) { - // If the comparisons is undefined, return false - if (!DateTime.isValid(compare)) - return false; - if (!unit) - return this.valueOf() === compare.valueOf(); - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - compare = DateTime.convert(compare); - return (this.clone.startOf(unit).valueOf() === compare.startOf(unit).valueOf()); - } - /** - * Check if this is between two other DateTimes, optionally looking at unit scale. The match is exclusive. - * @param left - * @param right - * @param unit. - * @param inclusivity. A [ indicates inclusion of a value. A ( indicates exclusion. - * If the inclusivity parameter is used, both indicators must be passed. - */ - isBetween(left, right, unit, inclusivity = '()') { - // If one of the comparisons is undefined, return false - if (!DateTime.isValid(left) || !DateTime.isValid(right)) - return false; - // If a unit is provided and is not a valid property of the DateTime object, throw an error - if (unit && this[unit] === undefined) { - throw new Error(`Unit '${unit}' is not valid`); - } - const leftInclusivity = inclusivity[0] === '('; - const rightInclusivity = inclusivity[1] === ')'; - const isLeftInRange = leftInclusivity - ? this.isAfter(left, unit) - : !this.isBefore(left, unit); - const isRightInRange = rightInclusivity - ? this.isBefore(right, unit) - : !this.isAfter(right, unit); - return isLeftInRange && isRightInRange; - } - /** - * Returns flattened object of the date. Does not include literals - * @param locale - * @param template - */ - parts(locale = this.localization.locale, template = { dateStyle: 'full', timeStyle: 'long' }) { - const parts = {}; - new Intl.DateTimeFormat(locale, template) - .formatToParts(this) - .filter((x) => x.type !== 'literal') - .forEach((x) => (parts[x.type] = x.value)); - return parts; - } - /** - * Shortcut to Date.getSeconds() - */ - get seconds() { - return this.getSeconds(); - } - /** - * Shortcut to Date.setSeconds() - */ - set seconds(value) { - this.setSeconds(value); - } - /** - * Returns two digit hours - */ - get secondsFormatted() { - return this.parts(undefined, twoDigitTemplate).second; - } - /** - * Shortcut to Date.getMinutes() - */ - get minutes() { - return this.getMinutes(); - } - /** - * Shortcut to Date.setMinutes() - */ - set minutes(value) { - this.setMinutes(value); - } - /** - * Returns two digit minutes - */ - get minutesFormatted() { - return this.parts(undefined, twoDigitTemplate).minute; - } - /** - * Shortcut to Date.getHours() - */ - get hours() { - return this.getHours(); - } - /** - * Shortcut to Date.setHours() - */ - set hours(value) { - this.setHours(value); - } - /** - * Returns two digit hour, e.g. 01...10 - * @param hourCycle Providing an hour cycle will change 00 to 24 depending on the given value. - */ - getHoursFormatted(hourCycle = 'h12') { - return this.parts(undefined, { ...twoDigitTemplate, hourCycle: hourCycle }) - .hour; - } - /** - * Get the meridiem of the date. E.g. AM or PM. - * If the {@link locale} provides a "dayPeriod" then this will be returned, - * otherwise it will return AM or PM. - * @param locale - */ - meridiem(locale = this.localization.locale) { - return new Intl.DateTimeFormat(locale, { - hour: 'numeric', - hour12: true, - }) - .formatToParts(this) - .find((p) => p.type === 'dayPeriod')?.value; - } - /** - * Shortcut to Date.getDate() - */ - get date() { - return this.getDate(); - } - /** - * Shortcut to Date.setDate() - */ - set date(value) { - this.setDate(value); - } - /** - * Return two digit date - */ - get dateFormatted() { - return this.parts(undefined, twoDigitTemplate).day; - } - /** - * Shortcut to Date.getDay() - */ - get weekDay() { - return this.getDay(); - } - /** - * Shortcut to Date.getMonth() - */ - get month() { - return this.getMonth(); - } - /** - * Shortcut to Date.setMonth() - */ - set month(value) { - const targetMonth = new Date(this.year, value + 1); - targetMonth.setDate(0); - const endOfMonth = targetMonth.getDate(); - if (this.date > endOfMonth) { - this.date = endOfMonth; - } - this.setMonth(value); - } - /** - * Return two digit, human expected month. E.g. January = 1, December = 12 - */ - get monthFormatted() { - return this.parts(undefined, twoDigitTemplate).month; - } - /** - * Shortcut to Date.getFullYear() - */ - get year() { - return this.getFullYear(); - } - /** - * Shortcut to Date.setFullYear() - */ - set year(value) { - this.setFullYear(value); - } - // borrowed a bunch of stuff from Luxon - /** - * Gets the week of the year - */ - get week() { - const ordinal = this.computeOrdinal(), weekday = this.getUTCDay(); - let weekNumber = Math.floor((ordinal - weekday + 10) / 7); - if (weekNumber < 1) { - weekNumber = this.weeksInWeekYear(); - } - else if (weekNumber > this.weeksInWeekYear()) { - weekNumber = 1; - } - return weekNumber; - } - /** - * Returns the number of weeks in the year - */ - weeksInWeekYear() { - const p1 = (this.year + - Math.floor(this.year / 4) - - Math.floor(this.year / 100) + - Math.floor(this.year / 400)) % - 7, last = this.year - 1, p2 = (last + - Math.floor(last / 4) - - Math.floor(last / 100) + - Math.floor(last / 400)) % - 7; - return p1 === 4 || p2 === 3 ? 53 : 52; - } - /** - * Returns true or false depending on if the year is a leap year or not. - */ - get isLeapYear() { - return (this.year % 4 === 0 && (this.year % 100 !== 0 || this.year % 400 === 0)); - } - computeOrdinal() { - return (this.date + - (this.isLeapYear ? this.leapLadder : this.nonLeapLadder)[this.month]); - } - /** - * Returns a list of month values based on the current locale - */ - getAllMonths(format = 'long') { - const applyFormat = new Intl.DateTimeFormat(this.localization.locale, { - month: format, - }).format; - return [...Array(12).keys()].map((m) => applyFormat(new Date(2021, m))); - } - /** - * Replaces an expanded token set (e.g. LT/LTS) - */ - replaceTokens(formatStr, formats) { - /*** - * _ => match - * a => first capture group. Anything between [ and ] - * b => second capture group - */ - return formatStr.replace(/(\[[^[\]]*])|(LTS?|l{1,4}|L{1,4})/g, (_, a, b) => { - const B = b && b.toUpperCase(); - return a || formats[B] || DefaultFormatLocalization$1.dateFormats[B]; - }); - } - parseTwoDigitYear(input) { - input = +input; - return input + (input > 68 ? 1900 : 2000); - } - offsetFromString(string) { - if (!string) - return 0; - if (string === 'Z') - return 0; - const [first, second, third] = string.match(/([+-]|\d\d)/g); - const minutes = +(second * 60) + (+third || 0); - const signed = first === '+' ? -minutes : minutes; - return minutes === 0 ? 0 : signed; // eslint-disable-line no-nested-ternary - } - /** - * z = -4, zz = -04, zzz = -0400 - * @param date - * @param style - * @private - */ - zoneInformation(date, style) { - let name = date - .parts(this.localization.locale, { timeZoneName: 'longOffset' }) - .timeZoneName.replace('GMT', '') - .replace(':', ''); - const negative = name.includes('-'); - name = name.replace('-', ''); - if (style === 'z') - name = name.substring(1, 2); - else if (style === 'zz') - name = name.substring(0, 2); - return `${negative ? '-' : ''}${name}`; - } - addInput(property) { - return (time, input) => { - time[property] = +input; - }; - } - meridiemMatch(input) { - const meridiem = new Intl.DateTimeFormat(this.localization.locale, { - hour: 'numeric', - hour12: true, - }) - .formatToParts(new Date(2022, 3, 4, 13)) - .find((p) => p.type === 'dayPeriod')?.value; - return input.toLowerCase() === meridiem.toLowerCase(); - } - correctHours(time) { - const { afternoon } = time; - if (afternoon !== undefined) { - const { hours } = time; - if (afternoon) { - if (hours < 12) { - time.hours += 12; - } - } - else if (hours === 12) { - time.hours = 0; - } - delete time.afternoon; - } - } - makeParser(format) { - format = this.replaceTokens(format, this.localization.dateFormats); - const array = format.match(this.formattingTokens); - const { length } = array; - for (let i = 0; i < length; i += 1) { - const token = array[i]; - const parseTo = this.expressions[token]; - const regex = parseTo && parseTo[0]; - const parser = parseTo && parseTo[1]; - if (parser) { - array[i] = { regex, parser }; - } - else { - array[i] = token.replace(/^\[[^[\]]*]$/g, ''); - } - } - return (input) => { - const time = { - hours: 0, - minutes: 0, - seconds: 0, - milliseconds: 0, - }; - for (let i = 0, start = 0; i < length; i += 1) { - const token = array[i]; - if (typeof token === 'string') { - start += token.length; - } - else { - const { regex, parser } = token; - const part = input.slice(start); - const match = regex.exec(part); - const value = match[0]; - parser.call(this, time, value); - input = input.replace(value, ''); - } - } - this.correctHours(time); - return time; - }; - } - /** - * Attempts to create a DateTime from a string. - * @param input date as string - * @param localization provides the date template the string is in via the format property - */ - //eslint-disable-next-line @typescript-eslint/no-unused-vars - static fromString(input, localization) { - if (!localization?.format) { - Namespace.errorMessages.customDateFormatError('No format was provided'); - } - try { - const dt = new DateTime(); - dt.setLocalization(localization); - if (['x', 'X'].indexOf(localization.format) > -1) - return new DateTime((localization.format === 'X' ? 1000 : 1) * +input); - const parser = dt.makeParser(localization.format); - const { year, month, day, hours, minutes, seconds, milliseconds, zone } = parser(input); - const d = day || (!year && !month ? dt.getDate() : 1); - const y = year || dt.getFullYear(); - let M = 0; - if (!(year && !month)) { - M = month > 0 ? month - 1 : dt.getMonth(); - } - if (zone) { - return new DateTime(Date.UTC(y, M, d, hours, minutes, seconds, milliseconds + zone.offset * 60 * 1000)); - } - return new DateTime(y, M, d, hours, minutes, seconds, milliseconds); - } - catch (e) { - Namespace.errorMessages.customDateFormatError(`Unable to parse provided input: ${input}, format: ${localization.format}`); - } - } - /** - * Returns a string format. - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat - * for valid templates and locale objects - * @param template An optional object. If provided, method will use Intl., otherwise the localizations format properties - * @param locale Can be a string or an array of strings. Uses browser defaults otherwise. - */ - format(template, locale = this.localization.locale) { - if (template && typeof template === 'object') - return new Intl.DateTimeFormat(locale, template).format(this); - const formatString = this.replaceTokens( - //try template first - template || - //otherwise try localization format - this.localization.format || - //otherwise try date + time - `${DefaultFormatLocalization$1.dateFormats.L}, ${DefaultFormatLocalization$1.dateFormats.LT}`, this.localization.dateFormats); - const formatter = (template) => new Intl.DateTimeFormat(this.localization.locale, template).format(this); - if (!this.localization.hourCycle) - this.localization.hourCycle = guessHourCycle(this.localization.locale); - //if the format asks for a twenty-four-hour string but the hour cycle is not, then make a base guess - const HHCycle = this.localization.hourCycle.startsWith('h1') - ? 'h24' - : this.localization.hourCycle; - const hhCycle = this.localization.hourCycle.startsWith('h2') - ? 'h12' - : this.localization.hourCycle; - const matches = { - yy: formatter({ year: '2-digit' }), - yyyy: this.year, - M: formatter({ month: 'numeric' }), - MM: this.monthFormatted, - MMM: this.getAllMonths('short')[this.getMonth()], - MMMM: this.getAllMonths()[this.getMonth()], - d: this.date, - dd: this.dateFormatted, - ddd: formatter({ weekday: 'short' }), - dddd: formatter({ weekday: 'long' }), - H: this.getHours(), - HH: this.getHoursFormatted(HHCycle), - h: this.hours > 12 ? this.hours - 12 : this.hours, - hh: this.getHoursFormatted(hhCycle), - t: this.meridiem(), - T: this.meridiem().toUpperCase(), - m: this.minutes, - mm: this.minutesFormatted, - s: this.seconds, - ss: this.secondsFormatted, - fff: this.getMilliseconds(), - // z: this.zoneInformation(dateTime, 'z'), //-4 - // zz: this.zoneInformation(dateTime, 'zz'), //-04 - // zzz: this.zoneInformation(dateTime, 'zzz') //-0400 - }; - return formatString - .replace(this.dateTimeRegex, (match, $1) => { - return $1 || matches[match]; - }) - .replace(/\[/g, '') - .replace(/]/g, ''); - } -} - -class ServiceLocator { - constructor() { - this.cache = new Map(); - } - locate(identifier) { - const service = this.cache.get(identifier); - if (service) - return service; - const value = new identifier(); - this.cache.set(identifier, value); - return value; - } -} -const setupServiceLocator = () => { - serviceLocator = new ServiceLocator(); -}; -let serviceLocator; - -const CalendarModes = [ - { - name: 'calendar', - className: Namespace.css.daysContainer, - unit: Unit.month, - step: 1, - }, - { - name: 'months', - className: Namespace.css.monthsContainer, - unit: Unit.year, - step: 1, - }, - { - name: 'years', - className: Namespace.css.yearsContainer, - unit: Unit.year, - step: 10, - }, - { - name: 'decades', - className: Namespace.css.decadesContainer, - unit: Unit.year, - step: 100, - }, -]; - -class OptionsStore { - constructor() { - this._currentCalendarViewMode = 0; - this._viewDate = new DateTime(); - this.minimumCalendarViewMode = 0; - this.currentView = 'calendar'; - } - get currentCalendarViewMode() { - return this._currentCalendarViewMode; - } - set currentCalendarViewMode(value) { - this._currentCalendarViewMode = value; - this.currentView = CalendarModes[value].name; - } - get viewDate() { - return this._viewDate; - } - set viewDate(v) { - this._viewDate = v; - if (this.options) - this.options.viewDate = v; - } - /** - * When switching back to the calendar from the clock, - * this sets currentView to the correct calendar view. - */ - refreshCurrentView() { - this.currentView = CalendarModes[this.currentCalendarViewMode].name; - } - get isTwelveHour() { - return ['h12', 'h11'].includes(this.options.localization.hourCycle); - } -} - -/** - * Main class for date validation rules based on the options provided. - */ -class Validation { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - } - /** - * Checks to see if the target date is valid based on the rules provided in the options. - * Granularity can be provided to check portions of the date instead of the whole. - * @param targetDate - * @param granularity - */ - isValid(targetDate, granularity) { - if (!this._enabledDisabledDatesIsValid(granularity, targetDate)) - return false; - if (granularity !== Unit.month && - granularity !== Unit.year && - this.optionsStore.options.restrictions.daysOfWeekDisabled?.length > 0 && - this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(targetDate.weekDay) !== -1) - return false; - if (!this._minMaxIsValid(granularity, targetDate)) - return false; - if (granularity === Unit.hours || - granularity === Unit.minutes || - granularity === Unit.seconds) { - if (!this._enabledDisabledHoursIsValid(targetDate)) - return false; - if (this.optionsStore.options.restrictions.disabledTimeIntervals?.filter((internal) => targetDate.isBetween(internal.from, internal.to)).length !== 0) - return false; - } - return true; - } - _enabledDisabledDatesIsValid(granularity, targetDate) { - if (granularity !== Unit.date) - return true; - if (this.optionsStore.options.restrictions.disabledDates.length > 0 && - this._isInDisabledDates(targetDate)) { - return false; - } - // noinspection RedundantIfStatementJS - if (this.optionsStore.options.restrictions.enabledDates.length > 0 && - !this._isInEnabledDates(targetDate)) { - return false; - } - return true; - } - /** - * Checks to see if the disabledDates option is in use and returns true (meaning invalid) - * if the `testDate` is with in the array. Granularity is by date. - * @param testDate - * @private - */ - _isInDisabledDates(testDate) { - if (!this.optionsStore.options.restrictions.disabledDates || - this.optionsStore.options.restrictions.disabledDates.length === 0) - return false; - return !!this.optionsStore.options.restrictions.disabledDates.find((x) => x.isSame(testDate, Unit.date)); - } - /** - * Checks to see if the enabledDates option is in use and returns true (meaning valid) - * if the `testDate` is with in the array. Granularity is by date. - * @param testDate - * @private - */ - _isInEnabledDates(testDate) { - if (!this.optionsStore.options.restrictions.enabledDates || - this.optionsStore.options.restrictions.enabledDates.length === 0) - return true; - return !!this.optionsStore.options.restrictions.enabledDates.find((x) => x.isSame(testDate, Unit.date)); - } - _minMaxIsValid(granularity, targetDate) { - if (this.optionsStore.options.restrictions.minDate && - targetDate.isBefore(this.optionsStore.options.restrictions.minDate, granularity)) { - return false; - } - // noinspection RedundantIfStatementJS - if (this.optionsStore.options.restrictions.maxDate && - targetDate.isAfter(this.optionsStore.options.restrictions.maxDate, granularity)) { - return false; - } - return true; - } - _enabledDisabledHoursIsValid(targetDate) { - if (this.optionsStore.options.restrictions.disabledHours.length > 0 && - this._isInDisabledHours(targetDate)) { - return false; - } - // noinspection RedundantIfStatementJS - if (this.optionsStore.options.restrictions.enabledHours.length > 0 && - !this._isInEnabledHours(targetDate)) { - return false; - } - return true; - } - /** - * Checks to see if the disabledHours option is in use and returns true (meaning invalid) - * if the `testDate` is with in the array. Granularity is by hours. - * @param testDate - * @private - */ - _isInDisabledHours(testDate) { - if (!this.optionsStore.options.restrictions.disabledHours || - this.optionsStore.options.restrictions.disabledHours.length === 0) - return false; - const formattedDate = testDate.hours; - return this.optionsStore.options.restrictions.disabledHours.includes(formattedDate); - } - /** - * Checks to see if the enabledHours option is in use and returns true (meaning valid) - * if the `testDate` is with in the array. Granularity is by hours. - * @param testDate - * @private - */ - _isInEnabledHours(testDate) { - if (!this.optionsStore.options.restrictions.enabledHours || - this.optionsStore.options.restrictions.enabledHours.length === 0) - return true; - const formattedDate = testDate.hours; - return this.optionsStore.options.restrictions.enabledHours.includes(formattedDate); - } - dateRangeIsValid(dates, index, target) { - // if we're not using the option, then return valid - if (!this.optionsStore.options.dateRange) - return true; - // if we've only selected 0..1 dates, and we're not setting the end date - // then return valid. We only want to validate the range if both are selected, - // because the other validation on the target has already occurred. - if (dates.length !== 2 && index !== 1) - return true; - // initialize start date - const start = dates[0].clone; - // check if start date is not the same as target date - if (start.isSame(target, Unit.date)) - return true; - // add one day to start; start has already been validated - start.manipulate(1, Unit.date); - // check each date in the range to make sure it's valid - while (!start.isSame(target, Unit.date)) { - const valid = this.isValid(start, Unit.date); - if (!valid) - return false; - start.manipulate(1, Unit.date); - } - return true; - } -} - -class EventEmitter { - constructor() { - this.subscribers = []; - } - subscribe(callback) { - this.subscribers.push(callback); - return this.unsubscribe.bind(this, this.subscribers.length - 1); - } - unsubscribe(index) { - this.subscribers.splice(index, 1); - } - emit(value) { - this.subscribers.forEach((callback) => { - callback(value); - }); - } - destroy() { - this.subscribers = null; - this.subscribers = []; - } -} -class EventEmitters { - constructor() { - this.triggerEvent = new EventEmitter(); - this.viewUpdate = new EventEmitter(); - this.updateDisplay = new EventEmitter(); - this.action = new EventEmitter(); //eslint-disable-line @typescript-eslint/no-explicit-any - this.updateViewDate = new EventEmitter(); - } - destroy() { - this.triggerEvent.destroy(); - this.viewUpdate.destroy(); - this.updateDisplay.destroy(); - this.action.destroy(); - this.updateViewDate.destroy(); - } -} - -const defaultEnLocalization = { - clear: 'Clear selection', - close: 'Close the picker', - dateFormats: DefaultFormatLocalization$1.dateFormats, - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - decrementHour: 'Decrement Hour', - decrementMinute: 'Decrement Minute', - decrementSecond: 'Decrement Second', - format: DefaultFormatLocalization$1.format, - hourCycle: DefaultFormatLocalization$1.hourCycle, - incrementHour: 'Increment Hour', - incrementMinute: 'Increment Minute', - incrementSecond: 'Increment Second', - locale: DefaultFormatLocalization$1.locale, - nextCentury: 'Next Century', - nextDecade: 'Next Decade', - nextMonth: 'Next Month', - nextYear: 'Next Year', - ordinal: DefaultFormatLocalization$1.ordinal, - pickHour: 'Pick Hour', - pickMinute: 'Pick Minute', - pickSecond: 'Pick Second', - previousCentury: 'Previous Century', - previousDecade: 'Previous Decade', - previousMonth: 'Previous Month', - previousYear: 'Previous Year', - selectDate: 'Select Date', - selectDecade: 'Select Decade', - selectMonth: 'Select Month', - selectTime: 'Select Time', - selectYear: 'Select Year', - startOfTheWeek: 0, - today: 'Go to today', - toggleMeridiem: 'Toggle Meridiem', -}; -const DefaultOptions = { - allowInputToggle: false, - container: undefined, - dateRange: false, - debug: false, - defaultDate: undefined, - display: { - icons: { - type: 'icons', - time: 'fa-solid fa-clock', - date: 'fa-solid fa-calendar', - up: 'fa-solid fa-arrow-up', - down: 'fa-solid fa-arrow-down', - previous: 'fa-solid fa-chevron-left', - next: 'fa-solid fa-chevron-right', - today: 'fa-solid fa-calendar-check', - clear: 'fa-solid fa-trash', - close: 'fa-solid fa-xmark', - }, - sideBySide: false, - calendarWeeks: false, - viewMode: 'calendar', - toolbarPlacement: 'bottom', - keepOpen: false, - buttons: { - today: false, - clear: false, - close: false, - }, - components: { - calendar: true, - date: true, - month: true, - year: true, - decades: true, - clock: true, - hours: true, - minutes: true, - seconds: false, - useTwentyfourHour: undefined, - }, - inline: false, - theme: 'auto', - placement: 'bottom', - }, - keepInvalid: false, - localization: defaultEnLocalization, - meta: {}, - multipleDates: false, - multipleDatesSeparator: '; ', - promptTimeOnDateChange: false, - promptTimeOnDateChangeTransitionDelay: 200, - restrictions: { - minDate: undefined, - maxDate: undefined, - disabledDates: [], - enabledDates: [], - daysOfWeekDisabled: [], - disabledTimeIntervals: [], - disabledHours: [], - enabledHours: [], - }, - stepping: 1, - useCurrent: true, - viewDate: new DateTime(), -}; -const DefaultEnLocalization = { ...defaultEnLocalization }; - -/** - * Attempts to prove `d` is a DateTime or Date or can be converted into one. - * @param d If a string will attempt creating a date from it. - * @param localization object containing locale and format settings. Only used with the custom formats - * @private - */ -function tryConvertToDateTime(d, localization) { - if (!d) - return null; - if (d.constructor.name === DateTime.name) - return d; - if (d.constructor.name === Date.name) { - return DateTime.convert(d); - } - if (typeof d === typeof '') { - const dateTime = DateTime.fromString(d, localization); - if (JSON.stringify(dateTime) === 'null') { - return null; - } - return dateTime; - } - return null; -} -/** - * Attempts to convert `d` to a DateTime object - * @param d value to convert - * @param optionName Provides text to error messages e.g. disabledDates - * @param localization object containing locale and format settings. Only used with the custom formats - */ -function convertToDateTime(d, optionName, localization) { - if (typeof d === typeof '' && optionName !== 'input') { - Namespace.errorMessages.dateString(); - } - const converted = tryConvertToDateTime(d, localization); - if (!converted) { - Namespace.errorMessages.failedToParseDate(optionName, d, optionName === 'input'); - } - return converted; -} -/** - * Type checks that `value` is an array of Date or DateTime - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - * @param localization - */ -function typeCheckDateArray(optionName, value, //eslint-disable-line @typescript-eslint/no-explicit-any -providedType, localization = DefaultFormatLocalization$1) { - if (!Array.isArray(value)) { - Namespace.errorMessages.typeMismatch(optionName, providedType, 'array of DateTime or Date'); - } - for (let i = 0; i < value.length; i++) { - const d = value[i]; - const dateTime = convertToDateTime(d, optionName, localization); - dateTime.setLocalization(localization); - value[i] = dateTime; - } -} -/** - * Type checks that `value` is an array of numbers - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - */ -function typeCheckNumberArray(optionName, value, //eslint-disable-line @typescript-eslint/no-explicit-any -providedType) { - if (!Array.isArray(value) || value.some((x) => typeof x !== typeof 0)) { - Namespace.errorMessages.typeMismatch(optionName, providedType, 'array of numbers'); - } -} - -function mandatoryDate(key) { - return ({ value, providedType, localization }) => { - const dateTime = convertToDateTime(value, key, localization); - if (dateTime !== undefined) { - dateTime.setLocalization(localization); - return dateTime; - } - }; -} -function optionalDate(key) { - const mandatory = mandatoryDate(key); - return (args) => { - if (args.value === undefined) { - return args.value; - } - return mandatory(args); - }; -} -function numbersInRange(key, lower, upper) { - return ({ value, providedType }) => { - if (value === undefined) { - return []; - } - typeCheckNumberArray(key, value, providedType); - if (value.some((x) => x < lower || x > upper)) - Namespace.errorMessages.numbersOutOfRange(key, lower, upper); - return value; - }; -} -function validHourRange(key) { - return numbersInRange(key, 0, 23); -} -function validDateArray(key) { - return ({ value, providedType, localization }) => { - if (value === undefined) { - return []; - } - typeCheckDateArray(key, value, providedType, localization); - return value; - }; -} -function validKeyOption(keyOptions) { - return ({ value, path }) => { - if (!keyOptions.includes(value)) - Namespace.errorMessages.unexpectedOptionValue(path.substring(1), value, keyOptions); - return value; - }; -} -const optionProcessors = Object.freeze({ - defaultDate: mandatoryDate('defaultDate'), - viewDate: mandatoryDate('viewDate'), - minDate: optionalDate('restrictions.minDate'), - maxDate: optionalDate('restrictions.maxDate'), - disabledHours: validHourRange('restrictions.disabledHours'), - enabledHours: validHourRange('restrictions.enabledHours'), - disabledDates: validDateArray('restrictions.disabledDates'), - enabledDates: validDateArray('restrictions.enabledDates'), - daysOfWeekDisabled: numbersInRange('restrictions.daysOfWeekDisabled', 0, 6), - disabledTimeIntervals: ({ key, value, providedType, localization }) => { - if (value === undefined) { - return []; - } - if (!Array.isArray(value)) { - Namespace.errorMessages.typeMismatch(key, providedType, 'array of { from: DateTime|Date, to: DateTime|Date }'); - } - const valueObject = value; //eslint-disable-line @typescript-eslint/no-explicit-any - for (let i = 0; i < valueObject.length; i++) { - Object.keys(valueObject[i]).forEach((vk) => { - const subOptionName = `${key}[${i}].${vk}`; - const d = valueObject[i][vk]; - const dateTime = convertToDateTime(d, subOptionName, localization); - dateTime.setLocalization(localization); - valueObject[i][vk] = dateTime; - }); - } - return valueObject; - }, - toolbarPlacement: validKeyOption(['top', 'bottom', 'default']), - type: validKeyOption(['icons', 'sprites']), - viewMode: validKeyOption([ - 'clock', - 'calendar', - 'months', - 'years', - 'decades', - ]), - theme: validKeyOption(['light', 'dark', 'auto']), - placement: validKeyOption(['top', 'bottom']), - meta: ({ value }) => value, - dayViewHeaderFormat: ({ value }) => value, - container: ({ value, path }) => { - if (value && - !(value instanceof HTMLElement || - value instanceof Element || - value?.appendChild)) { - Namespace.errorMessages.typeMismatch(path.substring(1), typeof value, 'HTMLElement'); - } - return value; - }, - useTwentyfourHour: ({ value, path, providedType, defaultType }) => { - Namespace.errorMessages.deprecatedWarning('useTwentyfourHour', 'Please use "options.localization.hourCycle" instead'); - if (value === undefined || providedType === 'boolean') - return value; - Namespace.errorMessages.typeMismatch(path, providedType, defaultType); - }, - hourCycle: validKeyOption(['h11', 'h12', 'h23', 'h24']), -}); -const defaultProcessor = ({ value, defaultType, providedType, path, }) => { - switch (defaultType) { - case 'boolean': - return value === 'true' || value === true; - case 'number': - return +value; - case 'string': - return value.toString(); - case 'object': - return {}; - case 'function': - return value; - default: - Namespace.errorMessages.typeMismatch(path, providedType, defaultType); - } -}; -function processKey(args) { - return (optionProcessors[args.key] || defaultProcessor)(args); -} - -class OptionConverter { - static deepCopy(input) { - const o = {}; - Object.keys(input).forEach((key) => { - const inputElement = input[key]; - if (inputElement instanceof DateTime) { - o[key] = inputElement.clone; - return; - } - else if (inputElement instanceof Date) { - o[key] = new Date(inputElement.valueOf()); - return; - } - o[key] = inputElement; - if (typeof inputElement !== 'object' || - inputElement instanceof HTMLElement || - inputElement instanceof Element) - return; - if (!Array.isArray(inputElement)) { - o[key] = OptionConverter.deepCopy(inputElement); - } - }); - return o; - } - /** - * Finds value out of an object based on a string, period delimited, path - * @param paths - * @param obj - */ - static objectPath(paths, obj) { - if (paths.charAt(0) === '.') - paths = paths.slice(1); - if (!paths) - return obj; - return paths - .split('.') - .reduce((value, key) => OptionConverter.isValue(value) || OptionConverter.isValue(value[key]) - ? value[key] - : undefined, obj); - } - /** - * The spread operator caused sub keys to be missing after merging. - * This is to fix that issue by using spread on the child objects first. - * Also handles complex options like disabledDates - * @param provided An option from new providedOptions - * @param copyTo Destination object. This was added to prevent reference copies - * @param localization - * @param path - */ - static spread(provided, copyTo, localization, path = '') { - const defaultOptions = OptionConverter.objectPath(path, DefaultOptions); - const unsupportedOptions = Object.keys(provided).filter((x) => !Object.keys(defaultOptions).includes(x)); - if (unsupportedOptions.length > 0) { - const flattenedOptions = OptionConverter.getFlattenDefaultOptions(); - const errors = unsupportedOptions.map((x) => { - let error = `"${path}.${x}" in not a known option.`; - const didYouMean = flattenedOptions.find((y) => y.includes(x)); - if (didYouMean) - error += ` Did you mean "${didYouMean}"?`; - return error; - }); - Namespace.errorMessages.unexpectedOptions(errors); - } - Object.keys(provided) - .filter((key) => key !== '__proto__' && key !== 'constructor') - .forEach((key) => { - path += `.${key}`; - if (path.charAt(0) === '.') - path = path.slice(1); - const defaultOptionValue = defaultOptions[key]; - const providedType = typeof provided[key]; - const defaultType = typeof defaultOptionValue; - const value = provided[key]; - if (value === undefined || value === null) { - copyTo[key] = value; - path = path.substring(0, path.lastIndexOf(`.${key}`)); - return; - } - if (typeof defaultOptionValue === 'object' && - !Array.isArray(provided[key]) && - !(defaultOptionValue instanceof Date || - OptionConverter.ignoreProperties.includes(key))) { - OptionConverter.spread(provided[key], copyTo[key], localization, path); - } - else { - copyTo[key] = OptionConverter.processKey(key, value, providedType, defaultType, path, localization); - } - path = path.substring(0, path.lastIndexOf(`.${key}`)); - }); - } - static processKey(key, value, //eslint-disable-line @typescript-eslint/no-explicit-any - providedType, defaultType, path, localization) { - return processKey({ - key, - value, - providedType, - defaultType, - path, - localization, - }); - } - static _mergeOptions(providedOptions, mergeTo) { - const newConfig = OptionConverter.deepCopy(mergeTo); - //see if the options specify a locale - const localization = mergeTo.localization?.locale !== 'default' - ? mergeTo.localization - : providedOptions?.localization || DefaultOptions.localization; - OptionConverter.spread(providedOptions, newConfig, localization, ''); - return newConfig; - } - static _dataToOptions(element, options) { - const eData = JSON.parse(JSON.stringify(element.dataset)); - if (eData?.tdTargetInput) - delete eData.tdTargetInput; - if (eData?.tdTargetToggle) - delete eData.tdTargetToggle; - if (!eData || - Object.keys(eData).length === 0 || - eData.constructor !== DOMStringMap) - return options; - const dataOptions = {}; - // because dataset returns camelCase including the 'td' key the option - // key won't align - const objectToNormalized = (object) => { - const lowered = {}; - Object.keys(object).forEach((x) => { - lowered[x.toLowerCase()] = x; - }); - return lowered; - }; - const normalizeObject = this.normalizeObject(objectToNormalized); - const optionsLower = objectToNormalized(options); - Object.keys(eData) - .filter((x) => x.startsWith(Namespace.dataKey)) - .map((x) => x.substring(2)) - .forEach((key) => { - let keyOption = optionsLower[key.toLowerCase()]; - // dataset merges dashes to camelCase... yay - // i.e. key = display_components_seconds - if (key.includes('_')) { - // [display, components, seconds] - const split = key.split('_'); - // display - keyOption = optionsLower[split[0].toLowerCase()]; - if (keyOption !== undefined && - options[keyOption].constructor === Object) { - dataOptions[keyOption] = normalizeObject(split, 1, options[keyOption], eData[`td${key}`]); - } - } - // or key = multipleDate - else if (keyOption !== undefined) { - dataOptions[keyOption] = eData[`td${key}`]; - } - }); - return this._mergeOptions(dataOptions, options); - } - //todo clean this up - static normalizeObject(objectToNormalized) { - const normalizeObject = (split, index, optionSubgroup, value) => { - // first round = display { ... } - const normalizedOptions = objectToNormalized(optionSubgroup); - const keyOption = normalizedOptions[split[index].toLowerCase()]; - const internalObject = {}; - if (keyOption === undefined) - return internalObject; - // if this is another object, continue down the rabbit hole - if (optionSubgroup[keyOption].constructor === Object) { - index++; - internalObject[keyOption] = normalizeObject(split, index, optionSubgroup[keyOption], value); - } - else { - internalObject[keyOption] = value; - } - return internalObject; - }; - return normalizeObject; - } - /** - * Attempts to prove `d` is a DateTime or Date or can be converted into one. - * @param d If a string will attempt creating a date from it. - * @param localization object containing locale and format settings. Only used with the custom formats - * @private - */ - static _dateTypeCheck(d, //eslint-disable-line @typescript-eslint/no-explicit-any - localization) { - return tryConvertToDateTime(d, localization); - } - /** - * Type checks that `value` is an array of Date or DateTime - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - * @param localization - */ - static _typeCheckDateArray(optionName, value, providedType, localization) { - return typeCheckDateArray(optionName, value, providedType, localization); - } - /** - * Type checks that `value` is an array of numbers - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - */ - static _typeCheckNumberArray(optionName, value, providedType) { - return typeCheckNumberArray(optionName, value, providedType); - } - /** - * Attempts to convert `d` to a DateTime object - * @param d value to convert - * @param optionName Provides text to error messages e.g. disabledDates - * @param localization object containing locale and format settings. Only used with the custom formats - */ - static dateConversion(d, //eslint-disable-line @typescript-eslint/no-explicit-any - optionName, localization) { - return convertToDateTime(d, optionName, localization); - } - static getFlattenDefaultOptions() { - if (this._flattenDefaults) - return this._flattenDefaults; - const deepKeys = (t, pre = []) => { - if (Array.isArray(t)) - return []; - if (Object(t) === t) { - return Object.entries(t).flatMap(([k, v]) => deepKeys(v, [...pre, k])); - } - else { - return pre.join('.'); - } - }; - this._flattenDefaults = deepKeys(DefaultOptions); - return this._flattenDefaults; - } - /** - * Some options conflict like min/max date. Verify that these kinds of options - * are set correctly. - * @param config - */ - static _validateConflicts(config) { - if (config.display.sideBySide && - (!config.display.components.clock || - !(config.display.components.hours || - config.display.components.minutes || - config.display.components.seconds))) { - Namespace.errorMessages.conflictingConfiguration('Cannot use side by side mode without the clock components'); - } - if (config.restrictions.minDate && config.restrictions.maxDate) { - if (config.restrictions.minDate.isAfter(config.restrictions.maxDate)) { - Namespace.errorMessages.conflictingConfiguration('minDate is after maxDate'); - } - if (config.restrictions.maxDate.isBefore(config.restrictions.minDate)) { - Namespace.errorMessages.conflictingConfiguration('maxDate is before minDate'); - } - } - if (config.multipleDates && config.dateRange) { - Namespace.errorMessages.conflictingConfiguration('Cannot uss option "multipleDates" with "dateRange"'); - } - } -} -OptionConverter.ignoreProperties = [ - 'meta', - 'dayViewHeaderFormat', - 'container', - 'dateForms', - 'ordinal', -]; -OptionConverter.isValue = (a) => a != null; // everything except undefined + null - -class Dates { - constructor() { - this._dates = []; - this.optionsStore = serviceLocator.locate(OptionsStore); - this.validation = serviceLocator.locate(Validation); - this._eventEmitters = serviceLocator.locate(EventEmitters); - } - /** - * Returns the array of selected dates - */ - get picked() { - return [...this._dates]; - } - /** - * Returns the last picked value. - */ - get lastPicked() { - return this._dates[this.lastPickedIndex]?.clone; - } - /** - * Returns the length of picked dates -1 or 0 if none are selected. - */ - get lastPickedIndex() { - if (this._dates.length === 0) - return 0; - return this._dates.length - 1; - } - /** - * Formats a DateTime object to a string. Used when setting the input value. - * @param date - */ - formatInput(date) { - if (!date) - return ''; - date.localization = this.optionsStore.options.localization; - return date.format(); - } - /** - * parse the value into a DateTime object. - * this can be overwritten to supply your own parsing. - */ - //eslint-disable-next-line @typescript-eslint/no-explicit-any - parseInput(value) { - return OptionConverter.dateConversion(value, 'input', this.optionsStore.options.localization); - } - /** - * Tries to convert the provided value to a DateTime object. - * If value is null|undefined then clear the value of the provided index (or 0). - * @param value Value to convert or null|undefined - * @param index When using multidates this is the index in the array - */ - //eslint-disable-next-line @typescript-eslint/no-explicit-any - setFromInput(value, index) { - if (!value) { - this.setValue(undefined, index); - return; - } - const converted = this.parseInput(value); - if (converted) { - converted.setLocalization(this.optionsStore.options.localization); - this.setValue(converted, index); - } - } - /** - * Adds a new DateTime to selected dates array - * @param date - */ - add(date) { - this._dates.push(date); - } - /** - * Returns true if the `targetDate` is part of the selected dates array. - * If `unit` is provided then a granularity to that unit will be used. - * @param targetDate - * @param unit - */ - isPicked(targetDate, unit) { - if (!DateTime.isValid(targetDate)) - return false; - if (!unit) - return this._dates.find((x) => x.isSame(targetDate)) !== undefined; - const format = getFormatByUnit(unit); - const innerDateFormatted = targetDate.format(format); - return (this._dates - .map((x) => x.format(format)) - .find((x) => x === innerDateFormatted) !== undefined); - } - /** - * Returns the index at which `targetDate` is in the array. - * This is used for updating or removing a date when multi-date is used - * If `unit` is provided then a granularity to that unit will be used. - * @param targetDate - * @param unit - */ - pickedIndex(targetDate, unit) { - if (!DateTime.isValid(targetDate)) - return -1; - if (!unit) - return this._dates.map((x) => x.valueOf()).indexOf(targetDate.valueOf()); - const format = getFormatByUnit(unit); - const innerDateFormatted = targetDate.format(format); - return this._dates.map((x) => x.format(format)).indexOf(innerDateFormatted); - } - /** - * Clears all selected dates. - */ - clear() { - this.optionsStore.unset = true; - this._eventEmitters.triggerEvent.emit({ - type: Namespace.events.change, - date: undefined, - oldDate: this.lastPicked, - isClear: true, - isValid: true, - }); - this._dates = []; - if (this.optionsStore.input) - this.optionsStore.input.value = ''; - this._eventEmitters.updateDisplay.emit('all'); - } - /** - * Find the "book end" years given a `year` and a `factor` - * @param factor e.g. 100 for decades - * @param year e.g. 2021 - */ - static getStartEndYear(factor, year) { - const step = factor / 10, startYear = Math.floor(year / factor) * factor, endYear = startYear + step * 9, focusValue = Math.floor(year / step) * step; - return [startYear, endYear, focusValue]; - } - updateInput(target) { - if (!this.optionsStore.input) - return; - let newValue = this.formatInput(target); - if (this.optionsStore.options.multipleDates || - this.optionsStore.options.dateRange) { - newValue = this._dates - .map((d) => this.formatInput(d)) - .join(this.optionsStore.options.multipleDatesSeparator); - } - if (this.optionsStore.input.value != newValue) - this.optionsStore.input.value = newValue; - } - /** - * Attempts to either clear or set the `target` date at `index`. - * If the `target` is null then the date will be cleared. - * If multi-date is being used then it will be removed from the array. - * If `target` is valid and multi-date is used then if `index` is - * provided the date at that index will be replaced, otherwise it is appended. - * @param target - * @param index - */ - setValue(target, index) { - const noIndex = typeof index === 'undefined', isClear = !target && noIndex; - let oldDate = this.optionsStore.unset ? null : this._dates[index]?.clone; - if (!oldDate && !this.optionsStore.unset && noIndex && isClear) { - oldDate = this.lastPicked; - } - if (target && oldDate?.isSame(target)) { - this.updateInput(target); - return; - } - // case of calling setValue(null) - if (!target) { - this._setValueNull(isClear, index, oldDate); - return; - } - index = index || 0; - target = target.clone; - // minute stepping is being used, force the minute to the closest value - if (this.optionsStore.options.stepping !== 1) { - target.minutes = - Math.round(target.minutes / this.optionsStore.options.stepping) * - this.optionsStore.options.stepping; - target.startOf(Unit.minutes); - } - const onUpdate = (isValid) => { - this._dates[index] = target; - this._eventEmitters.updateViewDate.emit(target.clone); - this.updateInput(target); - this.optionsStore.unset = false; - this._eventEmitters.updateDisplay.emit('all'); - this._eventEmitters.triggerEvent.emit({ - type: Namespace.events.change, - date: target, - oldDate, - isClear, - isValid: isValid, - }); - }; - if (this.validation.isValid(target) && - this.validation.dateRangeIsValid(this.picked, index, target)) { - onUpdate(true); - return; - } - if (this.optionsStore.options.keepInvalid) { - onUpdate(false); - } - this._eventEmitters.triggerEvent.emit({ - type: Namespace.events.error, - reason: Namespace.errorMessages.failedToSetInvalidDate, - date: target, - oldDate, - }); - } - _setValueNull(isClear, index, oldDate) { - if (!this.optionsStore.options.multipleDates || - this._dates.length === 1 || - isClear) { - this.optionsStore.unset = true; - this._dates = []; - } - else { - this._dates.splice(index, 1); - } - this.updateInput(); - this._eventEmitters.triggerEvent.emit({ - type: Namespace.events.change, - date: undefined, - oldDate, - isClear, - isValid: true, - }); - this._eventEmitters.updateDisplay.emit('all'); - } -} - -var ActionTypes; -(function (ActionTypes) { - ActionTypes["next"] = "next"; - ActionTypes["previous"] = "previous"; - ActionTypes["changeCalendarView"] = "changeCalendarView"; - ActionTypes["selectMonth"] = "selectMonth"; - ActionTypes["selectYear"] = "selectYear"; - ActionTypes["selectDecade"] = "selectDecade"; - ActionTypes["selectDay"] = "selectDay"; - ActionTypes["selectHour"] = "selectHour"; - ActionTypes["selectMinute"] = "selectMinute"; - ActionTypes["selectSecond"] = "selectSecond"; - ActionTypes["incrementHours"] = "incrementHours"; - ActionTypes["incrementMinutes"] = "incrementMinutes"; - ActionTypes["incrementSeconds"] = "incrementSeconds"; - ActionTypes["decrementHours"] = "decrementHours"; - ActionTypes["decrementMinutes"] = "decrementMinutes"; - ActionTypes["decrementSeconds"] = "decrementSeconds"; - ActionTypes["toggleMeridiem"] = "toggleMeridiem"; - ActionTypes["togglePicker"] = "togglePicker"; - ActionTypes["showClock"] = "showClock"; - ActionTypes["showHours"] = "showHours"; - ActionTypes["showMinutes"] = "showMinutes"; - ActionTypes["showSeconds"] = "showSeconds"; - ActionTypes["clear"] = "clear"; - ActionTypes["close"] = "close"; - ActionTypes["today"] = "today"; -})(ActionTypes || (ActionTypes = {})); -var ActionTypes$1 = ActionTypes; - -/** - * Creates and updates the grid for `date` - */ -class DateDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.daysContainer); - container.append(...this._daysOfTheWeek()); - if (this.optionsStore.options.display.calendarWeeks) { - const div = document.createElement('div'); - div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight); - container.appendChild(div); - } - const { rangeHoverEvent, rangeHoverOutEvent } = this.handleMouseEvents(container); - for (let i = 0; i < 42; i++) { - if (i !== 0 && i % 7 === 0) { - if (this.optionsStore.options.display.calendarWeeks) { - const div = document.createElement('div'); - div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight); - container.appendChild(div); - } - } - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectDay); - container.appendChild(div); - // if hover is supported then add the events - if (matchMedia('(hover: hover)').matches && - this.optionsStore.options.dateRange) { - div.addEventListener('mouseover', rangeHoverEvent); - div.addEventListener('mouseout', rangeHoverOutEvent); - } - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const container = widget.getElementsByClassName(Namespace.css.daysContainer)[0]; - this._updateCalendarView(container); - const innerDate = this.optionsStore.viewDate.clone - .startOf(Unit.month) - .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek) - .manipulate(12, Unit.hours); - this._handleCalendarWeeks(container, innerDate.clone); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectDay}"]`) - .forEach((element) => { - const classes = []; - classes.push(Namespace.css.day); - if (innerDate.isBefore(this.optionsStore.viewDate, Unit.month)) { - classes.push(Namespace.css.old); - } - if (innerDate.isAfter(this.optionsStore.viewDate, Unit.month)) { - classes.push(Namespace.css.new); - } - if (!this.optionsStore.unset && - !this.optionsStore.options.dateRange && - this.dates.isPicked(innerDate, Unit.date)) { - classes.push(Namespace.css.active); - } - if (!this.validation.isValid(innerDate, Unit.date)) { - classes.push(Namespace.css.disabled); - } - if (innerDate.isSame(new DateTime(), Unit.date)) { - classes.push(Namespace.css.today); - } - if (innerDate.weekDay === 0 || innerDate.weekDay === 6) { - classes.push(Namespace.css.weekend); - } - this._handleDateRange(innerDate, classes); - paint(Unit.date, innerDate, classes, element); - element.classList.remove(...element.classList); - element.classList.add(...classes); - element.setAttribute('data-value', this._dateToDataValue(innerDate)); - element.setAttribute('data-day', `${innerDate.date}`); - element.innerText = innerDate.parts(undefined, { - day: 'numeric', - }).day; - innerDate.manipulate(1, Unit.date); - }); - } - _dateToDataValue(date) { - if (!DateTime.isValid(date)) - return ''; - return `${date.year}-${date.monthFormatted}-${date.dateFormatted}`; - } - _handleDateRange(innerDate, classes) { - const rangeStart = this.dates.picked[0]; - const rangeEnd = this.dates.picked[1]; - if (this.optionsStore.options.dateRange) { - if (innerDate.isBetween(rangeStart, rangeEnd, Unit.date)) { - classes.push(Namespace.css.rangeIn); - } - if (innerDate.isSame(rangeStart, Unit.date)) { - classes.push(Namespace.css.rangeStart); - } - if (innerDate.isSame(rangeEnd, Unit.date)) { - classes.push(Namespace.css.rangeEnd); - } - } - } - handleMouseEvents(container) { - const rangeHoverEvent = (e) => { - const currentTarget = e?.currentTarget; - // if we have 0 or 2 selected or if the target is disabled then ignore - if (this.dates.picked.length !== 1 || - currentTarget.classList.contains(Namespace.css.disabled)) - return; - // select all the date divs - const allDays = [...container.querySelectorAll('.day')]; - // get the date value from the element being hovered over - const attributeValue = currentTarget.getAttribute('data-value'); - // format the string to a date - const innerDate = DateTime.fromString(attributeValue, { - format: 'yyyy-MM-dd', - }); - // find the position of the target in the date container - const dayIndex = allDays.findIndex((e) => e.getAttribute('data-value') === attributeValue); - // find the first and second selected dates - const rangeStart = this.dates.picked[0]; - const rangeEnd = this.dates.picked[1]; - //format the start date so that it can be found by the attribute - const rangeStartFormatted = this._dateToDataValue(rangeStart); - const rangeStartIndex = allDays.findIndex((e) => e.getAttribute('data-value') === rangeStartFormatted); - const rangeStartElement = allDays[rangeStartIndex]; - //make sure we don't leave start/end classes if we don't need them - if (!innerDate.isSame(rangeStart, Unit.date)) { - currentTarget.classList.remove(Namespace.css.rangeStart); - } - if (!innerDate.isSame(rangeEnd, Unit.date)) { - currentTarget.classList.remove(Namespace.css.rangeEnd); - } - // the following figures out which direct from start date is selected - // the selection "cap" classes are applied if needed - // otherwise all the dates between will get the `rangeIn` class. - // We make this selection based on the element's index and the rangeStart index - let lambda; - if (innerDate.isBefore(rangeStart)) { - currentTarget.classList.add(Namespace.css.rangeStart); - rangeStartElement?.classList.remove(Namespace.css.rangeStart); - rangeStartElement?.classList.add(Namespace.css.rangeEnd); - lambda = (_, index) => index > dayIndex && index < rangeStartIndex; - } - else { - currentTarget.classList.add(Namespace.css.rangeEnd); - rangeStartElement?.classList.remove(Namespace.css.rangeEnd); - rangeStartElement?.classList.add(Namespace.css.rangeStart); - lambda = (_, index) => index < dayIndex && index > rangeStartIndex; - } - allDays.filter(lambda).forEach((e) => { - e.classList.add(Namespace.css.rangeIn); - }); - }; - const rangeHoverOutEvent = (e) => { - // find all the dates in the container - const allDays = [...container.querySelectorAll('.day')]; - // if only the start is selected, remove all the rangeIn classes - // we do this because once the user hovers over a new date the range will be recalculated. - if (this.dates.picked.length === 1) - allDays.forEach((e) => e.classList.remove(Namespace.css.rangeIn)); - // if we have 0 or 2 dates selected then ignore - if (this.dates.picked.length !== 1) - return; - const currentTarget = e?.currentTarget; - // get the elements date from the attribute value - const innerDate = new DateTime(currentTarget.getAttribute('data-value')); - // verify selections and remove invalid classes - if (!innerDate.isSame(this.dates.picked[0], Unit.date)) { - currentTarget.classList.remove(Namespace.css.rangeStart); - } - if (!innerDate.isSame(this.dates.picked[1], Unit.date)) { - currentTarget.classList.remove(Namespace.css.rangeEnd); - } - }; - return { rangeHoverEvent, rangeHoverOutEvent }; - } - _updateCalendarView(container) { - if (this.optionsStore.currentView !== 'calendar') - return; - const [previous, switcher, next] = container.parentElement - .getElementsByClassName(Namespace.css.calendarHeader)[0] - .getElementsByTagName('div'); - switcher.setAttribute(Namespace.css.daysContainer, this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat)); - this.optionsStore.options.display.components.month - ? switcher.classList.remove(Namespace.css.disabled) - : switcher.classList.add(Namespace.css.disabled); - this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, Unit.month), Unit.month) - ? previous.classList.remove(Namespace.css.disabled) - : previous.classList.add(Namespace.css.disabled); - this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, Unit.month), Unit.month) - ? next.classList.remove(Namespace.css.disabled) - : next.classList.add(Namespace.css.disabled); - } - /*** - * Generates a html row that contains the days of the week. - * @private - */ - _daysOfTheWeek() { - const innerDate = this.optionsStore.viewDate.clone - .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek) - .startOf(Unit.date); - const row = []; - document.createElement('div'); - if (this.optionsStore.options.display.calendarWeeks) { - const htmlDivElement = document.createElement('div'); - htmlDivElement.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight); - htmlDivElement.innerText = '#'; - row.push(htmlDivElement); - } - for (let i = 0; i < 7; i++) { - const htmlDivElement = document.createElement('div'); - htmlDivElement.classList.add(Namespace.css.dayOfTheWeek, Namespace.css.noHighlight); - htmlDivElement.innerText = innerDate.format({ weekday: 'short' }); - innerDate.manipulate(1, Unit.date); - row.push(htmlDivElement); - } - return row; - } - _handleCalendarWeeks(container, innerDate) { - [...container.querySelectorAll(`.${Namespace.css.calendarWeeks}`)] - .filter((e) => e.innerText !== '#') - .forEach((element) => { - element.innerText = `${innerDate.week}`; - innerDate.manipulate(7, Unit.date); - }); - } -} - -/** - * Creates and updates the grid for `month` - */ -class MonthDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.monthsContainer); - for (let i = 0; i < 12; i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectMonth); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const container = widget.getElementsByClassName(Namespace.css.monthsContainer)[0]; - if (this.optionsStore.currentView === 'months') { - const [previous, switcher, next] = container.parentElement - .getElementsByClassName(Namespace.css.calendarHeader)[0] - .getElementsByTagName('div'); - switcher.setAttribute(Namespace.css.monthsContainer, this.optionsStore.viewDate.format({ year: 'numeric' })); - this.optionsStore.options.display.components.year - ? switcher.classList.remove(Namespace.css.disabled) - : switcher.classList.add(Namespace.css.disabled); - this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, Unit.year), Unit.year) - ? previous.classList.remove(Namespace.css.disabled) - : previous.classList.add(Namespace.css.disabled); - this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, Unit.year), Unit.year) - ? next.classList.remove(Namespace.css.disabled) - : next.classList.add(Namespace.css.disabled); - } - const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.year); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectMonth}"]`) - .forEach((containerClone, index) => { - const classes = []; - classes.push(Namespace.css.month); - if (!this.optionsStore.unset && - this.dates.isPicked(innerDate, Unit.month)) { - classes.push(Namespace.css.active); - } - if (!this.validation.isValid(innerDate, Unit.month)) { - classes.push(Namespace.css.disabled); - } - paint(Unit.month, innerDate, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${index}`); - containerClone.innerText = `${innerDate.format({ month: 'short' })}`; - innerDate.manipulate(1, Unit.month); - }); - } -} - -/** - * Creates and updates the grid for `year` - */ -class YearDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.yearsContainer); - for (let i = 0; i < 12; i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectYear); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - this._startYear = this.optionsStore.viewDate.clone.manipulate(-1, Unit.year); - this._endYear = this.optionsStore.viewDate.clone.manipulate(10, Unit.year); - const container = widget.getElementsByClassName(Namespace.css.yearsContainer)[0]; - if (this.optionsStore.currentView === 'years') { - const [previous, switcher, next] = container.parentElement - .getElementsByClassName(Namespace.css.calendarHeader)[0] - .getElementsByTagName('div'); - switcher.setAttribute(Namespace.css.yearsContainer, `${this._startYear.format({ year: 'numeric' })}-${this._endYear.format({ - year: 'numeric', - })}`); - this.optionsStore.options.display.components.decades - ? switcher.classList.remove(Namespace.css.disabled) - : switcher.classList.add(Namespace.css.disabled); - this.validation.isValid(this._startYear, Unit.year) - ? previous.classList.remove(Namespace.css.disabled) - : previous.classList.add(Namespace.css.disabled); - this.validation.isValid(this._endYear, Unit.year) - ? next.classList.remove(Namespace.css.disabled) - : next.classList.add(Namespace.css.disabled); - } - const innerDate = this.optionsStore.viewDate.clone - .startOf(Unit.year) - .manipulate(-1, Unit.year); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectYear}"]`) - .forEach((containerClone) => { - const classes = []; - classes.push(Namespace.css.year); - if (!this.optionsStore.unset && - this.dates.isPicked(innerDate, Unit.year)) { - classes.push(Namespace.css.active); - } - if (!this.validation.isValid(innerDate, Unit.year)) { - classes.push(Namespace.css.disabled); - } - paint(Unit.year, innerDate, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${innerDate.year}`); - containerClone.innerText = innerDate.format({ year: 'numeric' }); - innerDate.manipulate(1, Unit.year); - }); - } -} - -/** - * Creates and updates the grid for `seconds` - */ -class DecadeDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.decadesContainer); - for (let i = 0; i < 12; i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectDecade); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const [start, end] = Dates.getStartEndYear(100, this.optionsStore.viewDate.year); - this._startDecade = this.optionsStore.viewDate.clone.startOf(Unit.year); - this._startDecade.year = start; - this._endDecade = this.optionsStore.viewDate.clone.startOf(Unit.year); - this._endDecade.year = end; - const container = widget.getElementsByClassName(Namespace.css.decadesContainer)[0]; - const [previous, switcher, next] = container.parentElement - .getElementsByClassName(Namespace.css.calendarHeader)[0] - .getElementsByTagName('div'); - if (this.optionsStore.currentView === 'decades') { - switcher.setAttribute(Namespace.css.decadesContainer, `${this._startDecade.format({ - year: 'numeric', - })}-${this._endDecade.format({ year: 'numeric' })}`); - this.validation.isValid(this._startDecade, Unit.year) - ? previous.classList.remove(Namespace.css.disabled) - : previous.classList.add(Namespace.css.disabled); - this.validation.isValid(this._endDecade, Unit.year) - ? next.classList.remove(Namespace.css.disabled) - : next.classList.add(Namespace.css.disabled); - } - const pickedYears = this.dates.picked.map((x) => x.year); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectDecade}"]`) - .forEach((containerClone, index) => { - if (index === 0) { - containerClone.classList.add(Namespace.css.old); - if (this._startDecade.year - 10 < 0) { - containerClone.textContent = ' '; - previous.classList.add(Namespace.css.disabled); - containerClone.classList.add(Namespace.css.disabled); - containerClone.setAttribute('data-value', ''); - return; - } - else { - containerClone.innerText = this._startDecade.clone - .manipulate(-10, Unit.year) - .format({ year: 'numeric' }); - containerClone.setAttribute('data-value', `${this._startDecade.year}`); - return; - } - } - const classes = []; - classes.push(Namespace.css.decade); - const startDecadeYear = this._startDecade.year; - const endDecadeYear = this._startDecade.year + 9; - if (!this.optionsStore.unset && - pickedYears.filter((x) => x >= startDecadeYear && x <= endDecadeYear) - .length > 0) { - classes.push(Namespace.css.active); - } - paint('decade', this._startDecade, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${this._startDecade.year}`); - containerClone.innerText = `${this._startDecade.format({ - year: 'numeric', - })}`; - this._startDecade.manipulate(10, Unit.year); - }); - } -} - -/** - * Creates the clock display - */ -class TimeDisplay { - constructor() { - this._gridColumns = ''; - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the clock display - * @private - */ - getPicker(iconTag) { - const container = document.createElement('div'); - container.classList.add(Namespace.css.clockContainer); - container.append(...this._grid(iconTag)); - return container; - } - /** - * Populates the various elements with in the clock display - * like the current hour and if the manipulation icons are enabled. - * @private - */ - _update(widget) { - const timesDiv = (widget.getElementsByClassName(Namespace.css.clockContainer)[0]); - let lastPicked = this.dates.lastPicked?.clone; - if (!lastPicked && this.optionsStore.options.useCurrent) - lastPicked = this.optionsStore.viewDate.clone; - timesDiv - .querySelectorAll('.disabled') - .forEach((element) => element.classList.remove(Namespace.css.disabled)); - if (this.optionsStore.options.display.components.hours) { - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, Unit.hours), Unit.hours)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.incrementHours}]`) - .classList.add(Namespace.css.disabled); - } - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, Unit.hours), Unit.hours)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.decrementHours}]`) - .classList.add(Namespace.css.disabled); - } - timesDiv.querySelector(`[data-time-component=${Unit.hours}]`).innerText = lastPicked - ? lastPicked.getHoursFormatted(this.optionsStore.options.localization.hourCycle) - : '--'; - } - if (this.optionsStore.options.display.components.minutes) { - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, Unit.minutes), Unit.minutes)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.incrementMinutes}]`) - .classList.add(Namespace.css.disabled); - } - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, Unit.minutes), Unit.minutes)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.decrementMinutes}]`) - .classList.add(Namespace.css.disabled); - } - timesDiv.querySelector(`[data-time-component=${Unit.minutes}]`).innerText = lastPicked ? lastPicked.minutesFormatted : '--'; - } - if (this.optionsStore.options.display.components.seconds) { - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, Unit.seconds), Unit.seconds)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.incrementSeconds}]`) - .classList.add(Namespace.css.disabled); - } - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, Unit.seconds), Unit.seconds)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.decrementSeconds}]`) - .classList.add(Namespace.css.disabled); - } - timesDiv.querySelector(`[data-time-component=${Unit.seconds}]`).innerText = lastPicked ? lastPicked.secondsFormatted : '--'; - } - if (this.optionsStore.isTwelveHour) { - const toggle = timesDiv.querySelector(`[data-action=${ActionTypes$1.toggleMeridiem}]`); - const meridiemDate = (lastPicked || this.optionsStore.viewDate).clone; - toggle.innerText = meridiemDate.meridiem(); - if (!this.validation.isValid(meridiemDate.manipulate(meridiemDate.hours >= 12 ? -12 : 12, Unit.hours))) { - toggle.classList.add(Namespace.css.disabled); - } - else { - toggle.classList.remove(Namespace.css.disabled); - } - } - timesDiv.style.gridTemplateAreas = `"${this._gridColumns}"`; - } - /** - * Creates the table for the clock display depending on what options are selected. - * @private - */ - _grid(iconTag) { - this._gridColumns = ''; - const top = [], middle = [], bottom = [], separator = document.createElement('div'), upIcon = iconTag(this.optionsStore.options.display.icons.up), downIcon = iconTag(this.optionsStore.options.display.icons.down); - separator.classList.add(Namespace.css.separator, Namespace.css.noHighlight); - const separatorColon = separator.cloneNode(true); - separatorColon.innerHTML = ':'; - const getSeparator = (colon = false) => { - return colon - ? separatorColon.cloneNode(true) - : separator.cloneNode(true); - }; - if (this.optionsStore.options.display.components.hours) { - let divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.incrementHour); - divElement.setAttribute('data-action', ActionTypes$1.incrementHours); - divElement.appendChild(upIcon.cloneNode(true)); - top.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.pickHour); - divElement.setAttribute('data-action', ActionTypes$1.showHours); - divElement.setAttribute('data-time-component', Unit.hours); - middle.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.decrementHour); - divElement.setAttribute('data-action', ActionTypes$1.decrementHours); - divElement.appendChild(downIcon.cloneNode(true)); - bottom.push(divElement); - this._gridColumns += 'a'; - } - if (this.optionsStore.options.display.components.minutes) { - this._gridColumns += ' a'; - if (this.optionsStore.options.display.components.hours) { - top.push(getSeparator()); - middle.push(getSeparator(true)); - bottom.push(getSeparator()); - this._gridColumns += ' a'; - } - let divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.incrementMinute); - divElement.setAttribute('data-action', ActionTypes$1.incrementMinutes); - divElement.appendChild(upIcon.cloneNode(true)); - top.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.pickMinute); - divElement.setAttribute('data-action', ActionTypes$1.showMinutes); - divElement.setAttribute('data-time-component', Unit.minutes); - middle.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.decrementMinute); - divElement.setAttribute('data-action', ActionTypes$1.decrementMinutes); - divElement.appendChild(downIcon.cloneNode(true)); - bottom.push(divElement); - } - if (this.optionsStore.options.display.components.seconds) { - this._gridColumns += ' a'; - if (this.optionsStore.options.display.components.minutes) { - top.push(getSeparator()); - middle.push(getSeparator(true)); - bottom.push(getSeparator()); - this._gridColumns += ' a'; - } - let divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.incrementSecond); - divElement.setAttribute('data-action', ActionTypes$1.incrementSeconds); - divElement.appendChild(upIcon.cloneNode(true)); - top.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.pickSecond); - divElement.setAttribute('data-action', ActionTypes$1.showSeconds); - divElement.setAttribute('data-time-component', Unit.seconds); - middle.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.decrementSecond); - divElement.setAttribute('data-action', ActionTypes$1.decrementSeconds); - divElement.appendChild(downIcon.cloneNode(true)); - bottom.push(divElement); - } - if (this.optionsStore.isTwelveHour) { - this._gridColumns += ' a'; - let divElement = getSeparator(); - top.push(divElement); - const button = document.createElement('button'); - button.setAttribute('type', 'button'); - button.setAttribute('title', this.optionsStore.options.localization.toggleMeridiem); - button.setAttribute('data-action', ActionTypes$1.toggleMeridiem); - button.setAttribute('tabindex', '-1'); - if (Namespace.css.toggleMeridiem.includes(',')) { - //todo move this to paint function? - button.classList.add(...Namespace.css.toggleMeridiem.split(',')); - } - else - button.classList.add(Namespace.css.toggleMeridiem); - divElement = document.createElement('div'); - divElement.classList.add(Namespace.css.noHighlight); - divElement.appendChild(button); - middle.push(divElement); - divElement = getSeparator(); - bottom.push(divElement); - } - this._gridColumns = this._gridColumns.trim(); - return [...top, ...middle, ...bottom]; - } -} - -/** - * Creates and updates the grid for `hours` - */ -class HourDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.hourContainer); - for (let i = 0; i < (this.optionsStore.isTwelveHour ? 12 : 24); i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectHour); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const container = widget.getElementsByClassName(Namespace.css.hourContainer)[0]; - const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.date); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectHour}"]`) - .forEach((containerClone) => { - const classes = []; - classes.push(Namespace.css.hour); - if (!this.validation.isValid(innerDate, Unit.hours)) { - classes.push(Namespace.css.disabled); - } - paint(Unit.hours, innerDate, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${innerDate.hours}`); - containerClone.innerText = innerDate.getHoursFormatted(this.optionsStore.options.localization.hourCycle); - innerDate.manipulate(1, Unit.hours); - }); - } -} - -/** - * Creates and updates the grid for `minutes` - */ -class MinuteDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.minuteContainer); - const step = this.optionsStore.options.stepping === 1 - ? 5 - : this.optionsStore.options.stepping; - for (let i = 0; i < 60 / step; i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectMinute); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const container = widget.getElementsByClassName(Namespace.css.minuteContainer)[0]; - const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.hours); - const step = this.optionsStore.options.stepping === 1 - ? 5 - : this.optionsStore.options.stepping; - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectMinute}"]`) - .forEach((containerClone) => { - const classes = []; - classes.push(Namespace.css.minute); - if (!this.validation.isValid(innerDate, Unit.minutes)) { - classes.push(Namespace.css.disabled); - } - paint(Unit.minutes, innerDate, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${innerDate.minutes}`); - containerClone.innerText = innerDate.minutesFormatted; - innerDate.manipulate(step, Unit.minutes); - }); - } -} - -/** - * Creates and updates the grid for `seconds` - */ -class secondDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.secondContainer); - for (let i = 0; i < 12; i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectSecond); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const container = widget.getElementsByClassName(Namespace.css.secondContainer)[0]; - const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.minutes); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectSecond}"]`) - .forEach((containerClone) => { - const classes = []; - classes.push(Namespace.css.second); - if (!this.validation.isValid(innerDate, Unit.seconds)) { - classes.push(Namespace.css.disabled); - } - paint(Unit.seconds, innerDate, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${innerDate.seconds}`); - containerClone.innerText = innerDate.secondsFormatted; - innerDate.manipulate(5, Unit.seconds); - }); - } -} - -/** - * Provides a collapse functionality to the view changes - */ -class Collapse { - /** - * Flips the show/hide state of `target` - * @param target html element to affect. - */ - static toggle(target) { - if (target.classList.contains(Namespace.css.show)) { - this.hide(target); - } - else { - this.show(target); - } - } - /** - * Skips any animation or timeouts and immediately set the element to show. - * @param target - */ - static showImmediately(target) { - target.classList.remove(Namespace.css.collapsing); - target.classList.add(Namespace.css.collapse, Namespace.css.show); - target.style.height = ''; - } - /** - * If `target` is not already showing, then show after the animation. - * @param target - */ - static show(target) { - if (target.classList.contains(Namespace.css.collapsing) || - target.classList.contains(Namespace.css.show)) - return; - const complete = () => { - Collapse.showImmediately(target); - }; - target.style.height = '0'; - target.classList.remove(Namespace.css.collapse); - target.classList.add(Namespace.css.collapsing); - //eslint-disable-next-line @typescript-eslint/no-unused-vars - setTimeout(complete, this.getTransitionDurationFromElement(target)); - target.style.height = `${target.scrollHeight}px`; - } - /** - * Skips any animation or timeouts and immediately set the element to hide. - * @param target - */ - static hideImmediately(target) { - if (!target) - return; - target.classList.remove(Namespace.css.collapsing, Namespace.css.show); - target.classList.add(Namespace.css.collapse); - } - /** - * If `target` is not already hidden, then hide after the animation. - * @param target HTML Element - */ - static hide(target) { - if (target.classList.contains(Namespace.css.collapsing) || - !target.classList.contains(Namespace.css.show)) - return; - const complete = () => { - Collapse.hideImmediately(target); - }; - target.style.height = `${target.getBoundingClientRect()['height']}px`; - const reflow = (element) => element.offsetHeight; - reflow(target); - target.classList.remove(Namespace.css.collapse, Namespace.css.show); - target.classList.add(Namespace.css.collapsing); - target.style.height = ''; - //eslint-disable-next-line @typescript-eslint/no-unused-vars - setTimeout(complete, this.getTransitionDurationFromElement(target)); - } -} -/** - * Gets the transition duration from the `element` by getting css properties - * `transition-duration` and `transition-delay` - * @param element HTML Element - */ -Collapse.getTransitionDurationFromElement = (element) => { - if (!element) { - return 0; - } - // Get transition-duration of the element - let { transitionDuration, transitionDelay } = window.getComputedStyle(element); - const floatTransitionDuration = Number.parseFloat(transitionDuration); - const floatTransitionDelay = Number.parseFloat(transitionDelay); - // Return 0 if element or transition duration is not found - if (!floatTransitionDuration && !floatTransitionDelay) { - return 0; - } - // If multiple durations are defined, take the first - transitionDuration = transitionDuration.split(',')[0]; - transitionDelay = transitionDelay.split(',')[0]; - return ((Number.parseFloat(transitionDuration) + - Number.parseFloat(transitionDelay)) * - 1000); -}; - -/** - * Main class for all things display related. - */ -class Display { - constructor() { - this._isVisible = false; - /** - * A document click event to hide the widget if click is outside - * @private - * @param e MouseEvent - */ - this._documentClickEvent = (e) => { - if (this.optionsStore.options.debug || window.debug) - return; //eslint-disable-line @typescript-eslint/no-explicit-any - if (this._isVisible && - !e.composedPath().includes(this.widget) && // click inside the widget - !e.composedPath()?.includes(this.optionsStore.element) // click on the element - ) { - this.hide(); - } - }; - /** - * Click event for any action like selecting a date - * @param e MouseEvent - * @private - */ - this._actionsClickEvent = (e) => { - this._eventEmitters.action.emit({ e: e }); - }; - this.optionsStore = serviceLocator.locate(OptionsStore); - this.validation = serviceLocator.locate(Validation); - this.dates = serviceLocator.locate(Dates); - this.dateDisplay = serviceLocator.locate(DateDisplay); - this.monthDisplay = serviceLocator.locate(MonthDisplay); - this.yearDisplay = serviceLocator.locate(YearDisplay); - this.decadeDisplay = serviceLocator.locate(DecadeDisplay); - this.timeDisplay = serviceLocator.locate(TimeDisplay); - this.hourDisplay = serviceLocator.locate(HourDisplay); - this.minuteDisplay = serviceLocator.locate(MinuteDisplay); - this.secondDisplay = serviceLocator.locate(secondDisplay); - this._eventEmitters = serviceLocator.locate(EventEmitters); - this._widget = undefined; - this._eventEmitters.updateDisplay.subscribe((result) => { - this._update(result); - }); - } - /** - * Returns the widget body or undefined - * @private - */ - get widget() { - return this._widget; - } - get dateContainer() { - return this.widget?.querySelector(`div.${Namespace.css.dateContainer}`); - } - get timeContainer() { - return this.widget?.querySelector(`div.${Namespace.css.timeContainer}`); - } - /** - * Returns this visible state of the picker (shown) - */ - get isVisible() { - return this._isVisible; - } - /** - * Updates the table for a particular unit. Used when an option as changed or - * whenever the class list might need to be refreshed. - * @param unit - * @private - */ - _update(unit) { - if (!this.widget) - return; - switch (unit) { - case Unit.seconds: - this.secondDisplay._update(this.widget, this.paint); - break; - case Unit.minutes: - this.minuteDisplay._update(this.widget, this.paint); - break; - case Unit.hours: - this.hourDisplay._update(this.widget, this.paint); - break; - case Unit.date: - this.dateDisplay._update(this.widget, this.paint); - break; - case Unit.month: - this.monthDisplay._update(this.widget, this.paint); - break; - case Unit.year: - this.yearDisplay._update(this.widget, this.paint); - break; - case 'decade': - this.decadeDisplay._update(this.widget, this.paint); - break; - case 'clock': - if (!this._hasTime) - break; - this.timeDisplay._update(this.widget); - this._update(Unit.hours); - this._update(Unit.minutes); - this._update(Unit.seconds); - break; - case 'calendar': - this._update(Unit.date); - this._update(Unit.year); - this._update(Unit.month); - this.decadeDisplay._update(this.widget, this.paint); - this._updateCalendarHeader(); - break; - case 'all': - if (this._hasTime) { - this._update('clock'); - } - if (this._hasDate) { - this._update('calendar'); - } - } - } - // noinspection JSUnusedLocalSymbols - /** - * Allows developers to add/remove classes from an element. - * @param _unit - * @param _date - * @param _classes - * @param _element - */ - /* eslint-disable @typescript-eslint/no-unused-vars */ - paint(_unit, _date, _classes, _element) { - // implemented in plugin - } - /** - * Shows the picker and creates a Popper instance if needed. - * Add document click event to hide when clicking outside the picker. - * fires Events#show - */ - show() { - if (this.widget == undefined) { - this._showSetDefaultIfNeeded(); - this._buildWidget(); - this._updateTheme(); - this._showSetupViewMode(); - if (!this.optionsStore.options.display.inline) { - // If needed to change the parent container - const container = this.optionsStore.options?.container || document.body; - const placement = this.optionsStore.options?.display?.placement || 'bottom'; - container.appendChild(this.widget); - this.createPopup(this.optionsStore.element, this.widget, { - modifiers: [{ name: 'eventListeners', enabled: true }], - //#2400 - placement: document.documentElement.dir === 'rtl' - ? `${placement}-end` - : `${placement}-start`, - }).then(); - } - else { - this.optionsStore.element.appendChild(this.widget); - } - if (this.optionsStore.options.display.viewMode == 'clock') { - this._eventEmitters.action.emit({ - e: null, - action: ActionTypes$1.showClock, - }); - } - this.widget - .querySelectorAll('[data-action]') - .forEach((element) => element.addEventListener('click', this._actionsClickEvent)); - // show the clock when using sideBySide - if (this._hasTime && this.optionsStore.options.display.sideBySide) { - this.timeDisplay._update(this.widget); - this.widget.getElementsByClassName(Namespace.css.clockContainer)[0].style.display = 'grid'; - } - } - this.widget.classList.add(Namespace.css.show); - if (!this.optionsStore.options.display.inline) { - this.updatePopup(); - document.addEventListener('click', this._documentClickEvent); - } - this._eventEmitters.triggerEvent.emit({ type: Namespace.events.show }); - this._isVisible = true; - } - _showSetupViewMode() { - // If modeView is only clock - const onlyClock = this._hasTime && !this._hasDate; - // reset the view to the clock if there's no date components - if (onlyClock) { - this.optionsStore.currentView = 'clock'; - this._eventEmitters.action.emit({ - e: null, - action: ActionTypes$1.showClock, - }); - } - // otherwise return to the calendar view - else if (!this.optionsStore.currentCalendarViewMode) { - this.optionsStore.currentCalendarViewMode = - this.optionsStore.minimumCalendarViewMode; - } - if (!onlyClock && this.optionsStore.options.display.viewMode !== 'clock') { - if (this._hasTime) { - if (!this.optionsStore.options.display.sideBySide) { - Collapse.hideImmediately(this.timeContainer); - } - else { - Collapse.show(this.timeContainer); - } - } - Collapse.show(this.dateContainer); - } - if (this._hasDate) { - this._showMode(); - } - } - _showSetDefaultIfNeeded() { - if (this.dates.picked.length != 0) - return; - if (this.optionsStore.options.useCurrent && - !this.optionsStore.options.defaultDate) { - const date = new DateTime().setLocalization(this.optionsStore.options.localization); - if (!this.optionsStore.options.keepInvalid) { - let tries = 0; - let direction = 1; - if (this.optionsStore.options.restrictions.maxDate?.isBefore(date)) { - direction = -1; - } - while (!this.validation.isValid(date) && tries > 31) { - date.manipulate(direction, Unit.date); - tries++; - } - } - this.dates.setValue(date); - } - if (this.optionsStore.options.defaultDate) { - this.dates.setValue(this.optionsStore.options.defaultDate); - } - } - async createPopup(element, widget, - //eslint-disable-next-line @typescript-eslint/no-explicit-any - options) { - let createPopperFunction; - //eslint-disable-next-line @typescript-eslint/no-explicit-any - if (window?.Popper) { - //eslint-disable-next-line @typescript-eslint/no-explicit-any - createPopperFunction = window?.Popper?.createPopper; - } - else { - const { createPopper } = await import('@popperjs/core'); - createPopperFunction = createPopper; - } - if (createPopperFunction) { - this._popperInstance = createPopperFunction(element, widget, options); - } - } - updatePopup() { - this._popperInstance?.update(); - } - /** - * Changes the calendar view mode. E.g. month <-> year - * @param direction -/+ number to move currentViewMode - * @private - */ - _showMode(direction) { - if (!this.widget) { - return; - } - if (direction) { - const max = Math.max(this.optionsStore.minimumCalendarViewMode, Math.min(3, this.optionsStore.currentCalendarViewMode + direction)); - if (this.optionsStore.currentCalendarViewMode == max) - return; - this.optionsStore.currentCalendarViewMode = max; - } - this.widget - .querySelectorAll(`.${Namespace.css.dateContainer} > div:not(.${Namespace.css.calendarHeader}), .${Namespace.css.timeContainer} > div:not(.${Namespace.css.clockContainer})`) - .forEach((e) => (e.style.display = 'none')); - const datePickerMode = CalendarModes[this.optionsStore.currentCalendarViewMode]; - const picker = this.widget.querySelector(`.${datePickerMode.className}`); - switch (datePickerMode.className) { - case Namespace.css.decadesContainer: - this.decadeDisplay._update(this.widget, this.paint); - break; - case Namespace.css.yearsContainer: - this.yearDisplay._update(this.widget, this.paint); - break; - case Namespace.css.monthsContainer: - this.monthDisplay._update(this.widget, this.paint); - break; - case Namespace.css.daysContainer: - this.dateDisplay._update(this.widget, this.paint); - break; - } - picker.style.display = 'grid'; - if (this.optionsStore.options.display.sideBySide) - (this.widget.querySelectorAll(`.${Namespace.css.clockContainer}`)[0]).style.display = 'grid'; - this._updateCalendarHeader(); - this._eventEmitters.viewUpdate.emit(); - } - /** - * Changes the theme. E.g. light, dark or auto - * @param theme the theme name - * @private - */ - _updateTheme(theme) { - if (!this.widget) { - return; - } - if (theme) { - if (this.optionsStore.options.display.theme === theme) - return; - this.optionsStore.options.display.theme = theme; - } - this.widget.classList.remove('light', 'dark'); - this.widget.classList.add(this._getThemeClass()); - if (this.optionsStore.options.display.theme === 'auto') { - window - .matchMedia(Namespace.css.isDarkPreferredQuery) - .addEventListener('change', () => this._updateTheme()); - } - else { - window - .matchMedia(Namespace.css.isDarkPreferredQuery) - .removeEventListener('change', () => this._updateTheme()); - } - } - _getThemeClass() { - const currentTheme = this.optionsStore.options.display.theme || 'auto'; - const isDarkMode = window.matchMedia && - window.matchMedia(Namespace.css.isDarkPreferredQuery).matches; - switch (currentTheme) { - case 'light': - return Namespace.css.lightTheme; - case 'dark': - return Namespace.css.darkTheme; - case 'auto': - return isDarkMode ? Namespace.css.darkTheme : Namespace.css.lightTheme; - } - } - _updateCalendarHeader() { - if (!this._hasDate) - return; - const showing = [ - ...this.widget.querySelector(`.${Namespace.css.dateContainer} div[style*="display: grid"]`).classList, - ].find((x) => x.startsWith(Namespace.css.dateContainer)); - const [previous, switcher, next] = this.widget - .getElementsByClassName(Namespace.css.calendarHeader)[0] - .getElementsByTagName('div'); - switch (showing) { - case Namespace.css.decadesContainer: - previous.setAttribute('title', this.optionsStore.options.localization.previousCentury); - switcher.setAttribute('title', ''); - next.setAttribute('title', this.optionsStore.options.localization.nextCentury); - break; - case Namespace.css.yearsContainer: - previous.setAttribute('title', this.optionsStore.options.localization.previousDecade); - switcher.setAttribute('title', this.optionsStore.options.localization.selectDecade); - next.setAttribute('title', this.optionsStore.options.localization.nextDecade); - break; - case Namespace.css.monthsContainer: - previous.setAttribute('title', this.optionsStore.options.localization.previousYear); - switcher.setAttribute('title', this.optionsStore.options.localization.selectYear); - next.setAttribute('title', this.optionsStore.options.localization.nextYear); - break; - case Namespace.css.daysContainer: - previous.setAttribute('title', this.optionsStore.options.localization.previousMonth); - switcher.setAttribute('title', this.optionsStore.options.localization.selectMonth); - next.setAttribute('title', this.optionsStore.options.localization.nextMonth); - switcher.setAttribute(showing, this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat)); - break; - } - switcher.innerText = switcher.getAttribute(showing); - } - /** - * Hides the picker if needed. - * Remove document click event to hide when clicking outside the picker. - * fires Events#hide - */ - hide() { - if (!this.widget || !this._isVisible) - return; - this.widget.classList.remove(Namespace.css.show); - if (this._isVisible) { - this._eventEmitters.triggerEvent.emit({ - type: Namespace.events.hide, - date: this.optionsStore.unset ? null : this.dates.lastPicked?.clone, - }); - this._isVisible = false; - } - document.removeEventListener('click', this._documentClickEvent); - } - /** - * Toggles the picker's open state. Fires a show/hide event depending. - */ - toggle() { - return this._isVisible ? this.hide() : this.show(); - } - /** - * Removes document and data-action click listener and reset the widget - * @private - */ - _dispose() { - document.removeEventListener('click', this._documentClickEvent); - if (!this.widget) - return; - this.widget - .querySelectorAll('[data-action]') - .forEach((element) => element.removeEventListener('click', this._actionsClickEvent)); - this.widget.parentNode.removeChild(this.widget); - this._widget = undefined; - } - /** - * Builds the widgets html template. - * @private - */ - _buildWidget() { - const template = document.createElement('div'); - template.classList.add(Namespace.css.widget); - const dateView = document.createElement('div'); - dateView.classList.add(Namespace.css.dateContainer); - dateView.append(this.getHeadTemplate(), this.decadeDisplay.getPicker(), this.yearDisplay.getPicker(), this.monthDisplay.getPicker(), this.dateDisplay.getPicker()); - const timeView = document.createElement('div'); - timeView.classList.add(Namespace.css.timeContainer); - timeView.appendChild(this.timeDisplay.getPicker(this._iconTag.bind(this))); - timeView.appendChild(this.hourDisplay.getPicker()); - timeView.appendChild(this.minuteDisplay.getPicker()); - timeView.appendChild(this.secondDisplay.getPicker()); - const toolbar = document.createElement('div'); - toolbar.classList.add(Namespace.css.toolbar); - toolbar.append(...this.getToolbarElements()); - if (this.optionsStore.options.display.inline) { - template.classList.add(Namespace.css.inline); - } - if (this.optionsStore.options.display.calendarWeeks) { - template.classList.add('calendarWeeks'); - } - if (this.optionsStore.options.display.sideBySide && this._hasDateAndTime) { - this._buildWidgetSideBySide(template, dateView, timeView, toolbar); - return; - } - if (this.optionsStore.options.display.toolbarPlacement === 'top') { - template.appendChild(toolbar); - } - const setupComponentView = (hasFirst, hasSecond, element, shouldShow) => { - if (!hasFirst) - return; - if (hasSecond) { - element.classList.add(Namespace.css.collapse); - if (shouldShow) - element.classList.add(Namespace.css.show); - } - template.appendChild(element); - }; - setupComponentView(this._hasDate, this._hasTime, dateView, this.optionsStore.options.display.viewMode !== 'clock'); - setupComponentView(this._hasTime, this._hasDate, timeView, this.optionsStore.options.display.viewMode === 'clock'); - if (this.optionsStore.options.display.toolbarPlacement === 'bottom') { - template.appendChild(toolbar); - } - const arrow = document.createElement('div'); - arrow.classList.add('arrow'); - arrow.setAttribute('data-popper-arrow', ''); - template.appendChild(arrow); - this._widget = template; - } - _buildWidgetSideBySide(template, dateView, timeView, toolbar) { - template.classList.add(Namespace.css.sideBySide); - if (this.optionsStore.options.display.toolbarPlacement === 'top') { - template.appendChild(toolbar); - } - const row = document.createElement('div'); - row.classList.add('td-row'); - dateView.classList.add('td-half'); - timeView.classList.add('td-half'); - row.appendChild(dateView); - row.appendChild(timeView); - template.appendChild(row); - if (this.optionsStore.options.display.toolbarPlacement === 'bottom') { - template.appendChild(toolbar); - } - this._widget = template; - } - /** - * Returns true if the hours, minutes, or seconds component is turned on - */ - get _hasTime() { - return (this.optionsStore.options.display.components.clock && - (this.optionsStore.options.display.components.hours || - this.optionsStore.options.display.components.minutes || - this.optionsStore.options.display.components.seconds)); - } - /** - * Returns true if the year, month, or date component is turned on - */ - get _hasDate() { - return (this.optionsStore.options.display.components.calendar && - (this.optionsStore.options.display.components.year || - this.optionsStore.options.display.components.month || - this.optionsStore.options.display.components.date)); - } - get _hasDateAndTime() { - return this._hasDate && this._hasTime; - } - /** - * Get the toolbar html based on options like buttons => today - * @private - */ - getToolbarElements() { - const toolbar = []; - if (this.optionsStore.options.display.buttons.today) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.today); - div.setAttribute('title', this.optionsStore.options.localization.today); - div.appendChild(this._iconTag(this.optionsStore.options.display.icons.today)); - toolbar.push(div); - } - if (!this.optionsStore.options.display.sideBySide && - this._hasDate && - this._hasTime) { - let title, icon; - if (this.optionsStore.options.display.viewMode === 'clock') { - title = this.optionsStore.options.localization.selectDate; - icon = this.optionsStore.options.display.icons.date; - } - else { - title = this.optionsStore.options.localization.selectTime; - icon = this.optionsStore.options.display.icons.time; - } - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.togglePicker); - div.setAttribute('title', title); - div.appendChild(this._iconTag(icon)); - toolbar.push(div); - } - if (this.optionsStore.options.display.buttons.clear) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.clear); - div.setAttribute('title', this.optionsStore.options.localization.clear); - div.appendChild(this._iconTag(this.optionsStore.options.display.icons.clear)); - toolbar.push(div); - } - if (this.optionsStore.options.display.buttons.close) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.close); - div.setAttribute('title', this.optionsStore.options.localization.close); - div.appendChild(this._iconTag(this.optionsStore.options.display.icons.close)); - toolbar.push(div); - } - return toolbar; - } - /*** - * Builds the base header template with next and previous icons - * @private - */ - getHeadTemplate() { - const calendarHeader = document.createElement('div'); - calendarHeader.classList.add(Namespace.css.calendarHeader); - const previous = document.createElement('div'); - previous.classList.add(Namespace.css.previous); - previous.setAttribute('data-action', ActionTypes$1.previous); - previous.appendChild(this._iconTag(this.optionsStore.options.display.icons.previous)); - const switcher = document.createElement('div'); - switcher.classList.add(Namespace.css.switch); - switcher.setAttribute('data-action', ActionTypes$1.changeCalendarView); - const next = document.createElement('div'); - next.classList.add(Namespace.css.next); - next.setAttribute('data-action', ActionTypes$1.next); - next.appendChild(this._iconTag(this.optionsStore.options.display.icons.next)); - calendarHeader.append(previous, switcher, next); - return calendarHeader; - } - /** - * Builds an icon tag as either an `` - * or with icons => type is `sprites` then a svg tag instead - * @param iconClass - * @private - */ - _iconTag(iconClass) { - if (this.optionsStore.options.display.icons.type === 'sprites') { - const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - const icon = document.createElementNS('http://www.w3.org/2000/svg', 'use'); - icon.setAttribute('xlink:href', iconClass); // Deprecated. Included for backward compatibility - icon.setAttribute('href', iconClass); - svg.appendChild(icon); - return svg; - } - const icon = document.createElement('i'); - icon.classList.add(...iconClass.split(' ')); - return icon; - } - /** - * Causes the widget to get rebuilt on next show. If the picker is already open - * then hide and reshow it. - * @private - */ - _rebuild() { - const wasVisible = this._isVisible; - this._dispose(); - if (wasVisible) - this.show(); - } - refreshCurrentView() { - //if the widget is not showing, just destroy it - if (!this._isVisible) - this._dispose(); - switch (this.optionsStore.currentView) { - case 'clock': - this._update('clock'); - break; - case 'calendar': - this._update(Unit.date); - break; - case 'months': - this._update(Unit.month); - break; - case 'years': - this._update(Unit.year); - break; - case 'decades': - this._update('decade'); - break; - } - } -} - -/** - * Logic for various click actions - */ -class Actions { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - this.display = serviceLocator.locate(Display); - this._eventEmitters = serviceLocator.locate(EventEmitters); - this._eventEmitters.action.subscribe((result) => { - this.do(result.e, result.action); - }); - } - /** - * Performs the selected `action`. See ActionTypes - * @param e This is normally a click event - * @param action If not provided, then look for a [data-action] - */ - //eslint-disable-next-line @typescript-eslint/no-explicit-any - do(e, action) { - const currentTarget = e?.currentTarget; - if (currentTarget?.classList?.contains(Namespace.css.disabled)) - return; - action = action || currentTarget?.dataset?.action; - const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate) - .clone; - switch (action) { - case ActionTypes$1.next: - case ActionTypes$1.previous: - this.handleNextPrevious(action); - break; - case ActionTypes$1.changeCalendarView: - this.display._showMode(1); - this.display._updateCalendarHeader(); - break; - case ActionTypes$1.selectMonth: - case ActionTypes$1.selectYear: - case ActionTypes$1.selectDecade: - this.handleSelectCalendarMode(action, currentTarget); - break; - case ActionTypes$1.selectDay: - this.handleSelectDay(currentTarget); - break; - case ActionTypes$1.selectHour: { - let hour = +currentTarget.dataset.value; - if (lastPicked.hours >= 12 && this.optionsStore.isTwelveHour) - hour += 12; - lastPicked.hours = hour; - this.dates.setValue(lastPicked, this.dates.lastPickedIndex); - this.hideOrClock(e); - break; - } - case ActionTypes$1.selectMinute: { - lastPicked.minutes = +currentTarget.dataset.value; - this.dates.setValue(lastPicked, this.dates.lastPickedIndex); - this.hideOrClock(e); - break; - } - case ActionTypes$1.selectSecond: { - lastPicked.seconds = +currentTarget.dataset.value; - this.dates.setValue(lastPicked, this.dates.lastPickedIndex); - this.hideOrClock(e); - break; - } - case ActionTypes$1.incrementHours: - this.manipulateAndSet(lastPicked, Unit.hours); - break; - case ActionTypes$1.incrementMinutes: - this.manipulateAndSet(lastPicked, Unit.minutes, this.optionsStore.options.stepping); - break; - case ActionTypes$1.incrementSeconds: - this.manipulateAndSet(lastPicked, Unit.seconds); - break; - case ActionTypes$1.decrementHours: - this.manipulateAndSet(lastPicked, Unit.hours, -1); - break; - case ActionTypes$1.decrementMinutes: - this.manipulateAndSet(lastPicked, Unit.minutes, this.optionsStore.options.stepping * -1); - break; - case ActionTypes$1.decrementSeconds: - this.manipulateAndSet(lastPicked, Unit.seconds, -1); - break; - case ActionTypes$1.toggleMeridiem: - this.manipulateAndSet(lastPicked, Unit.hours, this.dates.lastPicked.hours >= 12 ? -12 : 12); - break; - case ActionTypes$1.togglePicker: - this.handleToggle(currentTarget); - break; - case ActionTypes$1.showClock: - case ActionTypes$1.showHours: - case ActionTypes$1.showMinutes: - case ActionTypes$1.showSeconds: - //make sure the clock is actually displaying - if (!this.optionsStore.options.display.sideBySide && - this.optionsStore.currentView !== 'clock') { - //hide calendar - Collapse.hideImmediately(this.display.dateContainer); - //show clock - Collapse.showImmediately(this.display.timeContainer); - } - this.handleShowClockContainers(action); - break; - case ActionTypes$1.clear: - this.dates.setValue(null); - this.display._updateCalendarHeader(); - break; - case ActionTypes$1.close: - this.display.hide(); - break; - case ActionTypes$1.today: { - const today = new DateTime().setLocalization(this.optionsStore.options.localization); - this._eventEmitters.updateViewDate.emit(today); - //todo this this really a good idea? - if (this.validation.isValid(today, Unit.date)) - this.dates.setValue(today, this.dates.lastPickedIndex); - break; - } - } - } - handleShowClockContainers(action) { - if (!this.display._hasTime) { - Namespace.errorMessages.throwError('Cannot show clock containers when time is disabled.'); - /* ignore coverage: should never happen */ - return; - } - this.optionsStore.currentView = 'clock'; - this.display.widget - .querySelectorAll(`.${Namespace.css.timeContainer} > div`) - .forEach((htmlElement) => (htmlElement.style.display = 'none')); - let classToUse = ''; - switch (action) { - case ActionTypes$1.showClock: - classToUse = Namespace.css.clockContainer; - this.display._update('clock'); - break; - case ActionTypes$1.showHours: - classToUse = Namespace.css.hourContainer; - this.display._update(Unit.hours); - break; - case ActionTypes$1.showMinutes: - classToUse = Namespace.css.minuteContainer; - this.display._update(Unit.minutes); - break; - case ActionTypes$1.showSeconds: - classToUse = Namespace.css.secondContainer; - this.display._update(Unit.seconds); - break; - } - (this.display.widget.getElementsByClassName(classToUse)[0]).style.display = 'grid'; - } - handleNextPrevious(action) { - const { unit, step } = CalendarModes[this.optionsStore.currentCalendarViewMode]; - if (action === ActionTypes$1.next) - this.optionsStore.viewDate.manipulate(step, unit); - else - this.optionsStore.viewDate.manipulate(step * -1, unit); - this._eventEmitters.viewUpdate.emit(); - this.display._showMode(); - } - /** - * After setting the value it will either show the clock or hide the widget. - * @param e - */ - hideOrClock(e) { - if (!this.optionsStore.isTwelveHour && - !this.optionsStore.options.display.components.minutes && - !this.optionsStore.options.display.keepOpen && - !this.optionsStore.options.display.inline) { - this.display.hide(); - } - else { - this.do(e, ActionTypes$1.showClock); - } - } - /** - * Common function to manipulate {@link lastPicked} by `unit`. - * @param lastPicked - * @param unit - * @param value Value to change by - */ - manipulateAndSet(lastPicked, unit, value = 1) { - const newDate = lastPicked.manipulate(value, unit); - if (this.validation.isValid(newDate, unit)) { - this.dates.setValue(newDate, this.dates.lastPickedIndex); - } - } - handleSelectCalendarMode(action, currentTarget) { - const value = +currentTarget.dataset.value; - switch (action) { - case ActionTypes$1.selectMonth: - this.optionsStore.viewDate.month = value; - break; - case ActionTypes$1.selectYear: - case ActionTypes$1.selectDecade: - this.optionsStore.viewDate.year = value; - break; - } - if (this.optionsStore.currentCalendarViewMode === - this.optionsStore.minimumCalendarViewMode) { - this.dates.setValue(this.optionsStore.viewDate, this.dates.lastPickedIndex); - if (!this.optionsStore.options.display.inline) { - this.display.hide(); - } - } - else { - this.display._showMode(-1); - } - } - handleToggle(currentTarget) { - if (currentTarget.getAttribute('title') === - this.optionsStore.options.localization.selectDate) { - currentTarget.setAttribute('title', this.optionsStore.options.localization.selectTime); - currentTarget.innerHTML = this.display._iconTag(this.optionsStore.options.display.icons.time).outerHTML; - this.display._updateCalendarHeader(); - this.optionsStore.refreshCurrentView(); - } - else { - currentTarget.setAttribute('title', this.optionsStore.options.localization.selectDate); - currentTarget.innerHTML = this.display._iconTag(this.optionsStore.options.display.icons.date).outerHTML; - if (this.display._hasTime) { - this.handleShowClockContainers(ActionTypes$1.showClock); - this.display._update('clock'); - } - } - this.display.widget - .querySelectorAll(`.${Namespace.css.dateContainer}, .${Namespace.css.timeContainer}`) - .forEach((htmlElement) => Collapse.toggle(htmlElement)); - this._eventEmitters.viewUpdate.emit(); - } - handleSelectDay(currentTarget) { - const day = this.optionsStore.viewDate.clone; - if (currentTarget.classList.contains(Namespace.css.old)) { - day.manipulate(-1, Unit.month); - } - if (currentTarget.classList.contains(Namespace.css.new)) { - day.manipulate(1, Unit.month); - } - day.date = +currentTarget.dataset.day; - if (this.optionsStore.options.dateRange) - this.handleDateRange(day); - else if (this.optionsStore.options.multipleDates) { - this.handleMultiDate(day); - } - else { - this.dates.setValue(day, this.dates.lastPickedIndex); - } - if (!this.display._hasTime && - !this.optionsStore.options.display.keepOpen && - !this.optionsStore.options.display.inline && - !this.optionsStore.options.multipleDates && - !this.optionsStore.options.dateRange) { - this.display.hide(); - } - } - handleMultiDate(day) { - let index = this.dates.pickedIndex(day, Unit.date); - console.log(index); - if (index !== -1) { - this.dates.setValue(null, index); //deselect multi-date - } - else { - index = this.dates.lastPickedIndex + 1; - if (this.dates.picked.length === 0) - index = 0; - this.dates.setValue(day, index); - } - } - handleDateRange(day) { - switch (this.dates.picked.length) { - case 2: { - this.dates.clear(); - break; - } - case 1: { - const other = this.dates.picked[0]; - if (day.getTime() === other.getTime()) { - this.dates.clear(); - break; - } - if (day.isBefore(other)) { - this.dates.setValue(day, 0); - this.dates.setValue(other, 1); - return; - } - else { - this.dates.setValue(day, 1); - return; - } - } - } - this.dates.setValue(day, 0); - } -} - -/** - * A robust and powerful date/time picker component. - */ -class TempusDominus { - constructor(element, options = {}) { - //eslint-disable-next-line @typescript-eslint/no-explicit-any - this._subscribers = {}; - this._isDisabled = false; - /** - * Event for when the input field changes. This is a class level method so there's - * something for the remove listener function. - * @private - */ - //eslint-disable-next-line @typescript-eslint/no-explicit-any - this._inputChangeEvent = (event) => { - const internallyTriggered = event?.detail; - if (internallyTriggered) - return; - const setViewDate = () => { - if (this.dates.lastPicked) - this.optionsStore.viewDate = this.dates.lastPicked.clone; - }; - const value = this.optionsStore.input.value; - if (this.optionsStore.options.multipleDates) { - try { - const valueSplit = value.split(this.optionsStore.options.multipleDatesSeparator); - for (let i = 0; i < valueSplit.length; i++) { - this.dates.setFromInput(valueSplit[i], i); - } - setViewDate(); - } - catch { - console.warn('TD: Something went wrong trying to set the multipleDates values from the input field.'); - } - } - else { - this.dates.setFromInput(value, 0); - setViewDate(); - } - }; - /** - * Event for when the toggle is clicked. This is a class level method so there's - * something for the remove listener function. - * @private - */ - this._toggleClickEvent = () => { - if (this.optionsStore.element?.disabled || - this.optionsStore.input?.disabled) - return; - this.toggle(); - }; - setupServiceLocator(); - this._eventEmitters = serviceLocator.locate(EventEmitters); - this.optionsStore = serviceLocator.locate(OptionsStore); - this.display = serviceLocator.locate(Display); - this.dates = serviceLocator.locate(Dates); - this.actions = serviceLocator.locate(Actions); - if (!element) { - Namespace.errorMessages.mustProvideElement(); - } - this.optionsStore.element = element; - this._initializeOptions(options, DefaultOptions, true); - this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization); - this.optionsStore.unset = true; - this._initializeInput(); - this._initializeToggle(); - if (this.optionsStore.options.display.inline) - this.display.show(); - this._eventEmitters.triggerEvent.subscribe((e) => { - this._triggerEvent(e); - }); - this._eventEmitters.viewUpdate.subscribe(() => { - this._viewUpdate(); - }); - this._eventEmitters.updateViewDate.subscribe((dateTime) => { - this.viewDate = dateTime; - }); - } - get viewDate() { - return this.optionsStore.viewDate; - } - set viewDate(value) { - this.optionsStore.viewDate = value; - this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization); - this.display._update(this.optionsStore.currentView === 'clock' ? 'clock' : 'calendar'); - } - // noinspection JSUnusedGlobalSymbols - /** - * Update the picker options. If `reset` is provide `options` will be merged with DefaultOptions instead. - * @param options - * @param reset - * @public - */ - updateOptions(options, reset = false) { - if (reset) - this._initializeOptions(options, DefaultOptions); - else - this._initializeOptions(options, this.optionsStore.options); - this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization); - this.display.refreshCurrentView(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Toggles the picker open or closed. If the picker is disabled, nothing will happen. - * @public - */ - toggle() { - if (this._isDisabled) - return; - this.display.toggle(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Shows the picker unless the picker is disabled. - * @public - */ - show() { - if (this._isDisabled) - return; - this.display.show(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Hides the picker unless the picker is disabled. - * @public - */ - hide() { - this.display.hide(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Disables the picker and the target input field. - * @public - */ - disable() { - this._isDisabled = true; - // todo this might be undesired. If a dev disables the input field to - // only allow using the picker, this will break that. - this.optionsStore.input?.setAttribute('disabled', 'disabled'); - this.display.hide(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Enables the picker and the target input field. - * @public - */ - enable() { - this._isDisabled = false; - this.optionsStore.input?.removeAttribute('disabled'); - } - // noinspection JSUnusedGlobalSymbols - /** - * Clears all the selected dates - * @public - */ - clear() { - this.optionsStore.input.value = ''; - this.dates.clear(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Allows for a direct subscription to picker events, without having to use addEventListener on the element. - * @param eventTypes See Namespace.Events - * @param callbacks Function to call when event is triggered - * @public - */ - subscribe(eventTypes, callbacks //eslint-disable-line @typescript-eslint/no-explicit-any - ) { - if (typeof eventTypes === 'string') { - eventTypes = [eventTypes]; - } - let callBackArray; //eslint-disable-line @typescript-eslint/no-explicit-any - if (!Array.isArray(callbacks)) { - callBackArray = [callbacks]; - } - else { - callBackArray = callbacks; - } - if (eventTypes.length !== callBackArray.length) { - Namespace.errorMessages.subscribeMismatch(); - } - const returnArray = []; - for (let i = 0; i < eventTypes.length; i++) { - const eventType = eventTypes[i]; - if (!Array.isArray(this._subscribers[eventType])) { - this._subscribers[eventType] = []; - } - this._subscribers[eventType].push(callBackArray[i]); - returnArray.push({ - unsubscribe: this._unsubscribe.bind(this, eventType, this._subscribers[eventType].length - 1), - }); - if (eventTypes.length === 1) { - return returnArray[0]; - } - } - return returnArray; - } - // noinspection JSUnusedGlobalSymbols - /** - * Hides the picker and removes event listeners - */ - dispose() { - this.display.hide(); - // this will clear the document click event listener - this.display._dispose(); - this._eventEmitters.destroy(); - this.optionsStore.input?.removeEventListener('change', this._inputChangeEvent); - if (this.optionsStore.options.allowInputToggle) { - this.optionsStore.input?.removeEventListener('click', this._toggleClickEvent); - this.optionsStore.input?.removeEventListener('focus', this._toggleClickEvent); - } - this._toggle?.removeEventListener('click', this._toggleClickEvent); - this._subscribers = {}; - } - /** - * Updates the options to use the provided language. - * THe language file must be loaded first. - * @param language - */ - locale(language) { - const asked = loadedLocales[language]; - if (!asked) - return; - this.updateOptions({ - localization: asked, - }); - } - /** - * Triggers an event like ChangeEvent when the picker has updated the value - * of a selected date. - * @param event Accepts a BaseEvent object. - * @private - */ - _triggerEvent(event) { - event.viewMode = this.optionsStore.currentView; - const isChangeEvent = event.type === Namespace.events.change; - if (isChangeEvent) { - const { date, oldDate, isClear } = event; - if ((date && oldDate && date.isSame(oldDate)) || - (!isClear && !date && !oldDate)) { - return; - } - this._handleAfterChangeEvent(event); - this.optionsStore.input?.dispatchEvent( - //eslint-disable-next-line @typescript-eslint/no-explicit-any - new CustomEvent('change', { detail: event })); - } - this.optionsStore.element.dispatchEvent( - //eslint-disable-next-line @typescript-eslint/no-explicit-any - new CustomEvent(event.type, { detail: event })); - //eslint-disable-next-line @typescript-eslint/no-explicit-any - if (window.jQuery) { - //eslint-disable-next-line @typescript-eslint/no-explicit-any - const $ = window.jQuery; - if (isChangeEvent && this.optionsStore.input) { - $(this.optionsStore.input).trigger(event); - } - else { - $(this.optionsStore.element).trigger(event); - } - } - this._publish(event); - } - _publish(event) { - // return if event is not subscribed - if (!Array.isArray(this._subscribers[event.type])) { - return; - } - // Trigger callback for each subscriber - this._subscribers[event.type].forEach((callback) => { - callback(event); - }); - } - /** - * Fires a ViewUpdate event when, for example, the month view is changed. - * @private - */ - _viewUpdate() { - this._triggerEvent({ - type: Namespace.events.update, - viewDate: this.optionsStore.viewDate.clone, - }); - } - _unsubscribe(eventName, index) { - this._subscribers[eventName].splice(index, 1); - } - /** - * Merges two Option objects together and validates options type - * @param config new Options - * @param mergeTo Options to merge into - * @param includeDataset When true, the elements data-td attributes will be included in the - * @private - */ - _initializeOptions(config, mergeTo, includeDataset = false) { - let newConfig = OptionConverter.deepCopy(config); - newConfig = OptionConverter._mergeOptions(newConfig, mergeTo); - if (includeDataset) - newConfig = OptionConverter._dataToOptions(this.optionsStore.element, newConfig); - OptionConverter._validateConflicts(newConfig); - newConfig.viewDate = newConfig.viewDate.setLocalization(newConfig.localization); - if (!this.optionsStore.viewDate.isSame(newConfig.viewDate)) { - this.optionsStore.viewDate = newConfig.viewDate; - } - /** - * Sets the minimum view allowed by the picker. For example the case of only - * allowing year and month to be selected but not date. - */ - if (newConfig.display.components.year) { - this.optionsStore.minimumCalendarViewMode = 2; - } - if (newConfig.display.components.month) { - this.optionsStore.minimumCalendarViewMode = 1; - } - if (newConfig.display.components.date) { - this.optionsStore.minimumCalendarViewMode = 0; - } - this.optionsStore.currentCalendarViewMode = Math.max(this.optionsStore.minimumCalendarViewMode, this.optionsStore.currentCalendarViewMode); - // Update view mode if needed - if (CalendarModes[this.optionsStore.currentCalendarViewMode].name !== - newConfig.display.viewMode) { - this.optionsStore.currentCalendarViewMode = Math.max(CalendarModes.findIndex((x) => x.name === newConfig.display.viewMode), this.optionsStore.minimumCalendarViewMode); - } - if (this.display?.isVisible) { - this.display._update('all'); - } - if (newConfig.display.components.useTwentyfourHour && - newConfig.localization.hourCycle === undefined) - newConfig.localization.hourCycle = 'h24'; - else if (newConfig.localization.hourCycle === undefined) { - newConfig.localization.hourCycle = guessHourCycle(newConfig.localization.locale); - } - this.optionsStore.options = newConfig; - } - /** - * Checks if an input field is being used, attempts to locate one and sets an - * event listener if found. - * @private - */ - _initializeInput() { - if (this.optionsStore.element.tagName == 'INPUT') { - this.optionsStore.input = this.optionsStore.element; - } - else { - const query = this.optionsStore.element.dataset.tdTargetInput; - if (query == undefined || query == 'nearest') { - this.optionsStore.input = - this.optionsStore.element.querySelector('input'); - } - else { - this.optionsStore.input = - this.optionsStore.element.querySelector(query); - } - } - if (!this.optionsStore.input) - return; - if (!this.optionsStore.input.value && this.optionsStore.options.defaultDate) - this.optionsStore.input.value = this.dates.formatInput(this.optionsStore.options.defaultDate); - this.optionsStore.input.addEventListener('change', this._inputChangeEvent); - if (this.optionsStore.options.allowInputToggle) { - this.optionsStore.input.addEventListener('click', this._toggleClickEvent); - this.optionsStore.input.addEventListener('focus', this._toggleClickEvent); - } - if (this.optionsStore.input.value) { - this._inputChangeEvent(); - } - } - /** - * Attempts to locate a toggle for the picker and sets an event listener - * @private - */ - _initializeToggle() { - if (this.optionsStore.options.display.inline) - return; - let query = this.optionsStore.element.dataset.tdTargetToggle; - if (query == 'nearest') { - query = '[data-td-toggle="datetimepicker"]'; - } - this._toggle = - query == undefined - ? this.optionsStore.element - : this.optionsStore.element.querySelector(query); - this._toggle.addEventListener('click', this._toggleClickEvent); - } - /** - * If the option is enabled this will render the clock view after a date pick. - * @param e change event - * @private - */ - _handleAfterChangeEvent(e) { - if ( - // options is disabled - !this.optionsStore.options.promptTimeOnDateChange || - this.optionsStore.options.multipleDates || - this.optionsStore.options.display.inline || - this.optionsStore.options.display.sideBySide || - // time is disabled - !this.display._hasTime || - // clock component is already showing - this.display.widget - ?.getElementsByClassName(Namespace.css.show)[0] - .classList.contains(Namespace.css.timeContainer)) - return; - // First time ever. If useCurrent option is set to true (default), do nothing - // because the first date is selected automatically. - // or date didn't change (time did) or date changed because time did. - if ((!e.oldDate && this.optionsStore.options.useCurrent) || - (e.oldDate && e.date?.isSame(e.oldDate))) { - return; - } - clearTimeout(this._currentPromptTimeTimeout); - this._currentPromptTimeTimeout = setTimeout(() => { - if (this.display.widget) { - this._eventEmitters.action.emit({ - e: { - currentTarget: this.display.widget.querySelector(`.${Namespace.css.switch}`), - }, - action: ActionTypes$1.togglePicker, - }); - } - }, this.optionsStore.options.promptTimeOnDateChangeTransitionDelay); - } -} -/** - * Whenever a locale is loaded via a plugin then store it here based on the - * locale name. E.g. loadedLocales['ru'] - */ -const loadedLocales = {}; -// noinspection JSUnusedGlobalSymbols -/** - * Called from a locale plugin. - * @param l locale object for localization options - */ -const loadLocale = (l) => { - if (loadedLocales[l.name]) - return; - loadedLocales[l.name] = l.localization; -}; -/** - * A sets the global localization options to the provided locale name. - * `loadLocale` MUST be called first. - * @param l - */ -const locale = (l) => { - const asked = loadedLocales[l]; - if (!asked) - return; - DefaultOptions.localization = asked; -}; -// noinspection JSUnusedGlobalSymbols -/** - * Called from a plugin to extend or override picker defaults. - * @param plugin - * @param option - */ -const extend = function (plugin, option = undefined) { - if (!plugin) - return tempusDominus; - if (!plugin.installed) { - // install plugin only once - plugin(option, { TempusDominus, Dates, Display, DateTime, Namespace }, tempusDominus); - plugin.installed = true; - } - return tempusDominus; -}; -const version = '6.7.10'; -const tempusDominus = { - TempusDominus, - extend, - loadLocale, - locale, - Namespace, - DefaultOptions, - DateTime, - Unit, - version, - DefaultEnLocalization, -}; - -export { DateTime, DefaultEnLocalization, DefaultOptions, Namespace, TempusDominus, Unit, extend, loadLocale, locale, version }; -//# sourceMappingURL=tempus-dominus.esm.js.map diff --git a/dist/js/tempus-dominus.esm.js.map b/dist/js/tempus-dominus.esm.js.map deleted file mode 100644 index 3dde9c996..000000000 --- a/dist/js/tempus-dominus.esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tempus-dominus.esm.js","sources":["../../src/js/utilities/errors.ts","../../src/js/utilities/namespace.ts","../../src/js/utilities/default-format-localization.ts","../../src/js/datetime.ts","../../src/js/utilities/service-locator.ts","../../src/js/utilities/calendar-modes.ts","../../src/js/utilities/optionsStore.ts","../../src/js/validation.ts","../../src/js/utilities/event-emitter.ts","../../src/js/utilities/default-options.ts","../../src/js/utilities/typeChecker.ts","../../src/js/utilities/optionProcessor.ts","../../src/js/utilities/optionConverter.ts","../../src/js/dates.ts","../../src/js/utilities/action-types.ts","../../src/js/display/calendar/date-display.ts","../../src/js/display/calendar/month-display.ts","../../src/js/display/calendar/year-display.ts","../../src/js/display/calendar/decade-display.ts","../../src/js/display/time/time-display.ts","../../src/js/display/time/hour-display.ts","../../src/js/display/time/minute-display.ts","../../src/js/display/time/second-display.ts","../../src/js/display/collapse.ts","../../src/js/display/index.ts","../../src/js/actions.ts","../../src/js/tempus-dominus.ts"],"sourcesContent":["export class TdError extends Error {\n code: number;\n}\n\nexport class ErrorMessages {\n private base = 'TD:';\n\n //#region out to console\n\n /**\n * Throws an error indicating that a key in the options object is invalid.\n * @param optionName\n */\n unexpectedOption(optionName: string) {\n const error = new TdError(\n `${this.base} Unexpected option: ${optionName} does not match a known option.`\n );\n error.code = 1;\n throw error;\n }\n\n /**\n * Throws an error indicating that one more keys in the options object is invalid.\n * @param optionName\n */\n unexpectedOptions(optionName: string[]) {\n const error = new TdError(`${this.base}: ${optionName.join(', ')}`);\n error.code = 1;\n throw error;\n }\n\n /**\n * Throws an error when an option is provide an unsupported value.\n * For example a value of 'cheese' for toolbarPlacement which only supports\n * 'top', 'bottom', 'default'.\n * @param optionName\n * @param badValue\n * @param validOptions\n */\n unexpectedOptionValue(\n optionName: string,\n badValue: string,\n validOptions: string[]\n ) {\n const error = new TdError(\n `${\n this.base\n } Unexpected option value: ${optionName} does not accept a value of \"${badValue}\". Valid values are: ${validOptions.join(\n ', '\n )}`\n );\n error.code = 2;\n throw error;\n }\n\n /**\n * Throws an error when an option value is the wrong type.\n * For example a string value was provided to multipleDates which only\n * supports true or false.\n * @param optionName\n * @param badType\n * @param expectedType\n */\n typeMismatch(optionName: string, badType: string, expectedType: string) {\n const error = new TdError(\n `${this.base} Mismatch types: ${optionName} has a type of ${badType} instead of the required ${expectedType}`\n );\n error.code = 3;\n throw error;\n }\n\n /**\n * Throws an error when an option value is outside of the expected range.\n * For example restrictions.daysOfWeekDisabled excepts a value between 0 and 6.\n * @param optionName\n * @param lower\n * @param upper\n */\n numbersOutOfRange(optionName: string, lower: number, upper: number) {\n const error = new TdError(\n `${this.base} ${optionName} expected an array of number between ${lower} and ${upper}.`\n );\n error.code = 4;\n throw error;\n }\n\n /**\n * Throws an error when a value for a date options couldn't be parsed. Either\n * the option was an invalid string or an invalid Date object.\n * @param optionName\n * @param date\n * @param soft If true, logs a warning instead of an error.\n */\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n failedToParseDate(optionName: string, date: any, soft = false) {\n const error = new TdError(\n `${this.base} Could not correctly parse \"${date}\" to a date for ${optionName}.`\n );\n error.code = 5;\n if (!soft) throw error;\n console.warn(error);\n }\n\n /**\n * Throws when an element to attach to was not provided in the constructor.\n */\n mustProvideElement() {\n const error = new TdError(`${this.base} No element was provided.`);\n error.code = 6;\n throw error;\n }\n\n /**\n * Throws if providing an array for the events to subscribe method doesn't have\n * the same number of callbacks. E.g., subscribe([1,2], [1])\n */\n subscribeMismatch() {\n const error = new TdError(\n `${this.base} The subscribed events does not match the number of callbacks`\n );\n error.code = 7;\n throw error;\n }\n\n /**\n * Throws if the configuration has conflicting rules e.g. minDate is after maxDate\n */\n conflictingConfiguration(message?: string) {\n const error = new TdError(\n `${this.base} A configuration value conflicts with another rule. ${message}`\n );\n error.code = 8;\n throw error;\n }\n\n /**\n * customDateFormat errors\n */\n customDateFormatError(message?: string) {\n const error = new TdError(`${this.base} Custom Date Format: ${message}`);\n error.code = 9;\n throw error;\n }\n\n /**\n * Logs a warning if a date option value is provided as a string, instead of\n * a date/datetime object.\n */\n dateString() {\n console.warn(\n `${this.base} Using a string for date options is not recommended unless you specify an ISO string or use the customDateFormat plugin.`\n );\n }\n\n deprecatedWarning(message: string, remediation?: string) {\n console.warn(\n `${this.base} Warning ${message} is deprecated and will be removed in a future version. ${remediation}`\n );\n }\n\n throwError(message) {\n const error = new TdError(`${this.base} ${message}`);\n error.code = 9;\n throw error;\n }\n\n //#endregion\n\n //#region used with notify.error\n\n /**\n * Used with an Error Event type if the user selects a date that\n * fails restriction validation.\n */\n failedToSetInvalidDate = 'Failed to set invalid date';\n\n /**\n * Used with an Error Event type when a user changes the value of the\n * input field directly, and does not provide a valid date.\n */\n failedToParseInput = 'Failed parse input field';\n\n //#endregion\n}\n","import { ErrorMessages } from './errors';\n// this is not the way I want this to stay but nested classes seemed to blown up once its compiled.\nconst NAME = 'tempus-dominus',\n dataKey = 'td';\n\n/**\n * Events\n */\nclass Events {\n key = `.${dataKey}`;\n\n /**\n * Change event. Fired when the user selects a date.\n * See also EventTypes.ChangeEvent\n */\n change = `change${this.key}`;\n\n /**\n * Emit when the view changes for example from month view to the year view.\n * See also EventTypes.ViewUpdateEvent\n */\n update = `update${this.key}`;\n\n /**\n * Emits when a selected date or value from the input field fails to meet the provided validation rules.\n * See also EventTypes.FailEvent\n */\n error = `error${this.key}`;\n\n /**\n * Show event\n * @event Events#show\n */\n show = `show${this.key}`;\n\n /**\n * Hide event\n * @event Events#hide\n */\n hide = `hide${this.key}`;\n\n // blur and focus are used in the jQuery provider but are otherwise unused.\n // keyup/down will be used later for keybinding options\n\n blur = `blur${this.key}`;\n focus = `focus${this.key}`;\n keyup = `keyup${this.key}`;\n keydown = `keydown${this.key}`;\n}\n\nclass Css {\n /**\n * The outer element for the widget.\n */\n widget = `${NAME}-widget`;\n\n /**\n * Hold the previous, next and switcher divs\n */\n calendarHeader = 'calendar-header';\n\n /**\n * The element for the action to change the calendar view. E.g. month -> year.\n */\n switch = 'picker-switch';\n\n /**\n * The elements for all the toolbar options\n */\n toolbar = 'toolbar';\n\n /**\n * Disables the hover and rounding affect.\n */\n noHighlight = 'no-highlight';\n\n /**\n * Applied to the widget element when the side by side option is in use.\n */\n sideBySide = 'timepicker-sbs';\n\n /**\n * The element for the action to change the calendar view, e.g. August -> July\n */\n previous = 'previous';\n\n /**\n * The element for the action to change the calendar view, e.g. August -> September\n */\n next = 'next';\n\n /**\n * Applied to any action that would violate any restriction options. ALso applied\n * to an input field if the disabled function is called.\n */\n disabled = 'disabled';\n\n /**\n * Applied to any date that is less than requested view,\n * e.g. the last day of the previous month.\n */\n old = 'old';\n\n /**\n * Applied to any date that is greater than of requested view,\n * e.g. the last day of the previous month.\n */\n new = 'new';\n\n /**\n * Applied to any date that is currently selected.\n */\n active = 'active';\n\n //#region date element\n\n /**\n * The outer element for the calendar view.\n */\n dateContainer = 'date-container';\n\n /**\n * The outer element for the decades view.\n */\n decadesContainer = `${this.dateContainer}-decades`;\n\n /**\n * Applied to elements within the decade container, e.g. 2020, 2030\n */\n decade = 'decade';\n\n /**\n * The outer element for the years view.\n */\n yearsContainer = `${this.dateContainer}-years`;\n\n /**\n * Applied to elements within the years container, e.g. 2021, 2021\n */\n year = 'year';\n\n /**\n * The outer element for the month view.\n */\n monthsContainer = `${this.dateContainer}-months`;\n\n /**\n * Applied to elements within the month container, e.g. January, February\n */\n month = 'month';\n\n /**\n * The outer element for the calendar view.\n */\n daysContainer = `${this.dateContainer}-days`;\n\n /**\n * Applied to elements within the day container, e.g. 1, 2..31\n */\n day = 'day';\n\n /**\n * If display.calendarWeeks is enabled, a column displaying the week of year\n * is shown. This class is applied to each cell in that column.\n */\n calendarWeeks = 'cw';\n\n /**\n * Applied to the first row of the calendar view, e.g. Sunday, Monday\n */\n dayOfTheWeek = 'dow';\n\n /**\n * Applied to the current date on the calendar view.\n */\n today = 'today';\n\n /**\n * Applied to the locale's weekend dates on the calendar view, e.g. Sunday, Saturday\n */\n weekend = 'weekend';\n\n rangeIn = 'range-in';\n rangeStart = 'range-start';\n rangeEnd = 'range-end';\n\n //#endregion\n\n //#region time element\n\n /**\n * The outer element for all time related elements.\n */\n timeContainer = 'time-container';\n\n /**\n * Applied the separator columns between time elements, e.g. hour *:* minute *:* second\n */\n separator = 'separator';\n\n /**\n * The outer element for the clock view.\n */\n clockContainer = `${this.timeContainer}-clock`;\n\n /**\n * The outer element for the hours selection view.\n */\n hourContainer = `${this.timeContainer}-hour`;\n\n /**\n * The outer element for the minutes selection view.\n */\n minuteContainer = `${this.timeContainer}-minute`;\n\n /**\n * The outer element for the seconds selection view.\n */\n secondContainer = `${this.timeContainer}-second`;\n\n /**\n * Applied to each element in the hours selection view.\n */\n hour = 'hour';\n\n /**\n * Applied to each element in the minutes selection view.\n */\n minute = 'minute';\n\n /**\n * Applied to each element in the seconds selection view.\n */\n second = 'second';\n\n /**\n * Applied AM/PM toggle button.\n */\n toggleMeridiem = 'toggleMeridiem';\n\n //#endregion\n\n //#region collapse\n\n /**\n * Applied the element of the current view mode, e.g. calendar or clock.\n */\n show = 'show';\n\n /**\n * Applied to the currently showing view mode during a transition\n * between calendar and clock views\n */\n collapsing = 'td-collapsing';\n\n /**\n * Applied to the currently hidden view mode.\n */\n collapse = 'td-collapse';\n\n //#endregion\n\n /**\n * Applied to the widget when the option display.inline is enabled.\n */\n inline = 'inline';\n\n /**\n * Applied to the widget when the option display.theme is light.\n */\n lightTheme = 'light';\n\n /**\n * Applied to the widget when the option display.theme is dark.\n */\n darkTheme = 'dark';\n\n /**\n * Used for detecting if the system color preference is dark mode\n */\n isDarkPreferredQuery = '(prefers-color-scheme: dark)';\n}\n\nexport default class Namespace {\n static NAME = NAME;\n // noinspection JSUnusedGlobalSymbols\n static dataKey = dataKey;\n\n static events = new Events();\n\n static css = new Css();\n\n static errorMessages = new ErrorMessages();\n}\n","import { FormatLocalization } from './options';\n\nconst DefaultFormatLocalization: FormatLocalization = {\n dateFormats: {\n LTS: 'h:mm:ss T',\n LT: 'h:mm T',\n L: 'MM/dd/yyyy',\n LL: 'MMMM d, yyyy',\n LLL: 'MMMM d, yyyy h:mm T',\n LLLL: 'dddd, MMMM d, yyyy h:mm T',\n },\n format: 'L LT',\n locale: 'default',\n hourCycle: undefined,\n ordinal: (n) => {\n const s = ['th', 'st', 'nd', 'rd'];\n const v = n % 100;\n return `[${n}${s[(v - 20) % 10] || s[v] || s[0]}]`;\n },\n};\n\nexport default { ...DefaultFormatLocalization };\n","import { FormatLocalization } from './utilities/options';\nimport Namespace from './utilities/namespace';\nimport DefaultFormatLocalization from './utilities/default-format-localization';\n\ntype parsedTime = {\n year?: number;\n month?: number;\n day?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n zone?: {\n offset: number;\n };\n};\n\nexport enum Unit {\n seconds = 'seconds',\n minutes = 'minutes',\n hours = 'hours',\n date = 'date',\n month = 'month',\n year = 'year',\n}\n\nconst twoDigitTemplate = {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n};\n\nexport interface DateTimeFormatOptions extends Intl.DateTimeFormatOptions {\n timeStyle?: 'short' | 'medium' | 'long';\n dateStyle?: 'short' | 'medium' | 'long' | 'full';\n numberingSystem?: string;\n}\n\n/**\n * Returns an Intl format object based on the provided object\n * @param unit\n */\nexport const getFormatByUnit = (unit: Unit): object => {\n switch (unit) {\n case 'date':\n return { dateStyle: 'short' };\n case 'month':\n return {\n month: 'numeric',\n year: 'numeric',\n };\n case 'year':\n return { year: 'numeric' };\n }\n};\n\n/**\n * Attempts to guess the hour cycle of the given local\n * @param locale\n */\nexport const guessHourCycle = (locale: string): Intl.LocaleHourCycleKey => {\n if (!locale) return 'h12';\n\n // noinspection SpellCheckingInspection\n const template = {\n hour: '2-digit',\n minute: '2-digit',\n numberingSystem: 'latn',\n };\n\n const dt = new DateTime().setLocalization({ locale });\n dt.hours = 0;\n\n const start = dt.parts(undefined, template).hour;\n\n //midnight is 12 so en-US style 12 AM\n if (start === '12') return 'h12';\n //midnight is 24 is from 00-24\n if (start === '24') return 'h24';\n\n dt.hours = 23;\n const end = dt.parts(undefined, template).hour;\n\n //if midnight is 00 and hour 23 is 11 then\n if (start === '00' && end === '11') return 'h11';\n\n if (start === '00' && end === '23') return 'h23';\n\n console.warn(\n `couldn't determine hour cycle for ${locale}. start: ${start}. end: ${end}`\n );\n\n return undefined;\n};\n\n/**\n * For the most part this object behaves exactly the same way\n * as the native Date object with a little extra spice.\n */\nexport class DateTime extends Date {\n localization: FormatLocalization = DefaultFormatLocalization;\n\n /**\n * Chainable way to set the {@link locale}\n * @param value\n * @deprecated use setLocalization with a FormatLocalization object instead\n */\n setLocale(value: string): this {\n if (!this.localization) {\n this.localization = DefaultFormatLocalization;\n this.localization.locale = value;\n }\n return this;\n }\n\n /**\n * Chainable way to set the {@link localization}\n * @param value\n */\n setLocalization(value: FormatLocalization): this {\n this.localization = value;\n return this;\n }\n\n /**\n * Converts a plain JS date object to a DateTime object.\n * Doing this allows access to format, etc.\n * @param date\n * @param locale this parameter is deprecated. Use formatLocalization instead.\n * @param formatLocalization\n */\n static convert(\n date: Date,\n locale = 'default',\n formatLocalization: FormatLocalization = undefined\n ): DateTime {\n if (!date) throw new Error(`A date is required`);\n\n if (!formatLocalization) {\n formatLocalization = DefaultFormatLocalization;\n formatLocalization.locale = locale;\n }\n\n return new DateTime(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ).setLocalization(formatLocalization);\n }\n\n /**\n * Native date manipulations are not pure functions. This function creates a duplicate of the DateTime object.\n */\n get clone() {\n return new DateTime(\n this.year,\n this.month,\n this.date,\n this.hours,\n this.minutes,\n this.seconds,\n this.getMilliseconds()\n ).setLocalization(this.localization);\n }\n\n static isValid(d): boolean {\n if (d === undefined || JSON.stringify(d) === 'null') return false;\n if (d.constructor.name === DateTime.name) return true;\n return false;\n }\n\n /**\n * Sets the current date to the start of the {@link unit} provided\n * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).startOf('month')\n * would return April 1, 2021, 12:00:00.000 AM (midnight)\n * @param unit\n * @param startOfTheWeek Allows for the changing the start of the week.\n */\n startOf(unit: Unit | 'weekDay', startOfTheWeek = 0): this {\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n switch (unit) {\n case 'seconds':\n this.setMilliseconds(0);\n break;\n case 'minutes':\n this.setSeconds(0, 0);\n break;\n case 'hours':\n this.setMinutes(0, 0, 0);\n break;\n case 'date':\n this.setHours(0, 0, 0, 0);\n break;\n case 'weekDay': {\n this.startOf(Unit.date);\n if (this.weekDay === startOfTheWeek) break;\n const goBack = (this.weekDay - startOfTheWeek + 7) % 7;\n this.manipulate(goBack * -1, Unit.date);\n break;\n }\n case 'month':\n this.startOf(Unit.date);\n this.setDate(1);\n break;\n case 'year':\n this.startOf(Unit.date);\n this.setMonth(0, 1);\n break;\n }\n return this;\n }\n\n /**\n * Sets the current date to the end of the {@link unit} provided\n * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).endOf('month')\n * would return April 30, 2021, 11:59:59.999 PM\n * @param unit\n * @param startOfTheWeek\n */\n endOf(unit: Unit | 'weekDay', startOfTheWeek = 0): this {\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n switch (unit) {\n case 'seconds':\n this.setMilliseconds(999);\n break;\n case 'minutes':\n this.setSeconds(59, 999);\n break;\n case 'hours':\n this.setMinutes(59, 59, 999);\n break;\n case 'date':\n this.setHours(23, 59, 59, 999);\n break;\n case 'weekDay': {\n this.endOf(Unit.date);\n const endOfWeek = 6 + startOfTheWeek;\n if (this.weekDay === endOfWeek) break;\n this.manipulate(endOfWeek - this.weekDay, Unit.date);\n break;\n }\n case 'month':\n this.endOf(Unit.date);\n this.manipulate(1, Unit.month);\n this.setDate(0);\n break;\n case 'year':\n this.endOf(Unit.date);\n this.setMonth(11, 31);\n break;\n }\n return this;\n }\n\n /**\n * Change a {@link unit} value. Value can be positive or negative\n * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).manipulate(1, 'month')\n * would return May 30, 2021, 11:45:32.984 AM\n * @param value A positive or negative number\n * @param unit\n */\n manipulate(value: number, unit: Unit): this {\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n this[unit] += value;\n return this;\n }\n\n /**\n * Return true if {@link compare} is before this date\n * @param compare The Date/DateTime to compare\n * @param unit If provided, uses {@link startOf} for\n * comparison.\n */\n isBefore(compare: DateTime, unit?: Unit): boolean {\n // If the comparisons is undefined, return false\n if (!DateTime.isValid(compare)) return false;\n\n if (!unit) return this.valueOf() < compare.valueOf();\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n return (\n this.clone.startOf(unit).valueOf() < compare.clone.startOf(unit).valueOf()\n );\n }\n\n /**\n * Return true if {@link compare} is after this date\n * @param compare The Date/DateTime to compare\n * @param unit If provided, uses {@link startOf} for\n * comparison.\n */\n isAfter(compare: DateTime, unit?: Unit): boolean {\n // If the comparisons is undefined, return false\n if (!DateTime.isValid(compare)) return false;\n\n if (!unit) return this.valueOf() > compare.valueOf();\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n return (\n this.clone.startOf(unit).valueOf() > compare.clone.startOf(unit).valueOf()\n );\n }\n\n /**\n * Return true if {@link compare} is same this date\n * @param compare The Date/DateTime to compare\n * @param unit If provided, uses {@link startOf} for\n * comparison.\n */\n isSame(compare: DateTime, unit?: Unit): boolean {\n // If the comparisons is undefined, return false\n if (!DateTime.isValid(compare)) return false;\n\n if (!unit) return this.valueOf() === compare.valueOf();\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n compare = DateTime.convert(compare);\n return (\n this.clone.startOf(unit).valueOf() === compare.startOf(unit).valueOf()\n );\n }\n\n /**\n * Check if this is between two other DateTimes, optionally looking at unit scale. The match is exclusive.\n * @param left\n * @param right\n * @param unit.\n * @param inclusivity. A [ indicates inclusion of a value. A ( indicates exclusion.\n * If the inclusivity parameter is used, both indicators must be passed.\n */\n isBetween(\n left: DateTime,\n right: DateTime,\n unit?: Unit,\n inclusivity: '()' | '[]' | '(]' | '[)' = '()'\n ): boolean {\n // If one of the comparisons is undefined, return false\n if (!DateTime.isValid(left) || !DateTime.isValid(right)) return false;\n // If a unit is provided and is not a valid property of the DateTime object, throw an error\n if (unit && this[unit] === undefined) {\n throw new Error(`Unit '${unit}' is not valid`);\n }\n\n const leftInclusivity = inclusivity[0] === '(';\n const rightInclusivity = inclusivity[1] === ')';\n\n const isLeftInRange = leftInclusivity\n ? this.isAfter(left, unit)\n : !this.isBefore(left, unit);\n const isRightInRange = rightInclusivity\n ? this.isBefore(right, unit)\n : !this.isAfter(right, unit);\n\n return isLeftInRange && isRightInRange;\n }\n\n /**\n * Returns flattened object of the date. Does not include literals\n * @param locale\n * @param template\n */\n parts(\n locale = this.localization.locale,\n template: Record = { dateStyle: 'full', timeStyle: 'long' }\n ): Record {\n const parts = {};\n new Intl.DateTimeFormat(locale, template)\n .formatToParts(this)\n .filter((x) => x.type !== 'literal')\n .forEach((x) => (parts[x.type] = x.value));\n return parts;\n }\n\n /**\n * Shortcut to Date.getSeconds()\n */\n get seconds(): number {\n return this.getSeconds();\n }\n\n /**\n * Shortcut to Date.setSeconds()\n */\n set seconds(value: number) {\n this.setSeconds(value);\n }\n\n /**\n * Returns two digit hours\n */\n get secondsFormatted(): string {\n return this.parts(undefined, twoDigitTemplate).second;\n }\n\n /**\n * Shortcut to Date.getMinutes()\n */\n get minutes(): number {\n return this.getMinutes();\n }\n\n /**\n * Shortcut to Date.setMinutes()\n */\n set minutes(value: number) {\n this.setMinutes(value);\n }\n\n /**\n * Returns two digit minutes\n */\n get minutesFormatted(): string {\n return this.parts(undefined, twoDigitTemplate).minute;\n }\n\n /**\n * Shortcut to Date.getHours()\n */\n get hours(): number {\n return this.getHours();\n }\n\n /**\n * Shortcut to Date.setHours()\n */\n set hours(value: number) {\n this.setHours(value);\n }\n\n /**\n * Returns two digit hour, e.g. 01...10\n * @param hourCycle Providing an hour cycle will change 00 to 24 depending on the given value.\n */\n getHoursFormatted(hourCycle: Intl.LocaleHourCycleKey = 'h12') {\n return this.parts(undefined, { ...twoDigitTemplate, hourCycle: hourCycle })\n .hour;\n }\n\n /**\n * Get the meridiem of the date. E.g. AM or PM.\n * If the {@link locale} provides a \"dayPeriod\" then this will be returned,\n * otherwise it will return AM or PM.\n * @param locale\n */\n meridiem(locale: string = this.localization.locale): string {\n return new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n hour12: true,\n })\n .formatToParts(this)\n .find((p) => p.type === 'dayPeriod')?.value;\n }\n\n /**\n * Shortcut to Date.getDate()\n */\n get date(): number {\n return this.getDate();\n }\n\n /**\n * Shortcut to Date.setDate()\n */\n set date(value: number) {\n this.setDate(value);\n }\n\n /**\n * Return two digit date\n */\n get dateFormatted(): string {\n return this.parts(undefined, twoDigitTemplate).day;\n }\n\n /**\n * Shortcut to Date.getDay()\n */\n get weekDay(): number {\n return this.getDay();\n }\n\n /**\n * Shortcut to Date.getMonth()\n */\n get month(): number {\n return this.getMonth();\n }\n\n /**\n * Shortcut to Date.setMonth()\n */\n set month(value: number) {\n const targetMonth = new Date(this.year, value + 1);\n targetMonth.setDate(0);\n const endOfMonth = targetMonth.getDate();\n if (this.date > endOfMonth) {\n this.date = endOfMonth;\n }\n this.setMonth(value);\n }\n\n /**\n * Return two digit, human expected month. E.g. January = 1, December = 12\n */\n get monthFormatted(): string {\n return this.parts(undefined, twoDigitTemplate).month;\n }\n\n /**\n * Shortcut to Date.getFullYear()\n */\n get year(): number {\n return this.getFullYear();\n }\n\n /**\n * Shortcut to Date.setFullYear()\n */\n set year(value: number) {\n this.setFullYear(value);\n }\n\n // borrowed a bunch of stuff from Luxon\n /**\n * Gets the week of the year\n */\n get week(): number {\n const ordinal = this.computeOrdinal(),\n weekday = this.getUTCDay();\n\n let weekNumber = Math.floor((ordinal - weekday + 10) / 7);\n\n if (weekNumber < 1) {\n weekNumber = this.weeksInWeekYear();\n } else if (weekNumber > this.weeksInWeekYear()) {\n weekNumber = 1;\n }\n\n return weekNumber;\n }\n\n /**\n * Returns the number of weeks in the year\n */\n weeksInWeekYear() {\n const p1 =\n (this.year +\n Math.floor(this.year / 4) -\n Math.floor(this.year / 100) +\n Math.floor(this.year / 400)) %\n 7,\n last = this.year - 1,\n p2 =\n (last +\n Math.floor(last / 4) -\n Math.floor(last / 100) +\n Math.floor(last / 400)) %\n 7;\n return p1 === 4 || p2 === 3 ? 53 : 52;\n }\n\n /**\n * Returns true or false depending on if the year is a leap year or not.\n */\n get isLeapYear() {\n return (\n this.year % 4 === 0 && (this.year % 100 !== 0 || this.year % 400 === 0)\n );\n }\n\n private computeOrdinal() {\n return (\n this.date +\n (this.isLeapYear ? this.leapLadder : this.nonLeapLadder)[this.month]\n );\n }\n\n private nonLeapLadder = [\n 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,\n ];\n private leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\n //#region CDF stuff\n\n private dateTimeRegex =\n //is regex cannot be simplified beyond what it already is\n /(\\[[^[\\]]*])|y{1,4}|M{1,4}|d{1,4}|H{1,2}|h{1,2}|t|T|m{1,2}|s{1,2}|f{3}/g; //NOSONAR\n\n private formattingTokens =\n /(\\[[^[\\]]*])|([-_:/.,()\\s]+)|(T|t|yyyy|yy?|MM?M?M?|Do|dd?|hh?|HH?|mm?|ss?)/g; //NOSONAR is regex cannot be simplified beyond what it already is\n\n /**\n * Returns a list of month values based on the current locale\n */\n private getAllMonths(\n format: '2-digit' | 'numeric' | 'long' | 'short' | 'narrow' = 'long'\n ) {\n const applyFormat = new Intl.DateTimeFormat(this.localization.locale, {\n month: format,\n }).format;\n return [...Array(12).keys()].map((m) => applyFormat(new Date(2021, m)));\n }\n\n /**\n * Replaces an expanded token set (e.g. LT/LTS)\n */\n private replaceTokens(formatStr, formats) {\n /***\n * _ => match\n * a => first capture group. Anything between [ and ]\n * b => second capture group\n */\n return formatStr.replace(\n /(\\[[^[\\]]*])|(LTS?|l{1,4}|L{1,4})/g,\n (_, a, b) => {\n const B = b && b.toUpperCase();\n return a || formats[B] || DefaultFormatLocalization.dateFormats[B];\n }\n );\n }\n\n private match2 = /\\d\\d/; // 00 - 99\n private match3 = /\\d{3}/; // 000 - 999\n private match4 = /\\d{4}/; // 0000 - 9999\n private match1to2 = /\\d\\d?/; // 0 - 99\n private matchSigned = /[+-]?\\d+/; // -inf - inf\n private matchOffset = /[+-]\\d\\d:?(\\d\\d)?|Z/; // +00:00 -00:00 +0000 or -0000 +00 or Z\n private matchWord = /[^\\d_:/,\\-()\\s]+/; // Word\n\n private parseTwoDigitYear(input) {\n input = +input;\n return input + (input > 68 ? 1900 : 2000);\n }\n\n private offsetFromString(string) {\n if (!string) return 0;\n if (string === 'Z') return 0;\n const [first, second, third] = string.match(/([+-]|\\d\\d)/g);\n const minutes = +(second * 60) + (+third || 0);\n const signed = first === '+' ? -minutes : minutes;\n return minutes === 0 ? 0 : signed; // eslint-disable-line no-nested-ternary\n }\n\n /**\n * z = -4, zz = -04, zzz = -0400\n * @param date\n * @param style\n * @private\n */\n private zoneInformation(date: DateTime, style: 'z' | 'zz' | 'zzz') {\n let name = date\n .parts(this.localization.locale, { timeZoneName: 'longOffset' })\n .timeZoneName.replace('GMT', '')\n .replace(':', '');\n\n const negative = name.includes('-');\n\n name = name.replace('-', '');\n\n if (style === 'z') name = name.substring(1, 2);\n else if (style === 'zz') name = name.substring(0, 2);\n\n return `${negative ? '-' : ''}${name}`;\n }\n\n private zoneExpressions = [\n this.matchOffset,\n (obj, input) => {\n obj.offset = this.offsetFromString(input);\n },\n ];\n\n private addInput(property) {\n return (time, input) => {\n time[property] = +input;\n };\n }\n\n private meridiemMatch(input) {\n const meridiem = new Intl.DateTimeFormat(this.localization.locale, {\n hour: 'numeric',\n hour12: true,\n })\n .formatToParts(new Date(2022, 3, 4, 13))\n .find((p) => p.type === 'dayPeriod')?.value;\n\n return input.toLowerCase() === meridiem.toLowerCase();\n }\n\n private expressions = {\n t: [\n this.matchWord,\n (ojb, input) => {\n ojb.afternoon = this.meridiemMatch(input);\n },\n ],\n T: [\n this.matchWord,\n (ojb, input) => {\n ojb.afternoon = this.meridiemMatch(input);\n },\n ],\n fff: [\n this.match3,\n (ojb, input) => {\n ojb.milliseconds = +input;\n },\n ],\n s: [this.match1to2, this.addInput('seconds')],\n ss: [this.match1to2, this.addInput('seconds')],\n m: [this.match1to2, this.addInput('minutes')],\n mm: [this.match1to2, this.addInput('minutes')],\n H: [this.match1to2, this.addInput('hours')],\n h: [this.match1to2, this.addInput('hours')],\n HH: [this.match1to2, this.addInput('hours')],\n hh: [this.match1to2, this.addInput('hours')],\n d: [this.match1to2, this.addInput('day')],\n dd: [this.match2, this.addInput('day')],\n Do: [\n this.matchWord,\n (ojb, input) => {\n [ojb.day] = input.match(/\\d+/);\n if (!this.localization.ordinal) return;\n for (let i = 1; i <= 31; i += 1) {\n if (this.localization.ordinal(i).replace(/[[\\]]/g, '') === input) {\n ojb.day = i;\n }\n }\n },\n ],\n M: [this.match1to2, this.addInput('month')],\n MM: [this.match2, this.addInput('month')],\n MMM: [\n this.matchWord,\n (obj, input) => {\n const months = this.getAllMonths();\n const monthsShort = this.getAllMonths('short');\n const matchIndex =\n (monthsShort || months.map((_) => _.slice(0, 3))).indexOf(input) + 1;\n if (matchIndex < 1) {\n throw new Error();\n }\n obj.month = matchIndex % 12 || matchIndex;\n },\n ],\n MMMM: [\n this.matchWord,\n (obj, input) => {\n const months = this.getAllMonths();\n const matchIndex = months.indexOf(input) + 1;\n if (matchIndex < 1) {\n throw new Error();\n }\n obj.month = matchIndex % 12 || matchIndex;\n },\n ],\n y: [this.matchSigned, this.addInput('year')],\n yy: [\n this.match2,\n (obj, input) => {\n obj.year = this.parseTwoDigitYear(input);\n },\n ],\n yyyy: [this.match4, this.addInput('year')],\n // z: this.zoneExpressions,\n // zz: this.zoneExpressions,\n // zzz: this.zoneExpressions\n };\n\n private correctHours(time) {\n const { afternoon } = time;\n if (afternoon !== undefined) {\n const { hours } = time;\n if (afternoon) {\n if (hours < 12) {\n time.hours += 12;\n }\n } else if (hours === 12) {\n time.hours = 0;\n }\n delete time.afternoon;\n }\n }\n\n private makeParser(format) {\n format = this.replaceTokens(format, this.localization.dateFormats);\n const array = format.match(this.formattingTokens);\n const { length } = array;\n for (let i = 0; i < length; i += 1) {\n const token = array[i];\n const parseTo = this.expressions[token];\n const regex = parseTo && parseTo[0];\n const parser = parseTo && parseTo[1];\n if (parser) {\n array[i] = { regex, parser };\n } else {\n array[i] = token.replace(/^\\[[^[\\]]*]$/g, '');\n }\n }\n\n return (input): parsedTime => {\n const time = {\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n };\n for (let i = 0, start = 0; i < length; i += 1) {\n const token = array[i];\n if (typeof token === 'string') {\n start += token.length;\n } else {\n const { regex, parser } = token;\n const part = input.slice(start);\n const match = regex.exec(part);\n const value = match[0];\n parser.call(this, time, value);\n input = input.replace(value, '');\n }\n }\n this.correctHours(time);\n return time;\n };\n }\n\n /**\n * Attempts to create a DateTime from a string.\n * @param input date as string\n * @param localization provides the date template the string is in via the format property\n */\n //eslint-disable-next-line @typescript-eslint/no-unused-vars\n static fromString(input: string, localization: FormatLocalization): DateTime {\n if (!localization?.format) {\n Namespace.errorMessages.customDateFormatError('No format was provided');\n }\n try {\n const dt = new DateTime();\n dt.setLocalization(localization);\n if (['x', 'X'].indexOf(localization.format) > -1)\n return new DateTime((localization.format === 'X' ? 1000 : 1) * +input);\n\n const parser = dt.makeParser(localization.format);\n const { year, month, day, hours, minutes, seconds, milliseconds, zone } =\n parser(input);\n const d = day || (!year && !month ? dt.getDate() : 1);\n const y = year || dt.getFullYear();\n let M = 0;\n if (!(year && !month)) {\n M = month > 0 ? month - 1 : dt.getMonth();\n }\n if (zone) {\n return new DateTime(\n Date.UTC(\n y,\n M,\n d,\n hours,\n minutes,\n seconds,\n milliseconds + zone.offset * 60 * 1000\n )\n );\n }\n return new DateTime(y, M, d, hours, minutes, seconds, milliseconds);\n } catch (e) {\n Namespace.errorMessages.customDateFormatError(\n `Unable to parse provided input: ${input}, format: ${localization.format}`\n );\n }\n }\n\n /**\n * Returns a string format.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat\n * for valid templates and locale objects\n * @param template An optional object. If provided, method will use Intl., otherwise the localizations format properties\n * @param locale Can be a string or an array of strings. Uses browser defaults otherwise.\n */\n format(\n template?: DateTimeFormatOptions | string,\n locale = this.localization.locale\n ): string {\n if (template && typeof template === 'object')\n return new Intl.DateTimeFormat(locale, template).format(this);\n\n const formatString = this.replaceTokens(\n //try template first\n template ||\n //otherwise try localization format\n this.localization.format ||\n //otherwise try date + time\n `${DefaultFormatLocalization.dateFormats.L}, ${DefaultFormatLocalization.dateFormats.LT}`,\n this.localization.dateFormats\n );\n\n const formatter = (template) =>\n new Intl.DateTimeFormat(this.localization.locale, template).format(this);\n\n if (!this.localization.hourCycle)\n this.localization.hourCycle = guessHourCycle(this.localization.locale);\n\n //if the format asks for a twenty-four-hour string but the hour cycle is not, then make a base guess\n const HHCycle = this.localization.hourCycle.startsWith('h1')\n ? 'h24'\n : this.localization.hourCycle;\n const hhCycle = this.localization.hourCycle.startsWith('h2')\n ? 'h12'\n : this.localization.hourCycle;\n\n const matches = {\n yy: formatter({ year: '2-digit' }),\n yyyy: this.year,\n M: formatter({ month: 'numeric' }),\n MM: this.monthFormatted,\n MMM: this.getAllMonths('short')[this.getMonth()],\n MMMM: this.getAllMonths()[this.getMonth()],\n d: this.date,\n dd: this.dateFormatted,\n ddd: formatter({ weekday: 'short' }),\n dddd: formatter({ weekday: 'long' }),\n H: this.getHours(),\n HH: this.getHoursFormatted(HHCycle),\n h: this.hours > 12 ? this.hours - 12 : this.hours,\n hh: this.getHoursFormatted(hhCycle),\n t: this.meridiem(),\n T: this.meridiem().toUpperCase(),\n m: this.minutes,\n mm: this.minutesFormatted,\n s: this.seconds,\n ss: this.secondsFormatted,\n fff: this.getMilliseconds(),\n // z: this.zoneInformation(dateTime, 'z'), //-4\n // zz: this.zoneInformation(dateTime, 'zz'), //-04\n // zzz: this.zoneInformation(dateTime, 'zzz') //-0400\n };\n\n return formatString\n .replace(this.dateTimeRegex, (match, $1) => {\n return $1 || matches[match];\n })\n .replace(/\\[/g, '')\n .replace(/]/g, '');\n }\n\n //#endregion CDF stuff\n}\n","//eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport declare type Constructable = new (...args: any[]) => T;\n\nclass ServiceLocator {\n private cache: Map, unknown | symbol> = new Map();\n\n locate(identifier: Constructable): T {\n const service = this.cache.get(identifier);\n if (service) return service as T;\n const value = new identifier();\n this.cache.set(identifier, value);\n return value;\n }\n}\nexport const setupServiceLocator = () => {\n serviceLocator = new ServiceLocator();\n};\n\nexport let serviceLocator: ServiceLocator;\n","import { Unit } from '../datetime';\nimport Namespace from './namespace';\nimport ViewMode from './view-mode';\n\nconst CalendarModes: {\n name: keyof ViewMode;\n className: string;\n unit: Unit;\n step: number;\n}[] = [\n {\n name: 'calendar',\n className: Namespace.css.daysContainer,\n unit: Unit.month,\n step: 1,\n },\n {\n name: 'months',\n className: Namespace.css.monthsContainer,\n unit: Unit.year,\n step: 1,\n },\n {\n name: 'years',\n className: Namespace.css.yearsContainer,\n unit: Unit.year,\n step: 10,\n },\n {\n name: 'decades',\n className: Namespace.css.decadesContainer,\n unit: Unit.year,\n step: 100,\n },\n];\n\nexport default CalendarModes;\n","import { DateTime } from '../datetime';\nimport CalendarModes from './calendar-modes';\nimport ViewMode from './view-mode';\nimport Options from './options';\n\nexport class OptionsStore {\n options: Options;\n element: HTMLElement;\n input: HTMLInputElement;\n unset: boolean;\n private _currentCalendarViewMode = 0;\n\n get currentCalendarViewMode() {\n return this._currentCalendarViewMode;\n }\n\n set currentCalendarViewMode(value) {\n this._currentCalendarViewMode = value;\n this.currentView = CalendarModes[value].name;\n }\n\n _viewDate = new DateTime();\n\n get viewDate() {\n return this._viewDate;\n }\n\n set viewDate(v) {\n this._viewDate = v;\n if (this.options) this.options.viewDate = v;\n }\n\n /**\n * When switching back to the calendar from the clock,\n * this sets currentView to the correct calendar view.\n */\n refreshCurrentView() {\n this.currentView = CalendarModes[this.currentCalendarViewMode].name;\n }\n\n minimumCalendarViewMode = 0;\n currentView: keyof ViewMode = 'calendar';\n\n get isTwelveHour() {\n return ['h12', 'h11'].includes(this.options.localization.hourCycle);\n }\n}\n","import { DateTime, Unit } from './datetime';\nimport { serviceLocator } from './utilities/service-locator';\nimport { OptionsStore } from './utilities/optionsStore';\n\n/**\n * Main class for date validation rules based on the options provided.\n */\nexport default class Validation {\n private optionsStore: OptionsStore;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n }\n\n /**\n * Checks to see if the target date is valid based on the rules provided in the options.\n * Granularity can be provided to check portions of the date instead of the whole.\n * @param targetDate\n * @param granularity\n */\n isValid(targetDate: DateTime, granularity?: Unit): boolean {\n if (!this._enabledDisabledDatesIsValid(granularity, targetDate))\n return false;\n\n if (\n granularity !== Unit.month &&\n granularity !== Unit.year &&\n this.optionsStore.options.restrictions.daysOfWeekDisabled?.length > 0 &&\n this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(\n targetDate.weekDay\n ) !== -1\n )\n return false;\n\n if (!this._minMaxIsValid(granularity, targetDate)) return false;\n\n if (\n granularity === Unit.hours ||\n granularity === Unit.minutes ||\n granularity === Unit.seconds\n ) {\n if (!this._enabledDisabledHoursIsValid(targetDate)) return false;\n\n if (\n this.optionsStore.options.restrictions.disabledTimeIntervals?.filter(\n (internal) => targetDate.isBetween(internal.from, internal.to)\n ).length !== 0\n )\n return false;\n }\n\n return true;\n }\n\n private _enabledDisabledDatesIsValid(\n granularity: Unit,\n targetDate: DateTime\n ): boolean {\n if (granularity !== Unit.date) return true;\n\n if (\n this.optionsStore.options.restrictions.disabledDates.length > 0 &&\n this._isInDisabledDates(targetDate)\n ) {\n return false;\n }\n\n // noinspection RedundantIfStatementJS\n if (\n this.optionsStore.options.restrictions.enabledDates.length > 0 &&\n !this._isInEnabledDates(targetDate)\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Checks to see if the disabledDates option is in use and returns true (meaning invalid)\n * if the `testDate` is with in the array. Granularity is by date.\n * @param testDate\n * @private\n */\n private _isInDisabledDates(testDate: DateTime) {\n if (\n !this.optionsStore.options.restrictions.disabledDates ||\n this.optionsStore.options.restrictions.disabledDates.length === 0\n )\n return false;\n\n return !!this.optionsStore.options.restrictions.disabledDates.find((x) =>\n x.isSame(testDate, Unit.date)\n );\n }\n\n /**\n * Checks to see if the enabledDates option is in use and returns true (meaning valid)\n * if the `testDate` is with in the array. Granularity is by date.\n * @param testDate\n * @private\n */\n private _isInEnabledDates(testDate: DateTime) {\n if (\n !this.optionsStore.options.restrictions.enabledDates ||\n this.optionsStore.options.restrictions.enabledDates.length === 0\n )\n return true;\n\n return !!this.optionsStore.options.restrictions.enabledDates.find((x) =>\n x.isSame(testDate, Unit.date)\n );\n }\n\n private _minMaxIsValid(granularity: Unit, targetDate: DateTime) {\n if (\n this.optionsStore.options.restrictions.minDate &&\n targetDate.isBefore(\n this.optionsStore.options.restrictions.minDate,\n granularity\n )\n ) {\n return false;\n }\n\n // noinspection RedundantIfStatementJS\n if (\n this.optionsStore.options.restrictions.maxDate &&\n targetDate.isAfter(\n this.optionsStore.options.restrictions.maxDate,\n granularity\n )\n ) {\n return false;\n }\n\n return true;\n }\n\n private _enabledDisabledHoursIsValid(targetDate) {\n if (\n this.optionsStore.options.restrictions.disabledHours.length > 0 &&\n this._isInDisabledHours(targetDate)\n ) {\n return false;\n }\n\n // noinspection RedundantIfStatementJS\n if (\n this.optionsStore.options.restrictions.enabledHours.length > 0 &&\n !this._isInEnabledHours(targetDate)\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Checks to see if the disabledHours option is in use and returns true (meaning invalid)\n * if the `testDate` is with in the array. Granularity is by hours.\n * @param testDate\n * @private\n */\n private _isInDisabledHours(testDate: DateTime) {\n if (\n !this.optionsStore.options.restrictions.disabledHours ||\n this.optionsStore.options.restrictions.disabledHours.length === 0\n )\n return false;\n\n const formattedDate = testDate.hours;\n return this.optionsStore.options.restrictions.disabledHours.includes(\n formattedDate\n );\n }\n\n /**\n * Checks to see if the enabledHours option is in use and returns true (meaning valid)\n * if the `testDate` is with in the array. Granularity is by hours.\n * @param testDate\n * @private\n */\n private _isInEnabledHours(testDate: DateTime) {\n if (\n !this.optionsStore.options.restrictions.enabledHours ||\n this.optionsStore.options.restrictions.enabledHours.length === 0\n )\n return true;\n\n const formattedDate = testDate.hours;\n return this.optionsStore.options.restrictions.enabledHours.includes(\n formattedDate\n );\n }\n\n dateRangeIsValid(dates: DateTime[], index: number, target: DateTime) {\n // if we're not using the option, then return valid\n if (!this.optionsStore.options.dateRange) return true;\n\n // if we've only selected 0..1 dates, and we're not setting the end date\n // then return valid. We only want to validate the range if both are selected,\n // because the other validation on the target has already occurred.\n if (dates.length !== 2 && index !== 1) return true;\n\n // initialize start date\n const start = dates[0].clone;\n // check if start date is not the same as target date\n if (start.isSame(target, Unit.date)) return true;\n\n // add one day to start; start has already been validated\n start.manipulate(1, Unit.date);\n\n // check each date in the range to make sure it's valid\n while (!start.isSame(target, Unit.date)) {\n const valid = this.isValid(start, Unit.date);\n if (!valid) return false;\n start.manipulate(1, Unit.date);\n }\n\n return true;\n }\n}\n","import { DateTime, Unit } from '../datetime';\nimport ActionTypes from './action-types';\nimport { BaseEvent } from './event-types';\n\nexport type ViewUpdateValues = Unit | 'decade' | 'clock' | 'calendar' | 'all';\n\nclass EventEmitter {\n private subscribers: ((value?: T) => void)[] = [];\n\n subscribe(callback: (value: T) => void) {\n this.subscribers.push(callback);\n return this.unsubscribe.bind(this, this.subscribers.length - 1);\n }\n\n unsubscribe(index: number) {\n this.subscribers.splice(index, 1);\n }\n\n emit(value?: T) {\n this.subscribers.forEach((callback) => {\n callback(value);\n });\n }\n\n destroy() {\n this.subscribers = null;\n this.subscribers = [];\n }\n}\n\nexport class EventEmitters {\n triggerEvent = new EventEmitter();\n viewUpdate = new EventEmitter();\n updateDisplay = new EventEmitter();\n action = new EventEmitter<{ e: any; action?: ActionTypes }>(); //eslint-disable-line @typescript-eslint/no-explicit-any\n updateViewDate = new EventEmitter();\n\n destroy() {\n this.triggerEvent.destroy();\n this.viewUpdate.destroy();\n this.updateDisplay.destroy();\n this.action.destroy();\n this.updateViewDate.destroy();\n }\n}\n","import Options, { Localization } from './options';\nimport { DateTime } from '../datetime';\nimport DefaultFormatLocalization from './default-format-localization';\n\nconst defaultEnLocalization: Localization = {\n clear: 'Clear selection',\n close: 'Close the picker',\n dateFormats: DefaultFormatLocalization.dateFormats,\n dayViewHeaderFormat: { month: 'long', year: '2-digit' },\n decrementHour: 'Decrement Hour',\n decrementMinute: 'Decrement Minute',\n decrementSecond: 'Decrement Second',\n format: DefaultFormatLocalization.format,\n hourCycle: DefaultFormatLocalization.hourCycle,\n incrementHour: 'Increment Hour',\n incrementMinute: 'Increment Minute',\n incrementSecond: 'Increment Second',\n locale: DefaultFormatLocalization.locale,\n nextCentury: 'Next Century',\n nextDecade: 'Next Decade',\n nextMonth: 'Next Month',\n nextYear: 'Next Year',\n ordinal: DefaultFormatLocalization.ordinal,\n pickHour: 'Pick Hour',\n pickMinute: 'Pick Minute',\n pickSecond: 'Pick Second',\n previousCentury: 'Previous Century',\n previousDecade: 'Previous Decade',\n previousMonth: 'Previous Month',\n previousYear: 'Previous Year',\n selectDate: 'Select Date',\n selectDecade: 'Select Decade',\n selectMonth: 'Select Month',\n selectTime: 'Select Time',\n selectYear: 'Select Year',\n startOfTheWeek: 0,\n today: 'Go to today',\n toggleMeridiem: 'Toggle Meridiem',\n};\n\nconst DefaultOptions: Options = {\n allowInputToggle: false,\n container: undefined,\n dateRange: false,\n debug: false,\n defaultDate: undefined,\n display: {\n icons: {\n type: 'icons',\n time: 'fa-solid fa-clock',\n date: 'fa-solid fa-calendar',\n up: 'fa-solid fa-arrow-up',\n down: 'fa-solid fa-arrow-down',\n previous: 'fa-solid fa-chevron-left',\n next: 'fa-solid fa-chevron-right',\n today: 'fa-solid fa-calendar-check',\n clear: 'fa-solid fa-trash',\n close: 'fa-solid fa-xmark',\n },\n sideBySide: false,\n calendarWeeks: false,\n viewMode: 'calendar',\n toolbarPlacement: 'bottom',\n keepOpen: false,\n buttons: {\n today: false,\n clear: false,\n close: false,\n },\n components: {\n calendar: true,\n date: true,\n month: true,\n year: true,\n decades: true,\n clock: true,\n hours: true,\n minutes: true,\n seconds: false,\n useTwentyfourHour: undefined,\n },\n inline: false,\n theme: 'auto',\n placement: 'bottom',\n },\n keepInvalid: false,\n localization: defaultEnLocalization,\n meta: {},\n multipleDates: false,\n multipleDatesSeparator: '; ',\n promptTimeOnDateChange: false,\n promptTimeOnDateChangeTransitionDelay: 200,\n restrictions: {\n minDate: undefined,\n maxDate: undefined,\n disabledDates: [],\n enabledDates: [],\n daysOfWeekDisabled: [],\n disabledTimeIntervals: [],\n disabledHours: [],\n enabledHours: [],\n },\n stepping: 1,\n useCurrent: true,\n viewDate: new DateTime(),\n};\n\nexport default DefaultOptions;\nexport const DefaultEnLocalization = { ...defaultEnLocalization };\n","import Namespace from './namespace';\nimport { DateTime } from '../datetime';\nimport { FormatLocalization } from './options';\nimport DefaultFormatLocalization from './default-format-localization';\n\n/**\n * Attempts to prove `d` is a DateTime or Date or can be converted into one.\n * @param d If a string will attempt creating a date from it.\n * @param localization object containing locale and format settings. Only used with the custom formats\n * @private\n */\nexport function tryConvertToDateTime(\n this: void,\n d: DateTime | Date | string,\n localization: FormatLocalization\n): DateTime | null {\n if (!d) return null;\n if (d.constructor.name === DateTime.name) return d as DateTime;\n if (d.constructor.name === Date.name) {\n return DateTime.convert(d as Date);\n }\n if (typeof d === typeof '') {\n const dateTime = DateTime.fromString(d as unknown as string, localization);\n if (JSON.stringify(dateTime) === 'null') {\n return null;\n }\n return dateTime;\n }\n return null;\n}\n\n/**\n * Attempts to convert `d` to a DateTime object\n * @param d value to convert\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param localization object containing locale and format settings. Only used with the custom formats\n */\nexport function convertToDateTime(\n this: void,\n d: DateTime | Date | string,\n optionName: string,\n localization: FormatLocalization\n): DateTime {\n if (typeof d === typeof '' && optionName !== 'input') {\n Namespace.errorMessages.dateString();\n }\n\n const converted = tryConvertToDateTime(d, localization);\n\n if (!converted) {\n Namespace.errorMessages.failedToParseDate(\n optionName,\n d,\n optionName === 'input'\n );\n }\n return converted;\n}\n\n/**\n * Type checks that `value` is an array of Date or DateTime\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n * @param localization\n */\nexport function typeCheckDateArray(\n this: void,\n optionName: string,\n value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n providedType: string,\n localization: FormatLocalization = DefaultFormatLocalization\n) {\n if (!Array.isArray(value)) {\n Namespace.errorMessages.typeMismatch(\n optionName,\n providedType,\n 'array of DateTime or Date'\n );\n }\n for (let i = 0; i < value.length; i++) {\n const d = value[i];\n const dateTime = convertToDateTime(d, optionName, localization);\n dateTime.setLocalization(localization);\n value[i] = dateTime;\n }\n}\n\n/**\n * Type checks that `value` is an array of numbers\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n */\nexport function typeCheckNumberArray(\n this: void,\n optionName: string,\n value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n providedType: string\n) {\n if (!Array.isArray(value) || value.some((x) => typeof x !== typeof 0)) {\n Namespace.errorMessages.typeMismatch(\n optionName,\n providedType,\n 'array of numbers'\n );\n }\n}\n","import Namespace from './namespace';\nimport type { FormatLocalization } from './options';\nimport {\n convertToDateTime,\n typeCheckNumberArray,\n typeCheckDateArray,\n} from './typeChecker';\n\ninterface OptionProcessorFunctionArguments {\n key: string;\n value: any; //eslint-disable-line @typescript-eslint/no-explicit-any\n providedType: string;\n defaultType: string;\n path: string;\n localization: FormatLocalization;\n}\n\ntype OptionProcessorFunction = (\n this: void,\n args: OptionProcessorFunctionArguments\n) => any; //eslint-disable-line @typescript-eslint/no-explicit-any\n\nfunction mandatoryDate(key: string): OptionProcessorFunction {\n return ({ value, providedType, localization }) => {\n const dateTime = convertToDateTime(value, key, localization);\n if (dateTime !== undefined) {\n dateTime.setLocalization(localization);\n return dateTime;\n }\n };\n}\n\nfunction optionalDate(key: string): OptionProcessorFunction {\n const mandatory = mandatoryDate(key);\n return (args) => {\n if (args.value === undefined) {\n return args.value;\n }\n return mandatory(args);\n };\n}\n\nfunction numbersInRange(\n key: string,\n lower: number,\n upper: number\n): OptionProcessorFunction {\n return ({ value, providedType }) => {\n if (value === undefined) {\n return [];\n }\n typeCheckNumberArray(key, value, providedType);\n if ((value as number[]).some((x) => x < lower || x > upper))\n Namespace.errorMessages.numbersOutOfRange(key, lower, upper);\n return value;\n };\n}\n\nfunction validHourRange(key: string): OptionProcessorFunction {\n return numbersInRange(key, 0, 23);\n}\n\nfunction validDateArray(key: string): OptionProcessorFunction {\n return ({ value, providedType, localization }) => {\n if (value === undefined) {\n return [];\n }\n typeCheckDateArray(key, value, providedType, localization);\n return value;\n };\n}\n\nfunction validKeyOption(keyOptions: string[]): OptionProcessorFunction {\n return ({ value, path }) => {\n if (!keyOptions.includes(value))\n Namespace.errorMessages.unexpectedOptionValue(\n path.substring(1),\n value,\n keyOptions\n );\n return value;\n };\n}\n\nconst optionProcessors: { [key: string]: OptionProcessorFunction } =\n Object.freeze({\n defaultDate: mandatoryDate('defaultDate'),\n viewDate: mandatoryDate('viewDate'),\n minDate: optionalDate('restrictions.minDate'),\n maxDate: optionalDate('restrictions.maxDate'),\n disabledHours: validHourRange('restrictions.disabledHours'),\n enabledHours: validHourRange('restrictions.enabledHours'),\n disabledDates: validDateArray('restrictions.disabledDates'),\n enabledDates: validDateArray('restrictions.enabledDates'),\n daysOfWeekDisabled: numbersInRange('restrictions.daysOfWeekDisabled', 0, 6),\n disabledTimeIntervals: ({ key, value, providedType, localization }) => {\n if (value === undefined) {\n return [];\n }\n if (!Array.isArray(value)) {\n Namespace.errorMessages.typeMismatch(\n key,\n providedType,\n 'array of { from: DateTime|Date, to: DateTime|Date }'\n );\n }\n const valueObject = value as { from: any; to: any }[]; //eslint-disable-line @typescript-eslint/no-explicit-any\n for (let i = 0; i < valueObject.length; i++) {\n Object.keys(valueObject[i]).forEach((vk) => {\n const subOptionName = `${key}[${i}].${vk}`;\n const d = valueObject[i][vk];\n const dateTime = convertToDateTime(d, subOptionName, localization);\n dateTime.setLocalization(localization);\n valueObject[i][vk] = dateTime;\n });\n }\n return valueObject;\n },\n toolbarPlacement: validKeyOption(['top', 'bottom', 'default']),\n type: validKeyOption(['icons', 'sprites']),\n viewMode: validKeyOption([\n 'clock',\n 'calendar',\n 'months',\n 'years',\n 'decades',\n ]),\n theme: validKeyOption(['light', 'dark', 'auto']),\n placement: validKeyOption(['top', 'bottom']),\n meta: ({ value }) => value,\n dayViewHeaderFormat: ({ value }) => value,\n container: ({ value, path }) => {\n if (\n value &&\n !(\n value instanceof HTMLElement ||\n value instanceof Element ||\n value?.appendChild\n )\n ) {\n Namespace.errorMessages.typeMismatch(\n path.substring(1),\n typeof value,\n 'HTMLElement'\n );\n }\n return value;\n },\n useTwentyfourHour: ({ value, path, providedType, defaultType }) => {\n Namespace.errorMessages.deprecatedWarning(\n 'useTwentyfourHour',\n 'Please use \"options.localization.hourCycle\" instead'\n );\n if (value === undefined || providedType === 'boolean') return value;\n Namespace.errorMessages.typeMismatch(path, providedType, defaultType);\n },\n hourCycle: validKeyOption(['h11', 'h12', 'h23', 'h24']),\n });\n\nconst defaultProcessor: OptionProcessorFunction = ({\n value,\n defaultType,\n providedType,\n path,\n}) => {\n switch (defaultType) {\n case 'boolean':\n return value === 'true' || value === true;\n case 'number':\n return +value;\n case 'string':\n return value.toString();\n case 'object':\n return {};\n case 'function':\n return value;\n default:\n Namespace.errorMessages.typeMismatch(path, providedType, defaultType);\n }\n};\n\nexport function processKey(this: void, args: OptionProcessorFunctionArguments) {\n return (optionProcessors[args.key] || defaultProcessor)(args);\n}\n","import Namespace from './namespace';\nimport { DateTime } from '../datetime';\nimport DefaultOptions from './default-options';\nimport Options, { FormatLocalization } from './options';\nimport { processKey } from './optionProcessor';\nimport {\n convertToDateTime,\n tryConvertToDateTime,\n typeCheckDateArray,\n typeCheckNumberArray,\n} from './typeChecker';\n\nexport class OptionConverter {\n private static ignoreProperties = [\n 'meta',\n 'dayViewHeaderFormat',\n 'container',\n 'dateForms',\n 'ordinal',\n ];\n\n static deepCopy(input): Options {\n const o = {};\n\n Object.keys(input).forEach((key) => {\n const inputElement = input[key];\n\n if (inputElement instanceof DateTime) {\n o[key] = inputElement.clone;\n return;\n } else if (inputElement instanceof Date) {\n o[key] = new Date(inputElement.valueOf());\n return;\n }\n\n o[key] = inputElement;\n if (\n typeof inputElement !== 'object' ||\n inputElement instanceof HTMLElement ||\n inputElement instanceof Element\n )\n return;\n if (!Array.isArray(inputElement)) {\n o[key] = OptionConverter.deepCopy(inputElement);\n }\n });\n\n return o;\n }\n\n private static isValue = (a) => a != null; // everything except undefined + null\n\n /**\n * Finds value out of an object based on a string, period delimited, path\n * @param paths\n * @param obj\n */\n static objectPath(paths: string, obj) {\n if (paths.charAt(0) === '.') paths = paths.slice(1);\n if (!paths) return obj;\n return paths\n .split('.')\n .reduce(\n (value, key) =>\n OptionConverter.isValue(value) || OptionConverter.isValue(value[key])\n ? value[key]\n : undefined,\n obj\n );\n }\n\n /**\n * The spread operator caused sub keys to be missing after merging.\n * This is to fix that issue by using spread on the child objects first.\n * Also handles complex options like disabledDates\n * @param provided An option from new providedOptions\n * @param copyTo Destination object. This was added to prevent reference copies\n * @param localization\n * @param path\n */\n static spread(provided, copyTo, localization: FormatLocalization, path = '') {\n const defaultOptions = OptionConverter.objectPath(path, DefaultOptions);\n\n const unsupportedOptions = Object.keys(provided).filter(\n (x) => !Object.keys(defaultOptions).includes(x)\n );\n\n if (unsupportedOptions.length > 0) {\n const flattenedOptions = OptionConverter.getFlattenDefaultOptions();\n\n const errors = unsupportedOptions.map((x) => {\n let error = `\"${path}.${x}\" in not a known option.`;\n const didYouMean = flattenedOptions.find((y) => y.includes(x));\n if (didYouMean) error += ` Did you mean \"${didYouMean}\"?`;\n return error;\n });\n Namespace.errorMessages.unexpectedOptions(errors);\n }\n\n Object.keys(provided)\n .filter((key) => key !== '__proto__' && key !== 'constructor')\n .forEach((key) => {\n path += `.${key}`;\n if (path.charAt(0) === '.') path = path.slice(1);\n\n const defaultOptionValue = defaultOptions[key];\n const providedType = typeof provided[key];\n const defaultType = typeof defaultOptionValue;\n const value = provided[key];\n\n if (value === undefined || value === null) {\n copyTo[key] = value;\n path = path.substring(0, path.lastIndexOf(`.${key}`));\n return;\n }\n\n if (\n typeof defaultOptionValue === 'object' &&\n !Array.isArray(provided[key]) &&\n !(\n defaultOptionValue instanceof Date ||\n OptionConverter.ignoreProperties.includes(key)\n )\n ) {\n OptionConverter.spread(\n provided[key],\n copyTo[key],\n localization,\n path\n );\n } else {\n copyTo[key] = OptionConverter.processKey(\n key,\n value,\n providedType,\n defaultType,\n path,\n localization\n );\n }\n\n path = path.substring(0, path.lastIndexOf(`.${key}`));\n });\n }\n\n static processKey(\n key: string,\n value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n providedType: string,\n defaultType: string,\n path: string,\n localization: FormatLocalization\n ) {\n return processKey({\n key,\n value,\n providedType,\n defaultType,\n path,\n localization,\n });\n }\n\n static _mergeOptions(providedOptions: Options, mergeTo: Options): Options {\n const newConfig = OptionConverter.deepCopy(mergeTo);\n //see if the options specify a locale\n const localization =\n mergeTo.localization?.locale !== 'default'\n ? mergeTo.localization\n : providedOptions?.localization || DefaultOptions.localization;\n\n OptionConverter.spread(providedOptions, newConfig, localization, '');\n\n return newConfig;\n }\n\n static _dataToOptions(element, options: Options): Options {\n const eData = JSON.parse(JSON.stringify(element.dataset));\n\n if (eData?.tdTargetInput) delete eData.tdTargetInput;\n if (eData?.tdTargetToggle) delete eData.tdTargetToggle;\n\n if (\n !eData ||\n Object.keys(eData).length === 0 ||\n eData.constructor !== DOMStringMap\n )\n return options;\n const dataOptions = {} as Options;\n\n // because dataset returns camelCase including the 'td' key the option\n // key won't align\n const objectToNormalized = (object) => {\n const lowered = {};\n Object.keys(object).forEach((x) => {\n lowered[x.toLowerCase()] = x;\n });\n\n return lowered;\n };\n\n const normalizeObject = this.normalizeObject(objectToNormalized);\n const optionsLower = objectToNormalized(options);\n\n Object.keys(eData)\n .filter((x) => x.startsWith(Namespace.dataKey))\n .map((x) => x.substring(2))\n .forEach((key) => {\n let keyOption = optionsLower[key.toLowerCase()];\n\n // dataset merges dashes to camelCase... yay\n // i.e. key = display_components_seconds\n if (key.includes('_')) {\n // [display, components, seconds]\n const split = key.split('_');\n // display\n keyOption = optionsLower[split[0].toLowerCase()];\n if (\n keyOption !== undefined &&\n options[keyOption].constructor === Object\n ) {\n dataOptions[keyOption] = normalizeObject(\n split,\n 1,\n options[keyOption],\n eData[`td${key}`]\n );\n }\n }\n // or key = multipleDate\n else if (keyOption !== undefined) {\n dataOptions[keyOption] = eData[`td${key}`];\n }\n });\n\n return this._mergeOptions(dataOptions, options);\n }\n\n //todo clean this up\n private static normalizeObject(objectToNormalized: (object) => object) {\n const normalizeObject = (\n split: string[],\n index: number,\n optionSubgroup: unknown,\n value: unknown\n ) => {\n // first round = display { ... }\n const normalizedOptions = objectToNormalized(optionSubgroup);\n\n const keyOption = normalizedOptions[split[index].toLowerCase()];\n const internalObject = {};\n\n if (keyOption === undefined) return internalObject;\n\n // if this is another object, continue down the rabbit hole\n if (optionSubgroup[keyOption].constructor === Object) {\n index++;\n internalObject[keyOption] = normalizeObject(\n split,\n index,\n optionSubgroup[keyOption],\n value\n );\n } else {\n internalObject[keyOption] = value;\n }\n return internalObject;\n };\n return normalizeObject;\n }\n\n /**\n * Attempts to prove `d` is a DateTime or Date or can be converted into one.\n * @param d If a string will attempt creating a date from it.\n * @param localization object containing locale and format settings. Only used with the custom formats\n * @private\n */\n static _dateTypeCheck(\n d: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n localization: FormatLocalization\n ): DateTime | null {\n return tryConvertToDateTime(d, localization);\n }\n\n /**\n * Type checks that `value` is an array of Date or DateTime\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n * @param localization\n */\n static _typeCheckDateArray(\n optionName: string,\n value,\n providedType: string,\n localization: FormatLocalization\n ) {\n return typeCheckDateArray(optionName, value, providedType, localization);\n }\n\n /**\n * Type checks that `value` is an array of numbers\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n */\n static _typeCheckNumberArray(\n optionName: string,\n value,\n providedType: string\n ) {\n return typeCheckNumberArray(optionName, value, providedType);\n }\n\n /**\n * Attempts to convert `d` to a DateTime object\n * @param d value to convert\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param localization object containing locale and format settings. Only used with the custom formats\n */\n static dateConversion(\n d: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n optionName: string,\n localization: FormatLocalization\n ): DateTime {\n return convertToDateTime(d, optionName, localization);\n }\n\n private static _flattenDefaults: string[];\n\n private static getFlattenDefaultOptions(): string[] {\n if (this._flattenDefaults) return this._flattenDefaults;\n const deepKeys = (t, pre = []) => {\n if (Array.isArray(t)) return [];\n if (Object(t) === t) {\n return Object.entries(t).flatMap(([k, v]) => deepKeys(v, [...pre, k]));\n } else {\n return pre.join('.');\n }\n };\n\n this._flattenDefaults = deepKeys(DefaultOptions);\n\n return this._flattenDefaults;\n }\n\n /**\n * Some options conflict like min/max date. Verify that these kinds of options\n * are set correctly.\n * @param config\n */\n static _validateConflicts(config: Options) {\n if (\n config.display.sideBySide &&\n (!config.display.components.clock ||\n !(\n config.display.components.hours ||\n config.display.components.minutes ||\n config.display.components.seconds\n ))\n ) {\n Namespace.errorMessages.conflictingConfiguration(\n 'Cannot use side by side mode without the clock components'\n );\n }\n\n if (config.restrictions.minDate && config.restrictions.maxDate) {\n if (config.restrictions.minDate.isAfter(config.restrictions.maxDate)) {\n Namespace.errorMessages.conflictingConfiguration(\n 'minDate is after maxDate'\n );\n }\n\n if (config.restrictions.maxDate.isBefore(config.restrictions.minDate)) {\n Namespace.errorMessages.conflictingConfiguration(\n 'maxDate is before minDate'\n );\n }\n }\n\n if (config.multipleDates && config.dateRange) {\n Namespace.errorMessages.conflictingConfiguration(\n 'Cannot uss option \"multipleDates\" with \"dateRange\"'\n );\n }\n }\n}\n","import { DateTime, getFormatByUnit, Unit } from './datetime';\nimport Namespace from './utilities/namespace';\nimport { ChangeEvent, FailEvent } from './utilities/event-types';\nimport Validation from './validation';\nimport { serviceLocator } from './utilities/service-locator';\nimport { EventEmitters } from './utilities/event-emitter';\nimport { OptionsStore } from './utilities/optionsStore';\nimport { OptionConverter } from './utilities/optionConverter';\n\nexport default class Dates {\n private _dates: DateTime[] = [];\n private optionsStore: OptionsStore;\n private validation: Validation;\n private _eventEmitters: EventEmitters;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n this._eventEmitters = serviceLocator.locate(EventEmitters);\n }\n\n /**\n * Returns the array of selected dates\n */\n get picked(): DateTime[] {\n return [...this._dates];\n }\n\n /**\n * Returns the last picked value.\n */\n get lastPicked(): DateTime {\n return this._dates[this.lastPickedIndex]?.clone;\n }\n\n /**\n * Returns the length of picked dates -1 or 0 if none are selected.\n */\n get lastPickedIndex(): number {\n if (this._dates.length === 0) return 0;\n return this._dates.length - 1;\n }\n\n /**\n * Formats a DateTime object to a string. Used when setting the input value.\n * @param date\n */\n formatInput(date: DateTime): string {\n if (!date) return '';\n date.localization = this.optionsStore.options.localization;\n return date.format();\n }\n\n /**\n * parse the value into a DateTime object.\n * this can be overwritten to supply your own parsing.\n */\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n parseInput(value: any): DateTime {\n return OptionConverter.dateConversion(\n value,\n 'input',\n this.optionsStore.options.localization\n );\n }\n\n /**\n * Tries to convert the provided value to a DateTime object.\n * If value is null|undefined then clear the value of the provided index (or 0).\n * @param value Value to convert or null|undefined\n * @param index When using multidates this is the index in the array\n */\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n setFromInput(value: any, index?: number) {\n if (!value) {\n this.setValue(undefined, index);\n return;\n }\n const converted = this.parseInput(value);\n if (converted) {\n converted.setLocalization(this.optionsStore.options.localization);\n this.setValue(converted, index);\n }\n }\n\n /**\n * Adds a new DateTime to selected dates array\n * @param date\n */\n add(date: DateTime): void {\n this._dates.push(date);\n }\n\n /**\n * Returns true if the `targetDate` is part of the selected dates array.\n * If `unit` is provided then a granularity to that unit will be used.\n * @param targetDate\n * @param unit\n */\n isPicked(targetDate: DateTime, unit?: Unit): boolean {\n if (!DateTime.isValid(targetDate)) return false;\n if (!unit)\n return this._dates.find((x) => x.isSame(targetDate)) !== undefined;\n\n const format = getFormatByUnit(unit);\n\n const innerDateFormatted = targetDate.format(format);\n\n return (\n this._dates\n .map((x) => x.format(format))\n .find((x) => x === innerDateFormatted) !== undefined\n );\n }\n\n /**\n * Returns the index at which `targetDate` is in the array.\n * This is used for updating or removing a date when multi-date is used\n * If `unit` is provided then a granularity to that unit will be used.\n * @param targetDate\n * @param unit\n */\n pickedIndex(targetDate: DateTime, unit?: Unit): number {\n if (!DateTime.isValid(targetDate)) return -1;\n if (!unit)\n return this._dates.map((x) => x.valueOf()).indexOf(targetDate.valueOf());\n\n const format = getFormatByUnit(unit);\n\n const innerDateFormatted = targetDate.format(format);\n\n return this._dates.map((x) => x.format(format)).indexOf(innerDateFormatted);\n }\n\n /**\n * Clears all selected dates.\n */\n clear() {\n this.optionsStore.unset = true;\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.change,\n date: undefined,\n oldDate: this.lastPicked,\n isClear: true,\n isValid: true,\n } as ChangeEvent);\n this._dates = [];\n if (this.optionsStore.input) this.optionsStore.input.value = '';\n this._eventEmitters.updateDisplay.emit('all');\n }\n\n /**\n * Find the \"book end\" years given a `year` and a `factor`\n * @param factor e.g. 100 for decades\n * @param year e.g. 2021\n */\n static getStartEndYear(\n factor: number,\n year: number\n ): [number, number, number] {\n const step = factor / 10,\n startYear = Math.floor(year / factor) * factor,\n endYear = startYear + step * 9,\n focusValue = Math.floor(year / step) * step;\n return [startYear, endYear, focusValue];\n }\n\n updateInput(target?: DateTime) {\n if (!this.optionsStore.input) return;\n\n let newValue = this.formatInput(target);\n if (\n this.optionsStore.options.multipleDates ||\n this.optionsStore.options.dateRange\n ) {\n newValue = this._dates\n .map((d) => this.formatInput(d))\n .join(this.optionsStore.options.multipleDatesSeparator);\n }\n if (this.optionsStore.input.value != newValue)\n this.optionsStore.input.value = newValue;\n }\n\n /**\n * Attempts to either clear or set the `target` date at `index`.\n * If the `target` is null then the date will be cleared.\n * If multi-date is being used then it will be removed from the array.\n * If `target` is valid and multi-date is used then if `index` is\n * provided the date at that index will be replaced, otherwise it is appended.\n * @param target\n * @param index\n */\n setValue(target?: DateTime, index?: number): void {\n const noIndex = typeof index === 'undefined',\n isClear = !target && noIndex;\n let oldDate = this.optionsStore.unset ? null : this._dates[index]?.clone;\n if (!oldDate && !this.optionsStore.unset && noIndex && isClear) {\n oldDate = this.lastPicked;\n }\n\n if (target && oldDate?.isSame(target)) {\n this.updateInput(target);\n return;\n }\n\n // case of calling setValue(null)\n if (!target) {\n this._setValueNull(isClear, index, oldDate);\n return;\n }\n\n index = index || 0;\n target = target.clone;\n\n // minute stepping is being used, force the minute to the closest value\n if (this.optionsStore.options.stepping !== 1) {\n target.minutes =\n Math.round(target.minutes / this.optionsStore.options.stepping) *\n this.optionsStore.options.stepping;\n target.startOf(Unit.minutes);\n }\n\n const onUpdate = (isValid: boolean) => {\n this._dates[index] = target;\n this._eventEmitters.updateViewDate.emit(target.clone);\n\n this.updateInput(target);\n\n this.optionsStore.unset = false;\n this._eventEmitters.updateDisplay.emit('all');\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.change,\n date: target,\n oldDate,\n isClear,\n isValid: isValid,\n } as ChangeEvent);\n };\n\n if (\n this.validation.isValid(target) &&\n this.validation.dateRangeIsValid(this.picked, index, target)\n ) {\n onUpdate(true);\n return;\n }\n\n if (this.optionsStore.options.keepInvalid) {\n onUpdate(false);\n }\n\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.error,\n reason: Namespace.errorMessages.failedToSetInvalidDate,\n date: target,\n oldDate,\n } as FailEvent);\n }\n\n private _setValueNull(isClear: boolean, index: number, oldDate: DateTime) {\n if (\n !this.optionsStore.options.multipleDates ||\n this._dates.length === 1 ||\n isClear\n ) {\n this.optionsStore.unset = true;\n this._dates = [];\n } else {\n this._dates.splice(index, 1);\n }\n\n this.updateInput();\n\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.change,\n date: undefined,\n oldDate,\n isClear,\n isValid: true,\n } as ChangeEvent);\n\n this._eventEmitters.updateDisplay.emit('all');\n }\n}\n","enum ActionTypes {\n next = 'next',\n previous = 'previous',\n changeCalendarView = 'changeCalendarView',\n selectMonth = 'selectMonth',\n selectYear = 'selectYear',\n selectDecade = 'selectDecade',\n selectDay = 'selectDay',\n selectHour = 'selectHour',\n selectMinute = 'selectMinute',\n selectSecond = 'selectSecond',\n incrementHours = 'incrementHours',\n incrementMinutes = 'incrementMinutes',\n incrementSeconds = 'incrementSeconds',\n decrementHours = 'decrementHours',\n decrementMinutes = 'decrementMinutes',\n decrementSeconds = 'decrementSeconds',\n toggleMeridiem = 'toggleMeridiem',\n togglePicker = 'togglePicker',\n showClock = 'showClock',\n showHours = 'showHours',\n showMinutes = 'showMinutes',\n showSeconds = 'showSeconds',\n clear = 'clear',\n close = 'close',\n today = 'today',\n}\n\nexport default ActionTypes;\n","import { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `date`\n */\nexport default class DateDisplay {\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.daysContainer);\n\n container.append(...this._daysOfTheWeek());\n\n if (this.optionsStore.options.display.calendarWeeks) {\n const div = document.createElement('div');\n div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight);\n container.appendChild(div);\n }\n\n const { rangeHoverEvent, rangeHoverOutEvent } =\n this.handleMouseEvents(container);\n\n for (let i = 0; i < 42; i++) {\n if (i !== 0 && i % 7 === 0) {\n if (this.optionsStore.options.display.calendarWeeks) {\n const div = document.createElement('div');\n div.classList.add(\n Namespace.css.calendarWeeks,\n Namespace.css.noHighlight\n );\n container.appendChild(div);\n }\n }\n\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectDay);\n container.appendChild(div);\n\n // if hover is supported then add the events\n if (\n matchMedia('(hover: hover)').matches &&\n this.optionsStore.options.dateRange\n ) {\n div.addEventListener('mouseover', rangeHoverEvent);\n div.addEventListener('mouseout', rangeHoverOutEvent);\n }\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.daysContainer\n )[0] as HTMLElement;\n\n this._updateCalendarView(container);\n\n const innerDate = this.optionsStore.viewDate.clone\n .startOf(Unit.month)\n .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek)\n .manipulate(12, Unit.hours);\n\n this._handleCalendarWeeks(container, innerDate.clone);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectDay}\"]`)\n .forEach((element: HTMLElement) => {\n const classes: string[] = [];\n classes.push(Namespace.css.day);\n\n if (innerDate.isBefore(this.optionsStore.viewDate, Unit.month)) {\n classes.push(Namespace.css.old);\n }\n if (innerDate.isAfter(this.optionsStore.viewDate, Unit.month)) {\n classes.push(Namespace.css.new);\n }\n\n if (\n !this.optionsStore.unset &&\n !this.optionsStore.options.dateRange &&\n this.dates.isPicked(innerDate, Unit.date)\n ) {\n classes.push(Namespace.css.active);\n }\n if (!this.validation.isValid(innerDate, Unit.date)) {\n classes.push(Namespace.css.disabled);\n }\n if (innerDate.isSame(new DateTime(), Unit.date)) {\n classes.push(Namespace.css.today);\n }\n if (innerDate.weekDay === 0 || innerDate.weekDay === 6) {\n classes.push(Namespace.css.weekend);\n }\n\n this._handleDateRange(innerDate, classes);\n\n paint(Unit.date, innerDate, classes, element);\n\n element.classList.remove(...element.classList);\n element.classList.add(...classes);\n element.setAttribute('data-value', this._dateToDataValue(innerDate));\n element.setAttribute('data-day', `${innerDate.date}`);\n element.innerText = innerDate.parts(undefined, {\n day: 'numeric',\n }).day;\n innerDate.manipulate(1, Unit.date);\n });\n }\n\n private _dateToDataValue(date: DateTime): string {\n if (!DateTime.isValid(date)) return '';\n\n return `${date.year}-${date.monthFormatted}-${date.dateFormatted}`;\n }\n\n private _handleDateRange(innerDate: DateTime, classes: string[]) {\n const rangeStart = this.dates.picked[0];\n const rangeEnd = this.dates.picked[1];\n\n if (this.optionsStore.options.dateRange) {\n if (innerDate.isBetween(rangeStart, rangeEnd, Unit.date)) {\n classes.push(Namespace.css.rangeIn);\n }\n\n if (innerDate.isSame(rangeStart, Unit.date)) {\n classes.push(Namespace.css.rangeStart);\n }\n\n if (innerDate.isSame(rangeEnd, Unit.date)) {\n classes.push(Namespace.css.rangeEnd);\n }\n }\n }\n\n private handleMouseEvents(container: HTMLElement) {\n const rangeHoverEvent = (e: MouseEvent) => {\n const currentTarget = e?.currentTarget as HTMLElement;\n\n // if we have 0 or 2 selected or if the target is disabled then ignore\n if (\n this.dates.picked.length !== 1 ||\n currentTarget.classList.contains(Namespace.css.disabled)\n )\n return;\n\n // select all the date divs\n const allDays = [...container.querySelectorAll('.day')] as HTMLElement[];\n\n // get the date value from the element being hovered over\n const attributeValue = currentTarget.getAttribute('data-value');\n\n // format the string to a date\n const innerDate = DateTime.fromString(attributeValue, {\n format: 'yyyy-MM-dd',\n });\n\n // find the position of the target in the date container\n const dayIndex = allDays.findIndex(\n (e) => e.getAttribute('data-value') === attributeValue\n );\n\n // find the first and second selected dates\n const rangeStart = this.dates.picked[0];\n const rangeEnd = this.dates.picked[1];\n\n //format the start date so that it can be found by the attribute\n const rangeStartFormatted = this._dateToDataValue(rangeStart);\n const rangeStartIndex = allDays.findIndex(\n (e) => e.getAttribute('data-value') === rangeStartFormatted\n );\n const rangeStartElement = allDays[rangeStartIndex];\n\n //make sure we don't leave start/end classes if we don't need them\n if (!innerDate.isSame(rangeStart, Unit.date)) {\n currentTarget.classList.remove(Namespace.css.rangeStart);\n }\n\n if (!innerDate.isSame(rangeEnd, Unit.date)) {\n currentTarget.classList.remove(Namespace.css.rangeEnd);\n }\n\n // the following figures out which direct from start date is selected\n // the selection \"cap\" classes are applied if needed\n // otherwise all the dates between will get the `rangeIn` class.\n // We make this selection based on the element's index and the rangeStart index\n\n let lambda: (_, index) => boolean;\n\n if (innerDate.isBefore(rangeStart)) {\n currentTarget.classList.add(Namespace.css.rangeStart);\n rangeStartElement?.classList.remove(Namespace.css.rangeStart);\n rangeStartElement?.classList.add(Namespace.css.rangeEnd);\n lambda = (_, index) => index > dayIndex && index < rangeStartIndex;\n } else {\n currentTarget.classList.add(Namespace.css.rangeEnd);\n rangeStartElement?.classList.remove(Namespace.css.rangeEnd);\n rangeStartElement?.classList.add(Namespace.css.rangeStart);\n lambda = (_, index) => index < dayIndex && index > rangeStartIndex;\n }\n\n allDays.filter(lambda).forEach((e) => {\n e.classList.add(Namespace.css.rangeIn);\n });\n };\n\n const rangeHoverOutEvent = (e: MouseEvent) => {\n // find all the dates in the container\n const allDays = [...container.querySelectorAll('.day')] as HTMLElement[];\n\n // if only the start is selected, remove all the rangeIn classes\n // we do this because once the user hovers over a new date the range will be recalculated.\n if (this.dates.picked.length === 1)\n allDays.forEach((e) => e.classList.remove(Namespace.css.rangeIn));\n\n // if we have 0 or 2 dates selected then ignore\n if (this.dates.picked.length !== 1) return;\n\n const currentTarget = e?.currentTarget as HTMLElement;\n\n // get the elements date from the attribute value\n const innerDate = new DateTime(currentTarget.getAttribute('data-value'));\n\n // verify selections and remove invalid classes\n if (!innerDate.isSame(this.dates.picked[0], Unit.date)) {\n currentTarget.classList.remove(Namespace.css.rangeStart);\n }\n\n if (!innerDate.isSame(this.dates.picked[1], Unit.date)) {\n currentTarget.classList.remove(Namespace.css.rangeEnd);\n }\n };\n\n return { rangeHoverEvent, rangeHoverOutEvent };\n }\n\n private _updateCalendarView(container: Element) {\n if (this.optionsStore.currentView !== 'calendar') return;\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n switcher.setAttribute(\n Namespace.css.daysContainer,\n this.optionsStore.viewDate.format(\n this.optionsStore.options.localization.dayViewHeaderFormat\n )\n );\n this.optionsStore.options.display.components.month\n ? switcher.classList.remove(Namespace.css.disabled)\n : switcher.classList.add(Namespace.css.disabled);\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.month),\n Unit.month\n )\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.month),\n Unit.month\n )\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n }\n\n /***\n * Generates a html row that contains the days of the week.\n * @private\n */\n private _daysOfTheWeek(): HTMLElement[] {\n const innerDate = this.optionsStore.viewDate.clone\n .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek)\n .startOf(Unit.date);\n const row = [];\n document.createElement('div');\n\n if (this.optionsStore.options.display.calendarWeeks) {\n const htmlDivElement = document.createElement('div');\n htmlDivElement.classList.add(\n Namespace.css.calendarWeeks,\n Namespace.css.noHighlight\n );\n htmlDivElement.innerText = '#';\n row.push(htmlDivElement);\n }\n\n for (let i = 0; i < 7; i++) {\n const htmlDivElement = document.createElement('div');\n htmlDivElement.classList.add(\n Namespace.css.dayOfTheWeek,\n Namespace.css.noHighlight\n );\n htmlDivElement.innerText = innerDate.format({ weekday: 'short' });\n innerDate.manipulate(1, Unit.date);\n row.push(htmlDivElement);\n }\n\n return row;\n }\n\n private _handleCalendarWeeks(container: HTMLElement, innerDate: DateTime) {\n [...container.querySelectorAll(`.${Namespace.css.calendarWeeks}`)]\n .filter((e: HTMLElement) => e.innerText !== '#')\n .forEach((element: HTMLElement) => {\n element.innerText = `${innerDate.week}`;\n innerDate.manipulate(7, Unit.date);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `month`\n */\nexport default class MonthDisplay {\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.monthsContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectMonth);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.monthsContainer\n )[0];\n\n if (this.optionsStore.currentView === 'months') {\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n switcher.setAttribute(\n Namespace.css.monthsContainer,\n this.optionsStore.viewDate.format({ year: 'numeric' })\n );\n\n this.optionsStore.options.display.components.year\n ? switcher.classList.remove(Namespace.css.disabled)\n : switcher.classList.add(Namespace.css.disabled);\n\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.year),\n Unit.year\n )\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.year),\n Unit.year\n )\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n }\n\n const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.year);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectMonth}\"]`)\n .forEach((containerClone: HTMLElement, index) => {\n const classes = [];\n classes.push(Namespace.css.month);\n\n if (\n !this.optionsStore.unset &&\n this.dates.isPicked(innerDate, Unit.month)\n ) {\n classes.push(Namespace.css.active);\n }\n if (!this.validation.isValid(innerDate, Unit.month)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.month, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${index}`);\n containerClone.innerText = `${innerDate.format({ month: 'short' })}`;\n innerDate.manipulate(1, Unit.month);\n });\n }\n}\n","import { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Dates from '../../dates';\nimport Validation from '../../validation';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `year`\n */\nexport default class YearDisplay {\n private _startYear: DateTime;\n private _endYear: DateTime;\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.yearsContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectYear);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint) {\n this._startYear = this.optionsStore.viewDate.clone.manipulate(\n -1,\n Unit.year\n );\n this._endYear = this.optionsStore.viewDate.clone.manipulate(10, Unit.year);\n\n const container = widget.getElementsByClassName(\n Namespace.css.yearsContainer\n )[0];\n\n if (this.optionsStore.currentView === 'years') {\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n switcher.setAttribute(\n Namespace.css.yearsContainer,\n `${this._startYear.format({ year: 'numeric' })}-${this._endYear.format({\n year: 'numeric',\n })}`\n );\n\n this.optionsStore.options.display.components.decades\n ? switcher.classList.remove(Namespace.css.disabled)\n : switcher.classList.add(Namespace.css.disabled);\n\n this.validation.isValid(this._startYear, Unit.year)\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n this.validation.isValid(this._endYear, Unit.year)\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n }\n\n const innerDate = this.optionsStore.viewDate.clone\n .startOf(Unit.year)\n .manipulate(-1, Unit.year);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectYear}\"]`)\n .forEach((containerClone: HTMLElement) => {\n const classes = [];\n classes.push(Namespace.css.year);\n\n if (\n !this.optionsStore.unset &&\n this.dates.isPicked(innerDate, Unit.year)\n ) {\n classes.push(Namespace.css.active);\n }\n if (!this.validation.isValid(innerDate, Unit.year)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.year, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.year}`);\n containerClone.innerText = innerDate.format({ year: 'numeric' });\n\n innerDate.manipulate(1, Unit.year);\n });\n }\n}\n","import Dates from '../../dates';\nimport { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `seconds`\n */\nexport default class DecadeDisplay {\n private _startDecade: DateTime;\n private _endDecade: DateTime;\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the display\n * @private\n */\n getPicker() {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.decadesContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectDecade);\n container.appendChild(div);\n }\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint) {\n const [start, end] = Dates.getStartEndYear(\n 100,\n this.optionsStore.viewDate.year\n );\n this._startDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\n this._startDecade.year = start;\n this._endDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\n this._endDecade.year = end;\n\n const container = widget.getElementsByClassName(\n Namespace.css.decadesContainer\n )[0];\n\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n if (this.optionsStore.currentView === 'decades') {\n switcher.setAttribute(\n Namespace.css.decadesContainer,\n `${this._startDecade.format({\n year: 'numeric',\n })}-${this._endDecade.format({ year: 'numeric' })}`\n );\n\n this.validation.isValid(this._startDecade, Unit.year)\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n this.validation.isValid(this._endDecade, Unit.year)\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n }\n\n const pickedYears = this.dates.picked.map((x) => x.year);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectDecade}\"]`)\n .forEach((containerClone: HTMLElement, index) => {\n if (index === 0) {\n containerClone.classList.add(Namespace.css.old);\n if (this._startDecade.year - 10 < 0) {\n containerClone.textContent = ' ';\n previous.classList.add(Namespace.css.disabled);\n containerClone.classList.add(Namespace.css.disabled);\n containerClone.setAttribute('data-value', '');\n return;\n } else {\n containerClone.innerText = this._startDecade.clone\n .manipulate(-10, Unit.year)\n .format({ year: 'numeric' });\n containerClone.setAttribute(\n 'data-value',\n `${this._startDecade.year}`\n );\n return;\n }\n }\n\n const classes = [];\n classes.push(Namespace.css.decade);\n const startDecadeYear = this._startDecade.year;\n const endDecadeYear = this._startDecade.year + 9;\n\n if (\n !this.optionsStore.unset &&\n pickedYears.filter((x) => x >= startDecadeYear && x <= endDecadeYear)\n .length > 0\n ) {\n classes.push(Namespace.css.active);\n }\n\n paint('decade', this._startDecade, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${this._startDecade.year}`);\n containerClone.innerText = `${this._startDecade.format({\n year: 'numeric',\n })}`;\n\n this._startDecade.manipulate(10, Unit.year);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates the clock display\n */\nexport default class TimeDisplay {\n private _gridColumns = '';\n private optionsStore: OptionsStore;\n private validation: Validation;\n private dates: Dates;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the clock display\n * @private\n */\n getPicker(iconTag: (iconClass: string) => HTMLElement): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.clockContainer);\n\n container.append(...this._grid(iconTag));\n\n return container;\n }\n\n /**\n * Populates the various elements with in the clock display\n * like the current hour and if the manipulation icons are enabled.\n * @private\n */\n _update(widget: HTMLElement): void {\n const timesDiv = (\n widget.getElementsByClassName(Namespace.css.clockContainer)[0]\n );\n let lastPicked = this.dates.lastPicked?.clone;\n if (!lastPicked && this.optionsStore.options.useCurrent)\n lastPicked = this.optionsStore.viewDate.clone;\n\n timesDiv\n .querySelectorAll('.disabled')\n .forEach((element) => element.classList.remove(Namespace.css.disabled));\n\n if (this.optionsStore.options.display.components.hours) {\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.hours),\n Unit.hours\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.incrementHours}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.hours),\n Unit.hours\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.decrementHours}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n timesDiv.querySelector(\n `[data-time-component=${Unit.hours}]`\n ).innerText = lastPicked\n ? lastPicked.getHoursFormatted(\n this.optionsStore.options.localization.hourCycle\n )\n : '--';\n }\n\n if (this.optionsStore.options.display.components.minutes) {\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.minutes),\n Unit.minutes\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.incrementMinutes}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.minutes),\n Unit.minutes\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.decrementMinutes}]`)\n .classList.add(Namespace.css.disabled);\n }\n timesDiv.querySelector(\n `[data-time-component=${Unit.minutes}]`\n ).innerText = lastPicked ? lastPicked.minutesFormatted : '--';\n }\n\n if (this.optionsStore.options.display.components.seconds) {\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.seconds),\n Unit.seconds\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.incrementSeconds}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.seconds),\n Unit.seconds\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.decrementSeconds}]`)\n .classList.add(Namespace.css.disabled);\n }\n timesDiv.querySelector(\n `[data-time-component=${Unit.seconds}]`\n ).innerText = lastPicked ? lastPicked.secondsFormatted : '--';\n }\n\n if (this.optionsStore.isTwelveHour) {\n const toggle = timesDiv.querySelector(\n `[data-action=${ActionTypes.toggleMeridiem}]`\n );\n\n const meridiemDate = (lastPicked || this.optionsStore.viewDate).clone;\n\n toggle.innerText = meridiemDate.meridiem();\n\n if (\n !this.validation.isValid(\n meridiemDate.manipulate(\n meridiemDate.hours >= 12 ? -12 : 12,\n Unit.hours\n )\n )\n ) {\n toggle.classList.add(Namespace.css.disabled);\n } else {\n toggle.classList.remove(Namespace.css.disabled);\n }\n }\n\n timesDiv.style.gridTemplateAreas = `\"${this._gridColumns}\"`;\n }\n\n /**\n * Creates the table for the clock display depending on what options are selected.\n * @private\n */\n private _grid(iconTag: (iconClass: string) => HTMLElement): HTMLElement[] {\n this._gridColumns = '';\n const top = [],\n middle = [],\n bottom = [],\n separator = document.createElement('div'),\n upIcon = iconTag(this.optionsStore.options.display.icons.up),\n downIcon = iconTag(this.optionsStore.options.display.icons.down);\n\n separator.classList.add(Namespace.css.separator, Namespace.css.noHighlight);\n const separatorColon = separator.cloneNode(true);\n separatorColon.innerHTML = ':';\n\n const getSeparator = (colon = false): HTMLElement => {\n return colon\n ? separatorColon.cloneNode(true)\n : separator.cloneNode(true);\n };\n\n if (this.optionsStore.options.display.components.hours) {\n let divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.incrementHour\n );\n divElement.setAttribute('data-action', ActionTypes.incrementHours);\n divElement.appendChild(upIcon.cloneNode(true));\n top.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.pickHour\n );\n divElement.setAttribute('data-action', ActionTypes.showHours);\n divElement.setAttribute('data-time-component', Unit.hours);\n middle.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.decrementHour\n );\n divElement.setAttribute('data-action', ActionTypes.decrementHours);\n divElement.appendChild(downIcon.cloneNode(true));\n bottom.push(divElement);\n this._gridColumns += 'a';\n }\n\n if (this.optionsStore.options.display.components.minutes) {\n this._gridColumns += ' a';\n if (this.optionsStore.options.display.components.hours) {\n top.push(getSeparator());\n middle.push(getSeparator(true));\n bottom.push(getSeparator());\n this._gridColumns += ' a';\n }\n let divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.incrementMinute\n );\n divElement.setAttribute('data-action', ActionTypes.incrementMinutes);\n divElement.appendChild(upIcon.cloneNode(true));\n top.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.pickMinute\n );\n divElement.setAttribute('data-action', ActionTypes.showMinutes);\n divElement.setAttribute('data-time-component', Unit.minutes);\n middle.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.decrementMinute\n );\n divElement.setAttribute('data-action', ActionTypes.decrementMinutes);\n divElement.appendChild(downIcon.cloneNode(true));\n bottom.push(divElement);\n }\n\n if (this.optionsStore.options.display.components.seconds) {\n this._gridColumns += ' a';\n if (this.optionsStore.options.display.components.minutes) {\n top.push(getSeparator());\n middle.push(getSeparator(true));\n bottom.push(getSeparator());\n this._gridColumns += ' a';\n }\n let divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.incrementSecond\n );\n divElement.setAttribute('data-action', ActionTypes.incrementSeconds);\n divElement.appendChild(upIcon.cloneNode(true));\n top.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.pickSecond\n );\n divElement.setAttribute('data-action', ActionTypes.showSeconds);\n divElement.setAttribute('data-time-component', Unit.seconds);\n middle.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.decrementSecond\n );\n divElement.setAttribute('data-action', ActionTypes.decrementSeconds);\n divElement.appendChild(downIcon.cloneNode(true));\n bottom.push(divElement);\n }\n\n if (this.optionsStore.isTwelveHour) {\n this._gridColumns += ' a';\n let divElement = getSeparator();\n top.push(divElement);\n\n const button = document.createElement('button');\n button.setAttribute('type', 'button');\n button.setAttribute(\n 'title',\n this.optionsStore.options.localization.toggleMeridiem\n );\n button.setAttribute('data-action', ActionTypes.toggleMeridiem);\n button.setAttribute('tabindex', '-1');\n if (Namespace.css.toggleMeridiem.includes(',')) {\n //todo move this to paint function?\n button.classList.add(...Namespace.css.toggleMeridiem.split(','));\n } else button.classList.add(Namespace.css.toggleMeridiem);\n\n divElement = document.createElement('div');\n divElement.classList.add(Namespace.css.noHighlight);\n divElement.appendChild(button);\n middle.push(divElement);\n\n divElement = getSeparator();\n bottom.push(divElement);\n }\n\n this._gridColumns = this._gridColumns.trim();\n\n return [...top, ...middle, ...bottom];\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `hours`\n */\nexport default class HourDisplay {\n private optionsStore: OptionsStore;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.hourContainer);\n\n for (let i = 0; i < (this.optionsStore.isTwelveHour ? 12 : 24); i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectHour);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.hourContainer\n )[0];\n const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.date);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectHour}\"]`)\n .forEach((containerClone: HTMLElement) => {\n const classes = [];\n classes.push(Namespace.css.hour);\n\n if (!this.validation.isValid(innerDate, Unit.hours)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.hours, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.hours}`);\n containerClone.innerText = innerDate.getHoursFormatted(\n this.optionsStore.options.localization.hourCycle\n );\n innerDate.manipulate(1, Unit.hours);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `minutes`\n */\nexport default class MinuteDisplay {\n private optionsStore: OptionsStore;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.minuteContainer);\n\n const step =\n this.optionsStore.options.stepping === 1\n ? 5\n : this.optionsStore.options.stepping;\n for (let i = 0; i < 60 / step; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectMinute);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.minuteContainer\n )[0];\n const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.hours);\n const step =\n this.optionsStore.options.stepping === 1\n ? 5\n : this.optionsStore.options.stepping;\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectMinute}\"]`)\n .forEach((containerClone: HTMLElement) => {\n const classes = [];\n classes.push(Namespace.css.minute);\n\n if (!this.validation.isValid(innerDate, Unit.minutes)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.minutes, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.minutes}`);\n containerClone.innerText = innerDate.minutesFormatted;\n innerDate.manipulate(step, Unit.minutes);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `seconds`\n */\nexport default class secondDisplay {\n private optionsStore: OptionsStore;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.secondContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectSecond);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.secondContainer\n )[0];\n const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.minutes);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectSecond}\"]`)\n .forEach((containerClone: HTMLElement) => {\n const classes = [];\n classes.push(Namespace.css.second);\n\n if (!this.validation.isValid(innerDate, Unit.seconds)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.seconds, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.seconds}`);\n containerClone.innerText = innerDate.secondsFormatted;\n innerDate.manipulate(5, Unit.seconds);\n });\n }\n}\n","import Namespace from '../utilities/namespace';\n\n/**\n * Provides a collapse functionality to the view changes\n */\nexport default class Collapse {\n /**\n * Flips the show/hide state of `target`\n * @param target html element to affect.\n */\n static toggle(target: HTMLElement) {\n if (target.classList.contains(Namespace.css.show)) {\n this.hide(target);\n } else {\n this.show(target);\n }\n }\n\n /**\n * Skips any animation or timeouts and immediately set the element to show.\n * @param target\n */\n static showImmediately(target: HTMLElement) {\n target.classList.remove(Namespace.css.collapsing);\n target.classList.add(Namespace.css.collapse, Namespace.css.show);\n target.style.height = '';\n }\n\n /**\n * If `target` is not already showing, then show after the animation.\n * @param target\n */\n static show(target: HTMLElement) {\n if (\n target.classList.contains(Namespace.css.collapsing) ||\n target.classList.contains(Namespace.css.show)\n )\n return;\n\n let timeOut = null;\n const complete = () => {\n Collapse.showImmediately(target);\n timeOut = null;\n };\n\n target.style.height = '0';\n target.classList.remove(Namespace.css.collapse);\n target.classList.add(Namespace.css.collapsing);\n\n //eslint-disable-next-line @typescript-eslint/no-unused-vars\n timeOut = setTimeout(\n complete,\n this.getTransitionDurationFromElement(target)\n );\n target.style.height = `${target.scrollHeight}px`;\n }\n\n /**\n * Skips any animation or timeouts and immediately set the element to hide.\n * @param target\n */\n static hideImmediately(target: HTMLElement) {\n if (!target) return;\n target.classList.remove(Namespace.css.collapsing, Namespace.css.show);\n target.classList.add(Namespace.css.collapse);\n }\n\n /**\n * If `target` is not already hidden, then hide after the animation.\n * @param target HTML Element\n */\n static hide(target: HTMLElement) {\n if (\n target.classList.contains(Namespace.css.collapsing) ||\n !target.classList.contains(Namespace.css.show)\n )\n return;\n\n let timeOut = null;\n const complete = () => {\n Collapse.hideImmediately(target);\n timeOut = null;\n };\n\n target.style.height = `${target.getBoundingClientRect()['height']}px`;\n\n const reflow = (element) => element.offsetHeight;\n\n reflow(target);\n\n target.classList.remove(Namespace.css.collapse, Namespace.css.show);\n target.classList.add(Namespace.css.collapsing);\n target.style.height = '';\n\n //eslint-disable-next-line @typescript-eslint/no-unused-vars\n timeOut = setTimeout(\n complete,\n this.getTransitionDurationFromElement(target)\n );\n }\n\n /**\n * Gets the transition duration from the `element` by getting css properties\n * `transition-duration` and `transition-delay`\n * @param element HTML Element\n */\n private static getTransitionDurationFromElement = (element: HTMLElement) => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } =\n window.getComputedStyle(element);\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n\n return (\n (Number.parseFloat(transitionDuration) +\n Number.parseFloat(transitionDelay)) *\n 1000\n );\n };\n}\n","import DateDisplay from './calendar/date-display';\nimport MonthDisplay from './calendar/month-display';\nimport YearDisplay from './calendar/year-display';\nimport DecadeDisplay from './calendar/decade-display';\nimport TimeDisplay from './time/time-display';\nimport HourDisplay from './time/hour-display';\nimport MinuteDisplay from './time/minute-display';\nimport SecondDisplay from './time/second-display';\nimport { DateTime, Unit } from '../datetime';\nimport Namespace from '../utilities/namespace';\nimport { HideEvent } from '../utilities/event-types';\nimport Collapse from './collapse';\nimport Validation from '../validation';\nimport Dates from '../dates';\nimport { EventEmitters, ViewUpdateValues } from '../utilities/event-emitter';\nimport { serviceLocator } from '../utilities/service-locator';\nimport ActionTypes from '../utilities/action-types';\nimport CalendarModes from '../utilities/calendar-modes';\nimport { OptionsStore } from '../utilities/optionsStore';\n\n/**\n * Main class for all things display related.\n */\nexport default class Display {\n private _widget: HTMLElement;\n private _popperInstance: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n private _isVisible = false;\n private optionsStore: OptionsStore;\n private validation: Validation;\n private dates: Dates;\n\n dateDisplay: DateDisplay;\n monthDisplay: MonthDisplay;\n yearDisplay: YearDisplay;\n decadeDisplay: DecadeDisplay;\n timeDisplay: TimeDisplay;\n hourDisplay: HourDisplay;\n minuteDisplay: MinuteDisplay;\n secondDisplay: SecondDisplay;\n private _eventEmitters: EventEmitters;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n this.dates = serviceLocator.locate(Dates);\n\n this.dateDisplay = serviceLocator.locate(DateDisplay);\n this.monthDisplay = serviceLocator.locate(MonthDisplay);\n this.yearDisplay = serviceLocator.locate(YearDisplay);\n this.decadeDisplay = serviceLocator.locate(DecadeDisplay);\n this.timeDisplay = serviceLocator.locate(TimeDisplay);\n this.hourDisplay = serviceLocator.locate(HourDisplay);\n this.minuteDisplay = serviceLocator.locate(MinuteDisplay);\n this.secondDisplay = serviceLocator.locate(SecondDisplay);\n this._eventEmitters = serviceLocator.locate(EventEmitters);\n this._widget = undefined;\n\n this._eventEmitters.updateDisplay.subscribe((result: ViewUpdateValues) => {\n this._update(result);\n });\n }\n\n /**\n * Returns the widget body or undefined\n * @private\n */\n get widget(): HTMLElement | undefined {\n return this._widget;\n }\n\n get dateContainer(): HTMLElement | undefined {\n return this.widget?.querySelector(`div.${Namespace.css.dateContainer}`);\n }\n\n get timeContainer(): HTMLElement | undefined {\n return this.widget?.querySelector(`div.${Namespace.css.timeContainer}`);\n }\n\n /**\n * Returns this visible state of the picker (shown)\n */\n get isVisible() {\n return this._isVisible;\n }\n\n /**\n * Updates the table for a particular unit. Used when an option as changed or\n * whenever the class list might need to be refreshed.\n * @param unit\n * @private\n */\n _update(unit: ViewUpdateValues): void {\n if (!this.widget) return;\n switch (unit) {\n case Unit.seconds:\n this.secondDisplay._update(this.widget, this.paint);\n break;\n case Unit.minutes:\n this.minuteDisplay._update(this.widget, this.paint);\n break;\n case Unit.hours:\n this.hourDisplay._update(this.widget, this.paint);\n break;\n case Unit.date:\n this.dateDisplay._update(this.widget, this.paint);\n break;\n case Unit.month:\n this.monthDisplay._update(this.widget, this.paint);\n break;\n case Unit.year:\n this.yearDisplay._update(this.widget, this.paint);\n break;\n case 'decade':\n this.decadeDisplay._update(this.widget, this.paint);\n break;\n case 'clock':\n if (!this._hasTime) break;\n this.timeDisplay._update(this.widget);\n this._update(Unit.hours);\n this._update(Unit.minutes);\n this._update(Unit.seconds);\n break;\n case 'calendar':\n this._update(Unit.date);\n this._update(Unit.year);\n this._update(Unit.month);\n this.decadeDisplay._update(this.widget, this.paint);\n this._updateCalendarHeader();\n break;\n case 'all':\n if (this._hasTime) {\n this._update('clock');\n }\n if (this._hasDate) {\n this._update('calendar');\n }\n }\n }\n\n // noinspection JSUnusedLocalSymbols\n /**\n * Allows developers to add/remove classes from an element.\n * @param _unit\n * @param _date\n * @param _classes\n * @param _element\n */\n\n /* eslint-disable @typescript-eslint/no-unused-vars */\n paint(\n _unit: Unit | 'decade',\n _date: DateTime,\n _classes: string[],\n _element: HTMLElement\n ) {\n // implemented in plugin\n }\n\n /**\n * Shows the picker and creates a Popper instance if needed.\n * Add document click event to hide when clicking outside the picker.\n * fires Events#show\n */\n show(): void {\n if (this.widget == undefined) {\n this._showSetDefaultIfNeeded();\n\n this._buildWidget();\n this._updateTheme();\n\n this._showSetupViewMode();\n\n if (!this.optionsStore.options.display.inline) {\n // If needed to change the parent container\n const container = this.optionsStore.options?.container || document.body;\n const placement =\n this.optionsStore.options?.display?.placement || 'bottom';\n\n container.appendChild(this.widget);\n this.createPopup(this.optionsStore.element, this.widget, {\n modifiers: [{ name: 'eventListeners', enabled: true }],\n //#2400\n placement:\n document.documentElement.dir === 'rtl'\n ? `${placement}-end`\n : `${placement}-start`,\n }).then();\n } else {\n this.optionsStore.element.appendChild(this.widget);\n }\n\n if (this.optionsStore.options.display.viewMode == 'clock') {\n this._eventEmitters.action.emit({\n e: null,\n action: ActionTypes.showClock,\n });\n }\n\n this.widget\n .querySelectorAll('[data-action]')\n .forEach((element) =>\n element.addEventListener('click', this._actionsClickEvent)\n );\n\n // show the clock when using sideBySide\n if (this._hasTime && this.optionsStore.options.display.sideBySide) {\n this.timeDisplay._update(this.widget);\n (\n this.widget.getElementsByClassName(\n Namespace.css.clockContainer\n )[0] as HTMLElement\n ).style.display = 'grid';\n }\n }\n\n this.widget.classList.add(Namespace.css.show);\n if (!this.optionsStore.options.display.inline) {\n this.updatePopup();\n document.addEventListener('click', this._documentClickEvent);\n }\n this._eventEmitters.triggerEvent.emit({ type: Namespace.events.show });\n this._isVisible = true;\n }\n\n private _showSetupViewMode() {\n // If modeView is only clock\n const onlyClock = this._hasTime && !this._hasDate;\n\n // reset the view to the clock if there's no date components\n if (onlyClock) {\n this.optionsStore.currentView = 'clock';\n this._eventEmitters.action.emit({\n e: null,\n action: ActionTypes.showClock,\n });\n }\n // otherwise return to the calendar view\n else if (!this.optionsStore.currentCalendarViewMode) {\n this.optionsStore.currentCalendarViewMode =\n this.optionsStore.minimumCalendarViewMode;\n }\n\n if (!onlyClock && this.optionsStore.options.display.viewMode !== 'clock') {\n if (this._hasTime) {\n if (!this.optionsStore.options.display.sideBySide) {\n Collapse.hideImmediately(this.timeContainer);\n } else {\n Collapse.show(this.timeContainer);\n }\n }\n Collapse.show(this.dateContainer);\n }\n\n if (this._hasDate) {\n this._showMode();\n }\n }\n\n private _showSetDefaultIfNeeded() {\n if (this.dates.picked.length != 0) return;\n\n if (\n this.optionsStore.options.useCurrent &&\n !this.optionsStore.options.defaultDate\n ) {\n const date = new DateTime().setLocalization(\n this.optionsStore.options.localization\n );\n if (!this.optionsStore.options.keepInvalid) {\n let tries = 0;\n let direction = 1;\n if (this.optionsStore.options.restrictions.maxDate?.isBefore(date)) {\n direction = -1;\n }\n while (!this.validation.isValid(date) && tries > 31) {\n date.manipulate(direction, Unit.date);\n tries++;\n }\n }\n this.dates.setValue(date);\n }\n\n if (this.optionsStore.options.defaultDate) {\n this.dates.setValue(this.optionsStore.options.defaultDate);\n }\n }\n\n async createPopup(\n element: HTMLElement,\n widget: HTMLElement,\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: any\n ): Promise {\n let createPopperFunction;\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((window as any)?.Popper) {\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n createPopperFunction = (window as any)?.Popper?.createPopper;\n } else {\n const { createPopper } = await import('@popperjs/core');\n createPopperFunction = createPopper;\n }\n if (createPopperFunction) {\n this._popperInstance = createPopperFunction(element, widget, options);\n }\n }\n\n updatePopup(): void {\n this._popperInstance?.update();\n }\n\n /**\n * Changes the calendar view mode. E.g. month <-> year\n * @param direction -/+ number to move currentViewMode\n * @private\n */\n _showMode(direction?: number): void {\n if (!this.widget) {\n return;\n }\n if (direction) {\n const max = Math.max(\n this.optionsStore.minimumCalendarViewMode,\n Math.min(3, this.optionsStore.currentCalendarViewMode + direction)\n );\n if (this.optionsStore.currentCalendarViewMode == max) return;\n this.optionsStore.currentCalendarViewMode = max;\n }\n\n this.widget\n .querySelectorAll(\n `.${Namespace.css.dateContainer} > div:not(.${Namespace.css.calendarHeader}), .${Namespace.css.timeContainer} > div:not(.${Namespace.css.clockContainer})`\n )\n .forEach((e: HTMLElement) => (e.style.display = 'none'));\n\n const datePickerMode =\n CalendarModes[this.optionsStore.currentCalendarViewMode];\n const picker: HTMLElement = this.widget.querySelector(\n `.${datePickerMode.className}`\n );\n\n switch (datePickerMode.className) {\n case Namespace.css.decadesContainer:\n this.decadeDisplay._update(this.widget, this.paint);\n break;\n case Namespace.css.yearsContainer:\n this.yearDisplay._update(this.widget, this.paint);\n break;\n case Namespace.css.monthsContainer:\n this.monthDisplay._update(this.widget, this.paint);\n break;\n case Namespace.css.daysContainer:\n this.dateDisplay._update(this.widget, this.paint);\n break;\n }\n\n picker.style.display = 'grid';\n\n if (this.optionsStore.options.display.sideBySide)\n ((\n this.widget.querySelectorAll(`.${Namespace.css.clockContainer}`)[0]\n )).style.display = 'grid';\n\n this._updateCalendarHeader();\n this._eventEmitters.viewUpdate.emit();\n }\n\n /**\n * Changes the theme. E.g. light, dark or auto\n * @param theme the theme name\n * @private\n */\n _updateTheme(theme?: 'light' | 'dark' | 'auto'): void {\n if (!this.widget) {\n return;\n }\n if (theme) {\n if (this.optionsStore.options.display.theme === theme) return;\n this.optionsStore.options.display.theme = theme;\n }\n\n this.widget.classList.remove('light', 'dark');\n this.widget.classList.add(this._getThemeClass());\n\n if (this.optionsStore.options.display.theme === 'auto') {\n window\n .matchMedia(Namespace.css.isDarkPreferredQuery)\n .addEventListener('change', () => this._updateTheme());\n } else {\n window\n .matchMedia(Namespace.css.isDarkPreferredQuery)\n .removeEventListener('change', () => this._updateTheme());\n }\n }\n\n _getThemeClass(): string {\n const currentTheme = this.optionsStore.options.display.theme || 'auto';\n\n const isDarkMode =\n window.matchMedia &&\n window.matchMedia(Namespace.css.isDarkPreferredQuery).matches;\n\n switch (currentTheme) {\n case 'light':\n return Namespace.css.lightTheme;\n case 'dark':\n return Namespace.css.darkTheme;\n case 'auto':\n return isDarkMode ? Namespace.css.darkTheme : Namespace.css.lightTheme;\n }\n }\n\n _updateCalendarHeader() {\n if (!this._hasDate) return;\n const showing = [\n ...this.widget.querySelector(\n `.${Namespace.css.dateContainer} div[style*=\"display: grid\"]`\n ).classList,\n ].find((x) => x.startsWith(Namespace.css.dateContainer));\n\n const [previous, switcher, next] = this.widget\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n switch (showing) {\n case Namespace.css.decadesContainer:\n previous.setAttribute(\n 'title',\n this.optionsStore.options.localization.previousCentury\n );\n switcher.setAttribute('title', '');\n next.setAttribute(\n 'title',\n this.optionsStore.options.localization.nextCentury\n );\n break;\n case Namespace.css.yearsContainer:\n previous.setAttribute(\n 'title',\n this.optionsStore.options.localization.previousDecade\n );\n switcher.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectDecade\n );\n next.setAttribute(\n 'title',\n this.optionsStore.options.localization.nextDecade\n );\n break;\n case Namespace.css.monthsContainer:\n previous.setAttribute(\n 'title',\n this.optionsStore.options.localization.previousYear\n );\n switcher.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectYear\n );\n next.setAttribute(\n 'title',\n this.optionsStore.options.localization.nextYear\n );\n break;\n case Namespace.css.daysContainer:\n previous.setAttribute(\n 'title',\n this.optionsStore.options.localization.previousMonth\n );\n switcher.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectMonth\n );\n next.setAttribute(\n 'title',\n this.optionsStore.options.localization.nextMonth\n );\n switcher.setAttribute(\n showing,\n this.optionsStore.viewDate.format(\n this.optionsStore.options.localization.dayViewHeaderFormat\n )\n );\n break;\n }\n switcher.innerText = switcher.getAttribute(showing);\n }\n\n /**\n * Hides the picker if needed.\n * Remove document click event to hide when clicking outside the picker.\n * fires Events#hide\n */\n hide(): void {\n if (!this.widget || !this._isVisible) return;\n\n this.widget.classList.remove(Namespace.css.show);\n\n if (this._isVisible) {\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.hide,\n date: this.optionsStore.unset ? null : this.dates.lastPicked?.clone,\n } as HideEvent);\n this._isVisible = false;\n }\n\n document.removeEventListener('click', this._documentClickEvent);\n }\n\n /**\n * Toggles the picker's open state. Fires a show/hide event depending.\n */\n toggle() {\n return this._isVisible ? this.hide() : this.show();\n }\n\n /**\n * Removes document and data-action click listener and reset the widget\n * @private\n */\n _dispose() {\n document.removeEventListener('click', this._documentClickEvent);\n if (!this.widget) return;\n this.widget\n .querySelectorAll('[data-action]')\n .forEach((element) =>\n element.removeEventListener('click', this._actionsClickEvent)\n );\n this.widget.parentNode.removeChild(this.widget);\n this._widget = undefined;\n }\n\n /**\n * Builds the widgets html template.\n * @private\n */\n private _buildWidget(): HTMLElement {\n const template = document.createElement('div');\n template.classList.add(Namespace.css.widget);\n\n const dateView = document.createElement('div');\n dateView.classList.add(Namespace.css.dateContainer);\n dateView.append(\n this.getHeadTemplate(),\n this.decadeDisplay.getPicker(),\n this.yearDisplay.getPicker(),\n this.monthDisplay.getPicker(),\n this.dateDisplay.getPicker()\n );\n\n const timeView = document.createElement('div');\n timeView.classList.add(Namespace.css.timeContainer);\n timeView.appendChild(this.timeDisplay.getPicker(this._iconTag.bind(this)));\n timeView.appendChild(this.hourDisplay.getPicker());\n timeView.appendChild(this.minuteDisplay.getPicker());\n timeView.appendChild(this.secondDisplay.getPicker());\n\n const toolbar = document.createElement('div');\n toolbar.classList.add(Namespace.css.toolbar);\n toolbar.append(...this.getToolbarElements());\n\n if (this.optionsStore.options.display.inline) {\n template.classList.add(Namespace.css.inline);\n }\n\n if (this.optionsStore.options.display.calendarWeeks) {\n template.classList.add('calendarWeeks');\n }\n\n if (this.optionsStore.options.display.sideBySide && this._hasDateAndTime) {\n this._buildWidgetSideBySide(template, dateView, timeView, toolbar);\n return;\n }\n\n if (this.optionsStore.options.display.toolbarPlacement === 'top') {\n template.appendChild(toolbar);\n }\n\n const setupComponentView = (hasFirst, hasSecond, element, shouldShow) => {\n if (!hasFirst) return;\n if (hasSecond) {\n element.classList.add(Namespace.css.collapse);\n if (shouldShow) element.classList.add(Namespace.css.show);\n }\n template.appendChild(element);\n };\n\n setupComponentView(\n this._hasDate,\n this._hasTime,\n dateView,\n this.optionsStore.options.display.viewMode !== 'clock'\n );\n\n setupComponentView(\n this._hasTime,\n this._hasDate,\n timeView,\n this.optionsStore.options.display.viewMode === 'clock'\n );\n\n if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\n template.appendChild(toolbar);\n }\n\n const arrow = document.createElement('div');\n arrow.classList.add('arrow');\n arrow.setAttribute('data-popper-arrow', '');\n template.appendChild(arrow);\n\n this._widget = template;\n }\n\n private _buildWidgetSideBySide(\n template: HTMLDivElement,\n dateView: HTMLDivElement,\n timeView: HTMLDivElement,\n toolbar: HTMLDivElement\n ) {\n template.classList.add(Namespace.css.sideBySide);\n if (this.optionsStore.options.display.toolbarPlacement === 'top') {\n template.appendChild(toolbar);\n }\n const row = document.createElement('div');\n row.classList.add('td-row');\n dateView.classList.add('td-half');\n timeView.classList.add('td-half');\n\n row.appendChild(dateView);\n row.appendChild(timeView);\n template.appendChild(row);\n if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\n template.appendChild(toolbar);\n }\n this._widget = template;\n }\n\n /**\n * Returns true if the hours, minutes, or seconds component is turned on\n */\n get _hasTime(): boolean {\n return (\n this.optionsStore.options.display.components.clock &&\n (this.optionsStore.options.display.components.hours ||\n this.optionsStore.options.display.components.minutes ||\n this.optionsStore.options.display.components.seconds)\n );\n }\n\n /**\n * Returns true if the year, month, or date component is turned on\n */\n get _hasDate(): boolean {\n return (\n this.optionsStore.options.display.components.calendar &&\n (this.optionsStore.options.display.components.year ||\n this.optionsStore.options.display.components.month ||\n this.optionsStore.options.display.components.date)\n );\n }\n\n get _hasDateAndTime(): boolean {\n return this._hasDate && this._hasTime;\n }\n\n /**\n * Get the toolbar html based on options like buttons => today\n * @private\n */\n getToolbarElements(): HTMLElement[] {\n const toolbar = [];\n\n if (this.optionsStore.options.display.buttons.today) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.today);\n div.setAttribute('title', this.optionsStore.options.localization.today);\n\n div.appendChild(\n this._iconTag(this.optionsStore.options.display.icons.today)\n );\n toolbar.push(div);\n }\n if (\n !this.optionsStore.options.display.sideBySide &&\n this._hasDate &&\n this._hasTime\n ) {\n let title, icon;\n if (this.optionsStore.options.display.viewMode === 'clock') {\n title = this.optionsStore.options.localization.selectDate;\n icon = this.optionsStore.options.display.icons.date;\n } else {\n title = this.optionsStore.options.localization.selectTime;\n icon = this.optionsStore.options.display.icons.time;\n }\n\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.togglePicker);\n div.setAttribute('title', title);\n\n div.appendChild(this._iconTag(icon));\n toolbar.push(div);\n }\n if (this.optionsStore.options.display.buttons.clear) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.clear);\n div.setAttribute('title', this.optionsStore.options.localization.clear);\n\n div.appendChild(\n this._iconTag(this.optionsStore.options.display.icons.clear)\n );\n toolbar.push(div);\n }\n if (this.optionsStore.options.display.buttons.close) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.close);\n div.setAttribute('title', this.optionsStore.options.localization.close);\n\n div.appendChild(\n this._iconTag(this.optionsStore.options.display.icons.close)\n );\n toolbar.push(div);\n }\n\n return toolbar;\n }\n\n /***\n * Builds the base header template with next and previous icons\n * @private\n */\n getHeadTemplate(): HTMLElement {\n const calendarHeader = document.createElement('div');\n calendarHeader.classList.add(Namespace.css.calendarHeader);\n\n const previous = document.createElement('div');\n previous.classList.add(Namespace.css.previous);\n previous.setAttribute('data-action', ActionTypes.previous);\n previous.appendChild(\n this._iconTag(this.optionsStore.options.display.icons.previous)\n );\n\n const switcher = document.createElement('div');\n switcher.classList.add(Namespace.css.switch);\n switcher.setAttribute('data-action', ActionTypes.changeCalendarView);\n\n const next = document.createElement('div');\n next.classList.add(Namespace.css.next);\n next.setAttribute('data-action', ActionTypes.next);\n next.appendChild(\n this._iconTag(this.optionsStore.options.display.icons.next)\n );\n\n calendarHeader.append(previous, switcher, next);\n return calendarHeader;\n }\n\n /**\n * Builds an icon tag as either an ``\n * or with icons => type is `sprites` then a svg tag instead\n * @param iconClass\n * @private\n */\n _iconTag(iconClass: string): HTMLElement | SVGElement {\n if (this.optionsStore.options.display.icons.type === 'sprites') {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n const icon = document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'use'\n );\n icon.setAttribute('xlink:href', iconClass); // Deprecated. Included for backward compatibility\n icon.setAttribute('href', iconClass);\n svg.appendChild(icon);\n\n return svg;\n }\n const icon = document.createElement('i');\n icon.classList.add(...iconClass.split(' '));\n return icon;\n }\n\n /**\n * A document click event to hide the widget if click is outside\n * @private\n * @param e MouseEvent\n */\n private _documentClickEvent = (e: MouseEvent) => {\n if (this.optionsStore.options.debug || (window as any).debug) return; //eslint-disable-line @typescript-eslint/no-explicit-any\n\n if (\n this._isVisible &&\n !e.composedPath().includes(this.widget) && // click inside the widget\n !e.composedPath()?.includes(this.optionsStore.element) // click on the element\n ) {\n this.hide();\n }\n };\n\n /**\n * Click event for any action like selecting a date\n * @param e MouseEvent\n * @private\n */\n private _actionsClickEvent = (e: MouseEvent) => {\n this._eventEmitters.action.emit({ e: e });\n };\n\n /**\n * Causes the widget to get rebuilt on next show. If the picker is already open\n * then hide and reshow it.\n * @private\n */\n _rebuild() {\n const wasVisible = this._isVisible;\n this._dispose();\n if (wasVisible) this.show();\n }\n\n refreshCurrentView() {\n //if the widget is not showing, just destroy it\n if (!this._isVisible) this._dispose();\n\n switch (this.optionsStore.currentView) {\n case 'clock':\n this._update('clock');\n break;\n case 'calendar':\n this._update(Unit.date);\n break;\n case 'months':\n this._update(Unit.month);\n break;\n case 'years':\n this._update(Unit.year);\n break;\n case 'decades':\n this._update('decade');\n break;\n }\n }\n}\n\nexport type Paint = (\n unit: Unit | 'decade',\n innerDate: DateTime,\n classes: string[],\n element: HTMLElement\n) => void;\n","import { DateTime, Unit } from './datetime';\nimport Collapse from './display/collapse';\nimport Namespace from './utilities/namespace';\nimport Dates from './dates';\nimport Validation from './validation';\nimport Display from './display';\nimport { EventEmitters } from './utilities/event-emitter';\nimport { serviceLocator } from './utilities/service-locator.js';\nimport ActionTypes from './utilities/action-types';\nimport CalendarModes from './utilities/calendar-modes';\nimport { OptionsStore } from './utilities/optionsStore';\n\n/**\n * Logic for various click actions\n */\nexport default class Actions {\n private optionsStore: OptionsStore;\n private validation: Validation;\n private dates: Dates;\n private display: Display;\n private _eventEmitters: EventEmitters;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n this.display = serviceLocator.locate(Display);\n this._eventEmitters = serviceLocator.locate(EventEmitters);\n\n this._eventEmitters.action.subscribe((result) => {\n this.do(result.e, result.action);\n });\n }\n\n /**\n * Performs the selected `action`. See ActionTypes\n * @param e This is normally a click event\n * @param action If not provided, then look for a [data-action]\n */\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n do(e: any, action?: ActionTypes) {\n const currentTarget = e?.currentTarget as HTMLElement;\n if (currentTarget?.classList?.contains(Namespace.css.disabled)) return;\n action = action || (currentTarget?.dataset?.action as ActionTypes);\n const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate)\n .clone;\n\n switch (action) {\n case ActionTypes.next:\n case ActionTypes.previous:\n this.handleNextPrevious(action);\n break;\n case ActionTypes.changeCalendarView:\n this.display._showMode(1);\n this.display._updateCalendarHeader();\n break;\n case ActionTypes.selectMonth:\n case ActionTypes.selectYear:\n case ActionTypes.selectDecade:\n this.handleSelectCalendarMode(action, currentTarget);\n break;\n case ActionTypes.selectDay:\n this.handleSelectDay(currentTarget);\n break;\n case ActionTypes.selectHour: {\n let hour = +currentTarget.dataset.value;\n if (lastPicked.hours >= 12 && this.optionsStore.isTwelveHour)\n hour += 12;\n lastPicked.hours = hour;\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n this.hideOrClock(e);\n break;\n }\n case ActionTypes.selectMinute: {\n lastPicked.minutes = +currentTarget.dataset.value;\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n this.hideOrClock(e);\n break;\n }\n case ActionTypes.selectSecond: {\n lastPicked.seconds = +currentTarget.dataset.value;\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n this.hideOrClock(e);\n break;\n }\n case ActionTypes.incrementHours:\n this.manipulateAndSet(lastPicked, Unit.hours);\n break;\n case ActionTypes.incrementMinutes:\n this.manipulateAndSet(\n lastPicked,\n Unit.minutes,\n this.optionsStore.options.stepping\n );\n break;\n case ActionTypes.incrementSeconds:\n this.manipulateAndSet(lastPicked, Unit.seconds);\n break;\n case ActionTypes.decrementHours:\n this.manipulateAndSet(lastPicked, Unit.hours, -1);\n break;\n case ActionTypes.decrementMinutes:\n this.manipulateAndSet(\n lastPicked,\n Unit.minutes,\n this.optionsStore.options.stepping * -1\n );\n break;\n case ActionTypes.decrementSeconds:\n this.manipulateAndSet(lastPicked, Unit.seconds, -1);\n break;\n case ActionTypes.toggleMeridiem:\n this.manipulateAndSet(\n lastPicked,\n Unit.hours,\n this.dates.lastPicked.hours >= 12 ? -12 : 12\n );\n break;\n case ActionTypes.togglePicker:\n this.handleToggle(currentTarget);\n break;\n case ActionTypes.showClock:\n case ActionTypes.showHours:\n case ActionTypes.showMinutes:\n case ActionTypes.showSeconds:\n //make sure the clock is actually displaying\n if (\n !this.optionsStore.options.display.sideBySide &&\n this.optionsStore.currentView !== 'clock'\n ) {\n //hide calendar\n Collapse.hideImmediately(this.display.dateContainer);\n //show clock\n Collapse.showImmediately(this.display.timeContainer);\n }\n this.handleShowClockContainers(action);\n break;\n case ActionTypes.clear:\n this.dates.setValue(null);\n this.display._updateCalendarHeader();\n break;\n case ActionTypes.close:\n this.display.hide();\n break;\n case ActionTypes.today: {\n const today = new DateTime().setLocalization(\n this.optionsStore.options.localization\n );\n this._eventEmitters.updateViewDate.emit(today);\n\n //todo this this really a good idea?\n if (this.validation.isValid(today, Unit.date))\n this.dates.setValue(today, this.dates.lastPickedIndex);\n break;\n }\n }\n }\n\n private handleShowClockContainers(action: ActionTypes) {\n if (!this.display._hasTime) {\n Namespace.errorMessages.throwError(\n 'Cannot show clock containers when time is disabled.'\n );\n /* ignore coverage: should never happen */\n return;\n }\n\n this.optionsStore.currentView = 'clock';\n this.display.widget\n .querySelectorAll(`.${Namespace.css.timeContainer} > div`)\n .forEach(\n (htmlElement: HTMLElement) => (htmlElement.style.display = 'none')\n );\n\n let classToUse = '';\n switch (action) {\n case ActionTypes.showClock:\n classToUse = Namespace.css.clockContainer;\n this.display._update('clock');\n break;\n case ActionTypes.showHours:\n classToUse = Namespace.css.hourContainer;\n this.display._update(Unit.hours);\n break;\n case ActionTypes.showMinutes:\n classToUse = Namespace.css.minuteContainer;\n this.display._update(Unit.minutes);\n break;\n case ActionTypes.showSeconds:\n classToUse = Namespace.css.secondContainer;\n this.display._update(Unit.seconds);\n break;\n }\n\n ((\n this.display.widget.getElementsByClassName(classToUse)[0]\n )).style.display = 'grid';\n }\n\n private handleNextPrevious(action: ActionTypes) {\n const { unit, step } =\n CalendarModes[this.optionsStore.currentCalendarViewMode];\n if (action === ActionTypes.next)\n this.optionsStore.viewDate.manipulate(step, unit);\n else this.optionsStore.viewDate.manipulate(step * -1, unit);\n this._eventEmitters.viewUpdate.emit();\n\n this.display._showMode();\n }\n\n /**\n * After setting the value it will either show the clock or hide the widget.\n * @param e\n */\n private hideOrClock(e) {\n if (\n !this.optionsStore.isTwelveHour &&\n !this.optionsStore.options.display.components.minutes &&\n !this.optionsStore.options.display.keepOpen &&\n !this.optionsStore.options.display.inline\n ) {\n this.display.hide();\n } else {\n this.do(e, ActionTypes.showClock);\n }\n }\n\n /**\n * Common function to manipulate {@link lastPicked} by `unit`.\n * @param lastPicked\n * @param unit\n * @param value Value to change by\n */\n private manipulateAndSet(lastPicked: DateTime, unit: Unit, value = 1) {\n const newDate = lastPicked.manipulate(value, unit);\n if (this.validation.isValid(newDate, unit)) {\n this.dates.setValue(newDate, this.dates.lastPickedIndex);\n }\n }\n\n private handleSelectCalendarMode(\n action:\n | ActionTypes.selectMonth\n | ActionTypes.selectYear\n | ActionTypes.selectDecade,\n currentTarget: HTMLElement\n ) {\n const value = +currentTarget.dataset.value;\n switch (action) {\n case ActionTypes.selectMonth:\n this.optionsStore.viewDate.month = value;\n break;\n case ActionTypes.selectYear:\n case ActionTypes.selectDecade:\n this.optionsStore.viewDate.year = value;\n break;\n }\n\n if (\n this.optionsStore.currentCalendarViewMode ===\n this.optionsStore.minimumCalendarViewMode\n ) {\n this.dates.setValue(\n this.optionsStore.viewDate,\n this.dates.lastPickedIndex\n );\n if (!this.optionsStore.options.display.inline) {\n this.display.hide();\n }\n } else {\n this.display._showMode(-1);\n }\n }\n\n private handleToggle(currentTarget: HTMLElement) {\n if (\n currentTarget.getAttribute('title') ===\n this.optionsStore.options.localization.selectDate\n ) {\n currentTarget.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectTime\n );\n currentTarget.innerHTML = this.display._iconTag(\n this.optionsStore.options.display.icons.time\n ).outerHTML;\n\n this.display._updateCalendarHeader();\n this.optionsStore.refreshCurrentView();\n } else {\n currentTarget.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectDate\n );\n currentTarget.innerHTML = this.display._iconTag(\n this.optionsStore.options.display.icons.date\n ).outerHTML;\n if (this.display._hasTime) {\n this.handleShowClockContainers(ActionTypes.showClock);\n this.display._update('clock');\n }\n }\n\n this.display.widget\n .querySelectorAll(\n `.${Namespace.css.dateContainer}, .${Namespace.css.timeContainer}`\n )\n .forEach((htmlElement: HTMLElement) => Collapse.toggle(htmlElement));\n this._eventEmitters.viewUpdate.emit();\n }\n\n private handleSelectDay(currentTarget: HTMLElement) {\n const day = this.optionsStore.viewDate.clone;\n if (currentTarget.classList.contains(Namespace.css.old)) {\n day.manipulate(-1, Unit.month);\n }\n if (currentTarget.classList.contains(Namespace.css.new)) {\n day.manipulate(1, Unit.month);\n }\n\n day.date = +currentTarget.dataset.day;\n if (this.optionsStore.options.dateRange) this.handleDateRange(day);\n else if (this.optionsStore.options.multipleDates) {\n this.handleMultiDate(day);\n } else {\n this.dates.setValue(day, this.dates.lastPickedIndex);\n }\n\n if (\n !this.display._hasTime &&\n !this.optionsStore.options.display.keepOpen &&\n !this.optionsStore.options.display.inline &&\n !this.optionsStore.options.multipleDates &&\n !this.optionsStore.options.dateRange\n ) {\n this.display.hide();\n }\n }\n\n private handleMultiDate(day: DateTime) {\n let index = this.dates.pickedIndex(day, Unit.date);\n console.log(index);\n if (index !== -1) {\n this.dates.setValue(null, index); //deselect multi-date\n } else {\n index = this.dates.lastPickedIndex + 1;\n if (this.dates.picked.length === 0) index = 0;\n\n this.dates.setValue(day, index);\n }\n }\n\n private handleDateRange(day: DateTime) {\n switch (this.dates.picked.length) {\n case 2: {\n this.dates.clear();\n break;\n }\n case 1: {\n const other = this.dates.picked[0];\n if (day.getTime() === other.getTime()) {\n this.dates.clear();\n break;\n }\n if (day.isBefore(other)) {\n this.dates.setValue(day, 0);\n this.dates.setValue(other, 1);\n return;\n } else {\n this.dates.setValue(day, 1);\n return;\n }\n }\n }\n\n this.dates.setValue(day, 0);\n }\n}\n","import Display from './display/index';\nimport Dates from './dates';\nimport Actions from './actions';\nimport {\n DateTime,\n DateTimeFormatOptions,\n guessHourCycle,\n Unit,\n} from './datetime';\nimport Namespace from './utilities/namespace';\nimport Options from './utilities/options';\nimport {\n BaseEvent,\n ChangeEvent,\n ViewUpdateEvent,\n} from './utilities/event-types';\nimport { EventEmitters } from './utilities/event-emitter';\nimport {\n serviceLocator,\n setupServiceLocator,\n} from './utilities/service-locator';\nimport CalendarModes from './utilities/calendar-modes';\nimport DefaultOptions, {\n DefaultEnLocalization,\n} from './utilities/default-options';\nimport ActionTypes from './utilities/action-types';\nimport { OptionsStore } from './utilities/optionsStore';\nimport { OptionConverter } from './utilities/optionConverter';\n\n/**\n * A robust and powerful date/time picker component.\n */\nclass TempusDominus {\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n _subscribers: { [key: string]: ((event: any) => Record)[] } =\n {};\n private _isDisabled = false;\n private _toggle: HTMLElement;\n private _currentPromptTimeTimeout: NodeJS.Timeout;\n private actions: Actions;\n private optionsStore: OptionsStore;\n private _eventEmitters: EventEmitters;\n display: Display;\n dates: Dates;\n\n constructor(element: HTMLElement, options: Options = {} as Options) {\n setupServiceLocator();\n this._eventEmitters = serviceLocator.locate(EventEmitters);\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.display = serviceLocator.locate(Display);\n this.dates = serviceLocator.locate(Dates);\n this.actions = serviceLocator.locate(Actions);\n\n if (!element) {\n Namespace.errorMessages.mustProvideElement();\n }\n\n this.optionsStore.element = element;\n this._initializeOptions(options, DefaultOptions, true);\n this.optionsStore.viewDate.setLocalization(\n this.optionsStore.options.localization\n );\n this.optionsStore.unset = true;\n\n this._initializeInput();\n this._initializeToggle();\n\n if (this.optionsStore.options.display.inline) this.display.show();\n\n this._eventEmitters.triggerEvent.subscribe((e) => {\n this._triggerEvent(e);\n });\n\n this._eventEmitters.viewUpdate.subscribe(() => {\n this._viewUpdate();\n });\n\n this._eventEmitters.updateViewDate.subscribe((dateTime) => {\n this.viewDate = dateTime;\n });\n }\n\n get viewDate() {\n return this.optionsStore.viewDate;\n }\n\n set viewDate(value) {\n this.optionsStore.viewDate = value;\n this.optionsStore.viewDate.setLocalization(\n this.optionsStore.options.localization\n );\n this.display._update(\n this.optionsStore.currentView === 'clock' ? 'clock' : 'calendar'\n );\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Update the picker options. If `reset` is provide `options` will be merged with DefaultOptions instead.\n * @param options\n * @param reset\n * @public\n */\n updateOptions(options, reset = false): void {\n if (reset) this._initializeOptions(options, DefaultOptions);\n else this._initializeOptions(options, this.optionsStore.options);\n\n this.optionsStore.viewDate.setLocalization(\n this.optionsStore.options.localization\n );\n this.display.refreshCurrentView();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Toggles the picker open or closed. If the picker is disabled, nothing will happen.\n * @public\n */\n toggle(): void {\n if (this._isDisabled) return;\n this.display.toggle();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Shows the picker unless the picker is disabled.\n * @public\n */\n show(): void {\n if (this._isDisabled) return;\n this.display.show();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Hides the picker unless the picker is disabled.\n * @public\n */\n hide(): void {\n this.display.hide();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Disables the picker and the target input field.\n * @public\n */\n disable(): void {\n this._isDisabled = true;\n // todo this might be undesired. If a dev disables the input field to\n // only allow using the picker, this will break that.\n this.optionsStore.input?.setAttribute('disabled', 'disabled');\n this.display.hide();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Enables the picker and the target input field.\n * @public\n */\n enable(): void {\n this._isDisabled = false;\n this.optionsStore.input?.removeAttribute('disabled');\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Clears all the selected dates\n * @public\n */\n clear(): void {\n this.optionsStore.input.value = '';\n this.dates.clear();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Allows for a direct subscription to picker events, without having to use addEventListener on the element.\n * @param eventTypes See Namespace.Events\n * @param callbacks Function to call when event is triggered\n * @public\n */\n subscribe(\n eventTypes: string | string[],\n callbacks: (event: any) => void | ((event: any) => void)[] //eslint-disable-line @typescript-eslint/no-explicit-any\n ): { unsubscribe: () => void } | { unsubscribe: () => void }[] {\n if (typeof eventTypes === 'string') {\n eventTypes = [eventTypes];\n }\n let callBackArray: any[]; //eslint-disable-line @typescript-eslint/no-explicit-any\n if (!Array.isArray(callbacks)) {\n callBackArray = [callbacks];\n } else {\n callBackArray = callbacks;\n }\n\n if (eventTypes.length !== callBackArray.length) {\n Namespace.errorMessages.subscribeMismatch();\n }\n\n const returnArray = [];\n\n for (let i = 0; i < eventTypes.length; i++) {\n const eventType = eventTypes[i];\n if (!Array.isArray(this._subscribers[eventType])) {\n this._subscribers[eventType] = [];\n }\n\n this._subscribers[eventType].push(callBackArray[i]);\n\n returnArray.push({\n unsubscribe: this._unsubscribe.bind(\n this,\n eventType,\n this._subscribers[eventType].length - 1\n ),\n });\n\n if (eventTypes.length === 1) {\n return returnArray[0];\n }\n }\n\n return returnArray;\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Hides the picker and removes event listeners\n */\n dispose() {\n this.display.hide();\n // this will clear the document click event listener\n this.display._dispose();\n this._eventEmitters.destroy();\n this.optionsStore.input?.removeEventListener(\n 'change',\n this._inputChangeEvent\n );\n if (this.optionsStore.options.allowInputToggle) {\n this.optionsStore.input?.removeEventListener(\n 'click',\n this._toggleClickEvent\n );\n this.optionsStore.input?.removeEventListener(\n 'focus',\n this._toggleClickEvent\n );\n }\n this._toggle?.removeEventListener('click', this._toggleClickEvent);\n this._subscribers = {};\n }\n\n /**\n * Updates the options to use the provided language.\n * THe language file must be loaded first.\n * @param language\n */\n locale(language: string) {\n const asked = loadedLocales[language];\n if (!asked) return;\n this.updateOptions({\n localization: asked,\n });\n }\n\n /**\n * Triggers an event like ChangeEvent when the picker has updated the value\n * of a selected date.\n * @param event Accepts a BaseEvent object.\n * @private\n */\n private _triggerEvent(event: BaseEvent) {\n event.viewMode = this.optionsStore.currentView;\n\n const isChangeEvent = event.type === Namespace.events.change;\n if (isChangeEvent) {\n const { date, oldDate, isClear } = event as ChangeEvent;\n if (\n (date && oldDate && date.isSame(oldDate)) ||\n (!isClear && !date && !oldDate)\n ) {\n return;\n }\n this._handleAfterChangeEvent(event as ChangeEvent);\n\n this.optionsStore.input?.dispatchEvent(\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n new CustomEvent('change', { detail: event as any })\n );\n }\n\n this.optionsStore.element.dispatchEvent(\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n new CustomEvent(event.type, { detail: event as any })\n );\n\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((window as any).jQuery) {\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n const $ = (window as any).jQuery;\n\n if (isChangeEvent && this.optionsStore.input) {\n $(this.optionsStore.input).trigger(event);\n } else {\n $(this.optionsStore.element).trigger(event);\n }\n }\n\n this._publish(event);\n }\n\n private _publish(event: BaseEvent) {\n // return if event is not subscribed\n if (!Array.isArray(this._subscribers[event.type])) {\n return;\n }\n\n // Trigger callback for each subscriber\n this._subscribers[event.type].forEach((callback) => {\n callback(event);\n });\n }\n\n /**\n * Fires a ViewUpdate event when, for example, the month view is changed.\n * @private\n */\n private _viewUpdate() {\n this._triggerEvent({\n type: Namespace.events.update,\n viewDate: this.optionsStore.viewDate.clone,\n } as ViewUpdateEvent);\n }\n\n private _unsubscribe(eventName, index) {\n this._subscribers[eventName].splice(index, 1);\n }\n\n /**\n * Merges two Option objects together and validates options type\n * @param config new Options\n * @param mergeTo Options to merge into\n * @param includeDataset When true, the elements data-td attributes will be included in the\n * @private\n */\n private _initializeOptions(\n config: Options,\n mergeTo: Options,\n includeDataset = false\n ): void {\n let newConfig = OptionConverter.deepCopy(config);\n newConfig = OptionConverter._mergeOptions(newConfig, mergeTo);\n if (includeDataset)\n newConfig = OptionConverter._dataToOptions(\n this.optionsStore.element,\n newConfig\n );\n\n OptionConverter._validateConflicts(newConfig);\n\n newConfig.viewDate = newConfig.viewDate.setLocalization(\n newConfig.localization\n );\n\n if (!this.optionsStore.viewDate.isSame(newConfig.viewDate)) {\n this.optionsStore.viewDate = newConfig.viewDate;\n }\n\n /**\n * Sets the minimum view allowed by the picker. For example the case of only\n * allowing year and month to be selected but not date.\n */\n if (newConfig.display.components.year) {\n this.optionsStore.minimumCalendarViewMode = 2;\n }\n if (newConfig.display.components.month) {\n this.optionsStore.minimumCalendarViewMode = 1;\n }\n if (newConfig.display.components.date) {\n this.optionsStore.minimumCalendarViewMode = 0;\n }\n\n this.optionsStore.currentCalendarViewMode = Math.max(\n this.optionsStore.minimumCalendarViewMode,\n this.optionsStore.currentCalendarViewMode\n );\n\n // Update view mode if needed\n if (\n CalendarModes[this.optionsStore.currentCalendarViewMode].name !==\n newConfig.display.viewMode\n ) {\n this.optionsStore.currentCalendarViewMode = Math.max(\n CalendarModes.findIndex((x) => x.name === newConfig.display.viewMode),\n this.optionsStore.minimumCalendarViewMode\n );\n }\n\n if (this.display?.isVisible) {\n this.display._update('all');\n }\n\n if (\n newConfig.display.components.useTwentyfourHour &&\n newConfig.localization.hourCycle === undefined\n )\n newConfig.localization.hourCycle = 'h24';\n else if (newConfig.localization.hourCycle === undefined) {\n newConfig.localization.hourCycle = guessHourCycle(\n newConfig.localization.locale\n );\n }\n\n this.optionsStore.options = newConfig;\n }\n\n /**\n * Checks if an input field is being used, attempts to locate one and sets an\n * event listener if found.\n * @private\n */\n private _initializeInput() {\n if (this.optionsStore.element.tagName == 'INPUT') {\n this.optionsStore.input = this.optionsStore.element as HTMLInputElement;\n } else {\n const query = this.optionsStore.element.dataset.tdTargetInput;\n if (query == undefined || query == 'nearest') {\n this.optionsStore.input =\n this.optionsStore.element.querySelector('input');\n } else {\n this.optionsStore.input =\n this.optionsStore.element.querySelector(query);\n }\n }\n\n if (!this.optionsStore.input) return;\n\n if (!this.optionsStore.input.value && this.optionsStore.options.defaultDate)\n this.optionsStore.input.value = this.dates.formatInput(\n this.optionsStore.options.defaultDate\n );\n\n this.optionsStore.input.addEventListener('change', this._inputChangeEvent);\n if (this.optionsStore.options.allowInputToggle) {\n this.optionsStore.input.addEventListener('click', this._toggleClickEvent);\n this.optionsStore.input.addEventListener('focus', this._toggleClickEvent);\n }\n\n if (this.optionsStore.input.value) {\n this._inputChangeEvent();\n }\n }\n\n /**\n * Attempts to locate a toggle for the picker and sets an event listener\n * @private\n */\n private _initializeToggle() {\n if (this.optionsStore.options.display.inline) return;\n let query = this.optionsStore.element.dataset.tdTargetToggle;\n if (query == 'nearest') {\n query = '[data-td-toggle=\"datetimepicker\"]';\n }\n this._toggle =\n query == undefined\n ? this.optionsStore.element\n : this.optionsStore.element.querySelector(query);\n this._toggle.addEventListener('click', this._toggleClickEvent);\n }\n\n /**\n * If the option is enabled this will render the clock view after a date pick.\n * @param e change event\n * @private\n */\n private _handleAfterChangeEvent(e: ChangeEvent) {\n if (\n // options is disabled\n !this.optionsStore.options.promptTimeOnDateChange ||\n this.optionsStore.options.multipleDates ||\n this.optionsStore.options.display.inline ||\n this.optionsStore.options.display.sideBySide ||\n // time is disabled\n !this.display._hasTime ||\n // clock component is already showing\n this.display.widget\n ?.getElementsByClassName(Namespace.css.show)[0]\n .classList.contains(Namespace.css.timeContainer)\n )\n return;\n\n // First time ever. If useCurrent option is set to true (default), do nothing\n // because the first date is selected automatically.\n // or date didn't change (time did) or date changed because time did.\n if (\n (!e.oldDate && this.optionsStore.options.useCurrent) ||\n (e.oldDate && e.date?.isSame(e.oldDate))\n ) {\n return;\n }\n\n clearTimeout(this._currentPromptTimeTimeout);\n this._currentPromptTimeTimeout = setTimeout(() => {\n if (this.display.widget) {\n this._eventEmitters.action.emit({\n e: {\n currentTarget: this.display.widget.querySelector(\n `.${Namespace.css.switch}`\n ),\n },\n action: ActionTypes.togglePicker,\n });\n }\n }, this.optionsStore.options.promptTimeOnDateChangeTransitionDelay);\n }\n\n /**\n * Event for when the input field changes. This is a class level method so there's\n * something for the remove listener function.\n * @private\n */\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _inputChangeEvent = (event?: any) => {\n const internallyTriggered = event?.detail;\n if (internallyTriggered) return;\n\n const setViewDate = () => {\n if (this.dates.lastPicked)\n this.optionsStore.viewDate = this.dates.lastPicked.clone;\n };\n\n const value = this.optionsStore.input.value;\n if (this.optionsStore.options.multipleDates) {\n try {\n const valueSplit = value.split(\n this.optionsStore.options.multipleDatesSeparator\n );\n for (let i = 0; i < valueSplit.length; i++) {\n this.dates.setFromInput(valueSplit[i], i);\n }\n setViewDate();\n } catch {\n console.warn(\n 'TD: Something went wrong trying to set the multipleDates values from the input field.'\n );\n }\n } else {\n this.dates.setFromInput(value, 0);\n setViewDate();\n }\n };\n\n /**\n * Event for when the toggle is clicked. This is a class level method so there's\n * something for the remove listener function.\n * @private\n */\n private _toggleClickEvent = () => {\n if (\n (this.optionsStore.element as HTMLInputElement)?.disabled ||\n this.optionsStore.input?.disabled\n )\n return;\n this.toggle();\n };\n}\n\n/**\n * Whenever a locale is loaded via a plugin then store it here based on the\n * locale name. E.g. loadedLocales['ru']\n */\nconst loadedLocales = {};\n\n// noinspection JSUnusedGlobalSymbols\n/**\n * Called from a locale plugin.\n * @param l locale object for localization options\n */\nconst loadLocale = (l) => {\n if (loadedLocales[l.name]) return;\n loadedLocales[l.name] = l.localization;\n};\n\n/**\n * A sets the global localization options to the provided locale name.\n * `loadLocale` MUST be called first.\n * @param l\n */\nconst locale = (l: string) => {\n const asked = loadedLocales[l];\n if (!asked) return;\n DefaultOptions.localization = asked;\n};\n\n// noinspection JSUnusedGlobalSymbols\n/**\n * Called from a plugin to extend or override picker defaults.\n * @param plugin\n * @param option\n */\nconst extend = function (plugin, option = undefined) {\n if (!plugin) return tempusDominus;\n if (!plugin.installed) {\n // install plugin only once\n plugin(\n option,\n { TempusDominus, Dates, Display, DateTime, Namespace },\n tempusDominus\n );\n plugin.installed = true;\n }\n return tempusDominus;\n};\n\nconst version = '6.7.10';\n\nconst tempusDominus = {\n TempusDominus,\n extend,\n loadLocale,\n locale,\n Namespace,\n DefaultOptions,\n DateTime,\n Unit,\n version,\n DefaultEnLocalization,\n};\n\nexport {\n TempusDominus,\n extend,\n loadLocale,\n locale,\n Namespace,\n DefaultOptions,\n DateTime,\n Unit,\n version,\n DateTimeFormatOptions,\n Options,\n DefaultEnLocalization,\n};\n"],"names":["DefaultFormatLocalization","ActionTypes","SecondDisplay"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/tempus-dominus.esm.min.js b/dist/js/tempus-dominus.esm.min.js deleted file mode 100644 index 19a33e84f..000000000 --- a/dist/js/tempus-dominus.esm.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -class t extends Error{}const e="tempus-dominus";class s{}s.NAME=e,s.dataKey="td",s.events=new class{constructor(){this.key=".td",this.change=`change${this.key}`,this.update=`update${this.key}`,this.error=`error${this.key}`,this.show=`show${this.key}`,this.hide=`hide${this.key}`,this.blur=`blur${this.key}`,this.focus=`focus${this.key}`,this.keyup=`keyup${this.key}`,this.keydown=`keydown${this.key}`}},s.css=new class{constructor(){this.widget=`${e}-widget`,this.calendarHeader="calendar-header",this.switch="picker-switch",this.toolbar="toolbar",this.noHighlight="no-highlight",this.sideBySide="timepicker-sbs",this.previous="previous",this.next="next",this.disabled="disabled",this.old="old",this.new="new",this.active="active",this.dateContainer="date-container",this.decadesContainer=`${this.dateContainer}-decades`,this.decade="decade",this.yearsContainer=`${this.dateContainer}-years`,this.year="year",this.monthsContainer=`${this.dateContainer}-months`,this.month="month",this.daysContainer=`${this.dateContainer}-days`,this.day="day",this.calendarWeeks="cw",this.dayOfTheWeek="dow",this.today="today",this.weekend="weekend",this.rangeIn="range-in",this.rangeStart="range-start",this.rangeEnd="range-end",this.timeContainer="time-container",this.separator="separator",this.clockContainer=`${this.timeContainer}-clock`,this.hourContainer=`${this.timeContainer}-hour`,this.minuteContainer=`${this.timeContainer}-minute`,this.secondContainer=`${this.timeContainer}-second`,this.hour="hour",this.minute="minute",this.second="second",this.toggleMeridiem="toggleMeridiem",this.show="show",this.collapsing="td-collapsing",this.collapse="td-collapse",this.inline="inline",this.lightTheme="light",this.darkTheme="dark",this.isDarkPreferredQuery="(prefers-color-scheme: dark)"}},s.errorMessages=new class{constructor(){this.base="TD:",this.failedToSetInvalidDate="Failed to set invalid date",this.failedToParseInput="Failed parse input field"}unexpectedOption(e){const s=new t(`${this.base} Unexpected option: ${e} does not match a known option.`);throw s.code=1,s}unexpectedOptions(e){const s=new t(`${this.base}: ${e.join(", ")}`);throw s.code=1,s}unexpectedOptionValue(e,s,i){const o=new t(`${this.base} Unexpected option value: ${e} does not accept a value of "${s}". Valid values are: ${i.join(", ")}`);throw o.code=2,o}typeMismatch(e,s,i){const o=new t(`${this.base} Mismatch types: ${e} has a type of ${s} instead of the required ${i}`);throw o.code=3,o}numbersOutOfRange(e,s,i){const o=new t(`${this.base} ${e} expected an array of number between ${s} and ${i}.`);throw o.code=4,o}failedToParseDate(e,s,i=!1){const o=new t(`${this.base} Could not correctly parse "${s}" to a date for ${e}.`);if(o.code=5,!i)throw o;console.warn(o)}mustProvideElement(){const e=new t(`${this.base} No element was provided.`);throw e.code=6,e}subscribeMismatch(){const e=new t(`${this.base} The subscribed events does not match the number of callbacks`);throw e.code=7,e}conflictingConfiguration(e){const s=new t(`${this.base} A configuration value conflicts with another rule. ${e}`);throw s.code=8,s}customDateFormatError(e){const s=new t(`${this.base} Custom Date Format: ${e}`);throw s.code=9,s}dateString(){console.warn(`${this.base} Using a string for date options is not recommended unless you specify an ISO string or use the customDateFormat plugin.`)}deprecatedWarning(t,e){console.warn(`${this.base} Warning ${t} is deprecated and will be removed in a future version. ${e}`)}throwError(e){const s=new t(`${this.base} ${e}`);throw s.code=9,s}};var i,o={...{dateFormats:{LTS:"h:mm:ss T",LT:"h:mm T",L:"MM/dd/yyyy",LL:"MMMM d, yyyy",LLL:"MMMM d, yyyy h:mm T",LLLL:"dddd, MMMM d, yyyy h:mm T"},format:"L LT",locale:"default",hourCycle:void 0,ordinal:t=>{const e=["th","st","nd","rd"],s=t%100;return`[${t}${e[(s-20)%10]||e[s]||e[0]}]`}}};!function(t){t.seconds="seconds",t.minutes="minutes",t.hours="hours",t.date="date",t.month="month",t.year="year"}(i||(i={}));const a={month:"2-digit",day:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"},n=t=>{switch(t){case"date":return{dateStyle:"short"};case"month":return{month:"numeric",year:"numeric"};case"year":return{year:"numeric"}}},r=t=>{if(!t)return"h12";const e={hour:"2-digit",minute:"2-digit",numberingSystem:"latn"},s=(new d).setLocalization({locale:t});s.hours=0;const i=s.parts(void 0,e).hour;if("12"===i)return"h12";if("24"===i)return"h24";s.hours=23;const o=s.parts(void 0,e).hour;return"00"===i&&"11"===o?"h11":"00"===i&&"23"===o?"h23":void console.warn(`couldn't determine hour cycle for ${t}. start: ${i}. end: ${o}`)};class d extends Date{constructor(){super(...arguments),this.localization=o,this.nonLeapLadder=[0,31,59,90,120,151,181,212,243,273,304,334],this.leapLadder=[0,31,60,91,121,152,182,213,244,274,305,335],this.dateTimeRegex=/(\[[^[\]]*])|y{1,4}|M{1,4}|d{1,4}|H{1,2}|h{1,2}|t|T|m{1,2}|s{1,2}|f{3}/g,this.formattingTokens=/(\[[^[\]]*])|([-_:/.,()\s]+)|(T|t|yyyy|yy?|MM?M?M?|Do|dd?|hh?|HH?|mm?|ss?)/g,this.match2=/\d\d/,this.match3=/\d{3}/,this.match4=/\d{4}/,this.match1to2=/\d\d?/,this.matchSigned=/[+-]?\d+/,this.matchOffset=/[+-]\d\d:?(\d\d)?|Z/,this.matchWord=/[^\d_:/,\-()\s]+/,this.zoneExpressions=[this.matchOffset,(t,e)=>{t.offset=this.offsetFromString(e)}],this.expressions={t:[this.matchWord,(t,e)=>{t.afternoon=this.meridiemMatch(e)}],T:[this.matchWord,(t,e)=>{t.afternoon=this.meridiemMatch(e)}],fff:[this.match3,(t,e)=>{t.milliseconds=+e}],s:[this.match1to2,this.addInput("seconds")],ss:[this.match1to2,this.addInput("seconds")],m:[this.match1to2,this.addInput("minutes")],mm:[this.match1to2,this.addInput("minutes")],H:[this.match1to2,this.addInput("hours")],h:[this.match1to2,this.addInput("hours")],HH:[this.match1to2,this.addInput("hours")],hh:[this.match1to2,this.addInput("hours")],d:[this.match1to2,this.addInput("day")],dd:[this.match2,this.addInput("day")],Do:[this.matchWord,(t,e)=>{if([t.day]=e.match(/\d+/),this.localization.ordinal)for(let s=1;s<=31;s+=1)this.localization.ordinal(s).replace(/[[\]]/g,"")===e&&(t.day=s)}],M:[this.match1to2,this.addInput("month")],MM:[this.match2,this.addInput("month")],MMM:[this.matchWord,(t,e)=>{const s=this.getAllMonths(),i=(this.getAllMonths("short")||s.map((t=>t.slice(0,3)))).indexOf(e)+1;if(i<1)throw new Error;t.month=i%12||i}],MMMM:[this.matchWord,(t,e)=>{const s=this.getAllMonths().indexOf(e)+1;if(s<1)throw new Error;t.month=s%12||s}],y:[this.matchSigned,this.addInput("year")],yy:[this.match2,(t,e)=>{t.year=this.parseTwoDigitYear(e)}],yyyy:[this.match4,this.addInput("year")]}}setLocale(t){return this.localization||(this.localization=o,this.localization.locale=t),this}setLocalization(t){return this.localization=t,this}static convert(t,e="default",s=undefined){if(!t)throw new Error("A date is required");return s||((s=o).locale=e),new d(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()).setLocalization(s)}get clone(){return new d(this.year,this.month,this.date,this.hours,this.minutes,this.seconds,this.getMilliseconds()).setLocalization(this.localization)}static isValid(t){return void 0!==t&&"null"!==JSON.stringify(t)&&t.constructor.name===d.name}startOf(t,e=0){if(void 0===this[t])throw new Error(`Unit '${t}' is not valid`);switch(t){case"seconds":this.setMilliseconds(0);break;case"minutes":this.setSeconds(0,0);break;case"hours":this.setMinutes(0,0,0);break;case"date":this.setHours(0,0,0,0);break;case"weekDay":{if(this.startOf(i.date),this.weekDay===e)break;const t=(this.weekDay-e+7)%7;this.manipulate(-1*t,i.date);break}case"month":this.startOf(i.date),this.setDate(1);break;case"year":this.startOf(i.date),this.setMonth(0,1)}return this}endOf(t,e=0){if(void 0===this[t])throw new Error(`Unit '${t}' is not valid`);switch(t){case"seconds":this.setMilliseconds(999);break;case"minutes":this.setSeconds(59,999);break;case"hours":this.setMinutes(59,59,999);break;case"date":this.setHours(23,59,59,999);break;case"weekDay":{this.endOf(i.date);const t=6+e;if(this.weekDay===t)break;this.manipulate(t-this.weekDay,i.date);break}case"month":this.endOf(i.date),this.manipulate(1,i.month),this.setDate(0);break;case"year":this.endOf(i.date),this.setMonth(11,31)}return this}manipulate(t,e){if(void 0===this[e])throw new Error(`Unit '${e}' is not valid`);return this[e]+=t,this}isBefore(t,e){if(!d.isValid(t))return!1;if(!e)return this.valueOf()t.valueOf();if(void 0===this[e])throw new Error(`Unit '${e}' is not valid`);return this.clone.startOf(e).valueOf()>t.clone.startOf(e).valueOf()}isSame(t,e){if(!d.isValid(t))return!1;if(!e)return this.valueOf()===t.valueOf();if(void 0===this[e])throw new Error(`Unit '${e}' is not valid`);return t=d.convert(t),this.clone.startOf(e).valueOf()===t.startOf(e).valueOf()}isBetween(t,e,s,i="()"){if(!d.isValid(t)||!d.isValid(e))return!1;if(s&&void 0===this[s])throw new Error(`Unit '${s}' is not valid`);const o="("===i[0],a=")"===i[1],n=o?this.isAfter(t,s):!this.isBefore(t,s),r=a?this.isBefore(e,s):!this.isAfter(e,s);return n&&r}parts(t=this.localization.locale,e={dateStyle:"full",timeStyle:"long"}){const s={};return new Intl.DateTimeFormat(t,e).formatToParts(this).filter((t=>"literal"!==t.type)).forEach((t=>s[t.type]=t.value)),s}get seconds(){return this.getSeconds()}set seconds(t){this.setSeconds(t)}get secondsFormatted(){return this.parts(void 0,a).second}get minutes(){return this.getMinutes()}set minutes(t){this.setMinutes(t)}get minutesFormatted(){return this.parts(void 0,a).minute}get hours(){return this.getHours()}set hours(t){this.setHours(t)}getHoursFormatted(t="h12"){return this.parts(void 0,{...a,hourCycle:t}).hour}meridiem(t=this.localization.locale){return new Intl.DateTimeFormat(t,{hour:"numeric",hour12:!0}).formatToParts(this).find((t=>"dayPeriod"===t.type))?.value}get date(){return this.getDate()}set date(t){this.setDate(t)}get dateFormatted(){return this.parts(void 0,a).day}get weekDay(){return this.getDay()}get month(){return this.getMonth()}set month(t){const e=new Date(this.year,t+1);e.setDate(0);const s=e.getDate();this.date>s&&(this.date=s),this.setMonth(t)}get monthFormatted(){return this.parts(void 0,a).month}get year(){return this.getFullYear()}set year(t){this.setFullYear(t)}get week(){const t=this.computeOrdinal(),e=this.getUTCDay();let s=Math.floor((t-e+10)/7);return s<1?s=this.weeksInWeekYear():s>this.weeksInWeekYear()&&(s=1),s}weeksInWeekYear(){const t=(this.year+Math.floor(this.year/4)-Math.floor(this.year/100)+Math.floor(this.year/400))%7,e=this.year-1,s=(e+Math.floor(e/4)-Math.floor(e/100)+Math.floor(e/400))%7;return 4===t||3===s?53:52}get isLeapYear(){return this.year%4==0&&(this.year%100!=0||this.year%400==0)}computeOrdinal(){return this.date+(this.isLeapYear?this.leapLadder:this.nonLeapLadder)[this.month]}getAllMonths(t="long"){const e=new Intl.DateTimeFormat(this.localization.locale,{month:t}).format;return[...Array(12).keys()].map((t=>e(new Date(2021,t))))}replaceTokens(t,e){return t.replace(/(\[[^[\]]*])|(LTS?|l{1,4}|L{1,4})/g,((t,s,i)=>{const a=i&&i.toUpperCase();return s||e[a]||o.dateFormats[a]}))}parseTwoDigitYear(t){return(t=+t)+(t>68?1900:2e3)}offsetFromString(t){if(!t)return 0;if("Z"===t)return 0;const[e,s,i]=t.match(/([+-]|\d\d)/g),o=60*s+(+i||0);return 0===o?0:"+"===e?-o:o}zoneInformation(t,e){let s=t.parts(this.localization.locale,{timeZoneName:"longOffset"}).timeZoneName.replace("GMT","").replace(":","");const i=s.includes("-");return s=s.replace("-",""),"z"===e?s=s.substring(1,2):"zz"===e&&(s=s.substring(0,2)),`${i?"-":""}${s}`}addInput(t){return(e,s)=>{e[t]=+s}}meridiemMatch(t){const e=new Intl.DateTimeFormat(this.localization.locale,{hour:"numeric",hour12:!0}).formatToParts(new Date(2022,3,4,13)).find((t=>"dayPeriod"===t.type))?.value;return t.toLowerCase()===e.toLowerCase()}correctHours(t){const{afternoon:e}=t;if(void 0!==e){const{hours:s}=t;e?s<12&&(t.hours+=12):12===s&&(t.hours=0),delete t.afternoon}}makeParser(t){const e=(t=this.replaceTokens(t,this.localization.dateFormats)).match(this.formattingTokens),{length:s}=e;for(let t=0;t{const i={hours:0,minutes:0,seconds:0,milliseconds:0};for(let o=0,a=0;o-1)return new d(("X"===e.format?1e3:1)*+t);const i=s.makeParser(e.format),{year:o,month:a,day:n,hours:r,minutes:l,seconds:c,milliseconds:h,zone:p}=i(t),u=n||(o||a?1:s.getDate()),m=o||s.getFullYear();let y=0;return o&&!a||(y=a>0?a-1:s.getMonth()),p?new d(Date.UTC(m,y,u,r,l,c,h+60*p.offset*1e3)):new d(m,y,u,r,l,c,h)}catch(i){s.errorMessages.customDateFormatError(`Unable to parse provided input: ${t}, format: ${e.format}`)}}format(t,e=this.localization.locale){if(t&&"object"==typeof t)return new Intl.DateTimeFormat(e,t).format(this);const s=this.replaceTokens(t||this.localization.format||`${o.dateFormats.L}, ${o.dateFormats.LT}`,this.localization.dateFormats),i=t=>new Intl.DateTimeFormat(this.localization.locale,t).format(this);this.localization.hourCycle||(this.localization.hourCycle=r(this.localization.locale));const a=this.localization.hourCycle.startsWith("h1")?"h24":this.localization.hourCycle,n=this.localization.hourCycle.startsWith("h2")?"h12":this.localization.hourCycle,d={yy:i({year:"2-digit"}),yyyy:this.year,M:i({month:"numeric"}),MM:this.monthFormatted,MMM:this.getAllMonths("short")[this.getMonth()],MMMM:this.getAllMonths()[this.getMonth()],d:this.date,dd:this.dateFormatted,ddd:i({weekday:"short"}),dddd:i({weekday:"long"}),H:this.getHours(),HH:this.getHoursFormatted(a),h:this.hours>12?this.hours-12:this.hours,hh:this.getHoursFormatted(n),t:this.meridiem(),T:this.meridiem().toUpperCase(),m:this.minutes,mm:this.minutesFormatted,s:this.seconds,ss:this.secondsFormatted,fff:this.getMilliseconds()};return s.replace(this.dateTimeRegex,((t,e)=>e||d[t])).replace(/\[/g,"").replace(/]/g,"")}}class l{constructor(){this.cache=new Map}locate(t){const e=this.cache.get(t);if(e)return e;const s=new t;return this.cache.set(t,s),s}}let c;const h=[{name:"calendar",className:s.css.daysContainer,unit:i.month,step:1},{name:"months",className:s.css.monthsContainer,unit:i.year,step:1},{name:"years",className:s.css.yearsContainer,unit:i.year,step:10},{name:"decades",className:s.css.decadesContainer,unit:i.year,step:100}];class p{constructor(){this._currentCalendarViewMode=0,this._viewDate=new d,this.minimumCalendarViewMode=0,this.currentView="calendar"}get currentCalendarViewMode(){return this._currentCalendarViewMode}set currentCalendarViewMode(t){this._currentCalendarViewMode=t,this.currentView=h[t].name}get viewDate(){return this._viewDate}set viewDate(t){this._viewDate=t,this.options&&(this.options.viewDate=t)}refreshCurrentView(){this.currentView=h[this.currentCalendarViewMode].name}get isTwelveHour(){return["h12","h11"].includes(this.options.localization.hourCycle)}}class u{constructor(){this.optionsStore=c.locate(p)}isValid(t,e){if(!this._enabledDisabledDatesIsValid(e,t))return!1;if(e!==i.month&&e!==i.year&&this.optionsStore.options.restrictions.daysOfWeekDisabled?.length>0&&-1!==this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(t.weekDay))return!1;if(!this._minMaxIsValid(e,t))return!1;if(e===i.hours||e===i.minutes||e===i.seconds){if(!this._enabledDisabledHoursIsValid(t))return!1;if(0!==this.optionsStore.options.restrictions.disabledTimeIntervals?.filter((e=>t.isBetween(e.from,e.to))).length)return!1}return!0}_enabledDisabledDatesIsValid(t,e){return t!==i.date||!(this.optionsStore.options.restrictions.disabledDates.length>0&&this._isInDisabledDates(e))&&!(this.optionsStore.options.restrictions.enabledDates.length>0&&!this._isInEnabledDates(e))}_isInDisabledDates(t){return!(!this.optionsStore.options.restrictions.disabledDates||0===this.optionsStore.options.restrictions.disabledDates.length)&&!!this.optionsStore.options.restrictions.disabledDates.find((e=>e.isSame(t,i.date)))}_isInEnabledDates(t){return!this.optionsStore.options.restrictions.enabledDates||0===this.optionsStore.options.restrictions.enabledDates.length||!!this.optionsStore.options.restrictions.enabledDates.find((e=>e.isSame(t,i.date)))}_minMaxIsValid(t,e){return(!this.optionsStore.options.restrictions.minDate||!e.isBefore(this.optionsStore.options.restrictions.minDate,t))&&(!this.optionsStore.options.restrictions.maxDate||!e.isAfter(this.optionsStore.options.restrictions.maxDate,t))}_enabledDisabledHoursIsValid(t){return!(this.optionsStore.options.restrictions.disabledHours.length>0&&this._isInDisabledHours(t))&&!(this.optionsStore.options.restrictions.enabledHours.length>0&&!this._isInEnabledHours(t))}_isInDisabledHours(t){if(!this.optionsStore.options.restrictions.disabledHours||0===this.optionsStore.options.restrictions.disabledHours.length)return!1;const e=t.hours;return this.optionsStore.options.restrictions.disabledHours.includes(e)}_isInEnabledHours(t){if(!this.optionsStore.options.restrictions.enabledHours||0===this.optionsStore.options.restrictions.enabledHours.length)return!0;const e=t.hours;return this.optionsStore.options.restrictions.enabledHours.includes(e)}dateRangeIsValid(t,e,s){if(!this.optionsStore.options.dateRange)return!0;if(2!==t.length&&1!==e)return!0;const o=t[0].clone;if(o.isSame(s,i.date))return!0;for(o.manipulate(1,i.date);!o.isSame(s,i.date);){if(!this.isValid(o,i.date))return!1;o.manipulate(1,i.date)}return!0}}class m{constructor(){this.subscribers=[]}subscribe(t){return this.subscribers.push(t),this.unsubscribe.bind(this,this.subscribers.length-1)}unsubscribe(t){this.subscribers.splice(t,1)}emit(t){this.subscribers.forEach((e=>{e(t)}))}destroy(){this.subscribers=null,this.subscribers=[]}}class y{constructor(){this.triggerEvent=new m,this.viewUpdate=new m,this.updateDisplay=new m,this.action=new m,this.updateViewDate=new m}destroy(){this.triggerEvent.destroy(),this.viewUpdate.destroy(),this.updateDisplay.destroy(),this.action.destroy(),this.updateViewDate.destroy()}}const g={clear:"Clear selection",close:"Close the picker",dateFormats:o.dateFormats,dayViewHeaderFormat:{month:"long",year:"2-digit"},decrementHour:"Decrement Hour",decrementMinute:"Decrement Minute",decrementSecond:"Decrement Second",format:o.format,hourCycle:o.hourCycle,incrementHour:"Increment Hour",incrementMinute:"Increment Minute",incrementSecond:"Increment Second",locale:o.locale,nextCentury:"Next Century",nextDecade:"Next Decade",nextMonth:"Next Month",nextYear:"Next Year",ordinal:o.ordinal,pickHour:"Pick Hour",pickMinute:"Pick Minute",pickSecond:"Pick Second",previousCentury:"Previous Century",previousDecade:"Previous Decade",previousMonth:"Previous Month",previousYear:"Previous Year",selectDate:"Select Date",selectDecade:"Select Decade",selectMonth:"Select Month",selectTime:"Select Time",selectYear:"Select Year",startOfTheWeek:0,today:"Go to today",toggleMeridiem:"Toggle Meridiem"},v={allowInputToggle:!1,container:void 0,dateRange:!1,debug:!1,defaultDate:void 0,display:{icons:{type:"icons",time:"fa-solid fa-clock",date:"fa-solid fa-calendar",up:"fa-solid fa-arrow-up",down:"fa-solid fa-arrow-down",previous:"fa-solid fa-chevron-left",next:"fa-solid fa-chevron-right",today:"fa-solid fa-calendar-check",clear:"fa-solid fa-trash",close:"fa-solid fa-xmark"},sideBySide:!1,calendarWeeks:!1,viewMode:"calendar",toolbarPlacement:"bottom",keepOpen:!1,buttons:{today:!1,clear:!1,close:!1},components:{calendar:!0,date:!0,month:!0,year:!0,decades:!0,clock:!0,hours:!0,minutes:!0,seconds:!1,useTwentyfourHour:void 0},inline:!1,theme:"auto",placement:"bottom"},keepInvalid:!1,localization:g,meta:{},multipleDates:!1,multipleDatesSeparator:"; ",promptTimeOnDateChange:!1,promptTimeOnDateChangeTransitionDelay:200,restrictions:{minDate:void 0,maxDate:void 0,disabledDates:[],enabledDates:[],daysOfWeekDisabled:[],disabledTimeIntervals:[],disabledHours:[],enabledHours:[]},stepping:1,useCurrent:!0,viewDate:new d},S={...g};function f(t,e){if(!t)return null;if(t.constructor.name===d.name)return t;if(t.constructor.name===Date.name)return d.convert(t);if("string"==typeof t){const s=d.fromString(t,e);return"null"===JSON.stringify(s)?null:s}return null}function w(t,e,i){"string"==typeof t&&"input"!==e&&s.errorMessages.dateString();const o=f(t,i);return o||s.errorMessages.failedToParseDate(e,t,"input"===e),o}function b(t,e,i,a=o){Array.isArray(e)||s.errorMessages.typeMismatch(t,i,"array of DateTime or Date");for(let s=0;s"number"!=typeof t))||s.errorMessages.typeMismatch(t,i,"array of numbers")}function _(t){return({value:e,providedType:s,localization:i})=>{const o=w(e,t,i);if(void 0!==o)return o.setLocalization(i),o}}function k(t){const e=_(t);return t=>void 0===t.value?t.value:e(t)}function C(t,e,i){return({value:o,providedType:a})=>void 0===o?[]:(D(t,o,a),o.some((t=>ti))&&s.errorMessages.numbersOutOfRange(t,e,i),o)}function M(t){return C(t,0,23)}function E(t){return({value:e,providedType:s,localization:i})=>void 0===e?[]:(b(t,e,s,i),e)}function T(t){return({value:e,path:i})=>(t.includes(e)||s.errorMessages.unexpectedOptionValue(i.substring(1),e,t),e)}const L=Object.freeze({defaultDate:_("defaultDate"),viewDate:_("viewDate"),minDate:k("restrictions.minDate"),maxDate:k("restrictions.maxDate"),disabledHours:M("restrictions.disabledHours"),enabledHours:M("restrictions.enabledHours"),disabledDates:E("restrictions.disabledDates"),enabledDates:E("restrictions.enabledDates"),daysOfWeekDisabled:C("restrictions.daysOfWeekDisabled",0,6),disabledTimeIntervals:({key:t,value:e,providedType:i,localization:o})=>{if(void 0===e)return[];Array.isArray(e)||s.errorMessages.typeMismatch(t,i,"array of { from: DateTime|Date, to: DateTime|Date }");const a=e;for(let e=0;e{const i=`${t}[${e}].${s}`,n=w(a[e][s],i,o);n.setLocalization(o),a[e][s]=n}));return a},toolbarPlacement:T(["top","bottom","default"]),type:T(["icons","sprites"]),viewMode:T(["clock","calendar","months","years","decades"]),theme:T(["light","dark","auto"]),placement:T(["top","bottom"]),meta:({value:t})=>t,dayViewHeaderFormat:({value:t})=>t,container:({value:t,path:e})=>(t&&!(t instanceof HTMLElement||t instanceof Element||t?.appendChild)&&s.errorMessages.typeMismatch(e.substring(1),typeof t,"HTMLElement"),t),useTwentyfourHour:({value:t,path:e,providedType:i,defaultType:o})=>{if(s.errorMessages.deprecatedWarning("useTwentyfourHour",'Please use "options.localization.hourCycle" instead'),void 0===t||"boolean"===i)return t;s.errorMessages.typeMismatch(e,i,o)},hourCycle:T(["h11","h12","h23","h24"])}),A=({value:t,defaultType:e,providedType:i,path:o})=>{switch(e){case"boolean":return"true"===t||!0===t;case"number":return+t;case"string":return t.toString();case"object":return{};case"function":return t;default:s.errorMessages.typeMismatch(o,i,e)}};class V{static deepCopy(t){const e={};return Object.keys(t).forEach((s=>{const i=t[s];i instanceof d?e[s]=i.clone:i instanceof Date?e[s]=new Date(i.valueOf()):(e[s]=i,"object"!=typeof i||i instanceof HTMLElement||i instanceof Element||Array.isArray(i)||(e[s]=V.deepCopy(i)))})),e}static objectPath(t,e){return"."===t.charAt(0)&&(t=t.slice(1)),t?t.split(".").reduce(((t,e)=>V.isValue(t)||V.isValue(t[e])?t[e]:void 0),e):e}static spread(t,e,i,o=""){const a=V.objectPath(o,v),n=Object.keys(t).filter((t=>!Object.keys(a).includes(t)));if(n.length>0){const t=V.getFlattenDefaultOptions(),e=n.map((e=>{let s=`"${o}.${e}" in not a known option.`;const i=t.find((t=>t.includes(e)));return i&&(s+=` Did you mean "${i}"?`),s}));s.errorMessages.unexpectedOptions(e)}Object.keys(t).filter((t=>"__proto__"!==t&&"constructor"!==t)).forEach((s=>{"."===(o+=`.${s}`).charAt(0)&&(o=o.slice(1));const n=a[s],r=typeof t[s],d=typeof n,l=t[s];if(null==l)return e[s]=l,void(o=o.substring(0,o.lastIndexOf(`.${s}`)));"object"!=typeof n||Array.isArray(t[s])||n instanceof Date||V.ignoreProperties.includes(s)?e[s]=V.processKey(s,l,r,d,o,i):V.spread(t[s],e[s],i,o),o=o.substring(0,o.lastIndexOf(`.${s}`))}))}static processKey(t,e,s,i,o,a){return(L[(n={key:t,value:e,providedType:s,defaultType:i,path:o,localization:a}).key]||A)(n);var n}static _mergeOptions(t,e){const s=V.deepCopy(e),i="default"!==e.localization?.locale?e.localization:t?.localization||v.localization;return V.spread(t,s,i,""),s}static _dataToOptions(t,e){const i=JSON.parse(JSON.stringify(t.dataset));if(i?.tdTargetInput&&delete i.tdTargetInput,i?.tdTargetToggle&&delete i.tdTargetToggle,!i||0===Object.keys(i).length||i.constructor!==DOMStringMap)return e;const o={},a=t=>{const e={};return Object.keys(t).forEach((t=>{e[t.toLowerCase()]=t})),e},n=this.normalizeObject(a),r=a(e);return Object.keys(i).filter((t=>t.startsWith(s.dataKey))).map((t=>t.substring(2))).forEach((t=>{let s=r[t.toLowerCase()];if(t.includes("_")){const a=t.split("_");s=r[a[0].toLowerCase()],void 0!==s&&e[s].constructor===Object&&(o[s]=n(a,1,e[s],i[`td${t}`]))}else void 0!==s&&(o[s]=i[`td${t}`])})),this._mergeOptions(o,e)}static normalizeObject(t){const e=(s,i,o,a)=>{const n=t(o)[s[i].toLowerCase()],r={};return void 0===n||(o[n].constructor===Object?(i++,r[n]=e(s,i,o[n],a)):r[n]=a),r};return e}static _dateTypeCheck(t,e){return f(t,e)}static _typeCheckDateArray(t,e,s,i){return b(t,e,s,i)}static _typeCheckNumberArray(t,e,s){return D(t,e,s)}static dateConversion(t,e,s){return w(t,e,s)}static getFlattenDefaultOptions(){if(this._flattenDefaults)return this._flattenDefaults;const t=(e,s=[])=>Array.isArray(e)?[]:Object(e)===e?Object.entries(e).flatMap((([e,i])=>t(i,[...s,e]))):s.join(".");return this._flattenDefaults=t(v),this._flattenDefaults}static _validateConflicts(t){!t.display.sideBySide||t.display.components.clock&&(t.display.components.hours||t.display.components.minutes||t.display.components.seconds)||s.errorMessages.conflictingConfiguration("Cannot use side by side mode without the clock components"),t.restrictions.minDate&&t.restrictions.maxDate&&(t.restrictions.minDate.isAfter(t.restrictions.maxDate)&&s.errorMessages.conflictingConfiguration("minDate is after maxDate"),t.restrictions.maxDate.isBefore(t.restrictions.minDate)&&s.errorMessages.conflictingConfiguration("maxDate is before minDate")),t.multipleDates&&t.dateRange&&s.errorMessages.conflictingConfiguration('Cannot uss option "multipleDates" with "dateRange"')}}V.ignoreProperties=["meta","dayViewHeaderFormat","container","dateForms","ordinal"],V.isValue=t=>null!=t;class ${constructor(){this._dates=[],this.optionsStore=c.locate(p),this.validation=c.locate(u),this._eventEmitters=c.locate(y)}get picked(){return[...this._dates]}get lastPicked(){return this._dates[this.lastPickedIndex]?.clone}get lastPickedIndex(){return 0===this._dates.length?0:this._dates.length-1}formatInput(t){return t?(t.localization=this.optionsStore.options.localization,t.format()):""}parseInput(t){return V.dateConversion(t,"input",this.optionsStore.options.localization)}setFromInput(t,e){if(!t)return void this.setValue(void 0,e);const s=this.parseInput(t);s&&(s.setLocalization(this.optionsStore.options.localization),this.setValue(s,e))}add(t){this._dates.push(t)}isPicked(t,e){if(!d.isValid(t))return!1;if(!e)return void 0!==this._dates.find((e=>e.isSame(t)));const s=n(e),i=t.format(s);return void 0!==this._dates.map((t=>t.format(s))).find((t=>t===i))}pickedIndex(t,e){if(!d.isValid(t))return-1;if(!e)return this._dates.map((t=>t.valueOf())).indexOf(t.valueOf());const s=n(e),i=t.format(s);return this._dates.map((t=>t.format(s))).indexOf(i)}clear(){this.optionsStore.unset=!0,this._eventEmitters.triggerEvent.emit({type:s.events.change,date:void 0,oldDate:this.lastPicked,isClear:!0,isValid:!0}),this._dates=[],this.optionsStore.input&&(this.optionsStore.input.value=""),this._eventEmitters.updateDisplay.emit("all")}static getStartEndYear(t,e){const s=t/10,i=Math.floor(e/t)*t;return[i,i+9*s,Math.floor(e/s)*s]}updateInput(t){if(!this.optionsStore.input)return;let e=this.formatInput(t);(this.optionsStore.options.multipleDates||this.optionsStore.options.dateRange)&&(e=this._dates.map((t=>this.formatInput(t))).join(this.optionsStore.options.multipleDatesSeparator)),this.optionsStore.input.value!=e&&(this.optionsStore.input.value=e)}setValue(t,e){const o=void 0===e,a=!t&&o;let n=this.optionsStore.unset?null:this._dates[e]?.clone;if(!n&&!this.optionsStore.unset&&o&&a&&(n=this.lastPicked),t&&n?.isSame(t))return void this.updateInput(t);if(!t)return void this._setValueNull(a,e,n);e=e||0,t=t.clone,1!==this.optionsStore.options.stepping&&(t.minutes=Math.round(t.minutes/this.optionsStore.options.stepping)*this.optionsStore.options.stepping,t.startOf(i.minutes));const r=i=>{this._dates[e]=t,this._eventEmitters.updateViewDate.emit(t.clone),this.updateInput(t),this.optionsStore.unset=!1,this._eventEmitters.updateDisplay.emit("all"),this._eventEmitters.triggerEvent.emit({type:s.events.change,date:t,oldDate:n,isClear:a,isValid:i})};this.validation.isValid(t)&&this.validation.dateRangeIsValid(this.picked,e,t)?r(!0):(this.optionsStore.options.keepInvalid&&r(!1),this._eventEmitters.triggerEvent.emit({type:s.events.error,reason:s.errorMessages.failedToSetInvalidDate,date:t,oldDate:n}))}_setValueNull(t,e,i){!this.optionsStore.options.multipleDates||1===this._dates.length||t?(this.optionsStore.unset=!0,this._dates=[]):this._dates.splice(e,1),this.updateInput(),this._eventEmitters.triggerEvent.emit({type:s.events.change,date:void 0,oldDate:i,isClear:t,isValid:!0}),this._eventEmitters.updateDisplay.emit("all")}}var H;!function(t){t.next="next",t.previous="previous",t.changeCalendarView="changeCalendarView",t.selectMonth="selectMonth",t.selectYear="selectYear",t.selectDecade="selectDecade",t.selectDay="selectDay",t.selectHour="selectHour",t.selectMinute="selectMinute",t.selectSecond="selectSecond",t.incrementHours="incrementHours",t.incrementMinutes="incrementMinutes",t.incrementSeconds="incrementSeconds",t.decrementHours="decrementHours",t.decrementMinutes="decrementMinutes",t.decrementSeconds="decrementSeconds",t.toggleMeridiem="toggleMeridiem",t.togglePicker="togglePicker",t.showClock="showClock",t.showHours="showHours",t.showMinutes="showMinutes",t.showSeconds="showSeconds",t.clear="clear",t.close="close",t.today="today"}(H||(H={}));var O=H;class z{constructor(){this.optionsStore=c.locate(p),this.dates=c.locate($),this.validation=c.locate(u)}getPicker(){const t=document.createElement("div");if(t.classList.add(s.css.daysContainer),t.append(...this._daysOfTheWeek()),this.optionsStore.options.display.calendarWeeks){const e=document.createElement("div");e.classList.add(s.css.calendarWeeks,s.css.noHighlight),t.appendChild(e)}const{rangeHoverEvent:e,rangeHoverOutEvent:i}=this.handleMouseEvents(t);for(let o=0;o<42;o++){if(0!==o&&o%7==0&&this.optionsStore.options.display.calendarWeeks){const e=document.createElement("div");e.classList.add(s.css.calendarWeeks,s.css.noHighlight),t.appendChild(e)}const a=document.createElement("div");a.setAttribute("data-action",O.selectDay),t.appendChild(a),matchMedia("(hover: hover)").matches&&this.optionsStore.options.dateRange&&(a.addEventListener("mouseover",e),a.addEventListener("mouseout",i))}return t}_update(t,e){const o=t.getElementsByClassName(s.css.daysContainer)[0];this._updateCalendarView(o);const a=this.optionsStore.viewDate.clone.startOf(i.month).startOf("weekDay",this.optionsStore.options.localization.startOfTheWeek).manipulate(12,i.hours);this._handleCalendarWeeks(o,a.clone),o.querySelectorAll(`[data-action="${O.selectDay}"]`).forEach((t=>{const o=[];o.push(s.css.day),a.isBefore(this.optionsStore.viewDate,i.month)&&o.push(s.css.old),a.isAfter(this.optionsStore.viewDate,i.month)&&o.push(s.css.new),this.optionsStore.unset||this.optionsStore.options.dateRange||!this.dates.isPicked(a,i.date)||o.push(s.css.active),this.validation.isValid(a,i.date)||o.push(s.css.disabled),a.isSame(new d,i.date)&&o.push(s.css.today),0!==a.weekDay&&6!==a.weekDay||o.push(s.css.weekend),this._handleDateRange(a,o),e(i.date,a,o,t),t.classList.remove(...t.classList),t.classList.add(...o),t.setAttribute("data-value",this._dateToDataValue(a)),t.setAttribute("data-day",`${a.date}`),t.innerText=a.parts(void 0,{day:"numeric"}).day,a.manipulate(1,i.date)}))}_dateToDataValue(t){return d.isValid(t)?`${t.year}-${t.monthFormatted}-${t.dateFormatted}`:""}_handleDateRange(t,e){const o=this.dates.picked[0],a=this.dates.picked[1];this.optionsStore.options.dateRange&&(t.isBetween(o,a,i.date)&&e.push(s.css.rangeIn),t.isSame(o,i.date)&&e.push(s.css.rangeStart),t.isSame(a,i.date)&&e.push(s.css.rangeEnd))}handleMouseEvents(t){return{rangeHoverEvent:e=>{const o=e?.currentTarget;if(1!==this.dates.picked.length||o.classList.contains(s.css.disabled))return;const a=[...t.querySelectorAll(".day")],n=o.getAttribute("data-value"),r=d.fromString(n,{format:"yyyy-MM-dd"}),l=a.findIndex((t=>t.getAttribute("data-value")===n)),c=this.dates.picked[0],h=this.dates.picked[1],p=this._dateToDataValue(c),u=a.findIndex((t=>t.getAttribute("data-value")===p)),m=a[u];let y;r.isSame(c,i.date)||o.classList.remove(s.css.rangeStart),r.isSame(h,i.date)||o.classList.remove(s.css.rangeEnd),r.isBefore(c)?(o.classList.add(s.css.rangeStart),m?.classList.remove(s.css.rangeStart),m?.classList.add(s.css.rangeEnd),y=(t,e)=>e>l&&eeu),a.filter(y).forEach((t=>{t.classList.add(s.css.rangeIn)}))},rangeHoverOutEvent:e=>{const o=[...t.querySelectorAll(".day")];if(1===this.dates.picked.length&&o.forEach((t=>t.classList.remove(s.css.rangeIn))),1!==this.dates.picked.length)return;const a=e?.currentTarget,n=new d(a.getAttribute("data-value"));n.isSame(this.dates.picked[0],i.date)||a.classList.remove(s.css.rangeStart),n.isSame(this.dates.picked[1],i.date)||a.classList.remove(s.css.rangeEnd)}}}_updateCalendarView(t){if("calendar"!==this.optionsStore.currentView)return;const[e,o,a]=t.parentElement.getElementsByClassName(s.css.calendarHeader)[0].getElementsByTagName("div");o.setAttribute(s.css.daysContainer,this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat)),this.optionsStore.options.display.components.month?o.classList.remove(s.css.disabled):o.classList.add(s.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1,i.month),i.month)?e.classList.remove(s.css.disabled):e.classList.add(s.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1,i.month),i.month)?a.classList.remove(s.css.disabled):a.classList.add(s.css.disabled)}_daysOfTheWeek(){const t=this.optionsStore.viewDate.clone.startOf("weekDay",this.optionsStore.options.localization.startOfTheWeek).startOf(i.date),e=[];if(document.createElement("div"),this.optionsStore.options.display.calendarWeeks){const t=document.createElement("div");t.classList.add(s.css.calendarWeeks,s.css.noHighlight),t.innerText="#",e.push(t)}for(let o=0;o<7;o++){const o=document.createElement("div");o.classList.add(s.css.dayOfTheWeek,s.css.noHighlight),o.innerText=t.format({weekday:"short"}),t.manipulate(1,i.date),e.push(o)}return e}_handleCalendarWeeks(t,e){[...t.querySelectorAll(`.${s.css.calendarWeeks}`)].filter((t=>"#"!==t.innerText)).forEach((t=>{t.innerText=`${e.week}`,e.manipulate(7,i.date)}))}}class I{constructor(){this.optionsStore=c.locate(p),this.dates=c.locate($),this.validation=c.locate(u)}getPicker(){const t=document.createElement("div");t.classList.add(s.css.monthsContainer);for(let e=0;e<12;e++){const e=document.createElement("div");e.setAttribute("data-action",O.selectMonth),t.appendChild(e)}return t}_update(t,e){const o=t.getElementsByClassName(s.css.monthsContainer)[0];if("months"===this.optionsStore.currentView){const[t,e,a]=o.parentElement.getElementsByClassName(s.css.calendarHeader)[0].getElementsByTagName("div");e.setAttribute(s.css.monthsContainer,this.optionsStore.viewDate.format({year:"numeric"})),this.optionsStore.options.display.components.year?e.classList.remove(s.css.disabled):e.classList.add(s.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1,i.year),i.year)?t.classList.remove(s.css.disabled):t.classList.add(s.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1,i.year),i.year)?a.classList.remove(s.css.disabled):a.classList.add(s.css.disabled)}const a=this.optionsStore.viewDate.clone.startOf(i.year);o.querySelectorAll(`[data-action="${O.selectMonth}"]`).forEach(((t,o)=>{const n=[];n.push(s.css.month),!this.optionsStore.unset&&this.dates.isPicked(a,i.month)&&n.push(s.css.active),this.validation.isValid(a,i.month)||n.push(s.css.disabled),e(i.month,a,n,t),t.classList.remove(...t.classList),t.classList.add(...n),t.setAttribute("data-value",`${o}`),t.innerText=`${a.format({month:"short"})}`,a.manipulate(1,i.month)}))}}class x{constructor(){this.optionsStore=c.locate(p),this.dates=c.locate($),this.validation=c.locate(u)}getPicker(){const t=document.createElement("div");t.classList.add(s.css.yearsContainer);for(let e=0;e<12;e++){const e=document.createElement("div");e.setAttribute("data-action",O.selectYear),t.appendChild(e)}return t}_update(t,e){this._startYear=this.optionsStore.viewDate.clone.manipulate(-1,i.year),this._endYear=this.optionsStore.viewDate.clone.manipulate(10,i.year);const o=t.getElementsByClassName(s.css.yearsContainer)[0];if("years"===this.optionsStore.currentView){const[t,e,a]=o.parentElement.getElementsByClassName(s.css.calendarHeader)[0].getElementsByTagName("div");e.setAttribute(s.css.yearsContainer,`${this._startYear.format({year:"numeric"})}-${this._endYear.format({year:"numeric"})}`),this.optionsStore.options.display.components.decades?e.classList.remove(s.css.disabled):e.classList.add(s.css.disabled),this.validation.isValid(this._startYear,i.year)?t.classList.remove(s.css.disabled):t.classList.add(s.css.disabled),this.validation.isValid(this._endYear,i.year)?a.classList.remove(s.css.disabled):a.classList.add(s.css.disabled)}const a=this.optionsStore.viewDate.clone.startOf(i.year).manipulate(-1,i.year);o.querySelectorAll(`[data-action="${O.selectYear}"]`).forEach((t=>{const o=[];o.push(s.css.year),!this.optionsStore.unset&&this.dates.isPicked(a,i.year)&&o.push(s.css.active),this.validation.isValid(a,i.year)||o.push(s.css.disabled),e(i.year,a,o,t),t.classList.remove(...t.classList),t.classList.add(...o),t.setAttribute("data-value",`${a.year}`),t.innerText=a.format({year:"numeric"}),a.manipulate(1,i.year)}))}}class P{constructor(){this.optionsStore=c.locate(p),this.dates=c.locate($),this.validation=c.locate(u)}getPicker(){const t=document.createElement("div");t.classList.add(s.css.decadesContainer);for(let e=0;e<12;e++){const e=document.createElement("div");e.setAttribute("data-action",O.selectDecade),t.appendChild(e)}return t}_update(t,e){const[o,a]=$.getStartEndYear(100,this.optionsStore.viewDate.year);this._startDecade=this.optionsStore.viewDate.clone.startOf(i.year),this._startDecade.year=o,this._endDecade=this.optionsStore.viewDate.clone.startOf(i.year),this._endDecade.year=a;const n=t.getElementsByClassName(s.css.decadesContainer)[0],[r,d,l]=n.parentElement.getElementsByClassName(s.css.calendarHeader)[0].getElementsByTagName("div");"decades"===this.optionsStore.currentView&&(d.setAttribute(s.css.decadesContainer,`${this._startDecade.format({year:"numeric"})}-${this._endDecade.format({year:"numeric"})}`),this.validation.isValid(this._startDecade,i.year)?r.classList.remove(s.css.disabled):r.classList.add(s.css.disabled),this.validation.isValid(this._endDecade,i.year)?l.classList.remove(s.css.disabled):l.classList.add(s.css.disabled));const c=this.dates.picked.map((t=>t.year));n.querySelectorAll(`[data-action="${O.selectDecade}"]`).forEach(((t,o)=>{if(0===o)return t.classList.add(s.css.old),this._startDecade.year-10<0?(t.textContent=" ",r.classList.add(s.css.disabled),t.classList.add(s.css.disabled),void t.setAttribute("data-value","")):(t.innerText=this._startDecade.clone.manipulate(-10,i.year).format({year:"numeric"}),void t.setAttribute("data-value",`${this._startDecade.year}`));const a=[];a.push(s.css.decade);const n=this._startDecade.year,d=this._startDecade.year+9;!this.optionsStore.unset&&c.filter((t=>t>=n&&t<=d)).length>0&&a.push(s.css.active),e("decade",this._startDecade,a,t),t.classList.remove(...t.classList),t.classList.add(...a),t.setAttribute("data-value",`${this._startDecade.year}`),t.innerText=`${this._startDecade.format({year:"numeric"})}`,this._startDecade.manipulate(10,i.year)}))}}class N{constructor(){this._gridColumns="",this.optionsStore=c.locate(p),this.dates=c.locate($),this.validation=c.locate(u)}getPicker(t){const e=document.createElement("div");return e.classList.add(s.css.clockContainer),e.append(...this._grid(t)),e}_update(t){const e=t.getElementsByClassName(s.css.clockContainer)[0];let o=this.dates.lastPicked?.clone;if(!o&&this.optionsStore.options.useCurrent&&(o=this.optionsStore.viewDate.clone),e.querySelectorAll(".disabled").forEach((t=>t.classList.remove(s.css.disabled))),this.optionsStore.options.display.components.hours&&(this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1,i.hours),i.hours)||e.querySelector(`[data-action=${O.incrementHours}]`).classList.add(s.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1,i.hours),i.hours)||e.querySelector(`[data-action=${O.decrementHours}]`).classList.add(s.css.disabled),e.querySelector(`[data-time-component=${i.hours}]`).innerText=o?o.getHoursFormatted(this.optionsStore.options.localization.hourCycle):"--"),this.optionsStore.options.display.components.minutes&&(this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1,i.minutes),i.minutes)||e.querySelector(`[data-action=${O.incrementMinutes}]`).classList.add(s.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1,i.minutes),i.minutes)||e.querySelector(`[data-action=${O.decrementMinutes}]`).classList.add(s.css.disabled),e.querySelector(`[data-time-component=${i.minutes}]`).innerText=o?o.minutesFormatted:"--"),this.optionsStore.options.display.components.seconds&&(this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1,i.seconds),i.seconds)||e.querySelector(`[data-action=${O.incrementSeconds}]`).classList.add(s.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1,i.seconds),i.seconds)||e.querySelector(`[data-action=${O.decrementSeconds}]`).classList.add(s.css.disabled),e.querySelector(`[data-time-component=${i.seconds}]`).innerText=o?o.secondsFormatted:"--"),this.optionsStore.isTwelveHour){const t=e.querySelector(`[data-action=${O.toggleMeridiem}]`),a=(o||this.optionsStore.viewDate).clone;t.innerText=a.meridiem(),this.validation.isValid(a.manipulate(a.hours>=12?-12:12,i.hours))?t.classList.remove(s.css.disabled):t.classList.add(s.css.disabled)}e.style.gridTemplateAreas=`"${this._gridColumns}"`}_grid(t){this._gridColumns="";const e=[],o=[],a=[],n=document.createElement("div"),r=t(this.optionsStore.options.display.icons.up),d=t(this.optionsStore.options.display.icons.down);n.classList.add(s.css.separator,s.css.noHighlight);const l=n.cloneNode(!0);l.innerHTML=":";const c=(t=!1)=>t?l.cloneNode(!0):n.cloneNode(!0);if(this.optionsStore.options.display.components.hours){let t=document.createElement("div");t.setAttribute("title",this.optionsStore.options.localization.incrementHour),t.setAttribute("data-action",O.incrementHours),t.appendChild(r.cloneNode(!0)),e.push(t),t=document.createElement("div"),t.setAttribute("title",this.optionsStore.options.localization.pickHour),t.setAttribute("data-action",O.showHours),t.setAttribute("data-time-component",i.hours),o.push(t),t=document.createElement("div"),t.setAttribute("title",this.optionsStore.options.localization.decrementHour),t.setAttribute("data-action",O.decrementHours),t.appendChild(d.cloneNode(!0)),a.push(t),this._gridColumns+="a"}if(this.optionsStore.options.display.components.minutes){this._gridColumns+=" a",this.optionsStore.options.display.components.hours&&(e.push(c()),o.push(c(!0)),a.push(c()),this._gridColumns+=" a");let t=document.createElement("div");t.setAttribute("title",this.optionsStore.options.localization.incrementMinute),t.setAttribute("data-action",O.incrementMinutes),t.appendChild(r.cloneNode(!0)),e.push(t),t=document.createElement("div"),t.setAttribute("title",this.optionsStore.options.localization.pickMinute),t.setAttribute("data-action",O.showMinutes),t.setAttribute("data-time-component",i.minutes),o.push(t),t=document.createElement("div"),t.setAttribute("title",this.optionsStore.options.localization.decrementMinute),t.setAttribute("data-action",O.decrementMinutes),t.appendChild(d.cloneNode(!0)),a.push(t)}if(this.optionsStore.options.display.components.seconds){this._gridColumns+=" a",this.optionsStore.options.display.components.minutes&&(e.push(c()),o.push(c(!0)),a.push(c()),this._gridColumns+=" a");let t=document.createElement("div");t.setAttribute("title",this.optionsStore.options.localization.incrementSecond),t.setAttribute("data-action",O.incrementSeconds),t.appendChild(r.cloneNode(!0)),e.push(t),t=document.createElement("div"),t.setAttribute("title",this.optionsStore.options.localization.pickSecond),t.setAttribute("data-action",O.showSeconds),t.setAttribute("data-time-component",i.seconds),o.push(t),t=document.createElement("div"),t.setAttribute("title",this.optionsStore.options.localization.decrementSecond),t.setAttribute("data-action",O.decrementSeconds),t.appendChild(d.cloneNode(!0)),a.push(t)}if(this.optionsStore.isTwelveHour){this._gridColumns+=" a";let t=c();e.push(t);const i=document.createElement("button");i.setAttribute("type","button"),i.setAttribute("title",this.optionsStore.options.localization.toggleMeridiem),i.setAttribute("data-action",O.toggleMeridiem),i.setAttribute("tabindex","-1"),s.css.toggleMeridiem.includes(",")?i.classList.add(...s.css.toggleMeridiem.split(",")):i.classList.add(s.css.toggleMeridiem),t=document.createElement("div"),t.classList.add(s.css.noHighlight),t.appendChild(i),o.push(t),t=c(),a.push(t)}return this._gridColumns=this._gridColumns.trim(),[...e,...o,...a]}}class F{constructor(){this.optionsStore=c.locate(p),this.validation=c.locate(u)}getPicker(){const t=document.createElement("div");t.classList.add(s.css.hourContainer);for(let e=0;e<(this.optionsStore.isTwelveHour?12:24);e++){const e=document.createElement("div");e.setAttribute("data-action",O.selectHour),t.appendChild(e)}return t}_update(t,e){const o=t.getElementsByClassName(s.css.hourContainer)[0],a=this.optionsStore.viewDate.clone.startOf(i.date);o.querySelectorAll(`[data-action="${O.selectHour}"]`).forEach((t=>{const o=[];o.push(s.css.hour),this.validation.isValid(a,i.hours)||o.push(s.css.disabled),e(i.hours,a,o,t),t.classList.remove(...t.classList),t.classList.add(...o),t.setAttribute("data-value",`${a.hours}`),t.innerText=a.getHoursFormatted(this.optionsStore.options.localization.hourCycle),a.manipulate(1,i.hours)}))}}class B{constructor(){this.optionsStore=c.locate(p),this.validation=c.locate(u)}getPicker(){const t=document.createElement("div");t.classList.add(s.css.minuteContainer);const e=1===this.optionsStore.options.stepping?5:this.optionsStore.options.stepping;for(let s=0;s<60/e;s++){const e=document.createElement("div");e.setAttribute("data-action",O.selectMinute),t.appendChild(e)}return t}_update(t,e){const o=t.getElementsByClassName(s.css.minuteContainer)[0],a=this.optionsStore.viewDate.clone.startOf(i.hours),n=1===this.optionsStore.options.stepping?5:this.optionsStore.options.stepping;o.querySelectorAll(`[data-action="${O.selectMinute}"]`).forEach((t=>{const o=[];o.push(s.css.minute),this.validation.isValid(a,i.minutes)||o.push(s.css.disabled),e(i.minutes,a,o,t),t.classList.remove(...t.classList),t.classList.add(...o),t.setAttribute("data-value",`${a.minutes}`),t.innerText=a.minutesFormatted,a.manipulate(n,i.minutes)}))}}class W{constructor(){this.optionsStore=c.locate(p),this.validation=c.locate(u)}getPicker(){const t=document.createElement("div");t.classList.add(s.css.secondContainer);for(let e=0;e<12;e++){const e=document.createElement("div");e.setAttribute("data-action",O.selectSecond),t.appendChild(e)}return t}_update(t,e){const o=t.getElementsByClassName(s.css.secondContainer)[0],a=this.optionsStore.viewDate.clone.startOf(i.minutes);o.querySelectorAll(`[data-action="${O.selectSecond}"]`).forEach((t=>{const o=[];o.push(s.css.second),this.validation.isValid(a,i.seconds)||o.push(s.css.disabled),e(i.seconds,a,o,t),t.classList.remove(...t.classList),t.classList.add(...o),t.setAttribute("data-value",`${a.seconds}`),t.innerText=a.secondsFormatted,a.manipulate(5,i.seconds)}))}}class q{static toggle(t){t.classList.contains(s.css.show)?this.hide(t):this.show(t)}static showImmediately(t){t.classList.remove(s.css.collapsing),t.classList.add(s.css.collapse,s.css.show),t.style.height=""}static show(t){if(t.classList.contains(s.css.collapsing)||t.classList.contains(s.css.show))return;t.style.height="0",t.classList.remove(s.css.collapse),t.classList.add(s.css.collapsing),setTimeout((()=>{q.showImmediately(t)}),this.getTransitionDurationFromElement(t)),t.style.height=`${t.scrollHeight}px`}static hideImmediately(t){t&&(t.classList.remove(s.css.collapsing,s.css.show),t.classList.add(s.css.collapse))}static hide(t){if(t.classList.contains(s.css.collapsing)||!t.classList.contains(s.css.show))return;t.style.height=`${t.getBoundingClientRect().height}px`;t.offsetHeight,t.classList.remove(s.css.collapse,s.css.show),t.classList.add(s.css.collapsing),t.style.height="",setTimeout((()=>{q.hideImmediately(t)}),this.getTransitionDurationFromElement(t))}}q.getTransitionDurationFromElement=t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:s}=window.getComputedStyle(t);const i=Number.parseFloat(e),o=Number.parseFloat(s);return i||o?(e=e.split(",")[0],s=s.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(s))):0};class Y{constructor(){this._isVisible=!1,this._documentClickEvent=t=>{this.optionsStore.options.debug||window.debug||!this._isVisible||t.composedPath().includes(this.widget)||t.composedPath()?.includes(this.optionsStore.element)||this.hide()},this._actionsClickEvent=t=>{this._eventEmitters.action.emit({e:t})},this.optionsStore=c.locate(p),this.validation=c.locate(u),this.dates=c.locate($),this.dateDisplay=c.locate(z),this.monthDisplay=c.locate(I),this.yearDisplay=c.locate(x),this.decadeDisplay=c.locate(P),this.timeDisplay=c.locate(N),this.hourDisplay=c.locate(F),this.minuteDisplay=c.locate(B),this.secondDisplay=c.locate(W),this._eventEmitters=c.locate(y),this._widget=void 0,this._eventEmitters.updateDisplay.subscribe((t=>{this._update(t)}))}get widget(){return this._widget}get dateContainer(){return this.widget?.querySelector(`div.${s.css.dateContainer}`)}get timeContainer(){return this.widget?.querySelector(`div.${s.css.timeContainer}`)}get isVisible(){return this._isVisible}_update(t){if(this.widget)switch(t){case i.seconds:this.secondDisplay._update(this.widget,this.paint);break;case i.minutes:this.minuteDisplay._update(this.widget,this.paint);break;case i.hours:this.hourDisplay._update(this.widget,this.paint);break;case i.date:this.dateDisplay._update(this.widget,this.paint);break;case i.month:this.monthDisplay._update(this.widget,this.paint);break;case i.year:this.yearDisplay._update(this.widget,this.paint);break;case"decade":this.decadeDisplay._update(this.widget,this.paint);break;case"clock":if(!this._hasTime)break;this.timeDisplay._update(this.widget),this._update(i.hours),this._update(i.minutes),this._update(i.seconds);break;case"calendar":this._update(i.date),this._update(i.year),this._update(i.month),this.decadeDisplay._update(this.widget,this.paint),this._updateCalendarHeader();break;case"all":this._hasTime&&this._update("clock"),this._hasDate&&this._update("calendar")}}paint(t,e,s,i){}show(){if(null==this.widget){if(this._showSetDefaultIfNeeded(),this._buildWidget(),this._updateTheme(),this._showSetupViewMode(),this.optionsStore.options.display.inline)this.optionsStore.element.appendChild(this.widget);else{const t=this.optionsStore.options?.container||document.body,e=this.optionsStore.options?.display?.placement||"bottom";t.appendChild(this.widget),this.createPopup(this.optionsStore.element,this.widget,{modifiers:[{name:"eventListeners",enabled:!0}],placement:"rtl"===document.documentElement.dir?`${e}-end`:`${e}-start`}).then()}"clock"==this.optionsStore.options.display.viewMode&&this._eventEmitters.action.emit({e:null,action:O.showClock}),this.widget.querySelectorAll("[data-action]").forEach((t=>t.addEventListener("click",this._actionsClickEvent))),this._hasTime&&this.optionsStore.options.display.sideBySide&&(this.timeDisplay._update(this.widget),this.widget.getElementsByClassName(s.css.clockContainer)[0].style.display="grid")}this.widget.classList.add(s.css.show),this.optionsStore.options.display.inline||(this.updatePopup(),document.addEventListener("click",this._documentClickEvent)),this._eventEmitters.triggerEvent.emit({type:s.events.show}),this._isVisible=!0}_showSetupViewMode(){const t=this._hasTime&&!this._hasDate;t?(this.optionsStore.currentView="clock",this._eventEmitters.action.emit({e:null,action:O.showClock})):this.optionsStore.currentCalendarViewMode||(this.optionsStore.currentCalendarViewMode=this.optionsStore.minimumCalendarViewMode),t||"clock"===this.optionsStore.options.display.viewMode||(this._hasTime&&(this.optionsStore.options.display.sideBySide?q.show(this.timeContainer):q.hideImmediately(this.timeContainer)),q.show(this.dateContainer)),this._hasDate&&this._showMode()}_showSetDefaultIfNeeded(){if(0==this.dates.picked.length){if(this.optionsStore.options.useCurrent&&!this.optionsStore.options.defaultDate){const t=(new d).setLocalization(this.optionsStore.options.localization);if(!this.optionsStore.options.keepInvalid){let e=0,s=1;for(this.optionsStore.options.restrictions.maxDate?.isBefore(t)&&(s=-1);!this.validation.isValid(t)&&e>31;)t.manipulate(s,i.date),e++}this.dates.setValue(t)}this.optionsStore.options.defaultDate&&this.dates.setValue(this.optionsStore.options.defaultDate)}}async createPopup(t,e,s){let i;if(window?.Popper)i=window?.Popper?.createPopper;else{const{createPopper:t}=await import("@popperjs/core");i=t}i&&(this._popperInstance=i(t,e,s))}updatePopup(){this._popperInstance?.update()}_showMode(t){if(!this.widget)return;if(t){const e=Math.max(this.optionsStore.minimumCalendarViewMode,Math.min(3,this.optionsStore.currentCalendarViewMode+t));if(this.optionsStore.currentCalendarViewMode==e)return;this.optionsStore.currentCalendarViewMode=e}this.widget.querySelectorAll(`.${s.css.dateContainer} > div:not(.${s.css.calendarHeader}), .${s.css.timeContainer} > div:not(.${s.css.clockContainer})`).forEach((t=>t.style.display="none"));const e=h[this.optionsStore.currentCalendarViewMode],i=this.widget.querySelector(`.${e.className}`);switch(e.className){case s.css.decadesContainer:this.decadeDisplay._update(this.widget,this.paint);break;case s.css.yearsContainer:this.yearDisplay._update(this.widget,this.paint);break;case s.css.monthsContainer:this.monthDisplay._update(this.widget,this.paint);break;case s.css.daysContainer:this.dateDisplay._update(this.widget,this.paint)}i.style.display="grid",this.optionsStore.options.display.sideBySide&&(this.widget.querySelectorAll(`.${s.css.clockContainer}`)[0].style.display="grid"),this._updateCalendarHeader(),this._eventEmitters.viewUpdate.emit()}_updateTheme(t){if(this.widget){if(t){if(this.optionsStore.options.display.theme===t)return;this.optionsStore.options.display.theme=t}this.widget.classList.remove("light","dark"),this.widget.classList.add(this._getThemeClass()),"auto"===this.optionsStore.options.display.theme?window.matchMedia(s.css.isDarkPreferredQuery).addEventListener("change",(()=>this._updateTheme())):window.matchMedia(s.css.isDarkPreferredQuery).removeEventListener("change",(()=>this._updateTheme()))}}_getThemeClass(){const t=this.optionsStore.options.display.theme||"auto",e=window.matchMedia&&window.matchMedia(s.css.isDarkPreferredQuery).matches;switch(t){case"light":return s.css.lightTheme;case"dark":return s.css.darkTheme;case"auto":return e?s.css.darkTheme:s.css.lightTheme}}_updateCalendarHeader(){if(!this._hasDate)return;const t=[...this.widget.querySelector(`.${s.css.dateContainer} div[style*="display: grid"]`).classList].find((t=>t.startsWith(s.css.dateContainer))),[e,i,o]=this.widget.getElementsByClassName(s.css.calendarHeader)[0].getElementsByTagName("div");switch(t){case s.css.decadesContainer:e.setAttribute("title",this.optionsStore.options.localization.previousCentury),i.setAttribute("title",""),o.setAttribute("title",this.optionsStore.options.localization.nextCentury);break;case s.css.yearsContainer:e.setAttribute("title",this.optionsStore.options.localization.previousDecade),i.setAttribute("title",this.optionsStore.options.localization.selectDecade),o.setAttribute("title",this.optionsStore.options.localization.nextDecade);break;case s.css.monthsContainer:e.setAttribute("title",this.optionsStore.options.localization.previousYear),i.setAttribute("title",this.optionsStore.options.localization.selectYear),o.setAttribute("title",this.optionsStore.options.localization.nextYear);break;case s.css.daysContainer:e.setAttribute("title",this.optionsStore.options.localization.previousMonth),i.setAttribute("title",this.optionsStore.options.localization.selectMonth),o.setAttribute("title",this.optionsStore.options.localization.nextMonth),i.setAttribute(t,this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat))}i.innerText=i.getAttribute(t)}hide(){this.widget&&this._isVisible&&(this.widget.classList.remove(s.css.show),this._isVisible&&(this._eventEmitters.triggerEvent.emit({type:s.events.hide,date:this.optionsStore.unset?null:this.dates.lastPicked?.clone}),this._isVisible=!1),document.removeEventListener("click",this._documentClickEvent))}toggle(){return this._isVisible?this.hide():this.show()}_dispose(){document.removeEventListener("click",this._documentClickEvent),this.widget&&(this.widget.querySelectorAll("[data-action]").forEach((t=>t.removeEventListener("click",this._actionsClickEvent))),this.widget.parentNode.removeChild(this.widget),this._widget=void 0)}_buildWidget(){const t=document.createElement("div");t.classList.add(s.css.widget);const e=document.createElement("div");e.classList.add(s.css.dateContainer),e.append(this.getHeadTemplate(),this.decadeDisplay.getPicker(),this.yearDisplay.getPicker(),this.monthDisplay.getPicker(),this.dateDisplay.getPicker());const i=document.createElement("div");i.classList.add(s.css.timeContainer),i.appendChild(this.timeDisplay.getPicker(this._iconTag.bind(this))),i.appendChild(this.hourDisplay.getPicker()),i.appendChild(this.minuteDisplay.getPicker()),i.appendChild(this.secondDisplay.getPicker());const o=document.createElement("div");if(o.classList.add(s.css.toolbar),o.append(...this.getToolbarElements()),this.optionsStore.options.display.inline&&t.classList.add(s.css.inline),this.optionsStore.options.display.calendarWeeks&&t.classList.add("calendarWeeks"),this.optionsStore.options.display.sideBySide&&this._hasDateAndTime)return void this._buildWidgetSideBySide(t,e,i,o);"top"===this.optionsStore.options.display.toolbarPlacement&&t.appendChild(o);const a=(e,i,o,a)=>{e&&(i&&(o.classList.add(s.css.collapse),a&&o.classList.add(s.css.show)),t.appendChild(o))};a(this._hasDate,this._hasTime,e,"clock"!==this.optionsStore.options.display.viewMode),a(this._hasTime,this._hasDate,i,"clock"===this.optionsStore.options.display.viewMode),"bottom"===this.optionsStore.options.display.toolbarPlacement&&t.appendChild(o);const n=document.createElement("div");n.classList.add("arrow"),n.setAttribute("data-popper-arrow",""),t.appendChild(n),this._widget=t}_buildWidgetSideBySide(t,e,i,o){t.classList.add(s.css.sideBySide),"top"===this.optionsStore.options.display.toolbarPlacement&&t.appendChild(o);const a=document.createElement("div");a.classList.add("td-row"),e.classList.add("td-half"),i.classList.add("td-half"),a.appendChild(e),a.appendChild(i),t.appendChild(a),"bottom"===this.optionsStore.options.display.toolbarPlacement&&t.appendChild(o),this._widget=t}get _hasTime(){return this.optionsStore.options.display.components.clock&&(this.optionsStore.options.display.components.hours||this.optionsStore.options.display.components.minutes||this.optionsStore.options.display.components.seconds)}get _hasDate(){return this.optionsStore.options.display.components.calendar&&(this.optionsStore.options.display.components.year||this.optionsStore.options.display.components.month||this.optionsStore.options.display.components.date)}get _hasDateAndTime(){return this._hasDate&&this._hasTime}getToolbarElements(){const t=[];if(this.optionsStore.options.display.buttons.today){const e=document.createElement("div");e.setAttribute("data-action",O.today),e.setAttribute("title",this.optionsStore.options.localization.today),e.appendChild(this._iconTag(this.optionsStore.options.display.icons.today)),t.push(e)}if(!this.optionsStore.options.display.sideBySide&&this._hasDate&&this._hasTime){let e,s;"clock"===this.optionsStore.options.display.viewMode?(e=this.optionsStore.options.localization.selectDate,s=this.optionsStore.options.display.icons.date):(e=this.optionsStore.options.localization.selectTime,s=this.optionsStore.options.display.icons.time);const i=document.createElement("div");i.setAttribute("data-action",O.togglePicker),i.setAttribute("title",e),i.appendChild(this._iconTag(s)),t.push(i)}if(this.optionsStore.options.display.buttons.clear){const e=document.createElement("div");e.setAttribute("data-action",O.clear),e.setAttribute("title",this.optionsStore.options.localization.clear),e.appendChild(this._iconTag(this.optionsStore.options.display.icons.clear)),t.push(e)}if(this.optionsStore.options.display.buttons.close){const e=document.createElement("div");e.setAttribute("data-action",O.close),e.setAttribute("title",this.optionsStore.options.localization.close),e.appendChild(this._iconTag(this.optionsStore.options.display.icons.close)),t.push(e)}return t}getHeadTemplate(){const t=document.createElement("div");t.classList.add(s.css.calendarHeader);const e=document.createElement("div");e.classList.add(s.css.previous),e.setAttribute("data-action",O.previous),e.appendChild(this._iconTag(this.optionsStore.options.display.icons.previous));const i=document.createElement("div");i.classList.add(s.css.switch),i.setAttribute("data-action",O.changeCalendarView);const o=document.createElement("div");return o.classList.add(s.css.next),o.setAttribute("data-action",O.next),o.appendChild(this._iconTag(this.optionsStore.options.display.icons.next)),t.append(e,i,o),t}_iconTag(t){if("sprites"===this.optionsStore.options.display.icons.type){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","use");return s.setAttribute("xlink:href",t),s.setAttribute("href",t),e.appendChild(s),e}const e=document.createElement("i");return e.classList.add(...t.split(" ")),e}_rebuild(){const t=this._isVisible;this._dispose(),t&&this.show()}refreshCurrentView(){switch(this._isVisible||this._dispose(),this.optionsStore.currentView){case"clock":this._update("clock");break;case"calendar":this._update(i.date);break;case"months":this._update(i.month);break;case"years":this._update(i.year);break;case"decades":this._update("decade")}}}class j{constructor(){this.optionsStore=c.locate(p),this.dates=c.locate($),this.validation=c.locate(u),this.display=c.locate(Y),this._eventEmitters=c.locate(y),this._eventEmitters.action.subscribe((t=>{this.do(t.e,t.action)}))}do(t,e){const o=t?.currentTarget;if(o?.classList?.contains(s.css.disabled))return;e=e||o?.dataset?.action;const a=(this.dates.lastPicked||this.optionsStore.viewDate).clone;switch(e){case O.next:case O.previous:this.handleNextPrevious(e);break;case O.changeCalendarView:this.display._showMode(1),this.display._updateCalendarHeader();break;case O.selectMonth:case O.selectYear:case O.selectDecade:this.handleSelectCalendarMode(e,o);break;case O.selectDay:this.handleSelectDay(o);break;case O.selectHour:{let e=+o.dataset.value;a.hours>=12&&this.optionsStore.isTwelveHour&&(e+=12),a.hours=e,this.dates.setValue(a,this.dates.lastPickedIndex),this.hideOrClock(t);break}case O.selectMinute:a.minutes=+o.dataset.value,this.dates.setValue(a,this.dates.lastPickedIndex),this.hideOrClock(t);break;case O.selectSecond:a.seconds=+o.dataset.value,this.dates.setValue(a,this.dates.lastPickedIndex),this.hideOrClock(t);break;case O.incrementHours:this.manipulateAndSet(a,i.hours);break;case O.incrementMinutes:this.manipulateAndSet(a,i.minutes,this.optionsStore.options.stepping);break;case O.incrementSeconds:this.manipulateAndSet(a,i.seconds);break;case O.decrementHours:this.manipulateAndSet(a,i.hours,-1);break;case O.decrementMinutes:this.manipulateAndSet(a,i.minutes,-1*this.optionsStore.options.stepping);break;case O.decrementSeconds:this.manipulateAndSet(a,i.seconds,-1);break;case O.toggleMeridiem:this.manipulateAndSet(a,i.hours,this.dates.lastPicked.hours>=12?-12:12);break;case O.togglePicker:this.handleToggle(o);break;case O.showClock:case O.showHours:case O.showMinutes:case O.showSeconds:this.optionsStore.options.display.sideBySide||"clock"===this.optionsStore.currentView||(q.hideImmediately(this.display.dateContainer),q.showImmediately(this.display.timeContainer)),this.handleShowClockContainers(e);break;case O.clear:this.dates.setValue(null),this.display._updateCalendarHeader();break;case O.close:this.display.hide();break;case O.today:{const t=(new d).setLocalization(this.optionsStore.options.localization);this._eventEmitters.updateViewDate.emit(t),this.validation.isValid(t,i.date)&&this.dates.setValue(t,this.dates.lastPickedIndex);break}}}handleShowClockContainers(t){if(!this.display._hasTime)return void s.errorMessages.throwError("Cannot show clock containers when time is disabled.");this.optionsStore.currentView="clock",this.display.widget.querySelectorAll(`.${s.css.timeContainer} > div`).forEach((t=>t.style.display="none"));let e="";switch(t){case O.showClock:e=s.css.clockContainer,this.display._update("clock");break;case O.showHours:e=s.css.hourContainer,this.display._update(i.hours);break;case O.showMinutes:e=s.css.minuteContainer,this.display._update(i.minutes);break;case O.showSeconds:e=s.css.secondContainer,this.display._update(i.seconds)}this.display.widget.getElementsByClassName(e)[0].style.display="grid"}handleNextPrevious(t){const{unit:e,step:s}=h[this.optionsStore.currentCalendarViewMode];t===O.next?this.optionsStore.viewDate.manipulate(s,e):this.optionsStore.viewDate.manipulate(-1*s,e),this._eventEmitters.viewUpdate.emit(),this.display._showMode()}hideOrClock(t){this.optionsStore.isTwelveHour||this.optionsStore.options.display.components.minutes||this.optionsStore.options.display.keepOpen||this.optionsStore.options.display.inline?this.do(t,O.showClock):this.display.hide()}manipulateAndSet(t,e,s=1){const i=t.manipulate(s,e);this.validation.isValid(i,e)&&this.dates.setValue(i,this.dates.lastPickedIndex)}handleSelectCalendarMode(t,e){const s=+e.dataset.value;switch(t){case O.selectMonth:this.optionsStore.viewDate.month=s;break;case O.selectYear:case O.selectDecade:this.optionsStore.viewDate.year=s}this.optionsStore.currentCalendarViewMode===this.optionsStore.minimumCalendarViewMode?(this.dates.setValue(this.optionsStore.viewDate,this.dates.lastPickedIndex),this.optionsStore.options.display.inline||this.display.hide()):this.display._showMode(-1)}handleToggle(t){t.getAttribute("title")===this.optionsStore.options.localization.selectDate?(t.setAttribute("title",this.optionsStore.options.localization.selectTime),t.innerHTML=this.display._iconTag(this.optionsStore.options.display.icons.time).outerHTML,this.display._updateCalendarHeader(),this.optionsStore.refreshCurrentView()):(t.setAttribute("title",this.optionsStore.options.localization.selectDate),t.innerHTML=this.display._iconTag(this.optionsStore.options.display.icons.date).outerHTML,this.display._hasTime&&(this.handleShowClockContainers(O.showClock),this.display._update("clock"))),this.display.widget.querySelectorAll(`.${s.css.dateContainer}, .${s.css.timeContainer}`).forEach((t=>q.toggle(t))),this._eventEmitters.viewUpdate.emit()}handleSelectDay(t){const e=this.optionsStore.viewDate.clone;t.classList.contains(s.css.old)&&e.manipulate(-1,i.month),t.classList.contains(s.css.new)&&e.manipulate(1,i.month),e.date=+t.dataset.day,this.optionsStore.options.dateRange?this.handleDateRange(e):this.optionsStore.options.multipleDates?this.handleMultiDate(e):this.dates.setValue(e,this.dates.lastPickedIndex),this.display._hasTime||this.optionsStore.options.display.keepOpen||this.optionsStore.options.display.inline||this.optionsStore.options.multipleDates||this.optionsStore.options.dateRange||this.display.hide()}handleMultiDate(t){let e=this.dates.pickedIndex(t,i.date);console.log(e),-1!==e?this.dates.setValue(null,e):(e=this.dates.lastPickedIndex+1,0===this.dates.picked.length&&(e=0),this.dates.setValue(t,e))}handleDateRange(t){switch(this.dates.picked.length){case 2:this.dates.clear();break;case 1:{const e=this.dates.picked[0];if(t.getTime()===e.getTime()){this.dates.clear();break}return t.isBefore(e)?(this.dates.setValue(t,0),void this.dates.setValue(e,1)):void this.dates.setValue(t,1)}}this.dates.setValue(t,0)}}class U{constructor(t,e={}){this._subscribers={},this._isDisabled=!1,this._inputChangeEvent=t=>{const e=t?.detail;if(e)return;const s=()=>{this.dates.lastPicked&&(this.optionsStore.viewDate=this.dates.lastPicked.clone)},i=this.optionsStore.input.value;if(this.optionsStore.options.multipleDates)try{const t=i.split(this.optionsStore.options.multipleDatesSeparator);for(let e=0;e{this.optionsStore.element?.disabled||this.optionsStore.input?.disabled||this.toggle()},c=new l,this._eventEmitters=c.locate(y),this.optionsStore=c.locate(p),this.display=c.locate(Y),this.dates=c.locate($),this.actions=c.locate(j),t||s.errorMessages.mustProvideElement(),this.optionsStore.element=t,this._initializeOptions(e,v,!0),this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization),this.optionsStore.unset=!0,this._initializeInput(),this._initializeToggle(),this.optionsStore.options.display.inline&&this.display.show(),this._eventEmitters.triggerEvent.subscribe((t=>{this._triggerEvent(t)})),this._eventEmitters.viewUpdate.subscribe((()=>{this._viewUpdate()})),this._eventEmitters.updateViewDate.subscribe((t=>{this.viewDate=t}))}get viewDate(){return this.optionsStore.viewDate}set viewDate(t){this.optionsStore.viewDate=t,this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization),this.display._update("clock"===this.optionsStore.currentView?"clock":"calendar")}updateOptions(t,e=!1){e?this._initializeOptions(t,v):this._initializeOptions(t,this.optionsStore.options),this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization),this.display.refreshCurrentView()}toggle(){this._isDisabled||this.display.toggle()}show(){this._isDisabled||this.display.show()}hide(){this.display.hide()}disable(){this._isDisabled=!0,this.optionsStore.input?.setAttribute("disabled","disabled"),this.display.hide()}enable(){this._isDisabled=!1,this.optionsStore.input?.removeAttribute("disabled")}clear(){this.optionsStore.input.value="",this.dates.clear()}subscribe(t,e){let i;"string"==typeof t&&(t=[t]),i=Array.isArray(e)?e:[e],t.length!==i.length&&s.errorMessages.subscribeMismatch();const o=[];for(let e=0;e{e(t)}))}_viewUpdate(){this._triggerEvent({type:s.events.update,viewDate:this.optionsStore.viewDate.clone})}_unsubscribe(t,e){this._subscribers[t].splice(e,1)}_initializeOptions(t,e,s=!1){let i=V.deepCopy(t);i=V._mergeOptions(i,e),s&&(i=V._dataToOptions(this.optionsStore.element,i)),V._validateConflicts(i),i.viewDate=i.viewDate.setLocalization(i.localization),this.optionsStore.viewDate.isSame(i.viewDate)||(this.optionsStore.viewDate=i.viewDate),i.display.components.year&&(this.optionsStore.minimumCalendarViewMode=2),i.display.components.month&&(this.optionsStore.minimumCalendarViewMode=1),i.display.components.date&&(this.optionsStore.minimumCalendarViewMode=0),this.optionsStore.currentCalendarViewMode=Math.max(this.optionsStore.minimumCalendarViewMode,this.optionsStore.currentCalendarViewMode),h[this.optionsStore.currentCalendarViewMode].name!==i.display.viewMode&&(this.optionsStore.currentCalendarViewMode=Math.max(h.findIndex((t=>t.name===i.display.viewMode)),this.optionsStore.minimumCalendarViewMode)),this.display?.isVisible&&this.display._update("all"),i.display.components.useTwentyfourHour&&void 0===i.localization.hourCycle?i.localization.hourCycle="h24":void 0===i.localization.hourCycle&&(i.localization.hourCycle=r(i.localization.locale)),this.optionsStore.options=i}_initializeInput(){if("INPUT"==this.optionsStore.element.tagName)this.optionsStore.input=this.optionsStore.element;else{const t=this.optionsStore.element.dataset.tdTargetInput;this.optionsStore.input=null==t||"nearest"==t?this.optionsStore.element.querySelector("input"):this.optionsStore.element.querySelector(t)}this.optionsStore.input&&(!this.optionsStore.input.value&&this.optionsStore.options.defaultDate&&(this.optionsStore.input.value=this.dates.formatInput(this.optionsStore.options.defaultDate)),this.optionsStore.input.addEventListener("change",this._inputChangeEvent),this.optionsStore.options.allowInputToggle&&(this.optionsStore.input.addEventListener("click",this._toggleClickEvent),this.optionsStore.input.addEventListener("focus",this._toggleClickEvent)),this.optionsStore.input.value&&this._inputChangeEvent())}_initializeToggle(){if(this.optionsStore.options.display.inline)return;let t=this.optionsStore.element.dataset.tdTargetToggle;"nearest"==t&&(t='[data-td-toggle="datetimepicker"]'),this._toggle=null==t?this.optionsStore.element:this.optionsStore.element.querySelector(t),this._toggle.addEventListener("click",this._toggleClickEvent)}_handleAfterChangeEvent(t){!this.optionsStore.options.promptTimeOnDateChange||this.optionsStore.options.multipleDates||this.optionsStore.options.display.inline||this.optionsStore.options.display.sideBySide||!this.display._hasTime||this.display.widget?.getElementsByClassName(s.css.show)[0].classList.contains(s.css.timeContainer)||!t.oldDate&&this.optionsStore.options.useCurrent||t.oldDate&&t.date?.isSame(t.oldDate)||(clearTimeout(this._currentPromptTimeTimeout),this._currentPromptTimeTimeout=setTimeout((()=>{this.display.widget&&this._eventEmitters.action.emit({e:{currentTarget:this.display.widget.querySelector(`.${s.css.switch}`)},action:O.togglePicker})}),this.optionsStore.options.promptTimeOnDateChangeTransitionDelay))}}const R={},Q=t=>{R[t.name]||(R[t.name]=t.localization)},J=t=>{const e=R[t];e&&(v.localization=e)},K=function(t,e=undefined){return t?(t.installed||(t(e,{TempusDominus:U,Dates:$,Display:Y,DateTime:d,Namespace:s},G),t.installed=!0),G):G},Z="6.7.10",G={TempusDominus:U,extend:K,loadLocale:Q,locale:J,Namespace:s,DefaultOptions:v,DateTime:d,Unit:i,version:Z,DefaultEnLocalization:S};export{d as DateTime,S as DefaultEnLocalization,v as DefaultOptions,s as Namespace,U as TempusDominus,i as Unit,K as extend,Q as loadLocale,J as locale,Z as version}; diff --git a/dist/js/tempus-dominus.js b/dist/js/tempus-dominus.js deleted file mode 100644 index 0d6b623e8..000000000 --- a/dist/js/tempus-dominus.js +++ /dev/null @@ -1,4617 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.tempusDominus = {})); -})(this, (function (exports) { 'use strict'; - - class TdError extends Error { - } - class ErrorMessages { - constructor() { - this.base = 'TD:'; - //#endregion - //#region used with notify.error - /** - * Used with an Error Event type if the user selects a date that - * fails restriction validation. - */ - this.failedToSetInvalidDate = 'Failed to set invalid date'; - /** - * Used with an Error Event type when a user changes the value of the - * input field directly, and does not provide a valid date. - */ - this.failedToParseInput = 'Failed parse input field'; - //#endregion - } - //#region out to console - /** - * Throws an error indicating that a key in the options object is invalid. - * @param optionName - */ - unexpectedOption(optionName) { - const error = new TdError(`${this.base} Unexpected option: ${optionName} does not match a known option.`); - error.code = 1; - throw error; - } - /** - * Throws an error indicating that one more keys in the options object is invalid. - * @param optionName - */ - unexpectedOptions(optionName) { - const error = new TdError(`${this.base}: ${optionName.join(', ')}`); - error.code = 1; - throw error; - } - /** - * Throws an error when an option is provide an unsupported value. - * For example a value of 'cheese' for toolbarPlacement which only supports - * 'top', 'bottom', 'default'. - * @param optionName - * @param badValue - * @param validOptions - */ - unexpectedOptionValue(optionName, badValue, validOptions) { - const error = new TdError(`${this.base} Unexpected option value: ${optionName} does not accept a value of "${badValue}". Valid values are: ${validOptions.join(', ')}`); - error.code = 2; - throw error; - } - /** - * Throws an error when an option value is the wrong type. - * For example a string value was provided to multipleDates which only - * supports true or false. - * @param optionName - * @param badType - * @param expectedType - */ - typeMismatch(optionName, badType, expectedType) { - const error = new TdError(`${this.base} Mismatch types: ${optionName} has a type of ${badType} instead of the required ${expectedType}`); - error.code = 3; - throw error; - } - /** - * Throws an error when an option value is outside of the expected range. - * For example restrictions.daysOfWeekDisabled excepts a value between 0 and 6. - * @param optionName - * @param lower - * @param upper - */ - numbersOutOfRange(optionName, lower, upper) { - const error = new TdError(`${this.base} ${optionName} expected an array of number between ${lower} and ${upper}.`); - error.code = 4; - throw error; - } - /** - * Throws an error when a value for a date options couldn't be parsed. Either - * the option was an invalid string or an invalid Date object. - * @param optionName - * @param date - * @param soft If true, logs a warning instead of an error. - */ - //eslint-disable-next-line @typescript-eslint/no-explicit-any - failedToParseDate(optionName, date, soft = false) { - const error = new TdError(`${this.base} Could not correctly parse "${date}" to a date for ${optionName}.`); - error.code = 5; - if (!soft) - throw error; - console.warn(error); - } - /** - * Throws when an element to attach to was not provided in the constructor. - */ - mustProvideElement() { - const error = new TdError(`${this.base} No element was provided.`); - error.code = 6; - throw error; - } - /** - * Throws if providing an array for the events to subscribe method doesn't have - * the same number of callbacks. E.g., subscribe([1,2], [1]) - */ - subscribeMismatch() { - const error = new TdError(`${this.base} The subscribed events does not match the number of callbacks`); - error.code = 7; - throw error; - } - /** - * Throws if the configuration has conflicting rules e.g. minDate is after maxDate - */ - conflictingConfiguration(message) { - const error = new TdError(`${this.base} A configuration value conflicts with another rule. ${message}`); - error.code = 8; - throw error; - } - /** - * customDateFormat errors - */ - customDateFormatError(message) { - const error = new TdError(`${this.base} Custom Date Format: ${message}`); - error.code = 9; - throw error; - } - /** - * Logs a warning if a date option value is provided as a string, instead of - * a date/datetime object. - */ - dateString() { - console.warn(`${this.base} Using a string for date options is not recommended unless you specify an ISO string or use the customDateFormat plugin.`); - } - deprecatedWarning(message, remediation) { - console.warn(`${this.base} Warning ${message} is deprecated and will be removed in a future version. ${remediation}`); - } - throwError(message) { - const error = new TdError(`${this.base} ${message}`); - error.code = 9; - throw error; - } - } - - // this is not the way I want this to stay but nested classes seemed to blown up once its compiled. - const NAME = 'tempus-dominus', dataKey = 'td'; - /** - * Events - */ - class Events { - constructor() { - this.key = `.${dataKey}`; - /** - * Change event. Fired when the user selects a date. - * See also EventTypes.ChangeEvent - */ - this.change = `change${this.key}`; - /** - * Emit when the view changes for example from month view to the year view. - * See also EventTypes.ViewUpdateEvent - */ - this.update = `update${this.key}`; - /** - * Emits when a selected date or value from the input field fails to meet the provided validation rules. - * See also EventTypes.FailEvent - */ - this.error = `error${this.key}`; - /** - * Show event - * @event Events#show - */ - this.show = `show${this.key}`; - /** - * Hide event - * @event Events#hide - */ - this.hide = `hide${this.key}`; - // blur and focus are used in the jQuery provider but are otherwise unused. - // keyup/down will be used later for keybinding options - this.blur = `blur${this.key}`; - this.focus = `focus${this.key}`; - this.keyup = `keyup${this.key}`; - this.keydown = `keydown${this.key}`; - } - } - class Css { - constructor() { - /** - * The outer element for the widget. - */ - this.widget = `${NAME}-widget`; - /** - * Hold the previous, next and switcher divs - */ - this.calendarHeader = 'calendar-header'; - /** - * The element for the action to change the calendar view. E.g. month -> year. - */ - this.switch = 'picker-switch'; - /** - * The elements for all the toolbar options - */ - this.toolbar = 'toolbar'; - /** - * Disables the hover and rounding affect. - */ - this.noHighlight = 'no-highlight'; - /** - * Applied to the widget element when the side by side option is in use. - */ - this.sideBySide = 'timepicker-sbs'; - /** - * The element for the action to change the calendar view, e.g. August -> July - */ - this.previous = 'previous'; - /** - * The element for the action to change the calendar view, e.g. August -> September - */ - this.next = 'next'; - /** - * Applied to any action that would violate any restriction options. ALso applied - * to an input field if the disabled function is called. - */ - this.disabled = 'disabled'; - /** - * Applied to any date that is less than requested view, - * e.g. the last day of the previous month. - */ - this.old = 'old'; - /** - * Applied to any date that is greater than of requested view, - * e.g. the last day of the previous month. - */ - this.new = 'new'; - /** - * Applied to any date that is currently selected. - */ - this.active = 'active'; - //#region date element - /** - * The outer element for the calendar view. - */ - this.dateContainer = 'date-container'; - /** - * The outer element for the decades view. - */ - this.decadesContainer = `${this.dateContainer}-decades`; - /** - * Applied to elements within the decade container, e.g. 2020, 2030 - */ - this.decade = 'decade'; - /** - * The outer element for the years view. - */ - this.yearsContainer = `${this.dateContainer}-years`; - /** - * Applied to elements within the years container, e.g. 2021, 2021 - */ - this.year = 'year'; - /** - * The outer element for the month view. - */ - this.monthsContainer = `${this.dateContainer}-months`; - /** - * Applied to elements within the month container, e.g. January, February - */ - this.month = 'month'; - /** - * The outer element for the calendar view. - */ - this.daysContainer = `${this.dateContainer}-days`; - /** - * Applied to elements within the day container, e.g. 1, 2..31 - */ - this.day = 'day'; - /** - * If display.calendarWeeks is enabled, a column displaying the week of year - * is shown. This class is applied to each cell in that column. - */ - this.calendarWeeks = 'cw'; - /** - * Applied to the first row of the calendar view, e.g. Sunday, Monday - */ - this.dayOfTheWeek = 'dow'; - /** - * Applied to the current date on the calendar view. - */ - this.today = 'today'; - /** - * Applied to the locale's weekend dates on the calendar view, e.g. Sunday, Saturday - */ - this.weekend = 'weekend'; - this.rangeIn = 'range-in'; - this.rangeStart = 'range-start'; - this.rangeEnd = 'range-end'; - //#endregion - //#region time element - /** - * The outer element for all time related elements. - */ - this.timeContainer = 'time-container'; - /** - * Applied the separator columns between time elements, e.g. hour *:* minute *:* second - */ - this.separator = 'separator'; - /** - * The outer element for the clock view. - */ - this.clockContainer = `${this.timeContainer}-clock`; - /** - * The outer element for the hours selection view. - */ - this.hourContainer = `${this.timeContainer}-hour`; - /** - * The outer element for the minutes selection view. - */ - this.minuteContainer = `${this.timeContainer}-minute`; - /** - * The outer element for the seconds selection view. - */ - this.secondContainer = `${this.timeContainer}-second`; - /** - * Applied to each element in the hours selection view. - */ - this.hour = 'hour'; - /** - * Applied to each element in the minutes selection view. - */ - this.minute = 'minute'; - /** - * Applied to each element in the seconds selection view. - */ - this.second = 'second'; - /** - * Applied AM/PM toggle button. - */ - this.toggleMeridiem = 'toggleMeridiem'; - //#endregion - //#region collapse - /** - * Applied the element of the current view mode, e.g. calendar or clock. - */ - this.show = 'show'; - /** - * Applied to the currently showing view mode during a transition - * between calendar and clock views - */ - this.collapsing = 'td-collapsing'; - /** - * Applied to the currently hidden view mode. - */ - this.collapse = 'td-collapse'; - //#endregion - /** - * Applied to the widget when the option display.inline is enabled. - */ - this.inline = 'inline'; - /** - * Applied to the widget when the option display.theme is light. - */ - this.lightTheme = 'light'; - /** - * Applied to the widget when the option display.theme is dark. - */ - this.darkTheme = 'dark'; - /** - * Used for detecting if the system color preference is dark mode - */ - this.isDarkPreferredQuery = '(prefers-color-scheme: dark)'; - } - } - class Namespace { - } - Namespace.NAME = NAME; - // noinspection JSUnusedGlobalSymbols - Namespace.dataKey = dataKey; - Namespace.events = new Events(); - Namespace.css = new Css(); - Namespace.errorMessages = new ErrorMessages(); - - const DefaultFormatLocalization = { - dateFormats: { - LTS: 'h:mm:ss T', - LT: 'h:mm T', - L: 'MM/dd/yyyy', - LL: 'MMMM d, yyyy', - LLL: 'MMMM d, yyyy h:mm T', - LLLL: 'dddd, MMMM d, yyyy h:mm T', - }, - format: 'L LT', - locale: 'default', - hourCycle: undefined, - ordinal: (n) => { - const s = ['th', 'st', 'nd', 'rd']; - const v = n % 100; - return `[${n}${s[(v - 20) % 10] || s[v] || s[0]}]`; - }, - }; - var DefaultFormatLocalization$1 = { ...DefaultFormatLocalization }; - - exports.Unit = void 0; - (function (Unit) { - Unit["seconds"] = "seconds"; - Unit["minutes"] = "minutes"; - Unit["hours"] = "hours"; - Unit["date"] = "date"; - Unit["month"] = "month"; - Unit["year"] = "year"; - })(exports.Unit || (exports.Unit = {})); - const twoDigitTemplate = { - month: '2-digit', - day: '2-digit', - year: 'numeric', - hour: '2-digit', - minute: '2-digit', - second: '2-digit', - }; - /** - * Returns an Intl format object based on the provided object - * @param unit - */ - const getFormatByUnit = (unit) => { - switch (unit) { - case 'date': - return { dateStyle: 'short' }; - case 'month': - return { - month: 'numeric', - year: 'numeric', - }; - case 'year': - return { year: 'numeric' }; - } - }; - /** - * Attempts to guess the hour cycle of the given local - * @param locale - */ - const guessHourCycle = (locale) => { - if (!locale) - return 'h12'; - // noinspection SpellCheckingInspection - const template = { - hour: '2-digit', - minute: '2-digit', - numberingSystem: 'latn', - }; - const dt = new DateTime().setLocalization({ locale }); - dt.hours = 0; - const start = dt.parts(undefined, template).hour; - //midnight is 12 so en-US style 12 AM - if (start === '12') - return 'h12'; - //midnight is 24 is from 00-24 - if (start === '24') - return 'h24'; - dt.hours = 23; - const end = dt.parts(undefined, template).hour; - //if midnight is 00 and hour 23 is 11 then - if (start === '00' && end === '11') - return 'h11'; - if (start === '00' && end === '23') - return 'h23'; - console.warn(`couldn't determine hour cycle for ${locale}. start: ${start}. end: ${end}`); - return undefined; - }; - /** - * For the most part this object behaves exactly the same way - * as the native Date object with a little extra spice. - */ - class DateTime extends Date { - constructor() { - super(...arguments); - this.localization = DefaultFormatLocalization$1; - this.nonLeapLadder = [ - 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, - ]; - this.leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; - //#region CDF stuff - this.dateTimeRegex = - //is regex cannot be simplified beyond what it already is - /(\[[^[\]]*])|y{1,4}|M{1,4}|d{1,4}|H{1,2}|h{1,2}|t|T|m{1,2}|s{1,2}|f{3}/g; //NOSONAR - this.formattingTokens = /(\[[^[\]]*])|([-_:/.,()\s]+)|(T|t|yyyy|yy?|MM?M?M?|Do|dd?|hh?|HH?|mm?|ss?)/g; //NOSONAR is regex cannot be simplified beyond what it already is - this.match2 = /\d\d/; // 00 - 99 - this.match3 = /\d{3}/; // 000 - 999 - this.match4 = /\d{4}/; // 0000 - 9999 - this.match1to2 = /\d\d?/; // 0 - 99 - this.matchSigned = /[+-]?\d+/; // -inf - inf - this.matchOffset = /[+-]\d\d:?(\d\d)?|Z/; // +00:00 -00:00 +0000 or -0000 +00 or Z - this.matchWord = /[^\d_:/,\-()\s]+/; // Word - this.zoneExpressions = [ - this.matchOffset, - (obj, input) => { - obj.offset = this.offsetFromString(input); - }, - ]; - this.expressions = { - t: [ - this.matchWord, - (ojb, input) => { - ojb.afternoon = this.meridiemMatch(input); - }, - ], - T: [ - this.matchWord, - (ojb, input) => { - ojb.afternoon = this.meridiemMatch(input); - }, - ], - fff: [ - this.match3, - (ojb, input) => { - ojb.milliseconds = +input; - }, - ], - s: [this.match1to2, this.addInput('seconds')], - ss: [this.match1to2, this.addInput('seconds')], - m: [this.match1to2, this.addInput('minutes')], - mm: [this.match1to2, this.addInput('minutes')], - H: [this.match1to2, this.addInput('hours')], - h: [this.match1to2, this.addInput('hours')], - HH: [this.match1to2, this.addInput('hours')], - hh: [this.match1to2, this.addInput('hours')], - d: [this.match1to2, this.addInput('day')], - dd: [this.match2, this.addInput('day')], - Do: [ - this.matchWord, - (ojb, input) => { - [ojb.day] = input.match(/\d+/); - if (!this.localization.ordinal) - return; - for (let i = 1; i <= 31; i += 1) { - if (this.localization.ordinal(i).replace(/[[\]]/g, '') === input) { - ojb.day = i; - } - } - }, - ], - M: [this.match1to2, this.addInput('month')], - MM: [this.match2, this.addInput('month')], - MMM: [ - this.matchWord, - (obj, input) => { - const months = this.getAllMonths(); - const monthsShort = this.getAllMonths('short'); - const matchIndex = (monthsShort || months.map((_) => _.slice(0, 3))).indexOf(input) + 1; - if (matchIndex < 1) { - throw new Error(); - } - obj.month = matchIndex % 12 || matchIndex; - }, - ], - MMMM: [ - this.matchWord, - (obj, input) => { - const months = this.getAllMonths(); - const matchIndex = months.indexOf(input) + 1; - if (matchIndex < 1) { - throw new Error(); - } - obj.month = matchIndex % 12 || matchIndex; - }, - ], - y: [this.matchSigned, this.addInput('year')], - yy: [ - this.match2, - (obj, input) => { - obj.year = this.parseTwoDigitYear(input); - }, - ], - yyyy: [this.match4, this.addInput('year')], - // z: this.zoneExpressions, - // zz: this.zoneExpressions, - // zzz: this.zoneExpressions - }; - //#endregion CDF stuff - } - /** - * Chainable way to set the {@link locale} - * @param value - * @deprecated use setLocalization with a FormatLocalization object instead - */ - setLocale(value) { - if (!this.localization) { - this.localization = DefaultFormatLocalization$1; - this.localization.locale = value; - } - return this; - } - /** - * Chainable way to set the {@link localization} - * @param value - */ - setLocalization(value) { - this.localization = value; - return this; - } - /** - * Converts a plain JS date object to a DateTime object. - * Doing this allows access to format, etc. - * @param date - * @param locale this parameter is deprecated. Use formatLocalization instead. - * @param formatLocalization - */ - static convert(date, locale = 'default', formatLocalization = undefined) { - if (!date) - throw new Error(`A date is required`); - if (!formatLocalization) { - formatLocalization = DefaultFormatLocalization$1; - formatLocalization.locale = locale; - } - return new DateTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()).setLocalization(formatLocalization); - } - /** - * Native date manipulations are not pure functions. This function creates a duplicate of the DateTime object. - */ - get clone() { - return new DateTime(this.year, this.month, this.date, this.hours, this.minutes, this.seconds, this.getMilliseconds()).setLocalization(this.localization); - } - static isValid(d) { - if (d === undefined || JSON.stringify(d) === 'null') - return false; - if (d.constructor.name === DateTime.name) - return true; - return false; - } - /** - * Sets the current date to the start of the {@link unit} provided - * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).startOf('month') - * would return April 1, 2021, 12:00:00.000 AM (midnight) - * @param unit - * @param startOfTheWeek Allows for the changing the start of the week. - */ - startOf(unit, startOfTheWeek = 0) { - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - switch (unit) { - case 'seconds': - this.setMilliseconds(0); - break; - case 'minutes': - this.setSeconds(0, 0); - break; - case 'hours': - this.setMinutes(0, 0, 0); - break; - case 'date': - this.setHours(0, 0, 0, 0); - break; - case 'weekDay': { - this.startOf(exports.Unit.date); - if (this.weekDay === startOfTheWeek) - break; - const goBack = (this.weekDay - startOfTheWeek + 7) % 7; - this.manipulate(goBack * -1, exports.Unit.date); - break; - } - case 'month': - this.startOf(exports.Unit.date); - this.setDate(1); - break; - case 'year': - this.startOf(exports.Unit.date); - this.setMonth(0, 1); - break; - } - return this; - } - /** - * Sets the current date to the end of the {@link unit} provided - * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).endOf('month') - * would return April 30, 2021, 11:59:59.999 PM - * @param unit - * @param startOfTheWeek - */ - endOf(unit, startOfTheWeek = 0) { - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - switch (unit) { - case 'seconds': - this.setMilliseconds(999); - break; - case 'minutes': - this.setSeconds(59, 999); - break; - case 'hours': - this.setMinutes(59, 59, 999); - break; - case 'date': - this.setHours(23, 59, 59, 999); - break; - case 'weekDay': { - this.endOf(exports.Unit.date); - const endOfWeek = 6 + startOfTheWeek; - if (this.weekDay === endOfWeek) - break; - this.manipulate(endOfWeek - this.weekDay, exports.Unit.date); - break; - } - case 'month': - this.endOf(exports.Unit.date); - this.manipulate(1, exports.Unit.month); - this.setDate(0); - break; - case 'year': - this.endOf(exports.Unit.date); - this.setMonth(11, 31); - break; - } - return this; - } - /** - * Change a {@link unit} value. Value can be positive or negative - * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).manipulate(1, 'month') - * would return May 30, 2021, 11:45:32.984 AM - * @param value A positive or negative number - * @param unit - */ - manipulate(value, unit) { - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - this[unit] += value; - return this; - } - /** - * Return true if {@link compare} is before this date - * @param compare The Date/DateTime to compare - * @param unit If provided, uses {@link startOf} for - * comparison. - */ - isBefore(compare, unit) { - // If the comparisons is undefined, return false - if (!DateTime.isValid(compare)) - return false; - if (!unit) - return this.valueOf() < compare.valueOf(); - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - return (this.clone.startOf(unit).valueOf() < compare.clone.startOf(unit).valueOf()); - } - /** - * Return true if {@link compare} is after this date - * @param compare The Date/DateTime to compare - * @param unit If provided, uses {@link startOf} for - * comparison. - */ - isAfter(compare, unit) { - // If the comparisons is undefined, return false - if (!DateTime.isValid(compare)) - return false; - if (!unit) - return this.valueOf() > compare.valueOf(); - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - return (this.clone.startOf(unit).valueOf() > compare.clone.startOf(unit).valueOf()); - } - /** - * Return true if {@link compare} is same this date - * @param compare The Date/DateTime to compare - * @param unit If provided, uses {@link startOf} for - * comparison. - */ - isSame(compare, unit) { - // If the comparisons is undefined, return false - if (!DateTime.isValid(compare)) - return false; - if (!unit) - return this.valueOf() === compare.valueOf(); - if (this[unit] === undefined) - throw new Error(`Unit '${unit}' is not valid`); - compare = DateTime.convert(compare); - return (this.clone.startOf(unit).valueOf() === compare.startOf(unit).valueOf()); - } - /** - * Check if this is between two other DateTimes, optionally looking at unit scale. The match is exclusive. - * @param left - * @param right - * @param unit. - * @param inclusivity. A [ indicates inclusion of a value. A ( indicates exclusion. - * If the inclusivity parameter is used, both indicators must be passed. - */ - isBetween(left, right, unit, inclusivity = '()') { - // If one of the comparisons is undefined, return false - if (!DateTime.isValid(left) || !DateTime.isValid(right)) - return false; - // If a unit is provided and is not a valid property of the DateTime object, throw an error - if (unit && this[unit] === undefined) { - throw new Error(`Unit '${unit}' is not valid`); - } - const leftInclusivity = inclusivity[0] === '('; - const rightInclusivity = inclusivity[1] === ')'; - const isLeftInRange = leftInclusivity - ? this.isAfter(left, unit) - : !this.isBefore(left, unit); - const isRightInRange = rightInclusivity - ? this.isBefore(right, unit) - : !this.isAfter(right, unit); - return isLeftInRange && isRightInRange; - } - /** - * Returns flattened object of the date. Does not include literals - * @param locale - * @param template - */ - parts(locale = this.localization.locale, template = { dateStyle: 'full', timeStyle: 'long' }) { - const parts = {}; - new Intl.DateTimeFormat(locale, template) - .formatToParts(this) - .filter((x) => x.type !== 'literal') - .forEach((x) => (parts[x.type] = x.value)); - return parts; - } - /** - * Shortcut to Date.getSeconds() - */ - get seconds() { - return this.getSeconds(); - } - /** - * Shortcut to Date.setSeconds() - */ - set seconds(value) { - this.setSeconds(value); - } - /** - * Returns two digit hours - */ - get secondsFormatted() { - return this.parts(undefined, twoDigitTemplate).second; - } - /** - * Shortcut to Date.getMinutes() - */ - get minutes() { - return this.getMinutes(); - } - /** - * Shortcut to Date.setMinutes() - */ - set minutes(value) { - this.setMinutes(value); - } - /** - * Returns two digit minutes - */ - get minutesFormatted() { - return this.parts(undefined, twoDigitTemplate).minute; - } - /** - * Shortcut to Date.getHours() - */ - get hours() { - return this.getHours(); - } - /** - * Shortcut to Date.setHours() - */ - set hours(value) { - this.setHours(value); - } - /** - * Returns two digit hour, e.g. 01...10 - * @param hourCycle Providing an hour cycle will change 00 to 24 depending on the given value. - */ - getHoursFormatted(hourCycle = 'h12') { - return this.parts(undefined, { ...twoDigitTemplate, hourCycle: hourCycle }) - .hour; - } - /** - * Get the meridiem of the date. E.g. AM or PM. - * If the {@link locale} provides a "dayPeriod" then this will be returned, - * otherwise it will return AM or PM. - * @param locale - */ - meridiem(locale = this.localization.locale) { - return new Intl.DateTimeFormat(locale, { - hour: 'numeric', - hour12: true, - }) - .formatToParts(this) - .find((p) => p.type === 'dayPeriod')?.value; - } - /** - * Shortcut to Date.getDate() - */ - get date() { - return this.getDate(); - } - /** - * Shortcut to Date.setDate() - */ - set date(value) { - this.setDate(value); - } - /** - * Return two digit date - */ - get dateFormatted() { - return this.parts(undefined, twoDigitTemplate).day; - } - /** - * Shortcut to Date.getDay() - */ - get weekDay() { - return this.getDay(); - } - /** - * Shortcut to Date.getMonth() - */ - get month() { - return this.getMonth(); - } - /** - * Shortcut to Date.setMonth() - */ - set month(value) { - const targetMonth = new Date(this.year, value + 1); - targetMonth.setDate(0); - const endOfMonth = targetMonth.getDate(); - if (this.date > endOfMonth) { - this.date = endOfMonth; - } - this.setMonth(value); - } - /** - * Return two digit, human expected month. E.g. January = 1, December = 12 - */ - get monthFormatted() { - return this.parts(undefined, twoDigitTemplate).month; - } - /** - * Shortcut to Date.getFullYear() - */ - get year() { - return this.getFullYear(); - } - /** - * Shortcut to Date.setFullYear() - */ - set year(value) { - this.setFullYear(value); - } - // borrowed a bunch of stuff from Luxon - /** - * Gets the week of the year - */ - get week() { - const ordinal = this.computeOrdinal(), weekday = this.getUTCDay(); - let weekNumber = Math.floor((ordinal - weekday + 10) / 7); - if (weekNumber < 1) { - weekNumber = this.weeksInWeekYear(); - } - else if (weekNumber > this.weeksInWeekYear()) { - weekNumber = 1; - } - return weekNumber; - } - /** - * Returns the number of weeks in the year - */ - weeksInWeekYear() { - const p1 = (this.year + - Math.floor(this.year / 4) - - Math.floor(this.year / 100) + - Math.floor(this.year / 400)) % - 7, last = this.year - 1, p2 = (last + - Math.floor(last / 4) - - Math.floor(last / 100) + - Math.floor(last / 400)) % - 7; - return p1 === 4 || p2 === 3 ? 53 : 52; - } - /** - * Returns true or false depending on if the year is a leap year or not. - */ - get isLeapYear() { - return (this.year % 4 === 0 && (this.year % 100 !== 0 || this.year % 400 === 0)); - } - computeOrdinal() { - return (this.date + - (this.isLeapYear ? this.leapLadder : this.nonLeapLadder)[this.month]); - } - /** - * Returns a list of month values based on the current locale - */ - getAllMonths(format = 'long') { - const applyFormat = new Intl.DateTimeFormat(this.localization.locale, { - month: format, - }).format; - return [...Array(12).keys()].map((m) => applyFormat(new Date(2021, m))); - } - /** - * Replaces an expanded token set (e.g. LT/LTS) - */ - replaceTokens(formatStr, formats) { - /*** - * _ => match - * a => first capture group. Anything between [ and ] - * b => second capture group - */ - return formatStr.replace(/(\[[^[\]]*])|(LTS?|l{1,4}|L{1,4})/g, (_, a, b) => { - const B = b && b.toUpperCase(); - return a || formats[B] || DefaultFormatLocalization$1.dateFormats[B]; - }); - } - parseTwoDigitYear(input) { - input = +input; - return input + (input > 68 ? 1900 : 2000); - } - offsetFromString(string) { - if (!string) - return 0; - if (string === 'Z') - return 0; - const [first, second, third] = string.match(/([+-]|\d\d)/g); - const minutes = +(second * 60) + (+third || 0); - const signed = first === '+' ? -minutes : minutes; - return minutes === 0 ? 0 : signed; // eslint-disable-line no-nested-ternary - } - /** - * z = -4, zz = -04, zzz = -0400 - * @param date - * @param style - * @private - */ - zoneInformation(date, style) { - let name = date - .parts(this.localization.locale, { timeZoneName: 'longOffset' }) - .timeZoneName.replace('GMT', '') - .replace(':', ''); - const negative = name.includes('-'); - name = name.replace('-', ''); - if (style === 'z') - name = name.substring(1, 2); - else if (style === 'zz') - name = name.substring(0, 2); - return `${negative ? '-' : ''}${name}`; - } - addInput(property) { - return (time, input) => { - time[property] = +input; - }; - } - meridiemMatch(input) { - const meridiem = new Intl.DateTimeFormat(this.localization.locale, { - hour: 'numeric', - hour12: true, - }) - .formatToParts(new Date(2022, 3, 4, 13)) - .find((p) => p.type === 'dayPeriod')?.value; - return input.toLowerCase() === meridiem.toLowerCase(); - } - correctHours(time) { - const { afternoon } = time; - if (afternoon !== undefined) { - const { hours } = time; - if (afternoon) { - if (hours < 12) { - time.hours += 12; - } - } - else if (hours === 12) { - time.hours = 0; - } - delete time.afternoon; - } - } - makeParser(format) { - format = this.replaceTokens(format, this.localization.dateFormats); - const array = format.match(this.formattingTokens); - const { length } = array; - for (let i = 0; i < length; i += 1) { - const token = array[i]; - const parseTo = this.expressions[token]; - const regex = parseTo && parseTo[0]; - const parser = parseTo && parseTo[1]; - if (parser) { - array[i] = { regex, parser }; - } - else { - array[i] = token.replace(/^\[[^[\]]*]$/g, ''); - } - } - return (input) => { - const time = { - hours: 0, - minutes: 0, - seconds: 0, - milliseconds: 0, - }; - for (let i = 0, start = 0; i < length; i += 1) { - const token = array[i]; - if (typeof token === 'string') { - start += token.length; - } - else { - const { regex, parser } = token; - const part = input.slice(start); - const match = regex.exec(part); - const value = match[0]; - parser.call(this, time, value); - input = input.replace(value, ''); - } - } - this.correctHours(time); - return time; - }; - } - /** - * Attempts to create a DateTime from a string. - * @param input date as string - * @param localization provides the date template the string is in via the format property - */ - //eslint-disable-next-line @typescript-eslint/no-unused-vars - static fromString(input, localization) { - if (!localization?.format) { - Namespace.errorMessages.customDateFormatError('No format was provided'); - } - try { - const dt = new DateTime(); - dt.setLocalization(localization); - if (['x', 'X'].indexOf(localization.format) > -1) - return new DateTime((localization.format === 'X' ? 1000 : 1) * +input); - const parser = dt.makeParser(localization.format); - const { year, month, day, hours, minutes, seconds, milliseconds, zone } = parser(input); - const d = day || (!year && !month ? dt.getDate() : 1); - const y = year || dt.getFullYear(); - let M = 0; - if (!(year && !month)) { - M = month > 0 ? month - 1 : dt.getMonth(); - } - if (zone) { - return new DateTime(Date.UTC(y, M, d, hours, minutes, seconds, milliseconds + zone.offset * 60 * 1000)); - } - return new DateTime(y, M, d, hours, minutes, seconds, milliseconds); - } - catch (e) { - Namespace.errorMessages.customDateFormatError(`Unable to parse provided input: ${input}, format: ${localization.format}`); - } - } - /** - * Returns a string format. - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat - * for valid templates and locale objects - * @param template An optional object. If provided, method will use Intl., otherwise the localizations format properties - * @param locale Can be a string or an array of strings. Uses browser defaults otherwise. - */ - format(template, locale = this.localization.locale) { - if (template && typeof template === 'object') - return new Intl.DateTimeFormat(locale, template).format(this); - const formatString = this.replaceTokens( - //try template first - template || - //otherwise try localization format - this.localization.format || - //otherwise try date + time - `${DefaultFormatLocalization$1.dateFormats.L}, ${DefaultFormatLocalization$1.dateFormats.LT}`, this.localization.dateFormats); - const formatter = (template) => new Intl.DateTimeFormat(this.localization.locale, template).format(this); - if (!this.localization.hourCycle) - this.localization.hourCycle = guessHourCycle(this.localization.locale); - //if the format asks for a twenty-four-hour string but the hour cycle is not, then make a base guess - const HHCycle = this.localization.hourCycle.startsWith('h1') - ? 'h24' - : this.localization.hourCycle; - const hhCycle = this.localization.hourCycle.startsWith('h2') - ? 'h12' - : this.localization.hourCycle; - const matches = { - yy: formatter({ year: '2-digit' }), - yyyy: this.year, - M: formatter({ month: 'numeric' }), - MM: this.monthFormatted, - MMM: this.getAllMonths('short')[this.getMonth()], - MMMM: this.getAllMonths()[this.getMonth()], - d: this.date, - dd: this.dateFormatted, - ddd: formatter({ weekday: 'short' }), - dddd: formatter({ weekday: 'long' }), - H: this.getHours(), - HH: this.getHoursFormatted(HHCycle), - h: this.hours > 12 ? this.hours - 12 : this.hours, - hh: this.getHoursFormatted(hhCycle), - t: this.meridiem(), - T: this.meridiem().toUpperCase(), - m: this.minutes, - mm: this.minutesFormatted, - s: this.seconds, - ss: this.secondsFormatted, - fff: this.getMilliseconds(), - // z: this.zoneInformation(dateTime, 'z'), //-4 - // zz: this.zoneInformation(dateTime, 'zz'), //-04 - // zzz: this.zoneInformation(dateTime, 'zzz') //-0400 - }; - return formatString - .replace(this.dateTimeRegex, (match, $1) => { - return $1 || matches[match]; - }) - .replace(/\[/g, '') - .replace(/]/g, ''); - } - } - - class ServiceLocator { - constructor() { - this.cache = new Map(); - } - locate(identifier) { - const service = this.cache.get(identifier); - if (service) - return service; - const value = new identifier(); - this.cache.set(identifier, value); - return value; - } - } - const setupServiceLocator = () => { - serviceLocator = new ServiceLocator(); - }; - let serviceLocator; - - const CalendarModes = [ - { - name: 'calendar', - className: Namespace.css.daysContainer, - unit: exports.Unit.month, - step: 1, - }, - { - name: 'months', - className: Namespace.css.monthsContainer, - unit: exports.Unit.year, - step: 1, - }, - { - name: 'years', - className: Namespace.css.yearsContainer, - unit: exports.Unit.year, - step: 10, - }, - { - name: 'decades', - className: Namespace.css.decadesContainer, - unit: exports.Unit.year, - step: 100, - }, - ]; - - class OptionsStore { - constructor() { - this._currentCalendarViewMode = 0; - this._viewDate = new DateTime(); - this.minimumCalendarViewMode = 0; - this.currentView = 'calendar'; - } - get currentCalendarViewMode() { - return this._currentCalendarViewMode; - } - set currentCalendarViewMode(value) { - this._currentCalendarViewMode = value; - this.currentView = CalendarModes[value].name; - } - get viewDate() { - return this._viewDate; - } - set viewDate(v) { - this._viewDate = v; - if (this.options) - this.options.viewDate = v; - } - /** - * When switching back to the calendar from the clock, - * this sets currentView to the correct calendar view. - */ - refreshCurrentView() { - this.currentView = CalendarModes[this.currentCalendarViewMode].name; - } - get isTwelveHour() { - return ['h12', 'h11'].includes(this.options.localization.hourCycle); - } - } - - /** - * Main class for date validation rules based on the options provided. - */ - class Validation { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - } - /** - * Checks to see if the target date is valid based on the rules provided in the options. - * Granularity can be provided to check portions of the date instead of the whole. - * @param targetDate - * @param granularity - */ - isValid(targetDate, granularity) { - if (!this._enabledDisabledDatesIsValid(granularity, targetDate)) - return false; - if (granularity !== exports.Unit.month && - granularity !== exports.Unit.year && - this.optionsStore.options.restrictions.daysOfWeekDisabled?.length > 0 && - this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(targetDate.weekDay) !== -1) - return false; - if (!this._minMaxIsValid(granularity, targetDate)) - return false; - if (granularity === exports.Unit.hours || - granularity === exports.Unit.minutes || - granularity === exports.Unit.seconds) { - if (!this._enabledDisabledHoursIsValid(targetDate)) - return false; - if (this.optionsStore.options.restrictions.disabledTimeIntervals?.filter((internal) => targetDate.isBetween(internal.from, internal.to)).length !== 0) - return false; - } - return true; - } - _enabledDisabledDatesIsValid(granularity, targetDate) { - if (granularity !== exports.Unit.date) - return true; - if (this.optionsStore.options.restrictions.disabledDates.length > 0 && - this._isInDisabledDates(targetDate)) { - return false; - } - // noinspection RedundantIfStatementJS - if (this.optionsStore.options.restrictions.enabledDates.length > 0 && - !this._isInEnabledDates(targetDate)) { - return false; - } - return true; - } - /** - * Checks to see if the disabledDates option is in use and returns true (meaning invalid) - * if the `testDate` is with in the array. Granularity is by date. - * @param testDate - * @private - */ - _isInDisabledDates(testDate) { - if (!this.optionsStore.options.restrictions.disabledDates || - this.optionsStore.options.restrictions.disabledDates.length === 0) - return false; - return !!this.optionsStore.options.restrictions.disabledDates.find((x) => x.isSame(testDate, exports.Unit.date)); - } - /** - * Checks to see if the enabledDates option is in use and returns true (meaning valid) - * if the `testDate` is with in the array. Granularity is by date. - * @param testDate - * @private - */ - _isInEnabledDates(testDate) { - if (!this.optionsStore.options.restrictions.enabledDates || - this.optionsStore.options.restrictions.enabledDates.length === 0) - return true; - return !!this.optionsStore.options.restrictions.enabledDates.find((x) => x.isSame(testDate, exports.Unit.date)); - } - _minMaxIsValid(granularity, targetDate) { - if (this.optionsStore.options.restrictions.minDate && - targetDate.isBefore(this.optionsStore.options.restrictions.minDate, granularity)) { - return false; - } - // noinspection RedundantIfStatementJS - if (this.optionsStore.options.restrictions.maxDate && - targetDate.isAfter(this.optionsStore.options.restrictions.maxDate, granularity)) { - return false; - } - return true; - } - _enabledDisabledHoursIsValid(targetDate) { - if (this.optionsStore.options.restrictions.disabledHours.length > 0 && - this._isInDisabledHours(targetDate)) { - return false; - } - // noinspection RedundantIfStatementJS - if (this.optionsStore.options.restrictions.enabledHours.length > 0 && - !this._isInEnabledHours(targetDate)) { - return false; - } - return true; - } - /** - * Checks to see if the disabledHours option is in use and returns true (meaning invalid) - * if the `testDate` is with in the array. Granularity is by hours. - * @param testDate - * @private - */ - _isInDisabledHours(testDate) { - if (!this.optionsStore.options.restrictions.disabledHours || - this.optionsStore.options.restrictions.disabledHours.length === 0) - return false; - const formattedDate = testDate.hours; - return this.optionsStore.options.restrictions.disabledHours.includes(formattedDate); - } - /** - * Checks to see if the enabledHours option is in use and returns true (meaning valid) - * if the `testDate` is with in the array. Granularity is by hours. - * @param testDate - * @private - */ - _isInEnabledHours(testDate) { - if (!this.optionsStore.options.restrictions.enabledHours || - this.optionsStore.options.restrictions.enabledHours.length === 0) - return true; - const formattedDate = testDate.hours; - return this.optionsStore.options.restrictions.enabledHours.includes(formattedDate); - } - dateRangeIsValid(dates, index, target) { - // if we're not using the option, then return valid - if (!this.optionsStore.options.dateRange) - return true; - // if we've only selected 0..1 dates, and we're not setting the end date - // then return valid. We only want to validate the range if both are selected, - // because the other validation on the target has already occurred. - if (dates.length !== 2 && index !== 1) - return true; - // initialize start date - const start = dates[0].clone; - // check if start date is not the same as target date - if (start.isSame(target, exports.Unit.date)) - return true; - // add one day to start; start has already been validated - start.manipulate(1, exports.Unit.date); - // check each date in the range to make sure it's valid - while (!start.isSame(target, exports.Unit.date)) { - const valid = this.isValid(start, exports.Unit.date); - if (!valid) - return false; - start.manipulate(1, exports.Unit.date); - } - return true; - } - } - - class EventEmitter { - constructor() { - this.subscribers = []; - } - subscribe(callback) { - this.subscribers.push(callback); - return this.unsubscribe.bind(this, this.subscribers.length - 1); - } - unsubscribe(index) { - this.subscribers.splice(index, 1); - } - emit(value) { - this.subscribers.forEach((callback) => { - callback(value); - }); - } - destroy() { - this.subscribers = null; - this.subscribers = []; - } - } - class EventEmitters { - constructor() { - this.triggerEvent = new EventEmitter(); - this.viewUpdate = new EventEmitter(); - this.updateDisplay = new EventEmitter(); - this.action = new EventEmitter(); //eslint-disable-line @typescript-eslint/no-explicit-any - this.updateViewDate = new EventEmitter(); - } - destroy() { - this.triggerEvent.destroy(); - this.viewUpdate.destroy(); - this.updateDisplay.destroy(); - this.action.destroy(); - this.updateViewDate.destroy(); - } - } - - const defaultEnLocalization = { - clear: 'Clear selection', - close: 'Close the picker', - dateFormats: DefaultFormatLocalization$1.dateFormats, - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - decrementHour: 'Decrement Hour', - decrementMinute: 'Decrement Minute', - decrementSecond: 'Decrement Second', - format: DefaultFormatLocalization$1.format, - hourCycle: DefaultFormatLocalization$1.hourCycle, - incrementHour: 'Increment Hour', - incrementMinute: 'Increment Minute', - incrementSecond: 'Increment Second', - locale: DefaultFormatLocalization$1.locale, - nextCentury: 'Next Century', - nextDecade: 'Next Decade', - nextMonth: 'Next Month', - nextYear: 'Next Year', - ordinal: DefaultFormatLocalization$1.ordinal, - pickHour: 'Pick Hour', - pickMinute: 'Pick Minute', - pickSecond: 'Pick Second', - previousCentury: 'Previous Century', - previousDecade: 'Previous Decade', - previousMonth: 'Previous Month', - previousYear: 'Previous Year', - selectDate: 'Select Date', - selectDecade: 'Select Decade', - selectMonth: 'Select Month', - selectTime: 'Select Time', - selectYear: 'Select Year', - startOfTheWeek: 0, - today: 'Go to today', - toggleMeridiem: 'Toggle Meridiem', - }; - const DefaultOptions = { - allowInputToggle: false, - container: undefined, - dateRange: false, - debug: false, - defaultDate: undefined, - display: { - icons: { - type: 'icons', - time: 'fa-solid fa-clock', - date: 'fa-solid fa-calendar', - up: 'fa-solid fa-arrow-up', - down: 'fa-solid fa-arrow-down', - previous: 'fa-solid fa-chevron-left', - next: 'fa-solid fa-chevron-right', - today: 'fa-solid fa-calendar-check', - clear: 'fa-solid fa-trash', - close: 'fa-solid fa-xmark', - }, - sideBySide: false, - calendarWeeks: false, - viewMode: 'calendar', - toolbarPlacement: 'bottom', - keepOpen: false, - buttons: { - today: false, - clear: false, - close: false, - }, - components: { - calendar: true, - date: true, - month: true, - year: true, - decades: true, - clock: true, - hours: true, - minutes: true, - seconds: false, - useTwentyfourHour: undefined, - }, - inline: false, - theme: 'auto', - placement: 'bottom', - }, - keepInvalid: false, - localization: defaultEnLocalization, - meta: {}, - multipleDates: false, - multipleDatesSeparator: '; ', - promptTimeOnDateChange: false, - promptTimeOnDateChangeTransitionDelay: 200, - restrictions: { - minDate: undefined, - maxDate: undefined, - disabledDates: [], - enabledDates: [], - daysOfWeekDisabled: [], - disabledTimeIntervals: [], - disabledHours: [], - enabledHours: [], - }, - stepping: 1, - useCurrent: true, - viewDate: new DateTime(), - }; - const DefaultEnLocalization = { ...defaultEnLocalization }; - - /** - * Attempts to prove `d` is a DateTime or Date or can be converted into one. - * @param d If a string will attempt creating a date from it. - * @param localization object containing locale and format settings. Only used with the custom formats - * @private - */ - function tryConvertToDateTime(d, localization) { - if (!d) - return null; - if (d.constructor.name === DateTime.name) - return d; - if (d.constructor.name === Date.name) { - return DateTime.convert(d); - } - if (typeof d === typeof '') { - const dateTime = DateTime.fromString(d, localization); - if (JSON.stringify(dateTime) === 'null') { - return null; - } - return dateTime; - } - return null; - } - /** - * Attempts to convert `d` to a DateTime object - * @param d value to convert - * @param optionName Provides text to error messages e.g. disabledDates - * @param localization object containing locale and format settings. Only used with the custom formats - */ - function convertToDateTime(d, optionName, localization) { - if (typeof d === typeof '' && optionName !== 'input') { - Namespace.errorMessages.dateString(); - } - const converted = tryConvertToDateTime(d, localization); - if (!converted) { - Namespace.errorMessages.failedToParseDate(optionName, d, optionName === 'input'); - } - return converted; - } - /** - * Type checks that `value` is an array of Date or DateTime - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - * @param localization - */ - function typeCheckDateArray(optionName, value, //eslint-disable-line @typescript-eslint/no-explicit-any - providedType, localization = DefaultFormatLocalization$1) { - if (!Array.isArray(value)) { - Namespace.errorMessages.typeMismatch(optionName, providedType, 'array of DateTime or Date'); - } - for (let i = 0; i < value.length; i++) { - const d = value[i]; - const dateTime = convertToDateTime(d, optionName, localization); - dateTime.setLocalization(localization); - value[i] = dateTime; - } - } - /** - * Type checks that `value` is an array of numbers - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - */ - function typeCheckNumberArray(optionName, value, //eslint-disable-line @typescript-eslint/no-explicit-any - providedType) { - if (!Array.isArray(value) || value.some((x) => typeof x !== typeof 0)) { - Namespace.errorMessages.typeMismatch(optionName, providedType, 'array of numbers'); - } - } - - function mandatoryDate(key) { - return ({ value, providedType, localization }) => { - const dateTime = convertToDateTime(value, key, localization); - if (dateTime !== undefined) { - dateTime.setLocalization(localization); - return dateTime; - } - }; - } - function optionalDate(key) { - const mandatory = mandatoryDate(key); - return (args) => { - if (args.value === undefined) { - return args.value; - } - return mandatory(args); - }; - } - function numbersInRange(key, lower, upper) { - return ({ value, providedType }) => { - if (value === undefined) { - return []; - } - typeCheckNumberArray(key, value, providedType); - if (value.some((x) => x < lower || x > upper)) - Namespace.errorMessages.numbersOutOfRange(key, lower, upper); - return value; - }; - } - function validHourRange(key) { - return numbersInRange(key, 0, 23); - } - function validDateArray(key) { - return ({ value, providedType, localization }) => { - if (value === undefined) { - return []; - } - typeCheckDateArray(key, value, providedType, localization); - return value; - }; - } - function validKeyOption(keyOptions) { - return ({ value, path }) => { - if (!keyOptions.includes(value)) - Namespace.errorMessages.unexpectedOptionValue(path.substring(1), value, keyOptions); - return value; - }; - } - const optionProcessors = Object.freeze({ - defaultDate: mandatoryDate('defaultDate'), - viewDate: mandatoryDate('viewDate'), - minDate: optionalDate('restrictions.minDate'), - maxDate: optionalDate('restrictions.maxDate'), - disabledHours: validHourRange('restrictions.disabledHours'), - enabledHours: validHourRange('restrictions.enabledHours'), - disabledDates: validDateArray('restrictions.disabledDates'), - enabledDates: validDateArray('restrictions.enabledDates'), - daysOfWeekDisabled: numbersInRange('restrictions.daysOfWeekDisabled', 0, 6), - disabledTimeIntervals: ({ key, value, providedType, localization }) => { - if (value === undefined) { - return []; - } - if (!Array.isArray(value)) { - Namespace.errorMessages.typeMismatch(key, providedType, 'array of { from: DateTime|Date, to: DateTime|Date }'); - } - const valueObject = value; //eslint-disable-line @typescript-eslint/no-explicit-any - for (let i = 0; i < valueObject.length; i++) { - Object.keys(valueObject[i]).forEach((vk) => { - const subOptionName = `${key}[${i}].${vk}`; - const d = valueObject[i][vk]; - const dateTime = convertToDateTime(d, subOptionName, localization); - dateTime.setLocalization(localization); - valueObject[i][vk] = dateTime; - }); - } - return valueObject; - }, - toolbarPlacement: validKeyOption(['top', 'bottom', 'default']), - type: validKeyOption(['icons', 'sprites']), - viewMode: validKeyOption([ - 'clock', - 'calendar', - 'months', - 'years', - 'decades', - ]), - theme: validKeyOption(['light', 'dark', 'auto']), - placement: validKeyOption(['top', 'bottom']), - meta: ({ value }) => value, - dayViewHeaderFormat: ({ value }) => value, - container: ({ value, path }) => { - if (value && - !(value instanceof HTMLElement || - value instanceof Element || - value?.appendChild)) { - Namespace.errorMessages.typeMismatch(path.substring(1), typeof value, 'HTMLElement'); - } - return value; - }, - useTwentyfourHour: ({ value, path, providedType, defaultType }) => { - Namespace.errorMessages.deprecatedWarning('useTwentyfourHour', 'Please use "options.localization.hourCycle" instead'); - if (value === undefined || providedType === 'boolean') - return value; - Namespace.errorMessages.typeMismatch(path, providedType, defaultType); - }, - hourCycle: validKeyOption(['h11', 'h12', 'h23', 'h24']), - }); - const defaultProcessor = ({ value, defaultType, providedType, path, }) => { - switch (defaultType) { - case 'boolean': - return value === 'true' || value === true; - case 'number': - return +value; - case 'string': - return value.toString(); - case 'object': - return {}; - case 'function': - return value; - default: - Namespace.errorMessages.typeMismatch(path, providedType, defaultType); - } - }; - function processKey(args) { - return (optionProcessors[args.key] || defaultProcessor)(args); - } - - class OptionConverter { - static deepCopy(input) { - const o = {}; - Object.keys(input).forEach((key) => { - const inputElement = input[key]; - if (inputElement instanceof DateTime) { - o[key] = inputElement.clone; - return; - } - else if (inputElement instanceof Date) { - o[key] = new Date(inputElement.valueOf()); - return; - } - o[key] = inputElement; - if (typeof inputElement !== 'object' || - inputElement instanceof HTMLElement || - inputElement instanceof Element) - return; - if (!Array.isArray(inputElement)) { - o[key] = OptionConverter.deepCopy(inputElement); - } - }); - return o; - } - /** - * Finds value out of an object based on a string, period delimited, path - * @param paths - * @param obj - */ - static objectPath(paths, obj) { - if (paths.charAt(0) === '.') - paths = paths.slice(1); - if (!paths) - return obj; - return paths - .split('.') - .reduce((value, key) => OptionConverter.isValue(value) || OptionConverter.isValue(value[key]) - ? value[key] - : undefined, obj); - } - /** - * The spread operator caused sub keys to be missing after merging. - * This is to fix that issue by using spread on the child objects first. - * Also handles complex options like disabledDates - * @param provided An option from new providedOptions - * @param copyTo Destination object. This was added to prevent reference copies - * @param localization - * @param path - */ - static spread(provided, copyTo, localization, path = '') { - const defaultOptions = OptionConverter.objectPath(path, DefaultOptions); - const unsupportedOptions = Object.keys(provided).filter((x) => !Object.keys(defaultOptions).includes(x)); - if (unsupportedOptions.length > 0) { - const flattenedOptions = OptionConverter.getFlattenDefaultOptions(); - const errors = unsupportedOptions.map((x) => { - let error = `"${path}.${x}" in not a known option.`; - const didYouMean = flattenedOptions.find((y) => y.includes(x)); - if (didYouMean) - error += ` Did you mean "${didYouMean}"?`; - return error; - }); - Namespace.errorMessages.unexpectedOptions(errors); - } - Object.keys(provided) - .filter((key) => key !== '__proto__' && key !== 'constructor') - .forEach((key) => { - path += `.${key}`; - if (path.charAt(0) === '.') - path = path.slice(1); - const defaultOptionValue = defaultOptions[key]; - const providedType = typeof provided[key]; - const defaultType = typeof defaultOptionValue; - const value = provided[key]; - if (value === undefined || value === null) { - copyTo[key] = value; - path = path.substring(0, path.lastIndexOf(`.${key}`)); - return; - } - if (typeof defaultOptionValue === 'object' && - !Array.isArray(provided[key]) && - !(defaultOptionValue instanceof Date || - OptionConverter.ignoreProperties.includes(key))) { - OptionConverter.spread(provided[key], copyTo[key], localization, path); - } - else { - copyTo[key] = OptionConverter.processKey(key, value, providedType, defaultType, path, localization); - } - path = path.substring(0, path.lastIndexOf(`.${key}`)); - }); - } - static processKey(key, value, //eslint-disable-line @typescript-eslint/no-explicit-any - providedType, defaultType, path, localization) { - return processKey({ - key, - value, - providedType, - defaultType, - path, - localization, - }); - } - static _mergeOptions(providedOptions, mergeTo) { - const newConfig = OptionConverter.deepCopy(mergeTo); - //see if the options specify a locale - const localization = mergeTo.localization?.locale !== 'default' - ? mergeTo.localization - : providedOptions?.localization || DefaultOptions.localization; - OptionConverter.spread(providedOptions, newConfig, localization, ''); - return newConfig; - } - static _dataToOptions(element, options) { - const eData = JSON.parse(JSON.stringify(element.dataset)); - if (eData?.tdTargetInput) - delete eData.tdTargetInput; - if (eData?.tdTargetToggle) - delete eData.tdTargetToggle; - if (!eData || - Object.keys(eData).length === 0 || - eData.constructor !== DOMStringMap) - return options; - const dataOptions = {}; - // because dataset returns camelCase including the 'td' key the option - // key won't align - const objectToNormalized = (object) => { - const lowered = {}; - Object.keys(object).forEach((x) => { - lowered[x.toLowerCase()] = x; - }); - return lowered; - }; - const normalizeObject = this.normalizeObject(objectToNormalized); - const optionsLower = objectToNormalized(options); - Object.keys(eData) - .filter((x) => x.startsWith(Namespace.dataKey)) - .map((x) => x.substring(2)) - .forEach((key) => { - let keyOption = optionsLower[key.toLowerCase()]; - // dataset merges dashes to camelCase... yay - // i.e. key = display_components_seconds - if (key.includes('_')) { - // [display, components, seconds] - const split = key.split('_'); - // display - keyOption = optionsLower[split[0].toLowerCase()]; - if (keyOption !== undefined && - options[keyOption].constructor === Object) { - dataOptions[keyOption] = normalizeObject(split, 1, options[keyOption], eData[`td${key}`]); - } - } - // or key = multipleDate - else if (keyOption !== undefined) { - dataOptions[keyOption] = eData[`td${key}`]; - } - }); - return this._mergeOptions(dataOptions, options); - } - //todo clean this up - static normalizeObject(objectToNormalized) { - const normalizeObject = (split, index, optionSubgroup, value) => { - // first round = display { ... } - const normalizedOptions = objectToNormalized(optionSubgroup); - const keyOption = normalizedOptions[split[index].toLowerCase()]; - const internalObject = {}; - if (keyOption === undefined) - return internalObject; - // if this is another object, continue down the rabbit hole - if (optionSubgroup[keyOption].constructor === Object) { - index++; - internalObject[keyOption] = normalizeObject(split, index, optionSubgroup[keyOption], value); - } - else { - internalObject[keyOption] = value; - } - return internalObject; - }; - return normalizeObject; - } - /** - * Attempts to prove `d` is a DateTime or Date or can be converted into one. - * @param d If a string will attempt creating a date from it. - * @param localization object containing locale and format settings. Only used with the custom formats - * @private - */ - static _dateTypeCheck(d, //eslint-disable-line @typescript-eslint/no-explicit-any - localization) { - return tryConvertToDateTime(d, localization); - } - /** - * Type checks that `value` is an array of Date or DateTime - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - * @param localization - */ - static _typeCheckDateArray(optionName, value, providedType, localization) { - return typeCheckDateArray(optionName, value, providedType, localization); - } - /** - * Type checks that `value` is an array of numbers - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - */ - static _typeCheckNumberArray(optionName, value, providedType) { - return typeCheckNumberArray(optionName, value, providedType); - } - /** - * Attempts to convert `d` to a DateTime object - * @param d value to convert - * @param optionName Provides text to error messages e.g. disabledDates - * @param localization object containing locale and format settings. Only used with the custom formats - */ - static dateConversion(d, //eslint-disable-line @typescript-eslint/no-explicit-any - optionName, localization) { - return convertToDateTime(d, optionName, localization); - } - static getFlattenDefaultOptions() { - if (this._flattenDefaults) - return this._flattenDefaults; - const deepKeys = (t, pre = []) => { - if (Array.isArray(t)) - return []; - if (Object(t) === t) { - return Object.entries(t).flatMap(([k, v]) => deepKeys(v, [...pre, k])); - } - else { - return pre.join('.'); - } - }; - this._flattenDefaults = deepKeys(DefaultOptions); - return this._flattenDefaults; - } - /** - * Some options conflict like min/max date. Verify that these kinds of options - * are set correctly. - * @param config - */ - static _validateConflicts(config) { - if (config.display.sideBySide && - (!config.display.components.clock || - !(config.display.components.hours || - config.display.components.minutes || - config.display.components.seconds))) { - Namespace.errorMessages.conflictingConfiguration('Cannot use side by side mode without the clock components'); - } - if (config.restrictions.minDate && config.restrictions.maxDate) { - if (config.restrictions.minDate.isAfter(config.restrictions.maxDate)) { - Namespace.errorMessages.conflictingConfiguration('minDate is after maxDate'); - } - if (config.restrictions.maxDate.isBefore(config.restrictions.minDate)) { - Namespace.errorMessages.conflictingConfiguration('maxDate is before minDate'); - } - } - if (config.multipleDates && config.dateRange) { - Namespace.errorMessages.conflictingConfiguration('Cannot uss option "multipleDates" with "dateRange"'); - } - } - } - OptionConverter.ignoreProperties = [ - 'meta', - 'dayViewHeaderFormat', - 'container', - 'dateForms', - 'ordinal', - ]; - OptionConverter.isValue = (a) => a != null; // everything except undefined + null - - class Dates { - constructor() { - this._dates = []; - this.optionsStore = serviceLocator.locate(OptionsStore); - this.validation = serviceLocator.locate(Validation); - this._eventEmitters = serviceLocator.locate(EventEmitters); - } - /** - * Returns the array of selected dates - */ - get picked() { - return [...this._dates]; - } - /** - * Returns the last picked value. - */ - get lastPicked() { - return this._dates[this.lastPickedIndex]?.clone; - } - /** - * Returns the length of picked dates -1 or 0 if none are selected. - */ - get lastPickedIndex() { - if (this._dates.length === 0) - return 0; - return this._dates.length - 1; - } - /** - * Formats a DateTime object to a string. Used when setting the input value. - * @param date - */ - formatInput(date) { - if (!date) - return ''; - date.localization = this.optionsStore.options.localization; - return date.format(); - } - /** - * parse the value into a DateTime object. - * this can be overwritten to supply your own parsing. - */ - //eslint-disable-next-line @typescript-eslint/no-explicit-any - parseInput(value) { - return OptionConverter.dateConversion(value, 'input', this.optionsStore.options.localization); - } - /** - * Tries to convert the provided value to a DateTime object. - * If value is null|undefined then clear the value of the provided index (or 0). - * @param value Value to convert or null|undefined - * @param index When using multidates this is the index in the array - */ - //eslint-disable-next-line @typescript-eslint/no-explicit-any - setFromInput(value, index) { - if (!value) { - this.setValue(undefined, index); - return; - } - const converted = this.parseInput(value); - if (converted) { - converted.setLocalization(this.optionsStore.options.localization); - this.setValue(converted, index); - } - } - /** - * Adds a new DateTime to selected dates array - * @param date - */ - add(date) { - this._dates.push(date); - } - /** - * Returns true if the `targetDate` is part of the selected dates array. - * If `unit` is provided then a granularity to that unit will be used. - * @param targetDate - * @param unit - */ - isPicked(targetDate, unit) { - if (!DateTime.isValid(targetDate)) - return false; - if (!unit) - return this._dates.find((x) => x.isSame(targetDate)) !== undefined; - const format = getFormatByUnit(unit); - const innerDateFormatted = targetDate.format(format); - return (this._dates - .map((x) => x.format(format)) - .find((x) => x === innerDateFormatted) !== undefined); - } - /** - * Returns the index at which `targetDate` is in the array. - * This is used for updating or removing a date when multi-date is used - * If `unit` is provided then a granularity to that unit will be used. - * @param targetDate - * @param unit - */ - pickedIndex(targetDate, unit) { - if (!DateTime.isValid(targetDate)) - return -1; - if (!unit) - return this._dates.map((x) => x.valueOf()).indexOf(targetDate.valueOf()); - const format = getFormatByUnit(unit); - const innerDateFormatted = targetDate.format(format); - return this._dates.map((x) => x.format(format)).indexOf(innerDateFormatted); - } - /** - * Clears all selected dates. - */ - clear() { - this.optionsStore.unset = true; - this._eventEmitters.triggerEvent.emit({ - type: Namespace.events.change, - date: undefined, - oldDate: this.lastPicked, - isClear: true, - isValid: true, - }); - this._dates = []; - if (this.optionsStore.input) - this.optionsStore.input.value = ''; - this._eventEmitters.updateDisplay.emit('all'); - } - /** - * Find the "book end" years given a `year` and a `factor` - * @param factor e.g. 100 for decades - * @param year e.g. 2021 - */ - static getStartEndYear(factor, year) { - const step = factor / 10, startYear = Math.floor(year / factor) * factor, endYear = startYear + step * 9, focusValue = Math.floor(year / step) * step; - return [startYear, endYear, focusValue]; - } - updateInput(target) { - if (!this.optionsStore.input) - return; - let newValue = this.formatInput(target); - if (this.optionsStore.options.multipleDates || - this.optionsStore.options.dateRange) { - newValue = this._dates - .map((d) => this.formatInput(d)) - .join(this.optionsStore.options.multipleDatesSeparator); - } - if (this.optionsStore.input.value != newValue) - this.optionsStore.input.value = newValue; - } - /** - * Attempts to either clear or set the `target` date at `index`. - * If the `target` is null then the date will be cleared. - * If multi-date is being used then it will be removed from the array. - * If `target` is valid and multi-date is used then if `index` is - * provided the date at that index will be replaced, otherwise it is appended. - * @param target - * @param index - */ - setValue(target, index) { - const noIndex = typeof index === 'undefined', isClear = !target && noIndex; - let oldDate = this.optionsStore.unset ? null : this._dates[index]?.clone; - if (!oldDate && !this.optionsStore.unset && noIndex && isClear) { - oldDate = this.lastPicked; - } - if (target && oldDate?.isSame(target)) { - this.updateInput(target); - return; - } - // case of calling setValue(null) - if (!target) { - this._setValueNull(isClear, index, oldDate); - return; - } - index = index || 0; - target = target.clone; - // minute stepping is being used, force the minute to the closest value - if (this.optionsStore.options.stepping !== 1) { - target.minutes = - Math.round(target.minutes / this.optionsStore.options.stepping) * - this.optionsStore.options.stepping; - target.startOf(exports.Unit.minutes); - } - const onUpdate = (isValid) => { - this._dates[index] = target; - this._eventEmitters.updateViewDate.emit(target.clone); - this.updateInput(target); - this.optionsStore.unset = false; - this._eventEmitters.updateDisplay.emit('all'); - this._eventEmitters.triggerEvent.emit({ - type: Namespace.events.change, - date: target, - oldDate, - isClear, - isValid: isValid, - }); - }; - if (this.validation.isValid(target) && - this.validation.dateRangeIsValid(this.picked, index, target)) { - onUpdate(true); - return; - } - if (this.optionsStore.options.keepInvalid) { - onUpdate(false); - } - this._eventEmitters.triggerEvent.emit({ - type: Namespace.events.error, - reason: Namespace.errorMessages.failedToSetInvalidDate, - date: target, - oldDate, - }); - } - _setValueNull(isClear, index, oldDate) { - if (!this.optionsStore.options.multipleDates || - this._dates.length === 1 || - isClear) { - this.optionsStore.unset = true; - this._dates = []; - } - else { - this._dates.splice(index, 1); - } - this.updateInput(); - this._eventEmitters.triggerEvent.emit({ - type: Namespace.events.change, - date: undefined, - oldDate, - isClear, - isValid: true, - }); - this._eventEmitters.updateDisplay.emit('all'); - } - } - - var ActionTypes; - (function (ActionTypes) { - ActionTypes["next"] = "next"; - ActionTypes["previous"] = "previous"; - ActionTypes["changeCalendarView"] = "changeCalendarView"; - ActionTypes["selectMonth"] = "selectMonth"; - ActionTypes["selectYear"] = "selectYear"; - ActionTypes["selectDecade"] = "selectDecade"; - ActionTypes["selectDay"] = "selectDay"; - ActionTypes["selectHour"] = "selectHour"; - ActionTypes["selectMinute"] = "selectMinute"; - ActionTypes["selectSecond"] = "selectSecond"; - ActionTypes["incrementHours"] = "incrementHours"; - ActionTypes["incrementMinutes"] = "incrementMinutes"; - ActionTypes["incrementSeconds"] = "incrementSeconds"; - ActionTypes["decrementHours"] = "decrementHours"; - ActionTypes["decrementMinutes"] = "decrementMinutes"; - ActionTypes["decrementSeconds"] = "decrementSeconds"; - ActionTypes["toggleMeridiem"] = "toggleMeridiem"; - ActionTypes["togglePicker"] = "togglePicker"; - ActionTypes["showClock"] = "showClock"; - ActionTypes["showHours"] = "showHours"; - ActionTypes["showMinutes"] = "showMinutes"; - ActionTypes["showSeconds"] = "showSeconds"; - ActionTypes["clear"] = "clear"; - ActionTypes["close"] = "close"; - ActionTypes["today"] = "today"; - })(ActionTypes || (ActionTypes = {})); - var ActionTypes$1 = ActionTypes; - - /** - * Creates and updates the grid for `date` - */ - class DateDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.daysContainer); - container.append(...this._daysOfTheWeek()); - if (this.optionsStore.options.display.calendarWeeks) { - const div = document.createElement('div'); - div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight); - container.appendChild(div); - } - const { rangeHoverEvent, rangeHoverOutEvent } = this.handleMouseEvents(container); - for (let i = 0; i < 42; i++) { - if (i !== 0 && i % 7 === 0) { - if (this.optionsStore.options.display.calendarWeeks) { - const div = document.createElement('div'); - div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight); - container.appendChild(div); - } - } - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectDay); - container.appendChild(div); - // if hover is supported then add the events - if (matchMedia('(hover: hover)').matches && - this.optionsStore.options.dateRange) { - div.addEventListener('mouseover', rangeHoverEvent); - div.addEventListener('mouseout', rangeHoverOutEvent); - } - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const container = widget.getElementsByClassName(Namespace.css.daysContainer)[0]; - this._updateCalendarView(container); - const innerDate = this.optionsStore.viewDate.clone - .startOf(exports.Unit.month) - .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek) - .manipulate(12, exports.Unit.hours); - this._handleCalendarWeeks(container, innerDate.clone); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectDay}"]`) - .forEach((element) => { - const classes = []; - classes.push(Namespace.css.day); - if (innerDate.isBefore(this.optionsStore.viewDate, exports.Unit.month)) { - classes.push(Namespace.css.old); - } - if (innerDate.isAfter(this.optionsStore.viewDate, exports.Unit.month)) { - classes.push(Namespace.css.new); - } - if (!this.optionsStore.unset && - !this.optionsStore.options.dateRange && - this.dates.isPicked(innerDate, exports.Unit.date)) { - classes.push(Namespace.css.active); - } - if (!this.validation.isValid(innerDate, exports.Unit.date)) { - classes.push(Namespace.css.disabled); - } - if (innerDate.isSame(new DateTime(), exports.Unit.date)) { - classes.push(Namespace.css.today); - } - if (innerDate.weekDay === 0 || innerDate.weekDay === 6) { - classes.push(Namespace.css.weekend); - } - this._handleDateRange(innerDate, classes); - paint(exports.Unit.date, innerDate, classes, element); - element.classList.remove(...element.classList); - element.classList.add(...classes); - element.setAttribute('data-value', this._dateToDataValue(innerDate)); - element.setAttribute('data-day', `${innerDate.date}`); - element.innerText = innerDate.parts(undefined, { - day: 'numeric', - }).day; - innerDate.manipulate(1, exports.Unit.date); - }); - } - _dateToDataValue(date) { - if (!DateTime.isValid(date)) - return ''; - return `${date.year}-${date.monthFormatted}-${date.dateFormatted}`; - } - _handleDateRange(innerDate, classes) { - const rangeStart = this.dates.picked[0]; - const rangeEnd = this.dates.picked[1]; - if (this.optionsStore.options.dateRange) { - if (innerDate.isBetween(rangeStart, rangeEnd, exports.Unit.date)) { - classes.push(Namespace.css.rangeIn); - } - if (innerDate.isSame(rangeStart, exports.Unit.date)) { - classes.push(Namespace.css.rangeStart); - } - if (innerDate.isSame(rangeEnd, exports.Unit.date)) { - classes.push(Namespace.css.rangeEnd); - } - } - } - handleMouseEvents(container) { - const rangeHoverEvent = (e) => { - const currentTarget = e?.currentTarget; - // if we have 0 or 2 selected or if the target is disabled then ignore - if (this.dates.picked.length !== 1 || - currentTarget.classList.contains(Namespace.css.disabled)) - return; - // select all the date divs - const allDays = [...container.querySelectorAll('.day')]; - // get the date value from the element being hovered over - const attributeValue = currentTarget.getAttribute('data-value'); - // format the string to a date - const innerDate = DateTime.fromString(attributeValue, { - format: 'yyyy-MM-dd', - }); - // find the position of the target in the date container - const dayIndex = allDays.findIndex((e) => e.getAttribute('data-value') === attributeValue); - // find the first and second selected dates - const rangeStart = this.dates.picked[0]; - const rangeEnd = this.dates.picked[1]; - //format the start date so that it can be found by the attribute - const rangeStartFormatted = this._dateToDataValue(rangeStart); - const rangeStartIndex = allDays.findIndex((e) => e.getAttribute('data-value') === rangeStartFormatted); - const rangeStartElement = allDays[rangeStartIndex]; - //make sure we don't leave start/end classes if we don't need them - if (!innerDate.isSame(rangeStart, exports.Unit.date)) { - currentTarget.classList.remove(Namespace.css.rangeStart); - } - if (!innerDate.isSame(rangeEnd, exports.Unit.date)) { - currentTarget.classList.remove(Namespace.css.rangeEnd); - } - // the following figures out which direct from start date is selected - // the selection "cap" classes are applied if needed - // otherwise all the dates between will get the `rangeIn` class. - // We make this selection based on the element's index and the rangeStart index - let lambda; - if (innerDate.isBefore(rangeStart)) { - currentTarget.classList.add(Namespace.css.rangeStart); - rangeStartElement?.classList.remove(Namespace.css.rangeStart); - rangeStartElement?.classList.add(Namespace.css.rangeEnd); - lambda = (_, index) => index > dayIndex && index < rangeStartIndex; - } - else { - currentTarget.classList.add(Namespace.css.rangeEnd); - rangeStartElement?.classList.remove(Namespace.css.rangeEnd); - rangeStartElement?.classList.add(Namespace.css.rangeStart); - lambda = (_, index) => index < dayIndex && index > rangeStartIndex; - } - allDays.filter(lambda).forEach((e) => { - e.classList.add(Namespace.css.rangeIn); - }); - }; - const rangeHoverOutEvent = (e) => { - // find all the dates in the container - const allDays = [...container.querySelectorAll('.day')]; - // if only the start is selected, remove all the rangeIn classes - // we do this because once the user hovers over a new date the range will be recalculated. - if (this.dates.picked.length === 1) - allDays.forEach((e) => e.classList.remove(Namespace.css.rangeIn)); - // if we have 0 or 2 dates selected then ignore - if (this.dates.picked.length !== 1) - return; - const currentTarget = e?.currentTarget; - // get the elements date from the attribute value - const innerDate = new DateTime(currentTarget.getAttribute('data-value')); - // verify selections and remove invalid classes - if (!innerDate.isSame(this.dates.picked[0], exports.Unit.date)) { - currentTarget.classList.remove(Namespace.css.rangeStart); - } - if (!innerDate.isSame(this.dates.picked[1], exports.Unit.date)) { - currentTarget.classList.remove(Namespace.css.rangeEnd); - } - }; - return { rangeHoverEvent, rangeHoverOutEvent }; - } - _updateCalendarView(container) { - if (this.optionsStore.currentView !== 'calendar') - return; - const [previous, switcher, next] = container.parentElement - .getElementsByClassName(Namespace.css.calendarHeader)[0] - .getElementsByTagName('div'); - switcher.setAttribute(Namespace.css.daysContainer, this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat)); - this.optionsStore.options.display.components.month - ? switcher.classList.remove(Namespace.css.disabled) - : switcher.classList.add(Namespace.css.disabled); - this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.month), exports.Unit.month) - ? previous.classList.remove(Namespace.css.disabled) - : previous.classList.add(Namespace.css.disabled); - this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, exports.Unit.month), exports.Unit.month) - ? next.classList.remove(Namespace.css.disabled) - : next.classList.add(Namespace.css.disabled); - } - /*** - * Generates a html row that contains the days of the week. - * @private - */ - _daysOfTheWeek() { - const innerDate = this.optionsStore.viewDate.clone - .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek) - .startOf(exports.Unit.date); - const row = []; - document.createElement('div'); - if (this.optionsStore.options.display.calendarWeeks) { - const htmlDivElement = document.createElement('div'); - htmlDivElement.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight); - htmlDivElement.innerText = '#'; - row.push(htmlDivElement); - } - for (let i = 0; i < 7; i++) { - const htmlDivElement = document.createElement('div'); - htmlDivElement.classList.add(Namespace.css.dayOfTheWeek, Namespace.css.noHighlight); - htmlDivElement.innerText = innerDate.format({ weekday: 'short' }); - innerDate.manipulate(1, exports.Unit.date); - row.push(htmlDivElement); - } - return row; - } - _handleCalendarWeeks(container, innerDate) { - [...container.querySelectorAll(`.${Namespace.css.calendarWeeks}`)] - .filter((e) => e.innerText !== '#') - .forEach((element) => { - element.innerText = `${innerDate.week}`; - innerDate.manipulate(7, exports.Unit.date); - }); - } - } - - /** - * Creates and updates the grid for `month` - */ - class MonthDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.monthsContainer); - for (let i = 0; i < 12; i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectMonth); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const container = widget.getElementsByClassName(Namespace.css.monthsContainer)[0]; - if (this.optionsStore.currentView === 'months') { - const [previous, switcher, next] = container.parentElement - .getElementsByClassName(Namespace.css.calendarHeader)[0] - .getElementsByTagName('div'); - switcher.setAttribute(Namespace.css.monthsContainer, this.optionsStore.viewDate.format({ year: 'numeric' })); - this.optionsStore.options.display.components.year - ? switcher.classList.remove(Namespace.css.disabled) - : switcher.classList.add(Namespace.css.disabled); - this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.year), exports.Unit.year) - ? previous.classList.remove(Namespace.css.disabled) - : previous.classList.add(Namespace.css.disabled); - this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, exports.Unit.year), exports.Unit.year) - ? next.classList.remove(Namespace.css.disabled) - : next.classList.add(Namespace.css.disabled); - } - const innerDate = this.optionsStore.viewDate.clone.startOf(exports.Unit.year); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectMonth}"]`) - .forEach((containerClone, index) => { - const classes = []; - classes.push(Namespace.css.month); - if (!this.optionsStore.unset && - this.dates.isPicked(innerDate, exports.Unit.month)) { - classes.push(Namespace.css.active); - } - if (!this.validation.isValid(innerDate, exports.Unit.month)) { - classes.push(Namespace.css.disabled); - } - paint(exports.Unit.month, innerDate, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${index}`); - containerClone.innerText = `${innerDate.format({ month: 'short' })}`; - innerDate.manipulate(1, exports.Unit.month); - }); - } - } - - /** - * Creates and updates the grid for `year` - */ - class YearDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.yearsContainer); - for (let i = 0; i < 12; i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectYear); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - this._startYear = this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.year); - this._endYear = this.optionsStore.viewDate.clone.manipulate(10, exports.Unit.year); - const container = widget.getElementsByClassName(Namespace.css.yearsContainer)[0]; - if (this.optionsStore.currentView === 'years') { - const [previous, switcher, next] = container.parentElement - .getElementsByClassName(Namespace.css.calendarHeader)[0] - .getElementsByTagName('div'); - switcher.setAttribute(Namespace.css.yearsContainer, `${this._startYear.format({ year: 'numeric' })}-${this._endYear.format({ - year: 'numeric', - })}`); - this.optionsStore.options.display.components.decades - ? switcher.classList.remove(Namespace.css.disabled) - : switcher.classList.add(Namespace.css.disabled); - this.validation.isValid(this._startYear, exports.Unit.year) - ? previous.classList.remove(Namespace.css.disabled) - : previous.classList.add(Namespace.css.disabled); - this.validation.isValid(this._endYear, exports.Unit.year) - ? next.classList.remove(Namespace.css.disabled) - : next.classList.add(Namespace.css.disabled); - } - const innerDate = this.optionsStore.viewDate.clone - .startOf(exports.Unit.year) - .manipulate(-1, exports.Unit.year); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectYear}"]`) - .forEach((containerClone) => { - const classes = []; - classes.push(Namespace.css.year); - if (!this.optionsStore.unset && - this.dates.isPicked(innerDate, exports.Unit.year)) { - classes.push(Namespace.css.active); - } - if (!this.validation.isValid(innerDate, exports.Unit.year)) { - classes.push(Namespace.css.disabled); - } - paint(exports.Unit.year, innerDate, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${innerDate.year}`); - containerClone.innerText = innerDate.format({ year: 'numeric' }); - innerDate.manipulate(1, exports.Unit.year); - }); - } - } - - /** - * Creates and updates the grid for `seconds` - */ - class DecadeDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.decadesContainer); - for (let i = 0; i < 12; i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectDecade); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const [start, end] = Dates.getStartEndYear(100, this.optionsStore.viewDate.year); - this._startDecade = this.optionsStore.viewDate.clone.startOf(exports.Unit.year); - this._startDecade.year = start; - this._endDecade = this.optionsStore.viewDate.clone.startOf(exports.Unit.year); - this._endDecade.year = end; - const container = widget.getElementsByClassName(Namespace.css.decadesContainer)[0]; - const [previous, switcher, next] = container.parentElement - .getElementsByClassName(Namespace.css.calendarHeader)[0] - .getElementsByTagName('div'); - if (this.optionsStore.currentView === 'decades') { - switcher.setAttribute(Namespace.css.decadesContainer, `${this._startDecade.format({ - year: 'numeric', - })}-${this._endDecade.format({ year: 'numeric' })}`); - this.validation.isValid(this._startDecade, exports.Unit.year) - ? previous.classList.remove(Namespace.css.disabled) - : previous.classList.add(Namespace.css.disabled); - this.validation.isValid(this._endDecade, exports.Unit.year) - ? next.classList.remove(Namespace.css.disabled) - : next.classList.add(Namespace.css.disabled); - } - const pickedYears = this.dates.picked.map((x) => x.year); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectDecade}"]`) - .forEach((containerClone, index) => { - if (index === 0) { - containerClone.classList.add(Namespace.css.old); - if (this._startDecade.year - 10 < 0) { - containerClone.textContent = ' '; - previous.classList.add(Namespace.css.disabled); - containerClone.classList.add(Namespace.css.disabled); - containerClone.setAttribute('data-value', ''); - return; - } - else { - containerClone.innerText = this._startDecade.clone - .manipulate(-10, exports.Unit.year) - .format({ year: 'numeric' }); - containerClone.setAttribute('data-value', `${this._startDecade.year}`); - return; - } - } - const classes = []; - classes.push(Namespace.css.decade); - const startDecadeYear = this._startDecade.year; - const endDecadeYear = this._startDecade.year + 9; - if (!this.optionsStore.unset && - pickedYears.filter((x) => x >= startDecadeYear && x <= endDecadeYear) - .length > 0) { - classes.push(Namespace.css.active); - } - paint('decade', this._startDecade, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${this._startDecade.year}`); - containerClone.innerText = `${this._startDecade.format({ - year: 'numeric', - })}`; - this._startDecade.manipulate(10, exports.Unit.year); - }); - } - } - - /** - * Creates the clock display - */ - class TimeDisplay { - constructor() { - this._gridColumns = ''; - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the clock display - * @private - */ - getPicker(iconTag) { - const container = document.createElement('div'); - container.classList.add(Namespace.css.clockContainer); - container.append(...this._grid(iconTag)); - return container; - } - /** - * Populates the various elements with in the clock display - * like the current hour and if the manipulation icons are enabled. - * @private - */ - _update(widget) { - const timesDiv = (widget.getElementsByClassName(Namespace.css.clockContainer)[0]); - let lastPicked = this.dates.lastPicked?.clone; - if (!lastPicked && this.optionsStore.options.useCurrent) - lastPicked = this.optionsStore.viewDate.clone; - timesDiv - .querySelectorAll('.disabled') - .forEach((element) => element.classList.remove(Namespace.css.disabled)); - if (this.optionsStore.options.display.components.hours) { - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, exports.Unit.hours), exports.Unit.hours)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.incrementHours}]`) - .classList.add(Namespace.css.disabled); - } - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.hours), exports.Unit.hours)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.decrementHours}]`) - .classList.add(Namespace.css.disabled); - } - timesDiv.querySelector(`[data-time-component=${exports.Unit.hours}]`).innerText = lastPicked - ? lastPicked.getHoursFormatted(this.optionsStore.options.localization.hourCycle) - : '--'; - } - if (this.optionsStore.options.display.components.minutes) { - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, exports.Unit.minutes), exports.Unit.minutes)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.incrementMinutes}]`) - .classList.add(Namespace.css.disabled); - } - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.minutes), exports.Unit.minutes)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.decrementMinutes}]`) - .classList.add(Namespace.css.disabled); - } - timesDiv.querySelector(`[data-time-component=${exports.Unit.minutes}]`).innerText = lastPicked ? lastPicked.minutesFormatted : '--'; - } - if (this.optionsStore.options.display.components.seconds) { - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, exports.Unit.seconds), exports.Unit.seconds)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.incrementSeconds}]`) - .classList.add(Namespace.css.disabled); - } - if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.seconds), exports.Unit.seconds)) { - timesDiv - .querySelector(`[data-action=${ActionTypes$1.decrementSeconds}]`) - .classList.add(Namespace.css.disabled); - } - timesDiv.querySelector(`[data-time-component=${exports.Unit.seconds}]`).innerText = lastPicked ? lastPicked.secondsFormatted : '--'; - } - if (this.optionsStore.isTwelveHour) { - const toggle = timesDiv.querySelector(`[data-action=${ActionTypes$1.toggleMeridiem}]`); - const meridiemDate = (lastPicked || this.optionsStore.viewDate).clone; - toggle.innerText = meridiemDate.meridiem(); - if (!this.validation.isValid(meridiemDate.manipulate(meridiemDate.hours >= 12 ? -12 : 12, exports.Unit.hours))) { - toggle.classList.add(Namespace.css.disabled); - } - else { - toggle.classList.remove(Namespace.css.disabled); - } - } - timesDiv.style.gridTemplateAreas = `"${this._gridColumns}"`; - } - /** - * Creates the table for the clock display depending on what options are selected. - * @private - */ - _grid(iconTag) { - this._gridColumns = ''; - const top = [], middle = [], bottom = [], separator = document.createElement('div'), upIcon = iconTag(this.optionsStore.options.display.icons.up), downIcon = iconTag(this.optionsStore.options.display.icons.down); - separator.classList.add(Namespace.css.separator, Namespace.css.noHighlight); - const separatorColon = separator.cloneNode(true); - separatorColon.innerHTML = ':'; - const getSeparator = (colon = false) => { - return colon - ? separatorColon.cloneNode(true) - : separator.cloneNode(true); - }; - if (this.optionsStore.options.display.components.hours) { - let divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.incrementHour); - divElement.setAttribute('data-action', ActionTypes$1.incrementHours); - divElement.appendChild(upIcon.cloneNode(true)); - top.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.pickHour); - divElement.setAttribute('data-action', ActionTypes$1.showHours); - divElement.setAttribute('data-time-component', exports.Unit.hours); - middle.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.decrementHour); - divElement.setAttribute('data-action', ActionTypes$1.decrementHours); - divElement.appendChild(downIcon.cloneNode(true)); - bottom.push(divElement); - this._gridColumns += 'a'; - } - if (this.optionsStore.options.display.components.minutes) { - this._gridColumns += ' a'; - if (this.optionsStore.options.display.components.hours) { - top.push(getSeparator()); - middle.push(getSeparator(true)); - bottom.push(getSeparator()); - this._gridColumns += ' a'; - } - let divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.incrementMinute); - divElement.setAttribute('data-action', ActionTypes$1.incrementMinutes); - divElement.appendChild(upIcon.cloneNode(true)); - top.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.pickMinute); - divElement.setAttribute('data-action', ActionTypes$1.showMinutes); - divElement.setAttribute('data-time-component', exports.Unit.minutes); - middle.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.decrementMinute); - divElement.setAttribute('data-action', ActionTypes$1.decrementMinutes); - divElement.appendChild(downIcon.cloneNode(true)); - bottom.push(divElement); - } - if (this.optionsStore.options.display.components.seconds) { - this._gridColumns += ' a'; - if (this.optionsStore.options.display.components.minutes) { - top.push(getSeparator()); - middle.push(getSeparator(true)); - bottom.push(getSeparator()); - this._gridColumns += ' a'; - } - let divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.incrementSecond); - divElement.setAttribute('data-action', ActionTypes$1.incrementSeconds); - divElement.appendChild(upIcon.cloneNode(true)); - top.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.pickSecond); - divElement.setAttribute('data-action', ActionTypes$1.showSeconds); - divElement.setAttribute('data-time-component', exports.Unit.seconds); - middle.push(divElement); - divElement = document.createElement('div'); - divElement.setAttribute('title', this.optionsStore.options.localization.decrementSecond); - divElement.setAttribute('data-action', ActionTypes$1.decrementSeconds); - divElement.appendChild(downIcon.cloneNode(true)); - bottom.push(divElement); - } - if (this.optionsStore.isTwelveHour) { - this._gridColumns += ' a'; - let divElement = getSeparator(); - top.push(divElement); - const button = document.createElement('button'); - button.setAttribute('type', 'button'); - button.setAttribute('title', this.optionsStore.options.localization.toggleMeridiem); - button.setAttribute('data-action', ActionTypes$1.toggleMeridiem); - button.setAttribute('tabindex', '-1'); - if (Namespace.css.toggleMeridiem.includes(',')) { - //todo move this to paint function? - button.classList.add(...Namespace.css.toggleMeridiem.split(',')); - } - else - button.classList.add(Namespace.css.toggleMeridiem); - divElement = document.createElement('div'); - divElement.classList.add(Namespace.css.noHighlight); - divElement.appendChild(button); - middle.push(divElement); - divElement = getSeparator(); - bottom.push(divElement); - } - this._gridColumns = this._gridColumns.trim(); - return [...top, ...middle, ...bottom]; - } - } - - /** - * Creates and updates the grid for `hours` - */ - class HourDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.hourContainer); - for (let i = 0; i < (this.optionsStore.isTwelveHour ? 12 : 24); i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectHour); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const container = widget.getElementsByClassName(Namespace.css.hourContainer)[0]; - const innerDate = this.optionsStore.viewDate.clone.startOf(exports.Unit.date); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectHour}"]`) - .forEach((containerClone) => { - const classes = []; - classes.push(Namespace.css.hour); - if (!this.validation.isValid(innerDate, exports.Unit.hours)) { - classes.push(Namespace.css.disabled); - } - paint(exports.Unit.hours, innerDate, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${innerDate.hours}`); - containerClone.innerText = innerDate.getHoursFormatted(this.optionsStore.options.localization.hourCycle); - innerDate.manipulate(1, exports.Unit.hours); - }); - } - } - - /** - * Creates and updates the grid for `minutes` - */ - class MinuteDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.minuteContainer); - const step = this.optionsStore.options.stepping === 1 - ? 5 - : this.optionsStore.options.stepping; - for (let i = 0; i < 60 / step; i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectMinute); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const container = widget.getElementsByClassName(Namespace.css.minuteContainer)[0]; - const innerDate = this.optionsStore.viewDate.clone.startOf(exports.Unit.hours); - const step = this.optionsStore.options.stepping === 1 - ? 5 - : this.optionsStore.options.stepping; - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectMinute}"]`) - .forEach((containerClone) => { - const classes = []; - classes.push(Namespace.css.minute); - if (!this.validation.isValid(innerDate, exports.Unit.minutes)) { - classes.push(Namespace.css.disabled); - } - paint(exports.Unit.minutes, innerDate, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${innerDate.minutes}`); - containerClone.innerText = innerDate.minutesFormatted; - innerDate.manipulate(step, exports.Unit.minutes); - }); - } - } - - /** - * Creates and updates the grid for `seconds` - */ - class secondDisplay { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.validation = serviceLocator.locate(Validation); - } - /** - * Build the container html for the display - * @private - */ - getPicker() { - const container = document.createElement('div'); - container.classList.add(Namespace.css.secondContainer); - for (let i = 0; i < 12; i++) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.selectSecond); - container.appendChild(div); - } - return container; - } - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget, paint) { - const container = widget.getElementsByClassName(Namespace.css.secondContainer)[0]; - const innerDate = this.optionsStore.viewDate.clone.startOf(exports.Unit.minutes); - container - .querySelectorAll(`[data-action="${ActionTypes$1.selectSecond}"]`) - .forEach((containerClone) => { - const classes = []; - classes.push(Namespace.css.second); - if (!this.validation.isValid(innerDate, exports.Unit.seconds)) { - classes.push(Namespace.css.disabled); - } - paint(exports.Unit.seconds, innerDate, classes, containerClone); - containerClone.classList.remove(...containerClone.classList); - containerClone.classList.add(...classes); - containerClone.setAttribute('data-value', `${innerDate.seconds}`); - containerClone.innerText = innerDate.secondsFormatted; - innerDate.manipulate(5, exports.Unit.seconds); - }); - } - } - - /** - * Provides a collapse functionality to the view changes - */ - class Collapse { - /** - * Flips the show/hide state of `target` - * @param target html element to affect. - */ - static toggle(target) { - if (target.classList.contains(Namespace.css.show)) { - this.hide(target); - } - else { - this.show(target); - } - } - /** - * Skips any animation or timeouts and immediately set the element to show. - * @param target - */ - static showImmediately(target) { - target.classList.remove(Namespace.css.collapsing); - target.classList.add(Namespace.css.collapse, Namespace.css.show); - target.style.height = ''; - } - /** - * If `target` is not already showing, then show after the animation. - * @param target - */ - static show(target) { - if (target.classList.contains(Namespace.css.collapsing) || - target.classList.contains(Namespace.css.show)) - return; - const complete = () => { - Collapse.showImmediately(target); - }; - target.style.height = '0'; - target.classList.remove(Namespace.css.collapse); - target.classList.add(Namespace.css.collapsing); - //eslint-disable-next-line @typescript-eslint/no-unused-vars - setTimeout(complete, this.getTransitionDurationFromElement(target)); - target.style.height = `${target.scrollHeight}px`; - } - /** - * Skips any animation or timeouts and immediately set the element to hide. - * @param target - */ - static hideImmediately(target) { - if (!target) - return; - target.classList.remove(Namespace.css.collapsing, Namespace.css.show); - target.classList.add(Namespace.css.collapse); - } - /** - * If `target` is not already hidden, then hide after the animation. - * @param target HTML Element - */ - static hide(target) { - if (target.classList.contains(Namespace.css.collapsing) || - !target.classList.contains(Namespace.css.show)) - return; - const complete = () => { - Collapse.hideImmediately(target); - }; - target.style.height = `${target.getBoundingClientRect()['height']}px`; - const reflow = (element) => element.offsetHeight; - reflow(target); - target.classList.remove(Namespace.css.collapse, Namespace.css.show); - target.classList.add(Namespace.css.collapsing); - target.style.height = ''; - //eslint-disable-next-line @typescript-eslint/no-unused-vars - setTimeout(complete, this.getTransitionDurationFromElement(target)); - } - } - /** - * Gets the transition duration from the `element` by getting css properties - * `transition-duration` and `transition-delay` - * @param element HTML Element - */ - Collapse.getTransitionDurationFromElement = (element) => { - if (!element) { - return 0; - } - // Get transition-duration of the element - let { transitionDuration, transitionDelay } = window.getComputedStyle(element); - const floatTransitionDuration = Number.parseFloat(transitionDuration); - const floatTransitionDelay = Number.parseFloat(transitionDelay); - // Return 0 if element or transition duration is not found - if (!floatTransitionDuration && !floatTransitionDelay) { - return 0; - } - // If multiple durations are defined, take the first - transitionDuration = transitionDuration.split(',')[0]; - transitionDelay = transitionDelay.split(',')[0]; - return ((Number.parseFloat(transitionDuration) + - Number.parseFloat(transitionDelay)) * - 1000); - }; - - /** - * Main class for all things display related. - */ - class Display { - constructor() { - this._isVisible = false; - /** - * A document click event to hide the widget if click is outside - * @private - * @param e MouseEvent - */ - this._documentClickEvent = (e) => { - if (this.optionsStore.options.debug || window.debug) - return; //eslint-disable-line @typescript-eslint/no-explicit-any - if (this._isVisible && - !e.composedPath().includes(this.widget) && // click inside the widget - !e.composedPath()?.includes(this.optionsStore.element) // click on the element - ) { - this.hide(); - } - }; - /** - * Click event for any action like selecting a date - * @param e MouseEvent - * @private - */ - this._actionsClickEvent = (e) => { - this._eventEmitters.action.emit({ e: e }); - }; - this.optionsStore = serviceLocator.locate(OptionsStore); - this.validation = serviceLocator.locate(Validation); - this.dates = serviceLocator.locate(Dates); - this.dateDisplay = serviceLocator.locate(DateDisplay); - this.monthDisplay = serviceLocator.locate(MonthDisplay); - this.yearDisplay = serviceLocator.locate(YearDisplay); - this.decadeDisplay = serviceLocator.locate(DecadeDisplay); - this.timeDisplay = serviceLocator.locate(TimeDisplay); - this.hourDisplay = serviceLocator.locate(HourDisplay); - this.minuteDisplay = serviceLocator.locate(MinuteDisplay); - this.secondDisplay = serviceLocator.locate(secondDisplay); - this._eventEmitters = serviceLocator.locate(EventEmitters); - this._widget = undefined; - this._eventEmitters.updateDisplay.subscribe((result) => { - this._update(result); - }); - } - /** - * Returns the widget body or undefined - * @private - */ - get widget() { - return this._widget; - } - get dateContainer() { - return this.widget?.querySelector(`div.${Namespace.css.dateContainer}`); - } - get timeContainer() { - return this.widget?.querySelector(`div.${Namespace.css.timeContainer}`); - } - /** - * Returns this visible state of the picker (shown) - */ - get isVisible() { - return this._isVisible; - } - /** - * Updates the table for a particular unit. Used when an option as changed or - * whenever the class list might need to be refreshed. - * @param unit - * @private - */ - _update(unit) { - if (!this.widget) - return; - switch (unit) { - case exports.Unit.seconds: - this.secondDisplay._update(this.widget, this.paint); - break; - case exports.Unit.minutes: - this.minuteDisplay._update(this.widget, this.paint); - break; - case exports.Unit.hours: - this.hourDisplay._update(this.widget, this.paint); - break; - case exports.Unit.date: - this.dateDisplay._update(this.widget, this.paint); - break; - case exports.Unit.month: - this.monthDisplay._update(this.widget, this.paint); - break; - case exports.Unit.year: - this.yearDisplay._update(this.widget, this.paint); - break; - case 'decade': - this.decadeDisplay._update(this.widget, this.paint); - break; - case 'clock': - if (!this._hasTime) - break; - this.timeDisplay._update(this.widget); - this._update(exports.Unit.hours); - this._update(exports.Unit.minutes); - this._update(exports.Unit.seconds); - break; - case 'calendar': - this._update(exports.Unit.date); - this._update(exports.Unit.year); - this._update(exports.Unit.month); - this.decadeDisplay._update(this.widget, this.paint); - this._updateCalendarHeader(); - break; - case 'all': - if (this._hasTime) { - this._update('clock'); - } - if (this._hasDate) { - this._update('calendar'); - } - } - } - // noinspection JSUnusedLocalSymbols - /** - * Allows developers to add/remove classes from an element. - * @param _unit - * @param _date - * @param _classes - * @param _element - */ - /* eslint-disable @typescript-eslint/no-unused-vars */ - paint(_unit, _date, _classes, _element) { - // implemented in plugin - } - /** - * Shows the picker and creates a Popper instance if needed. - * Add document click event to hide when clicking outside the picker. - * fires Events#show - */ - show() { - if (this.widget == undefined) { - this._showSetDefaultIfNeeded(); - this._buildWidget(); - this._updateTheme(); - this._showSetupViewMode(); - if (!this.optionsStore.options.display.inline) { - // If needed to change the parent container - const container = this.optionsStore.options?.container || document.body; - const placement = this.optionsStore.options?.display?.placement || 'bottom'; - container.appendChild(this.widget); - this.createPopup(this.optionsStore.element, this.widget, { - modifiers: [{ name: 'eventListeners', enabled: true }], - //#2400 - placement: document.documentElement.dir === 'rtl' - ? `${placement}-end` - : `${placement}-start`, - }).then(); - } - else { - this.optionsStore.element.appendChild(this.widget); - } - if (this.optionsStore.options.display.viewMode == 'clock') { - this._eventEmitters.action.emit({ - e: null, - action: ActionTypes$1.showClock, - }); - } - this.widget - .querySelectorAll('[data-action]') - .forEach((element) => element.addEventListener('click', this._actionsClickEvent)); - // show the clock when using sideBySide - if (this._hasTime && this.optionsStore.options.display.sideBySide) { - this.timeDisplay._update(this.widget); - this.widget.getElementsByClassName(Namespace.css.clockContainer)[0].style.display = 'grid'; - } - } - this.widget.classList.add(Namespace.css.show); - if (!this.optionsStore.options.display.inline) { - this.updatePopup(); - document.addEventListener('click', this._documentClickEvent); - } - this._eventEmitters.triggerEvent.emit({ type: Namespace.events.show }); - this._isVisible = true; - } - _showSetupViewMode() { - // If modeView is only clock - const onlyClock = this._hasTime && !this._hasDate; - // reset the view to the clock if there's no date components - if (onlyClock) { - this.optionsStore.currentView = 'clock'; - this._eventEmitters.action.emit({ - e: null, - action: ActionTypes$1.showClock, - }); - } - // otherwise return to the calendar view - else if (!this.optionsStore.currentCalendarViewMode) { - this.optionsStore.currentCalendarViewMode = - this.optionsStore.minimumCalendarViewMode; - } - if (!onlyClock && this.optionsStore.options.display.viewMode !== 'clock') { - if (this._hasTime) { - if (!this.optionsStore.options.display.sideBySide) { - Collapse.hideImmediately(this.timeContainer); - } - else { - Collapse.show(this.timeContainer); - } - } - Collapse.show(this.dateContainer); - } - if (this._hasDate) { - this._showMode(); - } - } - _showSetDefaultIfNeeded() { - if (this.dates.picked.length != 0) - return; - if (this.optionsStore.options.useCurrent && - !this.optionsStore.options.defaultDate) { - const date = new DateTime().setLocalization(this.optionsStore.options.localization); - if (!this.optionsStore.options.keepInvalid) { - let tries = 0; - let direction = 1; - if (this.optionsStore.options.restrictions.maxDate?.isBefore(date)) { - direction = -1; - } - while (!this.validation.isValid(date) && tries > 31) { - date.manipulate(direction, exports.Unit.date); - tries++; - } - } - this.dates.setValue(date); - } - if (this.optionsStore.options.defaultDate) { - this.dates.setValue(this.optionsStore.options.defaultDate); - } - } - async createPopup(element, widget, - //eslint-disable-next-line @typescript-eslint/no-explicit-any - options) { - let createPopperFunction; - //eslint-disable-next-line @typescript-eslint/no-explicit-any - if (window?.Popper) { - //eslint-disable-next-line @typescript-eslint/no-explicit-any - createPopperFunction = window?.Popper?.createPopper; - } - else { - const { createPopper } = await import('@popperjs/core'); - createPopperFunction = createPopper; - } - if (createPopperFunction) { - this._popperInstance = createPopperFunction(element, widget, options); - } - } - updatePopup() { - this._popperInstance?.update(); - } - /** - * Changes the calendar view mode. E.g. month <-> year - * @param direction -/+ number to move currentViewMode - * @private - */ - _showMode(direction) { - if (!this.widget) { - return; - } - if (direction) { - const max = Math.max(this.optionsStore.minimumCalendarViewMode, Math.min(3, this.optionsStore.currentCalendarViewMode + direction)); - if (this.optionsStore.currentCalendarViewMode == max) - return; - this.optionsStore.currentCalendarViewMode = max; - } - this.widget - .querySelectorAll(`.${Namespace.css.dateContainer} > div:not(.${Namespace.css.calendarHeader}), .${Namespace.css.timeContainer} > div:not(.${Namespace.css.clockContainer})`) - .forEach((e) => (e.style.display = 'none')); - const datePickerMode = CalendarModes[this.optionsStore.currentCalendarViewMode]; - const picker = this.widget.querySelector(`.${datePickerMode.className}`); - switch (datePickerMode.className) { - case Namespace.css.decadesContainer: - this.decadeDisplay._update(this.widget, this.paint); - break; - case Namespace.css.yearsContainer: - this.yearDisplay._update(this.widget, this.paint); - break; - case Namespace.css.monthsContainer: - this.monthDisplay._update(this.widget, this.paint); - break; - case Namespace.css.daysContainer: - this.dateDisplay._update(this.widget, this.paint); - break; - } - picker.style.display = 'grid'; - if (this.optionsStore.options.display.sideBySide) - (this.widget.querySelectorAll(`.${Namespace.css.clockContainer}`)[0]).style.display = 'grid'; - this._updateCalendarHeader(); - this._eventEmitters.viewUpdate.emit(); - } - /** - * Changes the theme. E.g. light, dark or auto - * @param theme the theme name - * @private - */ - _updateTheme(theme) { - if (!this.widget) { - return; - } - if (theme) { - if (this.optionsStore.options.display.theme === theme) - return; - this.optionsStore.options.display.theme = theme; - } - this.widget.classList.remove('light', 'dark'); - this.widget.classList.add(this._getThemeClass()); - if (this.optionsStore.options.display.theme === 'auto') { - window - .matchMedia(Namespace.css.isDarkPreferredQuery) - .addEventListener('change', () => this._updateTheme()); - } - else { - window - .matchMedia(Namespace.css.isDarkPreferredQuery) - .removeEventListener('change', () => this._updateTheme()); - } - } - _getThemeClass() { - const currentTheme = this.optionsStore.options.display.theme || 'auto'; - const isDarkMode = window.matchMedia && - window.matchMedia(Namespace.css.isDarkPreferredQuery).matches; - switch (currentTheme) { - case 'light': - return Namespace.css.lightTheme; - case 'dark': - return Namespace.css.darkTheme; - case 'auto': - return isDarkMode ? Namespace.css.darkTheme : Namespace.css.lightTheme; - } - } - _updateCalendarHeader() { - if (!this._hasDate) - return; - const showing = [ - ...this.widget.querySelector(`.${Namespace.css.dateContainer} div[style*="display: grid"]`).classList, - ].find((x) => x.startsWith(Namespace.css.dateContainer)); - const [previous, switcher, next] = this.widget - .getElementsByClassName(Namespace.css.calendarHeader)[0] - .getElementsByTagName('div'); - switch (showing) { - case Namespace.css.decadesContainer: - previous.setAttribute('title', this.optionsStore.options.localization.previousCentury); - switcher.setAttribute('title', ''); - next.setAttribute('title', this.optionsStore.options.localization.nextCentury); - break; - case Namespace.css.yearsContainer: - previous.setAttribute('title', this.optionsStore.options.localization.previousDecade); - switcher.setAttribute('title', this.optionsStore.options.localization.selectDecade); - next.setAttribute('title', this.optionsStore.options.localization.nextDecade); - break; - case Namespace.css.monthsContainer: - previous.setAttribute('title', this.optionsStore.options.localization.previousYear); - switcher.setAttribute('title', this.optionsStore.options.localization.selectYear); - next.setAttribute('title', this.optionsStore.options.localization.nextYear); - break; - case Namespace.css.daysContainer: - previous.setAttribute('title', this.optionsStore.options.localization.previousMonth); - switcher.setAttribute('title', this.optionsStore.options.localization.selectMonth); - next.setAttribute('title', this.optionsStore.options.localization.nextMonth); - switcher.setAttribute(showing, this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat)); - break; - } - switcher.innerText = switcher.getAttribute(showing); - } - /** - * Hides the picker if needed. - * Remove document click event to hide when clicking outside the picker. - * fires Events#hide - */ - hide() { - if (!this.widget || !this._isVisible) - return; - this.widget.classList.remove(Namespace.css.show); - if (this._isVisible) { - this._eventEmitters.triggerEvent.emit({ - type: Namespace.events.hide, - date: this.optionsStore.unset ? null : this.dates.lastPicked?.clone, - }); - this._isVisible = false; - } - document.removeEventListener('click', this._documentClickEvent); - } - /** - * Toggles the picker's open state. Fires a show/hide event depending. - */ - toggle() { - return this._isVisible ? this.hide() : this.show(); - } - /** - * Removes document and data-action click listener and reset the widget - * @private - */ - _dispose() { - document.removeEventListener('click', this._documentClickEvent); - if (!this.widget) - return; - this.widget - .querySelectorAll('[data-action]') - .forEach((element) => element.removeEventListener('click', this._actionsClickEvent)); - this.widget.parentNode.removeChild(this.widget); - this._widget = undefined; - } - /** - * Builds the widgets html template. - * @private - */ - _buildWidget() { - const template = document.createElement('div'); - template.classList.add(Namespace.css.widget); - const dateView = document.createElement('div'); - dateView.classList.add(Namespace.css.dateContainer); - dateView.append(this.getHeadTemplate(), this.decadeDisplay.getPicker(), this.yearDisplay.getPicker(), this.monthDisplay.getPicker(), this.dateDisplay.getPicker()); - const timeView = document.createElement('div'); - timeView.classList.add(Namespace.css.timeContainer); - timeView.appendChild(this.timeDisplay.getPicker(this._iconTag.bind(this))); - timeView.appendChild(this.hourDisplay.getPicker()); - timeView.appendChild(this.minuteDisplay.getPicker()); - timeView.appendChild(this.secondDisplay.getPicker()); - const toolbar = document.createElement('div'); - toolbar.classList.add(Namespace.css.toolbar); - toolbar.append(...this.getToolbarElements()); - if (this.optionsStore.options.display.inline) { - template.classList.add(Namespace.css.inline); - } - if (this.optionsStore.options.display.calendarWeeks) { - template.classList.add('calendarWeeks'); - } - if (this.optionsStore.options.display.sideBySide && this._hasDateAndTime) { - this._buildWidgetSideBySide(template, dateView, timeView, toolbar); - return; - } - if (this.optionsStore.options.display.toolbarPlacement === 'top') { - template.appendChild(toolbar); - } - const setupComponentView = (hasFirst, hasSecond, element, shouldShow) => { - if (!hasFirst) - return; - if (hasSecond) { - element.classList.add(Namespace.css.collapse); - if (shouldShow) - element.classList.add(Namespace.css.show); - } - template.appendChild(element); - }; - setupComponentView(this._hasDate, this._hasTime, dateView, this.optionsStore.options.display.viewMode !== 'clock'); - setupComponentView(this._hasTime, this._hasDate, timeView, this.optionsStore.options.display.viewMode === 'clock'); - if (this.optionsStore.options.display.toolbarPlacement === 'bottom') { - template.appendChild(toolbar); - } - const arrow = document.createElement('div'); - arrow.classList.add('arrow'); - arrow.setAttribute('data-popper-arrow', ''); - template.appendChild(arrow); - this._widget = template; - } - _buildWidgetSideBySide(template, dateView, timeView, toolbar) { - template.classList.add(Namespace.css.sideBySide); - if (this.optionsStore.options.display.toolbarPlacement === 'top') { - template.appendChild(toolbar); - } - const row = document.createElement('div'); - row.classList.add('td-row'); - dateView.classList.add('td-half'); - timeView.classList.add('td-half'); - row.appendChild(dateView); - row.appendChild(timeView); - template.appendChild(row); - if (this.optionsStore.options.display.toolbarPlacement === 'bottom') { - template.appendChild(toolbar); - } - this._widget = template; - } - /** - * Returns true if the hours, minutes, or seconds component is turned on - */ - get _hasTime() { - return (this.optionsStore.options.display.components.clock && - (this.optionsStore.options.display.components.hours || - this.optionsStore.options.display.components.minutes || - this.optionsStore.options.display.components.seconds)); - } - /** - * Returns true if the year, month, or date component is turned on - */ - get _hasDate() { - return (this.optionsStore.options.display.components.calendar && - (this.optionsStore.options.display.components.year || - this.optionsStore.options.display.components.month || - this.optionsStore.options.display.components.date)); - } - get _hasDateAndTime() { - return this._hasDate && this._hasTime; - } - /** - * Get the toolbar html based on options like buttons => today - * @private - */ - getToolbarElements() { - const toolbar = []; - if (this.optionsStore.options.display.buttons.today) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.today); - div.setAttribute('title', this.optionsStore.options.localization.today); - div.appendChild(this._iconTag(this.optionsStore.options.display.icons.today)); - toolbar.push(div); - } - if (!this.optionsStore.options.display.sideBySide && - this._hasDate && - this._hasTime) { - let title, icon; - if (this.optionsStore.options.display.viewMode === 'clock') { - title = this.optionsStore.options.localization.selectDate; - icon = this.optionsStore.options.display.icons.date; - } - else { - title = this.optionsStore.options.localization.selectTime; - icon = this.optionsStore.options.display.icons.time; - } - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.togglePicker); - div.setAttribute('title', title); - div.appendChild(this._iconTag(icon)); - toolbar.push(div); - } - if (this.optionsStore.options.display.buttons.clear) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.clear); - div.setAttribute('title', this.optionsStore.options.localization.clear); - div.appendChild(this._iconTag(this.optionsStore.options.display.icons.clear)); - toolbar.push(div); - } - if (this.optionsStore.options.display.buttons.close) { - const div = document.createElement('div'); - div.setAttribute('data-action', ActionTypes$1.close); - div.setAttribute('title', this.optionsStore.options.localization.close); - div.appendChild(this._iconTag(this.optionsStore.options.display.icons.close)); - toolbar.push(div); - } - return toolbar; - } - /*** - * Builds the base header template with next and previous icons - * @private - */ - getHeadTemplate() { - const calendarHeader = document.createElement('div'); - calendarHeader.classList.add(Namespace.css.calendarHeader); - const previous = document.createElement('div'); - previous.classList.add(Namespace.css.previous); - previous.setAttribute('data-action', ActionTypes$1.previous); - previous.appendChild(this._iconTag(this.optionsStore.options.display.icons.previous)); - const switcher = document.createElement('div'); - switcher.classList.add(Namespace.css.switch); - switcher.setAttribute('data-action', ActionTypes$1.changeCalendarView); - const next = document.createElement('div'); - next.classList.add(Namespace.css.next); - next.setAttribute('data-action', ActionTypes$1.next); - next.appendChild(this._iconTag(this.optionsStore.options.display.icons.next)); - calendarHeader.append(previous, switcher, next); - return calendarHeader; - } - /** - * Builds an icon tag as either an `` - * or with icons => type is `sprites` then a svg tag instead - * @param iconClass - * @private - */ - _iconTag(iconClass) { - if (this.optionsStore.options.display.icons.type === 'sprites') { - const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - const icon = document.createElementNS('http://www.w3.org/2000/svg', 'use'); - icon.setAttribute('xlink:href', iconClass); // Deprecated. Included for backward compatibility - icon.setAttribute('href', iconClass); - svg.appendChild(icon); - return svg; - } - const icon = document.createElement('i'); - icon.classList.add(...iconClass.split(' ')); - return icon; - } - /** - * Causes the widget to get rebuilt on next show. If the picker is already open - * then hide and reshow it. - * @private - */ - _rebuild() { - const wasVisible = this._isVisible; - this._dispose(); - if (wasVisible) - this.show(); - } - refreshCurrentView() { - //if the widget is not showing, just destroy it - if (!this._isVisible) - this._dispose(); - switch (this.optionsStore.currentView) { - case 'clock': - this._update('clock'); - break; - case 'calendar': - this._update(exports.Unit.date); - break; - case 'months': - this._update(exports.Unit.month); - break; - case 'years': - this._update(exports.Unit.year); - break; - case 'decades': - this._update('decade'); - break; - } - } - } - - /** - * Logic for various click actions - */ - class Actions { - constructor() { - this.optionsStore = serviceLocator.locate(OptionsStore); - this.dates = serviceLocator.locate(Dates); - this.validation = serviceLocator.locate(Validation); - this.display = serviceLocator.locate(Display); - this._eventEmitters = serviceLocator.locate(EventEmitters); - this._eventEmitters.action.subscribe((result) => { - this.do(result.e, result.action); - }); - } - /** - * Performs the selected `action`. See ActionTypes - * @param e This is normally a click event - * @param action If not provided, then look for a [data-action] - */ - //eslint-disable-next-line @typescript-eslint/no-explicit-any - do(e, action) { - const currentTarget = e?.currentTarget; - if (currentTarget?.classList?.contains(Namespace.css.disabled)) - return; - action = action || currentTarget?.dataset?.action; - const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate) - .clone; - switch (action) { - case ActionTypes$1.next: - case ActionTypes$1.previous: - this.handleNextPrevious(action); - break; - case ActionTypes$1.changeCalendarView: - this.display._showMode(1); - this.display._updateCalendarHeader(); - break; - case ActionTypes$1.selectMonth: - case ActionTypes$1.selectYear: - case ActionTypes$1.selectDecade: - this.handleSelectCalendarMode(action, currentTarget); - break; - case ActionTypes$1.selectDay: - this.handleSelectDay(currentTarget); - break; - case ActionTypes$1.selectHour: { - let hour = +currentTarget.dataset.value; - if (lastPicked.hours >= 12 && this.optionsStore.isTwelveHour) - hour += 12; - lastPicked.hours = hour; - this.dates.setValue(lastPicked, this.dates.lastPickedIndex); - this.hideOrClock(e); - break; - } - case ActionTypes$1.selectMinute: { - lastPicked.minutes = +currentTarget.dataset.value; - this.dates.setValue(lastPicked, this.dates.lastPickedIndex); - this.hideOrClock(e); - break; - } - case ActionTypes$1.selectSecond: { - lastPicked.seconds = +currentTarget.dataset.value; - this.dates.setValue(lastPicked, this.dates.lastPickedIndex); - this.hideOrClock(e); - break; - } - case ActionTypes$1.incrementHours: - this.manipulateAndSet(lastPicked, exports.Unit.hours); - break; - case ActionTypes$1.incrementMinutes: - this.manipulateAndSet(lastPicked, exports.Unit.minutes, this.optionsStore.options.stepping); - break; - case ActionTypes$1.incrementSeconds: - this.manipulateAndSet(lastPicked, exports.Unit.seconds); - break; - case ActionTypes$1.decrementHours: - this.manipulateAndSet(lastPicked, exports.Unit.hours, -1); - break; - case ActionTypes$1.decrementMinutes: - this.manipulateAndSet(lastPicked, exports.Unit.minutes, this.optionsStore.options.stepping * -1); - break; - case ActionTypes$1.decrementSeconds: - this.manipulateAndSet(lastPicked, exports.Unit.seconds, -1); - break; - case ActionTypes$1.toggleMeridiem: - this.manipulateAndSet(lastPicked, exports.Unit.hours, this.dates.lastPicked.hours >= 12 ? -12 : 12); - break; - case ActionTypes$1.togglePicker: - this.handleToggle(currentTarget); - break; - case ActionTypes$1.showClock: - case ActionTypes$1.showHours: - case ActionTypes$1.showMinutes: - case ActionTypes$1.showSeconds: - //make sure the clock is actually displaying - if (!this.optionsStore.options.display.sideBySide && - this.optionsStore.currentView !== 'clock') { - //hide calendar - Collapse.hideImmediately(this.display.dateContainer); - //show clock - Collapse.showImmediately(this.display.timeContainer); - } - this.handleShowClockContainers(action); - break; - case ActionTypes$1.clear: - this.dates.setValue(null); - this.display._updateCalendarHeader(); - break; - case ActionTypes$1.close: - this.display.hide(); - break; - case ActionTypes$1.today: { - const today = new DateTime().setLocalization(this.optionsStore.options.localization); - this._eventEmitters.updateViewDate.emit(today); - //todo this this really a good idea? - if (this.validation.isValid(today, exports.Unit.date)) - this.dates.setValue(today, this.dates.lastPickedIndex); - break; - } - } - } - handleShowClockContainers(action) { - if (!this.display._hasTime) { - Namespace.errorMessages.throwError('Cannot show clock containers when time is disabled.'); - /* ignore coverage: should never happen */ - return; - } - this.optionsStore.currentView = 'clock'; - this.display.widget - .querySelectorAll(`.${Namespace.css.timeContainer} > div`) - .forEach((htmlElement) => (htmlElement.style.display = 'none')); - let classToUse = ''; - switch (action) { - case ActionTypes$1.showClock: - classToUse = Namespace.css.clockContainer; - this.display._update('clock'); - break; - case ActionTypes$1.showHours: - classToUse = Namespace.css.hourContainer; - this.display._update(exports.Unit.hours); - break; - case ActionTypes$1.showMinutes: - classToUse = Namespace.css.minuteContainer; - this.display._update(exports.Unit.minutes); - break; - case ActionTypes$1.showSeconds: - classToUse = Namespace.css.secondContainer; - this.display._update(exports.Unit.seconds); - break; - } - (this.display.widget.getElementsByClassName(classToUse)[0]).style.display = 'grid'; - } - handleNextPrevious(action) { - const { unit, step } = CalendarModes[this.optionsStore.currentCalendarViewMode]; - if (action === ActionTypes$1.next) - this.optionsStore.viewDate.manipulate(step, unit); - else - this.optionsStore.viewDate.manipulate(step * -1, unit); - this._eventEmitters.viewUpdate.emit(); - this.display._showMode(); - } - /** - * After setting the value it will either show the clock or hide the widget. - * @param e - */ - hideOrClock(e) { - if (!this.optionsStore.isTwelveHour && - !this.optionsStore.options.display.components.minutes && - !this.optionsStore.options.display.keepOpen && - !this.optionsStore.options.display.inline) { - this.display.hide(); - } - else { - this.do(e, ActionTypes$1.showClock); - } - } - /** - * Common function to manipulate {@link lastPicked} by `unit`. - * @param lastPicked - * @param unit - * @param value Value to change by - */ - manipulateAndSet(lastPicked, unit, value = 1) { - const newDate = lastPicked.manipulate(value, unit); - if (this.validation.isValid(newDate, unit)) { - this.dates.setValue(newDate, this.dates.lastPickedIndex); - } - } - handleSelectCalendarMode(action, currentTarget) { - const value = +currentTarget.dataset.value; - switch (action) { - case ActionTypes$1.selectMonth: - this.optionsStore.viewDate.month = value; - break; - case ActionTypes$1.selectYear: - case ActionTypes$1.selectDecade: - this.optionsStore.viewDate.year = value; - break; - } - if (this.optionsStore.currentCalendarViewMode === - this.optionsStore.minimumCalendarViewMode) { - this.dates.setValue(this.optionsStore.viewDate, this.dates.lastPickedIndex); - if (!this.optionsStore.options.display.inline) { - this.display.hide(); - } - } - else { - this.display._showMode(-1); - } - } - handleToggle(currentTarget) { - if (currentTarget.getAttribute('title') === - this.optionsStore.options.localization.selectDate) { - currentTarget.setAttribute('title', this.optionsStore.options.localization.selectTime); - currentTarget.innerHTML = this.display._iconTag(this.optionsStore.options.display.icons.time).outerHTML; - this.display._updateCalendarHeader(); - this.optionsStore.refreshCurrentView(); - } - else { - currentTarget.setAttribute('title', this.optionsStore.options.localization.selectDate); - currentTarget.innerHTML = this.display._iconTag(this.optionsStore.options.display.icons.date).outerHTML; - if (this.display._hasTime) { - this.handleShowClockContainers(ActionTypes$1.showClock); - this.display._update('clock'); - } - } - this.display.widget - .querySelectorAll(`.${Namespace.css.dateContainer}, .${Namespace.css.timeContainer}`) - .forEach((htmlElement) => Collapse.toggle(htmlElement)); - this._eventEmitters.viewUpdate.emit(); - } - handleSelectDay(currentTarget) { - const day = this.optionsStore.viewDate.clone; - if (currentTarget.classList.contains(Namespace.css.old)) { - day.manipulate(-1, exports.Unit.month); - } - if (currentTarget.classList.contains(Namespace.css.new)) { - day.manipulate(1, exports.Unit.month); - } - day.date = +currentTarget.dataset.day; - if (this.optionsStore.options.dateRange) - this.handleDateRange(day); - else if (this.optionsStore.options.multipleDates) { - this.handleMultiDate(day); - } - else { - this.dates.setValue(day, this.dates.lastPickedIndex); - } - if (!this.display._hasTime && - !this.optionsStore.options.display.keepOpen && - !this.optionsStore.options.display.inline && - !this.optionsStore.options.multipleDates && - !this.optionsStore.options.dateRange) { - this.display.hide(); - } - } - handleMultiDate(day) { - let index = this.dates.pickedIndex(day, exports.Unit.date); - console.log(index); - if (index !== -1) { - this.dates.setValue(null, index); //deselect multi-date - } - else { - index = this.dates.lastPickedIndex + 1; - if (this.dates.picked.length === 0) - index = 0; - this.dates.setValue(day, index); - } - } - handleDateRange(day) { - switch (this.dates.picked.length) { - case 2: { - this.dates.clear(); - break; - } - case 1: { - const other = this.dates.picked[0]; - if (day.getTime() === other.getTime()) { - this.dates.clear(); - break; - } - if (day.isBefore(other)) { - this.dates.setValue(day, 0); - this.dates.setValue(other, 1); - return; - } - else { - this.dates.setValue(day, 1); - return; - } - } - } - this.dates.setValue(day, 0); - } - } - - /** - * A robust and powerful date/time picker component. - */ - class TempusDominus { - constructor(element, options = {}) { - //eslint-disable-next-line @typescript-eslint/no-explicit-any - this._subscribers = {}; - this._isDisabled = false; - /** - * Event for when the input field changes. This is a class level method so there's - * something for the remove listener function. - * @private - */ - //eslint-disable-next-line @typescript-eslint/no-explicit-any - this._inputChangeEvent = (event) => { - const internallyTriggered = event?.detail; - if (internallyTriggered) - return; - const setViewDate = () => { - if (this.dates.lastPicked) - this.optionsStore.viewDate = this.dates.lastPicked.clone; - }; - const value = this.optionsStore.input.value; - if (this.optionsStore.options.multipleDates) { - try { - const valueSplit = value.split(this.optionsStore.options.multipleDatesSeparator); - for (let i = 0; i < valueSplit.length; i++) { - this.dates.setFromInput(valueSplit[i], i); - } - setViewDate(); - } - catch { - console.warn('TD: Something went wrong trying to set the multipleDates values from the input field.'); - } - } - else { - this.dates.setFromInput(value, 0); - setViewDate(); - } - }; - /** - * Event for when the toggle is clicked. This is a class level method so there's - * something for the remove listener function. - * @private - */ - this._toggleClickEvent = () => { - if (this.optionsStore.element?.disabled || - this.optionsStore.input?.disabled) - return; - this.toggle(); - }; - setupServiceLocator(); - this._eventEmitters = serviceLocator.locate(EventEmitters); - this.optionsStore = serviceLocator.locate(OptionsStore); - this.display = serviceLocator.locate(Display); - this.dates = serviceLocator.locate(Dates); - this.actions = serviceLocator.locate(Actions); - if (!element) { - Namespace.errorMessages.mustProvideElement(); - } - this.optionsStore.element = element; - this._initializeOptions(options, DefaultOptions, true); - this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization); - this.optionsStore.unset = true; - this._initializeInput(); - this._initializeToggle(); - if (this.optionsStore.options.display.inline) - this.display.show(); - this._eventEmitters.triggerEvent.subscribe((e) => { - this._triggerEvent(e); - }); - this._eventEmitters.viewUpdate.subscribe(() => { - this._viewUpdate(); - }); - this._eventEmitters.updateViewDate.subscribe((dateTime) => { - this.viewDate = dateTime; - }); - } - get viewDate() { - return this.optionsStore.viewDate; - } - set viewDate(value) { - this.optionsStore.viewDate = value; - this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization); - this.display._update(this.optionsStore.currentView === 'clock' ? 'clock' : 'calendar'); - } - // noinspection JSUnusedGlobalSymbols - /** - * Update the picker options. If `reset` is provide `options` will be merged with DefaultOptions instead. - * @param options - * @param reset - * @public - */ - updateOptions(options, reset = false) { - if (reset) - this._initializeOptions(options, DefaultOptions); - else - this._initializeOptions(options, this.optionsStore.options); - this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization); - this.display.refreshCurrentView(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Toggles the picker open or closed. If the picker is disabled, nothing will happen. - * @public - */ - toggle() { - if (this._isDisabled) - return; - this.display.toggle(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Shows the picker unless the picker is disabled. - * @public - */ - show() { - if (this._isDisabled) - return; - this.display.show(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Hides the picker unless the picker is disabled. - * @public - */ - hide() { - this.display.hide(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Disables the picker and the target input field. - * @public - */ - disable() { - this._isDisabled = true; - // todo this might be undesired. If a dev disables the input field to - // only allow using the picker, this will break that. - this.optionsStore.input?.setAttribute('disabled', 'disabled'); - this.display.hide(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Enables the picker and the target input field. - * @public - */ - enable() { - this._isDisabled = false; - this.optionsStore.input?.removeAttribute('disabled'); - } - // noinspection JSUnusedGlobalSymbols - /** - * Clears all the selected dates - * @public - */ - clear() { - this.optionsStore.input.value = ''; - this.dates.clear(); - } - // noinspection JSUnusedGlobalSymbols - /** - * Allows for a direct subscription to picker events, without having to use addEventListener on the element. - * @param eventTypes See Namespace.Events - * @param callbacks Function to call when event is triggered - * @public - */ - subscribe(eventTypes, callbacks //eslint-disable-line @typescript-eslint/no-explicit-any - ) { - if (typeof eventTypes === 'string') { - eventTypes = [eventTypes]; - } - let callBackArray; //eslint-disable-line @typescript-eslint/no-explicit-any - if (!Array.isArray(callbacks)) { - callBackArray = [callbacks]; - } - else { - callBackArray = callbacks; - } - if (eventTypes.length !== callBackArray.length) { - Namespace.errorMessages.subscribeMismatch(); - } - const returnArray = []; - for (let i = 0; i < eventTypes.length; i++) { - const eventType = eventTypes[i]; - if (!Array.isArray(this._subscribers[eventType])) { - this._subscribers[eventType] = []; - } - this._subscribers[eventType].push(callBackArray[i]); - returnArray.push({ - unsubscribe: this._unsubscribe.bind(this, eventType, this._subscribers[eventType].length - 1), - }); - if (eventTypes.length === 1) { - return returnArray[0]; - } - } - return returnArray; - } - // noinspection JSUnusedGlobalSymbols - /** - * Hides the picker and removes event listeners - */ - dispose() { - this.display.hide(); - // this will clear the document click event listener - this.display._dispose(); - this._eventEmitters.destroy(); - this.optionsStore.input?.removeEventListener('change', this._inputChangeEvent); - if (this.optionsStore.options.allowInputToggle) { - this.optionsStore.input?.removeEventListener('click', this._toggleClickEvent); - this.optionsStore.input?.removeEventListener('focus', this._toggleClickEvent); - } - this._toggle?.removeEventListener('click', this._toggleClickEvent); - this._subscribers = {}; - } - /** - * Updates the options to use the provided language. - * THe language file must be loaded first. - * @param language - */ - locale(language) { - const asked = loadedLocales[language]; - if (!asked) - return; - this.updateOptions({ - localization: asked, - }); - } - /** - * Triggers an event like ChangeEvent when the picker has updated the value - * of a selected date. - * @param event Accepts a BaseEvent object. - * @private - */ - _triggerEvent(event) { - event.viewMode = this.optionsStore.currentView; - const isChangeEvent = event.type === Namespace.events.change; - if (isChangeEvent) { - const { date, oldDate, isClear } = event; - if ((date && oldDate && date.isSame(oldDate)) || - (!isClear && !date && !oldDate)) { - return; - } - this._handleAfterChangeEvent(event); - this.optionsStore.input?.dispatchEvent( - //eslint-disable-next-line @typescript-eslint/no-explicit-any - new CustomEvent('change', { detail: event })); - } - this.optionsStore.element.dispatchEvent( - //eslint-disable-next-line @typescript-eslint/no-explicit-any - new CustomEvent(event.type, { detail: event })); - //eslint-disable-next-line @typescript-eslint/no-explicit-any - if (window.jQuery) { - //eslint-disable-next-line @typescript-eslint/no-explicit-any - const $ = window.jQuery; - if (isChangeEvent && this.optionsStore.input) { - $(this.optionsStore.input).trigger(event); - } - else { - $(this.optionsStore.element).trigger(event); - } - } - this._publish(event); - } - _publish(event) { - // return if event is not subscribed - if (!Array.isArray(this._subscribers[event.type])) { - return; - } - // Trigger callback for each subscriber - this._subscribers[event.type].forEach((callback) => { - callback(event); - }); - } - /** - * Fires a ViewUpdate event when, for example, the month view is changed. - * @private - */ - _viewUpdate() { - this._triggerEvent({ - type: Namespace.events.update, - viewDate: this.optionsStore.viewDate.clone, - }); - } - _unsubscribe(eventName, index) { - this._subscribers[eventName].splice(index, 1); - } - /** - * Merges two Option objects together and validates options type - * @param config new Options - * @param mergeTo Options to merge into - * @param includeDataset When true, the elements data-td attributes will be included in the - * @private - */ - _initializeOptions(config, mergeTo, includeDataset = false) { - let newConfig = OptionConverter.deepCopy(config); - newConfig = OptionConverter._mergeOptions(newConfig, mergeTo); - if (includeDataset) - newConfig = OptionConverter._dataToOptions(this.optionsStore.element, newConfig); - OptionConverter._validateConflicts(newConfig); - newConfig.viewDate = newConfig.viewDate.setLocalization(newConfig.localization); - if (!this.optionsStore.viewDate.isSame(newConfig.viewDate)) { - this.optionsStore.viewDate = newConfig.viewDate; - } - /** - * Sets the minimum view allowed by the picker. For example the case of only - * allowing year and month to be selected but not date. - */ - if (newConfig.display.components.year) { - this.optionsStore.minimumCalendarViewMode = 2; - } - if (newConfig.display.components.month) { - this.optionsStore.minimumCalendarViewMode = 1; - } - if (newConfig.display.components.date) { - this.optionsStore.minimumCalendarViewMode = 0; - } - this.optionsStore.currentCalendarViewMode = Math.max(this.optionsStore.minimumCalendarViewMode, this.optionsStore.currentCalendarViewMode); - // Update view mode if needed - if (CalendarModes[this.optionsStore.currentCalendarViewMode].name !== - newConfig.display.viewMode) { - this.optionsStore.currentCalendarViewMode = Math.max(CalendarModes.findIndex((x) => x.name === newConfig.display.viewMode), this.optionsStore.minimumCalendarViewMode); - } - if (this.display?.isVisible) { - this.display._update('all'); - } - if (newConfig.display.components.useTwentyfourHour && - newConfig.localization.hourCycle === undefined) - newConfig.localization.hourCycle = 'h24'; - else if (newConfig.localization.hourCycle === undefined) { - newConfig.localization.hourCycle = guessHourCycle(newConfig.localization.locale); - } - this.optionsStore.options = newConfig; - } - /** - * Checks if an input field is being used, attempts to locate one and sets an - * event listener if found. - * @private - */ - _initializeInput() { - if (this.optionsStore.element.tagName == 'INPUT') { - this.optionsStore.input = this.optionsStore.element; - } - else { - const query = this.optionsStore.element.dataset.tdTargetInput; - if (query == undefined || query == 'nearest') { - this.optionsStore.input = - this.optionsStore.element.querySelector('input'); - } - else { - this.optionsStore.input = - this.optionsStore.element.querySelector(query); - } - } - if (!this.optionsStore.input) - return; - if (!this.optionsStore.input.value && this.optionsStore.options.defaultDate) - this.optionsStore.input.value = this.dates.formatInput(this.optionsStore.options.defaultDate); - this.optionsStore.input.addEventListener('change', this._inputChangeEvent); - if (this.optionsStore.options.allowInputToggle) { - this.optionsStore.input.addEventListener('click', this._toggleClickEvent); - this.optionsStore.input.addEventListener('focus', this._toggleClickEvent); - } - if (this.optionsStore.input.value) { - this._inputChangeEvent(); - } - } - /** - * Attempts to locate a toggle for the picker and sets an event listener - * @private - */ - _initializeToggle() { - if (this.optionsStore.options.display.inline) - return; - let query = this.optionsStore.element.dataset.tdTargetToggle; - if (query == 'nearest') { - query = '[data-td-toggle="datetimepicker"]'; - } - this._toggle = - query == undefined - ? this.optionsStore.element - : this.optionsStore.element.querySelector(query); - this._toggle.addEventListener('click', this._toggleClickEvent); - } - /** - * If the option is enabled this will render the clock view after a date pick. - * @param e change event - * @private - */ - _handleAfterChangeEvent(e) { - if ( - // options is disabled - !this.optionsStore.options.promptTimeOnDateChange || - this.optionsStore.options.multipleDates || - this.optionsStore.options.display.inline || - this.optionsStore.options.display.sideBySide || - // time is disabled - !this.display._hasTime || - // clock component is already showing - this.display.widget - ?.getElementsByClassName(Namespace.css.show)[0] - .classList.contains(Namespace.css.timeContainer)) - return; - // First time ever. If useCurrent option is set to true (default), do nothing - // because the first date is selected automatically. - // or date didn't change (time did) or date changed because time did. - if ((!e.oldDate && this.optionsStore.options.useCurrent) || - (e.oldDate && e.date?.isSame(e.oldDate))) { - return; - } - clearTimeout(this._currentPromptTimeTimeout); - this._currentPromptTimeTimeout = setTimeout(() => { - if (this.display.widget) { - this._eventEmitters.action.emit({ - e: { - currentTarget: this.display.widget.querySelector(`.${Namespace.css.switch}`), - }, - action: ActionTypes$1.togglePicker, - }); - } - }, this.optionsStore.options.promptTimeOnDateChangeTransitionDelay); - } - } - /** - * Whenever a locale is loaded via a plugin then store it here based on the - * locale name. E.g. loadedLocales['ru'] - */ - const loadedLocales = {}; - // noinspection JSUnusedGlobalSymbols - /** - * Called from a locale plugin. - * @param l locale object for localization options - */ - const loadLocale = (l) => { - if (loadedLocales[l.name]) - return; - loadedLocales[l.name] = l.localization; - }; - /** - * A sets the global localization options to the provided locale name. - * `loadLocale` MUST be called first. - * @param l - */ - const locale = (l) => { - const asked = loadedLocales[l]; - if (!asked) - return; - DefaultOptions.localization = asked; - }; - // noinspection JSUnusedGlobalSymbols - /** - * Called from a plugin to extend or override picker defaults. - * @param plugin - * @param option - */ - const extend = function (plugin, option = undefined) { - if (!plugin) - return tempusDominus; - if (!plugin.installed) { - // install plugin only once - plugin(option, { TempusDominus, Dates, Display, DateTime, Namespace }, tempusDominus); - plugin.installed = true; - } - return tempusDominus; - }; - const version = '6.7.10'; - const tempusDominus = { - TempusDominus, - extend, - loadLocale, - locale, - Namespace, - DefaultOptions, - DateTime, - Unit: exports.Unit, - version, - DefaultEnLocalization, - }; - - exports.DateTime = DateTime; - exports.DefaultEnLocalization = DefaultEnLocalization; - exports.DefaultOptions = DefaultOptions; - exports.Namespace = Namespace; - exports.TempusDominus = TempusDominus; - exports.extend = extend; - exports.loadLocale = loadLocale; - exports.locale = locale; - exports.version = version; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); -//# sourceMappingURL=tempus-dominus.js.map diff --git a/dist/js/tempus-dominus.js.map b/dist/js/tempus-dominus.js.map deleted file mode 100644 index f35d40931..000000000 --- a/dist/js/tempus-dominus.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tempus-dominus.js","sources":["../../src/js/utilities/errors.ts","../../src/js/utilities/namespace.ts","../../src/js/utilities/default-format-localization.ts","../../src/js/datetime.ts","../../src/js/utilities/service-locator.ts","../../src/js/utilities/calendar-modes.ts","../../src/js/utilities/optionsStore.ts","../../src/js/validation.ts","../../src/js/utilities/event-emitter.ts","../../src/js/utilities/default-options.ts","../../src/js/utilities/typeChecker.ts","../../src/js/utilities/optionProcessor.ts","../../src/js/utilities/optionConverter.ts","../../src/js/dates.ts","../../src/js/utilities/action-types.ts","../../src/js/display/calendar/date-display.ts","../../src/js/display/calendar/month-display.ts","../../src/js/display/calendar/year-display.ts","../../src/js/display/calendar/decade-display.ts","../../src/js/display/time/time-display.ts","../../src/js/display/time/hour-display.ts","../../src/js/display/time/minute-display.ts","../../src/js/display/time/second-display.ts","../../src/js/display/collapse.ts","../../src/js/display/index.ts","../../src/js/actions.ts","../../src/js/tempus-dominus.ts"],"sourcesContent":["export class TdError extends Error {\n code: number;\n}\n\nexport class ErrorMessages {\n private base = 'TD:';\n\n //#region out to console\n\n /**\n * Throws an error indicating that a key in the options object is invalid.\n * @param optionName\n */\n unexpectedOption(optionName: string) {\n const error = new TdError(\n `${this.base} Unexpected option: ${optionName} does not match a known option.`\n );\n error.code = 1;\n throw error;\n }\n\n /**\n * Throws an error indicating that one more keys in the options object is invalid.\n * @param optionName\n */\n unexpectedOptions(optionName: string[]) {\n const error = new TdError(`${this.base}: ${optionName.join(', ')}`);\n error.code = 1;\n throw error;\n }\n\n /**\n * Throws an error when an option is provide an unsupported value.\n * For example a value of 'cheese' for toolbarPlacement which only supports\n * 'top', 'bottom', 'default'.\n * @param optionName\n * @param badValue\n * @param validOptions\n */\n unexpectedOptionValue(\n optionName: string,\n badValue: string,\n validOptions: string[]\n ) {\n const error = new TdError(\n `${\n this.base\n } Unexpected option value: ${optionName} does not accept a value of \"${badValue}\". Valid values are: ${validOptions.join(\n ', '\n )}`\n );\n error.code = 2;\n throw error;\n }\n\n /**\n * Throws an error when an option value is the wrong type.\n * For example a string value was provided to multipleDates which only\n * supports true or false.\n * @param optionName\n * @param badType\n * @param expectedType\n */\n typeMismatch(optionName: string, badType: string, expectedType: string) {\n const error = new TdError(\n `${this.base} Mismatch types: ${optionName} has a type of ${badType} instead of the required ${expectedType}`\n );\n error.code = 3;\n throw error;\n }\n\n /**\n * Throws an error when an option value is outside of the expected range.\n * For example restrictions.daysOfWeekDisabled excepts a value between 0 and 6.\n * @param optionName\n * @param lower\n * @param upper\n */\n numbersOutOfRange(optionName: string, lower: number, upper: number) {\n const error = new TdError(\n `${this.base} ${optionName} expected an array of number between ${lower} and ${upper}.`\n );\n error.code = 4;\n throw error;\n }\n\n /**\n * Throws an error when a value for a date options couldn't be parsed. Either\n * the option was an invalid string or an invalid Date object.\n * @param optionName\n * @param date\n * @param soft If true, logs a warning instead of an error.\n */\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n failedToParseDate(optionName: string, date: any, soft = false) {\n const error = new TdError(\n `${this.base} Could not correctly parse \"${date}\" to a date for ${optionName}.`\n );\n error.code = 5;\n if (!soft) throw error;\n console.warn(error);\n }\n\n /**\n * Throws when an element to attach to was not provided in the constructor.\n */\n mustProvideElement() {\n const error = new TdError(`${this.base} No element was provided.`);\n error.code = 6;\n throw error;\n }\n\n /**\n * Throws if providing an array for the events to subscribe method doesn't have\n * the same number of callbacks. E.g., subscribe([1,2], [1])\n */\n subscribeMismatch() {\n const error = new TdError(\n `${this.base} The subscribed events does not match the number of callbacks`\n );\n error.code = 7;\n throw error;\n }\n\n /**\n * Throws if the configuration has conflicting rules e.g. minDate is after maxDate\n */\n conflictingConfiguration(message?: string) {\n const error = new TdError(\n `${this.base} A configuration value conflicts with another rule. ${message}`\n );\n error.code = 8;\n throw error;\n }\n\n /**\n * customDateFormat errors\n */\n customDateFormatError(message?: string) {\n const error = new TdError(`${this.base} Custom Date Format: ${message}`);\n error.code = 9;\n throw error;\n }\n\n /**\n * Logs a warning if a date option value is provided as a string, instead of\n * a date/datetime object.\n */\n dateString() {\n console.warn(\n `${this.base} Using a string for date options is not recommended unless you specify an ISO string or use the customDateFormat plugin.`\n );\n }\n\n deprecatedWarning(message: string, remediation?: string) {\n console.warn(\n `${this.base} Warning ${message} is deprecated and will be removed in a future version. ${remediation}`\n );\n }\n\n throwError(message) {\n const error = new TdError(`${this.base} ${message}`);\n error.code = 9;\n throw error;\n }\n\n //#endregion\n\n //#region used with notify.error\n\n /**\n * Used with an Error Event type if the user selects a date that\n * fails restriction validation.\n */\n failedToSetInvalidDate = 'Failed to set invalid date';\n\n /**\n * Used with an Error Event type when a user changes the value of the\n * input field directly, and does not provide a valid date.\n */\n failedToParseInput = 'Failed parse input field';\n\n //#endregion\n}\n","import { ErrorMessages } from './errors';\n// this is not the way I want this to stay but nested classes seemed to blown up once its compiled.\nconst NAME = 'tempus-dominus',\n dataKey = 'td';\n\n/**\n * Events\n */\nclass Events {\n key = `.${dataKey}`;\n\n /**\n * Change event. Fired when the user selects a date.\n * See also EventTypes.ChangeEvent\n */\n change = `change${this.key}`;\n\n /**\n * Emit when the view changes for example from month view to the year view.\n * See also EventTypes.ViewUpdateEvent\n */\n update = `update${this.key}`;\n\n /**\n * Emits when a selected date or value from the input field fails to meet the provided validation rules.\n * See also EventTypes.FailEvent\n */\n error = `error${this.key}`;\n\n /**\n * Show event\n * @event Events#show\n */\n show = `show${this.key}`;\n\n /**\n * Hide event\n * @event Events#hide\n */\n hide = `hide${this.key}`;\n\n // blur and focus are used in the jQuery provider but are otherwise unused.\n // keyup/down will be used later for keybinding options\n\n blur = `blur${this.key}`;\n focus = `focus${this.key}`;\n keyup = `keyup${this.key}`;\n keydown = `keydown${this.key}`;\n}\n\nclass Css {\n /**\n * The outer element for the widget.\n */\n widget = `${NAME}-widget`;\n\n /**\n * Hold the previous, next and switcher divs\n */\n calendarHeader = 'calendar-header';\n\n /**\n * The element for the action to change the calendar view. E.g. month -> year.\n */\n switch = 'picker-switch';\n\n /**\n * The elements for all the toolbar options\n */\n toolbar = 'toolbar';\n\n /**\n * Disables the hover and rounding affect.\n */\n noHighlight = 'no-highlight';\n\n /**\n * Applied to the widget element when the side by side option is in use.\n */\n sideBySide = 'timepicker-sbs';\n\n /**\n * The element for the action to change the calendar view, e.g. August -> July\n */\n previous = 'previous';\n\n /**\n * The element for the action to change the calendar view, e.g. August -> September\n */\n next = 'next';\n\n /**\n * Applied to any action that would violate any restriction options. ALso applied\n * to an input field if the disabled function is called.\n */\n disabled = 'disabled';\n\n /**\n * Applied to any date that is less than requested view,\n * e.g. the last day of the previous month.\n */\n old = 'old';\n\n /**\n * Applied to any date that is greater than of requested view,\n * e.g. the last day of the previous month.\n */\n new = 'new';\n\n /**\n * Applied to any date that is currently selected.\n */\n active = 'active';\n\n //#region date element\n\n /**\n * The outer element for the calendar view.\n */\n dateContainer = 'date-container';\n\n /**\n * The outer element for the decades view.\n */\n decadesContainer = `${this.dateContainer}-decades`;\n\n /**\n * Applied to elements within the decade container, e.g. 2020, 2030\n */\n decade = 'decade';\n\n /**\n * The outer element for the years view.\n */\n yearsContainer = `${this.dateContainer}-years`;\n\n /**\n * Applied to elements within the years container, e.g. 2021, 2021\n */\n year = 'year';\n\n /**\n * The outer element for the month view.\n */\n monthsContainer = `${this.dateContainer}-months`;\n\n /**\n * Applied to elements within the month container, e.g. January, February\n */\n month = 'month';\n\n /**\n * The outer element for the calendar view.\n */\n daysContainer = `${this.dateContainer}-days`;\n\n /**\n * Applied to elements within the day container, e.g. 1, 2..31\n */\n day = 'day';\n\n /**\n * If display.calendarWeeks is enabled, a column displaying the week of year\n * is shown. This class is applied to each cell in that column.\n */\n calendarWeeks = 'cw';\n\n /**\n * Applied to the first row of the calendar view, e.g. Sunday, Monday\n */\n dayOfTheWeek = 'dow';\n\n /**\n * Applied to the current date on the calendar view.\n */\n today = 'today';\n\n /**\n * Applied to the locale's weekend dates on the calendar view, e.g. Sunday, Saturday\n */\n weekend = 'weekend';\n\n rangeIn = 'range-in';\n rangeStart = 'range-start';\n rangeEnd = 'range-end';\n\n //#endregion\n\n //#region time element\n\n /**\n * The outer element for all time related elements.\n */\n timeContainer = 'time-container';\n\n /**\n * Applied the separator columns between time elements, e.g. hour *:* minute *:* second\n */\n separator = 'separator';\n\n /**\n * The outer element for the clock view.\n */\n clockContainer = `${this.timeContainer}-clock`;\n\n /**\n * The outer element for the hours selection view.\n */\n hourContainer = `${this.timeContainer}-hour`;\n\n /**\n * The outer element for the minutes selection view.\n */\n minuteContainer = `${this.timeContainer}-minute`;\n\n /**\n * The outer element for the seconds selection view.\n */\n secondContainer = `${this.timeContainer}-second`;\n\n /**\n * Applied to each element in the hours selection view.\n */\n hour = 'hour';\n\n /**\n * Applied to each element in the minutes selection view.\n */\n minute = 'minute';\n\n /**\n * Applied to each element in the seconds selection view.\n */\n second = 'second';\n\n /**\n * Applied AM/PM toggle button.\n */\n toggleMeridiem = 'toggleMeridiem';\n\n //#endregion\n\n //#region collapse\n\n /**\n * Applied the element of the current view mode, e.g. calendar or clock.\n */\n show = 'show';\n\n /**\n * Applied to the currently showing view mode during a transition\n * between calendar and clock views\n */\n collapsing = 'td-collapsing';\n\n /**\n * Applied to the currently hidden view mode.\n */\n collapse = 'td-collapse';\n\n //#endregion\n\n /**\n * Applied to the widget when the option display.inline is enabled.\n */\n inline = 'inline';\n\n /**\n * Applied to the widget when the option display.theme is light.\n */\n lightTheme = 'light';\n\n /**\n * Applied to the widget when the option display.theme is dark.\n */\n darkTheme = 'dark';\n\n /**\n * Used for detecting if the system color preference is dark mode\n */\n isDarkPreferredQuery = '(prefers-color-scheme: dark)';\n}\n\nexport default class Namespace {\n static NAME = NAME;\n // noinspection JSUnusedGlobalSymbols\n static dataKey = dataKey;\n\n static events = new Events();\n\n static css = new Css();\n\n static errorMessages = new ErrorMessages();\n}\n","import { FormatLocalization } from './options';\n\nconst DefaultFormatLocalization: FormatLocalization = {\n dateFormats: {\n LTS: 'h:mm:ss T',\n LT: 'h:mm T',\n L: 'MM/dd/yyyy',\n LL: 'MMMM d, yyyy',\n LLL: 'MMMM d, yyyy h:mm T',\n LLLL: 'dddd, MMMM d, yyyy h:mm T',\n },\n format: 'L LT',\n locale: 'default',\n hourCycle: undefined,\n ordinal: (n) => {\n const s = ['th', 'st', 'nd', 'rd'];\n const v = n % 100;\n return `[${n}${s[(v - 20) % 10] || s[v] || s[0]}]`;\n },\n};\n\nexport default { ...DefaultFormatLocalization };\n","import { FormatLocalization } from './utilities/options';\nimport Namespace from './utilities/namespace';\nimport DefaultFormatLocalization from './utilities/default-format-localization';\n\ntype parsedTime = {\n year?: number;\n month?: number;\n day?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n zone?: {\n offset: number;\n };\n};\n\nexport enum Unit {\n seconds = 'seconds',\n minutes = 'minutes',\n hours = 'hours',\n date = 'date',\n month = 'month',\n year = 'year',\n}\n\nconst twoDigitTemplate = {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n};\n\nexport interface DateTimeFormatOptions extends Intl.DateTimeFormatOptions {\n timeStyle?: 'short' | 'medium' | 'long';\n dateStyle?: 'short' | 'medium' | 'long' | 'full';\n numberingSystem?: string;\n}\n\n/**\n * Returns an Intl format object based on the provided object\n * @param unit\n */\nexport const getFormatByUnit = (unit: Unit): object => {\n switch (unit) {\n case 'date':\n return { dateStyle: 'short' };\n case 'month':\n return {\n month: 'numeric',\n year: 'numeric',\n };\n case 'year':\n return { year: 'numeric' };\n }\n};\n\n/**\n * Attempts to guess the hour cycle of the given local\n * @param locale\n */\nexport const guessHourCycle = (locale: string): Intl.LocaleHourCycleKey => {\n if (!locale) return 'h12';\n\n // noinspection SpellCheckingInspection\n const template = {\n hour: '2-digit',\n minute: '2-digit',\n numberingSystem: 'latn',\n };\n\n const dt = new DateTime().setLocalization({ locale });\n dt.hours = 0;\n\n const start = dt.parts(undefined, template).hour;\n\n //midnight is 12 so en-US style 12 AM\n if (start === '12') return 'h12';\n //midnight is 24 is from 00-24\n if (start === '24') return 'h24';\n\n dt.hours = 23;\n const end = dt.parts(undefined, template).hour;\n\n //if midnight is 00 and hour 23 is 11 then\n if (start === '00' && end === '11') return 'h11';\n\n if (start === '00' && end === '23') return 'h23';\n\n console.warn(\n `couldn't determine hour cycle for ${locale}. start: ${start}. end: ${end}`\n );\n\n return undefined;\n};\n\n/**\n * For the most part this object behaves exactly the same way\n * as the native Date object with a little extra spice.\n */\nexport class DateTime extends Date {\n localization: FormatLocalization = DefaultFormatLocalization;\n\n /**\n * Chainable way to set the {@link locale}\n * @param value\n * @deprecated use setLocalization with a FormatLocalization object instead\n */\n setLocale(value: string): this {\n if (!this.localization) {\n this.localization = DefaultFormatLocalization;\n this.localization.locale = value;\n }\n return this;\n }\n\n /**\n * Chainable way to set the {@link localization}\n * @param value\n */\n setLocalization(value: FormatLocalization): this {\n this.localization = value;\n return this;\n }\n\n /**\n * Converts a plain JS date object to a DateTime object.\n * Doing this allows access to format, etc.\n * @param date\n * @param locale this parameter is deprecated. Use formatLocalization instead.\n * @param formatLocalization\n */\n static convert(\n date: Date,\n locale = 'default',\n formatLocalization: FormatLocalization = undefined\n ): DateTime {\n if (!date) throw new Error(`A date is required`);\n\n if (!formatLocalization) {\n formatLocalization = DefaultFormatLocalization;\n formatLocalization.locale = locale;\n }\n\n return new DateTime(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n ).setLocalization(formatLocalization);\n }\n\n /**\n * Native date manipulations are not pure functions. This function creates a duplicate of the DateTime object.\n */\n get clone() {\n return new DateTime(\n this.year,\n this.month,\n this.date,\n this.hours,\n this.minutes,\n this.seconds,\n this.getMilliseconds()\n ).setLocalization(this.localization);\n }\n\n static isValid(d): boolean {\n if (d === undefined || JSON.stringify(d) === 'null') return false;\n if (d.constructor.name === DateTime.name) return true;\n return false;\n }\n\n /**\n * Sets the current date to the start of the {@link unit} provided\n * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).startOf('month')\n * would return April 1, 2021, 12:00:00.000 AM (midnight)\n * @param unit\n * @param startOfTheWeek Allows for the changing the start of the week.\n */\n startOf(unit: Unit | 'weekDay', startOfTheWeek = 0): this {\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n switch (unit) {\n case 'seconds':\n this.setMilliseconds(0);\n break;\n case 'minutes':\n this.setSeconds(0, 0);\n break;\n case 'hours':\n this.setMinutes(0, 0, 0);\n break;\n case 'date':\n this.setHours(0, 0, 0, 0);\n break;\n case 'weekDay': {\n this.startOf(Unit.date);\n if (this.weekDay === startOfTheWeek) break;\n const goBack = (this.weekDay - startOfTheWeek + 7) % 7;\n this.manipulate(goBack * -1, Unit.date);\n break;\n }\n case 'month':\n this.startOf(Unit.date);\n this.setDate(1);\n break;\n case 'year':\n this.startOf(Unit.date);\n this.setMonth(0, 1);\n break;\n }\n return this;\n }\n\n /**\n * Sets the current date to the end of the {@link unit} provided\n * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).endOf('month')\n * would return April 30, 2021, 11:59:59.999 PM\n * @param unit\n * @param startOfTheWeek\n */\n endOf(unit: Unit | 'weekDay', startOfTheWeek = 0): this {\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n switch (unit) {\n case 'seconds':\n this.setMilliseconds(999);\n break;\n case 'minutes':\n this.setSeconds(59, 999);\n break;\n case 'hours':\n this.setMinutes(59, 59, 999);\n break;\n case 'date':\n this.setHours(23, 59, 59, 999);\n break;\n case 'weekDay': {\n this.endOf(Unit.date);\n const endOfWeek = 6 + startOfTheWeek;\n if (this.weekDay === endOfWeek) break;\n this.manipulate(endOfWeek - this.weekDay, Unit.date);\n break;\n }\n case 'month':\n this.endOf(Unit.date);\n this.manipulate(1, Unit.month);\n this.setDate(0);\n break;\n case 'year':\n this.endOf(Unit.date);\n this.setMonth(11, 31);\n break;\n }\n return this;\n }\n\n /**\n * Change a {@link unit} value. Value can be positive or negative\n * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).manipulate(1, 'month')\n * would return May 30, 2021, 11:45:32.984 AM\n * @param value A positive or negative number\n * @param unit\n */\n manipulate(value: number, unit: Unit): this {\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n this[unit] += value;\n return this;\n }\n\n /**\n * Return true if {@link compare} is before this date\n * @param compare The Date/DateTime to compare\n * @param unit If provided, uses {@link startOf} for\n * comparison.\n */\n isBefore(compare: DateTime, unit?: Unit): boolean {\n // If the comparisons is undefined, return false\n if (!DateTime.isValid(compare)) return false;\n\n if (!unit) return this.valueOf() < compare.valueOf();\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n return (\n this.clone.startOf(unit).valueOf() < compare.clone.startOf(unit).valueOf()\n );\n }\n\n /**\n * Return true if {@link compare} is after this date\n * @param compare The Date/DateTime to compare\n * @param unit If provided, uses {@link startOf} for\n * comparison.\n */\n isAfter(compare: DateTime, unit?: Unit): boolean {\n // If the comparisons is undefined, return false\n if (!DateTime.isValid(compare)) return false;\n\n if (!unit) return this.valueOf() > compare.valueOf();\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n return (\n this.clone.startOf(unit).valueOf() > compare.clone.startOf(unit).valueOf()\n );\n }\n\n /**\n * Return true if {@link compare} is same this date\n * @param compare The Date/DateTime to compare\n * @param unit If provided, uses {@link startOf} for\n * comparison.\n */\n isSame(compare: DateTime, unit?: Unit): boolean {\n // If the comparisons is undefined, return false\n if (!DateTime.isValid(compare)) return false;\n\n if (!unit) return this.valueOf() === compare.valueOf();\n if (this[unit] === undefined)\n throw new Error(`Unit '${unit}' is not valid`);\n compare = DateTime.convert(compare);\n return (\n this.clone.startOf(unit).valueOf() === compare.startOf(unit).valueOf()\n );\n }\n\n /**\n * Check if this is between two other DateTimes, optionally looking at unit scale. The match is exclusive.\n * @param left\n * @param right\n * @param unit.\n * @param inclusivity. A [ indicates inclusion of a value. A ( indicates exclusion.\n * If the inclusivity parameter is used, both indicators must be passed.\n */\n isBetween(\n left: DateTime,\n right: DateTime,\n unit?: Unit,\n inclusivity: '()' | '[]' | '(]' | '[)' = '()'\n ): boolean {\n // If one of the comparisons is undefined, return false\n if (!DateTime.isValid(left) || !DateTime.isValid(right)) return false;\n // If a unit is provided and is not a valid property of the DateTime object, throw an error\n if (unit && this[unit] === undefined) {\n throw new Error(`Unit '${unit}' is not valid`);\n }\n\n const leftInclusivity = inclusivity[0] === '(';\n const rightInclusivity = inclusivity[1] === ')';\n\n const isLeftInRange = leftInclusivity\n ? this.isAfter(left, unit)\n : !this.isBefore(left, unit);\n const isRightInRange = rightInclusivity\n ? this.isBefore(right, unit)\n : !this.isAfter(right, unit);\n\n return isLeftInRange && isRightInRange;\n }\n\n /**\n * Returns flattened object of the date. Does not include literals\n * @param locale\n * @param template\n */\n parts(\n locale = this.localization.locale,\n template: Record = { dateStyle: 'full', timeStyle: 'long' }\n ): Record {\n const parts = {};\n new Intl.DateTimeFormat(locale, template)\n .formatToParts(this)\n .filter((x) => x.type !== 'literal')\n .forEach((x) => (parts[x.type] = x.value));\n return parts;\n }\n\n /**\n * Shortcut to Date.getSeconds()\n */\n get seconds(): number {\n return this.getSeconds();\n }\n\n /**\n * Shortcut to Date.setSeconds()\n */\n set seconds(value: number) {\n this.setSeconds(value);\n }\n\n /**\n * Returns two digit hours\n */\n get secondsFormatted(): string {\n return this.parts(undefined, twoDigitTemplate).second;\n }\n\n /**\n * Shortcut to Date.getMinutes()\n */\n get minutes(): number {\n return this.getMinutes();\n }\n\n /**\n * Shortcut to Date.setMinutes()\n */\n set minutes(value: number) {\n this.setMinutes(value);\n }\n\n /**\n * Returns two digit minutes\n */\n get minutesFormatted(): string {\n return this.parts(undefined, twoDigitTemplate).minute;\n }\n\n /**\n * Shortcut to Date.getHours()\n */\n get hours(): number {\n return this.getHours();\n }\n\n /**\n * Shortcut to Date.setHours()\n */\n set hours(value: number) {\n this.setHours(value);\n }\n\n /**\n * Returns two digit hour, e.g. 01...10\n * @param hourCycle Providing an hour cycle will change 00 to 24 depending on the given value.\n */\n getHoursFormatted(hourCycle: Intl.LocaleHourCycleKey = 'h12') {\n return this.parts(undefined, { ...twoDigitTemplate, hourCycle: hourCycle })\n .hour;\n }\n\n /**\n * Get the meridiem of the date. E.g. AM or PM.\n * If the {@link locale} provides a \"dayPeriod\" then this will be returned,\n * otherwise it will return AM or PM.\n * @param locale\n */\n meridiem(locale: string = this.localization.locale): string {\n return new Intl.DateTimeFormat(locale, {\n hour: 'numeric',\n hour12: true,\n })\n .formatToParts(this)\n .find((p) => p.type === 'dayPeriod')?.value;\n }\n\n /**\n * Shortcut to Date.getDate()\n */\n get date(): number {\n return this.getDate();\n }\n\n /**\n * Shortcut to Date.setDate()\n */\n set date(value: number) {\n this.setDate(value);\n }\n\n /**\n * Return two digit date\n */\n get dateFormatted(): string {\n return this.parts(undefined, twoDigitTemplate).day;\n }\n\n /**\n * Shortcut to Date.getDay()\n */\n get weekDay(): number {\n return this.getDay();\n }\n\n /**\n * Shortcut to Date.getMonth()\n */\n get month(): number {\n return this.getMonth();\n }\n\n /**\n * Shortcut to Date.setMonth()\n */\n set month(value: number) {\n const targetMonth = new Date(this.year, value + 1);\n targetMonth.setDate(0);\n const endOfMonth = targetMonth.getDate();\n if (this.date > endOfMonth) {\n this.date = endOfMonth;\n }\n this.setMonth(value);\n }\n\n /**\n * Return two digit, human expected month. E.g. January = 1, December = 12\n */\n get monthFormatted(): string {\n return this.parts(undefined, twoDigitTemplate).month;\n }\n\n /**\n * Shortcut to Date.getFullYear()\n */\n get year(): number {\n return this.getFullYear();\n }\n\n /**\n * Shortcut to Date.setFullYear()\n */\n set year(value: number) {\n this.setFullYear(value);\n }\n\n // borrowed a bunch of stuff from Luxon\n /**\n * Gets the week of the year\n */\n get week(): number {\n const ordinal = this.computeOrdinal(),\n weekday = this.getUTCDay();\n\n let weekNumber = Math.floor((ordinal - weekday + 10) / 7);\n\n if (weekNumber < 1) {\n weekNumber = this.weeksInWeekYear();\n } else if (weekNumber > this.weeksInWeekYear()) {\n weekNumber = 1;\n }\n\n return weekNumber;\n }\n\n /**\n * Returns the number of weeks in the year\n */\n weeksInWeekYear() {\n const p1 =\n (this.year +\n Math.floor(this.year / 4) -\n Math.floor(this.year / 100) +\n Math.floor(this.year / 400)) %\n 7,\n last = this.year - 1,\n p2 =\n (last +\n Math.floor(last / 4) -\n Math.floor(last / 100) +\n Math.floor(last / 400)) %\n 7;\n return p1 === 4 || p2 === 3 ? 53 : 52;\n }\n\n /**\n * Returns true or false depending on if the year is a leap year or not.\n */\n get isLeapYear() {\n return (\n this.year % 4 === 0 && (this.year % 100 !== 0 || this.year % 400 === 0)\n );\n }\n\n private computeOrdinal() {\n return (\n this.date +\n (this.isLeapYear ? this.leapLadder : this.nonLeapLadder)[this.month]\n );\n }\n\n private nonLeapLadder = [\n 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,\n ];\n private leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\n //#region CDF stuff\n\n private dateTimeRegex =\n //is regex cannot be simplified beyond what it already is\n /(\\[[^[\\]]*])|y{1,4}|M{1,4}|d{1,4}|H{1,2}|h{1,2}|t|T|m{1,2}|s{1,2}|f{3}/g; //NOSONAR\n\n private formattingTokens =\n /(\\[[^[\\]]*])|([-_:/.,()\\s]+)|(T|t|yyyy|yy?|MM?M?M?|Do|dd?|hh?|HH?|mm?|ss?)/g; //NOSONAR is regex cannot be simplified beyond what it already is\n\n /**\n * Returns a list of month values based on the current locale\n */\n private getAllMonths(\n format: '2-digit' | 'numeric' | 'long' | 'short' | 'narrow' = 'long'\n ) {\n const applyFormat = new Intl.DateTimeFormat(this.localization.locale, {\n month: format,\n }).format;\n return [...Array(12).keys()].map((m) => applyFormat(new Date(2021, m)));\n }\n\n /**\n * Replaces an expanded token set (e.g. LT/LTS)\n */\n private replaceTokens(formatStr, formats) {\n /***\n * _ => match\n * a => first capture group. Anything between [ and ]\n * b => second capture group\n */\n return formatStr.replace(\n /(\\[[^[\\]]*])|(LTS?|l{1,4}|L{1,4})/g,\n (_, a, b) => {\n const B = b && b.toUpperCase();\n return a || formats[B] || DefaultFormatLocalization.dateFormats[B];\n }\n );\n }\n\n private match2 = /\\d\\d/; // 00 - 99\n private match3 = /\\d{3}/; // 000 - 999\n private match4 = /\\d{4}/; // 0000 - 9999\n private match1to2 = /\\d\\d?/; // 0 - 99\n private matchSigned = /[+-]?\\d+/; // -inf - inf\n private matchOffset = /[+-]\\d\\d:?(\\d\\d)?|Z/; // +00:00 -00:00 +0000 or -0000 +00 or Z\n private matchWord = /[^\\d_:/,\\-()\\s]+/; // Word\n\n private parseTwoDigitYear(input) {\n input = +input;\n return input + (input > 68 ? 1900 : 2000);\n }\n\n private offsetFromString(string) {\n if (!string) return 0;\n if (string === 'Z') return 0;\n const [first, second, third] = string.match(/([+-]|\\d\\d)/g);\n const minutes = +(second * 60) + (+third || 0);\n const signed = first === '+' ? -minutes : minutes;\n return minutes === 0 ? 0 : signed; // eslint-disable-line no-nested-ternary\n }\n\n /**\n * z = -4, zz = -04, zzz = -0400\n * @param date\n * @param style\n * @private\n */\n private zoneInformation(date: DateTime, style: 'z' | 'zz' | 'zzz') {\n let name = date\n .parts(this.localization.locale, { timeZoneName: 'longOffset' })\n .timeZoneName.replace('GMT', '')\n .replace(':', '');\n\n const negative = name.includes('-');\n\n name = name.replace('-', '');\n\n if (style === 'z') name = name.substring(1, 2);\n else if (style === 'zz') name = name.substring(0, 2);\n\n return `${negative ? '-' : ''}${name}`;\n }\n\n private zoneExpressions = [\n this.matchOffset,\n (obj, input) => {\n obj.offset = this.offsetFromString(input);\n },\n ];\n\n private addInput(property) {\n return (time, input) => {\n time[property] = +input;\n };\n }\n\n private meridiemMatch(input) {\n const meridiem = new Intl.DateTimeFormat(this.localization.locale, {\n hour: 'numeric',\n hour12: true,\n })\n .formatToParts(new Date(2022, 3, 4, 13))\n .find((p) => p.type === 'dayPeriod')?.value;\n\n return input.toLowerCase() === meridiem.toLowerCase();\n }\n\n private expressions = {\n t: [\n this.matchWord,\n (ojb, input) => {\n ojb.afternoon = this.meridiemMatch(input);\n },\n ],\n T: [\n this.matchWord,\n (ojb, input) => {\n ojb.afternoon = this.meridiemMatch(input);\n },\n ],\n fff: [\n this.match3,\n (ojb, input) => {\n ojb.milliseconds = +input;\n },\n ],\n s: [this.match1to2, this.addInput('seconds')],\n ss: [this.match1to2, this.addInput('seconds')],\n m: [this.match1to2, this.addInput('minutes')],\n mm: [this.match1to2, this.addInput('minutes')],\n H: [this.match1to2, this.addInput('hours')],\n h: [this.match1to2, this.addInput('hours')],\n HH: [this.match1to2, this.addInput('hours')],\n hh: [this.match1to2, this.addInput('hours')],\n d: [this.match1to2, this.addInput('day')],\n dd: [this.match2, this.addInput('day')],\n Do: [\n this.matchWord,\n (ojb, input) => {\n [ojb.day] = input.match(/\\d+/);\n if (!this.localization.ordinal) return;\n for (let i = 1; i <= 31; i += 1) {\n if (this.localization.ordinal(i).replace(/[[\\]]/g, '') === input) {\n ojb.day = i;\n }\n }\n },\n ],\n M: [this.match1to2, this.addInput('month')],\n MM: [this.match2, this.addInput('month')],\n MMM: [\n this.matchWord,\n (obj, input) => {\n const months = this.getAllMonths();\n const monthsShort = this.getAllMonths('short');\n const matchIndex =\n (monthsShort || months.map((_) => _.slice(0, 3))).indexOf(input) + 1;\n if (matchIndex < 1) {\n throw new Error();\n }\n obj.month = matchIndex % 12 || matchIndex;\n },\n ],\n MMMM: [\n this.matchWord,\n (obj, input) => {\n const months = this.getAllMonths();\n const matchIndex = months.indexOf(input) + 1;\n if (matchIndex < 1) {\n throw new Error();\n }\n obj.month = matchIndex % 12 || matchIndex;\n },\n ],\n y: [this.matchSigned, this.addInput('year')],\n yy: [\n this.match2,\n (obj, input) => {\n obj.year = this.parseTwoDigitYear(input);\n },\n ],\n yyyy: [this.match4, this.addInput('year')],\n // z: this.zoneExpressions,\n // zz: this.zoneExpressions,\n // zzz: this.zoneExpressions\n };\n\n private correctHours(time) {\n const { afternoon } = time;\n if (afternoon !== undefined) {\n const { hours } = time;\n if (afternoon) {\n if (hours < 12) {\n time.hours += 12;\n }\n } else if (hours === 12) {\n time.hours = 0;\n }\n delete time.afternoon;\n }\n }\n\n private makeParser(format) {\n format = this.replaceTokens(format, this.localization.dateFormats);\n const array = format.match(this.formattingTokens);\n const { length } = array;\n for (let i = 0; i < length; i += 1) {\n const token = array[i];\n const parseTo = this.expressions[token];\n const regex = parseTo && parseTo[0];\n const parser = parseTo && parseTo[1];\n if (parser) {\n array[i] = { regex, parser };\n } else {\n array[i] = token.replace(/^\\[[^[\\]]*]$/g, '');\n }\n }\n\n return (input): parsedTime => {\n const time = {\n hours: 0,\n minutes: 0,\n seconds: 0,\n milliseconds: 0,\n };\n for (let i = 0, start = 0; i < length; i += 1) {\n const token = array[i];\n if (typeof token === 'string') {\n start += token.length;\n } else {\n const { regex, parser } = token;\n const part = input.slice(start);\n const match = regex.exec(part);\n const value = match[0];\n parser.call(this, time, value);\n input = input.replace(value, '');\n }\n }\n this.correctHours(time);\n return time;\n };\n }\n\n /**\n * Attempts to create a DateTime from a string.\n * @param input date as string\n * @param localization provides the date template the string is in via the format property\n */\n //eslint-disable-next-line @typescript-eslint/no-unused-vars\n static fromString(input: string, localization: FormatLocalization): DateTime {\n if (!localization?.format) {\n Namespace.errorMessages.customDateFormatError('No format was provided');\n }\n try {\n const dt = new DateTime();\n dt.setLocalization(localization);\n if (['x', 'X'].indexOf(localization.format) > -1)\n return new DateTime((localization.format === 'X' ? 1000 : 1) * +input);\n\n const parser = dt.makeParser(localization.format);\n const { year, month, day, hours, minutes, seconds, milliseconds, zone } =\n parser(input);\n const d = day || (!year && !month ? dt.getDate() : 1);\n const y = year || dt.getFullYear();\n let M = 0;\n if (!(year && !month)) {\n M = month > 0 ? month - 1 : dt.getMonth();\n }\n if (zone) {\n return new DateTime(\n Date.UTC(\n y,\n M,\n d,\n hours,\n minutes,\n seconds,\n milliseconds + zone.offset * 60 * 1000\n )\n );\n }\n return new DateTime(y, M, d, hours, minutes, seconds, milliseconds);\n } catch (e) {\n Namespace.errorMessages.customDateFormatError(\n `Unable to parse provided input: ${input}, format: ${localization.format}`\n );\n }\n }\n\n /**\n * Returns a string format.\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat\n * for valid templates and locale objects\n * @param template An optional object. If provided, method will use Intl., otherwise the localizations format properties\n * @param locale Can be a string or an array of strings. Uses browser defaults otherwise.\n */\n format(\n template?: DateTimeFormatOptions | string,\n locale = this.localization.locale\n ): string {\n if (template && typeof template === 'object')\n return new Intl.DateTimeFormat(locale, template).format(this);\n\n const formatString = this.replaceTokens(\n //try template first\n template ||\n //otherwise try localization format\n this.localization.format ||\n //otherwise try date + time\n `${DefaultFormatLocalization.dateFormats.L}, ${DefaultFormatLocalization.dateFormats.LT}`,\n this.localization.dateFormats\n );\n\n const formatter = (template) =>\n new Intl.DateTimeFormat(this.localization.locale, template).format(this);\n\n if (!this.localization.hourCycle)\n this.localization.hourCycle = guessHourCycle(this.localization.locale);\n\n //if the format asks for a twenty-four-hour string but the hour cycle is not, then make a base guess\n const HHCycle = this.localization.hourCycle.startsWith('h1')\n ? 'h24'\n : this.localization.hourCycle;\n const hhCycle = this.localization.hourCycle.startsWith('h2')\n ? 'h12'\n : this.localization.hourCycle;\n\n const matches = {\n yy: formatter({ year: '2-digit' }),\n yyyy: this.year,\n M: formatter({ month: 'numeric' }),\n MM: this.monthFormatted,\n MMM: this.getAllMonths('short')[this.getMonth()],\n MMMM: this.getAllMonths()[this.getMonth()],\n d: this.date,\n dd: this.dateFormatted,\n ddd: formatter({ weekday: 'short' }),\n dddd: formatter({ weekday: 'long' }),\n H: this.getHours(),\n HH: this.getHoursFormatted(HHCycle),\n h: this.hours > 12 ? this.hours - 12 : this.hours,\n hh: this.getHoursFormatted(hhCycle),\n t: this.meridiem(),\n T: this.meridiem().toUpperCase(),\n m: this.minutes,\n mm: this.minutesFormatted,\n s: this.seconds,\n ss: this.secondsFormatted,\n fff: this.getMilliseconds(),\n // z: this.zoneInformation(dateTime, 'z'), //-4\n // zz: this.zoneInformation(dateTime, 'zz'), //-04\n // zzz: this.zoneInformation(dateTime, 'zzz') //-0400\n };\n\n return formatString\n .replace(this.dateTimeRegex, (match, $1) => {\n return $1 || matches[match];\n })\n .replace(/\\[/g, '')\n .replace(/]/g, '');\n }\n\n //#endregion CDF stuff\n}\n","//eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport declare type Constructable = new (...args: any[]) => T;\n\nclass ServiceLocator {\n private cache: Map, unknown | symbol> = new Map();\n\n locate(identifier: Constructable): T {\n const service = this.cache.get(identifier);\n if (service) return service as T;\n const value = new identifier();\n this.cache.set(identifier, value);\n return value;\n }\n}\nexport const setupServiceLocator = () => {\n serviceLocator = new ServiceLocator();\n};\n\nexport let serviceLocator: ServiceLocator;\n","import { Unit } from '../datetime';\nimport Namespace from './namespace';\nimport ViewMode from './view-mode';\n\nconst CalendarModes: {\n name: keyof ViewMode;\n className: string;\n unit: Unit;\n step: number;\n}[] = [\n {\n name: 'calendar',\n className: Namespace.css.daysContainer,\n unit: Unit.month,\n step: 1,\n },\n {\n name: 'months',\n className: Namespace.css.monthsContainer,\n unit: Unit.year,\n step: 1,\n },\n {\n name: 'years',\n className: Namespace.css.yearsContainer,\n unit: Unit.year,\n step: 10,\n },\n {\n name: 'decades',\n className: Namespace.css.decadesContainer,\n unit: Unit.year,\n step: 100,\n },\n];\n\nexport default CalendarModes;\n","import { DateTime } from '../datetime';\nimport CalendarModes from './calendar-modes';\nimport ViewMode from './view-mode';\nimport Options from './options';\n\nexport class OptionsStore {\n options: Options;\n element: HTMLElement;\n input: HTMLInputElement;\n unset: boolean;\n private _currentCalendarViewMode = 0;\n\n get currentCalendarViewMode() {\n return this._currentCalendarViewMode;\n }\n\n set currentCalendarViewMode(value) {\n this._currentCalendarViewMode = value;\n this.currentView = CalendarModes[value].name;\n }\n\n _viewDate = new DateTime();\n\n get viewDate() {\n return this._viewDate;\n }\n\n set viewDate(v) {\n this._viewDate = v;\n if (this.options) this.options.viewDate = v;\n }\n\n /**\n * When switching back to the calendar from the clock,\n * this sets currentView to the correct calendar view.\n */\n refreshCurrentView() {\n this.currentView = CalendarModes[this.currentCalendarViewMode].name;\n }\n\n minimumCalendarViewMode = 0;\n currentView: keyof ViewMode = 'calendar';\n\n get isTwelveHour() {\n return ['h12', 'h11'].includes(this.options.localization.hourCycle);\n }\n}\n","import { DateTime, Unit } from './datetime';\nimport { serviceLocator } from './utilities/service-locator';\nimport { OptionsStore } from './utilities/optionsStore';\n\n/**\n * Main class for date validation rules based on the options provided.\n */\nexport default class Validation {\n private optionsStore: OptionsStore;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n }\n\n /**\n * Checks to see if the target date is valid based on the rules provided in the options.\n * Granularity can be provided to check portions of the date instead of the whole.\n * @param targetDate\n * @param granularity\n */\n isValid(targetDate: DateTime, granularity?: Unit): boolean {\n if (!this._enabledDisabledDatesIsValid(granularity, targetDate))\n return false;\n\n if (\n granularity !== Unit.month &&\n granularity !== Unit.year &&\n this.optionsStore.options.restrictions.daysOfWeekDisabled?.length > 0 &&\n this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(\n targetDate.weekDay\n ) !== -1\n )\n return false;\n\n if (!this._minMaxIsValid(granularity, targetDate)) return false;\n\n if (\n granularity === Unit.hours ||\n granularity === Unit.minutes ||\n granularity === Unit.seconds\n ) {\n if (!this._enabledDisabledHoursIsValid(targetDate)) return false;\n\n if (\n this.optionsStore.options.restrictions.disabledTimeIntervals?.filter(\n (internal) => targetDate.isBetween(internal.from, internal.to)\n ).length !== 0\n )\n return false;\n }\n\n return true;\n }\n\n private _enabledDisabledDatesIsValid(\n granularity: Unit,\n targetDate: DateTime\n ): boolean {\n if (granularity !== Unit.date) return true;\n\n if (\n this.optionsStore.options.restrictions.disabledDates.length > 0 &&\n this._isInDisabledDates(targetDate)\n ) {\n return false;\n }\n\n // noinspection RedundantIfStatementJS\n if (\n this.optionsStore.options.restrictions.enabledDates.length > 0 &&\n !this._isInEnabledDates(targetDate)\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Checks to see if the disabledDates option is in use and returns true (meaning invalid)\n * if the `testDate` is with in the array. Granularity is by date.\n * @param testDate\n * @private\n */\n private _isInDisabledDates(testDate: DateTime) {\n if (\n !this.optionsStore.options.restrictions.disabledDates ||\n this.optionsStore.options.restrictions.disabledDates.length === 0\n )\n return false;\n\n return !!this.optionsStore.options.restrictions.disabledDates.find((x) =>\n x.isSame(testDate, Unit.date)\n );\n }\n\n /**\n * Checks to see if the enabledDates option is in use and returns true (meaning valid)\n * if the `testDate` is with in the array. Granularity is by date.\n * @param testDate\n * @private\n */\n private _isInEnabledDates(testDate: DateTime) {\n if (\n !this.optionsStore.options.restrictions.enabledDates ||\n this.optionsStore.options.restrictions.enabledDates.length === 0\n )\n return true;\n\n return !!this.optionsStore.options.restrictions.enabledDates.find((x) =>\n x.isSame(testDate, Unit.date)\n );\n }\n\n private _minMaxIsValid(granularity: Unit, targetDate: DateTime) {\n if (\n this.optionsStore.options.restrictions.minDate &&\n targetDate.isBefore(\n this.optionsStore.options.restrictions.minDate,\n granularity\n )\n ) {\n return false;\n }\n\n // noinspection RedundantIfStatementJS\n if (\n this.optionsStore.options.restrictions.maxDate &&\n targetDate.isAfter(\n this.optionsStore.options.restrictions.maxDate,\n granularity\n )\n ) {\n return false;\n }\n\n return true;\n }\n\n private _enabledDisabledHoursIsValid(targetDate) {\n if (\n this.optionsStore.options.restrictions.disabledHours.length > 0 &&\n this._isInDisabledHours(targetDate)\n ) {\n return false;\n }\n\n // noinspection RedundantIfStatementJS\n if (\n this.optionsStore.options.restrictions.enabledHours.length > 0 &&\n !this._isInEnabledHours(targetDate)\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Checks to see if the disabledHours option is in use and returns true (meaning invalid)\n * if the `testDate` is with in the array. Granularity is by hours.\n * @param testDate\n * @private\n */\n private _isInDisabledHours(testDate: DateTime) {\n if (\n !this.optionsStore.options.restrictions.disabledHours ||\n this.optionsStore.options.restrictions.disabledHours.length === 0\n )\n return false;\n\n const formattedDate = testDate.hours;\n return this.optionsStore.options.restrictions.disabledHours.includes(\n formattedDate\n );\n }\n\n /**\n * Checks to see if the enabledHours option is in use and returns true (meaning valid)\n * if the `testDate` is with in the array. Granularity is by hours.\n * @param testDate\n * @private\n */\n private _isInEnabledHours(testDate: DateTime) {\n if (\n !this.optionsStore.options.restrictions.enabledHours ||\n this.optionsStore.options.restrictions.enabledHours.length === 0\n )\n return true;\n\n const formattedDate = testDate.hours;\n return this.optionsStore.options.restrictions.enabledHours.includes(\n formattedDate\n );\n }\n\n dateRangeIsValid(dates: DateTime[], index: number, target: DateTime) {\n // if we're not using the option, then return valid\n if (!this.optionsStore.options.dateRange) return true;\n\n // if we've only selected 0..1 dates, and we're not setting the end date\n // then return valid. We only want to validate the range if both are selected,\n // because the other validation on the target has already occurred.\n if (dates.length !== 2 && index !== 1) return true;\n\n // initialize start date\n const start = dates[0].clone;\n // check if start date is not the same as target date\n if (start.isSame(target, Unit.date)) return true;\n\n // add one day to start; start has already been validated\n start.manipulate(1, Unit.date);\n\n // check each date in the range to make sure it's valid\n while (!start.isSame(target, Unit.date)) {\n const valid = this.isValid(start, Unit.date);\n if (!valid) return false;\n start.manipulate(1, Unit.date);\n }\n\n return true;\n }\n}\n","import { DateTime, Unit } from '../datetime';\nimport ActionTypes from './action-types';\nimport { BaseEvent } from './event-types';\n\nexport type ViewUpdateValues = Unit | 'decade' | 'clock' | 'calendar' | 'all';\n\nclass EventEmitter {\n private subscribers: ((value?: T) => void)[] = [];\n\n subscribe(callback: (value: T) => void) {\n this.subscribers.push(callback);\n return this.unsubscribe.bind(this, this.subscribers.length - 1);\n }\n\n unsubscribe(index: number) {\n this.subscribers.splice(index, 1);\n }\n\n emit(value?: T) {\n this.subscribers.forEach((callback) => {\n callback(value);\n });\n }\n\n destroy() {\n this.subscribers = null;\n this.subscribers = [];\n }\n}\n\nexport class EventEmitters {\n triggerEvent = new EventEmitter();\n viewUpdate = new EventEmitter();\n updateDisplay = new EventEmitter();\n action = new EventEmitter<{ e: any; action?: ActionTypes }>(); //eslint-disable-line @typescript-eslint/no-explicit-any\n updateViewDate = new EventEmitter();\n\n destroy() {\n this.triggerEvent.destroy();\n this.viewUpdate.destroy();\n this.updateDisplay.destroy();\n this.action.destroy();\n this.updateViewDate.destroy();\n }\n}\n","import Options, { Localization } from './options';\nimport { DateTime } from '../datetime';\nimport DefaultFormatLocalization from './default-format-localization';\n\nconst defaultEnLocalization: Localization = {\n clear: 'Clear selection',\n close: 'Close the picker',\n dateFormats: DefaultFormatLocalization.dateFormats,\n dayViewHeaderFormat: { month: 'long', year: '2-digit' },\n decrementHour: 'Decrement Hour',\n decrementMinute: 'Decrement Minute',\n decrementSecond: 'Decrement Second',\n format: DefaultFormatLocalization.format,\n hourCycle: DefaultFormatLocalization.hourCycle,\n incrementHour: 'Increment Hour',\n incrementMinute: 'Increment Minute',\n incrementSecond: 'Increment Second',\n locale: DefaultFormatLocalization.locale,\n nextCentury: 'Next Century',\n nextDecade: 'Next Decade',\n nextMonth: 'Next Month',\n nextYear: 'Next Year',\n ordinal: DefaultFormatLocalization.ordinal,\n pickHour: 'Pick Hour',\n pickMinute: 'Pick Minute',\n pickSecond: 'Pick Second',\n previousCentury: 'Previous Century',\n previousDecade: 'Previous Decade',\n previousMonth: 'Previous Month',\n previousYear: 'Previous Year',\n selectDate: 'Select Date',\n selectDecade: 'Select Decade',\n selectMonth: 'Select Month',\n selectTime: 'Select Time',\n selectYear: 'Select Year',\n startOfTheWeek: 0,\n today: 'Go to today',\n toggleMeridiem: 'Toggle Meridiem',\n};\n\nconst DefaultOptions: Options = {\n allowInputToggle: false,\n container: undefined,\n dateRange: false,\n debug: false,\n defaultDate: undefined,\n display: {\n icons: {\n type: 'icons',\n time: 'fa-solid fa-clock',\n date: 'fa-solid fa-calendar',\n up: 'fa-solid fa-arrow-up',\n down: 'fa-solid fa-arrow-down',\n previous: 'fa-solid fa-chevron-left',\n next: 'fa-solid fa-chevron-right',\n today: 'fa-solid fa-calendar-check',\n clear: 'fa-solid fa-trash',\n close: 'fa-solid fa-xmark',\n },\n sideBySide: false,\n calendarWeeks: false,\n viewMode: 'calendar',\n toolbarPlacement: 'bottom',\n keepOpen: false,\n buttons: {\n today: false,\n clear: false,\n close: false,\n },\n components: {\n calendar: true,\n date: true,\n month: true,\n year: true,\n decades: true,\n clock: true,\n hours: true,\n minutes: true,\n seconds: false,\n useTwentyfourHour: undefined,\n },\n inline: false,\n theme: 'auto',\n placement: 'bottom',\n },\n keepInvalid: false,\n localization: defaultEnLocalization,\n meta: {},\n multipleDates: false,\n multipleDatesSeparator: '; ',\n promptTimeOnDateChange: false,\n promptTimeOnDateChangeTransitionDelay: 200,\n restrictions: {\n minDate: undefined,\n maxDate: undefined,\n disabledDates: [],\n enabledDates: [],\n daysOfWeekDisabled: [],\n disabledTimeIntervals: [],\n disabledHours: [],\n enabledHours: [],\n },\n stepping: 1,\n useCurrent: true,\n viewDate: new DateTime(),\n};\n\nexport default DefaultOptions;\nexport const DefaultEnLocalization = { ...defaultEnLocalization };\n","import Namespace from './namespace';\nimport { DateTime } from '../datetime';\nimport { FormatLocalization } from './options';\nimport DefaultFormatLocalization from './default-format-localization';\n\n/**\n * Attempts to prove `d` is a DateTime or Date or can be converted into one.\n * @param d If a string will attempt creating a date from it.\n * @param localization object containing locale and format settings. Only used with the custom formats\n * @private\n */\nexport function tryConvertToDateTime(\n this: void,\n d: DateTime | Date | string,\n localization: FormatLocalization\n): DateTime | null {\n if (!d) return null;\n if (d.constructor.name === DateTime.name) return d as DateTime;\n if (d.constructor.name === Date.name) {\n return DateTime.convert(d as Date);\n }\n if (typeof d === typeof '') {\n const dateTime = DateTime.fromString(d as unknown as string, localization);\n if (JSON.stringify(dateTime) === 'null') {\n return null;\n }\n return dateTime;\n }\n return null;\n}\n\n/**\n * Attempts to convert `d` to a DateTime object\n * @param d value to convert\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param localization object containing locale and format settings. Only used with the custom formats\n */\nexport function convertToDateTime(\n this: void,\n d: DateTime | Date | string,\n optionName: string,\n localization: FormatLocalization\n): DateTime {\n if (typeof d === typeof '' && optionName !== 'input') {\n Namespace.errorMessages.dateString();\n }\n\n const converted = tryConvertToDateTime(d, localization);\n\n if (!converted) {\n Namespace.errorMessages.failedToParseDate(\n optionName,\n d,\n optionName === 'input'\n );\n }\n return converted;\n}\n\n/**\n * Type checks that `value` is an array of Date or DateTime\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n * @param localization\n */\nexport function typeCheckDateArray(\n this: void,\n optionName: string,\n value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n providedType: string,\n localization: FormatLocalization = DefaultFormatLocalization\n) {\n if (!Array.isArray(value)) {\n Namespace.errorMessages.typeMismatch(\n optionName,\n providedType,\n 'array of DateTime or Date'\n );\n }\n for (let i = 0; i < value.length; i++) {\n const d = value[i];\n const dateTime = convertToDateTime(d, optionName, localization);\n dateTime.setLocalization(localization);\n value[i] = dateTime;\n }\n}\n\n/**\n * Type checks that `value` is an array of numbers\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n */\nexport function typeCheckNumberArray(\n this: void,\n optionName: string,\n value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n providedType: string\n) {\n if (!Array.isArray(value) || value.some((x) => typeof x !== typeof 0)) {\n Namespace.errorMessages.typeMismatch(\n optionName,\n providedType,\n 'array of numbers'\n );\n }\n}\n","import Namespace from './namespace';\nimport type { FormatLocalization } from './options';\nimport {\n convertToDateTime,\n typeCheckNumberArray,\n typeCheckDateArray,\n} from './typeChecker';\n\ninterface OptionProcessorFunctionArguments {\n key: string;\n value: any; //eslint-disable-line @typescript-eslint/no-explicit-any\n providedType: string;\n defaultType: string;\n path: string;\n localization: FormatLocalization;\n}\n\ntype OptionProcessorFunction = (\n this: void,\n args: OptionProcessorFunctionArguments\n) => any; //eslint-disable-line @typescript-eslint/no-explicit-any\n\nfunction mandatoryDate(key: string): OptionProcessorFunction {\n return ({ value, providedType, localization }) => {\n const dateTime = convertToDateTime(value, key, localization);\n if (dateTime !== undefined) {\n dateTime.setLocalization(localization);\n return dateTime;\n }\n };\n}\n\nfunction optionalDate(key: string): OptionProcessorFunction {\n const mandatory = mandatoryDate(key);\n return (args) => {\n if (args.value === undefined) {\n return args.value;\n }\n return mandatory(args);\n };\n}\n\nfunction numbersInRange(\n key: string,\n lower: number,\n upper: number\n): OptionProcessorFunction {\n return ({ value, providedType }) => {\n if (value === undefined) {\n return [];\n }\n typeCheckNumberArray(key, value, providedType);\n if ((value as number[]).some((x) => x < lower || x > upper))\n Namespace.errorMessages.numbersOutOfRange(key, lower, upper);\n return value;\n };\n}\n\nfunction validHourRange(key: string): OptionProcessorFunction {\n return numbersInRange(key, 0, 23);\n}\n\nfunction validDateArray(key: string): OptionProcessorFunction {\n return ({ value, providedType, localization }) => {\n if (value === undefined) {\n return [];\n }\n typeCheckDateArray(key, value, providedType, localization);\n return value;\n };\n}\n\nfunction validKeyOption(keyOptions: string[]): OptionProcessorFunction {\n return ({ value, path }) => {\n if (!keyOptions.includes(value))\n Namespace.errorMessages.unexpectedOptionValue(\n path.substring(1),\n value,\n keyOptions\n );\n return value;\n };\n}\n\nconst optionProcessors: { [key: string]: OptionProcessorFunction } =\n Object.freeze({\n defaultDate: mandatoryDate('defaultDate'),\n viewDate: mandatoryDate('viewDate'),\n minDate: optionalDate('restrictions.minDate'),\n maxDate: optionalDate('restrictions.maxDate'),\n disabledHours: validHourRange('restrictions.disabledHours'),\n enabledHours: validHourRange('restrictions.enabledHours'),\n disabledDates: validDateArray('restrictions.disabledDates'),\n enabledDates: validDateArray('restrictions.enabledDates'),\n daysOfWeekDisabled: numbersInRange('restrictions.daysOfWeekDisabled', 0, 6),\n disabledTimeIntervals: ({ key, value, providedType, localization }) => {\n if (value === undefined) {\n return [];\n }\n if (!Array.isArray(value)) {\n Namespace.errorMessages.typeMismatch(\n key,\n providedType,\n 'array of { from: DateTime|Date, to: DateTime|Date }'\n );\n }\n const valueObject = value as { from: any; to: any }[]; //eslint-disable-line @typescript-eslint/no-explicit-any\n for (let i = 0; i < valueObject.length; i++) {\n Object.keys(valueObject[i]).forEach((vk) => {\n const subOptionName = `${key}[${i}].${vk}`;\n const d = valueObject[i][vk];\n const dateTime = convertToDateTime(d, subOptionName, localization);\n dateTime.setLocalization(localization);\n valueObject[i][vk] = dateTime;\n });\n }\n return valueObject;\n },\n toolbarPlacement: validKeyOption(['top', 'bottom', 'default']),\n type: validKeyOption(['icons', 'sprites']),\n viewMode: validKeyOption([\n 'clock',\n 'calendar',\n 'months',\n 'years',\n 'decades',\n ]),\n theme: validKeyOption(['light', 'dark', 'auto']),\n placement: validKeyOption(['top', 'bottom']),\n meta: ({ value }) => value,\n dayViewHeaderFormat: ({ value }) => value,\n container: ({ value, path }) => {\n if (\n value &&\n !(\n value instanceof HTMLElement ||\n value instanceof Element ||\n value?.appendChild\n )\n ) {\n Namespace.errorMessages.typeMismatch(\n path.substring(1),\n typeof value,\n 'HTMLElement'\n );\n }\n return value;\n },\n useTwentyfourHour: ({ value, path, providedType, defaultType }) => {\n Namespace.errorMessages.deprecatedWarning(\n 'useTwentyfourHour',\n 'Please use \"options.localization.hourCycle\" instead'\n );\n if (value === undefined || providedType === 'boolean') return value;\n Namespace.errorMessages.typeMismatch(path, providedType, defaultType);\n },\n hourCycle: validKeyOption(['h11', 'h12', 'h23', 'h24']),\n });\n\nconst defaultProcessor: OptionProcessorFunction = ({\n value,\n defaultType,\n providedType,\n path,\n}) => {\n switch (defaultType) {\n case 'boolean':\n return value === 'true' || value === true;\n case 'number':\n return +value;\n case 'string':\n return value.toString();\n case 'object':\n return {};\n case 'function':\n return value;\n default:\n Namespace.errorMessages.typeMismatch(path, providedType, defaultType);\n }\n};\n\nexport function processKey(this: void, args: OptionProcessorFunctionArguments) {\n return (optionProcessors[args.key] || defaultProcessor)(args);\n}\n","import Namespace from './namespace';\nimport { DateTime } from '../datetime';\nimport DefaultOptions from './default-options';\nimport Options, { FormatLocalization } from './options';\nimport { processKey } from './optionProcessor';\nimport {\n convertToDateTime,\n tryConvertToDateTime,\n typeCheckDateArray,\n typeCheckNumberArray,\n} from './typeChecker';\n\nexport class OptionConverter {\n private static ignoreProperties = [\n 'meta',\n 'dayViewHeaderFormat',\n 'container',\n 'dateForms',\n 'ordinal',\n ];\n\n static deepCopy(input): Options {\n const o = {};\n\n Object.keys(input).forEach((key) => {\n const inputElement = input[key];\n\n if (inputElement instanceof DateTime) {\n o[key] = inputElement.clone;\n return;\n } else if (inputElement instanceof Date) {\n o[key] = new Date(inputElement.valueOf());\n return;\n }\n\n o[key] = inputElement;\n if (\n typeof inputElement !== 'object' ||\n inputElement instanceof HTMLElement ||\n inputElement instanceof Element\n )\n return;\n if (!Array.isArray(inputElement)) {\n o[key] = OptionConverter.deepCopy(inputElement);\n }\n });\n\n return o;\n }\n\n private static isValue = (a) => a != null; // everything except undefined + null\n\n /**\n * Finds value out of an object based on a string, period delimited, path\n * @param paths\n * @param obj\n */\n static objectPath(paths: string, obj) {\n if (paths.charAt(0) === '.') paths = paths.slice(1);\n if (!paths) return obj;\n return paths\n .split('.')\n .reduce(\n (value, key) =>\n OptionConverter.isValue(value) || OptionConverter.isValue(value[key])\n ? value[key]\n : undefined,\n obj\n );\n }\n\n /**\n * The spread operator caused sub keys to be missing after merging.\n * This is to fix that issue by using spread on the child objects first.\n * Also handles complex options like disabledDates\n * @param provided An option from new providedOptions\n * @param copyTo Destination object. This was added to prevent reference copies\n * @param localization\n * @param path\n */\n static spread(provided, copyTo, localization: FormatLocalization, path = '') {\n const defaultOptions = OptionConverter.objectPath(path, DefaultOptions);\n\n const unsupportedOptions = Object.keys(provided).filter(\n (x) => !Object.keys(defaultOptions).includes(x)\n );\n\n if (unsupportedOptions.length > 0) {\n const flattenedOptions = OptionConverter.getFlattenDefaultOptions();\n\n const errors = unsupportedOptions.map((x) => {\n let error = `\"${path}.${x}\" in not a known option.`;\n const didYouMean = flattenedOptions.find((y) => y.includes(x));\n if (didYouMean) error += ` Did you mean \"${didYouMean}\"?`;\n return error;\n });\n Namespace.errorMessages.unexpectedOptions(errors);\n }\n\n Object.keys(provided)\n .filter((key) => key !== '__proto__' && key !== 'constructor')\n .forEach((key) => {\n path += `.${key}`;\n if (path.charAt(0) === '.') path = path.slice(1);\n\n const defaultOptionValue = defaultOptions[key];\n const providedType = typeof provided[key];\n const defaultType = typeof defaultOptionValue;\n const value = provided[key];\n\n if (value === undefined || value === null) {\n copyTo[key] = value;\n path = path.substring(0, path.lastIndexOf(`.${key}`));\n return;\n }\n\n if (\n typeof defaultOptionValue === 'object' &&\n !Array.isArray(provided[key]) &&\n !(\n defaultOptionValue instanceof Date ||\n OptionConverter.ignoreProperties.includes(key)\n )\n ) {\n OptionConverter.spread(\n provided[key],\n copyTo[key],\n localization,\n path\n );\n } else {\n copyTo[key] = OptionConverter.processKey(\n key,\n value,\n providedType,\n defaultType,\n path,\n localization\n );\n }\n\n path = path.substring(0, path.lastIndexOf(`.${key}`));\n });\n }\n\n static processKey(\n key: string,\n value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n providedType: string,\n defaultType: string,\n path: string,\n localization: FormatLocalization\n ) {\n return processKey({\n key,\n value,\n providedType,\n defaultType,\n path,\n localization,\n });\n }\n\n static _mergeOptions(providedOptions: Options, mergeTo: Options): Options {\n const newConfig = OptionConverter.deepCopy(mergeTo);\n //see if the options specify a locale\n const localization =\n mergeTo.localization?.locale !== 'default'\n ? mergeTo.localization\n : providedOptions?.localization || DefaultOptions.localization;\n\n OptionConverter.spread(providedOptions, newConfig, localization, '');\n\n return newConfig;\n }\n\n static _dataToOptions(element, options: Options): Options {\n const eData = JSON.parse(JSON.stringify(element.dataset));\n\n if (eData?.tdTargetInput) delete eData.tdTargetInput;\n if (eData?.tdTargetToggle) delete eData.tdTargetToggle;\n\n if (\n !eData ||\n Object.keys(eData).length === 0 ||\n eData.constructor !== DOMStringMap\n )\n return options;\n const dataOptions = {} as Options;\n\n // because dataset returns camelCase including the 'td' key the option\n // key won't align\n const objectToNormalized = (object) => {\n const lowered = {};\n Object.keys(object).forEach((x) => {\n lowered[x.toLowerCase()] = x;\n });\n\n return lowered;\n };\n\n const normalizeObject = this.normalizeObject(objectToNormalized);\n const optionsLower = objectToNormalized(options);\n\n Object.keys(eData)\n .filter((x) => x.startsWith(Namespace.dataKey))\n .map((x) => x.substring(2))\n .forEach((key) => {\n let keyOption = optionsLower[key.toLowerCase()];\n\n // dataset merges dashes to camelCase... yay\n // i.e. key = display_components_seconds\n if (key.includes('_')) {\n // [display, components, seconds]\n const split = key.split('_');\n // display\n keyOption = optionsLower[split[0].toLowerCase()];\n if (\n keyOption !== undefined &&\n options[keyOption].constructor === Object\n ) {\n dataOptions[keyOption] = normalizeObject(\n split,\n 1,\n options[keyOption],\n eData[`td${key}`]\n );\n }\n }\n // or key = multipleDate\n else if (keyOption !== undefined) {\n dataOptions[keyOption] = eData[`td${key}`];\n }\n });\n\n return this._mergeOptions(dataOptions, options);\n }\n\n //todo clean this up\n private static normalizeObject(objectToNormalized: (object) => object) {\n const normalizeObject = (\n split: string[],\n index: number,\n optionSubgroup: unknown,\n value: unknown\n ) => {\n // first round = display { ... }\n const normalizedOptions = objectToNormalized(optionSubgroup);\n\n const keyOption = normalizedOptions[split[index].toLowerCase()];\n const internalObject = {};\n\n if (keyOption === undefined) return internalObject;\n\n // if this is another object, continue down the rabbit hole\n if (optionSubgroup[keyOption].constructor === Object) {\n index++;\n internalObject[keyOption] = normalizeObject(\n split,\n index,\n optionSubgroup[keyOption],\n value\n );\n } else {\n internalObject[keyOption] = value;\n }\n return internalObject;\n };\n return normalizeObject;\n }\n\n /**\n * Attempts to prove `d` is a DateTime or Date or can be converted into one.\n * @param d If a string will attempt creating a date from it.\n * @param localization object containing locale and format settings. Only used with the custom formats\n * @private\n */\n static _dateTypeCheck(\n d: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n localization: FormatLocalization\n ): DateTime | null {\n return tryConvertToDateTime(d, localization);\n }\n\n /**\n * Type checks that `value` is an array of Date or DateTime\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n * @param localization\n */\n static _typeCheckDateArray(\n optionName: string,\n value,\n providedType: string,\n localization: FormatLocalization\n ) {\n return typeCheckDateArray(optionName, value, providedType, localization);\n }\n\n /**\n * Type checks that `value` is an array of numbers\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n */\n static _typeCheckNumberArray(\n optionName: string,\n value,\n providedType: string\n ) {\n return typeCheckNumberArray(optionName, value, providedType);\n }\n\n /**\n * Attempts to convert `d` to a DateTime object\n * @param d value to convert\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param localization object containing locale and format settings. Only used with the custom formats\n */\n static dateConversion(\n d: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n optionName: string,\n localization: FormatLocalization\n ): DateTime {\n return convertToDateTime(d, optionName, localization);\n }\n\n private static _flattenDefaults: string[];\n\n private static getFlattenDefaultOptions(): string[] {\n if (this._flattenDefaults) return this._flattenDefaults;\n const deepKeys = (t, pre = []) => {\n if (Array.isArray(t)) return [];\n if (Object(t) === t) {\n return Object.entries(t).flatMap(([k, v]) => deepKeys(v, [...pre, k]));\n } else {\n return pre.join('.');\n }\n };\n\n this._flattenDefaults = deepKeys(DefaultOptions);\n\n return this._flattenDefaults;\n }\n\n /**\n * Some options conflict like min/max date. Verify that these kinds of options\n * are set correctly.\n * @param config\n */\n static _validateConflicts(config: Options) {\n if (\n config.display.sideBySide &&\n (!config.display.components.clock ||\n !(\n config.display.components.hours ||\n config.display.components.minutes ||\n config.display.components.seconds\n ))\n ) {\n Namespace.errorMessages.conflictingConfiguration(\n 'Cannot use side by side mode without the clock components'\n );\n }\n\n if (config.restrictions.minDate && config.restrictions.maxDate) {\n if (config.restrictions.minDate.isAfter(config.restrictions.maxDate)) {\n Namespace.errorMessages.conflictingConfiguration(\n 'minDate is after maxDate'\n );\n }\n\n if (config.restrictions.maxDate.isBefore(config.restrictions.minDate)) {\n Namespace.errorMessages.conflictingConfiguration(\n 'maxDate is before minDate'\n );\n }\n }\n\n if (config.multipleDates && config.dateRange) {\n Namespace.errorMessages.conflictingConfiguration(\n 'Cannot uss option \"multipleDates\" with \"dateRange\"'\n );\n }\n }\n}\n","import { DateTime, getFormatByUnit, Unit } from './datetime';\nimport Namespace from './utilities/namespace';\nimport { ChangeEvent, FailEvent } from './utilities/event-types';\nimport Validation from './validation';\nimport { serviceLocator } from './utilities/service-locator';\nimport { EventEmitters } from './utilities/event-emitter';\nimport { OptionsStore } from './utilities/optionsStore';\nimport { OptionConverter } from './utilities/optionConverter';\n\nexport default class Dates {\n private _dates: DateTime[] = [];\n private optionsStore: OptionsStore;\n private validation: Validation;\n private _eventEmitters: EventEmitters;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n this._eventEmitters = serviceLocator.locate(EventEmitters);\n }\n\n /**\n * Returns the array of selected dates\n */\n get picked(): DateTime[] {\n return [...this._dates];\n }\n\n /**\n * Returns the last picked value.\n */\n get lastPicked(): DateTime {\n return this._dates[this.lastPickedIndex]?.clone;\n }\n\n /**\n * Returns the length of picked dates -1 or 0 if none are selected.\n */\n get lastPickedIndex(): number {\n if (this._dates.length === 0) return 0;\n return this._dates.length - 1;\n }\n\n /**\n * Formats a DateTime object to a string. Used when setting the input value.\n * @param date\n */\n formatInput(date: DateTime): string {\n if (!date) return '';\n date.localization = this.optionsStore.options.localization;\n return date.format();\n }\n\n /**\n * parse the value into a DateTime object.\n * this can be overwritten to supply your own parsing.\n */\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n parseInput(value: any): DateTime {\n return OptionConverter.dateConversion(\n value,\n 'input',\n this.optionsStore.options.localization\n );\n }\n\n /**\n * Tries to convert the provided value to a DateTime object.\n * If value is null|undefined then clear the value of the provided index (or 0).\n * @param value Value to convert or null|undefined\n * @param index When using multidates this is the index in the array\n */\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n setFromInput(value: any, index?: number) {\n if (!value) {\n this.setValue(undefined, index);\n return;\n }\n const converted = this.parseInput(value);\n if (converted) {\n converted.setLocalization(this.optionsStore.options.localization);\n this.setValue(converted, index);\n }\n }\n\n /**\n * Adds a new DateTime to selected dates array\n * @param date\n */\n add(date: DateTime): void {\n this._dates.push(date);\n }\n\n /**\n * Returns true if the `targetDate` is part of the selected dates array.\n * If `unit` is provided then a granularity to that unit will be used.\n * @param targetDate\n * @param unit\n */\n isPicked(targetDate: DateTime, unit?: Unit): boolean {\n if (!DateTime.isValid(targetDate)) return false;\n if (!unit)\n return this._dates.find((x) => x.isSame(targetDate)) !== undefined;\n\n const format = getFormatByUnit(unit);\n\n const innerDateFormatted = targetDate.format(format);\n\n return (\n this._dates\n .map((x) => x.format(format))\n .find((x) => x === innerDateFormatted) !== undefined\n );\n }\n\n /**\n * Returns the index at which `targetDate` is in the array.\n * This is used for updating or removing a date when multi-date is used\n * If `unit` is provided then a granularity to that unit will be used.\n * @param targetDate\n * @param unit\n */\n pickedIndex(targetDate: DateTime, unit?: Unit): number {\n if (!DateTime.isValid(targetDate)) return -1;\n if (!unit)\n return this._dates.map((x) => x.valueOf()).indexOf(targetDate.valueOf());\n\n const format = getFormatByUnit(unit);\n\n const innerDateFormatted = targetDate.format(format);\n\n return this._dates.map((x) => x.format(format)).indexOf(innerDateFormatted);\n }\n\n /**\n * Clears all selected dates.\n */\n clear() {\n this.optionsStore.unset = true;\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.change,\n date: undefined,\n oldDate: this.lastPicked,\n isClear: true,\n isValid: true,\n } as ChangeEvent);\n this._dates = [];\n if (this.optionsStore.input) this.optionsStore.input.value = '';\n this._eventEmitters.updateDisplay.emit('all');\n }\n\n /**\n * Find the \"book end\" years given a `year` and a `factor`\n * @param factor e.g. 100 for decades\n * @param year e.g. 2021\n */\n static getStartEndYear(\n factor: number,\n year: number\n ): [number, number, number] {\n const step = factor / 10,\n startYear = Math.floor(year / factor) * factor,\n endYear = startYear + step * 9,\n focusValue = Math.floor(year / step) * step;\n return [startYear, endYear, focusValue];\n }\n\n updateInput(target?: DateTime) {\n if (!this.optionsStore.input) return;\n\n let newValue = this.formatInput(target);\n if (\n this.optionsStore.options.multipleDates ||\n this.optionsStore.options.dateRange\n ) {\n newValue = this._dates\n .map((d) => this.formatInput(d))\n .join(this.optionsStore.options.multipleDatesSeparator);\n }\n if (this.optionsStore.input.value != newValue)\n this.optionsStore.input.value = newValue;\n }\n\n /**\n * Attempts to either clear or set the `target` date at `index`.\n * If the `target` is null then the date will be cleared.\n * If multi-date is being used then it will be removed from the array.\n * If `target` is valid and multi-date is used then if `index` is\n * provided the date at that index will be replaced, otherwise it is appended.\n * @param target\n * @param index\n */\n setValue(target?: DateTime, index?: number): void {\n const noIndex = typeof index === 'undefined',\n isClear = !target && noIndex;\n let oldDate = this.optionsStore.unset ? null : this._dates[index]?.clone;\n if (!oldDate && !this.optionsStore.unset && noIndex && isClear) {\n oldDate = this.lastPicked;\n }\n\n if (target && oldDate?.isSame(target)) {\n this.updateInput(target);\n return;\n }\n\n // case of calling setValue(null)\n if (!target) {\n this._setValueNull(isClear, index, oldDate);\n return;\n }\n\n index = index || 0;\n target = target.clone;\n\n // minute stepping is being used, force the minute to the closest value\n if (this.optionsStore.options.stepping !== 1) {\n target.minutes =\n Math.round(target.minutes / this.optionsStore.options.stepping) *\n this.optionsStore.options.stepping;\n target.startOf(Unit.minutes);\n }\n\n const onUpdate = (isValid: boolean) => {\n this._dates[index] = target;\n this._eventEmitters.updateViewDate.emit(target.clone);\n\n this.updateInput(target);\n\n this.optionsStore.unset = false;\n this._eventEmitters.updateDisplay.emit('all');\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.change,\n date: target,\n oldDate,\n isClear,\n isValid: isValid,\n } as ChangeEvent);\n };\n\n if (\n this.validation.isValid(target) &&\n this.validation.dateRangeIsValid(this.picked, index, target)\n ) {\n onUpdate(true);\n return;\n }\n\n if (this.optionsStore.options.keepInvalid) {\n onUpdate(false);\n }\n\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.error,\n reason: Namespace.errorMessages.failedToSetInvalidDate,\n date: target,\n oldDate,\n } as FailEvent);\n }\n\n private _setValueNull(isClear: boolean, index: number, oldDate: DateTime) {\n if (\n !this.optionsStore.options.multipleDates ||\n this._dates.length === 1 ||\n isClear\n ) {\n this.optionsStore.unset = true;\n this._dates = [];\n } else {\n this._dates.splice(index, 1);\n }\n\n this.updateInput();\n\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.change,\n date: undefined,\n oldDate,\n isClear,\n isValid: true,\n } as ChangeEvent);\n\n this._eventEmitters.updateDisplay.emit('all');\n }\n}\n","enum ActionTypes {\n next = 'next',\n previous = 'previous',\n changeCalendarView = 'changeCalendarView',\n selectMonth = 'selectMonth',\n selectYear = 'selectYear',\n selectDecade = 'selectDecade',\n selectDay = 'selectDay',\n selectHour = 'selectHour',\n selectMinute = 'selectMinute',\n selectSecond = 'selectSecond',\n incrementHours = 'incrementHours',\n incrementMinutes = 'incrementMinutes',\n incrementSeconds = 'incrementSeconds',\n decrementHours = 'decrementHours',\n decrementMinutes = 'decrementMinutes',\n decrementSeconds = 'decrementSeconds',\n toggleMeridiem = 'toggleMeridiem',\n togglePicker = 'togglePicker',\n showClock = 'showClock',\n showHours = 'showHours',\n showMinutes = 'showMinutes',\n showSeconds = 'showSeconds',\n clear = 'clear',\n close = 'close',\n today = 'today',\n}\n\nexport default ActionTypes;\n","import { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `date`\n */\nexport default class DateDisplay {\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.daysContainer);\n\n container.append(...this._daysOfTheWeek());\n\n if (this.optionsStore.options.display.calendarWeeks) {\n const div = document.createElement('div');\n div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight);\n container.appendChild(div);\n }\n\n const { rangeHoverEvent, rangeHoverOutEvent } =\n this.handleMouseEvents(container);\n\n for (let i = 0; i < 42; i++) {\n if (i !== 0 && i % 7 === 0) {\n if (this.optionsStore.options.display.calendarWeeks) {\n const div = document.createElement('div');\n div.classList.add(\n Namespace.css.calendarWeeks,\n Namespace.css.noHighlight\n );\n container.appendChild(div);\n }\n }\n\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectDay);\n container.appendChild(div);\n\n // if hover is supported then add the events\n if (\n matchMedia('(hover: hover)').matches &&\n this.optionsStore.options.dateRange\n ) {\n div.addEventListener('mouseover', rangeHoverEvent);\n div.addEventListener('mouseout', rangeHoverOutEvent);\n }\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.daysContainer\n )[0] as HTMLElement;\n\n this._updateCalendarView(container);\n\n const innerDate = this.optionsStore.viewDate.clone\n .startOf(Unit.month)\n .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek)\n .manipulate(12, Unit.hours);\n\n this._handleCalendarWeeks(container, innerDate.clone);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectDay}\"]`)\n .forEach((element: HTMLElement) => {\n const classes: string[] = [];\n classes.push(Namespace.css.day);\n\n if (innerDate.isBefore(this.optionsStore.viewDate, Unit.month)) {\n classes.push(Namespace.css.old);\n }\n if (innerDate.isAfter(this.optionsStore.viewDate, Unit.month)) {\n classes.push(Namespace.css.new);\n }\n\n if (\n !this.optionsStore.unset &&\n !this.optionsStore.options.dateRange &&\n this.dates.isPicked(innerDate, Unit.date)\n ) {\n classes.push(Namespace.css.active);\n }\n if (!this.validation.isValid(innerDate, Unit.date)) {\n classes.push(Namespace.css.disabled);\n }\n if (innerDate.isSame(new DateTime(), Unit.date)) {\n classes.push(Namespace.css.today);\n }\n if (innerDate.weekDay === 0 || innerDate.weekDay === 6) {\n classes.push(Namespace.css.weekend);\n }\n\n this._handleDateRange(innerDate, classes);\n\n paint(Unit.date, innerDate, classes, element);\n\n element.classList.remove(...element.classList);\n element.classList.add(...classes);\n element.setAttribute('data-value', this._dateToDataValue(innerDate));\n element.setAttribute('data-day', `${innerDate.date}`);\n element.innerText = innerDate.parts(undefined, {\n day: 'numeric',\n }).day;\n innerDate.manipulate(1, Unit.date);\n });\n }\n\n private _dateToDataValue(date: DateTime): string {\n if (!DateTime.isValid(date)) return '';\n\n return `${date.year}-${date.monthFormatted}-${date.dateFormatted}`;\n }\n\n private _handleDateRange(innerDate: DateTime, classes: string[]) {\n const rangeStart = this.dates.picked[0];\n const rangeEnd = this.dates.picked[1];\n\n if (this.optionsStore.options.dateRange) {\n if (innerDate.isBetween(rangeStart, rangeEnd, Unit.date)) {\n classes.push(Namespace.css.rangeIn);\n }\n\n if (innerDate.isSame(rangeStart, Unit.date)) {\n classes.push(Namespace.css.rangeStart);\n }\n\n if (innerDate.isSame(rangeEnd, Unit.date)) {\n classes.push(Namespace.css.rangeEnd);\n }\n }\n }\n\n private handleMouseEvents(container: HTMLElement) {\n const rangeHoverEvent = (e: MouseEvent) => {\n const currentTarget = e?.currentTarget as HTMLElement;\n\n // if we have 0 or 2 selected or if the target is disabled then ignore\n if (\n this.dates.picked.length !== 1 ||\n currentTarget.classList.contains(Namespace.css.disabled)\n )\n return;\n\n // select all the date divs\n const allDays = [...container.querySelectorAll('.day')] as HTMLElement[];\n\n // get the date value from the element being hovered over\n const attributeValue = currentTarget.getAttribute('data-value');\n\n // format the string to a date\n const innerDate = DateTime.fromString(attributeValue, {\n format: 'yyyy-MM-dd',\n });\n\n // find the position of the target in the date container\n const dayIndex = allDays.findIndex(\n (e) => e.getAttribute('data-value') === attributeValue\n );\n\n // find the first and second selected dates\n const rangeStart = this.dates.picked[0];\n const rangeEnd = this.dates.picked[1];\n\n //format the start date so that it can be found by the attribute\n const rangeStartFormatted = this._dateToDataValue(rangeStart);\n const rangeStartIndex = allDays.findIndex(\n (e) => e.getAttribute('data-value') === rangeStartFormatted\n );\n const rangeStartElement = allDays[rangeStartIndex];\n\n //make sure we don't leave start/end classes if we don't need them\n if (!innerDate.isSame(rangeStart, Unit.date)) {\n currentTarget.classList.remove(Namespace.css.rangeStart);\n }\n\n if (!innerDate.isSame(rangeEnd, Unit.date)) {\n currentTarget.classList.remove(Namespace.css.rangeEnd);\n }\n\n // the following figures out which direct from start date is selected\n // the selection \"cap\" classes are applied if needed\n // otherwise all the dates between will get the `rangeIn` class.\n // We make this selection based on the element's index and the rangeStart index\n\n let lambda: (_, index) => boolean;\n\n if (innerDate.isBefore(rangeStart)) {\n currentTarget.classList.add(Namespace.css.rangeStart);\n rangeStartElement?.classList.remove(Namespace.css.rangeStart);\n rangeStartElement?.classList.add(Namespace.css.rangeEnd);\n lambda = (_, index) => index > dayIndex && index < rangeStartIndex;\n } else {\n currentTarget.classList.add(Namespace.css.rangeEnd);\n rangeStartElement?.classList.remove(Namespace.css.rangeEnd);\n rangeStartElement?.classList.add(Namespace.css.rangeStart);\n lambda = (_, index) => index < dayIndex && index > rangeStartIndex;\n }\n\n allDays.filter(lambda).forEach((e) => {\n e.classList.add(Namespace.css.rangeIn);\n });\n };\n\n const rangeHoverOutEvent = (e: MouseEvent) => {\n // find all the dates in the container\n const allDays = [...container.querySelectorAll('.day')] as HTMLElement[];\n\n // if only the start is selected, remove all the rangeIn classes\n // we do this because once the user hovers over a new date the range will be recalculated.\n if (this.dates.picked.length === 1)\n allDays.forEach((e) => e.classList.remove(Namespace.css.rangeIn));\n\n // if we have 0 or 2 dates selected then ignore\n if (this.dates.picked.length !== 1) return;\n\n const currentTarget = e?.currentTarget as HTMLElement;\n\n // get the elements date from the attribute value\n const innerDate = new DateTime(currentTarget.getAttribute('data-value'));\n\n // verify selections and remove invalid classes\n if (!innerDate.isSame(this.dates.picked[0], Unit.date)) {\n currentTarget.classList.remove(Namespace.css.rangeStart);\n }\n\n if (!innerDate.isSame(this.dates.picked[1], Unit.date)) {\n currentTarget.classList.remove(Namespace.css.rangeEnd);\n }\n };\n\n return { rangeHoverEvent, rangeHoverOutEvent };\n }\n\n private _updateCalendarView(container: Element) {\n if (this.optionsStore.currentView !== 'calendar') return;\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n switcher.setAttribute(\n Namespace.css.daysContainer,\n this.optionsStore.viewDate.format(\n this.optionsStore.options.localization.dayViewHeaderFormat\n )\n );\n this.optionsStore.options.display.components.month\n ? switcher.classList.remove(Namespace.css.disabled)\n : switcher.classList.add(Namespace.css.disabled);\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.month),\n Unit.month\n )\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.month),\n Unit.month\n )\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n }\n\n /***\n * Generates a html row that contains the days of the week.\n * @private\n */\n private _daysOfTheWeek(): HTMLElement[] {\n const innerDate = this.optionsStore.viewDate.clone\n .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek)\n .startOf(Unit.date);\n const row = [];\n document.createElement('div');\n\n if (this.optionsStore.options.display.calendarWeeks) {\n const htmlDivElement = document.createElement('div');\n htmlDivElement.classList.add(\n Namespace.css.calendarWeeks,\n Namespace.css.noHighlight\n );\n htmlDivElement.innerText = '#';\n row.push(htmlDivElement);\n }\n\n for (let i = 0; i < 7; i++) {\n const htmlDivElement = document.createElement('div');\n htmlDivElement.classList.add(\n Namespace.css.dayOfTheWeek,\n Namespace.css.noHighlight\n );\n htmlDivElement.innerText = innerDate.format({ weekday: 'short' });\n innerDate.manipulate(1, Unit.date);\n row.push(htmlDivElement);\n }\n\n return row;\n }\n\n private _handleCalendarWeeks(container: HTMLElement, innerDate: DateTime) {\n [...container.querySelectorAll(`.${Namespace.css.calendarWeeks}`)]\n .filter((e: HTMLElement) => e.innerText !== '#')\n .forEach((element: HTMLElement) => {\n element.innerText = `${innerDate.week}`;\n innerDate.manipulate(7, Unit.date);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `month`\n */\nexport default class MonthDisplay {\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.monthsContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectMonth);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.monthsContainer\n )[0];\n\n if (this.optionsStore.currentView === 'months') {\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n switcher.setAttribute(\n Namespace.css.monthsContainer,\n this.optionsStore.viewDate.format({ year: 'numeric' })\n );\n\n this.optionsStore.options.display.components.year\n ? switcher.classList.remove(Namespace.css.disabled)\n : switcher.classList.add(Namespace.css.disabled);\n\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.year),\n Unit.year\n )\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n\n this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.year),\n Unit.year\n )\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n }\n\n const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.year);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectMonth}\"]`)\n .forEach((containerClone: HTMLElement, index) => {\n const classes = [];\n classes.push(Namespace.css.month);\n\n if (\n !this.optionsStore.unset &&\n this.dates.isPicked(innerDate, Unit.month)\n ) {\n classes.push(Namespace.css.active);\n }\n if (!this.validation.isValid(innerDate, Unit.month)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.month, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${index}`);\n containerClone.innerText = `${innerDate.format({ month: 'short' })}`;\n innerDate.manipulate(1, Unit.month);\n });\n }\n}\n","import { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Dates from '../../dates';\nimport Validation from '../../validation';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `year`\n */\nexport default class YearDisplay {\n private _startYear: DateTime;\n private _endYear: DateTime;\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.yearsContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectYear);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint) {\n this._startYear = this.optionsStore.viewDate.clone.manipulate(\n -1,\n Unit.year\n );\n this._endYear = this.optionsStore.viewDate.clone.manipulate(10, Unit.year);\n\n const container = widget.getElementsByClassName(\n Namespace.css.yearsContainer\n )[0];\n\n if (this.optionsStore.currentView === 'years') {\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n switcher.setAttribute(\n Namespace.css.yearsContainer,\n `${this._startYear.format({ year: 'numeric' })}-${this._endYear.format({\n year: 'numeric',\n })}`\n );\n\n this.optionsStore.options.display.components.decades\n ? switcher.classList.remove(Namespace.css.disabled)\n : switcher.classList.add(Namespace.css.disabled);\n\n this.validation.isValid(this._startYear, Unit.year)\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n this.validation.isValid(this._endYear, Unit.year)\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n }\n\n const innerDate = this.optionsStore.viewDate.clone\n .startOf(Unit.year)\n .manipulate(-1, Unit.year);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectYear}\"]`)\n .forEach((containerClone: HTMLElement) => {\n const classes = [];\n classes.push(Namespace.css.year);\n\n if (\n !this.optionsStore.unset &&\n this.dates.isPicked(innerDate, Unit.year)\n ) {\n classes.push(Namespace.css.active);\n }\n if (!this.validation.isValid(innerDate, Unit.year)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.year, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.year}`);\n containerClone.innerText = innerDate.format({ year: 'numeric' });\n\n innerDate.manipulate(1, Unit.year);\n });\n }\n}\n","import Dates from '../../dates';\nimport { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `seconds`\n */\nexport default class DecadeDisplay {\n private _startDecade: DateTime;\n private _endDecade: DateTime;\n private optionsStore: OptionsStore;\n private dates: Dates;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the display\n * @private\n */\n getPicker() {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.decadesContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectDecade);\n container.appendChild(div);\n }\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint) {\n const [start, end] = Dates.getStartEndYear(\n 100,\n this.optionsStore.viewDate.year\n );\n this._startDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\n this._startDecade.year = start;\n this._endDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\n this._endDecade.year = end;\n\n const container = widget.getElementsByClassName(\n Namespace.css.decadesContainer\n )[0];\n\n const [previous, switcher, next] = container.parentElement\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n if (this.optionsStore.currentView === 'decades') {\n switcher.setAttribute(\n Namespace.css.decadesContainer,\n `${this._startDecade.format({\n year: 'numeric',\n })}-${this._endDecade.format({ year: 'numeric' })}`\n );\n\n this.validation.isValid(this._startDecade, Unit.year)\n ? previous.classList.remove(Namespace.css.disabled)\n : previous.classList.add(Namespace.css.disabled);\n this.validation.isValid(this._endDecade, Unit.year)\n ? next.classList.remove(Namespace.css.disabled)\n : next.classList.add(Namespace.css.disabled);\n }\n\n const pickedYears = this.dates.picked.map((x) => x.year);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectDecade}\"]`)\n .forEach((containerClone: HTMLElement, index) => {\n if (index === 0) {\n containerClone.classList.add(Namespace.css.old);\n if (this._startDecade.year - 10 < 0) {\n containerClone.textContent = ' ';\n previous.classList.add(Namespace.css.disabled);\n containerClone.classList.add(Namespace.css.disabled);\n containerClone.setAttribute('data-value', '');\n return;\n } else {\n containerClone.innerText = this._startDecade.clone\n .manipulate(-10, Unit.year)\n .format({ year: 'numeric' });\n containerClone.setAttribute(\n 'data-value',\n `${this._startDecade.year}`\n );\n return;\n }\n }\n\n const classes = [];\n classes.push(Namespace.css.decade);\n const startDecadeYear = this._startDecade.year;\n const endDecadeYear = this._startDecade.year + 9;\n\n if (\n !this.optionsStore.unset &&\n pickedYears.filter((x) => x >= startDecadeYear && x <= endDecadeYear)\n .length > 0\n ) {\n classes.push(Namespace.css.active);\n }\n\n paint('decade', this._startDecade, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${this._startDecade.year}`);\n containerClone.innerText = `${this._startDecade.format({\n year: 'numeric',\n })}`;\n\n this._startDecade.manipulate(10, Unit.year);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates the clock display\n */\nexport default class TimeDisplay {\n private _gridColumns = '';\n private optionsStore: OptionsStore;\n private validation: Validation;\n private dates: Dates;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n }\n\n /**\n * Build the container html for the clock display\n * @private\n */\n getPicker(iconTag: (iconClass: string) => HTMLElement): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.clockContainer);\n\n container.append(...this._grid(iconTag));\n\n return container;\n }\n\n /**\n * Populates the various elements with in the clock display\n * like the current hour and if the manipulation icons are enabled.\n * @private\n */\n _update(widget: HTMLElement): void {\n const timesDiv = (\n widget.getElementsByClassName(Namespace.css.clockContainer)[0]\n );\n let lastPicked = this.dates.lastPicked?.clone;\n if (!lastPicked && this.optionsStore.options.useCurrent)\n lastPicked = this.optionsStore.viewDate.clone;\n\n timesDiv\n .querySelectorAll('.disabled')\n .forEach((element) => element.classList.remove(Namespace.css.disabled));\n\n if (this.optionsStore.options.display.components.hours) {\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.hours),\n Unit.hours\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.incrementHours}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.hours),\n Unit.hours\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.decrementHours}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n timesDiv.querySelector(\n `[data-time-component=${Unit.hours}]`\n ).innerText = lastPicked\n ? lastPicked.getHoursFormatted(\n this.optionsStore.options.localization.hourCycle\n )\n : '--';\n }\n\n if (this.optionsStore.options.display.components.minutes) {\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.minutes),\n Unit.minutes\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.incrementMinutes}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.minutes),\n Unit.minutes\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.decrementMinutes}]`)\n .classList.add(Namespace.css.disabled);\n }\n timesDiv.querySelector(\n `[data-time-component=${Unit.minutes}]`\n ).innerText = lastPicked ? lastPicked.minutesFormatted : '--';\n }\n\n if (this.optionsStore.options.display.components.seconds) {\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(1, Unit.seconds),\n Unit.seconds\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.incrementSeconds}]`)\n .classList.add(Namespace.css.disabled);\n }\n\n if (\n !this.validation.isValid(\n this.optionsStore.viewDate.clone.manipulate(-1, Unit.seconds),\n Unit.seconds\n )\n ) {\n timesDiv\n .querySelector(`[data-action=${ActionTypes.decrementSeconds}]`)\n .classList.add(Namespace.css.disabled);\n }\n timesDiv.querySelector(\n `[data-time-component=${Unit.seconds}]`\n ).innerText = lastPicked ? lastPicked.secondsFormatted : '--';\n }\n\n if (this.optionsStore.isTwelveHour) {\n const toggle = timesDiv.querySelector(\n `[data-action=${ActionTypes.toggleMeridiem}]`\n );\n\n const meridiemDate = (lastPicked || this.optionsStore.viewDate).clone;\n\n toggle.innerText = meridiemDate.meridiem();\n\n if (\n !this.validation.isValid(\n meridiemDate.manipulate(\n meridiemDate.hours >= 12 ? -12 : 12,\n Unit.hours\n )\n )\n ) {\n toggle.classList.add(Namespace.css.disabled);\n } else {\n toggle.classList.remove(Namespace.css.disabled);\n }\n }\n\n timesDiv.style.gridTemplateAreas = `\"${this._gridColumns}\"`;\n }\n\n /**\n * Creates the table for the clock display depending on what options are selected.\n * @private\n */\n private _grid(iconTag: (iconClass: string) => HTMLElement): HTMLElement[] {\n this._gridColumns = '';\n const top = [],\n middle = [],\n bottom = [],\n separator = document.createElement('div'),\n upIcon = iconTag(this.optionsStore.options.display.icons.up),\n downIcon = iconTag(this.optionsStore.options.display.icons.down);\n\n separator.classList.add(Namespace.css.separator, Namespace.css.noHighlight);\n const separatorColon = separator.cloneNode(true);\n separatorColon.innerHTML = ':';\n\n const getSeparator = (colon = false): HTMLElement => {\n return colon\n ? separatorColon.cloneNode(true)\n : separator.cloneNode(true);\n };\n\n if (this.optionsStore.options.display.components.hours) {\n let divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.incrementHour\n );\n divElement.setAttribute('data-action', ActionTypes.incrementHours);\n divElement.appendChild(upIcon.cloneNode(true));\n top.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.pickHour\n );\n divElement.setAttribute('data-action', ActionTypes.showHours);\n divElement.setAttribute('data-time-component', Unit.hours);\n middle.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.decrementHour\n );\n divElement.setAttribute('data-action', ActionTypes.decrementHours);\n divElement.appendChild(downIcon.cloneNode(true));\n bottom.push(divElement);\n this._gridColumns += 'a';\n }\n\n if (this.optionsStore.options.display.components.minutes) {\n this._gridColumns += ' a';\n if (this.optionsStore.options.display.components.hours) {\n top.push(getSeparator());\n middle.push(getSeparator(true));\n bottom.push(getSeparator());\n this._gridColumns += ' a';\n }\n let divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.incrementMinute\n );\n divElement.setAttribute('data-action', ActionTypes.incrementMinutes);\n divElement.appendChild(upIcon.cloneNode(true));\n top.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.pickMinute\n );\n divElement.setAttribute('data-action', ActionTypes.showMinutes);\n divElement.setAttribute('data-time-component', Unit.minutes);\n middle.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.decrementMinute\n );\n divElement.setAttribute('data-action', ActionTypes.decrementMinutes);\n divElement.appendChild(downIcon.cloneNode(true));\n bottom.push(divElement);\n }\n\n if (this.optionsStore.options.display.components.seconds) {\n this._gridColumns += ' a';\n if (this.optionsStore.options.display.components.minutes) {\n top.push(getSeparator());\n middle.push(getSeparator(true));\n bottom.push(getSeparator());\n this._gridColumns += ' a';\n }\n let divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.incrementSecond\n );\n divElement.setAttribute('data-action', ActionTypes.incrementSeconds);\n divElement.appendChild(upIcon.cloneNode(true));\n top.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.pickSecond\n );\n divElement.setAttribute('data-action', ActionTypes.showSeconds);\n divElement.setAttribute('data-time-component', Unit.seconds);\n middle.push(divElement);\n\n divElement = document.createElement('div');\n divElement.setAttribute(\n 'title',\n this.optionsStore.options.localization.decrementSecond\n );\n divElement.setAttribute('data-action', ActionTypes.decrementSeconds);\n divElement.appendChild(downIcon.cloneNode(true));\n bottom.push(divElement);\n }\n\n if (this.optionsStore.isTwelveHour) {\n this._gridColumns += ' a';\n let divElement = getSeparator();\n top.push(divElement);\n\n const button = document.createElement('button');\n button.setAttribute('type', 'button');\n button.setAttribute(\n 'title',\n this.optionsStore.options.localization.toggleMeridiem\n );\n button.setAttribute('data-action', ActionTypes.toggleMeridiem);\n button.setAttribute('tabindex', '-1');\n if (Namespace.css.toggleMeridiem.includes(',')) {\n //todo move this to paint function?\n button.classList.add(...Namespace.css.toggleMeridiem.split(','));\n } else button.classList.add(Namespace.css.toggleMeridiem);\n\n divElement = document.createElement('div');\n divElement.classList.add(Namespace.css.noHighlight);\n divElement.appendChild(button);\n middle.push(divElement);\n\n divElement = getSeparator();\n bottom.push(divElement);\n }\n\n this._gridColumns = this._gridColumns.trim();\n\n return [...top, ...middle, ...bottom];\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `hours`\n */\nexport default class HourDisplay {\n private optionsStore: OptionsStore;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.hourContainer);\n\n for (let i = 0; i < (this.optionsStore.isTwelveHour ? 12 : 24); i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectHour);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.hourContainer\n )[0];\n const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.date);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectHour}\"]`)\n .forEach((containerClone: HTMLElement) => {\n const classes = [];\n classes.push(Namespace.css.hour);\n\n if (!this.validation.isValid(innerDate, Unit.hours)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.hours, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.hours}`);\n containerClone.innerText = innerDate.getHoursFormatted(\n this.optionsStore.options.localization.hourCycle\n );\n innerDate.manipulate(1, Unit.hours);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `minutes`\n */\nexport default class MinuteDisplay {\n private optionsStore: OptionsStore;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.minuteContainer);\n\n const step =\n this.optionsStore.options.stepping === 1\n ? 5\n : this.optionsStore.options.stepping;\n for (let i = 0; i < 60 / step; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectMinute);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.minuteContainer\n )[0];\n const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.hours);\n const step =\n this.optionsStore.options.stepping === 1\n ? 5\n : this.optionsStore.options.stepping;\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectMinute}\"]`)\n .forEach((containerClone: HTMLElement) => {\n const classes = [];\n classes.push(Namespace.css.minute);\n\n if (!this.validation.isValid(innerDate, Unit.minutes)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.minutes, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.minutes}`);\n containerClone.innerText = innerDate.minutesFormatted;\n innerDate.manipulate(step, Unit.minutes);\n });\n }\n}\n","import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `seconds`\n */\nexport default class secondDisplay {\n private optionsStore: OptionsStore;\n private validation: Validation;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n }\n /**\n * Build the container html for the display\n * @private\n */\n getPicker(): HTMLElement {\n const container = document.createElement('div');\n container.classList.add(Namespace.css.secondContainer);\n\n for (let i = 0; i < 12; i++) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.selectSecond);\n container.appendChild(div);\n }\n\n return container;\n }\n\n /**\n * Populates the grid and updates enabled states\n * @private\n */\n _update(widget: HTMLElement, paint: Paint): void {\n const container = widget.getElementsByClassName(\n Namespace.css.secondContainer\n )[0];\n const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.minutes);\n\n container\n .querySelectorAll(`[data-action=\"${ActionTypes.selectSecond}\"]`)\n .forEach((containerClone: HTMLElement) => {\n const classes = [];\n classes.push(Namespace.css.second);\n\n if (!this.validation.isValid(innerDate, Unit.seconds)) {\n classes.push(Namespace.css.disabled);\n }\n\n paint(Unit.seconds, innerDate, classes, containerClone);\n\n containerClone.classList.remove(...containerClone.classList);\n containerClone.classList.add(...classes);\n containerClone.setAttribute('data-value', `${innerDate.seconds}`);\n containerClone.innerText = innerDate.secondsFormatted;\n innerDate.manipulate(5, Unit.seconds);\n });\n }\n}\n","import Namespace from '../utilities/namespace';\n\n/**\n * Provides a collapse functionality to the view changes\n */\nexport default class Collapse {\n /**\n * Flips the show/hide state of `target`\n * @param target html element to affect.\n */\n static toggle(target: HTMLElement) {\n if (target.classList.contains(Namespace.css.show)) {\n this.hide(target);\n } else {\n this.show(target);\n }\n }\n\n /**\n * Skips any animation or timeouts and immediately set the element to show.\n * @param target\n */\n static showImmediately(target: HTMLElement) {\n target.classList.remove(Namespace.css.collapsing);\n target.classList.add(Namespace.css.collapse, Namespace.css.show);\n target.style.height = '';\n }\n\n /**\n * If `target` is not already showing, then show after the animation.\n * @param target\n */\n static show(target: HTMLElement) {\n if (\n target.classList.contains(Namespace.css.collapsing) ||\n target.classList.contains(Namespace.css.show)\n )\n return;\n\n let timeOut = null;\n const complete = () => {\n Collapse.showImmediately(target);\n timeOut = null;\n };\n\n target.style.height = '0';\n target.classList.remove(Namespace.css.collapse);\n target.classList.add(Namespace.css.collapsing);\n\n //eslint-disable-next-line @typescript-eslint/no-unused-vars\n timeOut = setTimeout(\n complete,\n this.getTransitionDurationFromElement(target)\n );\n target.style.height = `${target.scrollHeight}px`;\n }\n\n /**\n * Skips any animation or timeouts and immediately set the element to hide.\n * @param target\n */\n static hideImmediately(target: HTMLElement) {\n if (!target) return;\n target.classList.remove(Namespace.css.collapsing, Namespace.css.show);\n target.classList.add(Namespace.css.collapse);\n }\n\n /**\n * If `target` is not already hidden, then hide after the animation.\n * @param target HTML Element\n */\n static hide(target: HTMLElement) {\n if (\n target.classList.contains(Namespace.css.collapsing) ||\n !target.classList.contains(Namespace.css.show)\n )\n return;\n\n let timeOut = null;\n const complete = () => {\n Collapse.hideImmediately(target);\n timeOut = null;\n };\n\n target.style.height = `${target.getBoundingClientRect()['height']}px`;\n\n const reflow = (element) => element.offsetHeight;\n\n reflow(target);\n\n target.classList.remove(Namespace.css.collapse, Namespace.css.show);\n target.classList.add(Namespace.css.collapsing);\n target.style.height = '';\n\n //eslint-disable-next-line @typescript-eslint/no-unused-vars\n timeOut = setTimeout(\n complete,\n this.getTransitionDurationFromElement(target)\n );\n }\n\n /**\n * Gets the transition duration from the `element` by getting css properties\n * `transition-duration` and `transition-delay`\n * @param element HTML Element\n */\n private static getTransitionDurationFromElement = (element: HTMLElement) => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } =\n window.getComputedStyle(element);\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n\n return (\n (Number.parseFloat(transitionDuration) +\n Number.parseFloat(transitionDelay)) *\n 1000\n );\n };\n}\n","import DateDisplay from './calendar/date-display';\nimport MonthDisplay from './calendar/month-display';\nimport YearDisplay from './calendar/year-display';\nimport DecadeDisplay from './calendar/decade-display';\nimport TimeDisplay from './time/time-display';\nimport HourDisplay from './time/hour-display';\nimport MinuteDisplay from './time/minute-display';\nimport SecondDisplay from './time/second-display';\nimport { DateTime, Unit } from '../datetime';\nimport Namespace from '../utilities/namespace';\nimport { HideEvent } from '../utilities/event-types';\nimport Collapse from './collapse';\nimport Validation from '../validation';\nimport Dates from '../dates';\nimport { EventEmitters, ViewUpdateValues } from '../utilities/event-emitter';\nimport { serviceLocator } from '../utilities/service-locator';\nimport ActionTypes from '../utilities/action-types';\nimport CalendarModes from '../utilities/calendar-modes';\nimport { OptionsStore } from '../utilities/optionsStore';\n\n/**\n * Main class for all things display related.\n */\nexport default class Display {\n private _widget: HTMLElement;\n private _popperInstance: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n private _isVisible = false;\n private optionsStore: OptionsStore;\n private validation: Validation;\n private dates: Dates;\n\n dateDisplay: DateDisplay;\n monthDisplay: MonthDisplay;\n yearDisplay: YearDisplay;\n decadeDisplay: DecadeDisplay;\n timeDisplay: TimeDisplay;\n hourDisplay: HourDisplay;\n minuteDisplay: MinuteDisplay;\n secondDisplay: SecondDisplay;\n private _eventEmitters: EventEmitters;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.validation = serviceLocator.locate(Validation);\n this.dates = serviceLocator.locate(Dates);\n\n this.dateDisplay = serviceLocator.locate(DateDisplay);\n this.monthDisplay = serviceLocator.locate(MonthDisplay);\n this.yearDisplay = serviceLocator.locate(YearDisplay);\n this.decadeDisplay = serviceLocator.locate(DecadeDisplay);\n this.timeDisplay = serviceLocator.locate(TimeDisplay);\n this.hourDisplay = serviceLocator.locate(HourDisplay);\n this.minuteDisplay = serviceLocator.locate(MinuteDisplay);\n this.secondDisplay = serviceLocator.locate(SecondDisplay);\n this._eventEmitters = serviceLocator.locate(EventEmitters);\n this._widget = undefined;\n\n this._eventEmitters.updateDisplay.subscribe((result: ViewUpdateValues) => {\n this._update(result);\n });\n }\n\n /**\n * Returns the widget body or undefined\n * @private\n */\n get widget(): HTMLElement | undefined {\n return this._widget;\n }\n\n get dateContainer(): HTMLElement | undefined {\n return this.widget?.querySelector(`div.${Namespace.css.dateContainer}`);\n }\n\n get timeContainer(): HTMLElement | undefined {\n return this.widget?.querySelector(`div.${Namespace.css.timeContainer}`);\n }\n\n /**\n * Returns this visible state of the picker (shown)\n */\n get isVisible() {\n return this._isVisible;\n }\n\n /**\n * Updates the table for a particular unit. Used when an option as changed or\n * whenever the class list might need to be refreshed.\n * @param unit\n * @private\n */\n _update(unit: ViewUpdateValues): void {\n if (!this.widget) return;\n switch (unit) {\n case Unit.seconds:\n this.secondDisplay._update(this.widget, this.paint);\n break;\n case Unit.minutes:\n this.minuteDisplay._update(this.widget, this.paint);\n break;\n case Unit.hours:\n this.hourDisplay._update(this.widget, this.paint);\n break;\n case Unit.date:\n this.dateDisplay._update(this.widget, this.paint);\n break;\n case Unit.month:\n this.monthDisplay._update(this.widget, this.paint);\n break;\n case Unit.year:\n this.yearDisplay._update(this.widget, this.paint);\n break;\n case 'decade':\n this.decadeDisplay._update(this.widget, this.paint);\n break;\n case 'clock':\n if (!this._hasTime) break;\n this.timeDisplay._update(this.widget);\n this._update(Unit.hours);\n this._update(Unit.minutes);\n this._update(Unit.seconds);\n break;\n case 'calendar':\n this._update(Unit.date);\n this._update(Unit.year);\n this._update(Unit.month);\n this.decadeDisplay._update(this.widget, this.paint);\n this._updateCalendarHeader();\n break;\n case 'all':\n if (this._hasTime) {\n this._update('clock');\n }\n if (this._hasDate) {\n this._update('calendar');\n }\n }\n }\n\n // noinspection JSUnusedLocalSymbols\n /**\n * Allows developers to add/remove classes from an element.\n * @param _unit\n * @param _date\n * @param _classes\n * @param _element\n */\n\n /* eslint-disable @typescript-eslint/no-unused-vars */\n paint(\n _unit: Unit | 'decade',\n _date: DateTime,\n _classes: string[],\n _element: HTMLElement\n ) {\n // implemented in plugin\n }\n\n /**\n * Shows the picker and creates a Popper instance if needed.\n * Add document click event to hide when clicking outside the picker.\n * fires Events#show\n */\n show(): void {\n if (this.widget == undefined) {\n this._showSetDefaultIfNeeded();\n\n this._buildWidget();\n this._updateTheme();\n\n this._showSetupViewMode();\n\n if (!this.optionsStore.options.display.inline) {\n // If needed to change the parent container\n const container = this.optionsStore.options?.container || document.body;\n const placement =\n this.optionsStore.options?.display?.placement || 'bottom';\n\n container.appendChild(this.widget);\n this.createPopup(this.optionsStore.element, this.widget, {\n modifiers: [{ name: 'eventListeners', enabled: true }],\n //#2400\n placement:\n document.documentElement.dir === 'rtl'\n ? `${placement}-end`\n : `${placement}-start`,\n }).then();\n } else {\n this.optionsStore.element.appendChild(this.widget);\n }\n\n if (this.optionsStore.options.display.viewMode == 'clock') {\n this._eventEmitters.action.emit({\n e: null,\n action: ActionTypes.showClock,\n });\n }\n\n this.widget\n .querySelectorAll('[data-action]')\n .forEach((element) =>\n element.addEventListener('click', this._actionsClickEvent)\n );\n\n // show the clock when using sideBySide\n if (this._hasTime && this.optionsStore.options.display.sideBySide) {\n this.timeDisplay._update(this.widget);\n (\n this.widget.getElementsByClassName(\n Namespace.css.clockContainer\n )[0] as HTMLElement\n ).style.display = 'grid';\n }\n }\n\n this.widget.classList.add(Namespace.css.show);\n if (!this.optionsStore.options.display.inline) {\n this.updatePopup();\n document.addEventListener('click', this._documentClickEvent);\n }\n this._eventEmitters.triggerEvent.emit({ type: Namespace.events.show });\n this._isVisible = true;\n }\n\n private _showSetupViewMode() {\n // If modeView is only clock\n const onlyClock = this._hasTime && !this._hasDate;\n\n // reset the view to the clock if there's no date components\n if (onlyClock) {\n this.optionsStore.currentView = 'clock';\n this._eventEmitters.action.emit({\n e: null,\n action: ActionTypes.showClock,\n });\n }\n // otherwise return to the calendar view\n else if (!this.optionsStore.currentCalendarViewMode) {\n this.optionsStore.currentCalendarViewMode =\n this.optionsStore.minimumCalendarViewMode;\n }\n\n if (!onlyClock && this.optionsStore.options.display.viewMode !== 'clock') {\n if (this._hasTime) {\n if (!this.optionsStore.options.display.sideBySide) {\n Collapse.hideImmediately(this.timeContainer);\n } else {\n Collapse.show(this.timeContainer);\n }\n }\n Collapse.show(this.dateContainer);\n }\n\n if (this._hasDate) {\n this._showMode();\n }\n }\n\n private _showSetDefaultIfNeeded() {\n if (this.dates.picked.length != 0) return;\n\n if (\n this.optionsStore.options.useCurrent &&\n !this.optionsStore.options.defaultDate\n ) {\n const date = new DateTime().setLocalization(\n this.optionsStore.options.localization\n );\n if (!this.optionsStore.options.keepInvalid) {\n let tries = 0;\n let direction = 1;\n if (this.optionsStore.options.restrictions.maxDate?.isBefore(date)) {\n direction = -1;\n }\n while (!this.validation.isValid(date) && tries > 31) {\n date.manipulate(direction, Unit.date);\n tries++;\n }\n }\n this.dates.setValue(date);\n }\n\n if (this.optionsStore.options.defaultDate) {\n this.dates.setValue(this.optionsStore.options.defaultDate);\n }\n }\n\n async createPopup(\n element: HTMLElement,\n widget: HTMLElement,\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: any\n ): Promise {\n let createPopperFunction;\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((window as any)?.Popper) {\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n createPopperFunction = (window as any)?.Popper?.createPopper;\n } else {\n const { createPopper } = await import('@popperjs/core');\n createPopperFunction = createPopper;\n }\n if (createPopperFunction) {\n this._popperInstance = createPopperFunction(element, widget, options);\n }\n }\n\n updatePopup(): void {\n this._popperInstance?.update();\n }\n\n /**\n * Changes the calendar view mode. E.g. month <-> year\n * @param direction -/+ number to move currentViewMode\n * @private\n */\n _showMode(direction?: number): void {\n if (!this.widget) {\n return;\n }\n if (direction) {\n const max = Math.max(\n this.optionsStore.minimumCalendarViewMode,\n Math.min(3, this.optionsStore.currentCalendarViewMode + direction)\n );\n if (this.optionsStore.currentCalendarViewMode == max) return;\n this.optionsStore.currentCalendarViewMode = max;\n }\n\n this.widget\n .querySelectorAll(\n `.${Namespace.css.dateContainer} > div:not(.${Namespace.css.calendarHeader}), .${Namespace.css.timeContainer} > div:not(.${Namespace.css.clockContainer})`\n )\n .forEach((e: HTMLElement) => (e.style.display = 'none'));\n\n const datePickerMode =\n CalendarModes[this.optionsStore.currentCalendarViewMode];\n const picker: HTMLElement = this.widget.querySelector(\n `.${datePickerMode.className}`\n );\n\n switch (datePickerMode.className) {\n case Namespace.css.decadesContainer:\n this.decadeDisplay._update(this.widget, this.paint);\n break;\n case Namespace.css.yearsContainer:\n this.yearDisplay._update(this.widget, this.paint);\n break;\n case Namespace.css.monthsContainer:\n this.monthDisplay._update(this.widget, this.paint);\n break;\n case Namespace.css.daysContainer:\n this.dateDisplay._update(this.widget, this.paint);\n break;\n }\n\n picker.style.display = 'grid';\n\n if (this.optionsStore.options.display.sideBySide)\n ((\n this.widget.querySelectorAll(`.${Namespace.css.clockContainer}`)[0]\n )).style.display = 'grid';\n\n this._updateCalendarHeader();\n this._eventEmitters.viewUpdate.emit();\n }\n\n /**\n * Changes the theme. E.g. light, dark or auto\n * @param theme the theme name\n * @private\n */\n _updateTheme(theme?: 'light' | 'dark' | 'auto'): void {\n if (!this.widget) {\n return;\n }\n if (theme) {\n if (this.optionsStore.options.display.theme === theme) return;\n this.optionsStore.options.display.theme = theme;\n }\n\n this.widget.classList.remove('light', 'dark');\n this.widget.classList.add(this._getThemeClass());\n\n if (this.optionsStore.options.display.theme === 'auto') {\n window\n .matchMedia(Namespace.css.isDarkPreferredQuery)\n .addEventListener('change', () => this._updateTheme());\n } else {\n window\n .matchMedia(Namespace.css.isDarkPreferredQuery)\n .removeEventListener('change', () => this._updateTheme());\n }\n }\n\n _getThemeClass(): string {\n const currentTheme = this.optionsStore.options.display.theme || 'auto';\n\n const isDarkMode =\n window.matchMedia &&\n window.matchMedia(Namespace.css.isDarkPreferredQuery).matches;\n\n switch (currentTheme) {\n case 'light':\n return Namespace.css.lightTheme;\n case 'dark':\n return Namespace.css.darkTheme;\n case 'auto':\n return isDarkMode ? Namespace.css.darkTheme : Namespace.css.lightTheme;\n }\n }\n\n _updateCalendarHeader() {\n if (!this._hasDate) return;\n const showing = [\n ...this.widget.querySelector(\n `.${Namespace.css.dateContainer} div[style*=\"display: grid\"]`\n ).classList,\n ].find((x) => x.startsWith(Namespace.css.dateContainer));\n\n const [previous, switcher, next] = this.widget\n .getElementsByClassName(Namespace.css.calendarHeader)[0]\n .getElementsByTagName('div');\n\n switch (showing) {\n case Namespace.css.decadesContainer:\n previous.setAttribute(\n 'title',\n this.optionsStore.options.localization.previousCentury\n );\n switcher.setAttribute('title', '');\n next.setAttribute(\n 'title',\n this.optionsStore.options.localization.nextCentury\n );\n break;\n case Namespace.css.yearsContainer:\n previous.setAttribute(\n 'title',\n this.optionsStore.options.localization.previousDecade\n );\n switcher.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectDecade\n );\n next.setAttribute(\n 'title',\n this.optionsStore.options.localization.nextDecade\n );\n break;\n case Namespace.css.monthsContainer:\n previous.setAttribute(\n 'title',\n this.optionsStore.options.localization.previousYear\n );\n switcher.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectYear\n );\n next.setAttribute(\n 'title',\n this.optionsStore.options.localization.nextYear\n );\n break;\n case Namespace.css.daysContainer:\n previous.setAttribute(\n 'title',\n this.optionsStore.options.localization.previousMonth\n );\n switcher.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectMonth\n );\n next.setAttribute(\n 'title',\n this.optionsStore.options.localization.nextMonth\n );\n switcher.setAttribute(\n showing,\n this.optionsStore.viewDate.format(\n this.optionsStore.options.localization.dayViewHeaderFormat\n )\n );\n break;\n }\n switcher.innerText = switcher.getAttribute(showing);\n }\n\n /**\n * Hides the picker if needed.\n * Remove document click event to hide when clicking outside the picker.\n * fires Events#hide\n */\n hide(): void {\n if (!this.widget || !this._isVisible) return;\n\n this.widget.classList.remove(Namespace.css.show);\n\n if (this._isVisible) {\n this._eventEmitters.triggerEvent.emit({\n type: Namespace.events.hide,\n date: this.optionsStore.unset ? null : this.dates.lastPicked?.clone,\n } as HideEvent);\n this._isVisible = false;\n }\n\n document.removeEventListener('click', this._documentClickEvent);\n }\n\n /**\n * Toggles the picker's open state. Fires a show/hide event depending.\n */\n toggle() {\n return this._isVisible ? this.hide() : this.show();\n }\n\n /**\n * Removes document and data-action click listener and reset the widget\n * @private\n */\n _dispose() {\n document.removeEventListener('click', this._documentClickEvent);\n if (!this.widget) return;\n this.widget\n .querySelectorAll('[data-action]')\n .forEach((element) =>\n element.removeEventListener('click', this._actionsClickEvent)\n );\n this.widget.parentNode.removeChild(this.widget);\n this._widget = undefined;\n }\n\n /**\n * Builds the widgets html template.\n * @private\n */\n private _buildWidget(): HTMLElement {\n const template = document.createElement('div');\n template.classList.add(Namespace.css.widget);\n\n const dateView = document.createElement('div');\n dateView.classList.add(Namespace.css.dateContainer);\n dateView.append(\n this.getHeadTemplate(),\n this.decadeDisplay.getPicker(),\n this.yearDisplay.getPicker(),\n this.monthDisplay.getPicker(),\n this.dateDisplay.getPicker()\n );\n\n const timeView = document.createElement('div');\n timeView.classList.add(Namespace.css.timeContainer);\n timeView.appendChild(this.timeDisplay.getPicker(this._iconTag.bind(this)));\n timeView.appendChild(this.hourDisplay.getPicker());\n timeView.appendChild(this.minuteDisplay.getPicker());\n timeView.appendChild(this.secondDisplay.getPicker());\n\n const toolbar = document.createElement('div');\n toolbar.classList.add(Namespace.css.toolbar);\n toolbar.append(...this.getToolbarElements());\n\n if (this.optionsStore.options.display.inline) {\n template.classList.add(Namespace.css.inline);\n }\n\n if (this.optionsStore.options.display.calendarWeeks) {\n template.classList.add('calendarWeeks');\n }\n\n if (this.optionsStore.options.display.sideBySide && this._hasDateAndTime) {\n this._buildWidgetSideBySide(template, dateView, timeView, toolbar);\n return;\n }\n\n if (this.optionsStore.options.display.toolbarPlacement === 'top') {\n template.appendChild(toolbar);\n }\n\n const setupComponentView = (hasFirst, hasSecond, element, shouldShow) => {\n if (!hasFirst) return;\n if (hasSecond) {\n element.classList.add(Namespace.css.collapse);\n if (shouldShow) element.classList.add(Namespace.css.show);\n }\n template.appendChild(element);\n };\n\n setupComponentView(\n this._hasDate,\n this._hasTime,\n dateView,\n this.optionsStore.options.display.viewMode !== 'clock'\n );\n\n setupComponentView(\n this._hasTime,\n this._hasDate,\n timeView,\n this.optionsStore.options.display.viewMode === 'clock'\n );\n\n if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\n template.appendChild(toolbar);\n }\n\n const arrow = document.createElement('div');\n arrow.classList.add('arrow');\n arrow.setAttribute('data-popper-arrow', '');\n template.appendChild(arrow);\n\n this._widget = template;\n }\n\n private _buildWidgetSideBySide(\n template: HTMLDivElement,\n dateView: HTMLDivElement,\n timeView: HTMLDivElement,\n toolbar: HTMLDivElement\n ) {\n template.classList.add(Namespace.css.sideBySide);\n if (this.optionsStore.options.display.toolbarPlacement === 'top') {\n template.appendChild(toolbar);\n }\n const row = document.createElement('div');\n row.classList.add('td-row');\n dateView.classList.add('td-half');\n timeView.classList.add('td-half');\n\n row.appendChild(dateView);\n row.appendChild(timeView);\n template.appendChild(row);\n if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\n template.appendChild(toolbar);\n }\n this._widget = template;\n }\n\n /**\n * Returns true if the hours, minutes, or seconds component is turned on\n */\n get _hasTime(): boolean {\n return (\n this.optionsStore.options.display.components.clock &&\n (this.optionsStore.options.display.components.hours ||\n this.optionsStore.options.display.components.minutes ||\n this.optionsStore.options.display.components.seconds)\n );\n }\n\n /**\n * Returns true if the year, month, or date component is turned on\n */\n get _hasDate(): boolean {\n return (\n this.optionsStore.options.display.components.calendar &&\n (this.optionsStore.options.display.components.year ||\n this.optionsStore.options.display.components.month ||\n this.optionsStore.options.display.components.date)\n );\n }\n\n get _hasDateAndTime(): boolean {\n return this._hasDate && this._hasTime;\n }\n\n /**\n * Get the toolbar html based on options like buttons => today\n * @private\n */\n getToolbarElements(): HTMLElement[] {\n const toolbar = [];\n\n if (this.optionsStore.options.display.buttons.today) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.today);\n div.setAttribute('title', this.optionsStore.options.localization.today);\n\n div.appendChild(\n this._iconTag(this.optionsStore.options.display.icons.today)\n );\n toolbar.push(div);\n }\n if (\n !this.optionsStore.options.display.sideBySide &&\n this._hasDate &&\n this._hasTime\n ) {\n let title, icon;\n if (this.optionsStore.options.display.viewMode === 'clock') {\n title = this.optionsStore.options.localization.selectDate;\n icon = this.optionsStore.options.display.icons.date;\n } else {\n title = this.optionsStore.options.localization.selectTime;\n icon = this.optionsStore.options.display.icons.time;\n }\n\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.togglePicker);\n div.setAttribute('title', title);\n\n div.appendChild(this._iconTag(icon));\n toolbar.push(div);\n }\n if (this.optionsStore.options.display.buttons.clear) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.clear);\n div.setAttribute('title', this.optionsStore.options.localization.clear);\n\n div.appendChild(\n this._iconTag(this.optionsStore.options.display.icons.clear)\n );\n toolbar.push(div);\n }\n if (this.optionsStore.options.display.buttons.close) {\n const div = document.createElement('div');\n div.setAttribute('data-action', ActionTypes.close);\n div.setAttribute('title', this.optionsStore.options.localization.close);\n\n div.appendChild(\n this._iconTag(this.optionsStore.options.display.icons.close)\n );\n toolbar.push(div);\n }\n\n return toolbar;\n }\n\n /***\n * Builds the base header template with next and previous icons\n * @private\n */\n getHeadTemplate(): HTMLElement {\n const calendarHeader = document.createElement('div');\n calendarHeader.classList.add(Namespace.css.calendarHeader);\n\n const previous = document.createElement('div');\n previous.classList.add(Namespace.css.previous);\n previous.setAttribute('data-action', ActionTypes.previous);\n previous.appendChild(\n this._iconTag(this.optionsStore.options.display.icons.previous)\n );\n\n const switcher = document.createElement('div');\n switcher.classList.add(Namespace.css.switch);\n switcher.setAttribute('data-action', ActionTypes.changeCalendarView);\n\n const next = document.createElement('div');\n next.classList.add(Namespace.css.next);\n next.setAttribute('data-action', ActionTypes.next);\n next.appendChild(\n this._iconTag(this.optionsStore.options.display.icons.next)\n );\n\n calendarHeader.append(previous, switcher, next);\n return calendarHeader;\n }\n\n /**\n * Builds an icon tag as either an ``\n * or with icons => type is `sprites` then a svg tag instead\n * @param iconClass\n * @private\n */\n _iconTag(iconClass: string): HTMLElement | SVGElement {\n if (this.optionsStore.options.display.icons.type === 'sprites') {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n const icon = document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'use'\n );\n icon.setAttribute('xlink:href', iconClass); // Deprecated. Included for backward compatibility\n icon.setAttribute('href', iconClass);\n svg.appendChild(icon);\n\n return svg;\n }\n const icon = document.createElement('i');\n icon.classList.add(...iconClass.split(' '));\n return icon;\n }\n\n /**\n * A document click event to hide the widget if click is outside\n * @private\n * @param e MouseEvent\n */\n private _documentClickEvent = (e: MouseEvent) => {\n if (this.optionsStore.options.debug || (window as any).debug) return; //eslint-disable-line @typescript-eslint/no-explicit-any\n\n if (\n this._isVisible &&\n !e.composedPath().includes(this.widget) && // click inside the widget\n !e.composedPath()?.includes(this.optionsStore.element) // click on the element\n ) {\n this.hide();\n }\n };\n\n /**\n * Click event for any action like selecting a date\n * @param e MouseEvent\n * @private\n */\n private _actionsClickEvent = (e: MouseEvent) => {\n this._eventEmitters.action.emit({ e: e });\n };\n\n /**\n * Causes the widget to get rebuilt on next show. If the picker is already open\n * then hide and reshow it.\n * @private\n */\n _rebuild() {\n const wasVisible = this._isVisible;\n this._dispose();\n if (wasVisible) this.show();\n }\n\n refreshCurrentView() {\n //if the widget is not showing, just destroy it\n if (!this._isVisible) this._dispose();\n\n switch (this.optionsStore.currentView) {\n case 'clock':\n this._update('clock');\n break;\n case 'calendar':\n this._update(Unit.date);\n break;\n case 'months':\n this._update(Unit.month);\n break;\n case 'years':\n this._update(Unit.year);\n break;\n case 'decades':\n this._update('decade');\n break;\n }\n }\n}\n\nexport type Paint = (\n unit: Unit | 'decade',\n innerDate: DateTime,\n classes: string[],\n element: HTMLElement\n) => void;\n","import { DateTime, Unit } from './datetime';\nimport Collapse from './display/collapse';\nimport Namespace from './utilities/namespace';\nimport Dates from './dates';\nimport Validation from './validation';\nimport Display from './display';\nimport { EventEmitters } from './utilities/event-emitter';\nimport { serviceLocator } from './utilities/service-locator.js';\nimport ActionTypes from './utilities/action-types';\nimport CalendarModes from './utilities/calendar-modes';\nimport { OptionsStore } from './utilities/optionsStore';\n\n/**\n * Logic for various click actions\n */\nexport default class Actions {\n private optionsStore: OptionsStore;\n private validation: Validation;\n private dates: Dates;\n private display: Display;\n private _eventEmitters: EventEmitters;\n\n constructor() {\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.dates = serviceLocator.locate(Dates);\n this.validation = serviceLocator.locate(Validation);\n this.display = serviceLocator.locate(Display);\n this._eventEmitters = serviceLocator.locate(EventEmitters);\n\n this._eventEmitters.action.subscribe((result) => {\n this.do(result.e, result.action);\n });\n }\n\n /**\n * Performs the selected `action`. See ActionTypes\n * @param e This is normally a click event\n * @param action If not provided, then look for a [data-action]\n */\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n do(e: any, action?: ActionTypes) {\n const currentTarget = e?.currentTarget as HTMLElement;\n if (currentTarget?.classList?.contains(Namespace.css.disabled)) return;\n action = action || (currentTarget?.dataset?.action as ActionTypes);\n const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate)\n .clone;\n\n switch (action) {\n case ActionTypes.next:\n case ActionTypes.previous:\n this.handleNextPrevious(action);\n break;\n case ActionTypes.changeCalendarView:\n this.display._showMode(1);\n this.display._updateCalendarHeader();\n break;\n case ActionTypes.selectMonth:\n case ActionTypes.selectYear:\n case ActionTypes.selectDecade:\n this.handleSelectCalendarMode(action, currentTarget);\n break;\n case ActionTypes.selectDay:\n this.handleSelectDay(currentTarget);\n break;\n case ActionTypes.selectHour: {\n let hour = +currentTarget.dataset.value;\n if (lastPicked.hours >= 12 && this.optionsStore.isTwelveHour)\n hour += 12;\n lastPicked.hours = hour;\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n this.hideOrClock(e);\n break;\n }\n case ActionTypes.selectMinute: {\n lastPicked.minutes = +currentTarget.dataset.value;\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n this.hideOrClock(e);\n break;\n }\n case ActionTypes.selectSecond: {\n lastPicked.seconds = +currentTarget.dataset.value;\n this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n this.hideOrClock(e);\n break;\n }\n case ActionTypes.incrementHours:\n this.manipulateAndSet(lastPicked, Unit.hours);\n break;\n case ActionTypes.incrementMinutes:\n this.manipulateAndSet(\n lastPicked,\n Unit.minutes,\n this.optionsStore.options.stepping\n );\n break;\n case ActionTypes.incrementSeconds:\n this.manipulateAndSet(lastPicked, Unit.seconds);\n break;\n case ActionTypes.decrementHours:\n this.manipulateAndSet(lastPicked, Unit.hours, -1);\n break;\n case ActionTypes.decrementMinutes:\n this.manipulateAndSet(\n lastPicked,\n Unit.minutes,\n this.optionsStore.options.stepping * -1\n );\n break;\n case ActionTypes.decrementSeconds:\n this.manipulateAndSet(lastPicked, Unit.seconds, -1);\n break;\n case ActionTypes.toggleMeridiem:\n this.manipulateAndSet(\n lastPicked,\n Unit.hours,\n this.dates.lastPicked.hours >= 12 ? -12 : 12\n );\n break;\n case ActionTypes.togglePicker:\n this.handleToggle(currentTarget);\n break;\n case ActionTypes.showClock:\n case ActionTypes.showHours:\n case ActionTypes.showMinutes:\n case ActionTypes.showSeconds:\n //make sure the clock is actually displaying\n if (\n !this.optionsStore.options.display.sideBySide &&\n this.optionsStore.currentView !== 'clock'\n ) {\n //hide calendar\n Collapse.hideImmediately(this.display.dateContainer);\n //show clock\n Collapse.showImmediately(this.display.timeContainer);\n }\n this.handleShowClockContainers(action);\n break;\n case ActionTypes.clear:\n this.dates.setValue(null);\n this.display._updateCalendarHeader();\n break;\n case ActionTypes.close:\n this.display.hide();\n break;\n case ActionTypes.today: {\n const today = new DateTime().setLocalization(\n this.optionsStore.options.localization\n );\n this._eventEmitters.updateViewDate.emit(today);\n\n //todo this this really a good idea?\n if (this.validation.isValid(today, Unit.date))\n this.dates.setValue(today, this.dates.lastPickedIndex);\n break;\n }\n }\n }\n\n private handleShowClockContainers(action: ActionTypes) {\n if (!this.display._hasTime) {\n Namespace.errorMessages.throwError(\n 'Cannot show clock containers when time is disabled.'\n );\n /* ignore coverage: should never happen */\n return;\n }\n\n this.optionsStore.currentView = 'clock';\n this.display.widget\n .querySelectorAll(`.${Namespace.css.timeContainer} > div`)\n .forEach(\n (htmlElement: HTMLElement) => (htmlElement.style.display = 'none')\n );\n\n let classToUse = '';\n switch (action) {\n case ActionTypes.showClock:\n classToUse = Namespace.css.clockContainer;\n this.display._update('clock');\n break;\n case ActionTypes.showHours:\n classToUse = Namespace.css.hourContainer;\n this.display._update(Unit.hours);\n break;\n case ActionTypes.showMinutes:\n classToUse = Namespace.css.minuteContainer;\n this.display._update(Unit.minutes);\n break;\n case ActionTypes.showSeconds:\n classToUse = Namespace.css.secondContainer;\n this.display._update(Unit.seconds);\n break;\n }\n\n ((\n this.display.widget.getElementsByClassName(classToUse)[0]\n )).style.display = 'grid';\n }\n\n private handleNextPrevious(action: ActionTypes) {\n const { unit, step } =\n CalendarModes[this.optionsStore.currentCalendarViewMode];\n if (action === ActionTypes.next)\n this.optionsStore.viewDate.manipulate(step, unit);\n else this.optionsStore.viewDate.manipulate(step * -1, unit);\n this._eventEmitters.viewUpdate.emit();\n\n this.display._showMode();\n }\n\n /**\n * After setting the value it will either show the clock or hide the widget.\n * @param e\n */\n private hideOrClock(e) {\n if (\n !this.optionsStore.isTwelveHour &&\n !this.optionsStore.options.display.components.minutes &&\n !this.optionsStore.options.display.keepOpen &&\n !this.optionsStore.options.display.inline\n ) {\n this.display.hide();\n } else {\n this.do(e, ActionTypes.showClock);\n }\n }\n\n /**\n * Common function to manipulate {@link lastPicked} by `unit`.\n * @param lastPicked\n * @param unit\n * @param value Value to change by\n */\n private manipulateAndSet(lastPicked: DateTime, unit: Unit, value = 1) {\n const newDate = lastPicked.manipulate(value, unit);\n if (this.validation.isValid(newDate, unit)) {\n this.dates.setValue(newDate, this.dates.lastPickedIndex);\n }\n }\n\n private handleSelectCalendarMode(\n action:\n | ActionTypes.selectMonth\n | ActionTypes.selectYear\n | ActionTypes.selectDecade,\n currentTarget: HTMLElement\n ) {\n const value = +currentTarget.dataset.value;\n switch (action) {\n case ActionTypes.selectMonth:\n this.optionsStore.viewDate.month = value;\n break;\n case ActionTypes.selectYear:\n case ActionTypes.selectDecade:\n this.optionsStore.viewDate.year = value;\n break;\n }\n\n if (\n this.optionsStore.currentCalendarViewMode ===\n this.optionsStore.minimumCalendarViewMode\n ) {\n this.dates.setValue(\n this.optionsStore.viewDate,\n this.dates.lastPickedIndex\n );\n if (!this.optionsStore.options.display.inline) {\n this.display.hide();\n }\n } else {\n this.display._showMode(-1);\n }\n }\n\n private handleToggle(currentTarget: HTMLElement) {\n if (\n currentTarget.getAttribute('title') ===\n this.optionsStore.options.localization.selectDate\n ) {\n currentTarget.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectTime\n );\n currentTarget.innerHTML = this.display._iconTag(\n this.optionsStore.options.display.icons.time\n ).outerHTML;\n\n this.display._updateCalendarHeader();\n this.optionsStore.refreshCurrentView();\n } else {\n currentTarget.setAttribute(\n 'title',\n this.optionsStore.options.localization.selectDate\n );\n currentTarget.innerHTML = this.display._iconTag(\n this.optionsStore.options.display.icons.date\n ).outerHTML;\n if (this.display._hasTime) {\n this.handleShowClockContainers(ActionTypes.showClock);\n this.display._update('clock');\n }\n }\n\n this.display.widget\n .querySelectorAll(\n `.${Namespace.css.dateContainer}, .${Namespace.css.timeContainer}`\n )\n .forEach((htmlElement: HTMLElement) => Collapse.toggle(htmlElement));\n this._eventEmitters.viewUpdate.emit();\n }\n\n private handleSelectDay(currentTarget: HTMLElement) {\n const day = this.optionsStore.viewDate.clone;\n if (currentTarget.classList.contains(Namespace.css.old)) {\n day.manipulate(-1, Unit.month);\n }\n if (currentTarget.classList.contains(Namespace.css.new)) {\n day.manipulate(1, Unit.month);\n }\n\n day.date = +currentTarget.dataset.day;\n if (this.optionsStore.options.dateRange) this.handleDateRange(day);\n else if (this.optionsStore.options.multipleDates) {\n this.handleMultiDate(day);\n } else {\n this.dates.setValue(day, this.dates.lastPickedIndex);\n }\n\n if (\n !this.display._hasTime &&\n !this.optionsStore.options.display.keepOpen &&\n !this.optionsStore.options.display.inline &&\n !this.optionsStore.options.multipleDates &&\n !this.optionsStore.options.dateRange\n ) {\n this.display.hide();\n }\n }\n\n private handleMultiDate(day: DateTime) {\n let index = this.dates.pickedIndex(day, Unit.date);\n console.log(index);\n if (index !== -1) {\n this.dates.setValue(null, index); //deselect multi-date\n } else {\n index = this.dates.lastPickedIndex + 1;\n if (this.dates.picked.length === 0) index = 0;\n\n this.dates.setValue(day, index);\n }\n }\n\n private handleDateRange(day: DateTime) {\n switch (this.dates.picked.length) {\n case 2: {\n this.dates.clear();\n break;\n }\n case 1: {\n const other = this.dates.picked[0];\n if (day.getTime() === other.getTime()) {\n this.dates.clear();\n break;\n }\n if (day.isBefore(other)) {\n this.dates.setValue(day, 0);\n this.dates.setValue(other, 1);\n return;\n } else {\n this.dates.setValue(day, 1);\n return;\n }\n }\n }\n\n this.dates.setValue(day, 0);\n }\n}\n","import Display from './display/index';\nimport Dates from './dates';\nimport Actions from './actions';\nimport {\n DateTime,\n DateTimeFormatOptions,\n guessHourCycle,\n Unit,\n} from './datetime';\nimport Namespace from './utilities/namespace';\nimport Options from './utilities/options';\nimport {\n BaseEvent,\n ChangeEvent,\n ViewUpdateEvent,\n} from './utilities/event-types';\nimport { EventEmitters } from './utilities/event-emitter';\nimport {\n serviceLocator,\n setupServiceLocator,\n} from './utilities/service-locator';\nimport CalendarModes from './utilities/calendar-modes';\nimport DefaultOptions, {\n DefaultEnLocalization,\n} from './utilities/default-options';\nimport ActionTypes from './utilities/action-types';\nimport { OptionsStore } from './utilities/optionsStore';\nimport { OptionConverter } from './utilities/optionConverter';\n\n/**\n * A robust and powerful date/time picker component.\n */\nclass TempusDominus {\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n _subscribers: { [key: string]: ((event: any) => Record)[] } =\n {};\n private _isDisabled = false;\n private _toggle: HTMLElement;\n private _currentPromptTimeTimeout: NodeJS.Timeout;\n private actions: Actions;\n private optionsStore: OptionsStore;\n private _eventEmitters: EventEmitters;\n display: Display;\n dates: Dates;\n\n constructor(element: HTMLElement, options: Options = {} as Options) {\n setupServiceLocator();\n this._eventEmitters = serviceLocator.locate(EventEmitters);\n this.optionsStore = serviceLocator.locate(OptionsStore);\n this.display = serviceLocator.locate(Display);\n this.dates = serviceLocator.locate(Dates);\n this.actions = serviceLocator.locate(Actions);\n\n if (!element) {\n Namespace.errorMessages.mustProvideElement();\n }\n\n this.optionsStore.element = element;\n this._initializeOptions(options, DefaultOptions, true);\n this.optionsStore.viewDate.setLocalization(\n this.optionsStore.options.localization\n );\n this.optionsStore.unset = true;\n\n this._initializeInput();\n this._initializeToggle();\n\n if (this.optionsStore.options.display.inline) this.display.show();\n\n this._eventEmitters.triggerEvent.subscribe((e) => {\n this._triggerEvent(e);\n });\n\n this._eventEmitters.viewUpdate.subscribe(() => {\n this._viewUpdate();\n });\n\n this._eventEmitters.updateViewDate.subscribe((dateTime) => {\n this.viewDate = dateTime;\n });\n }\n\n get viewDate() {\n return this.optionsStore.viewDate;\n }\n\n set viewDate(value) {\n this.optionsStore.viewDate = value;\n this.optionsStore.viewDate.setLocalization(\n this.optionsStore.options.localization\n );\n this.display._update(\n this.optionsStore.currentView === 'clock' ? 'clock' : 'calendar'\n );\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Update the picker options. If `reset` is provide `options` will be merged with DefaultOptions instead.\n * @param options\n * @param reset\n * @public\n */\n updateOptions(options, reset = false): void {\n if (reset) this._initializeOptions(options, DefaultOptions);\n else this._initializeOptions(options, this.optionsStore.options);\n\n this.optionsStore.viewDate.setLocalization(\n this.optionsStore.options.localization\n );\n this.display.refreshCurrentView();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Toggles the picker open or closed. If the picker is disabled, nothing will happen.\n * @public\n */\n toggle(): void {\n if (this._isDisabled) return;\n this.display.toggle();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Shows the picker unless the picker is disabled.\n * @public\n */\n show(): void {\n if (this._isDisabled) return;\n this.display.show();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Hides the picker unless the picker is disabled.\n * @public\n */\n hide(): void {\n this.display.hide();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Disables the picker and the target input field.\n * @public\n */\n disable(): void {\n this._isDisabled = true;\n // todo this might be undesired. If a dev disables the input field to\n // only allow using the picker, this will break that.\n this.optionsStore.input?.setAttribute('disabled', 'disabled');\n this.display.hide();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Enables the picker and the target input field.\n * @public\n */\n enable(): void {\n this._isDisabled = false;\n this.optionsStore.input?.removeAttribute('disabled');\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Clears all the selected dates\n * @public\n */\n clear(): void {\n this.optionsStore.input.value = '';\n this.dates.clear();\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Allows for a direct subscription to picker events, without having to use addEventListener on the element.\n * @param eventTypes See Namespace.Events\n * @param callbacks Function to call when event is triggered\n * @public\n */\n subscribe(\n eventTypes: string | string[],\n callbacks: (event: any) => void | ((event: any) => void)[] //eslint-disable-line @typescript-eslint/no-explicit-any\n ): { unsubscribe: () => void } | { unsubscribe: () => void }[] {\n if (typeof eventTypes === 'string') {\n eventTypes = [eventTypes];\n }\n let callBackArray: any[]; //eslint-disable-line @typescript-eslint/no-explicit-any\n if (!Array.isArray(callbacks)) {\n callBackArray = [callbacks];\n } else {\n callBackArray = callbacks;\n }\n\n if (eventTypes.length !== callBackArray.length) {\n Namespace.errorMessages.subscribeMismatch();\n }\n\n const returnArray = [];\n\n for (let i = 0; i < eventTypes.length; i++) {\n const eventType = eventTypes[i];\n if (!Array.isArray(this._subscribers[eventType])) {\n this._subscribers[eventType] = [];\n }\n\n this._subscribers[eventType].push(callBackArray[i]);\n\n returnArray.push({\n unsubscribe: this._unsubscribe.bind(\n this,\n eventType,\n this._subscribers[eventType].length - 1\n ),\n });\n\n if (eventTypes.length === 1) {\n return returnArray[0];\n }\n }\n\n return returnArray;\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Hides the picker and removes event listeners\n */\n dispose() {\n this.display.hide();\n // this will clear the document click event listener\n this.display._dispose();\n this._eventEmitters.destroy();\n this.optionsStore.input?.removeEventListener(\n 'change',\n this._inputChangeEvent\n );\n if (this.optionsStore.options.allowInputToggle) {\n this.optionsStore.input?.removeEventListener(\n 'click',\n this._toggleClickEvent\n );\n this.optionsStore.input?.removeEventListener(\n 'focus',\n this._toggleClickEvent\n );\n }\n this._toggle?.removeEventListener('click', this._toggleClickEvent);\n this._subscribers = {};\n }\n\n /**\n * Updates the options to use the provided language.\n * THe language file must be loaded first.\n * @param language\n */\n locale(language: string) {\n const asked = loadedLocales[language];\n if (!asked) return;\n this.updateOptions({\n localization: asked,\n });\n }\n\n /**\n * Triggers an event like ChangeEvent when the picker has updated the value\n * of a selected date.\n * @param event Accepts a BaseEvent object.\n * @private\n */\n private _triggerEvent(event: BaseEvent) {\n event.viewMode = this.optionsStore.currentView;\n\n const isChangeEvent = event.type === Namespace.events.change;\n if (isChangeEvent) {\n const { date, oldDate, isClear } = event as ChangeEvent;\n if (\n (date && oldDate && date.isSame(oldDate)) ||\n (!isClear && !date && !oldDate)\n ) {\n return;\n }\n this._handleAfterChangeEvent(event as ChangeEvent);\n\n this.optionsStore.input?.dispatchEvent(\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n new CustomEvent('change', { detail: event as any })\n );\n }\n\n this.optionsStore.element.dispatchEvent(\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n new CustomEvent(event.type, { detail: event as any })\n );\n\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((window as any).jQuery) {\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n const $ = (window as any).jQuery;\n\n if (isChangeEvent && this.optionsStore.input) {\n $(this.optionsStore.input).trigger(event);\n } else {\n $(this.optionsStore.element).trigger(event);\n }\n }\n\n this._publish(event);\n }\n\n private _publish(event: BaseEvent) {\n // return if event is not subscribed\n if (!Array.isArray(this._subscribers[event.type])) {\n return;\n }\n\n // Trigger callback for each subscriber\n this._subscribers[event.type].forEach((callback) => {\n callback(event);\n });\n }\n\n /**\n * Fires a ViewUpdate event when, for example, the month view is changed.\n * @private\n */\n private _viewUpdate() {\n this._triggerEvent({\n type: Namespace.events.update,\n viewDate: this.optionsStore.viewDate.clone,\n } as ViewUpdateEvent);\n }\n\n private _unsubscribe(eventName, index) {\n this._subscribers[eventName].splice(index, 1);\n }\n\n /**\n * Merges two Option objects together and validates options type\n * @param config new Options\n * @param mergeTo Options to merge into\n * @param includeDataset When true, the elements data-td attributes will be included in the\n * @private\n */\n private _initializeOptions(\n config: Options,\n mergeTo: Options,\n includeDataset = false\n ): void {\n let newConfig = OptionConverter.deepCopy(config);\n newConfig = OptionConverter._mergeOptions(newConfig, mergeTo);\n if (includeDataset)\n newConfig = OptionConverter._dataToOptions(\n this.optionsStore.element,\n newConfig\n );\n\n OptionConverter._validateConflicts(newConfig);\n\n newConfig.viewDate = newConfig.viewDate.setLocalization(\n newConfig.localization\n );\n\n if (!this.optionsStore.viewDate.isSame(newConfig.viewDate)) {\n this.optionsStore.viewDate = newConfig.viewDate;\n }\n\n /**\n * Sets the minimum view allowed by the picker. For example the case of only\n * allowing year and month to be selected but not date.\n */\n if (newConfig.display.components.year) {\n this.optionsStore.minimumCalendarViewMode = 2;\n }\n if (newConfig.display.components.month) {\n this.optionsStore.minimumCalendarViewMode = 1;\n }\n if (newConfig.display.components.date) {\n this.optionsStore.minimumCalendarViewMode = 0;\n }\n\n this.optionsStore.currentCalendarViewMode = Math.max(\n this.optionsStore.minimumCalendarViewMode,\n this.optionsStore.currentCalendarViewMode\n );\n\n // Update view mode if needed\n if (\n CalendarModes[this.optionsStore.currentCalendarViewMode].name !==\n newConfig.display.viewMode\n ) {\n this.optionsStore.currentCalendarViewMode = Math.max(\n CalendarModes.findIndex((x) => x.name === newConfig.display.viewMode),\n this.optionsStore.minimumCalendarViewMode\n );\n }\n\n if (this.display?.isVisible) {\n this.display._update('all');\n }\n\n if (\n newConfig.display.components.useTwentyfourHour &&\n newConfig.localization.hourCycle === undefined\n )\n newConfig.localization.hourCycle = 'h24';\n else if (newConfig.localization.hourCycle === undefined) {\n newConfig.localization.hourCycle = guessHourCycle(\n newConfig.localization.locale\n );\n }\n\n this.optionsStore.options = newConfig;\n }\n\n /**\n * Checks if an input field is being used, attempts to locate one and sets an\n * event listener if found.\n * @private\n */\n private _initializeInput() {\n if (this.optionsStore.element.tagName == 'INPUT') {\n this.optionsStore.input = this.optionsStore.element as HTMLInputElement;\n } else {\n const query = this.optionsStore.element.dataset.tdTargetInput;\n if (query == undefined || query == 'nearest') {\n this.optionsStore.input =\n this.optionsStore.element.querySelector('input');\n } else {\n this.optionsStore.input =\n this.optionsStore.element.querySelector(query);\n }\n }\n\n if (!this.optionsStore.input) return;\n\n if (!this.optionsStore.input.value && this.optionsStore.options.defaultDate)\n this.optionsStore.input.value = this.dates.formatInput(\n this.optionsStore.options.defaultDate\n );\n\n this.optionsStore.input.addEventListener('change', this._inputChangeEvent);\n if (this.optionsStore.options.allowInputToggle) {\n this.optionsStore.input.addEventListener('click', this._toggleClickEvent);\n this.optionsStore.input.addEventListener('focus', this._toggleClickEvent);\n }\n\n if (this.optionsStore.input.value) {\n this._inputChangeEvent();\n }\n }\n\n /**\n * Attempts to locate a toggle for the picker and sets an event listener\n * @private\n */\n private _initializeToggle() {\n if (this.optionsStore.options.display.inline) return;\n let query = this.optionsStore.element.dataset.tdTargetToggle;\n if (query == 'nearest') {\n query = '[data-td-toggle=\"datetimepicker\"]';\n }\n this._toggle =\n query == undefined\n ? this.optionsStore.element\n : this.optionsStore.element.querySelector(query);\n this._toggle.addEventListener('click', this._toggleClickEvent);\n }\n\n /**\n * If the option is enabled this will render the clock view after a date pick.\n * @param e change event\n * @private\n */\n private _handleAfterChangeEvent(e: ChangeEvent) {\n if (\n // options is disabled\n !this.optionsStore.options.promptTimeOnDateChange ||\n this.optionsStore.options.multipleDates ||\n this.optionsStore.options.display.inline ||\n this.optionsStore.options.display.sideBySide ||\n // time is disabled\n !this.display._hasTime ||\n // clock component is already showing\n this.display.widget\n ?.getElementsByClassName(Namespace.css.show)[0]\n .classList.contains(Namespace.css.timeContainer)\n )\n return;\n\n // First time ever. If useCurrent option is set to true (default), do nothing\n // because the first date is selected automatically.\n // or date didn't change (time did) or date changed because time did.\n if (\n (!e.oldDate && this.optionsStore.options.useCurrent) ||\n (e.oldDate && e.date?.isSame(e.oldDate))\n ) {\n return;\n }\n\n clearTimeout(this._currentPromptTimeTimeout);\n this._currentPromptTimeTimeout = setTimeout(() => {\n if (this.display.widget) {\n this._eventEmitters.action.emit({\n e: {\n currentTarget: this.display.widget.querySelector(\n `.${Namespace.css.switch}`\n ),\n },\n action: ActionTypes.togglePicker,\n });\n }\n }, this.optionsStore.options.promptTimeOnDateChangeTransitionDelay);\n }\n\n /**\n * Event for when the input field changes. This is a class level method so there's\n * something for the remove listener function.\n * @private\n */\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _inputChangeEvent = (event?: any) => {\n const internallyTriggered = event?.detail;\n if (internallyTriggered) return;\n\n const setViewDate = () => {\n if (this.dates.lastPicked)\n this.optionsStore.viewDate = this.dates.lastPicked.clone;\n };\n\n const value = this.optionsStore.input.value;\n if (this.optionsStore.options.multipleDates) {\n try {\n const valueSplit = value.split(\n this.optionsStore.options.multipleDatesSeparator\n );\n for (let i = 0; i < valueSplit.length; i++) {\n this.dates.setFromInput(valueSplit[i], i);\n }\n setViewDate();\n } catch {\n console.warn(\n 'TD: Something went wrong trying to set the multipleDates values from the input field.'\n );\n }\n } else {\n this.dates.setFromInput(value, 0);\n setViewDate();\n }\n };\n\n /**\n * Event for when the toggle is clicked. This is a class level method so there's\n * something for the remove listener function.\n * @private\n */\n private _toggleClickEvent = () => {\n if (\n (this.optionsStore.element as HTMLInputElement)?.disabled ||\n this.optionsStore.input?.disabled\n )\n return;\n this.toggle();\n };\n}\n\n/**\n * Whenever a locale is loaded via a plugin then store it here based on the\n * locale name. E.g. loadedLocales['ru']\n */\nconst loadedLocales = {};\n\n// noinspection JSUnusedGlobalSymbols\n/**\n * Called from a locale plugin.\n * @param l locale object for localization options\n */\nconst loadLocale = (l) => {\n if (loadedLocales[l.name]) return;\n loadedLocales[l.name] = l.localization;\n};\n\n/**\n * A sets the global localization options to the provided locale name.\n * `loadLocale` MUST be called first.\n * @param l\n */\nconst locale = (l: string) => {\n const asked = loadedLocales[l];\n if (!asked) return;\n DefaultOptions.localization = asked;\n};\n\n// noinspection JSUnusedGlobalSymbols\n/**\n * Called from a plugin to extend or override picker defaults.\n * @param plugin\n * @param option\n */\nconst extend = function (plugin, option = undefined) {\n if (!plugin) return tempusDominus;\n if (!plugin.installed) {\n // install plugin only once\n plugin(\n option,\n { TempusDominus, Dates, Display, DateTime, Namespace },\n tempusDominus\n );\n plugin.installed = true;\n }\n return tempusDominus;\n};\n\nconst version = '6.7.10';\n\nconst tempusDominus = {\n TempusDominus,\n extend,\n loadLocale,\n locale,\n Namespace,\n DefaultOptions,\n DateTime,\n Unit,\n version,\n DefaultEnLocalization,\n};\n\nexport {\n TempusDominus,\n extend,\n loadLocale,\n locale,\n Namespace,\n DefaultOptions,\n DateTime,\n Unit,\n version,\n DateTimeFormatOptions,\n Options,\n DefaultEnLocalization,\n};\n"],"names":["Unit","DefaultFormatLocalization","ActionTypes","SecondDisplay"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/tempus-dominus.min.js b/dist/js/tempus-dominus.min.js deleted file mode 100644 index e316e3c19..000000000 --- a/dist/js/tempus-dominus.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).tempusDominus={})}(this,(function(t){"use strict";class e extends Error{}const s="tempus-dominus";class i{}i.NAME=s,i.dataKey="td",i.events=new class{constructor(){this.key=".td",this.change=`change${this.key}`,this.update=`update${this.key}`,this.error=`error${this.key}`,this.show=`show${this.key}`,this.hide=`hide${this.key}`,this.blur=`blur${this.key}`,this.focus=`focus${this.key}`,this.keyup=`keyup${this.key}`,this.keydown=`keydown${this.key}`}},i.css=new class{constructor(){this.widget=`${s}-widget`,this.calendarHeader="calendar-header",this.switch="picker-switch",this.toolbar="toolbar",this.noHighlight="no-highlight",this.sideBySide="timepicker-sbs",this.previous="previous",this.next="next",this.disabled="disabled",this.old="old",this.new="new",this.active="active",this.dateContainer="date-container",this.decadesContainer=`${this.dateContainer}-decades`,this.decade="decade",this.yearsContainer=`${this.dateContainer}-years`,this.year="year",this.monthsContainer=`${this.dateContainer}-months`,this.month="month",this.daysContainer=`${this.dateContainer}-days`,this.day="day",this.calendarWeeks="cw",this.dayOfTheWeek="dow",this.today="today",this.weekend="weekend",this.rangeIn="range-in",this.rangeStart="range-start",this.rangeEnd="range-end",this.timeContainer="time-container",this.separator="separator",this.clockContainer=`${this.timeContainer}-clock`,this.hourContainer=`${this.timeContainer}-hour`,this.minuteContainer=`${this.timeContainer}-minute`,this.secondContainer=`${this.timeContainer}-second`,this.hour="hour",this.minute="minute",this.second="second",this.toggleMeridiem="toggleMeridiem",this.show="show",this.collapsing="td-collapsing",this.collapse="td-collapse",this.inline="inline",this.lightTheme="light",this.darkTheme="dark",this.isDarkPreferredQuery="(prefers-color-scheme: dark)"}},i.errorMessages=new class{constructor(){this.base="TD:",this.failedToSetInvalidDate="Failed to set invalid date",this.failedToParseInput="Failed parse input field"}unexpectedOption(t){const s=new e(`${this.base} Unexpected option: ${t} does not match a known option.`);throw s.code=1,s}unexpectedOptions(t){const s=new e(`${this.base}: ${t.join(", ")}`);throw s.code=1,s}unexpectedOptionValue(t,s,i){const o=new e(`${this.base} Unexpected option value: ${t} does not accept a value of "${s}". Valid values are: ${i.join(", ")}`);throw o.code=2,o}typeMismatch(t,s,i){const o=new e(`${this.base} Mismatch types: ${t} has a type of ${s} instead of the required ${i}`);throw o.code=3,o}numbersOutOfRange(t,s,i){const o=new e(`${this.base} ${t} expected an array of number between ${s} and ${i}.`);throw o.code=4,o}failedToParseDate(t,s,i=!1){const o=new e(`${this.base} Could not correctly parse "${s}" to a date for ${t}.`);if(o.code=5,!i)throw o;console.warn(o)}mustProvideElement(){const t=new e(`${this.base} No element was provided.`);throw t.code=6,t}subscribeMismatch(){const t=new e(`${this.base} The subscribed events does not match the number of callbacks`);throw t.code=7,t}conflictingConfiguration(t){const s=new e(`${this.base} A configuration value conflicts with another rule. ${t}`);throw s.code=8,s}customDateFormatError(t){const s=new e(`${this.base} Custom Date Format: ${t}`);throw s.code=9,s}dateString(){console.warn(`${this.base} Using a string for date options is not recommended unless you specify an ISO string or use the customDateFormat plugin.`)}deprecatedWarning(t,e){console.warn(`${this.base} Warning ${t} is deprecated and will be removed in a future version. ${e}`)}throwError(t){const s=new e(`${this.base} ${t}`);throw s.code=9,s}};var o,a={...{dateFormats:{LTS:"h:mm:ss T",LT:"h:mm T",L:"MM/dd/yyyy",LL:"MMMM d, yyyy",LLL:"MMMM d, yyyy h:mm T",LLLL:"dddd, MMMM d, yyyy h:mm T"},format:"L LT",locale:"default",hourCycle:void 0,ordinal:t=>{const e=["th","st","nd","rd"],s=t%100;return`[${t}${e[(s-20)%10]||e[s]||e[0]}]`}}};t.Unit=void 0,(o=t.Unit||(t.Unit={})).seconds="seconds",o.minutes="minutes",o.hours="hours",o.date="date",o.month="month",o.year="year";const n={month:"2-digit",day:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"},r=t=>{switch(t){case"date":return{dateStyle:"short"};case"month":return{month:"numeric",year:"numeric"};case"year":return{year:"numeric"}}},d=t=>{if(!t)return"h12";const e={hour:"2-digit",minute:"2-digit",numberingSystem:"latn"},s=(new l).setLocalization({locale:t});s.hours=0;const i=s.parts(void 0,e).hour;if("12"===i)return"h12";if("24"===i)return"h24";s.hours=23;const o=s.parts(void 0,e).hour;return"00"===i&&"11"===o?"h11":"00"===i&&"23"===o?"h23":void console.warn(`couldn't determine hour cycle for ${t}. start: ${i}. end: ${o}`)};class l extends Date{constructor(){super(...arguments),this.localization=a,this.nonLeapLadder=[0,31,59,90,120,151,181,212,243,273,304,334],this.leapLadder=[0,31,60,91,121,152,182,213,244,274,305,335],this.dateTimeRegex=/(\[[^[\]]*])|y{1,4}|M{1,4}|d{1,4}|H{1,2}|h{1,2}|t|T|m{1,2}|s{1,2}|f{3}/g,this.formattingTokens=/(\[[^[\]]*])|([-_:/.,()\s]+)|(T|t|yyyy|yy?|MM?M?M?|Do|dd?|hh?|HH?|mm?|ss?)/g,this.match2=/\d\d/,this.match3=/\d{3}/,this.match4=/\d{4}/,this.match1to2=/\d\d?/,this.matchSigned=/[+-]?\d+/,this.matchOffset=/[+-]\d\d:?(\d\d)?|Z/,this.matchWord=/[^\d_:/,\-()\s]+/,this.zoneExpressions=[this.matchOffset,(t,e)=>{t.offset=this.offsetFromString(e)}],this.expressions={t:[this.matchWord,(t,e)=>{t.afternoon=this.meridiemMatch(e)}],T:[this.matchWord,(t,e)=>{t.afternoon=this.meridiemMatch(e)}],fff:[this.match3,(t,e)=>{t.milliseconds=+e}],s:[this.match1to2,this.addInput("seconds")],ss:[this.match1to2,this.addInput("seconds")],m:[this.match1to2,this.addInput("minutes")],mm:[this.match1to2,this.addInput("minutes")],H:[this.match1to2,this.addInput("hours")],h:[this.match1to2,this.addInput("hours")],HH:[this.match1to2,this.addInput("hours")],hh:[this.match1to2,this.addInput("hours")],d:[this.match1to2,this.addInput("day")],dd:[this.match2,this.addInput("day")],Do:[this.matchWord,(t,e)=>{if([t.day]=e.match(/\d+/),this.localization.ordinal)for(let s=1;s<=31;s+=1)this.localization.ordinal(s).replace(/[[\]]/g,"")===e&&(t.day=s)}],M:[this.match1to2,this.addInput("month")],MM:[this.match2,this.addInput("month")],MMM:[this.matchWord,(t,e)=>{const s=this.getAllMonths(),i=(this.getAllMonths("short")||s.map((t=>t.slice(0,3)))).indexOf(e)+1;if(i<1)throw new Error;t.month=i%12||i}],MMMM:[this.matchWord,(t,e)=>{const s=this.getAllMonths().indexOf(e)+1;if(s<1)throw new Error;t.month=s%12||s}],y:[this.matchSigned,this.addInput("year")],yy:[this.match2,(t,e)=>{t.year=this.parseTwoDigitYear(e)}],yyyy:[this.match4,this.addInput("year")]}}setLocale(t){return this.localization||(this.localization=a,this.localization.locale=t),this}setLocalization(t){return this.localization=t,this}static convert(t,e="default",s=undefined){if(!t)throw new Error("A date is required");return s||((s=a).locale=e),new l(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()).setLocalization(s)}get clone(){return new l(this.year,this.month,this.date,this.hours,this.minutes,this.seconds,this.getMilliseconds()).setLocalization(this.localization)}static isValid(t){return void 0!==t&&"null"!==JSON.stringify(t)&&t.constructor.name===l.name}startOf(e,s=0){if(void 0===this[e])throw new Error(`Unit '${e}' is not valid`);switch(e){case"seconds":this.setMilliseconds(0);break;case"minutes":this.setSeconds(0,0);break;case"hours":this.setMinutes(0,0,0);break;case"date":this.setHours(0,0,0,0);break;case"weekDay":{if(this.startOf(t.Unit.date),this.weekDay===s)break;const e=(this.weekDay-s+7)%7;this.manipulate(-1*e,t.Unit.date);break}case"month":this.startOf(t.Unit.date),this.setDate(1);break;case"year":this.startOf(t.Unit.date),this.setMonth(0,1)}return this}endOf(e,s=0){if(void 0===this[e])throw new Error(`Unit '${e}' is not valid`);switch(e){case"seconds":this.setMilliseconds(999);break;case"minutes":this.setSeconds(59,999);break;case"hours":this.setMinutes(59,59,999);break;case"date":this.setHours(23,59,59,999);break;case"weekDay":{this.endOf(t.Unit.date);const e=6+s;if(this.weekDay===e)break;this.manipulate(e-this.weekDay,t.Unit.date);break}case"month":this.endOf(t.Unit.date),this.manipulate(1,t.Unit.month),this.setDate(0);break;case"year":this.endOf(t.Unit.date),this.setMonth(11,31)}return this}manipulate(t,e){if(void 0===this[e])throw new Error(`Unit '${e}' is not valid`);return this[e]+=t,this}isBefore(t,e){if(!l.isValid(t))return!1;if(!e)return this.valueOf()t.valueOf();if(void 0===this[e])throw new Error(`Unit '${e}' is not valid`);return this.clone.startOf(e).valueOf()>t.clone.startOf(e).valueOf()}isSame(t,e){if(!l.isValid(t))return!1;if(!e)return this.valueOf()===t.valueOf();if(void 0===this[e])throw new Error(`Unit '${e}' is not valid`);return t=l.convert(t),this.clone.startOf(e).valueOf()===t.startOf(e).valueOf()}isBetween(t,e,s,i="()"){if(!l.isValid(t)||!l.isValid(e))return!1;if(s&&void 0===this[s])throw new Error(`Unit '${s}' is not valid`);const o="("===i[0],a=")"===i[1],n=o?this.isAfter(t,s):!this.isBefore(t,s),r=a?this.isBefore(e,s):!this.isAfter(e,s);return n&&r}parts(t=this.localization.locale,e={dateStyle:"full",timeStyle:"long"}){const s={};return new Intl.DateTimeFormat(t,e).formatToParts(this).filter((t=>"literal"!==t.type)).forEach((t=>s[t.type]=t.value)),s}get seconds(){return this.getSeconds()}set seconds(t){this.setSeconds(t)}get secondsFormatted(){return this.parts(void 0,n).second}get minutes(){return this.getMinutes()}set minutes(t){this.setMinutes(t)}get minutesFormatted(){return this.parts(void 0,n).minute}get hours(){return this.getHours()}set hours(t){this.setHours(t)}getHoursFormatted(t="h12"){return this.parts(void 0,{...n,hourCycle:t}).hour}meridiem(t=this.localization.locale){return new Intl.DateTimeFormat(t,{hour:"numeric",hour12:!0}).formatToParts(this).find((t=>"dayPeriod"===t.type))?.value}get date(){return this.getDate()}set date(t){this.setDate(t)}get dateFormatted(){return this.parts(void 0,n).day}get weekDay(){return this.getDay()}get month(){return this.getMonth()}set month(t){const e=new Date(this.year,t+1);e.setDate(0);const s=e.getDate();this.date>s&&(this.date=s),this.setMonth(t)}get monthFormatted(){return this.parts(void 0,n).month}get year(){return this.getFullYear()}set year(t){this.setFullYear(t)}get week(){const t=this.computeOrdinal(),e=this.getUTCDay();let s=Math.floor((t-e+10)/7);return s<1?s=this.weeksInWeekYear():s>this.weeksInWeekYear()&&(s=1),s}weeksInWeekYear(){const t=(this.year+Math.floor(this.year/4)-Math.floor(this.year/100)+Math.floor(this.year/400))%7,e=this.year-1,s=(e+Math.floor(e/4)-Math.floor(e/100)+Math.floor(e/400))%7;return 4===t||3===s?53:52}get isLeapYear(){return this.year%4==0&&(this.year%100!=0||this.year%400==0)}computeOrdinal(){return this.date+(this.isLeapYear?this.leapLadder:this.nonLeapLadder)[this.month]}getAllMonths(t="long"){const e=new Intl.DateTimeFormat(this.localization.locale,{month:t}).format;return[...Array(12).keys()].map((t=>e(new Date(2021,t))))}replaceTokens(t,e){return t.replace(/(\[[^[\]]*])|(LTS?|l{1,4}|L{1,4})/g,((t,s,i)=>{const o=i&&i.toUpperCase();return s||e[o]||a.dateFormats[o]}))}parseTwoDigitYear(t){return(t=+t)+(t>68?1900:2e3)}offsetFromString(t){if(!t)return 0;if("Z"===t)return 0;const[e,s,i]=t.match(/([+-]|\d\d)/g),o=60*s+(+i||0);return 0===o?0:"+"===e?-o:o}zoneInformation(t,e){let s=t.parts(this.localization.locale,{timeZoneName:"longOffset"}).timeZoneName.replace("GMT","").replace(":","");const i=s.includes("-");return s=s.replace("-",""),"z"===e?s=s.substring(1,2):"zz"===e&&(s=s.substring(0,2)),`${i?"-":""}${s}`}addInput(t){return(e,s)=>{e[t]=+s}}meridiemMatch(t){const e=new Intl.DateTimeFormat(this.localization.locale,{hour:"numeric",hour12:!0}).formatToParts(new Date(2022,3,4,13)).find((t=>"dayPeriod"===t.type))?.value;return t.toLowerCase()===e.toLowerCase()}correctHours(t){const{afternoon:e}=t;if(void 0!==e){const{hours:s}=t;e?s<12&&(t.hours+=12):12===s&&(t.hours=0),delete t.afternoon}}makeParser(t){const e=(t=this.replaceTokens(t,this.localization.dateFormats)).match(this.formattingTokens),{length:s}=e;for(let t=0;t{const i={hours:0,minutes:0,seconds:0,milliseconds:0};for(let o=0,a=0;o-1)return new l(("X"===e.format?1e3:1)*+t);const i=s.makeParser(e.format),{year:o,month:a,day:n,hours:r,minutes:d,seconds:c,milliseconds:h,zone:p}=i(t),u=n||(o||a?1:s.getDate()),m=o||s.getFullYear();let y=0;return o&&!a||(y=a>0?a-1:s.getMonth()),p?new l(Date.UTC(m,y,u,r,d,c,h+60*p.offset*1e3)):new l(m,y,u,r,d,c,h)}catch(s){i.errorMessages.customDateFormatError(`Unable to parse provided input: ${t}, format: ${e.format}`)}}format(t,e=this.localization.locale){if(t&&"object"==typeof t)return new Intl.DateTimeFormat(e,t).format(this);const s=this.replaceTokens(t||this.localization.format||`${a.dateFormats.L}, ${a.dateFormats.LT}`,this.localization.dateFormats),i=t=>new Intl.DateTimeFormat(this.localization.locale,t).format(this);this.localization.hourCycle||(this.localization.hourCycle=d(this.localization.locale));const o=this.localization.hourCycle.startsWith("h1")?"h24":this.localization.hourCycle,n=this.localization.hourCycle.startsWith("h2")?"h12":this.localization.hourCycle,r={yy:i({year:"2-digit"}),yyyy:this.year,M:i({month:"numeric"}),MM:this.monthFormatted,MMM:this.getAllMonths("short")[this.getMonth()],MMMM:this.getAllMonths()[this.getMonth()],d:this.date,dd:this.dateFormatted,ddd:i({weekday:"short"}),dddd:i({weekday:"long"}),H:this.getHours(),HH:this.getHoursFormatted(o),h:this.hours>12?this.hours-12:this.hours,hh:this.getHoursFormatted(n),t:this.meridiem(),T:this.meridiem().toUpperCase(),m:this.minutes,mm:this.minutesFormatted,s:this.seconds,ss:this.secondsFormatted,fff:this.getMilliseconds()};return s.replace(this.dateTimeRegex,((t,e)=>e||r[t])).replace(/\[/g,"").replace(/]/g,"")}}class c{constructor(){this.cache=new Map}locate(t){const e=this.cache.get(t);if(e)return e;const s=new t;return this.cache.set(t,s),s}}let h;const p=[{name:"calendar",className:i.css.daysContainer,unit:t.Unit.month,step:1},{name:"months",className:i.css.monthsContainer,unit:t.Unit.year,step:1},{name:"years",className:i.css.yearsContainer,unit:t.Unit.year,step:10},{name:"decades",className:i.css.decadesContainer,unit:t.Unit.year,step:100}];class u{constructor(){this._currentCalendarViewMode=0,this._viewDate=new l,this.minimumCalendarViewMode=0,this.currentView="calendar"}get currentCalendarViewMode(){return this._currentCalendarViewMode}set currentCalendarViewMode(t){this._currentCalendarViewMode=t,this.currentView=p[t].name}get viewDate(){return this._viewDate}set viewDate(t){this._viewDate=t,this.options&&(this.options.viewDate=t)}refreshCurrentView(){this.currentView=p[this.currentCalendarViewMode].name}get isTwelveHour(){return["h12","h11"].includes(this.options.localization.hourCycle)}}class m{constructor(){this.optionsStore=h.locate(u)}isValid(e,s){if(!this._enabledDisabledDatesIsValid(s,e))return!1;if(s!==t.Unit.month&&s!==t.Unit.year&&this.optionsStore.options.restrictions.daysOfWeekDisabled?.length>0&&-1!==this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(e.weekDay))return!1;if(!this._minMaxIsValid(s,e))return!1;if(s===t.Unit.hours||s===t.Unit.minutes||s===t.Unit.seconds){if(!this._enabledDisabledHoursIsValid(e))return!1;if(0!==this.optionsStore.options.restrictions.disabledTimeIntervals?.filter((t=>e.isBetween(t.from,t.to))).length)return!1}return!0}_enabledDisabledDatesIsValid(e,s){return e!==t.Unit.date||!(this.optionsStore.options.restrictions.disabledDates.length>0&&this._isInDisabledDates(s))&&!(this.optionsStore.options.restrictions.enabledDates.length>0&&!this._isInEnabledDates(s))}_isInDisabledDates(e){return!(!this.optionsStore.options.restrictions.disabledDates||0===this.optionsStore.options.restrictions.disabledDates.length)&&!!this.optionsStore.options.restrictions.disabledDates.find((s=>s.isSame(e,t.Unit.date)))}_isInEnabledDates(e){return!this.optionsStore.options.restrictions.enabledDates||0===this.optionsStore.options.restrictions.enabledDates.length||!!this.optionsStore.options.restrictions.enabledDates.find((s=>s.isSame(e,t.Unit.date)))}_minMaxIsValid(t,e){return(!this.optionsStore.options.restrictions.minDate||!e.isBefore(this.optionsStore.options.restrictions.minDate,t))&&(!this.optionsStore.options.restrictions.maxDate||!e.isAfter(this.optionsStore.options.restrictions.maxDate,t))}_enabledDisabledHoursIsValid(t){return!(this.optionsStore.options.restrictions.disabledHours.length>0&&this._isInDisabledHours(t))&&!(this.optionsStore.options.restrictions.enabledHours.length>0&&!this._isInEnabledHours(t))}_isInDisabledHours(t){if(!this.optionsStore.options.restrictions.disabledHours||0===this.optionsStore.options.restrictions.disabledHours.length)return!1;const e=t.hours;return this.optionsStore.options.restrictions.disabledHours.includes(e)}_isInEnabledHours(t){if(!this.optionsStore.options.restrictions.enabledHours||0===this.optionsStore.options.restrictions.enabledHours.length)return!0;const e=t.hours;return this.optionsStore.options.restrictions.enabledHours.includes(e)}dateRangeIsValid(e,s,i){if(!this.optionsStore.options.dateRange)return!0;if(2!==e.length&&1!==s)return!0;const o=e[0].clone;if(o.isSame(i,t.Unit.date))return!0;for(o.manipulate(1,t.Unit.date);!o.isSame(i,t.Unit.date);){if(!this.isValid(o,t.Unit.date))return!1;o.manipulate(1,t.Unit.date)}return!0}}class y{constructor(){this.subscribers=[]}subscribe(t){return this.subscribers.push(t),this.unsubscribe.bind(this,this.subscribers.length-1)}unsubscribe(t){this.subscribers.splice(t,1)}emit(t){this.subscribers.forEach((e=>{e(t)}))}destroy(){this.subscribers=null,this.subscribers=[]}}class g{constructor(){this.triggerEvent=new y,this.viewUpdate=new y,this.updateDisplay=new y,this.action=new y,this.updateViewDate=new y}destroy(){this.triggerEvent.destroy(),this.viewUpdate.destroy(),this.updateDisplay.destroy(),this.action.destroy(),this.updateViewDate.destroy()}}const v={clear:"Clear selection",close:"Close the picker",dateFormats:a.dateFormats,dayViewHeaderFormat:{month:"long",year:"2-digit"},decrementHour:"Decrement Hour",decrementMinute:"Decrement Minute",decrementSecond:"Decrement Second",format:a.format,hourCycle:a.hourCycle,incrementHour:"Increment Hour",incrementMinute:"Increment Minute",incrementSecond:"Increment Second",locale:a.locale,nextCentury:"Next Century",nextDecade:"Next Decade",nextMonth:"Next Month",nextYear:"Next Year",ordinal:a.ordinal,pickHour:"Pick Hour",pickMinute:"Pick Minute",pickSecond:"Pick Second",previousCentury:"Previous Century",previousDecade:"Previous Decade",previousMonth:"Previous Month",previousYear:"Previous Year",selectDate:"Select Date",selectDecade:"Select Decade",selectMonth:"Select Month",selectTime:"Select Time",selectYear:"Select Year",startOfTheWeek:0,today:"Go to today",toggleMeridiem:"Toggle Meridiem"},f={allowInputToggle:!1,container:void 0,dateRange:!1,debug:!1,defaultDate:void 0,display:{icons:{type:"icons",time:"fa-solid fa-clock",date:"fa-solid fa-calendar",up:"fa-solid fa-arrow-up",down:"fa-solid fa-arrow-down",previous:"fa-solid fa-chevron-left",next:"fa-solid fa-chevron-right",today:"fa-solid fa-calendar-check",clear:"fa-solid fa-trash",close:"fa-solid fa-xmark"},sideBySide:!1,calendarWeeks:!1,viewMode:"calendar",toolbarPlacement:"bottom",keepOpen:!1,buttons:{today:!1,clear:!1,close:!1},components:{calendar:!0,date:!0,month:!0,year:!0,decades:!0,clock:!0,hours:!0,minutes:!0,seconds:!1,useTwentyfourHour:void 0},inline:!1,theme:"auto",placement:"bottom"},keepInvalid:!1,localization:v,meta:{},multipleDates:!1,multipleDatesSeparator:"; ",promptTimeOnDateChange:!1,promptTimeOnDateChangeTransitionDelay:200,restrictions:{minDate:void 0,maxDate:void 0,disabledDates:[],enabledDates:[],daysOfWeekDisabled:[],disabledTimeIntervals:[],disabledHours:[],enabledHours:[]},stepping:1,useCurrent:!0,viewDate:new l},S={...v};function w(t,e){if(!t)return null;if(t.constructor.name===l.name)return t;if(t.constructor.name===Date.name)return l.convert(t);if("string"==typeof t){const s=l.fromString(t,e);return"null"===JSON.stringify(s)?null:s}return null}function b(t,e,s){"string"==typeof t&&"input"!==e&&i.errorMessages.dateString();const o=w(t,s);return o||i.errorMessages.failedToParseDate(e,t,"input"===e),o}function D(t,e,s,o=a){Array.isArray(e)||i.errorMessages.typeMismatch(t,s,"array of DateTime or Date");for(let s=0;s"number"!=typeof t))||i.errorMessages.typeMismatch(t,s,"array of numbers")}function k(t){return({value:e,providedType:s,localization:i})=>{const o=b(e,t,i);if(void 0!==o)return o.setLocalization(i),o}}function C(t){const e=k(t);return t=>void 0===t.value?t.value:e(t)}function M(t,e,s){return({value:o,providedType:a})=>void 0===o?[]:(_(t,o,a),o.some((t=>ts))&&i.errorMessages.numbersOutOfRange(t,e,s),o)}function E(t){return M(t,0,23)}function T(t){return({value:e,providedType:s,localization:i})=>void 0===e?[]:(D(t,e,s,i),e)}function L(t){return({value:e,path:s})=>(t.includes(e)||i.errorMessages.unexpectedOptionValue(s.substring(1),e,t),e)}const U=Object.freeze({defaultDate:k("defaultDate"),viewDate:k("viewDate"),minDate:C("restrictions.minDate"),maxDate:C("restrictions.maxDate"),disabledHours:E("restrictions.disabledHours"),enabledHours:E("restrictions.enabledHours"),disabledDates:T("restrictions.disabledDates"),enabledDates:T("restrictions.enabledDates"),daysOfWeekDisabled:M("restrictions.daysOfWeekDisabled",0,6),disabledTimeIntervals:({key:t,value:e,providedType:s,localization:o})=>{if(void 0===e)return[];Array.isArray(e)||i.errorMessages.typeMismatch(t,s,"array of { from: DateTime|Date, to: DateTime|Date }");const a=e;for(let e=0;e{const i=`${t}[${e}].${s}`,n=b(a[e][s],i,o);n.setLocalization(o),a[e][s]=n}));return a},toolbarPlacement:L(["top","bottom","default"]),type:L(["icons","sprites"]),viewMode:L(["clock","calendar","months","years","decades"]),theme:L(["light","dark","auto"]),placement:L(["top","bottom"]),meta:({value:t})=>t,dayViewHeaderFormat:({value:t})=>t,container:({value:t,path:e})=>(t&&!(t instanceof HTMLElement||t instanceof Element||t?.appendChild)&&i.errorMessages.typeMismatch(e.substring(1),typeof t,"HTMLElement"),t),useTwentyfourHour:({value:t,path:e,providedType:s,defaultType:o})=>{if(i.errorMessages.deprecatedWarning("useTwentyfourHour",'Please use "options.localization.hourCycle" instead'),void 0===t||"boolean"===s)return t;i.errorMessages.typeMismatch(e,s,o)},hourCycle:L(["h11","h12","h23","h24"])}),A=({value:t,defaultType:e,providedType:s,path:o})=>{switch(e){case"boolean":return"true"===t||!0===t;case"number":return+t;case"string":return t.toString();case"object":return{};case"function":return t;default:i.errorMessages.typeMismatch(o,s,e)}};class V{static deepCopy(t){const e={};return Object.keys(t).forEach((s=>{const i=t[s];i instanceof l?e[s]=i.clone:i instanceof Date?e[s]=new Date(i.valueOf()):(e[s]=i,"object"!=typeof i||i instanceof HTMLElement||i instanceof Element||Array.isArray(i)||(e[s]=V.deepCopy(i)))})),e}static objectPath(t,e){return"."===t.charAt(0)&&(t=t.slice(1)),t?t.split(".").reduce(((t,e)=>V.isValue(t)||V.isValue(t[e])?t[e]:void 0),e):e}static spread(t,e,s,o=""){const a=V.objectPath(o,f),n=Object.keys(t).filter((t=>!Object.keys(a).includes(t)));if(n.length>0){const t=V.getFlattenDefaultOptions(),e=n.map((e=>{let s=`"${o}.${e}" in not a known option.`;const i=t.find((t=>t.includes(e)));return i&&(s+=` Did you mean "${i}"?`),s}));i.errorMessages.unexpectedOptions(e)}Object.keys(t).filter((t=>"__proto__"!==t&&"constructor"!==t)).forEach((i=>{"."===(o+=`.${i}`).charAt(0)&&(o=o.slice(1));const n=a[i],r=typeof t[i],d=typeof n,l=t[i];if(null==l)return e[i]=l,void(o=o.substring(0,o.lastIndexOf(`.${i}`)));"object"!=typeof n||Array.isArray(t[i])||n instanceof Date||V.ignoreProperties.includes(i)?e[i]=V.processKey(i,l,r,d,o,s):V.spread(t[i],e[i],s,o),o=o.substring(0,o.lastIndexOf(`.${i}`))}))}static processKey(t,e,s,i,o,a){return(U[(n={key:t,value:e,providedType:s,defaultType:i,path:o,localization:a}).key]||A)(n);var n}static _mergeOptions(t,e){const s=V.deepCopy(e),i="default"!==e.localization?.locale?e.localization:t?.localization||f.localization;return V.spread(t,s,i,""),s}static _dataToOptions(t,e){const s=JSON.parse(JSON.stringify(t.dataset));if(s?.tdTargetInput&&delete s.tdTargetInput,s?.tdTargetToggle&&delete s.tdTargetToggle,!s||0===Object.keys(s).length||s.constructor!==DOMStringMap)return e;const o={},a=t=>{const e={};return Object.keys(t).forEach((t=>{e[t.toLowerCase()]=t})),e},n=this.normalizeObject(a),r=a(e);return Object.keys(s).filter((t=>t.startsWith(i.dataKey))).map((t=>t.substring(2))).forEach((t=>{let i=r[t.toLowerCase()];if(t.includes("_")){const a=t.split("_");i=r[a[0].toLowerCase()],void 0!==i&&e[i].constructor===Object&&(o[i]=n(a,1,e[i],s[`td${t}`]))}else void 0!==i&&(o[i]=s[`td${t}`])})),this._mergeOptions(o,e)}static normalizeObject(t){const e=(s,i,o,a)=>{const n=t(o)[s[i].toLowerCase()],r={};return void 0===n||(o[n].constructor===Object?(i++,r[n]=e(s,i,o[n],a)):r[n]=a),r};return e}static _dateTypeCheck(t,e){return w(t,e)}static _typeCheckDateArray(t,e,s,i){return D(t,e,s,i)}static _typeCheckNumberArray(t,e,s){return _(t,e,s)}static dateConversion(t,e,s){return b(t,e,s)}static getFlattenDefaultOptions(){if(this._flattenDefaults)return this._flattenDefaults;const t=(e,s=[])=>Array.isArray(e)?[]:Object(e)===e?Object.entries(e).flatMap((([e,i])=>t(i,[...s,e]))):s.join(".");return this._flattenDefaults=t(f),this._flattenDefaults}static _validateConflicts(t){!t.display.sideBySide||t.display.components.clock&&(t.display.components.hours||t.display.components.minutes||t.display.components.seconds)||i.errorMessages.conflictingConfiguration("Cannot use side by side mode without the clock components"),t.restrictions.minDate&&t.restrictions.maxDate&&(t.restrictions.minDate.isAfter(t.restrictions.maxDate)&&i.errorMessages.conflictingConfiguration("minDate is after maxDate"),t.restrictions.maxDate.isBefore(t.restrictions.minDate)&&i.errorMessages.conflictingConfiguration("maxDate is before minDate")),t.multipleDates&&t.dateRange&&i.errorMessages.conflictingConfiguration('Cannot uss option "multipleDates" with "dateRange"')}}V.ignoreProperties=["meta","dayViewHeaderFormat","container","dateForms","ordinal"],V.isValue=t=>null!=t;class ${constructor(){this._dates=[],this.optionsStore=h.locate(u),this.validation=h.locate(m),this._eventEmitters=h.locate(g)}get picked(){return[...this._dates]}get lastPicked(){return this._dates[this.lastPickedIndex]?.clone}get lastPickedIndex(){return 0===this._dates.length?0:this._dates.length-1}formatInput(t){return t?(t.localization=this.optionsStore.options.localization,t.format()):""}parseInput(t){return V.dateConversion(t,"input",this.optionsStore.options.localization)}setFromInput(t,e){if(!t)return void this.setValue(void 0,e);const s=this.parseInput(t);s&&(s.setLocalization(this.optionsStore.options.localization),this.setValue(s,e))}add(t){this._dates.push(t)}isPicked(t,e){if(!l.isValid(t))return!1;if(!e)return void 0!==this._dates.find((e=>e.isSame(t)));const s=r(e),i=t.format(s);return void 0!==this._dates.map((t=>t.format(s))).find((t=>t===i))}pickedIndex(t,e){if(!l.isValid(t))return-1;if(!e)return this._dates.map((t=>t.valueOf())).indexOf(t.valueOf());const s=r(e),i=t.format(s);return this._dates.map((t=>t.format(s))).indexOf(i)}clear(){this.optionsStore.unset=!0,this._eventEmitters.triggerEvent.emit({type:i.events.change,date:void 0,oldDate:this.lastPicked,isClear:!0,isValid:!0}),this._dates=[],this.optionsStore.input&&(this.optionsStore.input.value=""),this._eventEmitters.updateDisplay.emit("all")}static getStartEndYear(t,e){const s=t/10,i=Math.floor(e/t)*t;return[i,i+9*s,Math.floor(e/s)*s]}updateInput(t){if(!this.optionsStore.input)return;let e=this.formatInput(t);(this.optionsStore.options.multipleDates||this.optionsStore.options.dateRange)&&(e=this._dates.map((t=>this.formatInput(t))).join(this.optionsStore.options.multipleDatesSeparator)),this.optionsStore.input.value!=e&&(this.optionsStore.input.value=e)}setValue(e,s){const o=void 0===s,a=!e&&o;let n=this.optionsStore.unset?null:this._dates[s]?.clone;if(!n&&!this.optionsStore.unset&&o&&a&&(n=this.lastPicked),e&&n?.isSame(e))return void this.updateInput(e);if(!e)return void this._setValueNull(a,s,n);s=s||0,e=e.clone,1!==this.optionsStore.options.stepping&&(e.minutes=Math.round(e.minutes/this.optionsStore.options.stepping)*this.optionsStore.options.stepping,e.startOf(t.Unit.minutes));const r=t=>{this._dates[s]=e,this._eventEmitters.updateViewDate.emit(e.clone),this.updateInput(e),this.optionsStore.unset=!1,this._eventEmitters.updateDisplay.emit("all"),this._eventEmitters.triggerEvent.emit({type:i.events.change,date:e,oldDate:n,isClear:a,isValid:t})};this.validation.isValid(e)&&this.validation.dateRangeIsValid(this.picked,s,e)?r(!0):(this.optionsStore.options.keepInvalid&&r(!1),this._eventEmitters.triggerEvent.emit({type:i.events.error,reason:i.errorMessages.failedToSetInvalidDate,date:e,oldDate:n}))}_setValueNull(t,e,s){!this.optionsStore.options.multipleDates||1===this._dates.length||t?(this.optionsStore.unset=!0,this._dates=[]):this._dates.splice(e,1),this.updateInput(),this._eventEmitters.triggerEvent.emit({type:i.events.change,date:void 0,oldDate:s,isClear:t,isValid:!0}),this._eventEmitters.updateDisplay.emit("all")}}var O;!function(t){t.next="next",t.previous="previous",t.changeCalendarView="changeCalendarView",t.selectMonth="selectMonth",t.selectYear="selectYear",t.selectDecade="selectDecade",t.selectDay="selectDay",t.selectHour="selectHour",t.selectMinute="selectMinute",t.selectSecond="selectSecond",t.incrementHours="incrementHours",t.incrementMinutes="incrementMinutes",t.incrementSeconds="incrementSeconds",t.decrementHours="decrementHours",t.decrementMinutes="decrementMinutes",t.decrementSeconds="decrementSeconds",t.toggleMeridiem="toggleMeridiem",t.togglePicker="togglePicker",t.showClock="showClock",t.showHours="showHours",t.showMinutes="showMinutes",t.showSeconds="showSeconds",t.clear="clear",t.close="close",t.today="today"}(O||(O={}));var z=O;class H{constructor(){this.optionsStore=h.locate(u),this.dates=h.locate($),this.validation=h.locate(m)}getPicker(){const t=document.createElement("div");if(t.classList.add(i.css.daysContainer),t.append(...this._daysOfTheWeek()),this.optionsStore.options.display.calendarWeeks){const e=document.createElement("div");e.classList.add(i.css.calendarWeeks,i.css.noHighlight),t.appendChild(e)}const{rangeHoverEvent:e,rangeHoverOutEvent:s}=this.handleMouseEvents(t);for(let o=0;o<42;o++){if(0!==o&&o%7==0&&this.optionsStore.options.display.calendarWeeks){const e=document.createElement("div");e.classList.add(i.css.calendarWeeks,i.css.noHighlight),t.appendChild(e)}const a=document.createElement("div");a.setAttribute("data-action",z.selectDay),t.appendChild(a),matchMedia("(hover: hover)").matches&&this.optionsStore.options.dateRange&&(a.addEventListener("mouseover",e),a.addEventListener("mouseout",s))}return t}_update(e,s){const o=e.getElementsByClassName(i.css.daysContainer)[0];this._updateCalendarView(o);const a=this.optionsStore.viewDate.clone.startOf(t.Unit.month).startOf("weekDay",this.optionsStore.options.localization.startOfTheWeek).manipulate(12,t.Unit.hours);this._handleCalendarWeeks(o,a.clone),o.querySelectorAll(`[data-action="${z.selectDay}"]`).forEach((e=>{const o=[];o.push(i.css.day),a.isBefore(this.optionsStore.viewDate,t.Unit.month)&&o.push(i.css.old),a.isAfter(this.optionsStore.viewDate,t.Unit.month)&&o.push(i.css.new),this.optionsStore.unset||this.optionsStore.options.dateRange||!this.dates.isPicked(a,t.Unit.date)||o.push(i.css.active),this.validation.isValid(a,t.Unit.date)||o.push(i.css.disabled),a.isSame(new l,t.Unit.date)&&o.push(i.css.today),0!==a.weekDay&&6!==a.weekDay||o.push(i.css.weekend),this._handleDateRange(a,o),s(t.Unit.date,a,o,e),e.classList.remove(...e.classList),e.classList.add(...o),e.setAttribute("data-value",this._dateToDataValue(a)),e.setAttribute("data-day",`${a.date}`),e.innerText=a.parts(void 0,{day:"numeric"}).day,a.manipulate(1,t.Unit.date)}))}_dateToDataValue(t){return l.isValid(t)?`${t.year}-${t.monthFormatted}-${t.dateFormatted}`:""}_handleDateRange(e,s){const o=this.dates.picked[0],a=this.dates.picked[1];this.optionsStore.options.dateRange&&(e.isBetween(o,a,t.Unit.date)&&s.push(i.css.rangeIn),e.isSame(o,t.Unit.date)&&s.push(i.css.rangeStart),e.isSame(a,t.Unit.date)&&s.push(i.css.rangeEnd))}handleMouseEvents(e){return{rangeHoverEvent:s=>{const o=s?.currentTarget;if(1!==this.dates.picked.length||o.classList.contains(i.css.disabled))return;const a=[...e.querySelectorAll(".day")],n=o.getAttribute("data-value"),r=l.fromString(n,{format:"yyyy-MM-dd"}),d=a.findIndex((t=>t.getAttribute("data-value")===n)),c=this.dates.picked[0],h=this.dates.picked[1],p=this._dateToDataValue(c),u=a.findIndex((t=>t.getAttribute("data-value")===p)),m=a[u];let y;r.isSame(c,t.Unit.date)||o.classList.remove(i.css.rangeStart),r.isSame(h,t.Unit.date)||o.classList.remove(i.css.rangeEnd),r.isBefore(c)?(o.classList.add(i.css.rangeStart),m?.classList.remove(i.css.rangeStart),m?.classList.add(i.css.rangeEnd),y=(t,e)=>e>d&&eeu),a.filter(y).forEach((t=>{t.classList.add(i.css.rangeIn)}))},rangeHoverOutEvent:s=>{const o=[...e.querySelectorAll(".day")];if(1===this.dates.picked.length&&o.forEach((t=>t.classList.remove(i.css.rangeIn))),1!==this.dates.picked.length)return;const a=s?.currentTarget,n=new l(a.getAttribute("data-value"));n.isSame(this.dates.picked[0],t.Unit.date)||a.classList.remove(i.css.rangeStart),n.isSame(this.dates.picked[1],t.Unit.date)||a.classList.remove(i.css.rangeEnd)}}}_updateCalendarView(e){if("calendar"!==this.optionsStore.currentView)return;const[s,o,a]=e.parentElement.getElementsByClassName(i.css.calendarHeader)[0].getElementsByTagName("div");o.setAttribute(i.css.daysContainer,this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat)),this.optionsStore.options.display.components.month?o.classList.remove(i.css.disabled):o.classList.add(i.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1,t.Unit.month),t.Unit.month)?s.classList.remove(i.css.disabled):s.classList.add(i.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1,t.Unit.month),t.Unit.month)?a.classList.remove(i.css.disabled):a.classList.add(i.css.disabled)}_daysOfTheWeek(){const e=this.optionsStore.viewDate.clone.startOf("weekDay",this.optionsStore.options.localization.startOfTheWeek).startOf(t.Unit.date),s=[];if(document.createElement("div"),this.optionsStore.options.display.calendarWeeks){const t=document.createElement("div");t.classList.add(i.css.calendarWeeks,i.css.noHighlight),t.innerText="#",s.push(t)}for(let o=0;o<7;o++){const o=document.createElement("div");o.classList.add(i.css.dayOfTheWeek,i.css.noHighlight),o.innerText=e.format({weekday:"short"}),e.manipulate(1,t.Unit.date),s.push(o)}return s}_handleCalendarWeeks(e,s){[...e.querySelectorAll(`.${i.css.calendarWeeks}`)].filter((t=>"#"!==t.innerText)).forEach((e=>{e.innerText=`${s.week}`,s.manipulate(7,t.Unit.date)}))}}class x{constructor(){this.optionsStore=h.locate(u),this.dates=h.locate($),this.validation=h.locate(m)}getPicker(){const t=document.createElement("div");t.classList.add(i.css.monthsContainer);for(let e=0;e<12;e++){const e=document.createElement("div");e.setAttribute("data-action",z.selectMonth),t.appendChild(e)}return t}_update(e,s){const o=e.getElementsByClassName(i.css.monthsContainer)[0];if("months"===this.optionsStore.currentView){const[e,s,a]=o.parentElement.getElementsByClassName(i.css.calendarHeader)[0].getElementsByTagName("div");s.setAttribute(i.css.monthsContainer,this.optionsStore.viewDate.format({year:"numeric"})),this.optionsStore.options.display.components.year?s.classList.remove(i.css.disabled):s.classList.add(i.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1,t.Unit.year),t.Unit.year)?e.classList.remove(i.css.disabled):e.classList.add(i.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1,t.Unit.year),t.Unit.year)?a.classList.remove(i.css.disabled):a.classList.add(i.css.disabled)}const a=this.optionsStore.viewDate.clone.startOf(t.Unit.year);o.querySelectorAll(`[data-action="${z.selectMonth}"]`).forEach(((e,o)=>{const n=[];n.push(i.css.month),!this.optionsStore.unset&&this.dates.isPicked(a,t.Unit.month)&&n.push(i.css.active),this.validation.isValid(a,t.Unit.month)||n.push(i.css.disabled),s(t.Unit.month,a,n,e),e.classList.remove(...e.classList),e.classList.add(...n),e.setAttribute("data-value",`${o}`),e.innerText=`${a.format({month:"short"})}`,a.manipulate(1,t.Unit.month)}))}}class I{constructor(){this.optionsStore=h.locate(u),this.dates=h.locate($),this.validation=h.locate(m)}getPicker(){const t=document.createElement("div");t.classList.add(i.css.yearsContainer);for(let e=0;e<12;e++){const e=document.createElement("div");e.setAttribute("data-action",z.selectYear),t.appendChild(e)}return t}_update(e,s){this._startYear=this.optionsStore.viewDate.clone.manipulate(-1,t.Unit.year),this._endYear=this.optionsStore.viewDate.clone.manipulate(10,t.Unit.year);const o=e.getElementsByClassName(i.css.yearsContainer)[0];if("years"===this.optionsStore.currentView){const[e,s,a]=o.parentElement.getElementsByClassName(i.css.calendarHeader)[0].getElementsByTagName("div");s.setAttribute(i.css.yearsContainer,`${this._startYear.format({year:"numeric"})}-${this._endYear.format({year:"numeric"})}`),this.optionsStore.options.display.components.decades?s.classList.remove(i.css.disabled):s.classList.add(i.css.disabled),this.validation.isValid(this._startYear,t.Unit.year)?e.classList.remove(i.css.disabled):e.classList.add(i.css.disabled),this.validation.isValid(this._endYear,t.Unit.year)?a.classList.remove(i.css.disabled):a.classList.add(i.css.disabled)}const a=this.optionsStore.viewDate.clone.startOf(t.Unit.year).manipulate(-1,t.Unit.year);o.querySelectorAll(`[data-action="${z.selectYear}"]`).forEach((e=>{const o=[];o.push(i.css.year),!this.optionsStore.unset&&this.dates.isPicked(a,t.Unit.year)&&o.push(i.css.active),this.validation.isValid(a,t.Unit.year)||o.push(i.css.disabled),s(t.Unit.year,a,o,e),e.classList.remove(...e.classList),e.classList.add(...o),e.setAttribute("data-value",`${a.year}`),e.innerText=a.format({year:"numeric"}),a.manipulate(1,t.Unit.year)}))}}class P{constructor(){this.optionsStore=h.locate(u),this.dates=h.locate($),this.validation=h.locate(m)}getPicker(){const t=document.createElement("div");t.classList.add(i.css.decadesContainer);for(let e=0;e<12;e++){const e=document.createElement("div");e.setAttribute("data-action",z.selectDecade),t.appendChild(e)}return t}_update(e,s){const[o,a]=$.getStartEndYear(100,this.optionsStore.viewDate.year);this._startDecade=this.optionsStore.viewDate.clone.startOf(t.Unit.year),this._startDecade.year=o,this._endDecade=this.optionsStore.viewDate.clone.startOf(t.Unit.year),this._endDecade.year=a;const n=e.getElementsByClassName(i.css.decadesContainer)[0],[r,d,l]=n.parentElement.getElementsByClassName(i.css.calendarHeader)[0].getElementsByTagName("div");"decades"===this.optionsStore.currentView&&(d.setAttribute(i.css.decadesContainer,`${this._startDecade.format({year:"numeric"})}-${this._endDecade.format({year:"numeric"})}`),this.validation.isValid(this._startDecade,t.Unit.year)?r.classList.remove(i.css.disabled):r.classList.add(i.css.disabled),this.validation.isValid(this._endDecade,t.Unit.year)?l.classList.remove(i.css.disabled):l.classList.add(i.css.disabled));const c=this.dates.picked.map((t=>t.year));n.querySelectorAll(`[data-action="${z.selectDecade}"]`).forEach(((e,o)=>{if(0===o)return e.classList.add(i.css.old),this._startDecade.year-10<0?(e.textContent=" ",r.classList.add(i.css.disabled),e.classList.add(i.css.disabled),void e.setAttribute("data-value","")):(e.innerText=this._startDecade.clone.manipulate(-10,t.Unit.year).format({year:"numeric"}),void e.setAttribute("data-value",`${this._startDecade.year}`));const a=[];a.push(i.css.decade);const n=this._startDecade.year,d=this._startDecade.year+9;!this.optionsStore.unset&&c.filter((t=>t>=n&&t<=d)).length>0&&a.push(i.css.active),s("decade",this._startDecade,a,e),e.classList.remove(...e.classList),e.classList.add(...a),e.setAttribute("data-value",`${this._startDecade.year}`),e.innerText=`${this._startDecade.format({year:"numeric"})}`,this._startDecade.manipulate(10,t.Unit.year)}))}}class N{constructor(){this._gridColumns="",this.optionsStore=h.locate(u),this.dates=h.locate($),this.validation=h.locate(m)}getPicker(t){const e=document.createElement("div");return e.classList.add(i.css.clockContainer),e.append(...this._grid(t)),e}_update(e){const s=e.getElementsByClassName(i.css.clockContainer)[0];let o=this.dates.lastPicked?.clone;if(!o&&this.optionsStore.options.useCurrent&&(o=this.optionsStore.viewDate.clone),s.querySelectorAll(".disabled").forEach((t=>t.classList.remove(i.css.disabled))),this.optionsStore.options.display.components.hours&&(this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1,t.Unit.hours),t.Unit.hours)||s.querySelector(`[data-action=${z.incrementHours}]`).classList.add(i.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1,t.Unit.hours),t.Unit.hours)||s.querySelector(`[data-action=${z.decrementHours}]`).classList.add(i.css.disabled),s.querySelector(`[data-time-component=${t.Unit.hours}]`).innerText=o?o.getHoursFormatted(this.optionsStore.options.localization.hourCycle):"--"),this.optionsStore.options.display.components.minutes&&(this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1,t.Unit.minutes),t.Unit.minutes)||s.querySelector(`[data-action=${z.incrementMinutes}]`).classList.add(i.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1,t.Unit.minutes),t.Unit.minutes)||s.querySelector(`[data-action=${z.decrementMinutes}]`).classList.add(i.css.disabled),s.querySelector(`[data-time-component=${t.Unit.minutes}]`).innerText=o?o.minutesFormatted:"--"),this.optionsStore.options.display.components.seconds&&(this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1,t.Unit.seconds),t.Unit.seconds)||s.querySelector(`[data-action=${z.incrementSeconds}]`).classList.add(i.css.disabled),this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1,t.Unit.seconds),t.Unit.seconds)||s.querySelector(`[data-action=${z.decrementSeconds}]`).classList.add(i.css.disabled),s.querySelector(`[data-time-component=${t.Unit.seconds}]`).innerText=o?o.secondsFormatted:"--"),this.optionsStore.isTwelveHour){const e=s.querySelector(`[data-action=${z.toggleMeridiem}]`),a=(o||this.optionsStore.viewDate).clone;e.innerText=a.meridiem(),this.validation.isValid(a.manipulate(a.hours>=12?-12:12,t.Unit.hours))?e.classList.remove(i.css.disabled):e.classList.add(i.css.disabled)}s.style.gridTemplateAreas=`"${this._gridColumns}"`}_grid(e){this._gridColumns="";const s=[],o=[],a=[],n=document.createElement("div"),r=e(this.optionsStore.options.display.icons.up),d=e(this.optionsStore.options.display.icons.down);n.classList.add(i.css.separator,i.css.noHighlight);const l=n.cloneNode(!0);l.innerHTML=":";const c=(t=!1)=>t?l.cloneNode(!0):n.cloneNode(!0);if(this.optionsStore.options.display.components.hours){let e=document.createElement("div");e.setAttribute("title",this.optionsStore.options.localization.incrementHour),e.setAttribute("data-action",z.incrementHours),e.appendChild(r.cloneNode(!0)),s.push(e),e=document.createElement("div"),e.setAttribute("title",this.optionsStore.options.localization.pickHour),e.setAttribute("data-action",z.showHours),e.setAttribute("data-time-component",t.Unit.hours),o.push(e),e=document.createElement("div"),e.setAttribute("title",this.optionsStore.options.localization.decrementHour),e.setAttribute("data-action",z.decrementHours),e.appendChild(d.cloneNode(!0)),a.push(e),this._gridColumns+="a"}if(this.optionsStore.options.display.components.minutes){this._gridColumns+=" a",this.optionsStore.options.display.components.hours&&(s.push(c()),o.push(c(!0)),a.push(c()),this._gridColumns+=" a");let e=document.createElement("div");e.setAttribute("title",this.optionsStore.options.localization.incrementMinute),e.setAttribute("data-action",z.incrementMinutes),e.appendChild(r.cloneNode(!0)),s.push(e),e=document.createElement("div"),e.setAttribute("title",this.optionsStore.options.localization.pickMinute),e.setAttribute("data-action",z.showMinutes),e.setAttribute("data-time-component",t.Unit.minutes),o.push(e),e=document.createElement("div"),e.setAttribute("title",this.optionsStore.options.localization.decrementMinute),e.setAttribute("data-action",z.decrementMinutes),e.appendChild(d.cloneNode(!0)),a.push(e)}if(this.optionsStore.options.display.components.seconds){this._gridColumns+=" a",this.optionsStore.options.display.components.minutes&&(s.push(c()),o.push(c(!0)),a.push(c()),this._gridColumns+=" a");let e=document.createElement("div");e.setAttribute("title",this.optionsStore.options.localization.incrementSecond),e.setAttribute("data-action",z.incrementSeconds),e.appendChild(r.cloneNode(!0)),s.push(e),e=document.createElement("div"),e.setAttribute("title",this.optionsStore.options.localization.pickSecond),e.setAttribute("data-action",z.showSeconds),e.setAttribute("data-time-component",t.Unit.seconds),o.push(e),e=document.createElement("div"),e.setAttribute("title",this.optionsStore.options.localization.decrementSecond),e.setAttribute("data-action",z.decrementSeconds),e.appendChild(d.cloneNode(!0)),a.push(e)}if(this.optionsStore.isTwelveHour){this._gridColumns+=" a";let t=c();s.push(t);const e=document.createElement("button");e.setAttribute("type","button"),e.setAttribute("title",this.optionsStore.options.localization.toggleMeridiem),e.setAttribute("data-action",z.toggleMeridiem),e.setAttribute("tabindex","-1"),i.css.toggleMeridiem.includes(",")?e.classList.add(...i.css.toggleMeridiem.split(",")):e.classList.add(i.css.toggleMeridiem),t=document.createElement("div"),t.classList.add(i.css.noHighlight),t.appendChild(e),o.push(t),t=c(),a.push(t)}return this._gridColumns=this._gridColumns.trim(),[...s,...o,...a]}}class F{constructor(){this.optionsStore=h.locate(u),this.validation=h.locate(m)}getPicker(){const t=document.createElement("div");t.classList.add(i.css.hourContainer);for(let e=0;e<(this.optionsStore.isTwelveHour?12:24);e++){const e=document.createElement("div");e.setAttribute("data-action",z.selectHour),t.appendChild(e)}return t}_update(e,s){const o=e.getElementsByClassName(i.css.hourContainer)[0],a=this.optionsStore.viewDate.clone.startOf(t.Unit.date);o.querySelectorAll(`[data-action="${z.selectHour}"]`).forEach((e=>{const o=[];o.push(i.css.hour),this.validation.isValid(a,t.Unit.hours)||o.push(i.css.disabled),s(t.Unit.hours,a,o,e),e.classList.remove(...e.classList),e.classList.add(...o),e.setAttribute("data-value",`${a.hours}`),e.innerText=a.getHoursFormatted(this.optionsStore.options.localization.hourCycle),a.manipulate(1,t.Unit.hours)}))}}class B{constructor(){this.optionsStore=h.locate(u),this.validation=h.locate(m)}getPicker(){const t=document.createElement("div");t.classList.add(i.css.minuteContainer);const e=1===this.optionsStore.options.stepping?5:this.optionsStore.options.stepping;for(let s=0;s<60/e;s++){const e=document.createElement("div");e.setAttribute("data-action",z.selectMinute),t.appendChild(e)}return t}_update(e,s){const o=e.getElementsByClassName(i.css.minuteContainer)[0],a=this.optionsStore.viewDate.clone.startOf(t.Unit.hours),n=1===this.optionsStore.options.stepping?5:this.optionsStore.options.stepping;o.querySelectorAll(`[data-action="${z.selectMinute}"]`).forEach((e=>{const o=[];o.push(i.css.minute),this.validation.isValid(a,t.Unit.minutes)||o.push(i.css.disabled),s(t.Unit.minutes,a,o,e),e.classList.remove(...e.classList),e.classList.add(...o),e.setAttribute("data-value",`${a.minutes}`),e.innerText=a.minutesFormatted,a.manipulate(n,t.Unit.minutes)}))}}class W{constructor(){this.optionsStore=h.locate(u),this.validation=h.locate(m)}getPicker(){const t=document.createElement("div");t.classList.add(i.css.secondContainer);for(let e=0;e<12;e++){const e=document.createElement("div");e.setAttribute("data-action",z.selectSecond),t.appendChild(e)}return t}_update(e,s){const o=e.getElementsByClassName(i.css.secondContainer)[0],a=this.optionsStore.viewDate.clone.startOf(t.Unit.minutes);o.querySelectorAll(`[data-action="${z.selectSecond}"]`).forEach((e=>{const o=[];o.push(i.css.second),this.validation.isValid(a,t.Unit.seconds)||o.push(i.css.disabled),s(t.Unit.seconds,a,o,e),e.classList.remove(...e.classList),e.classList.add(...o),e.setAttribute("data-value",`${a.seconds}`),e.innerText=a.secondsFormatted,a.manipulate(5,t.Unit.seconds)}))}}class q{static toggle(t){t.classList.contains(i.css.show)?this.hide(t):this.show(t)}static showImmediately(t){t.classList.remove(i.css.collapsing),t.classList.add(i.css.collapse,i.css.show),t.style.height=""}static show(t){if(t.classList.contains(i.css.collapsing)||t.classList.contains(i.css.show))return;t.style.height="0",t.classList.remove(i.css.collapse),t.classList.add(i.css.collapsing),setTimeout((()=>{q.showImmediately(t)}),this.getTransitionDurationFromElement(t)),t.style.height=`${t.scrollHeight}px`}static hideImmediately(t){t&&(t.classList.remove(i.css.collapsing,i.css.show),t.classList.add(i.css.collapse))}static hide(t){if(t.classList.contains(i.css.collapsing)||!t.classList.contains(i.css.show))return;t.style.height=`${t.getBoundingClientRect().height}px`;t.offsetHeight,t.classList.remove(i.css.collapse,i.css.show),t.classList.add(i.css.collapsing),t.style.height="",setTimeout((()=>{q.hideImmediately(t)}),this.getTransitionDurationFromElement(t))}}q.getTransitionDurationFromElement=t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:s}=window.getComputedStyle(t);const i=Number.parseFloat(e),o=Number.parseFloat(s);return i||o?(e=e.split(",")[0],s=s.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(s))):0};class Y{constructor(){this._isVisible=!1,this._documentClickEvent=t=>{this.optionsStore.options.debug||window.debug||!this._isVisible||t.composedPath().includes(this.widget)||t.composedPath()?.includes(this.optionsStore.element)||this.hide()},this._actionsClickEvent=t=>{this._eventEmitters.action.emit({e:t})},this.optionsStore=h.locate(u),this.validation=h.locate(m),this.dates=h.locate($),this.dateDisplay=h.locate(H),this.monthDisplay=h.locate(x),this.yearDisplay=h.locate(I),this.decadeDisplay=h.locate(P),this.timeDisplay=h.locate(N),this.hourDisplay=h.locate(F),this.minuteDisplay=h.locate(B),this.secondDisplay=h.locate(W),this._eventEmitters=h.locate(g),this._widget=void 0,this._eventEmitters.updateDisplay.subscribe((t=>{this._update(t)}))}get widget(){return this._widget}get dateContainer(){return this.widget?.querySelector(`div.${i.css.dateContainer}`)}get timeContainer(){return this.widget?.querySelector(`div.${i.css.timeContainer}`)}get isVisible(){return this._isVisible}_update(e){if(this.widget)switch(e){case t.Unit.seconds:this.secondDisplay._update(this.widget,this.paint);break;case t.Unit.minutes:this.minuteDisplay._update(this.widget,this.paint);break;case t.Unit.hours:this.hourDisplay._update(this.widget,this.paint);break;case t.Unit.date:this.dateDisplay._update(this.widget,this.paint);break;case t.Unit.month:this.monthDisplay._update(this.widget,this.paint);break;case t.Unit.year:this.yearDisplay._update(this.widget,this.paint);break;case"decade":this.decadeDisplay._update(this.widget,this.paint);break;case"clock":if(!this._hasTime)break;this.timeDisplay._update(this.widget),this._update(t.Unit.hours),this._update(t.Unit.minutes),this._update(t.Unit.seconds);break;case"calendar":this._update(t.Unit.date),this._update(t.Unit.year),this._update(t.Unit.month),this.decadeDisplay._update(this.widget,this.paint),this._updateCalendarHeader();break;case"all":this._hasTime&&this._update("clock"),this._hasDate&&this._update("calendar")}}paint(t,e,s,i){}show(){if(null==this.widget){if(this._showSetDefaultIfNeeded(),this._buildWidget(),this._updateTheme(),this._showSetupViewMode(),this.optionsStore.options.display.inline)this.optionsStore.element.appendChild(this.widget);else{const t=this.optionsStore.options?.container||document.body,e=this.optionsStore.options?.display?.placement||"bottom";t.appendChild(this.widget),this.createPopup(this.optionsStore.element,this.widget,{modifiers:[{name:"eventListeners",enabled:!0}],placement:"rtl"===document.documentElement.dir?`${e}-end`:`${e}-start`}).then()}"clock"==this.optionsStore.options.display.viewMode&&this._eventEmitters.action.emit({e:null,action:z.showClock}),this.widget.querySelectorAll("[data-action]").forEach((t=>t.addEventListener("click",this._actionsClickEvent))),this._hasTime&&this.optionsStore.options.display.sideBySide&&(this.timeDisplay._update(this.widget),this.widget.getElementsByClassName(i.css.clockContainer)[0].style.display="grid")}this.widget.classList.add(i.css.show),this.optionsStore.options.display.inline||(this.updatePopup(),document.addEventListener("click",this._documentClickEvent)),this._eventEmitters.triggerEvent.emit({type:i.events.show}),this._isVisible=!0}_showSetupViewMode(){const t=this._hasTime&&!this._hasDate;t?(this.optionsStore.currentView="clock",this._eventEmitters.action.emit({e:null,action:z.showClock})):this.optionsStore.currentCalendarViewMode||(this.optionsStore.currentCalendarViewMode=this.optionsStore.minimumCalendarViewMode),t||"clock"===this.optionsStore.options.display.viewMode||(this._hasTime&&(this.optionsStore.options.display.sideBySide?q.show(this.timeContainer):q.hideImmediately(this.timeContainer)),q.show(this.dateContainer)),this._hasDate&&this._showMode()}_showSetDefaultIfNeeded(){if(0==this.dates.picked.length){if(this.optionsStore.options.useCurrent&&!this.optionsStore.options.defaultDate){const e=(new l).setLocalization(this.optionsStore.options.localization);if(!this.optionsStore.options.keepInvalid){let s=0,i=1;for(this.optionsStore.options.restrictions.maxDate?.isBefore(e)&&(i=-1);!this.validation.isValid(e)&&s>31;)e.manipulate(i,t.Unit.date),s++}this.dates.setValue(e)}this.optionsStore.options.defaultDate&&this.dates.setValue(this.optionsStore.options.defaultDate)}}async createPopup(t,e,s){let i;if(window?.Popper)i=window?.Popper?.createPopper;else{const{createPopper:t}=await import("@popperjs/core");i=t}i&&(this._popperInstance=i(t,e,s))}updatePopup(){this._popperInstance?.update()}_showMode(t){if(!this.widget)return;if(t){const e=Math.max(this.optionsStore.minimumCalendarViewMode,Math.min(3,this.optionsStore.currentCalendarViewMode+t));if(this.optionsStore.currentCalendarViewMode==e)return;this.optionsStore.currentCalendarViewMode=e}this.widget.querySelectorAll(`.${i.css.dateContainer} > div:not(.${i.css.calendarHeader}), .${i.css.timeContainer} > div:not(.${i.css.clockContainer})`).forEach((t=>t.style.display="none"));const e=p[this.optionsStore.currentCalendarViewMode],s=this.widget.querySelector(`.${e.className}`);switch(e.className){case i.css.decadesContainer:this.decadeDisplay._update(this.widget,this.paint);break;case i.css.yearsContainer:this.yearDisplay._update(this.widget,this.paint);break;case i.css.monthsContainer:this.monthDisplay._update(this.widget,this.paint);break;case i.css.daysContainer:this.dateDisplay._update(this.widget,this.paint)}s.style.display="grid",this.optionsStore.options.display.sideBySide&&(this.widget.querySelectorAll(`.${i.css.clockContainer}`)[0].style.display="grid"),this._updateCalendarHeader(),this._eventEmitters.viewUpdate.emit()}_updateTheme(t){if(this.widget){if(t){if(this.optionsStore.options.display.theme===t)return;this.optionsStore.options.display.theme=t}this.widget.classList.remove("light","dark"),this.widget.classList.add(this._getThemeClass()),"auto"===this.optionsStore.options.display.theme?window.matchMedia(i.css.isDarkPreferredQuery).addEventListener("change",(()=>this._updateTheme())):window.matchMedia(i.css.isDarkPreferredQuery).removeEventListener("change",(()=>this._updateTheme()))}}_getThemeClass(){const t=this.optionsStore.options.display.theme||"auto",e=window.matchMedia&&window.matchMedia(i.css.isDarkPreferredQuery).matches;switch(t){case"light":return i.css.lightTheme;case"dark":return i.css.darkTheme;case"auto":return e?i.css.darkTheme:i.css.lightTheme}}_updateCalendarHeader(){if(!this._hasDate)return;const t=[...this.widget.querySelector(`.${i.css.dateContainer} div[style*="display: grid"]`).classList].find((t=>t.startsWith(i.css.dateContainer))),[e,s,o]=this.widget.getElementsByClassName(i.css.calendarHeader)[0].getElementsByTagName("div");switch(t){case i.css.decadesContainer:e.setAttribute("title",this.optionsStore.options.localization.previousCentury),s.setAttribute("title",""),o.setAttribute("title",this.optionsStore.options.localization.nextCentury);break;case i.css.yearsContainer:e.setAttribute("title",this.optionsStore.options.localization.previousDecade),s.setAttribute("title",this.optionsStore.options.localization.selectDecade),o.setAttribute("title",this.optionsStore.options.localization.nextDecade);break;case i.css.monthsContainer:e.setAttribute("title",this.optionsStore.options.localization.previousYear),s.setAttribute("title",this.optionsStore.options.localization.selectYear),o.setAttribute("title",this.optionsStore.options.localization.nextYear);break;case i.css.daysContainer:e.setAttribute("title",this.optionsStore.options.localization.previousMonth),s.setAttribute("title",this.optionsStore.options.localization.selectMonth),o.setAttribute("title",this.optionsStore.options.localization.nextMonth),s.setAttribute(t,this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat))}s.innerText=s.getAttribute(t)}hide(){this.widget&&this._isVisible&&(this.widget.classList.remove(i.css.show),this._isVisible&&(this._eventEmitters.triggerEvent.emit({type:i.events.hide,date:this.optionsStore.unset?null:this.dates.lastPicked?.clone}),this._isVisible=!1),document.removeEventListener("click",this._documentClickEvent))}toggle(){return this._isVisible?this.hide():this.show()}_dispose(){document.removeEventListener("click",this._documentClickEvent),this.widget&&(this.widget.querySelectorAll("[data-action]").forEach((t=>t.removeEventListener("click",this._actionsClickEvent))),this.widget.parentNode.removeChild(this.widget),this._widget=void 0)}_buildWidget(){const t=document.createElement("div");t.classList.add(i.css.widget);const e=document.createElement("div");e.classList.add(i.css.dateContainer),e.append(this.getHeadTemplate(),this.decadeDisplay.getPicker(),this.yearDisplay.getPicker(),this.monthDisplay.getPicker(),this.dateDisplay.getPicker());const s=document.createElement("div");s.classList.add(i.css.timeContainer),s.appendChild(this.timeDisplay.getPicker(this._iconTag.bind(this))),s.appendChild(this.hourDisplay.getPicker()),s.appendChild(this.minuteDisplay.getPicker()),s.appendChild(this.secondDisplay.getPicker());const o=document.createElement("div");if(o.classList.add(i.css.toolbar),o.append(...this.getToolbarElements()),this.optionsStore.options.display.inline&&t.classList.add(i.css.inline),this.optionsStore.options.display.calendarWeeks&&t.classList.add("calendarWeeks"),this.optionsStore.options.display.sideBySide&&this._hasDateAndTime)return void this._buildWidgetSideBySide(t,e,s,o);"top"===this.optionsStore.options.display.toolbarPlacement&&t.appendChild(o);const a=(e,s,o,a)=>{e&&(s&&(o.classList.add(i.css.collapse),a&&o.classList.add(i.css.show)),t.appendChild(o))};a(this._hasDate,this._hasTime,e,"clock"!==this.optionsStore.options.display.viewMode),a(this._hasTime,this._hasDate,s,"clock"===this.optionsStore.options.display.viewMode),"bottom"===this.optionsStore.options.display.toolbarPlacement&&t.appendChild(o);const n=document.createElement("div");n.classList.add("arrow"),n.setAttribute("data-popper-arrow",""),t.appendChild(n),this._widget=t}_buildWidgetSideBySide(t,e,s,o){t.classList.add(i.css.sideBySide),"top"===this.optionsStore.options.display.toolbarPlacement&&t.appendChild(o);const a=document.createElement("div");a.classList.add("td-row"),e.classList.add("td-half"),s.classList.add("td-half"),a.appendChild(e),a.appendChild(s),t.appendChild(a),"bottom"===this.optionsStore.options.display.toolbarPlacement&&t.appendChild(o),this._widget=t}get _hasTime(){return this.optionsStore.options.display.components.clock&&(this.optionsStore.options.display.components.hours||this.optionsStore.options.display.components.minutes||this.optionsStore.options.display.components.seconds)}get _hasDate(){return this.optionsStore.options.display.components.calendar&&(this.optionsStore.options.display.components.year||this.optionsStore.options.display.components.month||this.optionsStore.options.display.components.date)}get _hasDateAndTime(){return this._hasDate&&this._hasTime}getToolbarElements(){const t=[];if(this.optionsStore.options.display.buttons.today){const e=document.createElement("div");e.setAttribute("data-action",z.today),e.setAttribute("title",this.optionsStore.options.localization.today),e.appendChild(this._iconTag(this.optionsStore.options.display.icons.today)),t.push(e)}if(!this.optionsStore.options.display.sideBySide&&this._hasDate&&this._hasTime){let e,s;"clock"===this.optionsStore.options.display.viewMode?(e=this.optionsStore.options.localization.selectDate,s=this.optionsStore.options.display.icons.date):(e=this.optionsStore.options.localization.selectTime,s=this.optionsStore.options.display.icons.time);const i=document.createElement("div");i.setAttribute("data-action",z.togglePicker),i.setAttribute("title",e),i.appendChild(this._iconTag(s)),t.push(i)}if(this.optionsStore.options.display.buttons.clear){const e=document.createElement("div");e.setAttribute("data-action",z.clear),e.setAttribute("title",this.optionsStore.options.localization.clear),e.appendChild(this._iconTag(this.optionsStore.options.display.icons.clear)),t.push(e)}if(this.optionsStore.options.display.buttons.close){const e=document.createElement("div");e.setAttribute("data-action",z.close),e.setAttribute("title",this.optionsStore.options.localization.close),e.appendChild(this._iconTag(this.optionsStore.options.display.icons.close)),t.push(e)}return t}getHeadTemplate(){const t=document.createElement("div");t.classList.add(i.css.calendarHeader);const e=document.createElement("div");e.classList.add(i.css.previous),e.setAttribute("data-action",z.previous),e.appendChild(this._iconTag(this.optionsStore.options.display.icons.previous));const s=document.createElement("div");s.classList.add(i.css.switch),s.setAttribute("data-action",z.changeCalendarView);const o=document.createElement("div");return o.classList.add(i.css.next),o.setAttribute("data-action",z.next),o.appendChild(this._iconTag(this.optionsStore.options.display.icons.next)),t.append(e,s,o),t}_iconTag(t){if("sprites"===this.optionsStore.options.display.icons.type){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","use");return s.setAttribute("xlink:href",t),s.setAttribute("href",t),e.appendChild(s),e}const e=document.createElement("i");return e.classList.add(...t.split(" ")),e}_rebuild(){const t=this._isVisible;this._dispose(),t&&this.show()}refreshCurrentView(){switch(this._isVisible||this._dispose(),this.optionsStore.currentView){case"clock":this._update("clock");break;case"calendar":this._update(t.Unit.date);break;case"months":this._update(t.Unit.month);break;case"years":this._update(t.Unit.year);break;case"decades":this._update("decade")}}}class j{constructor(){this.optionsStore=h.locate(u),this.dates=h.locate($),this.validation=h.locate(m),this.display=h.locate(Y),this._eventEmitters=h.locate(g),this._eventEmitters.action.subscribe((t=>{this.do(t.e,t.action)}))}do(e,s){const o=e?.currentTarget;if(o?.classList?.contains(i.css.disabled))return;s=s||o?.dataset?.action;const a=(this.dates.lastPicked||this.optionsStore.viewDate).clone;switch(s){case z.next:case z.previous:this.handleNextPrevious(s);break;case z.changeCalendarView:this.display._showMode(1),this.display._updateCalendarHeader();break;case z.selectMonth:case z.selectYear:case z.selectDecade:this.handleSelectCalendarMode(s,o);break;case z.selectDay:this.handleSelectDay(o);break;case z.selectHour:{let t=+o.dataset.value;a.hours>=12&&this.optionsStore.isTwelveHour&&(t+=12),a.hours=t,this.dates.setValue(a,this.dates.lastPickedIndex),this.hideOrClock(e);break}case z.selectMinute:a.minutes=+o.dataset.value,this.dates.setValue(a,this.dates.lastPickedIndex),this.hideOrClock(e);break;case z.selectSecond:a.seconds=+o.dataset.value,this.dates.setValue(a,this.dates.lastPickedIndex),this.hideOrClock(e);break;case z.incrementHours:this.manipulateAndSet(a,t.Unit.hours);break;case z.incrementMinutes:this.manipulateAndSet(a,t.Unit.minutes,this.optionsStore.options.stepping);break;case z.incrementSeconds:this.manipulateAndSet(a,t.Unit.seconds);break;case z.decrementHours:this.manipulateAndSet(a,t.Unit.hours,-1);break;case z.decrementMinutes:this.manipulateAndSet(a,t.Unit.minutes,-1*this.optionsStore.options.stepping);break;case z.decrementSeconds:this.manipulateAndSet(a,t.Unit.seconds,-1);break;case z.toggleMeridiem:this.manipulateAndSet(a,t.Unit.hours,this.dates.lastPicked.hours>=12?-12:12);break;case z.togglePicker:this.handleToggle(o);break;case z.showClock:case z.showHours:case z.showMinutes:case z.showSeconds:this.optionsStore.options.display.sideBySide||"clock"===this.optionsStore.currentView||(q.hideImmediately(this.display.dateContainer),q.showImmediately(this.display.timeContainer)),this.handleShowClockContainers(s);break;case z.clear:this.dates.setValue(null),this.display._updateCalendarHeader();break;case z.close:this.display.hide();break;case z.today:{const e=(new l).setLocalization(this.optionsStore.options.localization);this._eventEmitters.updateViewDate.emit(e),this.validation.isValid(e,t.Unit.date)&&this.dates.setValue(e,this.dates.lastPickedIndex);break}}}handleShowClockContainers(e){if(!this.display._hasTime)return void i.errorMessages.throwError("Cannot show clock containers when time is disabled.");this.optionsStore.currentView="clock",this.display.widget.querySelectorAll(`.${i.css.timeContainer} > div`).forEach((t=>t.style.display="none"));let s="";switch(e){case z.showClock:s=i.css.clockContainer,this.display._update("clock");break;case z.showHours:s=i.css.hourContainer,this.display._update(t.Unit.hours);break;case z.showMinutes:s=i.css.minuteContainer,this.display._update(t.Unit.minutes);break;case z.showSeconds:s=i.css.secondContainer,this.display._update(t.Unit.seconds)}this.display.widget.getElementsByClassName(s)[0].style.display="grid"}handleNextPrevious(t){const{unit:e,step:s}=p[this.optionsStore.currentCalendarViewMode];t===z.next?this.optionsStore.viewDate.manipulate(s,e):this.optionsStore.viewDate.manipulate(-1*s,e),this._eventEmitters.viewUpdate.emit(),this.display._showMode()}hideOrClock(t){this.optionsStore.isTwelveHour||this.optionsStore.options.display.components.minutes||this.optionsStore.options.display.keepOpen||this.optionsStore.options.display.inline?this.do(t,z.showClock):this.display.hide()}manipulateAndSet(t,e,s=1){const i=t.manipulate(s,e);this.validation.isValid(i,e)&&this.dates.setValue(i,this.dates.lastPickedIndex)}handleSelectCalendarMode(t,e){const s=+e.dataset.value;switch(t){case z.selectMonth:this.optionsStore.viewDate.month=s;break;case z.selectYear:case z.selectDecade:this.optionsStore.viewDate.year=s}this.optionsStore.currentCalendarViewMode===this.optionsStore.minimumCalendarViewMode?(this.dates.setValue(this.optionsStore.viewDate,this.dates.lastPickedIndex),this.optionsStore.options.display.inline||this.display.hide()):this.display._showMode(-1)}handleToggle(t){t.getAttribute("title")===this.optionsStore.options.localization.selectDate?(t.setAttribute("title",this.optionsStore.options.localization.selectTime),t.innerHTML=this.display._iconTag(this.optionsStore.options.display.icons.time).outerHTML,this.display._updateCalendarHeader(),this.optionsStore.refreshCurrentView()):(t.setAttribute("title",this.optionsStore.options.localization.selectDate),t.innerHTML=this.display._iconTag(this.optionsStore.options.display.icons.date).outerHTML,this.display._hasTime&&(this.handleShowClockContainers(z.showClock),this.display._update("clock"))),this.display.widget.querySelectorAll(`.${i.css.dateContainer}, .${i.css.timeContainer}`).forEach((t=>q.toggle(t))),this._eventEmitters.viewUpdate.emit()}handleSelectDay(e){const s=this.optionsStore.viewDate.clone;e.classList.contains(i.css.old)&&s.manipulate(-1,t.Unit.month),e.classList.contains(i.css.new)&&s.manipulate(1,t.Unit.month),s.date=+e.dataset.day,this.optionsStore.options.dateRange?this.handleDateRange(s):this.optionsStore.options.multipleDates?this.handleMultiDate(s):this.dates.setValue(s,this.dates.lastPickedIndex),this.display._hasTime||this.optionsStore.options.display.keepOpen||this.optionsStore.options.display.inline||this.optionsStore.options.multipleDates||this.optionsStore.options.dateRange||this.display.hide()}handleMultiDate(e){let s=this.dates.pickedIndex(e,t.Unit.date);console.log(s),-1!==s?this.dates.setValue(null,s):(s=this.dates.lastPickedIndex+1,0===this.dates.picked.length&&(s=0),this.dates.setValue(e,s))}handleDateRange(t){switch(this.dates.picked.length){case 2:this.dates.clear();break;case 1:{const e=this.dates.picked[0];if(t.getTime()===e.getTime()){this.dates.clear();break}return t.isBefore(e)?(this.dates.setValue(t,0),void this.dates.setValue(e,1)):void this.dates.setValue(t,1)}}this.dates.setValue(t,0)}}class R{constructor(t,e={}){this._subscribers={},this._isDisabled=!1,this._inputChangeEvent=t=>{const e=t?.detail;if(e)return;const s=()=>{this.dates.lastPicked&&(this.optionsStore.viewDate=this.dates.lastPicked.clone)},i=this.optionsStore.input.value;if(this.optionsStore.options.multipleDates)try{const t=i.split(this.optionsStore.options.multipleDatesSeparator);for(let e=0;e{this.optionsStore.element?.disabled||this.optionsStore.input?.disabled||this.toggle()},h=new c,this._eventEmitters=h.locate(g),this.optionsStore=h.locate(u),this.display=h.locate(Y),this.dates=h.locate($),this.actions=h.locate(j),t||i.errorMessages.mustProvideElement(),this.optionsStore.element=t,this._initializeOptions(e,f,!0),this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization),this.optionsStore.unset=!0,this._initializeInput(),this._initializeToggle(),this.optionsStore.options.display.inline&&this.display.show(),this._eventEmitters.triggerEvent.subscribe((t=>{this._triggerEvent(t)})),this._eventEmitters.viewUpdate.subscribe((()=>{this._viewUpdate()})),this._eventEmitters.updateViewDate.subscribe((t=>{this.viewDate=t}))}get viewDate(){return this.optionsStore.viewDate}set viewDate(t){this.optionsStore.viewDate=t,this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization),this.display._update("clock"===this.optionsStore.currentView?"clock":"calendar")}updateOptions(t,e=!1){e?this._initializeOptions(t,f):this._initializeOptions(t,this.optionsStore.options),this.optionsStore.viewDate.setLocalization(this.optionsStore.options.localization),this.display.refreshCurrentView()}toggle(){this._isDisabled||this.display.toggle()}show(){this._isDisabled||this.display.show()}hide(){this.display.hide()}disable(){this._isDisabled=!0,this.optionsStore.input?.setAttribute("disabled","disabled"),this.display.hide()}enable(){this._isDisabled=!1,this.optionsStore.input?.removeAttribute("disabled")}clear(){this.optionsStore.input.value="",this.dates.clear()}subscribe(t,e){let s;"string"==typeof t&&(t=[t]),s=Array.isArray(e)?e:[e],t.length!==s.length&&i.errorMessages.subscribeMismatch();const o=[];for(let e=0;e{e(t)}))}_viewUpdate(){this._triggerEvent({type:i.events.update,viewDate:this.optionsStore.viewDate.clone})}_unsubscribe(t,e){this._subscribers[t].splice(e,1)}_initializeOptions(t,e,s=!1){let i=V.deepCopy(t);i=V._mergeOptions(i,e),s&&(i=V._dataToOptions(this.optionsStore.element,i)),V._validateConflicts(i),i.viewDate=i.viewDate.setLocalization(i.localization),this.optionsStore.viewDate.isSame(i.viewDate)||(this.optionsStore.viewDate=i.viewDate),i.display.components.year&&(this.optionsStore.minimumCalendarViewMode=2),i.display.components.month&&(this.optionsStore.minimumCalendarViewMode=1),i.display.components.date&&(this.optionsStore.minimumCalendarViewMode=0),this.optionsStore.currentCalendarViewMode=Math.max(this.optionsStore.minimumCalendarViewMode,this.optionsStore.currentCalendarViewMode),p[this.optionsStore.currentCalendarViewMode].name!==i.display.viewMode&&(this.optionsStore.currentCalendarViewMode=Math.max(p.findIndex((t=>t.name===i.display.viewMode)),this.optionsStore.minimumCalendarViewMode)),this.display?.isVisible&&this.display._update("all"),i.display.components.useTwentyfourHour&&void 0===i.localization.hourCycle?i.localization.hourCycle="h24":void 0===i.localization.hourCycle&&(i.localization.hourCycle=d(i.localization.locale)),this.optionsStore.options=i}_initializeInput(){if("INPUT"==this.optionsStore.element.tagName)this.optionsStore.input=this.optionsStore.element;else{const t=this.optionsStore.element.dataset.tdTargetInput;this.optionsStore.input=null==t||"nearest"==t?this.optionsStore.element.querySelector("input"):this.optionsStore.element.querySelector(t)}this.optionsStore.input&&(!this.optionsStore.input.value&&this.optionsStore.options.defaultDate&&(this.optionsStore.input.value=this.dates.formatInput(this.optionsStore.options.defaultDate)),this.optionsStore.input.addEventListener("change",this._inputChangeEvent),this.optionsStore.options.allowInputToggle&&(this.optionsStore.input.addEventListener("click",this._toggleClickEvent),this.optionsStore.input.addEventListener("focus",this._toggleClickEvent)),this.optionsStore.input.value&&this._inputChangeEvent())}_initializeToggle(){if(this.optionsStore.options.display.inline)return;let t=this.optionsStore.element.dataset.tdTargetToggle;"nearest"==t&&(t='[data-td-toggle="datetimepicker"]'),this._toggle=null==t?this.optionsStore.element:this.optionsStore.element.querySelector(t),this._toggle.addEventListener("click",this._toggleClickEvent)}_handleAfterChangeEvent(t){!this.optionsStore.options.promptTimeOnDateChange||this.optionsStore.options.multipleDates||this.optionsStore.options.display.inline||this.optionsStore.options.display.sideBySide||!this.display._hasTime||this.display.widget?.getElementsByClassName(i.css.show)[0].classList.contains(i.css.timeContainer)||!t.oldDate&&this.optionsStore.options.useCurrent||t.oldDate&&t.date?.isSame(t.oldDate)||(clearTimeout(this._currentPromptTimeTimeout),this._currentPromptTimeTimeout=setTimeout((()=>{this.display.widget&&this._eventEmitters.action.emit({e:{currentTarget:this.display.widget.querySelector(`.${i.css.switch}`)},action:z.togglePicker})}),this.optionsStore.options.promptTimeOnDateChangeTransitionDelay))}}const Q={},J=t=>{Q[t.name]||(Q[t.name]=t.localization)},K=t=>{const e=Q[t];e&&(f.localization=e)},Z=function(t,e=undefined){return t?(t.installed||(t(e,{TempusDominus:R,Dates:$,Display:Y,DateTime:l,Namespace:i},X),t.installed=!0),X):X},G="6.7.10",X={TempusDominus:R,extend:Z,loadLocale:J,locale:K,Namespace:i,DefaultOptions:f,DateTime:l,Unit:t.Unit,version:G,DefaultEnLocalization:S};t.DateTime=l,t.DefaultEnLocalization=S,t.DefaultOptions=f,t.Namespace=i,t.TempusDominus=R,t.extend=Z,t.loadLocale=J,t.locale=K,t.version=G,Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/dist/locales/ar-SA.js b/dist/locales/ar-SA.js deleted file mode 100644 index b7a4acef8..000000000 --- a/dist/locales/ar-SA.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.ar_SA={})));})(this,(function(exports){'use strict';const name = 'ar-SA'; -const localization = { - today: 'اليوم', - clear: 'مسح', - close: 'إغلاق', - selectMonth: 'اختر الشهر', - previousMonth: 'الشهر السابق', - nextMonth: 'الشهر التالي', - selectYear: 'اختر السنة', - previousYear: 'العام السابق', - nextYear: 'العام التالي', - selectDecade: 'اختر العقد', - previousDecade: 'العقد السابق', - nextDecade: 'العقد التالي', - previousCentury: 'القرن السابق', - nextCentury: 'القرن التالي', - pickHour: 'اختر الساعة', - incrementHour: 'أضف ساعة', - decrementHour: 'أنقص ساعة', - pickMinute: 'اختر الدقيقة', - incrementMinute: 'أضف دقيقة', - decrementMinute: 'أنقص دقيقة', - pickSecond: 'اختر الثانية', - incrementSecond: 'أضف ثانية', - decrementSecond: 'أنقص ثانية', - toggleMeridiem: 'تبديل الفترة', - selectTime: 'اخر الوقت', - selectDate: 'اختر التاريخ', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'ar-SA', - startOfTheWeek: 1, - dateFormats: { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L: 'dd/MM/yyyy', - LL: 'd MMMM yyyy', - LLL: 'd MMMM yyyy HH:mm', - LLLL: 'dddd d MMMM yyyy HH:mm', - }, - ordinal: (n) => n, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/ar.js b/dist/locales/ar.js deleted file mode 100644 index 2756d9eb5..000000000 --- a/dist/locales/ar.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.ar={})));})(this,(function(exports){'use strict';const name = 'ar'; -const localization = { - today: 'اليوم', - clear: 'مسح', - close: 'إغلاق', - selectMonth: 'اختر الشهر', - previousMonth: 'الشهر السابق', - nextMonth: 'الشهر التالي', - selectYear: 'اختر السنة', - previousYear: 'العام السابق', - nextYear: 'العام التالي', - selectDecade: 'اختر العقد', - previousDecade: 'العقد السابق', - nextDecade: 'العقد التالي', - previousCentury: 'القرن السابق', - nextCentury: 'القرن التالي', - pickHour: 'اختر الساعة', - incrementHour: 'أضف ساعة', - decrementHour: 'أنقص ساعة', - pickMinute: 'اختر الدقيقة', - incrementMinute: 'أضف دقيقة', - decrementMinute: 'أنقص دقيقة', - pickSecond: 'اختر الثانية', - incrementSecond: 'أضف ثانية', - decrementSecond: 'أنقص ثانية', - toggleMeridiem: 'تبديل الفترة', - selectTime: 'اخر الوقت', - selectDate: 'اختر التاريخ', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'ar', - startOfTheWeek: 1, - dateFormats: { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L: 'd/M/yyyy', - LL: 'd MMMM yyyy', - LLL: 'd MMMM yyyy HH:mm', - LLLL: 'dddd d MMMM yyyy HH:mm', - }, - ordinal: (n) => n, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/de.js b/dist/locales/de.js deleted file mode 100644 index e3aa7f69e..000000000 --- a/dist/locales/de.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.de={})));})(this,(function(exports){'use strict';const name = 'de'; -const localization = { - today: 'Heute', - clear: 'Auswahl löschen', - close: 'Auswahlbox schließen', - selectMonth: 'Monat wählen', - previousMonth: 'Letzter Monat', - nextMonth: 'Nächster Monat', - selectYear: 'Jahr wählen', - previousYear: 'Letztes Jahr', - nextYear: 'Nächstes Jahr', - selectDecade: 'Jahrzehnt wählen', - previousDecade: 'Letztes Jahrzehnt', - nextDecade: 'Nächstes Jahrzehnt', - previousCentury: 'Letztes Jahrhundert', - nextCentury: 'Nächstes Jahrhundert', - pickHour: 'Stunde wählen', - incrementHour: 'Stunde erhöhen', - decrementHour: 'Stunde verringern', - pickMinute: 'Minute wählen', - incrementMinute: 'Minute erhöhen', - decrementMinute: 'Minute verringern', - pickSecond: 'Sekunde wählen', - incrementSecond: 'Sekunde erhöhen', - decrementSecond: 'Sekunde verringern', - toggleMeridiem: 'Tageszeit umschalten', - selectTime: 'Zeit wählen', - selectDate: 'Datum wählen', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'de', - startOfTheWeek: 1, - dateFormats: { - LTS: 'HH:mm:ss', - LT: 'HH:mm', - L: 'dd.MM.yyyy', - LL: 'd. MMMM yyyy', - LLL: 'd. MMMM yyyy HH:mm', - LLLL: 'dddd, d. MMMM yyyy HH:mm', - }, - ordinal: (n) => `${n}.`, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/es.js b/dist/locales/es.js deleted file mode 100644 index ed39b0ebe..000000000 --- a/dist/locales/es.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.es={})));})(this,(function(exports){'use strict';const name = 'es'; -const localization = { - today: 'Hoy', - clear: 'Borrar selección', - close: 'Cerrar selector', - selectMonth: 'Seleccionar mes', - previousMonth: 'Mes anterior', - nextMonth: 'Próximo mes', - selectYear: 'Seleccionar año', - previousYear: 'Año anterior', - nextYear: 'Próximo año', - selectDecade: 'Seleccionar década', - previousDecade: 'Década anterior', - nextDecade: 'Próxima década', - previousCentury: 'Siglo anterior', - nextCentury: 'Próximo siglo', - pickHour: 'Elegir hora', - incrementHour: 'Incrementar hora', - decrementHour: 'Decrementar hora', - pickMinute: 'Elegir minuto', - incrementMinute: 'Incrementar minuto', - decrementMinute: 'Decrementar minuto', - pickSecond: 'Elegir segundo', - incrementSecond: 'Incrementar segundo', - decrementSecond: 'Decrementar segundo', - toggleMeridiem: 'Cambiar AM/PM', - selectTime: 'Seleccionar tiempo', - selectDate: 'Seleccionar fecha', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - startOfTheWeek: 1, - locale: 'es', - dateFormats: { - LT: 'H:mm', - LTS: 'H:mm:ss', - L: 'dd/MM/yyyy', - LL: 'd [de] MMMM [de] yyyy', - LLL: 'd [de] MMMM [de] yyyy H:mm', - LLLL: 'dddd, d [de] MMMM [de] yyyy H:mm', - }, - ordinal: (n) => `${n}º`, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/fi.js b/dist/locales/fi.js deleted file mode 100644 index 6cb41cad5..000000000 --- a/dist/locales/fi.js +++ /dev/null @@ -1,51 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.fi={})));})(this,(function(exports){'use strict';const name = 'fi'; -const localization = { - today: 'Tänään', - clear: 'Tyhjennä', - close: 'Sulje', - selectMonth: 'Valitse kuukausi', - previousMonth: 'Edellinen kuukausi', - nextMonth: 'Seuraava kuukausi', - selectYear: 'Valitse vuosi', - previousYear: 'Edellinen vuosi', - nextYear: 'Seuraava vuosi', - selectDecade: 'Valitse vuosikymmen', - previousDecade: 'Edellinen vuosikymmen', - nextDecade: 'Seuraava vuosikymmen', - previousCentury: 'Edellinen vuosisata', - nextCentury: 'Seuraava vuosisata', - pickHour: 'Valitse tunnit', - incrementHour: 'Vähennä tunteja', - decrementHour: 'Lisää tunteja', - pickMinute: 'Valitse minuutit', - incrementMinute: 'Vähennä minuutteja', - decrementMinute: 'Lisää minuutteja', - pickSecond: 'Valitse sekuntit', - incrementSecond: 'Vähennä sekunteja', - decrementSecond: 'Lisää sekunteja', - toggleMeridiem: 'Vaihda kellonaikaa', - selectTime: 'Valitse aika', - selectDate: 'Valise päivä', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'fi', - startOfTheWeek: 1, - dateFormats: { - LT: 'HH.mm', - LTS: 'HH.mm.ss', - L: 'dd.MM.yyyy', - LL: 'd. MMMM[ta] yyyy', - LLL: 'd. MMMM[ta] yyyy, [klo] HH.mm', - LLLL: 'dddd, d. MMMM[ta] yyyy, [klo] HH.mm', - l: 'd.M.yyyy', - ll: 'd. MMM yyyy', - lll: 'd. MMM yyyy, [klo] HH.mm', - llll: 'ddd, d. MMM yyyy, [klo] HH.mm', - }, - ordinal: (n) => `${n}.`, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/fr.js b/dist/locales/fr.js deleted file mode 100644 index 45c32ef06..000000000 --- a/dist/locales/fr.js +++ /dev/null @@ -1,50 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.fr={})));})(this,(function(exports){'use strict';const name = 'fr'; -const localization = { - today: "Aujourd'hui", - clear: 'Effacer la sélection', - close: 'Fermer', - selectMonth: 'Sélectionner le mois', - previousMonth: 'Mois précédent', - nextMonth: 'Mois suivant', - selectYear: "Sélectionner l'année", - previousYear: 'Année précédente', - nextYear: 'Année suivante', - selectDecade: 'Sélectionner la décennie', - previousDecade: 'Décennie précédente', - nextDecade: 'Décennie suivante', - previousCentury: 'Siècle précédente', - nextCentury: 'Siècle suivante', - pickHour: "Sélectionner l'heure", - incrementHour: "Incrementer l'heure", - decrementHour: "Diminuer l'heure", - pickMinute: 'Sélectionner les minutes', - incrementMinute: 'Incrementer les minutes', - decrementMinute: 'Diminuer les minutes', - pickSecond: 'Sélectionner les secondes', - incrementSecond: 'Incrementer les secondes', - decrementSecond: 'Diminuer les secondes', - toggleMeridiem: 'Basculer AM-PM', - selectTime: "Sélectionner l'heure", - selectDate: 'Sélectionner une date', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'fr', - startOfTheWeek: 1, - dateFormats: { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L: 'dd/MM/yyyy', - LL: 'd MMMM yyyy', - LLL: 'd MMMM yyyy HH:mm', - LLLL: 'dddd d MMMM yyyy HH:mm', - }, - ordinal: (n) => { - const o = n === 1 ? 'er' : ''; - return `${n}${o}`; - }, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/hy.js b/dist/locales/hy.js deleted file mode 100644 index 609c55d89..000000000 --- a/dist/locales/hy.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.hy={})));})(this,(function(exports){'use strict';const name = 'hy'; -const localization = { - today: 'Այսօր', - clear: 'Ջնջել ընտրվածը', - close: 'Փակել', - selectMonth: 'Ընտրել ամիս', - previousMonth: 'Նախորդ ամիս', - nextMonth: 'Հաջորդ ամիս', - selectYear: 'Ընտրել տարի', - previousYear: 'Նախորդ տարի', - nextYear: 'Հաջորդ տարի', - selectDecade: 'Ընտրել տասնամյակ', - previousDecade: 'Նախորդ տասնամյակ', - nextDecade: 'Հաջորդ տասնամյակ', - previousCentury: 'Նախորդ դար', - nextCentury: 'Հաջորդ դար', - pickHour: 'Ընտրել ժամ', - incrementHour: 'Ավելացնել ժամ', - decrementHour: 'Նվազեցնել ժամ', - pickMinute: 'Ընտրել րոպե', - incrementMinute: 'Ավելացնել րոպե', - decrementMinute: 'Նվազեցնել րոպե', - pickSecond: 'Ընտրել երկրորդը', - incrementSecond: 'Ավելացնել վայրկյան', - decrementSecond: 'Նվազեցնել վայրկյան', - toggleMeridiem: 'Փոփոխել Ժամանակաշրջանը', - selectTime: 'Ընտրել Ժամ', - selectDate: 'Ընտրել ամսաթիվ', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'hy', - startOfTheWeek: 1, - dateFormats: { - LT: 'H:mm', - LTS: 'H:mm:ss', - L: 'dd.MM.yyyy', - LL: 'd MMMM yyyy թ.', - LLL: 'd MMMM yyyy թ., H:mm', - LLLL: 'dddd, d MMMM yyyy թ., H:mm', - }, - ordinal: (n) => n, - format: 'L LTS', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/it.js b/dist/locales/it.js deleted file mode 100644 index d966fa0fa..000000000 --- a/dist/locales/it.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.it={})));})(this,(function(exports){'use strict';const name = 'it'; -const localization = { - today: 'Oggi', - clear: 'Cancella selezione', - close: 'Chiudi', - selectMonth: 'Seleziona mese', - previousMonth: 'Mese precedente', - nextMonth: 'Mese successivo', - selectYear: 'Seleziona anno', - previousYear: 'Anno precedente', - nextYear: 'Anno successivo', - selectDecade: 'Seleziona decennio', - previousDecade: 'Decennio precedente', - nextDecade: 'Decennio successivo', - previousCentury: 'Secolo precedente', - nextCentury: 'Secolo successivo', - pickHour: "Seleziona l'ora", - incrementHour: "Incrementa l'ora", - decrementHour: "Decrementa l'ora", - pickMinute: 'Seleziona i minuti', - incrementMinute: 'Incrementa i minuti', - decrementMinute: 'Decrementa i minuti', - pickSecond: 'Seleziona i secondi', - incrementSecond: 'Incrementa i secondi', - decrementSecond: 'Decrementa i secondi', - toggleMeridiem: 'Scambia AM-PM', - selectTime: "Seleziona l'ora", - selectDate: 'Seleziona una data', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'it', - startOfTheWeek: 1, - dateFormats: { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L: 'dd/MM/yyyy', - LL: 'd MMMM yyyy', - LLL: 'd MMMM yyyy HH:mm', - LLLL: 'dddd d MMMM yyyy HH:mm', - }, - ordinal: (n) => `${n}º`, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/nl.js b/dist/locales/nl.js deleted file mode 100644 index c78a63b44..000000000 --- a/dist/locales/nl.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.nl={})));})(this,(function(exports){'use strict';const name = 'nl'; -const localization = { - today: 'Vandaag', - clear: 'Verwijder selectie', - close: 'Sluit de picker', - selectMonth: 'Selecteer een maand', - previousMonth: 'Vorige maand', - nextMonth: 'Volgende maand', - selectYear: 'Selecteer een jaar', - previousYear: 'Vorige jaar', - nextYear: 'Volgende jaar', - selectDecade: 'Selecteer decennium', - previousDecade: 'Vorige decennium', - nextDecade: 'Volgende decennium', - previousCentury: 'Vorige eeuw', - nextCentury: 'Volgende eeuw', - pickHour: 'Kies een uur', - incrementHour: 'Verhoog uur', - decrementHour: 'Verlaag uur', - pickMinute: 'Kies een minute', - incrementMinute: 'Verhoog minuut', - decrementMinute: 'Verlaag minuut', - pickSecond: 'Kies een seconde', - incrementSecond: 'Verhoog seconde', - decrementSecond: 'Verlaag seconde', - toggleMeridiem: 'Schakel tussen AM/PM', - selectTime: 'Selecteer een tijd', - selectDate: 'Selecteer een datum', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'nl', - startOfTheWeek: 1, - dateFormats: { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L: 'dd-MM-yyyy', - LL: 'd MMMM yyyy', - LLL: 'd MMMM yyyy HH:mm', - LLLL: 'dddd d MMMM yyyy HH:mm', - }, - ordinal: (n) => `[${n}${n === 1 || n === 8 || n >= 20 ? 'ste' : 'de'}]`, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/pl.js b/dist/locales/pl.js deleted file mode 100644 index db361307a..000000000 --- a/dist/locales/pl.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.pl={})));})(this,(function(exports){'use strict';const name = 'pl'; -const localization = { - today: 'Dzisiaj', - clear: 'Wyczyść', - close: 'Zamknij', - selectMonth: 'Wybierz miesiąc', - previousMonth: 'Poprzedni miesiąc', - nextMonth: 'Następny miesiąc', - selectYear: 'Wybierz rok', - previousYear: 'Poprzedni rok', - nextYear: 'Następny rok', - selectDecade: 'Wybierz dekadę', - previousDecade: 'Poprzednia dekada', - nextDecade: 'Następna dekada', - previousCentury: 'Poprzednie stulecie', - nextCentury: 'Następne stulecie', - pickHour: 'Wybierz godzinę', - incrementHour: 'Kolejna godzina', - decrementHour: 'Poprzednia godzina', - pickMinute: 'Wybierz minutę', - incrementMinute: 'Kolejna minuta', - decrementMinute: 'Poprzednia minuta', - pickSecond: 'Wybierz sekundę', - incrementSecond: 'Kolejna sekunda', - decrementSecond: 'Poprzednia sekunda', - toggleMeridiem: 'Przełącz porę dnia', - selectTime: 'Ustaw godzinę', - selectDate: 'Ustaw datę', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'pl', - startOfTheWeek: 1, - dateFormats: { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L: 'dd.MM.yyyy', - LL: 'd MMMM yyyy', - LLL: 'd MMMM yyyy HH:mm', - LLLL: 'dddd, d MMMM yyyy HH:mm', - }, - ordinal: (n) => `${n}.`, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/ro.js b/dist/locales/ro.js deleted file mode 100644 index 33c9edbdc..000000000 --- a/dist/locales/ro.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.ro={})));})(this,(function(exports){'use strict';const name = 'ro'; -const localization = { - today: 'Mergi la ziua de astăzi', - clear: 'Șterge selecția', - close: 'Închide calendarul', - selectMonth: 'Selectează luna', - previousMonth: 'Luna precedentă', - nextMonth: 'Luna următoare', - selectYear: 'Selectează anul', - previousYear: 'Anul precedent', - nextYear: 'Anul următor', - selectDecade: 'Selectează deceniul', - previousDecade: 'Deceniul precedent', - nextDecade: 'Deceniul următor', - previousCentury: 'Secolul precedent', - nextCentury: 'Secolul următor', - pickHour: 'Alege ora', - incrementHour: 'Incrementează ora', - decrementHour: 'Decrementează ora', - pickMinute: 'Alege minutul', - incrementMinute: 'Incrementează minutul', - decrementMinute: 'Decrementează minutul', - pickSecond: 'Alege secunda', - incrementSecond: 'Incrementează secunda', - decrementSecond: 'Decrementează secunda', - toggleMeridiem: 'Comută modul AM/PM', - selectTime: 'Selectează ora', - selectDate: 'Selectează data', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'ro', - startOfTheWeek: 1, - dateFormats: { - LT: 'H:mm', - LTS: 'H:mm:ss', - L: 'dd.MM.yyyy', - LL: 'd MMMM yyyy', - LLL: 'd MMMM yyyy H:mm', - LLLL: 'dddd, d MMMM yyyy H:mm', - }, - ordinal: (n) => n, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/ru.js b/dist/locales/ru.js deleted file mode 100644 index 21bd4c07c..000000000 --- a/dist/locales/ru.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.ru={})));})(this,(function(exports){'use strict';const name = 'ru'; -const localization = { - today: 'Перейти сегодня', - clear: 'Очистить выделение', - close: 'Закрыть сборщик', - selectMonth: 'Выбрать месяц', - previousMonth: 'Предыдущий месяц', - nextMonth: 'В следующем месяце', - selectYear: 'Выбрать год', - previousYear: 'Предыдущий год', - nextYear: 'В следующем году', - selectDecade: 'Выбрать десятилетие', - previousDecade: 'Предыдущее десятилетие', - nextDecade: 'Следующее десятилетие', - previousCentury: 'Предыдущий век', - nextCentury: 'Следующий век', - pickHour: 'Выберите час', - incrementHour: 'Время увеличения', - decrementHour: 'Уменьшить час', - pickMinute: 'Выбрать минуту', - incrementMinute: 'Минута приращения', - decrementMinute: 'Уменьшить минуту', - pickSecond: 'Выбрать второй', - incrementSecond: 'Увеличение секунды', - decrementSecond: 'Уменьшение секунды', - toggleMeridiem: 'Переключить период', - selectTime: 'Выбрать время', - selectDate: 'Выбрать дату', - dayViewHeaderFormat: { month: 'long', year: '2-digit' }, - locale: 'ru', - startOfTheWeek: 1, - dateFormats: { - LT: 'H:mm', - LTS: 'H:mm:ss', - L: 'dd.MM.yyyy', - LL: 'd MMMM yyyy г.', - LLL: 'd MMMM yyyy г., H:mm', - LLLL: 'dddd, d MMMM yyyy г., H:mm', - }, - ordinal: (n) => n, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/sl.js b/dist/locales/sl.js deleted file mode 100644 index a0870d4b6..000000000 --- a/dist/locales/sl.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.sl={})));})(this,(function(exports){'use strict';const name = 'sl'; -const localization = { - today: 'Danes', - clear: 'Počisti', - close: 'Zapri', - selectMonth: 'Izberite mesec', - previousMonth: 'Prejšnji mesec', - nextMonth: 'Naslednji mesec', - selectYear: 'Izberite leto', - previousYear: 'Prejšnje Leto', - nextYear: 'Naslednje leto', - selectDecade: 'Izberite desetletje', - previousDecade: 'Prejšnje desetletje', - nextDecade: 'Naslednje desetletje', - previousCentury: 'Prejšnje stoletje', - nextCentury: 'Naslednje stoletje', - pickHour: 'Izberite uro', - incrementHour: 'Povečaj ure', - decrementHour: 'Zmanjšaj uro', - pickMinute: 'Izberite minuto', - incrementMinute: 'Povečaj minuto', - decrementMinute: 'Zmanjšaj minuto', - pickSecond: 'Izberite drugo', - incrementSecond: 'Povečaj sekundo', - decrementSecond: 'Zmanjšaj sekundo', - toggleMeridiem: 'Preklop dopoldne/popoldne', - selectTime: 'Izberite čas', - selectDate: 'Izberite Datum', - dayViewHeaderFormat: { month: 'long', year: 'numeric' }, - locale: 'sl', - startOfTheWeek: 1, - dateFormats: { - LT: 'H:mm', - LTS: 'H:mm:ss', - L: 'dd.MM.yyyy', - LL: 'd. MMMM yyyy', - LLL: 'd. MMMM yyyy H:mm', - LLLL: 'dddd, d. MMMM yyyy H:mm', - }, - ordinal: (n) => `${n}.`, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/locales/tr.js b/dist/locales/tr.js deleted file mode 100644 index e51a016c0..000000000 --- a/dist/locales/tr.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.locales=g.tempusDominus.locales||{},g.tempusDominus.locales.tr={})));})(this,(function(exports){'use strict';const name = 'tr'; -const localization = { - today: 'Bugün', - clear: 'Temizle', - close: 'Kapat', - selectMonth: 'Ay seçin', - previousMonth: 'Önceki Ay', - nextMonth: 'Sonraki Ay', - selectYear: 'Yıl seçin', - previousYear: 'Önceki yıl', - nextYear: 'Sonraki yıl', - selectDecade: 'On yıl seçin', - previousDecade: 'Önceki on yıl', - nextDecade: 'Sonraki on yıl', - previousCentury: 'Önceki yüzyıl', - nextCentury: 'Sonraki yüzyıl', - pickHour: 'Saat seçin', - incrementHour: 'Saati ilerlet', - decrementHour: 'Saati gerilet', - pickMinute: 'Dakika seçin', - incrementMinute: 'Dakikayı ilerlet', - decrementMinute: 'Dakikayı gerilet', - pickSecond: 'Saniye seç', - incrementSecond: 'Saniyeyi ilerlet', - decrementSecond: 'Saniyeyi gerilet', - toggleMeridiem: 'Meridemi Değiştir AM-PM', - selectTime: 'Saat seçin', - selectDate: 'Tarih seçin', - dayViewHeaderFormat: { month: 'long', year: 'numeric' }, - locale: 'tr', - startOfTheWeek: 1, - dateFormats: { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L: 'dd.MM.yyyy', - LL: 'd MMMM yyyy', - LLL: 'd MMMM yyyy HH:mm', - LLLL: 'dddd, d MMMM yyyy HH:mm', - }, - ordinal: (n) => `${n}.`, - format: 'L LT', -};exports.localization=localization;exports.name=name;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/plugins/bi-one.js b/dist/plugins/bi-one.js deleted file mode 100644 index cbbd78e0a..000000000 --- a/dist/plugins/bi-one.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.plugins=g.tempusDominus.plugins||{},g.tempusDominus.plugins.bi_one={})));})(this,(function(exports){'use strict';// this obviously requires the Bootstrap Icons v1 libraries to be loaded -const biOneIcons = { - type: 'icons', - time: 'bi bi-clock', - date: 'bi bi-calendar-week', - up: 'bi bi-arrow-up', - down: 'bi bi-arrow-down', - previous: 'bi bi-chevron-left', - next: 'bi bi-chevron-right', - today: 'bi bi-calendar-check', - clear: 'bi bi-trash', - close: 'bi bi-x', -}; -// noinspection JSUnusedGlobalSymbols -const load = (_, __, tdFactory) => { - tdFactory.DefaultOptions.display.icons = biOneIcons; -};exports.biOneIcons=biOneIcons;exports.load=load;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/plugins/customDateFormat.js b/dist/plugins/customDateFormat.js deleted file mode 100644 index 219c77f6d..000000000 --- a/dist/plugins/customDateFormat.js +++ /dev/null @@ -1,8 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?module.exports=f():typeof define==='function'&&define.amd?define(f):(g=typeof globalThis!=='undefined'?globalThis:g||self,(g.tempusDominus=g.tempusDominus||{},g.tempusDominus.plugins=g.tempusDominus.plugins||{},g.tempusDominus.plugins.customDateFormat=f()));})(this,(function(){'use strict';var index = () => { - console.warn('This plugin has been merged with the main picker and is now longer required'); -};return index;})); \ No newline at end of file diff --git a/dist/plugins/fa-five.js b/dist/plugins/fa-five.js deleted file mode 100644 index a327d31e9..000000000 --- a/dist/plugins/fa-five.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports):typeof define==='function'&&define.amd?define(['exports'],f):(g=typeof globalThis!=='undefined'?globalThis:g||self,f((g.tempusDominus=g.tempusDominus||{},g.tempusDominus.plugins=g.tempusDominus.plugins||{},g.tempusDominus.plugins.fa_five={})));})(this,(function(exports){'use strict';// this obviously requires the FA 6 libraries to be loaded -const faFiveIcons = { - type: 'icons', - time: 'fas fa-clock', - date: 'fas fa-calendar', - up: 'fas fa-arrow-up', - down: 'fas fa-arrow-down', - previous: 'fas fa-chevron-left', - next: 'fas fa-chevron-right', - today: 'fas fa-calendar-check', - clear: 'fas fa-trash', - close: 'fas fa-times', -}; -// noinspection JSUnusedGlobalSymbols -const load = (_, __, tdFactory) => { - tdFactory.DefaultOptions.display.icons = faFiveIcons; -};exports.faFiveIcons=faFiveIcons;exports.load=load;Object.defineProperty(exports,'__esModule',{value:true});})); \ No newline at end of file diff --git a/dist/plugins/moment-parse.js b/dist/plugins/moment-parse.js deleted file mode 100644 index 960f32d3a..000000000 --- a/dist/plugins/moment-parse.js +++ /dev/null @@ -1,20 +0,0 @@ -/*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) - * Copyright 2013-2023 Jonathan Peterson - * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) - */ -(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?module.exports=f():typeof define==='function'&&define.amd?define(f):(g=typeof globalThis!=='undefined'?globalThis:g||self,(g.tempusDominus=g.tempusDominus||{},g.tempusDominus.plugins=g.tempusDominus.plugins||{},g.tempusDominus.plugins.moment_parse=f()));})(this,(function(){'use strict';var index = (option, tdClasses, tdFactory) => { - tdClasses.Dates.prototype.setFromInput = function (value, index) { - const converted = moment(value, option); - if (converted.isValid()) { - const date = tdFactory.DateTime.convert(converted.toDate(), this.optionsStore.options.localization.locale); - this.setValue(date, index); - } - else { - console.warn('Momentjs failed to parse the input date.'); - } - }; - tdClasses.Dates.prototype.formatInput = function (date) { - return moment(date).format(option); - }; -};return index;})); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4f567808b..dc3d7bd5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@eonasdan/tempus-dominus", - "version": "6.7.10", + "version": "6.7.16", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@eonasdan/tempus-dominus", - "version": "6.7.10", + "version": "6.7.16", "license": "MIT", "devDependencies": { "@eonasdan/parvus-server": "^1.1.9", @@ -1733,9 +1733,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001448", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001448.tgz", - "integrity": "sha512-tq2YI+MJnooG96XpbTRYkBxLxklZPOdLmNIOdIhvf7SNJan6u5vCKum8iT7ZfCt70m1GPkuC7P3TtX6UuhupuA==", + "version": "1.0.30001521", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz", + "integrity": "sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==", "dev": true, "funding": [ { @@ -1745,6 +1745,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -8004,9 +8008,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001448", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001448.tgz", - "integrity": "sha512-tq2YI+MJnooG96XpbTRYkBxLxklZPOdLmNIOdIhvf7SNJan6u5vCKum8iT7ZfCt70m1GPkuC7P3TtX6UuhupuA==", + "version": "1.0.30001521", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz", + "integrity": "sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==", "dev": true }, "chai": { diff --git a/package.json b/package.json index 9b40144ea..4be1d76cb 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "name": "Jonathan Peterson" }, "name": "@eonasdan/tempus-dominus", - "version": "6.7.10", + "version": "6.7.16", "style": "dist/css/tempus-dominus.css", "sass": "scss/tempus-dominus.scss", "main": "dist/js/tempus-dominus.js", diff --git a/sonar-project.properties b/sonar-project.properties index 954075ea1..f8ff41c37 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,7 +2,7 @@ sonar.organization=eonasdan sonar.projectKey=Eonasdan_tempus-dominus sonar.projectName=tempus-dominus -sonar.projectVersion=6.7.10 +sonar.projectVersion=6.7.16 sonar.sources = src/ sonar.tests = test/ diff --git a/src/docs/partials/change-log.html b/src/docs/partials/change-log.html index dc7f0541f..5c2a75289 100644 --- a/src/docs/partials/change-log.html +++ b/src/docs/partials/change-log.html @@ -2,6 +2,33 @@

Version 6

+
+

6.7.16

+

Bug fixes

+
    +
  • Reverted #2811
  • +
  • Fixed #2850
  • +
  • Fixed #2855
  • +
+
+ +
+

6.7.13

+

Bug fixes

+
    +
  • Selecting any date element now updates the selected date. #2811
  • +
  • Hotfix for #2846
  • +
+
+ +
+

6.7.11

+

Bug fixes

+
    +
  • Hotfix for #2837
  • +
+
+

6.7.10

New

diff --git a/src/docs/partials/installing.html b/src/docs/partials/installing.html index eeeb367db..17ce41dc3 100644 --- a/src/docs/partials/installing.html +++ b/src/docs/partials/installing.html @@ -15,10 +15,10 @@

Via CDN

<!-- Popperjs --> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" crossorigin="anonymous"></script> <!-- Tempus Dominus JavaScript --> -<script src="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.7.10/dist/js/tempus-dominus.min.js" crossorigin="anonymous"></script> +<script src="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.7.16/dist/js/tempus-dominus.min.js" crossorigin="anonymous"></script> <!-- Tempus Dominus Styles --> -<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.7.10/dist/css/tempus-dominus.min.css" crossorigin="anonymous"> +<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.7.16/dist/css/tempus-dominus.min.css" crossorigin="anonymous">
diff --git a/src/docs/templates/index.html b/src/docs/templates/index.html index ba1a1d9a5..134cb8a13 100644 --- a/src/docs/templates/index.html +++ b/src/docs/templates/index.html @@ -17,7 +17,7 @@

Powerful and robust date and time picker

- Currently v6.7.10 + Currently v6.7.16 · v5 docs

@@ -55,10 +55,10 @@

JsDelivr

<!-- Popperjs --> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha256-BRqBN7dYgABqtY9Hd4ynE+1slnEw+roEPFzQ7TRRfcg=" crossorigin="anonymous"></script> <!-- Tempus Dominus JavaScript --> -<script src="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.7.10/dist/js/tempus-dominus.min.js" crossorigin="anonymous"></script> +<script src="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.7.16/dist/js/tempus-dominus.min.js" crossorigin="anonymous"></script> <!-- Tempus Dominus Styles --> -<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.7.10/dist/css/tempus-dominus.min.css" crossorigin="anonymous"> +<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@eonasdan/tempus-dominus@6.7.16/dist/css/tempus-dominus.min.css" crossorigin="anonymous"> diff --git a/src/docs/templates/shell.html b/src/docs/templates/shell.html index 4c05d7755..2d00c4408 100644 --- a/src/docs/templates/shell.html +++ b/src/docs/templates/shell.html @@ -136,7 +136,7 @@ Tempus Dominus v6.0
diff --git a/src/js/actions.ts b/src/js/actions.ts index 832a5aa68..fa185106d 100644 --- a/src/js/actions.ts +++ b/src/js/actions.ts @@ -264,6 +264,7 @@ export default class Actions { this.optionsStore.viewDate, this.dates.lastPickedIndex ); + if (!this.optionsStore.options.display.inline) { this.display.hide(); } diff --git a/src/js/datetime.ts b/src/js/datetime.ts index 3b9e048dc..2c9717b8d 100644 --- a/src/js/datetime.ts +++ b/src/js/datetime.ts @@ -918,6 +918,7 @@ export class DateTime extends Date { : this.localization.hourCycle; const matches = { + y: this.year, yy: formatter({ year: '2-digit' }), yyyy: this.year, M: formatter({ month: 'numeric' }), diff --git a/src/js/jQuery-provider.js b/src/js/jQuery-provider.js index 1bce54dbc..3ad7d8186 100644 --- a/src/js/jQuery-provider.js +++ b/src/js/jQuery-provider.js @@ -2,7 +2,7 @@ /*global $, tempusDominus */ /*! - * Tempus Dominus v6.7.10 (https://getdatepicker.com/) + * Tempus Dominus v6.7.16 (https://getdatepicker.com/) * Copyright 2013-2021 Jonathan Peterson * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) */ diff --git a/src/js/locales/ca.ts b/src/js/locales/ca.ts new file mode 100644 index 000000000..a43ed2549 --- /dev/null +++ b/src/js/locales/ca.ts @@ -0,0 +1,45 @@ +const name = 'ca'; + +const localization = { + today: 'Avui', + clear: 'Esborrar selecció', + close: 'Tancar selector', + selectMonth: 'Seleccionar mes', + previousMonth: 'Mes anterior', + nextMonth: 'Pròxim mes', + selectYear: 'Seleccionar any', + previousYear: 'Any anterior', + nextYear: 'Pròxim any', + selectDecade: 'Seleccionar dècada', + previousDecade: 'Dècada anterior', + nextDecade: 'Pròxima dècada', + previousCentury: 'Segle anterior', + nextCentury: 'Pròxim segle', + pickHour: 'Escollir hora', + incrementHour: 'Incrementar hora', + decrementHour: 'Decrementar hora', + pickMinute: 'Escollir minut', + incrementMinute: 'Incrementar minut', + decrementMinute: 'Decrementar minut', + pickSecond: 'Escollir segon', + incrementSecond: 'Incrementar segon', + decrementSecond: 'Decrementar segon', + toggleMeridiem: 'Canviar AM/PM', + selectTime: 'Seleccionar temps', + selectDate: 'Seleccionar data', + dayViewHeaderFormat: { month: 'long', year: '2-digit' }, + startOfTheWeek: 1, + locale: 'ca', + dateFormats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'dd/MM/yyyy', + LL: 'd [de] MMMM [de] yyyy', + LLL: 'd [de] MMMM [de] yyyy H:mm', + LLLL: 'dddd, d [de] MMMM [de] yyyy H:mm', + }, + ordinal: (n) => `${n}º`, + format: 'L LT', +}; + +export { localization, name }; diff --git a/src/js/tempus-dominus.ts b/src/js/tempus-dominus.ts index 00762b975..2f9034570 100644 --- a/src/js/tempus-dominus.ts +++ b/src/js/tempus-dominus.ts @@ -240,11 +240,11 @@ class TempusDominus { if (this.optionsStore.options.allowInputToggle) { this.optionsStore.input?.removeEventListener( 'click', - this._toggleClickEvent + this._openClickEvent ); this.optionsStore.input?.removeEventListener( 'focus', - this._toggleClickEvent + this._openClickEvent ); } this._toggle?.removeEventListener('click', this._toggleClickEvent); @@ -413,6 +413,18 @@ class TempusDominus { } this.optionsStore.options = newConfig; + + if ( + newConfig.restrictions.maxDate && + this.viewDate.isAfter(newConfig.restrictions.maxDate) + ) + this.viewDate = newConfig.restrictions.maxDate; + + if ( + newConfig.restrictions.minDate && + this.viewDate.isBefore(newConfig.restrictions.minDate) + ) + this.viewDate = newConfig.restrictions.minDate; } /** @@ -443,8 +455,8 @@ class TempusDominus { this.optionsStore.input.addEventListener('change', this._inputChangeEvent); if (this.optionsStore.options.allowInputToggle) { - this.optionsStore.input.addEventListener('click', this._toggleClickEvent); - this.optionsStore.input.addEventListener('focus', this._toggleClickEvent); + this.optionsStore.input.addEventListener('click', this._openClickEvent); + this.optionsStore.input.addEventListener('focus', this._openClickEvent); } if (this.optionsStore.input.value) { @@ -506,7 +518,7 @@ class TempusDominus { this._eventEmitters.action.emit({ e: { currentTarget: this.display.widget.querySelector( - `.${Namespace.css.switch}` + '[data-action="togglePicker"]' ), }, action: ActionTypes.togglePicker, @@ -559,11 +571,29 @@ class TempusDominus { private _toggleClickEvent = () => { if ( (this.optionsStore.element as HTMLInputElement)?.disabled || - this.optionsStore.input?.disabled + this.optionsStore.input?.disabled || + //if we just have the input and allow input toggle is enabled, then don't cause a toggle + (this._toggle.nodeName === 'INPUT' && + (this._toggle as HTMLInputElement)?.type === 'text' && + this.optionsStore.options.allowInputToggle) ) return; this.toggle(); }; + + /** + * Event for when the toggle is clicked. This is a class level method so there's + * something for the remove listener function. + * @private + */ + private _openClickEvent = () => { + if ( + (this.optionsStore.element as HTMLInputElement)?.disabled || + this.optionsStore.input?.disabled + ) + return; + if (!this.display.isVisible) this.show(); + }; } /** @@ -613,7 +643,7 @@ const extend = function (plugin, option = undefined) { return tempusDominus; }; -const version = '6.7.10'; +const version = '6.7.16'; const tempusDominus = { TempusDominus, diff --git a/src/nuget/TempusDominus.nuspec b/src/nuget/TempusDominus.nuspec index 58d295dc9..c96d9a0cf 100644 --- a/src/nuget/TempusDominus.nuspec +++ b/src/nuget/TempusDominus.nuspec @@ -2,7 +2,7 @@ TempusDominus - 6.7.10 + 6.7.16 Tempus Dominus Eonasdan Eonasdan diff --git a/src/nuget/TempusDominus.scss.nuspec b/src/nuget/TempusDominus.scss.nuspec index f0c5ea204..043b5db33 100644 --- a/src/nuget/TempusDominus.scss.nuspec +++ b/src/nuget/TempusDominus.scss.nuspec @@ -2,7 +2,7 @@ TempusDominus.scss - 6.7.10 + 6.7.16 Tempus Dominus Eonasdan Eonasdan diff --git a/types/actions.d.ts b/types/actions.d.ts deleted file mode 100644 index 8b9a820fb..000000000 --- a/types/actions.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import ActionTypes from './utilities/action-types'; -/** - * Logic for various click actions - */ -export default class Actions { - private optionsStore; - private validation; - private dates; - private display; - private _eventEmitters; - constructor(); - /** - * Performs the selected `action`. See ActionTypes - * @param e This is normally a click event - * @param action If not provided, then look for a [data-action] - */ - do(e: any, action?: ActionTypes): void; - private handleShowClockContainers; - private handleNextPrevious; - /** - * After setting the value it will either show the clock or hide the widget. - * @param e - */ - private hideOrClock; - /** - * Common function to manipulate {@link lastPicked} by `unit`. - * @param lastPicked - * @param unit - * @param value Value to change by - */ - private manipulateAndSet; - private handleSelectCalendarMode; - private handleToggle; - private handleSelectDay; - private handleMultiDate; - private handleDateRange; -} diff --git a/types/dates.d.ts b/types/dates.d.ts deleted file mode 100644 index 3eb112442..000000000 --- a/types/dates.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { DateTime, Unit } from './datetime'; -export default class Dates { - private _dates; - private optionsStore; - private validation; - private _eventEmitters; - constructor(); - /** - * Returns the array of selected dates - */ - get picked(): DateTime[]; - /** - * Returns the last picked value. - */ - get lastPicked(): DateTime; - /** - * Returns the length of picked dates -1 or 0 if none are selected. - */ - get lastPickedIndex(): number; - /** - * Formats a DateTime object to a string. Used when setting the input value. - * @param date - */ - formatInput(date: DateTime): string; - /** - * parse the value into a DateTime object. - * this can be overwritten to supply your own parsing. - */ - parseInput(value: any): DateTime; - /** - * Tries to convert the provided value to a DateTime object. - * If value is null|undefined then clear the value of the provided index (or 0). - * @param value Value to convert or null|undefined - * @param index When using multidates this is the index in the array - */ - setFromInput(value: any, index?: number): void; - /** - * Adds a new DateTime to selected dates array - * @param date - */ - add(date: DateTime): void; - /** - * Returns true if the `targetDate` is part of the selected dates array. - * If `unit` is provided then a granularity to that unit will be used. - * @param targetDate - * @param unit - */ - isPicked(targetDate: DateTime, unit?: Unit): boolean; - /** - * Returns the index at which `targetDate` is in the array. - * This is used for updating or removing a date when multi-date is used - * If `unit` is provided then a granularity to that unit will be used. - * @param targetDate - * @param unit - */ - pickedIndex(targetDate: DateTime, unit?: Unit): number; - /** - * Clears all selected dates. - */ - clear(): void; - /** - * Find the "book end" years given a `year` and a `factor` - * @param factor e.g. 100 for decades - * @param year e.g. 2021 - */ - static getStartEndYear( - factor: number, - year: number - ): [number, number, number]; - updateInput(target?: DateTime): void; - /** - * Attempts to either clear or set the `target` date at `index`. - * If the `target` is null then the date will be cleared. - * If multi-date is being used then it will be removed from the array. - * If `target` is valid and multi-date is used then if `index` is - * provided the date at that index will be replaced, otherwise it is appended. - * @param target - * @param index - */ - setValue(target?: DateTime, index?: number): void; - private _setValueNull; -} diff --git a/types/datetime.d.ts b/types/datetime.d.ts deleted file mode 100644 index 7dd118ea1..000000000 --- a/types/datetime.d.ts +++ /dev/null @@ -1,270 +0,0 @@ -import { FormatLocalization } from './utilities/options'; -export declare enum Unit { - seconds = 'seconds', - minutes = 'minutes', - hours = 'hours', - date = 'date', - month = 'month', - year = 'year', -} -export interface DateTimeFormatOptions extends Intl.DateTimeFormatOptions { - timeStyle?: 'short' | 'medium' | 'long'; - dateStyle?: 'short' | 'medium' | 'long' | 'full'; - numberingSystem?: string; -} -/** - * Returns an Intl format object based on the provided object - * @param unit - */ -export declare const getFormatByUnit: (unit: Unit) => object; -/** - * Attempts to guess the hour cycle of the given local - * @param locale - */ -export declare const guessHourCycle: ( - locale: string -) => Intl.LocaleHourCycleKey; -/** - * For the most part this object behaves exactly the same way - * as the native Date object with a little extra spice. - */ -export declare class DateTime extends Date { - localization: FormatLocalization; - /** - * Chainable way to set the {@link locale} - * @param value - * @deprecated use setLocalization with a FormatLocalization object instead - */ - setLocale(value: string): this; - /** - * Chainable way to set the {@link localization} - * @param value - */ - setLocalization(value: FormatLocalization): this; - /** - * Converts a plain JS date object to a DateTime object. - * Doing this allows access to format, etc. - * @param date - * @param locale this parameter is deprecated. Use formatLocalization instead. - * @param formatLocalization - */ - static convert( - date: Date, - locale?: string, - formatLocalization?: FormatLocalization - ): DateTime; - /** - * Native date manipulations are not pure functions. This function creates a duplicate of the DateTime object. - */ - get clone(): DateTime; - static isValid(d: any): boolean; - /** - * Sets the current date to the start of the {@link unit} provided - * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).startOf('month') - * would return April 1, 2021, 12:00:00.000 AM (midnight) - * @param unit - * @param startOfTheWeek Allows for the changing the start of the week. - */ - startOf(unit: Unit | 'weekDay', startOfTheWeek?: number): this; - /** - * Sets the current date to the end of the {@link unit} provided - * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).endOf('month') - * would return April 30, 2021, 11:59:59.999 PM - * @param unit - * @param startOfTheWeek - */ - endOf(unit: Unit | 'weekDay', startOfTheWeek?: number): this; - /** - * Change a {@link unit} value. Value can be positive or negative - * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).manipulate(1, 'month') - * would return May 30, 2021, 11:45:32.984 AM - * @param value A positive or negative number - * @param unit - */ - manipulate(value: number, unit: Unit): this; - /** - * Return true if {@link compare} is before this date - * @param compare The Date/DateTime to compare - * @param unit If provided, uses {@link startOf} for - * comparison. - */ - isBefore(compare: DateTime, unit?: Unit): boolean; - /** - * Return true if {@link compare} is after this date - * @param compare The Date/DateTime to compare - * @param unit If provided, uses {@link startOf} for - * comparison. - */ - isAfter(compare: DateTime, unit?: Unit): boolean; - /** - * Return true if {@link compare} is same this date - * @param compare The Date/DateTime to compare - * @param unit If provided, uses {@link startOf} for - * comparison. - */ - isSame(compare: DateTime, unit?: Unit): boolean; - /** - * Check if this is between two other DateTimes, optionally looking at unit scale. The match is exclusive. - * @param left - * @param right - * @param unit. - * @param inclusivity. A [ indicates inclusion of a value. A ( indicates exclusion. - * If the inclusivity parameter is used, both indicators must be passed. - */ - isBetween( - left: DateTime, - right: DateTime, - unit?: Unit, - inclusivity?: '()' | '[]' | '(]' | '[)' - ): boolean; - /** - * Returns flattened object of the date. Does not include literals - * @param locale - * @param template - */ - parts( - locale?: string, - template?: Record - ): Record; - /** - * Shortcut to Date.getSeconds() - */ - get seconds(): number; - /** - * Shortcut to Date.setSeconds() - */ - set seconds(value: number); - /** - * Returns two digit hours - */ - get secondsFormatted(): string; - /** - * Shortcut to Date.getMinutes() - */ - get minutes(): number; - /** - * Shortcut to Date.setMinutes() - */ - set minutes(value: number); - /** - * Returns two digit minutes - */ - get minutesFormatted(): string; - /** - * Shortcut to Date.getHours() - */ - get hours(): number; - /** - * Shortcut to Date.setHours() - */ - set hours(value: number); - /** - * Returns two digit hour, e.g. 01...10 - * @param hourCycle Providing an hour cycle will change 00 to 24 depending on the given value. - */ - getHoursFormatted(hourCycle?: Intl.LocaleHourCycleKey): string; - /** - * Get the meridiem of the date. E.g. AM or PM. - * If the {@link locale} provides a "dayPeriod" then this will be returned, - * otherwise it will return AM or PM. - * @param locale - */ - meridiem(locale?: string): string; - /** - * Shortcut to Date.getDate() - */ - get date(): number; - /** - * Shortcut to Date.setDate() - */ - set date(value: number); - /** - * Return two digit date - */ - get dateFormatted(): string; - /** - * Shortcut to Date.getDay() - */ - get weekDay(): number; - /** - * Shortcut to Date.getMonth() - */ - get month(): number; - /** - * Shortcut to Date.setMonth() - */ - set month(value: number); - /** - * Return two digit, human expected month. E.g. January = 1, December = 12 - */ - get monthFormatted(): string; - /** - * Shortcut to Date.getFullYear() - */ - get year(): number; - /** - * Shortcut to Date.setFullYear() - */ - set year(value: number); - /** - * Gets the week of the year - */ - get week(): number; - /** - * Returns the number of weeks in the year - */ - weeksInWeekYear(): 53 | 52; - /** - * Returns true or false depending on if the year is a leap year or not. - */ - get isLeapYear(): boolean; - private computeOrdinal; - private nonLeapLadder; - private leapLadder; - private dateTimeRegex; - private formattingTokens; - /** - * Returns a list of month values based on the current locale - */ - private getAllMonths; - /** - * Replaces an expanded token set (e.g. LT/LTS) - */ - private replaceTokens; - private match2; - private match3; - private match4; - private match1to2; - private matchSigned; - private matchOffset; - private matchWord; - private parseTwoDigitYear; - private offsetFromString; - /** - * z = -4, zz = -04, zzz = -0400 - * @param date - * @param style - * @private - */ - private zoneInformation; - private zoneExpressions; - private addInput; - private meridiemMatch; - private expressions; - private correctHours; - private makeParser; - /** - * Attempts to create a DateTime from a string. - * @param input date as string - * @param localization provides the date template the string is in via the format property - */ - static fromString(input: string, localization: FormatLocalization): DateTime; - /** - * Returns a string format. - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat - * for valid templates and locale objects - * @param template An optional object. If provided, method will use Intl., otherwise the localizations format properties - * @param locale Can be a string or an array of strings. Uses browser defaults otherwise. - */ - format(template?: DateTimeFormatOptions | string, locale?: string): string; -} diff --git a/types/display/calendar/date-display.d.ts b/types/display/calendar/date-display.d.ts deleted file mode 100644 index 1b6a2f169..000000000 --- a/types/display/calendar/date-display.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Paint } from '../index'; -/** - * Creates and updates the grid for `date` - */ -export default class DateDisplay { - private optionsStore; - private dates; - private validation; - constructor(); - /** - * Build the container html for the display - * @private - */ - getPicker(): HTMLElement; - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget: HTMLElement, paint: Paint): void; - private _dateToDataValue; - private _handleDateRange; - private handleMouseEvents; - private _updateCalendarView; - /*** - * Generates a html row that contains the days of the week. - * @private - */ - private _daysOfTheWeek; - private _handleCalendarWeeks; -} diff --git a/types/display/calendar/decade-display.d.ts b/types/display/calendar/decade-display.d.ts deleted file mode 100644 index 75bbb2f3b..000000000 --- a/types/display/calendar/decade-display.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Paint } from '../index'; -/** - * Creates and updates the grid for `seconds` - */ -export default class DecadeDisplay { - private _startDecade; - private _endDecade; - private optionsStore; - private dates; - private validation; - constructor(); - /** - * Build the container html for the display - * @private - */ - getPicker(): HTMLDivElement; - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget: HTMLElement, paint: Paint): void; -} diff --git a/types/display/calendar/month-display.d.ts b/types/display/calendar/month-display.d.ts deleted file mode 100644 index cc633d79a..000000000 --- a/types/display/calendar/month-display.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Paint } from '../index'; -/** - * Creates and updates the grid for `month` - */ -export default class MonthDisplay { - private optionsStore; - private dates; - private validation; - constructor(); - /** - * Build the container html for the display - * @private - */ - getPicker(): HTMLElement; - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget: HTMLElement, paint: Paint): void; -} diff --git a/types/display/calendar/year-display.d.ts b/types/display/calendar/year-display.d.ts deleted file mode 100644 index b58b67f65..000000000 --- a/types/display/calendar/year-display.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Paint } from '../index'; -/** - * Creates and updates the grid for `year` - */ -export default class YearDisplay { - private _startYear; - private _endYear; - private optionsStore; - private dates; - private validation; - constructor(); - /** - * Build the container html for the display - * @private - */ - getPicker(): HTMLElement; - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget: HTMLElement, paint: Paint): void; -} diff --git a/types/display/collapse.d.ts b/types/display/collapse.d.ts deleted file mode 100644 index 20d807f18..000000000 --- a/types/display/collapse.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Provides a collapse functionality to the view changes - */ -export default class Collapse { - /** - * Flips the show/hide state of `target` - * @param target html element to affect. - */ - static toggle(target: HTMLElement): void; - /** - * Skips any animation or timeouts and immediately set the element to show. - * @param target - */ - static showImmediately(target: HTMLElement): void; - /** - * If `target` is not already showing, then show after the animation. - * @param target - */ - static show(target: HTMLElement): void; - /** - * Skips any animation or timeouts and immediately set the element to hide. - * @param target - */ - static hideImmediately(target: HTMLElement): void; - /** - * If `target` is not already hidden, then hide after the animation. - * @param target HTML Element - */ - static hide(target: HTMLElement): void; - /** - * Gets the transition duration from the `element` by getting css properties - * `transition-duration` and `transition-delay` - * @param element HTML Element - */ - private static getTransitionDurationFromElement; -} diff --git a/types/display/index.d.ts b/types/display/index.d.ts deleted file mode 100644 index 1933159d5..000000000 --- a/types/display/index.d.ts +++ /dev/null @@ -1,162 +0,0 @@ -import DateDisplay from './calendar/date-display'; -import MonthDisplay from './calendar/month-display'; -import YearDisplay from './calendar/year-display'; -import DecadeDisplay from './calendar/decade-display'; -import TimeDisplay from './time/time-display'; -import HourDisplay from './time/hour-display'; -import MinuteDisplay from './time/minute-display'; -import SecondDisplay from './time/second-display'; -import { DateTime, Unit } from '../datetime'; -import { ViewUpdateValues } from '../utilities/event-emitter'; -/** - * Main class for all things display related. - */ -export default class Display { - private _widget; - private _popperInstance; - private _isVisible; - private optionsStore; - private validation; - private dates; - dateDisplay: DateDisplay; - monthDisplay: MonthDisplay; - yearDisplay: YearDisplay; - decadeDisplay: DecadeDisplay; - timeDisplay: TimeDisplay; - hourDisplay: HourDisplay; - minuteDisplay: MinuteDisplay; - secondDisplay: SecondDisplay; - private _eventEmitters; - constructor(); - /** - * Returns the widget body or undefined - * @private - */ - get widget(): HTMLElement | undefined; - get dateContainer(): HTMLElement | undefined; - get timeContainer(): HTMLElement | undefined; - /** - * Returns this visible state of the picker (shown) - */ - get isVisible(): boolean; - /** - * Updates the table for a particular unit. Used when an option as changed or - * whenever the class list might need to be refreshed. - * @param unit - * @private - */ - _update(unit: ViewUpdateValues): void; - /** - * Allows developers to add/remove classes from an element. - * @param _unit - * @param _date - * @param _classes - * @param _element - */ - paint( - _unit: Unit | 'decade', - _date: DateTime, - _classes: string[], - _element: HTMLElement - ): void; - /** - * Shows the picker and creates a Popper instance if needed. - * Add document click event to hide when clicking outside the picker. - * fires Events#show - */ - show(): void; - private _showSetupViewMode; - private _showSetDefaultIfNeeded; - createPopup( - element: HTMLElement, - widget: HTMLElement, - options: any - ): Promise; - updatePopup(): void; - /** - * Changes the calendar view mode. E.g. month <-> year - * @param direction -/+ number to move currentViewMode - * @private - */ - _showMode(direction?: number): void; - /** - * Changes the theme. E.g. light, dark or auto - * @param theme the theme name - * @private - */ - _updateTheme(theme?: 'light' | 'dark' | 'auto'): void; - _getThemeClass(): string; - _updateCalendarHeader(): void; - /** - * Hides the picker if needed. - * Remove document click event to hide when clicking outside the picker. - * fires Events#hide - */ - hide(): void; - /** - * Toggles the picker's open state. Fires a show/hide event depending. - */ - toggle(): void; - /** - * Removes document and data-action click listener and reset the widget - * @private - */ - _dispose(): void; - /** - * Builds the widgets html template. - * @private - */ - private _buildWidget; - private _buildWidgetSideBySide; - /** - * Returns true if the hours, minutes, or seconds component is turned on - */ - get _hasTime(): boolean; - /** - * Returns true if the year, month, or date component is turned on - */ - get _hasDate(): boolean; - get _hasDateAndTime(): boolean; - /** - * Get the toolbar html based on options like buttons => today - * @private - */ - getToolbarElements(): HTMLElement[]; - /*** - * Builds the base header template with next and previous icons - * @private - */ - getHeadTemplate(): HTMLElement; - /** - * Builds an icon tag as either an `` - * or with icons => type is `sprites` then a svg tag instead - * @param iconClass - * @private - */ - _iconTag(iconClass: string): HTMLElement | SVGElement; - /** - * A document click event to hide the widget if click is outside - * @private - * @param e MouseEvent - */ - private _documentClickEvent; - /** - * Click event for any action like selecting a date - * @param e MouseEvent - * @private - */ - private _actionsClickEvent; - /** - * Causes the widget to get rebuilt on next show. If the picker is already open - * then hide and reshow it. - * @private - */ - _rebuild(): void; - refreshCurrentView(): void; -} -export type Paint = ( - unit: Unit | 'decade', - innerDate: DateTime, - classes: string[], - element: HTMLElement -) => void; diff --git a/types/display/time/hour-display.d.ts b/types/display/time/hour-display.d.ts deleted file mode 100644 index 7bf5039e3..000000000 --- a/types/display/time/hour-display.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Paint } from '../index'; -/** - * Creates and updates the grid for `hours` - */ -export default class HourDisplay { - private optionsStore; - private validation; - constructor(); - /** - * Build the container html for the display - * @private - */ - getPicker(): HTMLElement; - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget: HTMLElement, paint: Paint): void; -} diff --git a/types/display/time/minute-display.d.ts b/types/display/time/minute-display.d.ts deleted file mode 100644 index f040241ee..000000000 --- a/types/display/time/minute-display.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Paint } from '../index'; -/** - * Creates and updates the grid for `minutes` - */ -export default class MinuteDisplay { - private optionsStore; - private validation; - constructor(); - /** - * Build the container html for the display - * @private - */ - getPicker(): HTMLElement; - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget: HTMLElement, paint: Paint): void; -} diff --git a/types/display/time/second-display.d.ts b/types/display/time/second-display.d.ts deleted file mode 100644 index adf12a012..000000000 --- a/types/display/time/second-display.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Paint } from '../index'; -/** - * Creates and updates the grid for `seconds` - */ -export default class secondDisplay { - private optionsStore; - private validation; - constructor(); - /** - * Build the container html for the display - * @private - */ - getPicker(): HTMLElement; - /** - * Populates the grid and updates enabled states - * @private - */ - _update(widget: HTMLElement, paint: Paint): void; -} diff --git a/types/display/time/time-display.d.ts b/types/display/time/time-display.d.ts deleted file mode 100644 index 5d545b56f..000000000 --- a/types/display/time/time-display.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Creates the clock display - */ -export default class TimeDisplay { - private _gridColumns; - private optionsStore; - private validation; - private dates; - constructor(); - /** - * Build the container html for the clock display - * @private - */ - getPicker(iconTag: (iconClass: string) => HTMLElement): HTMLElement; - /** - * Populates the various elements with in the clock display - * like the current hour and if the manipulation icons are enabled. - * @private - */ - _update(widget: HTMLElement): void; - /** - * Creates the table for the clock display depending on what options are selected. - * @private - */ - private _grid; -} diff --git a/types/locales/ar-SA.d.ts b/types/locales/ar-SA.d.ts deleted file mode 100644 index c75a5cf3e..000000000 --- a/types/locales/ar-SA.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'ar-SA'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => any; - format: string; -}; -export { localization, name }; diff --git a/types/locales/ar.d.ts b/types/locales/ar.d.ts deleted file mode 100644 index d0436f8a1..000000000 --- a/types/locales/ar.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'ar'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => any; - format: string; -}; -export { localization, name }; diff --git a/types/locales/de.d.ts b/types/locales/de.d.ts deleted file mode 100644 index 5773e96bb..000000000 --- a/types/locales/de.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'de'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LTS: string; - LT: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => string; - format: string; -}; -export { localization, name }; diff --git a/types/locales/es.d.ts b/types/locales/es.d.ts deleted file mode 100644 index 9d28bf2ba..000000000 --- a/types/locales/es.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'es'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - startOfTheWeek: number; - locale: string; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => string; - format: string; -}; -export { localization, name }; diff --git a/types/locales/fi.d.ts b/types/locales/fi.d.ts deleted file mode 100644 index acc2d4796..000000000 --- a/types/locales/fi.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -declare const name = 'fi'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - l: string; - ll: string; - lll: string; - llll: string; - }; - ordinal: (n: any) => string; - format: string; -}; -export { localization, name }; diff --git a/types/locales/fr.d.ts b/types/locales/fr.d.ts deleted file mode 100644 index a1e2eeae1..000000000 --- a/types/locales/fr.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'fr'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => string; - format: string; -}; -export { localization, name }; diff --git a/types/locales/hy.d.ts b/types/locales/hy.d.ts deleted file mode 100644 index ac8bf5967..000000000 --- a/types/locales/hy.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'hy'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => any; - format: string; -}; -export { localization, name }; diff --git a/types/locales/it.d.ts b/types/locales/it.d.ts deleted file mode 100644 index 3fc8084b6..000000000 --- a/types/locales/it.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'it'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => string; - format: string; -}; -export { localization, name }; diff --git a/types/locales/nl.d.ts b/types/locales/nl.d.ts deleted file mode 100644 index da95cb72f..000000000 --- a/types/locales/nl.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'nl'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => string; - format: string; -}; -export { localization, name }; diff --git a/types/locales/pl.d.ts b/types/locales/pl.d.ts deleted file mode 100644 index e456643cb..000000000 --- a/types/locales/pl.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'pl'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => string; - format: string; -}; -export { localization, name }; diff --git a/types/locales/ro.d.ts b/types/locales/ro.d.ts deleted file mode 100644 index 6bc840fd5..000000000 --- a/types/locales/ro.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'ro'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => any; - format: string; -}; -export { localization, name }; diff --git a/types/locales/ru.d.ts b/types/locales/ru.d.ts deleted file mode 100644 index 6b36bf795..000000000 --- a/types/locales/ru.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'ru'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => any; - format: string; -}; -export { localization, name }; diff --git a/types/locales/sl.d.ts b/types/locales/sl.d.ts deleted file mode 100644 index 88cc6b748..000000000 --- a/types/locales/sl.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'sl'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => string; - format: string; -}; -export { localization, name }; diff --git a/types/locales/tr.d.ts b/types/locales/tr.d.ts deleted file mode 100644 index 020a33dd1..000000000 --- a/types/locales/tr.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare const name = 'tr'; -declare const localization: { - today: string; - clear: string; - close: string; - selectMonth: string; - previousMonth: string; - nextMonth: string; - selectYear: string; - previousYear: string; - nextYear: string; - selectDecade: string; - previousDecade: string; - nextDecade: string; - previousCentury: string; - nextCentury: string; - pickHour: string; - incrementHour: string; - decrementHour: string; - pickMinute: string; - incrementMinute: string; - decrementMinute: string; - pickSecond: string; - incrementSecond: string; - decrementSecond: string; - toggleMeridiem: string; - selectTime: string; - selectDate: string; - dayViewHeaderFormat: { - month: string; - year: string; - }; - locale: string; - startOfTheWeek: number; - dateFormats: { - LT: string; - LTS: string; - L: string; - LL: string; - LLL: string; - LLLL: string; - }; - ordinal: (n: any) => string; - format: string; -}; -export { localization, name }; diff --git a/types/plugins/bi-one.d.ts b/types/plugins/bi-one.d.ts deleted file mode 100644 index e712db59e..000000000 --- a/types/plugins/bi-one.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -declare const biOneIcons: { - type: string; - time: string; - date: string; - up: string; - down: string; - previous: string; - next: string; - today: string; - clear: string; - close: string; -}; -declare const load: (_: any, __: any, tdFactory: any) => void; -export { biOneIcons, load }; diff --git a/types/plugins/customDateFormat.d.ts b/types/plugins/customDateFormat.d.ts deleted file mode 100644 index 71bcbd724..000000000 --- a/types/plugins/customDateFormat.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: () => void; -export { _default as default }; diff --git a/types/plugins/fa-five.d.ts b/types/plugins/fa-five.d.ts deleted file mode 100644 index 300b0548c..000000000 --- a/types/plugins/fa-five.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -declare const faFiveIcons: { - type: string; - time: string; - date: string; - up: string; - down: string; - previous: string; - next: string; - today: string; - clear: string; - close: string; -}; -declare const load: (_: any, __: any, tdFactory: any) => void; -export { faFiveIcons, load }; diff --git a/types/plugins/moment-parse.d.ts b/types/plugins/moment-parse.d.ts deleted file mode 100644 index f7ea59507..000000000 --- a/types/plugins/moment-parse.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _default: (option: any, tdClasses: any, tdFactory: any) => void; -export { _default as default }; diff --git a/types/tempus-dominus.d.ts b/types/tempus-dominus.d.ts deleted file mode 100644 index 42b4777b2..000000000 --- a/types/tempus-dominus.d.ts +++ /dev/null @@ -1,234 +0,0 @@ -import Display from './display/index'; -import Dates from './dates'; -import { DateTime, DateTimeFormatOptions, Unit } from './datetime'; -import Namespace from './utilities/namespace'; -import Options from './utilities/options'; -import DefaultOptions, { - DefaultEnLocalization, -} from './utilities/default-options'; -/** - * A robust and powerful date/time picker component. - */ -declare class TempusDominus { - _subscribers: { - [key: string]: ((event: any) => Record)[]; - }; - private _isDisabled; - private _toggle; - private _currentPromptTimeTimeout; - private actions; - private optionsStore; - private _eventEmitters; - display: Display; - dates: Dates; - constructor(element: HTMLElement, options?: Options); - get viewDate(): DateTime; - set viewDate(value: DateTime); - /** - * Update the picker options. If `reset` is provide `options` will be merged with DefaultOptions instead. - * @param options - * @param reset - * @public - */ - updateOptions(options: any, reset?: boolean): void; - /** - * Toggles the picker open or closed. If the picker is disabled, nothing will happen. - * @public - */ - toggle(): void; - /** - * Shows the picker unless the picker is disabled. - * @public - */ - show(): void; - /** - * Hides the picker unless the picker is disabled. - * @public - */ - hide(): void; - /** - * Disables the picker and the target input field. - * @public - */ - disable(): void; - /** - * Enables the picker and the target input field. - * @public - */ - enable(): void; - /** - * Clears all the selected dates - * @public - */ - clear(): void; - /** - * Allows for a direct subscription to picker events, without having to use addEventListener on the element. - * @param eventTypes See Namespace.Events - * @param callbacks Function to call when event is triggered - * @public - */ - subscribe( - eventTypes: string | string[], - callbacks: (event: any) => void | ((event: any) => void)[] - ): - | { - unsubscribe: () => void; - } - | { - unsubscribe: () => void; - }[]; - /** - * Hides the picker and removes event listeners - */ - dispose(): void; - /** - * Updates the options to use the provided language. - * THe language file must be loaded first. - * @param language - */ - locale(language: string): void; - /** - * Triggers an event like ChangeEvent when the picker has updated the value - * of a selected date. - * @param event Accepts a BaseEvent object. - * @private - */ - private _triggerEvent; - private _publish; - /** - * Fires a ViewUpdate event when, for example, the month view is changed. - * @private - */ - private _viewUpdate; - private _unsubscribe; - /** - * Merges two Option objects together and validates options type - * @param config new Options - * @param mergeTo Options to merge into - * @param includeDataset When true, the elements data-td attributes will be included in the - * @private - */ - private _initializeOptions; - /** - * Checks if an input field is being used, attempts to locate one and sets an - * event listener if found. - * @private - */ - private _initializeInput; - /** - * Attempts to locate a toggle for the picker and sets an event listener - * @private - */ - private _initializeToggle; - /** - * If the option is enabled this will render the clock view after a date pick. - * @param e change event - * @private - */ - private _handleAfterChangeEvent; - /** - * Event for when the input field changes. This is a class level method so there's - * something for the remove listener function. - * @private - */ - private _inputChangeEvent; - /** - * Event for when the toggle is clicked. This is a class level method so there's - * something for the remove listener function. - * @private - */ - private _toggleClickEvent; -} -/** - * Called from a locale plugin. - * @param l locale object for localization options - */ -declare const loadLocale: (l: any) => void; -/** - * A sets the global localization options to the provided locale name. - * `loadLocale` MUST be called first. - * @param l - */ -declare const locale: (l: string) => void; -/** - * Called from a plugin to extend or override picker defaults. - * @param plugin - * @param option - */ -declare const extend: ( - plugin: any, - option?: any -) => { - TempusDominus: typeof TempusDominus; - extend: any; - loadLocale: (l: any) => void; - locale: (l: string) => void; - Namespace: typeof Namespace; - DefaultOptions: Options; - DateTime: typeof DateTime; - Unit: typeof Unit; - version: string; - DefaultEnLocalization: { - clear?: string; - close?: string; - dayViewHeaderFormat?: DateTimeFormatOptions; - decrementHour?: string; - decrementMinute?: string; - decrementSecond?: string; - incrementHour?: string; - incrementMinute?: string; - incrementSecond?: string; - nextCentury?: string; - nextDecade?: string; - nextMonth?: string; - nextYear?: string; - pickHour?: string; - pickMinute?: string; - pickSecond?: string; - previousCentury?: string; - previousDecade?: string; - previousMonth?: string; - previousYear?: string; - selectDate?: string; - selectDecade?: string; - selectMonth?: string; - selectTime?: string; - selectYear?: string; - startOfTheWeek?: number; - today?: string; - /** - * Update the picker options. If `reset` is provide `options` will be merged with DefaultOptions instead. - * @param options - * @param reset - * @public - */ - toggleMeridiem?: string; - dateFormats?: { - L?: string; - LL?: string; - LLL?: string; - LLLL?: string; - LT?: string; - LTS?: string; - }; - format?: string; - hourCycle?: Intl.LocaleHourCycleKey; - locale?: string; - ordinal?: (n: number) => any; - }; -}; -declare const version = '6.7.10'; -export { - TempusDominus, - extend, - loadLocale, - locale, - Namespace, - DefaultOptions, - DateTime, - Unit, - version, - DateTimeFormatOptions, - Options, - DefaultEnLocalization, -}; diff --git a/types/utilities/action-types.d.ts b/types/utilities/action-types.d.ts deleted file mode 100644 index 37ed9f4f1..000000000 --- a/types/utilities/action-types.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -declare enum ActionTypes { - next = 'next', - previous = 'previous', - changeCalendarView = 'changeCalendarView', - selectMonth = 'selectMonth', - selectYear = 'selectYear', - selectDecade = 'selectDecade', - selectDay = 'selectDay', - selectHour = 'selectHour', - selectMinute = 'selectMinute', - selectSecond = 'selectSecond', - incrementHours = 'incrementHours', - incrementMinutes = 'incrementMinutes', - incrementSeconds = 'incrementSeconds', - decrementHours = 'decrementHours', - decrementMinutes = 'decrementMinutes', - decrementSeconds = 'decrementSeconds', - toggleMeridiem = 'toggleMeridiem', - togglePicker = 'togglePicker', - showClock = 'showClock', - showHours = 'showHours', - showMinutes = 'showMinutes', - showSeconds = 'showSeconds', - clear = 'clear', - close = 'close', - today = 'today', -} -export default ActionTypes; diff --git a/types/utilities/calendar-modes.d.ts b/types/utilities/calendar-modes.d.ts deleted file mode 100644 index d49bb5750..000000000 --- a/types/utilities/calendar-modes.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Unit } from '../datetime'; -import ViewMode from './view-mode'; -declare const CalendarModes: { - name: keyof ViewMode; - className: string; - unit: Unit; - step: number; -}[]; -export default CalendarModes; diff --git a/types/utilities/default-format-localization.d.ts b/types/utilities/default-format-localization.d.ts deleted file mode 100644 index 1533516f8..000000000 --- a/types/utilities/default-format-localization.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -declare const _default: { - dateFormats?: { - L?: string; - LL?: string; - LLL?: string; - LLLL?: string; - LT?: string; - LTS?: string; - }; - format?: string; - hourCycle?: Intl.LocaleHourCycleKey; - locale?: string; - ordinal?: (n: number) => any; -}; -export default _default; diff --git a/types/utilities/default-options.d.ts b/types/utilities/default-options.d.ts deleted file mode 100644 index 74018c359..000000000 --- a/types/utilities/default-options.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import Options from './options'; -declare const DefaultOptions: Options; -export default DefaultOptions; -export declare const DefaultEnLocalization: { - clear?: string; - close?: string; - dayViewHeaderFormat?: import('../datetime').DateTimeFormatOptions; - decrementHour?: string; - decrementMinute?: string; - decrementSecond?: string; - incrementHour?: string; - incrementMinute?: string; - incrementSecond?: string; - nextCentury?: string; - nextDecade?: string; - nextMonth?: string; - nextYear?: string; - pickHour?: string; - pickMinute?: string; - pickSecond?: string; - previousCentury?: string; - previousDecade?: string; - previousMonth?: string; - previousYear?: string; - selectDate?: string; - selectDecade?: string; - selectMonth?: string; - selectTime?: string; - selectYear?: string; - startOfTheWeek?: number; - today?: string; - toggleMeridiem?: string; - dateFormats?: { - L?: string; - LL?: string; - LLL?: string; - LLLL?: string; - LT?: string; - LTS?: string; - }; - format?: string; - hourCycle?: Intl.LocaleHourCycleKey; - locale?: string; - ordinal?: (n: number) => any; -}; diff --git a/types/utilities/errors.d.ts b/types/utilities/errors.d.ts deleted file mode 100644 index 9db12edcb..000000000 --- a/types/utilities/errors.d.ts +++ /dev/null @@ -1,88 +0,0 @@ -export declare class TdError extends Error { - code: number; -} -export declare class ErrorMessages { - private base; - /** - * Throws an error indicating that a key in the options object is invalid. - * @param optionName - */ - unexpectedOption(optionName: string): void; - /** - * Throws an error indicating that one more keys in the options object is invalid. - * @param optionName - */ - unexpectedOptions(optionName: string[]): void; - /** - * Throws an error when an option is provide an unsupported value. - * For example a value of 'cheese' for toolbarPlacement which only supports - * 'top', 'bottom', 'default'. - * @param optionName - * @param badValue - * @param validOptions - */ - unexpectedOptionValue( - optionName: string, - badValue: string, - validOptions: string[] - ): void; - /** - * Throws an error when an option value is the wrong type. - * For example a string value was provided to multipleDates which only - * supports true or false. - * @param optionName - * @param badType - * @param expectedType - */ - typeMismatch(optionName: string, badType: string, expectedType: string): void; - /** - * Throws an error when an option value is outside of the expected range. - * For example restrictions.daysOfWeekDisabled excepts a value between 0 and 6. - * @param optionName - * @param lower - * @param upper - */ - numbersOutOfRange(optionName: string, lower: number, upper: number): void; - /** - * Throws an error when a value for a date options couldn't be parsed. Either - * the option was an invalid string or an invalid Date object. - * @param optionName - * @param date - * @param soft If true, logs a warning instead of an error. - */ - failedToParseDate(optionName: string, date: any, soft?: boolean): void; - /** - * Throws when an element to attach to was not provided in the constructor. - */ - mustProvideElement(): void; - /** - * Throws if providing an array for the events to subscribe method doesn't have - * the same number of callbacks. E.g., subscribe([1,2], [1]) - */ - subscribeMismatch(): void; - /** - * Throws if the configuration has conflicting rules e.g. minDate is after maxDate - */ - conflictingConfiguration(message?: string): void; - /** - * customDateFormat errors - */ - customDateFormatError(message?: string): void; - /** - * Logs a warning if a date option value is provided as a string, instead of - * a date/datetime object. - */ - dateString(): void; - deprecatedWarning(message: string, remediation?: string): void; - throwError(message: any): void; - /** - * Used with an Error Event type if the user selects a date that - * fails restriction validation. - */ - failedToSetInvalidDate: string; - /** - * Used with an Error Event type when a user changes the value of the - * input field directly, and does not provide a valid date. - */ - failedToParseInput: string; -} diff --git a/types/utilities/event-emitter.d.ts b/types/utilities/event-emitter.d.ts deleted file mode 100644 index c0f91ea33..000000000 --- a/types/utilities/event-emitter.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { DateTime, Unit } from '../datetime'; -import ActionTypes from './action-types'; -import { BaseEvent } from './event-types'; -export type ViewUpdateValues = Unit | 'decade' | 'clock' | 'calendar' | 'all'; -declare class EventEmitter { - private subscribers; - subscribe(callback: (value: T) => void): any; - unsubscribe(index: number): void; - emit(value?: T): void; - destroy(): void; -} -export declare class EventEmitters { - triggerEvent: EventEmitter; - viewUpdate: EventEmitter; - updateDisplay: EventEmitter; - action: EventEmitter<{ - e: any; - action?: ActionTypes; - }>; - updateViewDate: EventEmitter; - destroy(): void; -} -export {}; diff --git a/types/utilities/event-types.d.ts b/types/utilities/event-types.d.ts deleted file mode 100644 index b8ff6197c..000000000 --- a/types/utilities/event-types.d.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { DateTime } from '../datetime'; -import ViewMode from './view-mode'; -interface BaseEvent { - type: string; - viewMode?: keyof ViewMode; -} -/** - * Triggers when setValue fails because of validation rules etc. - * @event FailEvent - */ -interface FailEvent extends BaseEvent { - reason: string; - date: DateTime; - oldDate: DateTime; -} -/** - * Triggers when the picker is hidden. - */ -interface HideEvent extends BaseEvent { - date: DateTime; -} -/** - * Triggers when a change is successful. - */ -interface ChangeEvent extends BaseEvent { - date: DateTime | undefined; - oldDate: DateTime; - isClear: boolean; - isValid: boolean; -} -/** - * Triggers when the view is changed for instance from month to year. - */ -interface ViewUpdateEvent extends BaseEvent { - viewDate: DateTime; -} -export { BaseEvent, FailEvent, HideEvent, ChangeEvent, ViewUpdateEvent }; diff --git a/types/utilities/namespace.d.ts b/types/utilities/namespace.d.ts deleted file mode 100644 index e50c1b0aa..000000000 --- a/types/utilities/namespace.d.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { ErrorMessages } from './errors'; -/** - * Events - */ -declare class Events { - key: string; - /** - * Change event. Fired when the user selects a date. - * See also EventTypes.ChangeEvent - */ - change: string; - /** - * Emit when the view changes for example from month view to the year view. - * See also EventTypes.ViewUpdateEvent - */ - update: string; - /** - * Emits when a selected date or value from the input field fails to meet the provided validation rules. - * See also EventTypes.FailEvent - */ - error: string; - /** - * Show event - * @event Events#show - */ - show: string; - /** - * Hide event - * @event Events#hide - */ - hide: string; - blur: string; - focus: string; - keyup: string; - keydown: string; -} -declare class Css { - /** - * The outer element for the widget. - */ - widget: string; - /** - * Hold the previous, next and switcher divs - */ - calendarHeader: string; - /** - * The element for the action to change the calendar view. E.g. month -> year. - */ - switch: string; - /** - * The elements for all the toolbar options - */ - toolbar: string; - /** - * Disables the hover and rounding affect. - */ - noHighlight: string; - /** - * Applied to the widget element when the side by side option is in use. - */ - sideBySide: string; - /** - * The element for the action to change the calendar view, e.g. August -> July - */ - previous: string; - /** - * The element for the action to change the calendar view, e.g. August -> September - */ - next: string; - /** - * Applied to any action that would violate any restriction options. ALso applied - * to an input field if the disabled function is called. - */ - disabled: string; - /** - * Applied to any date that is less than requested view, - * e.g. the last day of the previous month. - */ - old: string; - /** - * Applied to any date that is greater than of requested view, - * e.g. the last day of the previous month. - */ - new: string; - /** - * Applied to any date that is currently selected. - */ - active: string; - /** - * The outer element for the calendar view. - */ - dateContainer: string; - /** - * The outer element for the decades view. - */ - decadesContainer: string; - /** - * Applied to elements within the decade container, e.g. 2020, 2030 - */ - decade: string; - /** - * The outer element for the years view. - */ - yearsContainer: string; - /** - * Applied to elements within the years container, e.g. 2021, 2021 - */ - year: string; - /** - * The outer element for the month view. - */ - monthsContainer: string; - /** - * Applied to elements within the month container, e.g. January, February - */ - month: string; - /** - * The outer element for the calendar view. - */ - daysContainer: string; - /** - * Applied to elements within the day container, e.g. 1, 2..31 - */ - day: string; - /** - * If display.calendarWeeks is enabled, a column displaying the week of year - * is shown. This class is applied to each cell in that column. - */ - calendarWeeks: string; - /** - * Applied to the first row of the calendar view, e.g. Sunday, Monday - */ - dayOfTheWeek: string; - /** - * Applied to the current date on the calendar view. - */ - today: string; - /** - * Applied to the locale's weekend dates on the calendar view, e.g. Sunday, Saturday - */ - weekend: string; - rangeIn: string; - rangeStart: string; - rangeEnd: string; - /** - * The outer element for all time related elements. - */ - timeContainer: string; - /** - * Applied the separator columns between time elements, e.g. hour *:* minute *:* second - */ - separator: string; - /** - * The outer element for the clock view. - */ - clockContainer: string; - /** - * The outer element for the hours selection view. - */ - hourContainer: string; - /** - * The outer element for the minutes selection view. - */ - minuteContainer: string; - /** - * The outer element for the seconds selection view. - */ - secondContainer: string; - /** - * Applied to each element in the hours selection view. - */ - hour: string; - /** - * Applied to each element in the minutes selection view. - */ - minute: string; - /** - * Applied to each element in the seconds selection view. - */ - second: string; - /** - * Applied AM/PM toggle button. - */ - toggleMeridiem: string; - /** - * Applied the element of the current view mode, e.g. calendar or clock. - */ - show: string; - /** - * Applied to the currently showing view mode during a transition - * between calendar and clock views - */ - collapsing: string; - /** - * Applied to the currently hidden view mode. - */ - collapse: string; - /** - * Applied to the widget when the option display.inline is enabled. - */ - inline: string; - /** - * Applied to the widget when the option display.theme is light. - */ - lightTheme: string; - /** - * Applied to the widget when the option display.theme is dark. - */ - darkTheme: string; - /** - * Used for detecting if the system color preference is dark mode - */ - isDarkPreferredQuery: string; -} -export default class Namespace { - static NAME: string; - static dataKey: string; - static events: Events; - static css: Css; - static errorMessages: ErrorMessages; -} -export {}; diff --git a/types/utilities/optionConverter.d.ts b/types/utilities/optionConverter.d.ts deleted file mode 100644 index a8350c9e5..000000000 --- a/types/utilities/optionConverter.d.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { DateTime } from '../datetime'; -import Options, { FormatLocalization } from './options'; -export declare class OptionConverter { - private static ignoreProperties; - static deepCopy(input: any): Options; - private static isValue; - /** - * Finds value out of an object based on a string, period delimited, path - * @param paths - * @param obj - */ - static objectPath(paths: string, obj: any): any; - /** - * The spread operator caused sub keys to be missing after merging. - * This is to fix that issue by using spread on the child objects first. - * Also handles complex options like disabledDates - * @param provided An option from new providedOptions - * @param copyTo Destination object. This was added to prevent reference copies - * @param localization - * @param path - */ - static spread( - provided: any, - copyTo: any, - localization: FormatLocalization, - path?: string - ): void; - static processKey( - key: string, - value: any, //eslint-disable-line @typescript-eslint/no-explicit-any - providedType: string, - defaultType: string, - path: string, - localization: FormatLocalization - ): any; - static _mergeOptions(providedOptions: Options, mergeTo: Options): Options; - static _dataToOptions(element: any, options: Options): Options; - private static normalizeObject; - /** - * Attempts to prove `d` is a DateTime or Date or can be converted into one. - * @param d If a string will attempt creating a date from it. - * @param localization object containing locale and format settings. Only used with the custom formats - * @private - */ - static _dateTypeCheck( - d: any, //eslint-disable-line @typescript-eslint/no-explicit-any - localization: FormatLocalization - ): DateTime | null; - /** - * Type checks that `value` is an array of Date or DateTime - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - * @param localization - */ - static _typeCheckDateArray( - optionName: string, - value: any, - providedType: string, - localization: FormatLocalization - ): void; - /** - * Type checks that `value` is an array of numbers - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - */ - static _typeCheckNumberArray( - optionName: string, - value: any, - providedType: string - ): void; - /** - * Attempts to convert `d` to a DateTime object - * @param d value to convert - * @param optionName Provides text to error messages e.g. disabledDates - * @param localization object containing locale and format settings. Only used with the custom formats - */ - static dateConversion( - d: any, //eslint-disable-line @typescript-eslint/no-explicit-any - optionName: string, - localization: FormatLocalization - ): DateTime; - private static _flattenDefaults; - private static getFlattenDefaultOptions; - /** - * Some options conflict like min/max date. Verify that these kinds of options - * are set correctly. - * @param config - */ - static _validateConflicts(config: Options): void; -} diff --git a/types/utilities/optionProcessor.d.ts b/types/utilities/optionProcessor.d.ts deleted file mode 100644 index 06d598411..000000000 --- a/types/utilities/optionProcessor.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { FormatLocalization } from './options'; -interface OptionProcessorFunctionArguments { - key: string; - value: any; - providedType: string; - defaultType: string; - path: string; - localization: FormatLocalization; -} -export declare function processKey( - this: void, - args: OptionProcessorFunctionArguments -): any; -export {}; diff --git a/types/utilities/options.d.ts b/types/utilities/options.d.ts deleted file mode 100644 index e3e7e551d..000000000 --- a/types/utilities/options.d.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { DateTime, DateTimeFormatOptions } from '../datetime'; -import ViewMode from './view-mode'; -export default interface Options { - allowInputToggle?: boolean; - container?: HTMLElement; - dateRange?: boolean; - debug?: boolean; - defaultDate?: DateTime; - display?: { - toolbarPlacement?: 'top' | 'bottom'; - components?: { - calendar?: boolean; - date?: boolean; - month?: boolean; - year?: boolean; - decades?: boolean; - clock?: boolean; - hours?: boolean; - minutes?: boolean; - seconds?: boolean; - useTwentyfourHour?: boolean; - }; - buttons?: { - today?: boolean; - close?: boolean; - clear?: boolean; - }; - calendarWeeks?: boolean; - icons?: { - clear?: string; - close?: string; - date?: string; - down?: string; - next?: string; - previous?: string; - time?: string; - today?: string; - type?: 'icons' | 'sprites'; - up?: string; - }; - viewMode?: keyof ViewMode; - sideBySide?: boolean; - inline?: boolean; - keepOpen?: boolean; - theme?: 'light' | 'dark' | 'auto'; - placement?: 'top' | 'bottom'; - }; - keepInvalid?: boolean; - localization?: Localization; - meta?: Record; - multipleDates?: boolean; - multipleDatesSeparator?: string; - promptTimeOnDateChange?: boolean; - promptTimeOnDateChangeTransitionDelay?: number; - restrictions?: { - minDate?: DateTime; - maxDate?: DateTime; - enabledDates?: DateTime[]; - disabledDates?: DateTime[]; - enabledHours?: number[]; - disabledHours?: number[]; - disabledTimeIntervals?: { - from: DateTime; - to: DateTime; - }[]; - daysOfWeekDisabled?: number[]; - }; - stepping?: number; - useCurrent?: boolean; - viewDate?: DateTime; -} -export interface FormatLocalization { - dateFormats?: { - L?: string; - LL?: string; - LLL?: string; - LLLL?: string; - LT?: string; - LTS?: string; - }; - format?: string; - hourCycle?: Intl.LocaleHourCycleKey; - locale?: string; - ordinal?: (n: number) => any; -} -export interface Localization extends FormatLocalization { - clear?: string; - close?: string; - dayViewHeaderFormat?: DateTimeFormatOptions; - decrementHour?: string; - decrementMinute?: string; - decrementSecond?: string; - incrementHour?: string; - incrementMinute?: string; - incrementSecond?: string; - nextCentury?: string; - nextDecade?: string; - nextMonth?: string; - nextYear?: string; - pickHour?: string; - pickMinute?: string; - pickSecond?: string; - previousCentury?: string; - previousDecade?: string; - previousMonth?: string; - previousYear?: string; - selectDate?: string; - selectDecade?: string; - selectMonth?: string; - selectTime?: string; - selectYear?: string; - startOfTheWeek?: number; - today?: string; - toggleMeridiem?: string; -} diff --git a/types/utilities/optionsStore.d.ts b/types/utilities/optionsStore.d.ts deleted file mode 100644 index f8e5a5e15..000000000 --- a/types/utilities/optionsStore.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { DateTime } from '../datetime'; -import ViewMode from './view-mode'; -import Options from './options'; -export declare class OptionsStore { - options: Options; - element: HTMLElement; - input: HTMLInputElement; - unset: boolean; - private _currentCalendarViewMode; - get currentCalendarViewMode(): number; - set currentCalendarViewMode(value: number); - _viewDate: DateTime; - get viewDate(): DateTime; - set viewDate(v: DateTime); - /** - * When switching back to the calendar from the clock, - * this sets currentView to the correct calendar view. - */ - refreshCurrentView(): void; - minimumCalendarViewMode: number; - currentView: keyof ViewMode; - get isTwelveHour(): boolean; -} diff --git a/types/utilities/service-locator.d.ts b/types/utilities/service-locator.d.ts deleted file mode 100644 index a954bf9cb..000000000 --- a/types/utilities/service-locator.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare type Constructable = new (...args: any[]) => T; -declare class ServiceLocator { - private cache; - locate(identifier: Constructable): T; -} -export declare const setupServiceLocator: () => void; -export declare let serviceLocator: ServiceLocator; -export {}; diff --git a/types/utilities/typeChecker.d.ts b/types/utilities/typeChecker.d.ts deleted file mode 100644 index 4496794e7..000000000 --- a/types/utilities/typeChecker.d.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { DateTime } from '../datetime'; -import { FormatLocalization } from './options'; -/** - * Attempts to prove `d` is a DateTime or Date or can be converted into one. - * @param d If a string will attempt creating a date from it. - * @param localization object containing locale and format settings. Only used with the custom formats - * @private - */ -export declare function tryConvertToDateTime( - this: void, - d: DateTime | Date | string, - localization: FormatLocalization -): DateTime | null; -/** - * Attempts to convert `d` to a DateTime object - * @param d value to convert - * @param optionName Provides text to error messages e.g. disabledDates - * @param localization object containing locale and format settings. Only used with the custom formats - */ -export declare function convertToDateTime( - this: void, - d: DateTime | Date | string, - optionName: string, - localization: FormatLocalization -): DateTime; -/** - * Type checks that `value` is an array of Date or DateTime - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - * @param localization - */ -export declare function typeCheckDateArray( - this: void, - optionName: string, - value: any, //eslint-disable-line @typescript-eslint/no-explicit-any - providedType: string, - localization?: FormatLocalization -): void; -/** - * Type checks that `value` is an array of numbers - * @param optionName Provides text to error messages e.g. disabledDates - * @param value Option value - * @param providedType Used to provide text to error messages - */ -export declare function typeCheckNumberArray( - this: void, - optionName: string, - value: any, //eslint-disable-line @typescript-eslint/no-explicit-any - providedType: string -): void; diff --git a/types/utilities/view-mode.d.ts b/types/utilities/view-mode.d.ts deleted file mode 100644 index ae0b3cc81..000000000 --- a/types/utilities/view-mode.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -type ViewMode = { - clock: any; - calendar: any; - months: any; - years: any; - decades: any; -}; -export default ViewMode; diff --git a/types/validation.d.ts b/types/validation.d.ts deleted file mode 100644 index 559ef4212..000000000 --- a/types/validation.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { DateTime, Unit } from './datetime'; -/** - * Main class for date validation rules based on the options provided. - */ -export default class Validation { - private optionsStore; - constructor(); - /** - * Checks to see if the target date is valid based on the rules provided in the options. - * Granularity can be provided to check portions of the date instead of the whole. - * @param targetDate - * @param granularity - */ - isValid(targetDate: DateTime, granularity?: Unit): boolean; - private _enabledDisabledDatesIsValid; - /** - * Checks to see if the disabledDates option is in use and returns true (meaning invalid) - * if the `testDate` is with in the array. Granularity is by date. - * @param testDate - * @private - */ - private _isInDisabledDates; - /** - * Checks to see if the enabledDates option is in use and returns true (meaning valid) - * if the `testDate` is with in the array. Granularity is by date. - * @param testDate - * @private - */ - private _isInEnabledDates; - private _minMaxIsValid; - private _enabledDisabledHoursIsValid; - /** - * Checks to see if the disabledHours option is in use and returns true (meaning invalid) - * if the `testDate` is with in the array. Granularity is by hours. - * @param testDate - * @private - */ - private _isInDisabledHours; - /** - * Checks to see if the enabledHours option is in use and returns true (meaning valid) - * if the `testDate` is with in the array. Granularity is by hours. - * @param testDate - * @private - */ - private _isInEnabledHours; - dateRangeIsValid(dates: DateTime[], index: number, target: DateTime): boolean; -}