ids-enterprise-wc 1.15.9-patch.3 → 1.15.9-patch.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chunks/{ids-chunk-PLPR5GKJ-full.js → ids-chunk-INOASOWB-full.js} +2 -2
- package/chunks/{ids-chunk-FBSXIEML-full.js → ids-chunk-LBCYQLZV-full.js} +2 -2
- package/chunks/{ids-chunk-FBSXIEML-full.js.map → ids-chunk-LBCYQLZV-full.js.map} +2 -2
- package/chunks/{ids-chunk-TUTTQTPT-full.js → ids-chunk-LFAI3KCS-full.js} +16 -5
- package/chunks/{ids-chunk-TUTTQTPT-full.js.map → ids-chunk-LFAI3KCS-full.js.map} +2 -2
- package/chunks/{ids-chunk-YNW5W3PP-full.js → ids-chunk-PNETRNHG-full.js} +35 -12
- package/chunks/ids-chunk-PNETRNHG-full.js.map +7 -0
- package/chunks/{ids-chunk-GLMW7DMU-full.js → ids-chunk-TJ35QP4Y-full.js} +4 -3
- package/chunks/{ids-chunk-GLMW7DMU-full.js.map → ids-chunk-TJ35QP4Y-full.js.map} +2 -2
- package/components/ids-accordion/ids-accordion.css +156 -8
- package/components/ids-calendar/ids-calendar.js +4 -4
- package/components/ids-card/ids-card.css +4 -344
- package/components/ids-data-grid/ids-data-grid-editors.js +3 -3
- package/components/ids-data-grid/ids-data-grid-filters.js +2 -2
- package/components/ids-data-grid/ids-data-grid.js +4 -4
- package/components/ids-date-picker/ids-date-picker-popup.js +2 -2
- package/components/ids-date-picker/ids-date-picker.css +389 -31
- package/components/ids-date-picker/ids-date-picker.d.ts +5 -0
- package/components/ids-date-picker/ids-date-picker.js +3 -3
- package/components/ids-hierarchy/ids-hierarchy.css +117 -14
- package/components/ids-hyperlink/ids-hyperlink.css +15 -188
- package/components/ids-layout-flex/ids-layout-flex.css +69 -6
- package/components/ids-layout-grid/ids-layout-grid.css +10 -21300
- package/components/ids-list-view/ids-list-view.css +112 -15
- package/components/ids-menu/ids-menu.css +11 -7
- package/components/ids-modal/ids-modal.css +23 -94
- package/components/ids-module-nav/ids-module-nav.css +1 -182
- package/components/ids-month-view/ids-month-view.js +1 -1
- package/components/ids-pager/ids-pager.css +28 -25
- package/components/ids-swappable/ids-swappable.css +84 -19
- package/components/ids-tabs/ids-tabs.css +542 -11
- package/components/ids-tag/ids-tag.css +8 -152
- package/components/ids-time-picker/ids-time-picker.css +49 -67
- package/components/ids-week-view/ids-week-view.js +3 -3
- package/custom-elements.json +964 -942
- package/enterprise-wc.all.iife.js +53 -18
- package/enterprise-wc.all.iife.js.map +3 -3
- package/enterprise-wc.js +5 -5
- package/package.json +1 -1
- package/vscode.html-custom-data.json +1 -1
- package/chunks/ids-chunk-YNW5W3PP-full.js.map +0 -7
- /package/chunks/{ids-chunk-PLPR5GKJ-full.js.map → ids-chunk-INOASOWB-full.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/ids-month-view/ids-month-view.scss", "../../../../src/components/ids-month-view/ids-month-view.ts"],
|
|
4
|
-
"sourcesContent": ["export default `.ids-month-view {\n display: flex;\n background-color: var(--ids-calendar-month-view-color-background-default);\n width: 100%;\n box-sizing: border-box;\n flex-direction: column;\n overflow: auto;\n max-width: inherit;\n}\n.ids-month-view .month-view-container {\n background-color: var(--ids-calendar-month-view-color-background-default);\n flex-shrink: 0;\n}\n.ids-month-view .month-view-table-header th {\n background-clip: padding-box;\n height: 30px;\n line-height: 30px;\n text-align: center;\n width: 14.3%;\n}\n.ids-month-view .month-view-table {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n}\n.ids-month-view .trigger-icon {\n color: var(--ids-color-blue-60);\n}\n.ids-month-view .month-view-legend {\n margin: 0 auto;\n padding: 10px 5px 0;\n}\n.ids-month-view .month-view-legend-swatch,\n.ids-month-view .month-view-legend-item,\n.ids-month-view .month-view-legend-text {\n display: inline-block;\n}\n.ids-month-view .month-view-legend-item {\n margin-bottom: 2px;\n}\n.ids-month-view .month-view-legend-swatch {\n background-color: var(--legend-color);\n opacity: 0.3;\n width: 16px;\n height: 16px;\n}\n.ids-month-view .month-view-legend-item.event-type .month-view-legend-swatch {\n border-radius: 10px;\n opacity: 1;\n width: 14px;\n height: 14px;\n}\n.ids-month-view .month-view-legend-text {\n position: relative;\n color: var(--ids-calendar-month-view-legend-color-text);\n padding: 0 10px 0 8px;\n top: -2px;\n}\n.ids-month-view .events-container {\n display: block;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n}\n.ids-month-view .events-container .events-overflow {\n position: absolute;\n bottom: 0;\n cursor: pointer;\n text-indent: 12px;\n}\n.ids-month-view .events-container ids-text::part(text) {\n text-transform: capitalize;\n}\n\n.ids-month-view.is-compact {\n position: relative;\n}\n.ids-month-view.is-compact .month-view-table-header th {\n line-height: unset;\n vertical-align: top;\n height: 22px;\n}\n.ids-month-view.is-compact .month-view-table {\n margin-top: 13px;\n}\n.ids-month-view.is-compact .weekday-text {\n color: var(--ids-calendar-month-view-weekday-color-text-compact);\n}\n.ids-month-view.is-compact td {\n width: 44px;\n height: 44px;\n text-align: center;\n}\n.ids-month-view.is-compact td:not(.is-disabled):hover {\n cursor: pointer;\n}\n.ids-month-view.is-compact td .day-container {\n display: inline-block;\n position: relative;\n border-radius: 50%;\n border: 1px solid transparent;\n margin: 5px 0;\n}\n.ids-month-view.is-compact td .day-text {\n display: inline-block;\n position: relative;\n z-index: 2;\n border-radius: 50%;\n margin: 2px;\n color: var(--ids-calendar-month-view-color-text-default);\n white-space: nowrap;\n transition: 0.2s background-color ease;\n}\n.ids-month-view.is-compact td.alternate .day-text {\n color: var(--ids-calendar-month-view-color-text-compact);\n}\n.ids-month-view.is-compact td.is-disabled .day-text {\n background-color: var(--ids-color-neutral-10);\n color: var(--ids-color-neutral-30);\n}\n.ids-month-view.is-compact td.is-disabled.has-legend .day-container::after {\n opacity: 0.4;\n}\n.ids-month-view.is-compact td.is-disabled.has-legend .day-text {\n background-color: transparent;\n}\n.ids-month-view.is-compact td ids-text::part(text) {\n border-radius: 50%;\n box-sizing: border-box;\n width: 35px;\n height: 35px;\n line-height: 35px;\n text-align: center;\n display: inline-block;\n}\n.ids-month-view.is-compact td:hover .day-text {\n color: var(--ids-calendar-month-view-weekday-color-text-compact-hover);\n}\n.ids-month-view.is-compact td.ids-disabled:hover .day-text {\n color: var(--ids-color-gray-30);\n}\n.ids-month-view.is-compact td.is-selected .day-text {\n color: var(--ids-calendar-month-view-weekday-color-text-compact-selected-hover);\n background-color: var(--ids-calendar-month-view-day-color-background-compact-selected);\n}\n.ids-month-view.is-compact td.is-selected:focus {\n outline: none;\n outline-style: none;\n}\n.ids-month-view.is-compact td.is-selected:not(.is-disabled):not(.range-selection):focus ids-text::part(text) {\n width: 31px;\n height: 31px;\n line-height: 31px;\n}\n.ids-month-view.is-compact td.is-selected:not(.is-disabled):not(.range-selection):focus ids-text {\n margin: 2px;\n}\n.ids-month-view.is-compact td.is-selected:not(.is-disabled):not(.range-selection):focus .day-container {\n border-color: var(--ids-calendar-month-view-day-color-background-compact-selected);\n z-index: 2;\n box-shadow: 0 0 2px 0 var(--ids-calendar-month-view-day-color-background-compact-selected);\n}\n.ids-month-view.is-compact td.is-today:not(.is-selected) .day-text::part(text) {\n border: 1px solid var(--ids-calendar-month-view-today-color-border-compact);\n}\n.ids-month-view.is-compact td:not(.is-disabled):not(.is-selected):not(.has-legend):not(.range-selection):hover .day-text, .ids-month-view.is-compact td:not(.is-disabled):not(.is-selected):not(.has-legend):not(.range-selection):active .day-text {\n background-color: var(--ids-calendar-month-view-day-color-background-compact-hover);\n}\n.ids-month-view.is-compact td.has-legend:not(.is-disabled):hover .day-container::after {\n opacity: 0.7;\n}\n.ids-month-view.is-compact td.has-legend .day-container::after {\n border-radius: 50%;\n position: absolute;\n content: \"\";\n background-color: var(--legend-color);\n display: inline-block;\n width: 35px;\n height: 35px;\n overflow: hidden;\n opacity: 0.3;\n transition: 0.2s opacity ease;\n inset: 0;\n margin: auto;\n}\n.ids-month-view.is-compact td.range-selection + .range-selection, .ids-month-view.is-compact td.range-next:not(:first-of-type), .ids-month-view.is-compact td.range-prev:not(:last-of-type) {\n position: relative;\n}\n.ids-month-view.is-compact td.range-selection + .range-selection::before, .ids-month-view.is-compact td.range-next:not(:first-of-type)::before, .ids-month-view.is-compact td.range-prev:not(:last-of-type)::before {\n position: absolute;\n width: 100%;\n z-index: 1;\n content: \"\";\n display: inline-block;\n height: 35px;\n top: 0;\n bottom: 0;\n margin-top: auto;\n margin-bottom: auto;\n}\n.ids-month-view.is-compact td.is-disabled.range-selection.not-included + .range-selection::before, .ids-month-view.is-compact td.is-disabled.range-prev.not-included::before {\n content: none;\n}\n.ids-month-view.is-compact td:not(.is-disabled.not-included).range-prev .day-text, .ids-month-view.is-compact td:not(.is-disabled.not-included).range-next .day-text, .ids-month-view.is-compact td:not(.is-disabled.not-included).range-next:not(:first-of-type)::before, .ids-month-view.is-compact td.range-prev:not(:last-of-type)::before {\n background-color: var(--ids-calendar-month-view-range-color-background-compact);\n}\n.ids-month-view.is-compact td.range-selection:not(:first-of-type)::before, .ids-month-view.is-compact td:not(.is-disabled.not-included).range-selection .day-text {\n background-color: var(--ids-calendar-month-view-range-color-background-compact-selected);\n}\n.ids-month-view.is-compact td.range-selection:not(.alternate):not(.is-disabled.not-included) .day-text {\n color: var(--ids-calendar-month-view-range-color-text-compact-selected);\n}\n.ids-month-view.is-compact td.range-selection:not(:first-of-type)::before, .ids-month-view.is-compact td.range-next:not(:first-of-type)::before {\n inset-inline-end: 50%;\n}\n.ids-month-view.is-compact td.range-prev:not(:last-of-type)::before {\n inset-inline-end: -50%;\n}\n.ids-month-view.is-compact td.range-selection .day-text, .ids-month-view.is-compact td.range-prev .day-text, .ids-month-view.is-compact td.range-next .day-text {\n border-radius: 50%;\n z-index: 2;\n transition: none;\n}\n.ids-month-view.is-compact th,\n.ids-month-view.is-compact td {\n padding: 0;\n}\n.ids-month-view.is-compact.range-select-week td .day-text {\n transition: none;\n}\n.ids-month-view.is-compact .btn-today {\n margin-right: -7px;\n}\n.ids-month-view.is-compact .btn-today::part(button) {\n padding-inline: 4px;\n padding-block: 2px;\n margin: 3px;\n}\n.ids-month-view.is-compact .btn-previous,\n.ids-month-view.is-compact .btn-next {\n padding-inline-start: 0;\n margin: 3px;\n}\n.ids-month-view.is-compact .btn-previous::part(button),\n.ids-month-view.is-compact .btn-next::part(button) {\n padding: 0;\n width: 38px;\n height: 38px;\n}\n.ids-month-view.is-compact .month-view-legend {\n padding-top: 27px;\n max-width: 300px;\n}\n.ids-month-view.is-compact .week-num-cell {\n border-inline-end: 1px solid var(--ids-calendar-month-view-color-border);\n}\n.ids-month-view.is-compact .week-num-cell ids-text {\n color: var(--ids-month-view-week-number-text-color);\n cursor: default;\n}\n\n.ids-month-view.is-fullsize {\n border-style: solid;\n border-width: 1px 1px 0;\n border-color: var(--ids-calendar-month-view-color-border);\n}\n.ids-month-view.is-fullsize .weekday-text {\n color: var(--ids-calendar-month-view-weekday-color-text);\n}\n.ids-month-view.is-fullsize.is-disabled.has-legend {\n opacity: 0.4;\n background-color: transparent;\n}\n.ids-month-view.is-fullsize .day-text {\n color: var(--ids-calendar-month-view-color-text-default);\n}\n.ids-month-view.is-fullsize td {\n border-style: solid;\n border-width: 0 1px 1px;\n position: relative;\n transition: 0.1s background-color ease-out;\n height: 99px;\n width: 14.3%;\n overflow: hidden;\n user-select: none;\n}\n.ids-month-view.is-fullsize td:last-child {\n border-right: 0;\n}\n.ids-month-view.is-fullsize td:first-child {\n border-left: 0;\n}\n.ids-month-view.is-fullsize td:not(.is-selected):not(.has-legend):not(.is-disabled):hover, .ids-month-view.is-fullsize td:not(.is-selected):not(.has-legend):not(.is-disabled):active {\n background-color: var(--ids-calendar-month-view-color-background-hover);\n}\n.ids-month-view.is-fullsize td.is-disabled {\n opacity: 0.5;\n background-color: var(--ids-calendar-month-view-color-background-disabled);\n}\n.ids-month-view.is-fullsize td.is-disabled.has-legend::after {\n opacity: 0.4;\n}\n.ids-month-view.is-fullsize td.is-selected:not(.has-legend) {\n background-color: var(--ids-calendar-month-view-color-background-selected);\n}\n.ids-month-view.is-fullsize td.is-selected {\n box-shadow: inset 0 5px 0 0 var(--ids-calendar-month-view-color-selected);\n}\n.ids-month-view.is-fullsize td.is-selected:focus {\n outline: none;\n}\n.ids-month-view.is-fullsize td.has-legend::after {\n position: absolute;\n width: 100%;\n background-color: var(--legend-color);\n content: \"\";\n inset: 0;\n opacity: 0.3;\n}\n.ids-month-view.is-fullsize td.has-legend.is-selected::after {\n top: 5px;\n}\n.ids-month-view.is-fullsize td.has-legend:hover::after {\n opacity: 0.7;\n}\n.ids-month-view.is-fullsize td.alternate .day-text {\n color: var(--ids-calendar-month-view-color-text-alternate);\n}\n.ids-month-view.is-fullsize td .day-text {\n position: absolute;\n cursor: pointer;\n z-index: 1;\n left: calc(100% - 25px);\n top: var(--ids-month-view-day-text-top, 13px);\n width: 10px;\n text-align: center;\n}\n.ids-month-view.is-fullsize td.month-label .day-text {\n left: auto;\n width: 100%;\n text-align: right;\n}\n.ids-month-view.is-fullsize td.month-label ids-text::part(text) {\n font-weight: 600;\n padding-right: 10px;\n}\n.ids-month-view.is-fullsize th,\n.ids-month-view.is-fullsize td {\n padding: 0;\n border-bottom: 1px solid;\n border-color: var(--ids-calendar-month-view-color-border);\n}\n.ids-month-view.is-fullsize.has-legend .month-view-container {\n border-bottom: 1px solid var(--ids-calendar-month-view-color-border);\n}\n\n.ids-month-view.is-date-picker {\n overflow: visible;\n}\n.ids-month-view.is-date-picker .month-view-container {\n padding-left: 10px;\n padding-right: 10px;\n}\n.ids-month-view.is-date-picker td .day-container {\n margin: 0;\n}\n.ids-month-view.is-date-picker ids-date-picker {\n margin-left: 12px;\n}\n\n.ids-month-view.is-date-picker .month-view-legend,\n.ids-month-view.is-fullsize .month-view-legend {\n text-align: center;\n}\n\n.month-view-legend-item.event-type .month-view-legend-swatch {\n border-radius: 10px;\n opacity: 1;\n}\n\nids-toolbar ids-menu-button[menu=view-picker] {\n margin-inline-end: 8px;\n}\n\n:host([dir=rtl]) .ids-month-view.is-fullsize td .day-text {\n left: unset;\n right: calc(100% - 25px);\n}\n:host([dir=rtl]) .ids-month-view.is-fullsize td.month-label .day-text {\n right: auto;\n text-align: left;\n}\n:host([dir=rtl]) .ids-month-view.is-fullsize td.month-label ids-text::part(text) {\n padding-right: unset;\n padding-left: 10px;\n}\n:host([dir=rtl]) .ids-month-view.is-fullsize td:last-child {\n border-left: 0;\n}\n:host([dir=rtl]) .ids-month-view.is-date-picker ids-date-picker {\n margin-left: 0;\n margin-right: 12px;\n}\n:host([dir=rtl]) .ids-month-view.is-date-picker .btn-today {\n margin-right: 0;\n margin-left: -7px;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2J1aWxkcy9pbmZvci1kZXNpZ24vZW50ZXJwcmlzZS13Yy9zcmMvY29tcG9uZW50cy9pZHMtbW9udGgtdmlldyIsInNvdXJjZXMiOlsiaWRzLW1vbnRoLXZpZXcuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTs7QUFJQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFJRjtFQUNFO0VBQ0E7O0FBR0Y7QUFBQTtBQUFBO0VBR0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOzs7QUFNTjtFQUNFOztBQUVBO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFJQTtFQUNFO0VBQ0E7O0FBSUE7RUFDRTs7QUFHRjtFQUNFOztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUE7RUFDRTs7QUFLRjtFQUNFOztBQUtGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUE7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFLTjtFQUNFOztBQUdGO0VBRUU7O0FBS0E7RUFDRTs7QUFLRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFLSjtFQUdFOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBTUY7RUFDRTs7QUFJSjtFQUlFOztBQUdGO0VBRUU7O0FBR0Y7RUFDRTs7QUFHRjtFQUVFOztBQUdGO0VBQ0U7O0FBR0Y7RUFHRTtFQUNBO0VBQ0E7O0FBSUo7QUFBQTtFQUVFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTs7QUFJSjtBQUFBO0VBRUU7RUFDQTs7QUFFQTtBQUFBO0VBQ0U7RUFDQTtFQUNBOztBQUlKO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUVBO0VBQ0U7RUFDQTs7O0FBTU47RUFDRTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBVUE7RUFDQTtFQUNBO0VBQ0E7O0FBWEE7RUFDRTs7QUFHRjtFQUNFOztBQVFGO0VBRUU7O0FBR0Y7RUFDRTtFQUNBOztBQUVBO0VBQ0U7O0FBSUo7RUFDRTs7QUFHRjtFQUNFOztBQUVBO0VBQ0U7O0FBS0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUlKO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUo7QUFBQTtFQUVFO0VBQ0E7RUFDQTs7QUFJRjtFQUNFOzs7QUFLSjtFQUNFOztBQUVBO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7OztBQU9GO0FBQUE7RUFDRTs7O0FBS0o7RUFDRTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFPSTtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUtGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIuaWRzLW1vbnRoLXZpZXcge1xuICBkaXNwbGF5OiBmbGV4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci1iYWNrZ3JvdW5kLWRlZmF1bHQpO1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIG1heC13aWR0aDogaW5oZXJpdDtcblxuICAubW9udGgtdmlldy1jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWNvbG9yLWJhY2tncm91bmQtZGVmYXVsdCk7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gIH1cblxuICAubW9udGgtdmlldy10YWJsZS1oZWFkZXIge1xuICAgIHRoIHtcbiAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAxNC4zJTtcbiAgICB9XG4gIH1cblxuICAubW9udGgtdmlldy10YWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXNwYWNpbmc6IDA7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgfVxuXG4gIC50cmlnZ2VyLWljb24ge1xuICAgIGNvbG9yOiB2YXIoLS1pZHMtY29sb3ItYmx1ZS02MCk7XG4gIH1cblxuICAvLyBMZWdlbmQgbXV0dWFsXG4gIC5tb250aC12aWV3LWxlZ2VuZCB7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgcGFkZGluZzogMTBweCA1cHggMDtcbiAgfVxuXG4gIC5tb250aC12aWV3LWxlZ2VuZC1zd2F0Y2gsXG4gIC5tb250aC12aWV3LWxlZ2VuZC1pdGVtLFxuICAubW9udGgtdmlldy1sZWdlbmQtdGV4dCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG5cbiAgLm1vbnRoLXZpZXctbGVnZW5kLWl0ZW0ge1xuICAgIG1hcmdpbi1ib3R0b206IDJweDtcbiAgfVxuXG4gIC5tb250aC12aWV3LWxlZ2VuZC1zd2F0Y2gge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxlZ2VuZC1jb2xvcik7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMTZweDtcbiAgfVxuXG4gIC5tb250aC12aWV3LWxlZ2VuZC1pdGVtLmV2ZW50LXR5cGUgLm1vbnRoLXZpZXctbGVnZW5kLXN3YXRjaCB7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHdpZHRoOiAxNHB4O1xuICAgIGhlaWdodDogMTRweDtcbiAgfVxuXG4gIC5tb250aC12aWV3LWxlZ2VuZC10ZXh0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWxlZ2VuZC1jb2xvci10ZXh0KTtcbiAgICBwYWRkaW5nOiAwIDEwcHggMCA4cHg7XG4gICAgdG9wOiAtMnB4O1xuICB9XG5cbiAgLmV2ZW50cy1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdG9wOiAwO1xuXG4gICAgLmV2ZW50cy1vdmVyZmxvdyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDA7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0ZXh0LWluZGVudDogMTJweDtcbiAgICB9XG5cbiAgICBpZHMtdGV4dDo6cGFydCh0ZXh0KSB7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQ29tcGFjdCB2aWV3XG4uaWRzLW1vbnRoLXZpZXcuaXMtY29tcGFjdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAubW9udGgtdmlldy10YWJsZS1oZWFkZXIgdGgge1xuICAgIGxpbmUtaGVpZ2h0OiB1bnNldDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIGhlaWdodDogMjJweDtcbiAgfVxuXG4gIC5tb250aC12aWV3LXRhYmxlIHtcbiAgICBtYXJnaW4tdG9wOiAxM3B4O1xuICB9XG5cbiAgLndlZWtkYXktdGV4dCB7XG4gICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXdlZWtkYXktY29sb3ItdGV4dC1jb21wYWN0KTtcbiAgfVxuXG4gIHRkIHtcbiAgICB3aWR0aDogNDRweDtcbiAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgJjpub3QoLmlzLWRpc2FibGVkKTpob3ZlciB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLmRheS1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBtYXJnaW46IDVweCAwO1xuICAgIH1cblxuICAgIC5kYXktdGV4dCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgICBjb2xvcjogdmFyKC0taWRzLWNhbGVuZGFyLW1vbnRoLXZpZXctY29sb3ItdGV4dC1kZWZhdWx0KTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB0cmFuc2l0aW9uOiAwLjJzIGJhY2tncm91bmQtY29sb3IgZWFzZTtcbiAgICB9XG5cbiAgICAmLmFsdGVybmF0ZSAuZGF5LXRleHQge1xuICAgICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWNvbG9yLXRleHQtY29tcGFjdCk7XG4gICAgfVxuXG4gICAgJi5pcy1kaXNhYmxlZCB7XG4gICAgICAuZGF5LXRleHQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtY29sb3ItbmV1dHJhbC0xMCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pZHMtY29sb3ItbmV1dHJhbC0zMCk7XG4gICAgICB9XG5cbiAgICAgICYuaGFzLWxlZ2VuZCB7XG4gICAgICAgIC5kYXktY29udGFpbmVyOjphZnRlciB7XG4gICAgICAgICAgb3BhY2l0eTogMC40O1xuICAgICAgICB9XG5cbiAgICAgICAgLmRheS10ZXh0IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlkcy10ZXh0OjpwYXJ0KHRleHQpIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICB3aWR0aDogMzVweDtcbiAgICAgIGhlaWdodDogMzVweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNXB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgLmRheS10ZXh0IHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXdlZWtkYXktY29sb3ItdGV4dC1jb21wYWN0LWhvdmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmlkcy1kaXNhYmxlZDpob3ZlciB7XG4gICAgICAuZGF5LXRleHQge1xuICAgICAgICBjb2xvcjogdmFyKC0taWRzLWNvbG9yLWdyYXktMzApO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtc2VsZWN0ZWQge1xuICAgICAgLmRheS10ZXh0IHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXdlZWtkYXktY29sb3ItdGV4dC1jb21wYWN0LXNlbGVjdGVkLWhvdmVyKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWNhbGVuZGFyLW1vbnRoLXZpZXctZGF5LWNvbG9yLWJhY2tncm91bmQtY29tcGFjdC1zZWxlY3RlZCk7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBvdXRsaW5lLXN0eWxlOiBub25lO1xuICAgICAgfVxuXG4gICAgICAmOm5vdCguaXMtZGlzYWJsZWQpOm5vdCgucmFuZ2Utc2VsZWN0aW9uKTpmb2N1cyB7XG4gICAgICAgIGlkcy10ZXh0OjpwYXJ0KHRleHQpIHtcbiAgICAgICAgICB3aWR0aDogMzFweDtcbiAgICAgICAgICBoZWlnaHQ6IDMxcHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDMxcHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZHMtdGV4dCB7XG4gICAgICAgICAgbWFyZ2luOiAycHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZGF5LWNvbnRhaW5lciB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1kYXktY29sb3ItYmFja2dyb3VuZC1jb21wYWN0LXNlbGVjdGVkKTtcbiAgICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAycHggMCB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1kYXktY29sb3ItYmFja2dyb3VuZC1jb21wYWN0LXNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtdG9kYXk6bm90KC5pcy1zZWxlY3RlZCkgLmRheS10ZXh0OjpwYXJ0KHRleHQpIHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXRvZGF5LWNvbG9yLWJvcmRlci1jb21wYWN0KTtcbiAgICB9XG5cbiAgICAmOm5vdCguaXMtZGlzYWJsZWQpOm5vdCguaXMtc2VsZWN0ZWQpOm5vdCguaGFzLWxlZ2VuZCk6bm90KC5yYW5nZS1zZWxlY3Rpb24pOmhvdmVyIC5kYXktdGV4dCxcbiAgICAmOm5vdCguaXMtZGlzYWJsZWQpOm5vdCguaXMtc2VsZWN0ZWQpOm5vdCguaGFzLWxlZ2VuZCk6bm90KC5yYW5nZS1zZWxlY3Rpb24pOmFjdGl2ZSAuZGF5LXRleHQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWNhbGVuZGFyLW1vbnRoLXZpZXctZGF5LWNvbG9yLWJhY2tncm91bmQtY29tcGFjdC1ob3Zlcik7XG4gICAgfVxuXG4gICAgLy8gTGVnZW5kIGluIGNvbXBhY3QgbW9kZVxuICAgICYuaGFzLWxlZ2VuZDpub3QoLmlzLWRpc2FibGVkKTpob3ZlciB7XG4gICAgICAuZGF5LWNvbnRhaW5lcjo6YWZ0ZXIge1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5oYXMtbGVnZW5kIC5kYXktY29udGFpbmVyIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sZWdlbmQtY29sb3IpO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHdpZHRoOiAzNXB4O1xuICAgICAgICBoZWlnaHQ6IDM1cHg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIG9wYWNpdHk6IDAuMztcbiAgICAgICAgdHJhbnNpdGlvbjogMC4ycyBvcGFjaXR5IGVhc2U7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmFuZ2Ugc2VsZWN0aW9uXG4gICAgJi5yYW5nZS1zZWxlY3Rpb24gKyAucmFuZ2Utc2VsZWN0aW9uLFxuICAgICYucmFuZ2UtbmV4dDpub3QoOmZpcnN0LW9mLXR5cGUpLFxuICAgICYucmFuZ2UtcHJldjpub3QoOmxhc3Qtb2YtdHlwZSkge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDM1cHg7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiBhdXRvO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtZGlzYWJsZWQucmFuZ2Utc2VsZWN0aW9uLm5vdC1pbmNsdWRlZCArIC5yYW5nZS1zZWxlY3Rpb24sXG4gICAgJi5pcy1kaXNhYmxlZC5yYW5nZS1wcmV2Lm5vdC1pbmNsdWRlZCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC5pcy1kaXNhYmxlZC5ub3QtaW5jbHVkZWQpLnJhbmdlLXByZXYgLmRheS10ZXh0LFxuICAgICY6bm90KC5pcy1kaXNhYmxlZC5ub3QtaW5jbHVkZWQpLnJhbmdlLW5leHQgLmRheS10ZXh0LFxuICAgICY6bm90KC5pcy1kaXNhYmxlZC5ub3QtaW5jbHVkZWQpLnJhbmdlLW5leHQ6bm90KDpmaXJzdC1vZi10eXBlKTo6YmVmb3JlLFxuICAgICYucmFuZ2UtcHJldjpub3QoOmxhc3Qtb2YtdHlwZSk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1yYW5nZS1jb2xvci1iYWNrZ3JvdW5kLWNvbXBhY3QpO1xuICAgIH1cblxuICAgICYucmFuZ2Utc2VsZWN0aW9uOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6OmJlZm9yZSxcbiAgICAmOm5vdCguaXMtZGlzYWJsZWQubm90LWluY2x1ZGVkKS5yYW5nZS1zZWxlY3Rpb24gLmRheS10ZXh0IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXJhbmdlLWNvbG9yLWJhY2tncm91bmQtY29tcGFjdC1zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgJi5yYW5nZS1zZWxlY3Rpb246bm90KC5hbHRlcm5hdGUpOm5vdCguaXMtZGlzYWJsZWQubm90LWluY2x1ZGVkKSAuZGF5LXRleHQge1xuICAgICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXJhbmdlLWNvbG9yLXRleHQtY29tcGFjdC1zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgJi5yYW5nZS1zZWxlY3Rpb246bm90KDpmaXJzdC1vZi10eXBlKTo6YmVmb3JlLFxuICAgICYucmFuZ2UtbmV4dDpub3QoOmZpcnN0LW9mLXR5cGUpOjpiZWZvcmUge1xuICAgICAgaW5zZXQtaW5saW5lLWVuZDogNTAlO1xuICAgIH1cblxuICAgICYucmFuZ2UtcHJldjpub3QoOmxhc3Qtb2YtdHlwZSk6OmJlZm9yZSB7XG4gICAgICBpbnNldC1pbmxpbmUtZW5kOiAtNTAlO1xuICAgIH1cblxuICAgICYucmFuZ2Utc2VsZWN0aW9uIC5kYXktdGV4dCxcbiAgICAmLnJhbmdlLXByZXYgLmRheS10ZXh0LFxuICAgICYucmFuZ2UtbmV4dCAuZGF5LXRleHQge1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIHRyYW5zaXRpb246IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgdGgsXG4gIHRkIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgJi5yYW5nZS1zZWxlY3Qtd2VlayB0ZCAuZGF5LXRleHQge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gIH1cblxuICAuYnRuLXRvZGF5IHtcbiAgICBtYXJnaW4tcmlnaHQ6IC03cHg7XG5cbiAgICAmOjpwYXJ0KGJ1dHRvbikge1xuICAgICAgcGFkZGluZy1pbmxpbmU6IDRweDtcbiAgICAgIHBhZGRpbmctYmxvY2s6IDJweDtcbiAgICAgIG1hcmdpbjogM3B4O1xuICAgIH1cbiAgfVxuXG4gIC5idG4tcHJldmlvdXMsXG4gIC5idG4tbmV4dCB7XG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7XG4gICAgbWFyZ2luOiAzcHg7XG5cbiAgICAmOjpwYXJ0KGJ1dHRvbikge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHdpZHRoOiAzOHB4O1xuICAgICAgaGVpZ2h0OiAzOHB4O1xuICAgIH1cbiAgfVxuXG4gIC5tb250aC12aWV3LWxlZ2VuZCB7XG4gICAgcGFkZGluZy10b3A6IDI3cHg7XG4gICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgfVxuXG4gIC53ZWVrLW51bS1jZWxsIHtcbiAgICBib3JkZXItaW5saW5lLWVuZDogMXB4IHNvbGlkIHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWNvbG9yLWJvcmRlcik7XG5cbiAgICBpZHMtdGV4dCB7XG4gICAgICBjb2xvcjogdmFyKC0taWRzLW1vbnRoLXZpZXctd2Vlay1udW1iZXItdGV4dC1jb2xvcik7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgfVxuICB9XG59XG5cbi8vIEZ1bGwgc2l6ZSB2aWV3XG4uaWRzLW1vbnRoLXZpZXcuaXMtZnVsbHNpemUge1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItd2lkdGg6IDFweCAxcHggMDtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci1ib3JkZXIpO1xuXG4gIC53ZWVrZGF5LXRleHQge1xuICAgIGNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy13ZWVrZGF5LWNvbG9yLXRleHQpO1xuICB9XG5cbiAgJi5pcy1kaXNhYmxlZC5oYXMtbGVnZW5kIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAuZGF5LXRleHQge1xuICAgIGNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci10ZXh0LWRlZmF1bHQpO1xuICB9XG5cbiAgdGQge1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLXdpZHRoOiAwIDFweCAxcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRyYW5zaXRpb246IDAuMXMgYmFja2dyb3VuZC1jb2xvciBlYXNlLW91dDtcblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgfVxuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItbGVmdDogMDtcbiAgICB9XG5cbiAgICBoZWlnaHQ6IDk5cHg7XG4gICAgd2lkdGg6IDE0LjMlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgICAmOm5vdCguaXMtc2VsZWN0ZWQpOm5vdCguaGFzLWxlZ2VuZCk6bm90KC5pcy1kaXNhYmxlZCk6aG92ZXIsXG4gICAgJjpub3QoLmlzLXNlbGVjdGVkKTpub3QoLmhhcy1sZWdlbmQpOm5vdCguaXMtZGlzYWJsZWQpOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci1iYWNrZ3JvdW5kLWhvdmVyKTtcbiAgICB9XG5cbiAgICAmLmlzLWRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWNvbG9yLWJhY2tncm91bmQtZGlzYWJsZWQpO1xuXG4gICAgICAmLmhhcy1sZWdlbmQ6OmFmdGVyIHtcbiAgICAgICAgb3BhY2l0eTogMC40O1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtc2VsZWN0ZWQ6bm90KC5oYXMtbGVnZW5kKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci1iYWNrZ3JvdW5kLXNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAmLmlzLXNlbGVjdGVkIHtcbiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgNXB4IDAgMCB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci1zZWxlY3RlZCk7XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaGFzLWxlZ2VuZCB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxlZ2VuZC1jb2xvcik7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3BhY2l0eTogMC4zO1xuICAgICAgfVxuXG4gICAgICAmLmlzLXNlbGVjdGVkOjphZnRlciB7XG4gICAgICAgIHRvcDogNXB4O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmFsdGVybmF0ZSAuZGF5LXRleHQge1xuICAgICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWNvbG9yLXRleHQtYWx0ZXJuYXRlKTtcbiAgICB9XG5cbiAgICAuZGF5LXRleHQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIGxlZnQ6IGNhbGMoMTAwJSAtIDI1cHgpO1xuICAgICAgdG9wOiB2YXIoLS1pZHMtbW9udGgtdmlldy1kYXktdGV4dC10b3AsIDEzcHgpO1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgJi5tb250aC1sYWJlbCAuZGF5LXRleHQge1xuICAgICAgbGVmdDogYXV0bztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuXG4gICAgJi5tb250aC1sYWJlbCBpZHMtdGV4dDo6cGFydCh0ZXh0KSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgICB9XG4gIH1cblxuICB0aCxcbiAgdGQge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLWNhbGVuZGFyLW1vbnRoLXZpZXctY29sb3ItYm9yZGVyKTtcbiAgfVxuXG4gIC8vIExlZ2VuZCBpbiBmdWxsIHNpemUgbW9kZVxuICAmLmhhcy1sZWdlbmQgLm1vbnRoLXZpZXctY29udGFpbmVyIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0taWRzLWNhbGVuZGFyLW1vbnRoLXZpZXctY29sb3ItYm9yZGVyKTtcbiAgfVxufVxuXG4vLyBVc2VkIGluIGEgZGF5IHBpY2tlclxuLmlkcy1tb250aC12aWV3LmlzLWRhdGUtcGlja2VyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG5cbiAgLm1vbnRoLXZpZXctY29udGFpbmVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgfVxuXG4gIHRkIC5kYXktY29udGFpbmVyIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICBpZHMtZGF0ZS1waWNrZXIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMnB4O1xuICB9XG59XG5cbi8vIExlZ2VuZCBmb3IgZnVsbCBzaXplIHZpZXcgYW5kIGlmIGl0J3MgaW4gYSBkYXRlcGlja2VyXG4uaWRzLW1vbnRoLXZpZXcuaXMtZGF0ZS1waWNrZXIsXG4uaWRzLW1vbnRoLXZpZXcuaXMtZnVsbHNpemUge1xuICAubW9udGgtdmlldy1sZWdlbmQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuXG4vLyBMZWdlbmQgZm9yIG1vbnRoXG4ubW9udGgtdmlldy1sZWdlbmQtaXRlbS5ldmVudC10eXBlIC5tb250aC12aWV3LWxlZ2VuZC1zd2F0Y2gge1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBvcGFjaXR5OiAxO1xufVxuXG5pZHMtdG9vbGJhciBpZHMtbWVudS1idXR0b25bbWVudT0ndmlldy1waWNrZXInXSB7XG4gIG1hcmdpbi1pbmxpbmUtZW5kOiA4cHg7XG59XG5cbi8vIFRleHQgZGlyZWN0aW9uXG46aG9zdChbZGlyPSdydGwnXSkge1xuICAuaWRzLW1vbnRoLXZpZXcge1xuICAgICYuaXMtZnVsbHNpemUgdGQge1xuICAgICAgLmRheS10ZXh0IHtcbiAgICAgICAgbGVmdDogdW5zZXQ7XG4gICAgICAgIHJpZ2h0OiBjYWxjKDEwMCUgLSAyNXB4KTtcbiAgICAgIH1cblxuICAgICAgJi5tb250aC1sYWJlbCAuZGF5LXRleHQge1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIH1cblxuICAgICAgJi5tb250aC1sYWJlbCBpZHMtdGV4dDo6cGFydCh0ZXh0KSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IHVuc2V0O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtZGF0ZS1waWNrZXIge1xuICAgICAgaWRzLWRhdGUtcGlja2VyIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTJweDtcbiAgICAgIH1cblxuICAgICAgLmJ0bi10b2RheSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC03cHg7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0= */`;\n", "import { customElement, scss } from '../../core/ids-decorators';\nimport { attributes } from '../../core/ids-attributes';\n\nimport IdsEventsMixin from '../../mixins/ids-events-mixin/ids-events-mixin';\nimport IdsDateAttributeMixin from '../../mixins/ids-date-attribute-mixin/ids-date-attribute-mixin';\nimport IdsLocaleMixin from '../../mixins/ids-locale-mixin/ids-locale-mixin';\nimport IdsCalendarEventsMixin from '../../mixins/ids-calendar-events-mixin/ids-calendar-events-mixin';\nimport IdsElement from '../../core/ids-element';\nimport IdsMonthViewAttributeMixin from './ids-month-view-attribute-mixin';\n\n// Import Utils\nimport {\n addDate,\n daysDiff,\n daysInMonth,\n firstDayOfMonthDate,\n firstDayOfWeekDate,\n gregorianToUmalqura,\n isValidDate,\n lastDayOfMonthDate,\n subtractDate,\n umalquraToGregorian,\n weeksInMonth,\n weeksInRange,\n removeDateRange,\n weekNumber\n} from '../../utils/ids-date-utils/ids-date-utils';\nimport {\n stringToBool,\n stringToNumber,\n buildClassAttrib,\n} from '../../utils/ids-string-utils/ids-string-utils';\n\n// Supporting components\nimport '../ids-button/ids-button';\nimport '../ids-icon/ids-icon';\nimport '../ids-text/ids-text';\nimport '../ids-trigger-field/ids-trigger-button';\n\n// Import Styles\nimport styles from './ids-month-view.scss';\nimport IdsCalendarEvent, { CalendarEventData, CalendarEventTypeData } from '../ids-calendar/ids-calendar-event';\nimport { getDateValuesFromString } from '../ids-date-picker/ids-date-picker-common';\n\nimport type {\n IdsRangeSettings,\n IdsDisableSettings,\n IdsLegendSettings,\n} from './ids-month-view-common';\nimport {\n BASE_Y_OFFSET,\n MIN_MONTH,\n MAX_MONTH,\n MAX_EVENT_COUNT,\n WEEK_LENGTH,\n IdsRangeSettingsInterface\n} from './ids-month-view-common';\n\nexport type IdsDayselectedEvent = CustomEventInit & {\n detail: {\n elem: IdsMonthView,\n date: Date,\n useRange: boolean,\n rangeStart: Date | null,\n rangeEnd: Date | null,\n events?: CalendarEventData[]\n },\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n};\n\nconst Base = IdsMonthViewAttributeMixin(\n IdsDateAttributeMixin(\n IdsCalendarEventsMixin(\n IdsLocaleMixin(\n IdsEventsMixin(\n IdsElement\n )\n )\n )\n )\n);\n\n/**\n * IDS Month View Component\n * @type {IdsMonthView}\n * @inherits IdsElement\n * @mixes IdsLocaleMixin\n * @mixes IdsEventsMixin\n * @mixes IdsCalendarEventsMixin\n * @part container - the container of the component\n * @part table-container - the container of the calendar table\n */\n@customElement('ids-month-view')\n@scss(styles)\nclass IdsMonthView extends Base implements IdsRangeSettingsInterface {\n #lastRenderedYear = NaN;\n\n #lastRenderedDay = NaN;\n\n #lastRenderedMonth = NaN;\n\n #lastRenderedFirstDayOfWeek = NaN;\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.#attachEventHandlers();\n this.#attachKeyboardListeners();\n this.#renderMonth();\n }\n\n // Flag value for custom calendar event\n #isCustom = false;\n\n /**\n * Return the attributes we handle as getters/setters\n * @returns {Array} The attributes in an array\n */\n static get attributes(): Array<string> {\n return [\n ...super.attributes,\n attributes.COMPACT,\n attributes.END_DATE,\n attributes.FIRST_DAY_OF_WEEK,\n attributes.IS_DATEPICKER,\n attributes.SHOW_PICKLIST_MONTH,\n attributes.SHOW_PICKLIST_WEEK,\n attributes.SHOW_PICKLIST_YEAR,\n attributes.SHOW_TODAY,\n attributes.START_DATE,\n ];\n }\n\n /**\n * Inner template contents\n * @returns {string} The template\n */\n template(): string {\n return `<div class=\"ids-month-view ${this.compact ? 'is-compact' : 'is-fullsize'}${this.isDatePicker ? ' is-date-picker' : ''}\" part=\"container\">\n <div class=\"month-view-container\" part=\"table-container\">\n <table class=\"month-view-table\" aria-label=\"${this.localeAPI?.translate('Calendar')}\" role=\"application\">\n <thead class=\"month-view-table-header\">\n <tr></tr>\n </thead>\n <tbody></tbody>\n </table>\n </div>\n </div>`;\n }\n\n /**\n * Establish internal event handlers\n * @returns {void}\n */\n #attachEventHandlers() {\n // Day select event\n this.offEvent('click.month-view-dayselect');\n this.onEvent('click.month-view-dayselect', this.container?.querySelector('tbody'), (e: MouseEvent) => {\n // ignore clicks from week number column\n if ((e.target as HTMLElement)?.classList.contains('week-num-text')) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n return;\n }\n\n this.#daySelectClick((e.target as HTMLElement).closest('td'));\n });\n\n // Range selection event\n this.offEvent('mouseover.month-view-range');\n this.onEvent('mouseover.month-view-range', this.container?.querySelector('tbody'), (e: MouseEvent) => {\n const element = (e.target as HTMLElement).closest('td');\n\n if (!element) return;\n\n const { year, month, day } = element.dataset;\n\n this.#rangePropagation(year, month, day);\n });\n\n // Clear range selection when hover outside\n this.offEvent('mouseleave.month-view-range');\n this.onEvent('mouseleave.month-view-range', this.container?.querySelector('tbody'), () => {\n this.container?.querySelectorAll('td')\n .forEach((item: HTMLElement) => item.classList.remove('range-next', 'range-prev'));\n });\n\n // Events Overflow click event\n this.onEvent('click.overflow', this.container, (evt: any) => {\n if (evt.target.tagName === 'IDS-TEXT' && evt.target.classList.contains('events-overflow')) {\n evt.stopPropagation();\n const date = new Date(evt.target.getAttribute('data-date'));\n this.triggerEvent('overflow-click', this, {\n detail: { date },\n bubbles: true,\n cancelable: true,\n composed: true\n });\n }\n });\n\n return this;\n }\n\n onLanguageChange = () => {\n this.#renderMonth();\n };\n\n onLocaleChange = () => {\n this.#renderMonth();\n };\n\n /**\n * Establish Internal Keyboard shortcuts\n * @returns {object} this class-instance object for chaining\n */\n #attachKeyboardListeners(): any {\n // Group key codes to stop keyboard event, trigger dayselected event and focus active day\n const keys = [33, 34, 35, 36, 37, 38, 39, 40, 187, 189];\n\n // Range calendar doesn't have keyboard shortcuts\n if (this.#isDisplayRange()) {\n this.offEvent('keydown.month-view-keyboard');\n } else {\n this.offEvent('keydown.month-view-keyboard');\n this.onEvent('keydown.month-view-keyboard', this.container?.querySelector('.month-view-table'), (e: KeyboardEvent) => {\n const key = e.keyCode;\n\n if (keys.includes(key)) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n\n // When range selection is started\n if (this.useRange) {\n if (this.rangeSettings.start) {\n // Escape resets range selection\n if (key === 27) {\n this.rangeSettings.start = null;\n this.#clearRangeClasses();\n this.selectDay(this.year, this.month, this.day);\n this.focus();\n }\n\n // Arrow Up includes range start and same day previous week\n if (key === 38) {\n this.changeDate('previous-week', true);\n this.#rangePropagation(this.year, this.month, this.day);\n }\n\n // Arrow Down includes range start and same day next week\n if (key === 40) {\n this.changeDate('next-week', true);\n this.#rangePropagation(this.year, this.month, this.day);\n }\n\n // Arrow Right or + key includes next day to range selection\n if (key === 39 || (key === 187 && e.shiftKey)) {\n this.changeDate('next-day', true);\n this.#rangePropagation(this.year, this.month, this.day);\n }\n\n // Arrow Left or - key includes previous day to range selection\n if (key === 37 || (key === 189 && !e.shiftKey)) {\n this.changeDate('previous-day', true);\n this.#rangePropagation(this.year, this.month, this.day);\n }\n\n // Enter or space key completes range selection if started\n if (key === 13 || key === 32) {\n this.#setRangeSelection(this.year, this.month, this.day);\n this.#triggerSelectedEvent();\n }\n\n this.focus();\n\n return;\n }\n\n // Enter or space key starts range selection\n if (key === 13 || key === 32) {\n if (this.rangeSettings.selectWeek) {\n this.#rangeSelectWeek(this.year, this.month, this.day);\n this.#triggerSelectedEvent();\n } else {\n this.#setRangeSelection(this.year, this.month, this.day);\n this.focus();\n }\n }\n }\n\n // Arrow Up selects same day previous week\n if (key === 38) {\n this.changeDate('previous-week');\n }\n\n // Arrow Down selects same day next week\n if (key === 40) {\n this.changeDate('next-week');\n }\n\n // Arrow Right or + key selects next day\n if (key === 39 || (key === 187 && e.shiftKey)) {\n this.changeDate('next-day');\n }\n\n // Arrow Left or - key selects previous day\n if (key === 37 || (key === 189 && !e.shiftKey)) {\n this.changeDate('previous-day');\n }\n\n // Page Up selects same day previous month\n if (key === 33 && !e.altKey && !(e.ctrlKey || e.metaKey)) {\n this.changeDate('previous-month');\n }\n\n // Page Down selects same day next month\n if (key === 34 && !e.altKey && !(e.ctrlKey || e.metaKey)) {\n this.changeDate('next-month');\n }\n\n // ctrl + Page Up selects same day previous year\n if (key === 33 && (e.ctrlKey || e.metaKey)) {\n this.changeDate('previous-year');\n }\n\n // ctrl + Page Down selects same day next year\n if (key === 34 && (e.ctrlKey || e.metaKey)) {\n this.changeDate('next-year');\n }\n\n // Home moves to start of the month\n if (key === 36) {\n this.changeDate('start-month');\n }\n\n // End moves to end of the month\n if (key === 35) {\n this.changeDate('end-month');\n }\n\n // 't' selects today\n if (key === 84) {\n this.changeDate('today');\n }\n\n // Add keys including Enter or Space triggers dayselected event in regular calendar\n if (((keys.includes(key) || key === 84) && !this.isDatePicker) || (key === 32 || key === 13)) {\n this.#triggerSelectedEvent();\n }\n\n if (keys.includes(key) || key === 84) {\n if (this.isDatePicker) {\n this.selectDay(this.year, this.month, this.day);\n }\n this.focus();\n }\n });\n }\n\n return this;\n }\n\n /**\n * Add/remove legend HTML to the container\n */\n #renderLegend(): void {\n const template = (this.legend && this.legend.length > 0) ? `\n <div class=\"month-view-legend\">\n ${this.legend.map((item: any) => `\n <div class=\"month-view-legend-item ${item.cssClass || ''}\">\n <span class=\"month-view-legend-swatch\" data-color=\"${item.color}\"></span>\n <ids-text class=\"month-view-legend-text\" ${item.fontSize ? `font-size=\"${item.fontSize}\"` : ''}>${item.name}</ids-text>\n </div>\n `).join('')}\n </div>\n ` : '';\n\n // Clear/add HTML\n this.container?.querySelector('.month-view-legend')?.remove();\n this.container?.querySelector('.month-view-container')?.insertAdjacentHTML('beforeend', template);\n\n this.#colorToVar();\n }\n\n /**\n * Change month/year/day by event type\n * @param {string} type of event to be called\n * @param {boolean} limitMonth date changing is limited only to the current month\n */\n changeDate(type: string, limitMonth = false): void {\n if (type === 'next-month') {\n if (this.localeAPI?.isIslamic()) {\n const umalqura = gregorianToUmalqura(this.activeDate);\n const year = umalqura.month === MAX_MONTH ? umalqura.year + 1 : umalqura.year;\n const month = umalqura.month === MAX_MONTH ? MIN_MONTH : umalqura.month + 1;\n const gregorian = umalquraToGregorian(year, month, umalqura.day === 30 ? 1 : umalqura.day);\n\n this.day = gregorian.getDate();\n this.year = gregorian.getFullYear();\n this.month = gregorian.getMonth();\n } else {\n this.year = this.month === MAX_MONTH ? this.year + 1 : this.year;\n this.month = this.month === MAX_MONTH ? MIN_MONTH : this.month + 1;\n this.day = this.#getDayInMonth(this.day);\n }\n }\n\n if (type === 'previous-month') {\n if (this.localeAPI?.isIslamic()) {\n const umalqura = gregorianToUmalqura(this.activeDate);\n const year = umalqura.month === MIN_MONTH ? umalqura.year - 1 : umalqura.year;\n const month = umalqura.month === MIN_MONTH ? MAX_MONTH : umalqura.month - 1;\n const gregorian = umalquraToGregorian(year, month, umalqura.day === 30 ? 1 : umalqura.day);\n\n this.day = gregorian.getDate();\n this.year = gregorian.getFullYear();\n this.month = gregorian.getMonth();\n } else {\n this.year = this.month === MIN_MONTH ? this.year - 1 : this.year;\n this.month = this.month === MIN_MONTH ? MAX_MONTH : this.month - 1;\n this.day = this.#getDayInMonth(this.day);\n }\n }\n\n if (type === 'next-day') {\n const lastDayOfMonth = lastDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n if (lastDayOfMonth.getDate() === this.day && limitMonth) return;\n\n if (this.localeAPI?.isIslamic()) {\n const nextDate = addDate(this.activeDate, 1, 'days');\n\n this.day = nextDate.getDate();\n this.year = nextDate.getFullYear();\n this.month = nextDate.getMonth();\n\n return;\n }\n\n // Next month/year with rerender\n if (lastDayOfMonth.getDate() === this.day) {\n const nextDate = addDate(lastDayOfMonth, 1, 'days');\n\n this.year = nextDate.getFullYear();\n this.month = nextDate.getMonth();\n this.day = nextDate.getDate();\n } else {\n // Just increase day without rerender\n this.day += 1;\n }\n }\n\n if (type === 'previous-day') {\n const firstDayOfMonth = firstDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n if (firstDayOfMonth.getDate() === this.day && limitMonth) return;\n\n if (this.localeAPI?.isIslamic()) {\n const prevDate = subtractDate(this.activeDate, 1, 'days');\n\n this.day = prevDate.getDate();\n this.year = prevDate.getFullYear();\n this.month = prevDate.getMonth();\n\n return;\n }\n\n // Previous month/year with rerender\n if (firstDayOfMonth.getDate() === this.day) {\n const prevDate = subtractDate(firstDayOfMonth, 1, 'days');\n\n this.year = prevDate.getFullYear();\n this.month = prevDate.getMonth();\n this.day = prevDate.getDate();\n } else {\n // Just decrease day without rerender\n this.day -= 1;\n }\n }\n\n if (type === 'next-year') {\n if (this.localeAPI?.isIslamic()) {\n const umalqura = gregorianToUmalqura(this.activeDate);\n const gregorian = umalquraToGregorian(\n umalqura.year + 1,\n umalqura.month,\n umalqura.day === 30 ? 1 : umalqura.day\n );\n\n this.day = gregorian.getDate();\n this.month = gregorian.getMonth();\n this.year = gregorian.getFullYear();\n } else {\n const y = this.year + 1;\n this.year = y;\n this.day = this.#getDayInMonth(this.day);\n }\n }\n\n if (type === 'previous-year') {\n if (this.localeAPI?.isIslamic()) {\n const umalqura = gregorianToUmalqura(this.activeDate);\n const gregorian = umalquraToGregorian(\n umalqura.year - 1,\n umalqura.month,\n umalqura.day === 30 ? 1 : umalqura.day\n );\n\n this.day = gregorian.getDate();\n this.month = gregorian.getMonth();\n this.year = gregorian.getFullYear();\n } else {\n const y = this.year - 1;\n this.year = y;\n this.day = this.#getDayInMonth(this.day);\n }\n }\n\n if (type === 'today') {\n const now = new Date();\n\n this.day = now.getDate();\n this.year = now.getFullYear();\n this.month = now.getMonth();\n\n if (this.useRange) {\n this.rangeSettings.start = now.getTime();\n this.rangeSettings.end = now.getTime();\n }\n this.focus();\n }\n\n if (type === 'next-week') {\n const nextWeek = addDate(this.activeDate, WEEK_LENGTH, 'days');\n const lastDayOfMonth = lastDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n if (nextWeek > lastDayOfMonth && limitMonth) return;\n\n this.day = nextWeek.getDate();\n\n if (nextWeek > lastDayOfMonth || this.localeAPI?.isIslamic()) {\n this.year = nextWeek.getFullYear();\n this.month = nextWeek.getMonth();\n }\n }\n\n if (type === 'previous-week') {\n const prevWeek = subtractDate(this.activeDate, WEEK_LENGTH, 'days');\n const firstDayOfMonth = firstDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n if (prevWeek < firstDayOfMonth && limitMonth) return;\n\n this.day = prevWeek.getDate();\n\n if (prevWeek < firstDayOfMonth || this.localeAPI?.isIslamic()) {\n this.year = prevWeek.getFullYear();\n this.month = prevWeek.getMonth();\n }\n }\n\n if (type === 'start-month') {\n const firstDayOfMonth = firstDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n this.day = firstDayOfMonth.getDate();\n\n if (this.localeAPI?.isIslamic()) {\n this.year = firstDayOfMonth.getFullYear();\n this.month = firstDayOfMonth.getMonth();\n }\n }\n\n if (type === 'end-month') {\n const lastDayOfMonth = lastDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n this.day = lastDayOfMonth.getDate();\n\n if (this.localeAPI?.isIslamic()) {\n this.month = lastDayOfMonth.getMonth();\n this.year = lastDayOfMonth.getFullYear();\n }\n }\n\n this.triggerDateChange(this.activeDate, type);\n }\n\n /**\n * Day cell clicked\n * @param {HTMLElement} element The element.\n */\n #daySelectClick(element: null | HTMLElement): void {\n if (!element) return;\n\n const { month, year, day }: any = element.dataset;\n const isDisabled = element.classList.contains('is-disabled');\n\n if (!isDisabled) {\n this.#setRangeSelection(year, month, day);\n\n this.day = day;\n\n if (stringToNumber(month) !== this.month || this.localeAPI?.isIslamic()) {\n this.month = month;\n }\n\n if (stringToNumber(year) !== this.year || this.localeAPI?.isIslamic()) {\n this.year = year;\n }\n\n this.focus();\n if (!this.showApply) this.#triggerSelectedEvent();\n }\n }\n\n /**\n * Add given year, month, day to the range selection\n * @param {number} year to add to the range selection\n * @param {number} month to add to the range selection\n * @param {number} day to add to the range selection\n */\n #setRangeSelection(year: number, month: number, day: number | undefined): void {\n if (!this.useRange) return;\n\n const date = new Date(year, month, day);\n const dateTime = date.getTime();\n const diff = this.rangeSettings.start ? daysDiff(this.rangeSettings.start, date) : 0;\n const rangeStarted = this.rangeSettings.start && !this.rangeSettings.end;\n const canSelectBoth = !(this.rangeSettings.selectBackward || this.rangeSettings.selectForward);\n const selectBackward = this.rangeSettings.selectBackward && diff < 0;\n const selectForward = this.rangeSettings.selectForward && diff > 0;\n const startDate = new Date(this.rangeSettings.start as string);\n const startTime = startDate.getTime();\n const minDays = this.rangeSettings.minDays;\n const maxDays = this.rangeSettings.maxDays;\n const minRangeExceeded = (minDays as number) > 0 && Math.abs(diff) < (minDays as number);\n const maxRangeExceeded = (maxDays as number) > 0 && Math.abs(diff) > (maxDays as number);\n const minRangeDate = diff >= 0\n ? addDate(startDate, (minDays as number), 'days')\n : subtractDate(startDate, (minDays as number), 'days');\n\n this.selectDay(year, month, day);\n\n if (this.rangeSettings.selectWeek) {\n return;\n }\n\n // Start is set\n if (rangeStarted && !maxRangeExceeded && (canSelectBoth || selectBackward || selectForward)) {\n if (minRangeExceeded) {\n this.rangeSettings.end = dateTime >= startTime ? minRangeDate.getTime() : this.rangeSettings.start;\n this.rangeSettings.start = subtractDate(this.rangeSettings.end, (minDays as number), 'days');\n\n this.#renderRangeSelection();\n\n return;\n }\n\n this.rangeSettings.end = dateTime >= startTime ? dateTime : this.rangeSettings.start;\n this.rangeSettings.start = dateTime <= startTime ? dateTime : this.rangeSettings.start;\n\n this.#renderRangeSelection();\n // Start not set or both not set\n } else {\n this.rangeSettings.start = dateTime;\n this.rangeSettings.end = null;\n\n this.#clearRangeClasses();\n }\n }\n\n /**\n * Helper to clear range selection CSS classes\n */\n #clearRangeClasses(): void {\n this.container?.querySelectorAll('td')\n .forEach(\n (item: HTMLElement) => item.classList.remove(\n 'range-next',\n 'range-prev',\n 'range-selection',\n 'not-included'\n )\n );\n }\n\n /**\n * Add CSS classes and selected attrs to tables cells when range selection is completed\n */\n #renderRangeSelection(): void {\n if (!this.useRange) return;\n const startRange = new Date(this.rangeSettings.start);\n const endRange = new Date(this.rangeSettings.end);\n const days = this.rangeSettings.end ? daysDiff(startRange, endRange) : 0;\n\n this.#clearRangeClasses();\n\n Array.from({ length: days + 1 }).forEach((_, index) => {\n const rangeDay = addDate(startRange, index, 'days');\n const selectedQuery = [\n 'td',\n `[data-year=\"${rangeDay.getFullYear()}\"]`,\n `[data-month=\"${rangeDay.getMonth()}\"]`,\n `[data-day=\"${rangeDay.getDate()}\"]`\n ].join('');\n const element = this.container?.querySelector(selectedQuery);\n\n element?.classList.add('range-selection');\n\n if (!this.rangeSettings.includeDisabled) {\n element?.classList.add('not-included');\n }\n\n if ((index === 0 || index === days) && !this.rangeSettings.selectWeek) {\n element?.setAttribute('aria-selected', 'true');\n element?.setAttribute('role', 'gridcell');\n element?.classList.add('is-selected');\n }\n });\n }\n\n /**\n * Helper to check if date is in the range selection\n * @param {Date} date to check if is in range selection\n * @returns {boolean} whether the date is in range selection\n */\n #isRangeByDate(date: Date): boolean {\n const startRange = new Date(this.rangeSettings.start);\n const endRange = new Date(this.rangeSettings.end);\n\n return date.getTime() >= startRange.getTime()\n && date.getTime() <= endRange.getTime();\n }\n\n /**\n * Helper to handle week selection\n * @param {string|number} year to add to the range selection\n * @param {string|number} month to add to the range selection\n * @param {string|number} day to add to the range selection\n */\n #rangeSelectWeek(\n year: string | number | undefined,\n month: string | number | undefined,\n day: string | number | undefined\n ): void {\n const firstDayOfWeek: Date = firstDayOfWeekDate(\n new Date(year as number, month as number, day as number),\n this.firstDayOfWeek\n );\n\n if (firstDayOfWeek.getTime() !== this.rangeSettings.start?.getTime()) {\n this.rangeSettings.start = firstDayOfWeek;\n this.rangeSettings.end = addDate(this.rangeSettings.start, WEEK_LENGTH - 1, 'days');\n\n this.selectDay();\n this.#renderRangeSelection();\n }\n }\n\n /**\n * Add CSS classes to table cells when range selection is in progress\n * Starting from the range settings start\n * @param {string|number} year to add to the range selection\n * @param {string|number} month to add to the range selection\n * @param {string|number} day to add to the range selection\n */\n #rangePropagation(\n year: string | number | undefined,\n month: string | number | undefined,\n day: string | number | undefined\n ): void {\n if (!this.useRange) return;\n\n if (this.rangeSettings.selectWeek) {\n this.#rangeSelectWeek(year, month, day);\n\n return;\n }\n\n if (this.rangeSettings.start && !(this.rangeSettings.end && this.rangeSettings.start)) {\n const startRange = new Date(this.rangeSettings.start);\n const endRange = new Date(year as number, month as number, day as number);\n const diff = daysDiff(startRange, endRange);\n\n this.#clearRangeClasses();\n\n const canSelectBoth = !(this.rangeSettings.selectBackward || this.rangeSettings.selectForward);\n const selectBackward = this.rangeSettings.selectBackward && diff < 0;\n const selectForward = this.rangeSettings.selectForward && diff > 0;\n const maxDays = this.rangeSettings.maxDays;\n const maxRangeExceeded = (maxDays as number) > 0 && Math.abs(diff) > (maxDays as number);\n\n if (diff !== 0 && !maxRangeExceeded && (canSelectBoth || selectBackward || selectForward)) {\n Array.from({ length: Math.abs(diff) }).forEach((_, index) => {\n const rangeDay = diff > 0\n ? addDate(startRange, index + 1, 'days')\n : subtractDate(startRange, index + 1, 'days');\n const selectedQuery = [\n 'td',\n `[data-year=\"${rangeDay.getFullYear()}\"]`,\n `[data-month=\"${rangeDay.getMonth()}\"]`,\n `[data-day=\"${rangeDay.getDate()}\"]`\n ].join('');\n\n this.container?.querySelector(selectedQuery)\n ?.classList.add(diff > 0 ? 'range-next' : 'range-prev');\n\n if (!this.rangeSettings.includeDisabled) {\n this.container?.querySelector(selectedQuery)?.classList.add('not-included');\n }\n });\n }\n }\n }\n\n /**\n * Defines if a date is in disabled settings\n * @param {Date} date to check\n * @returns {boolean} wheter or not the date is disabled\n */\n isDisabledByDate(date: Date): boolean {\n const {\n years,\n dayOfWeek,\n dates,\n minDate,\n maxDate,\n isEnable\n }: IdsDisableSettings = this.disableSettings;\n\n const isOutOfDisplayRange: boolean = this.#isDisplayRange()\n && (date < (this.startDate as Date) || date > (this.endDate as Date));\n const ifYear: boolean = (years as Array<number>).some(\n (item: number) => item === date?.getFullYear()\n );\n const ifDayOfWeek: boolean = (dayOfWeek as Array<number>).some(\n (item: number) => item === date?.getDay()\n );\n const ifDates: boolean = (dates as Array<string>).some(\n (item: string) => (new Date(item))?.getTime() === date?.getTime()\n );\n const ifMinMaxDate: boolean = date <= new Date(minDate as string) || date >= new Date(maxDate as string);\n const ifBySettings: boolean = ifYear || ifDayOfWeek || ifDates || ifMinMaxDate;\n const withReverse: boolean = isEnable ? !ifBySettings : ifBySettings;\n\n return withReverse || isOutOfDisplayRange;\n }\n\n /**\n * Helper to get month format for first day of a month or first day of the display range\n * @param {Date} date date to check\n * @param {Date} rangeStartsOn very first day of the display range\n * @returns {string|undefined} Intl.DateTimeFormat options month format (numeric, long, short)\n */\n #monthInDayFormat(date: Date, rangeStartsOn: Date): string | undefined {\n const isFirstDayOfRange = daysDiff(date, rangeStartsOn) === 0;\n const isFirstDayOfMonth = this.localeAPI?.isIslamic()\n ? gregorianToUmalqura(date).day === 1\n : date.getDate() === 1;\n\n if (this.#isDisplayRange() && (isFirstDayOfRange || isFirstDayOfMonth)) {\n return 'short';\n }\n\n return undefined;\n }\n\n /**\n * Table cell HTML template with locale, data attributes\n * @param {number} weekIndex number of week in month starting from 0\n * @returns {string} table cell HTML template\n */\n #getCellTemplate(weekIndex: number): string {\n const firstDayOfRange: Date = this.#isDisplayRange()\n ? (this.startDate as Date)\n : firstDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n const lastDayOfRange: Date = this.#isDisplayRange()\n ? (this.endDate as Date)\n : lastDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n const rangeStartsOn = firstDayOfWeekDate(firstDayOfRange, this.firstDayOfWeek);\n const firstDayOfWeek = addDate(rangeStartsOn, (weekIndex * WEEK_LENGTH), 'days');\n const now: Date = new Date();\n const isCompact = this.compact;\n\n const dayCells = Array.from({ length: WEEK_LENGTH }).map((_, index) => {\n const date: Date = addDate(rangeStartsOn, (weekIndex * WEEK_LENGTH) + index, 'days');\n const monthFormat: string | undefined = this.#monthInDayFormat(date, rangeStartsOn);\n const dayText: string = this.localeAPI?.formatDate(date, {\n day: 'numeric',\n month: monthFormat,\n numberingSystem: 'latn'\n });\n const ariaLabel: string = this.localeAPI?.formatDate(date, { dateStyle: 'full' });\n const day: number = date.getDate();\n const month: number = date.getMonth();\n const year: number = date.getFullYear();\n const dateMatch: boolean = day === this.day && year === this.year && month === this.month;\n const isSelected: boolean = !this.useRange && dateMatch;\n const isSelectedWithRange: boolean = this.useRange && !this.rangeSettings.start && dateMatch;\n const isDisabled: boolean = this.isDisabledByDate(date);\n const isAlternate: boolean = !this.#isDisplayRange() && (date < firstDayOfRange || date > lastDayOfRange);\n const legend: any = this.getLegendByDate(date);\n const isRangeSelection: boolean = this.#isRangeByDate(date);\n const isToday: boolean = year === now.getFullYear() && month === now.getMonth() && day === now.getDate();\n const classAttr: string = buildClassAttrib(\n isAlternate && 'alternate',\n legend && 'has-legend',\n isDisabled && 'is-disabled',\n (isSelected || isSelectedWithRange) && 'is-selected',\n monthFormat && 'month-label',\n isRangeSelection && 'range-selection',\n isToday && 'is-today'\n );\n const selectedAttr: string = isSelected || isSelectedWithRange\n ? 'aria-selected=\"true\" tabindex=\"0\" role=\"gridcell\"' : 'role=\"link\"';\n const dataAttr: string = [`data-year=\"${year}\"`, `data-month=\"${month}\"`, `data-day=\"${day}\"`].join(' ');\n const colorAttr: string = legend ? `data-color=\"${legend.color}\"` : '';\n const dateKey = this.generateDateKey(new Date(year, month, day));\n\n let cellTemplate = `<td aria-label=\"${ariaLabel}\" ${dataAttr} ${classAttr} ${selectedAttr} ${colorAttr}>\n <span class=\"day-container\">\n <ids-text\n aria-hidden=\"true\"\n class=\"day-text\"\n font-size=\"14\"\n >${dayText}</ids-text>\n </span>\n ${isCompact ? '' : `<div class=\"events-container\" data-key=\"${dateKey}\"></div>`}\n </td>`;\n if (typeof this.state.onDayRender === 'function') {\n cellTemplate = this.state.onDayRender(cellTemplate, dateKey);\n }\n return cellTemplate;\n }).join('');\n\n // Week number cell if enabled\n const weekNumCell = `<td class=\"week-num-cell\">\n <ids-text class=\"week-num-text\" font-size=\"14\">${weekNumber(firstDayOfWeek, this.firstDayOfWeek)}</ids-text>\n </td>`;\n const weekNumCellTemplate = this.showWeekNumbers ? weekNumCell : '';\n\n return `${weekNumCellTemplate}${dayCells}`;\n }\n\n /**\n * Add week days HTML to the table\n */\n #renderWeekDays(): void {\n const weekDayKeys = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n const weekDays = weekDayKeys.map((item) => this.localeAPI?.translate(`${this.compact ? 'DayNarrow' : 'DayAbbreviated'}${item}`));\n const weekDaysWide = weekDayKeys.map((item) => this.localeAPI?.translate(`DayWide${item}`));\n\n // Week number header if enabled\n const weekNumHeader = `<th scope=\"col\" class=\"week-num-cell\">\n <ids-text class=\"week-num-text\" font-size=\"14\">W#</ids-text>\n </th>`;\n let weekDaysTemplate = this.showWeekNumbers ? weekNumHeader : '';\n\n weekDaysTemplate += weekDays.map((el: any, index: number) => {\n const idx = (index + this.firstDayOfWeek) % WEEK_LENGTH;\n const weekday = weekDays[idx];\n const weekdaywide = weekDaysWide[idx];\n\n return `\n <th scope=\"col\" abbr=\"${weekdaywide}\">\n <ids-text\n class=\"weekday-text\"\n font-size=\"14\"\n >${weekday}</ids-text>\n </th>\n `;\n }).join('');\n\n // Clear/add HTML\n this.container?.querySelectorAll('thead th').forEach((el: Element) => el.remove());\n this.container?.querySelector('thead tr')?.insertAdjacentHTML('beforeend', weekDaysTemplate);\n }\n\n /**\n * Add month HTML to the table\n */\n #renderMonth(): void {\n const weeksCount = this.#isDisplayRange()\n ? weeksInRange(this.startDate, this.endDate, this.firstDayOfWeek)\n : weeksInMonth(this.year, this.month, this.day, this.firstDayOfWeek, this.localeAPI?.isIslamic());\n this.triggerEvent('beforerendermonth', this, {\n bubbles: true,\n detail: { elem: this }\n });\n\n const rowsTemplate = Array.from({ length: weeksCount }).map((_, weekIndex) => `<tr>${this.#getCellTemplate(weekIndex)}</tr>`).join('');\n\n // Clear/add HTML\n this.container?.querySelectorAll('tbody tr').forEach((el: Element) => el.remove());\n this.container?.querySelector('tbody')?.insertAdjacentHTML('beforeend', rowsTemplate);\n\n this.#renderWeekDays();\n this.#colorToVar();\n this.state.hasRendered = true;\n\n if (!this.compact && !this.isDatePicker) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.renderEventsData();\n }\n\n this.#lastRenderedYear = this.year;\n this.#lastRenderedMonth = this.month;\n this.#lastRenderedDay = this.day;\n this.#lastRenderedFirstDayOfWeek = this.firstDayOfWeek;\n\n this.triggerEvent('afterrendermonth', this, {\n bubbles: true,\n detail: { elem: this }\n });\n }\n\n /**\n * Gets calendar events within the selected/active day\n * @returns {CalendarEventData[]} calendar events data\n */\n getActiveDayEvents(): CalendarEventData[] {\n const activeDay = this.getSelectedDay();\n let eventElems = activeDay ? [...activeDay.querySelectorAll('ids-calendar-event')] : [];\n if (this.#isCustom && activeDay) {\n const customCalendarEvents: any = activeDay.querySelectorAll('.events-container > [slot]');\n eventElems = activeDay ? [...customCalendarEvents] : [];\n }\n const events = eventElems.map((elem: any) => elem.eventData);\n\n return events;\n }\n\n /**\n * Trigger selected event with current params\n * @returns {void}\n */\n #triggerSelectedEvent(): void {\n if (this.isDisabledByDate(this.activeDate)) {\n return;\n }\n\n const args: IdsDayselectedEvent = {\n detail: {\n elem: this,\n date: this.activeDate,\n useRange: this.useRange,\n rangeStart: this.useRange && this.rangeSettings.start ? new Date(this.rangeSettings.start) : null,\n rangeEnd: this.useRange && this.rangeSettings.end ? new Date(this.rangeSettings.end) : null,\n value: this.getFormattedDate(this.activeDate)\n },\n bubbles: true,\n cancelable: true,\n composed: true\n };\n\n // For full-sized non datepicker month view\n if (!this.compact && !this.isDatePicker) {\n args.detail.events = this.getActiveDayEvents();\n }\n\n this.triggerEvent('dayselected', this, args);\n }\n\n /**\n * Add selectable attribute to active day\n * @param {number} year a given year\n * @param {number} month a given month\n * @param {number} day a given day\n */\n selectDay(year?: any, month?: any, day?: any): void {\n // Clear before\n this.#makeAllDeselected();\n const selectedQuery = `td[data-year=\"${year}\"][data-month=\"${month}\"][data-day=\"${day}\"]`;\n const selected = this.container?.querySelector<HTMLTableCellElement>(selectedQuery);\n if (selected) this.#makeSelected(selected);\n }\n\n /**\n * Makes a specified day in the Month View table appear \"selected\"\n * @param {HTMLTableCellElement} elem the element to make appear \"selected\"\n * @returns {void}\n */\n #makeSelected(elem: HTMLTableCellElement): void {\n if (!elem) return;\n elem.setAttribute(attributes.TABINDEX, '0');\n elem.setAttribute('aria-selected', 'true');\n elem.setAttribute('role', 'gridcell');\n elem.classList.add('is-selected');\n }\n\n /**\n * Makes a specified day in the Month View table appear \"selected\"\n * @param {HTMLTableCellElement} elem the element to make appear \"selected\"\n * @returns {void}\n */\n #makeDeselected(elem: HTMLTableCellElement): void {\n if (!elem) return;\n elem.removeAttribute(attributes.TABINDEX);\n elem.removeAttribute('aria-selected');\n elem.setAttribute('role', 'link');\n elem.classList.remove('is-selected');\n }\n\n /**\n * Clears all previously-selected days from the Month View\n */\n #makeAllDeselected(): void {\n this.container?.querySelectorAll<HTMLTableCellElement>('td.is-selected')?.forEach((item: HTMLTableCellElement) => {\n this.#makeDeselected(item);\n });\n }\n\n /**\n * Whether or not it should show range of dates instead of one month view\n * @returns {boolean} startDate and endDate are set\n */\n #isDisplayRange(): boolean {\n return isValidDate(this.startDate)\n && isValidDate(this.endDate)\n && (this.endDate as Date) >= (this.startDate as Date);\n }\n\n /**\n * Helper to check if the month has a day\n * @param {number} day to check\n * @returns {number} day of the month either active or first\n */\n #getDayInMonth(day: number): number {\n const numberOfDays = daysInMonth(this.year, this.month);\n\n return day > numberOfDays ? 1 : day;\n }\n\n /**\n * Iterate legend items with color data and add color css variable\n */\n #colorToVar(): void {\n this.container?.querySelectorAll('[data-color]')\n .forEach((el: any) => {\n const color = el.dataset.color;\n const isHex = color?.includes('#');\n\n if (color) {\n el.style = `--legend-color: ${isHex ? color : `var(--ids-color-${color})`}`;\n }\n });\n }\n\n /**\n * Queries selected day cell element\n * @returns {HTMLElement} selected day\n */\n getSelectedDay(): HTMLTableCellElement | null {\n const selectedQuery = `td[data-year=\"${this.year}\"][data-month=\"${this.month}\"][data-day=\"${this.day}\"]`;\n return this.container?.querySelector(selectedQuery) || null;\n }\n\n /**\n * Focuses the active/selected day\n * @returns {void}\n */\n focus(): void {\n const selectedDay = this.getSelectedDay();\n if (selectedDay) {\n const isDisabled = selectedDay.classList.contains('is-disabled');\n if (!isDisabled) {\n this.#makeAllDeselected();\n this.#makeSelected(selectedDay);\n setTimeout(() => selectedDay.focus(), 10);\n }\n }\n }\n\n /**\n * Inherited from `IdsDateAttributeMixin`\n * @returns {void}\n */\n onFirstDayOfWeekChange() {\n if (this.container && this.firstDayOfWeek !== this.#lastRenderedFirstDayOfWeek) {\n this.#renderMonth();\n }\n }\n\n /**\n * Inherited from `IdsDateAttributeMixin`\n * @returns {void}\n */\n onMonthChange() {\n if (!this.container) return;\n\n // Month change in range calendar doesn't trigger a rerender, just selects a day\n if (this.#isDisplayRange()) {\n this.selectDay(this.year, this.month, this.day);\n } else if (this.month !== this.#lastRenderedMonth) {\n this.#renderMonth();\n this.#renderRangeSelection();\n }\n }\n\n /**\n * Inherited from `IdsDateAttributeMixin`\n * @returns {void}\n */\n onYearChange() {\n if (!this.container) return;\n\n // Year change in range calendar doesn't trigger a rerender, just selects a day\n if (this.#isDisplayRange()) {\n this.selectDay(this.year, this.month, this.day);\n } else if (this.year !== this.#lastRenderedYear) {\n this.#renderMonth();\n this.#renderRangeSelection();\n }\n }\n\n /**\n * Inherited from `IdsDateAttributeMixin`\n * @param {number} numberVal new value\n * @param {boolean} validates true if the new value passed is valid\n * @returns {void}\n */\n onDayChange(numberVal: number, validates: boolean) {\n if (!this.container || this.day === this.#lastRenderedDay) return;\n\n if (!(this.rangeSettings.start || this.useRange) && !this.isDatePicker) {\n this.selectDay(this.year, this.month, validates ? numberVal : this.day);\n }\n }\n\n /**\n * start-date attribute\n * @returns {Date | null} startDate date parsed from attribute value\n */\n get startDate(): Date | null {\n const attrVal = this.getAttribute(attributes.START_DATE) ?? '';\n const attrDate = new Date(attrVal);\n\n if (attrVal && isValidDate(attrDate)) {\n return attrDate;\n }\n\n return null;\n }\n\n /**\n * Set start of the range to show\n * @param {string | Date | null} val startDate param value\n */\n set startDate(val: string | Date | null) {\n if (val) {\n this.setAttribute(attributes.START_DATE, String(val));\n } else {\n this.removeAttribute(attributes.START_DATE);\n }\n\n if (this.container) {\n this.#renderMonth();\n this.#attachKeyboardListeners();\n }\n }\n\n /**\n * end-date attribute\n * @returns {Date|null} endDate date parsed from attribute value\n */\n get endDate(): Date | null {\n const attrVal = this.getAttribute(attributes.END_DATE) ?? '';\n const attrDate = new Date(attrVal);\n\n if (attrVal && isValidDate(attrDate)) {\n return attrDate;\n }\n\n return null;\n }\n\n /**\n * Set end of the range to show\n * @param {Date | string | null} val endDate param value\n */\n set endDate(val: Date | string | null) {\n if (val) {\n this.setAttribute(attributes.END_DATE, String(val));\n } else {\n this.removeAttribute(attributes.END_DATE);\n }\n\n if (this.container) {\n this.#renderMonth();\n this.#attachKeyboardListeners();\n }\n }\n\n /**\n * compact attribute\n * @returns {boolean} compact param converted to boolean from attribute value\n */\n get compact(): boolean {\n const attrVal = this.getAttribute(attributes.COMPACT);\n\n return stringToBool(attrVal);\n }\n\n /**\n * Set whether or not the component should be compact view\n * @param {string|boolean|null} val compact param value\n */\n set compact(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n\n if (boolVal) {\n this.setAttribute(attributes.COMPACT, 'true');\n } else {\n this.removeAttribute(attributes.COMPACT);\n }\n\n // Toggle container CSS class\n this.container?.classList.toggle('is-fullsize', !boolVal);\n this.container?.classList.toggle('is-compact', boolVal);\n\n if (this.container) {\n // Render related views\n this.#renderWeekDays();\n }\n }\n\n /**\n * show-apply attribute\n * @returns {boolean} showCancel param converted to boolean from attribute value\n */\n get showApply(): boolean {\n return stringToBool(this.getAttribute(attributes.SHOW_APPLY));\n }\n\n /**\n * Set whether or not to show cancel button when the picker is expanded\n * @param {string|boolean|null} val show-cancel attribute value\n */\n set showApply(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n if (boolVal) {\n this.setAttribute(attributes.SHOW_APPLY, 'true');\n } else {\n this.removeAttribute(attributes.SHOW_APPLY);\n }\n }\n\n set showWeekNumbers(val: boolean | null) {\n if (stringToBool(val)) {\n this.setAttribute(attributes.SHOW_WEEK_NUMBERS, '');\n } else {\n this.removeAttribute(attributes.SHOW_WEEK_NUMBERS);\n }\n }\n\n get showWeekNumbers(): boolean {\n return stringToBool(this.getAttribute(attributes.SHOW_WEEK_NUMBERS));\n }\n\n /**\n * is-date-picker attribute\n * @returns {boolean} isDatePicker param converted to boolean from attribute value\n */\n get isDatePicker(): boolean {\n const attrVal = this.getAttribute(attributes.IS_DATEPICKER);\n\n return stringToBool(attrVal);\n }\n\n /**\n * Set whether or not the component is used in datepicker popup\n * @param {string|boolean|null} val compact param value\n */\n set isDatePicker(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n\n if (boolVal) {\n this.setAttribute(attributes.IS_DATEPICKER, 'true');\n } else {\n this.removeAttribute(attributes.IS_DATEPICKER);\n }\n\n // Toggle container CSS class\n this.container?.classList.toggle('is-date-picker', boolVal);\n }\n\n onDisableSettingsChange() {\n this.#renderMonth();\n }\n\n onLegendSettingsChange(val: IdsLegendSettings) {\n if (!this.container) return;\n\n this.#renderMonth();\n this.#renderLegend();\n this.container.classList[val && val.length ? 'add' : 'remove']('has-legend');\n }\n\n onRangeSettingsChange(val: IdsRangeSettings) {\n if (!this.container) return;\n\n if (this.useRange && val?.start) {\n this.selectDay();\n } else {\n this.year = this.#lastRenderedYear;\n this.month = this.#lastRenderedMonth;\n this.day = this.#lastRenderedDay;\n\n this.#clearRangeClasses();\n this.selectDay(this.year, this.month, this.day);\n }\n\n this.container.classList.toggle('range-select-week', this.rangeSettings.selectWeek);\n this.#renderMonth();\n this.#renderRangeSelection();\n }\n\n onUseRangeChange(newValue: boolean) {\n if (newValue) {\n this.selectDay();\n this.#renderRangeSelection();\n } else {\n this.#clearRangeClasses();\n this.selectDay(this.year, this.month, this.day);\n }\n }\n\n /**\n * show-picklist-year attribute, default is true\n * @returns {boolean} showPicklistYear param converted to boolean from attribute value\n */\n get showPicklistYear(): boolean {\n const attrVal = this.getAttribute(attributes.SHOW_PICKLIST_YEAR);\n\n if (attrVal) {\n return stringToBool(attrVal);\n }\n\n return true;\n }\n\n /**\n * Whether or not to show a list of years in the toolbar datepicker picklist\n * @param {string | boolean | null} val value to be set as show-picklist-year attribute converted to boolean\n */\n set showPicklistYear(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n\n this.setAttribute(attributes.SHOW_PICKLIST_YEAR, String(boolVal));\n }\n\n /**\n * show-picklist-month attribute, default is true\n * @returns {boolean} showPicklistMonth param converted to boolean from attribute value\n */\n get showPicklistMonth(): boolean {\n const attrVal = this.getAttribute(attributes.SHOW_PICKLIST_MONTH);\n\n if (attrVal) {\n return stringToBool(attrVal);\n }\n\n return true;\n }\n\n /**\n * Whether or not to show a list of months in the toolbar datepicker picklist\n * @param {string | boolean | null} val value to be set as show-picklist-month attribute converted to boolean\n */\n set showPicklistMonth(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n\n this.setAttribute(attributes.SHOW_PICKLIST_MONTH, String(boolVal));\n }\n\n /**\n * show-picklist-week attribute\n * @returns {boolean} showPicklistWeek param converted to boolean from attribute value\n */\n get showPicklistWeek(): boolean {\n return stringToBool(this.getAttribute(attributes.SHOW_PICKLIST_WEEK));\n }\n\n /**\n * Whether or not to show week numbers in the toolbar datepicker picklist\n * @param {string | boolean | null} val value to be set as show-picklist-week attribute converted to boolean\n */\n set showPicklistWeek(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n\n if (boolVal) {\n this.setAttribute(attributes.SHOW_PICKLIST_WEEK, 'true');\n } else {\n this.removeAttribute(attributes.SHOW_PICKLIST_WEEK);\n }\n }\n\n /**\n * Remove month view calendar events and overflow elements\n */\n removeAllEvents(): void {\n this.container\n ?.querySelectorAll('.events-container')\n .forEach((container: Element) => { container.innerHTML = ''; });\n }\n\n /**\n * Groups calendar events by day using dateKey as key\n * @param {CalendarEventData[]} events calendar events data\n * @returns {Record<string, Array<CalendarEventData>>} collection of calendar events\n */\n #groupEventsByDay(events: CalendarEventData[]): Record<string, Array<CalendarEventData>> {\n const dayEvents: Record<string, Array<CalendarEventData>> = {};\n\n events.forEach((event: CalendarEventData) => {\n const dateKey = this.generateDateKey(new Date(event.starts)).toString();\n if (!dayEvents[dateKey]) dayEvents[dateKey] = [];\n dayEvents[dateKey].push(event);\n });\n\n return dayEvents;\n }\n\n /**\n * Filter calendar events data by current month\n * @param {CalendarEventData[]} data calendar events data\n * @returns {CalendarEventData[]} calendar events within month\n */\n filterEventsByMonth(data: CalendarEventData[] = []): CalendarEventData[] {\n return data.filter((event) => {\n const eventStart = new Date(event.starts);\n return this.startDate && this.endDate ? this.startDate <= eventStart && eventStart < this.endDate\n : eventStart.getMonth() === this.month && eventStart.getFullYear() === this.year;\n });\n }\n\n /**\n * Render Calendar Events data inside month view\n * @param {boolean} forceRender skip data fetch\n */\n async renderEventsData(forceRender = false): Promise<void> {\n if (!forceRender && typeof this.state.beforeEventsRender === 'function') {\n const startDate = this.startDate || new Date(this.year, this.month, 1);\n const endDate = this.endDate || new Date(this.year, this.month + 1, 0);\n this.eventsData = await this.state.beforeEventsRender(startDate, endDate);\n return;\n }\n\n this.removeAllEvents();\n\n if (!this.state.hasRendered || !this.eventsData?.length) return;\n\n const eventsInRange = this.filterEventsByMonth(this.eventsData);\n const monthEvents = this.#groupEventsByDay(eventsInRange);\n\n const customCalendarEvent: any = this.querySelector('[slot=\"customCalendarEvent\"]');\n for (const dateKey in monthEvents) {\n if (monthEvents.hasOwnProperty(dateKey)) {\n this.#renderDayEvents(dateKey, monthEvents[dateKey], customCalendarEvent);\n }\n }\n\n this.triggerEvent('eventsrendered', this, {\n detail: { eventsData: eventsInRange },\n bubbles: true,\n composed: true\n });\n }\n\n /**\n * Counts number of days for calendar events\n * @param {Date} start start date\n * @param {Date} end end date\n * @returns {number} days\n */\n #countDays(start: Date, end: Date): number {\n return Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));\n }\n\n /**\n * Renders calendar events within corresponding date's table cell\n * @param {string} dateKey generated date key\n * @param {CalendarEventData[]} events calendar events\n * @param {any} customCalendarEvent custom calendar events\n */\n #renderDayEvents(dateKey: string, events: CalendarEventData[], customCalendarEvent?: any): void {\n if (!this.container) return;\n\n const eventsContainer = this.container?.querySelector(`.events-container[data-key=\"${dateKey}\"]`);\n const orders = [...(eventsContainer?.childNodes) || []].map((elem: any) => elem.order);\n const baseOrder = orders.length ? Math.max(...orders) + 1 : 0;\n let isOverflowing = false;\n events.forEach((event: CalendarEventData, index: number) => {\n const start = new Date(event.starts);\n const end = new Date(event.ends);\n const days = this.#countDays(start, end) || 1;\n\n for (let i = 0; i < days; i++) {\n const calendarEvent = this.#newCalendarEvent(customCalendarEvent);\n const eventType = this.eventTypesData?.find((et: CalendarEventTypeData) => et.id === event.type) ?? null;\n const eventOrder = baseOrder + index;\n calendarEvent.eventTypeData = eventType;\n calendarEvent.eventData = event;\n calendarEvent.cssClass = ['is-month-view'];\n calendarEvent.order = eventOrder;\n\n if (i > 0) {\n start.setDate(start.getDate() + 1);\n }\n\n const day = start.getDate();\n const year = start.getFullYear();\n const month = start.getMonth();\n calendarEvent.dateKey = `${year}${month}${day}`;\n const dateCell = this.container?.querySelector(`td[data-year=\"${year}\"][data-month=\"${month}\"][data-day=\"${day}\"]`);\n calendarEvent.disabled = !!dateCell?.classList.contains('is-disabled');\n\n if (dateCell) {\n // multi day events\n if (days > 1) {\n const extraCss = ['all-day'];\n\n if (i === 0) {\n extraCss.push('calendar-event-start');\n } else if (i === days - 1) {\n extraCss.push('calendar-event-ends');\n } else {\n extraCss.push('calendar-event-continue');\n }\n\n calendarEvent.cssClass = extraCss;\n }\n\n const eventYOffset = this.generateYOffset(calendarEvent);\n calendarEvent.setAttribute(attributes.Y_OFFSET, `${eventYOffset}px`);\n // hide overflowing event\n isOverflowing = this.isEventOverflowing(calendarEvent);\n calendarEvent.hidden = isOverflowing;\n dateCell.querySelector('.events-container')?.appendChild(calendarEvent as any);\n\n const container = dateCell.querySelector('.events-container');\n this.triggerEvent('beforeeventrendered', this, {\n detail:\n {\n elem: this,\n events: this.eventsData,\n event: calendarEvent,\n dateCell: calendarEvent,\n container\n },\n bubbles: true\n });\n container?.appendChild(calendarEvent as any);\n this.triggerEvent('aftereventrendered', this, {\n detail:\n {\n elem: this,\n events: this.eventsData,\n event: calendarEvent,\n dateCell: calendarEvent,\n container\n },\n bubbles: true\n });\n }\n }\n });\n\n if (isOverflowing && eventsContainer) {\n this.#renderEventsOverflow(eventsContainer, dateKey);\n }\n }\n\n /**\n * Renders clickable event overflow element\n * Specifies number of calendar events overflowing the container\n * @param {Element} eventsContainer date specific event container elemeent\n * @param {string} dateKey generated date key\n */\n #renderEventsOverflow(eventsContainer: any, dateKey: string): void {\n if (!eventsContainer) return;\n\n const calendarEvents = [...eventsContainer.childNodes];\n const hiddenEvents = calendarEvents.filter((elem: IdsCalendarEvent) => elem.hidden);\n const year = dateKey.substring(0, 4);\n const month = parseInt(dateKey.substring(4, 6)) + 1;\n const day = dateKey.substring(6);\n const date = `${month}/${day}/${year}`;\n const tmpl = `\n <ids-text data-date=\"${date}\" class=\"events-overflow\" font-size=\"12\">\n ${hiddenEvents.length}+ ${this.localeAPI.translate('More')}\n </ids-text>\n `;\n\n eventsContainer.insertAdjacentHTML('beforeend', tmpl);\n }\n\n /**\n * Generates new IdsCalendarEvent\n * @param {IdsCalendarEvent} customCalendarEvent optional custom event to use instead of default\n * @returns {IdsCalendarEvent} calendar event\n */\n #newCalendarEvent(customCalendarEvent?: any): any {\n if (customCalendarEvent?.name === 'MonthViewCalendarEventTemplate') {\n const eventTemplate = customCalendarEvent.assignedNodes()[0];\n if (eventTemplate) {\n this.#isCustom = true;\n return eventTemplate.cloneNode(true);\n }\n }\n return new IdsCalendarEvent();\n }\n\n /**\n * Selects the Month View's current day from a stringified date\n * @param {string} val string representation of a date\n */\n selectDayFromValue(val: string) {\n let usableValue = val;\n if (this.useRange && this.rangeSettings.separator && this.rangeSettings.end) {\n usableValue = removeDateRange(val, this.rangeSettings.separator);\n }\n\n const { month, day, year } = getDateValuesFromString(usableValue);\n this.day = day;\n this.month = month;\n this.year = year;\n\n if (this.useRange) {\n this.selectDay();\n this.#renderRangeSelection();\n } else {\n this.#clearRangeClasses();\n this.selectDay(year, month, day);\n }\n }\n\n /**\n * Function that fires as the day cell is rendered.\n * @returns {Function} the function to call\n */\n public get onDayRender() {\n return this.state.onDayRender;\n }\n\n public set onDayRender(func) {\n this.state.onDayRender = func;\n }\n\n /**\n * Calculates the event Y_OFFSET value to set the event pill top position\n * @param {IdsCalendarEvent} event IdsCalendarEvent\n * @returns {number} yOffset\n */\n generateYOffset(event: IdsCalendarEvent): number {\n return (event.order * 16) + BASE_Y_OFFSET;\n }\n\n /**\n * Checks if the event pills exceed the MAX_EVENT_COUNT in a day cell\n * @param {IdsCalendarEvent} event IdsCalendarEvent\n * @returns {boolean} isEventOverflowing\n */\n isEventOverflowing(event: IdsCalendarEvent): boolean {\n return event.order > MAX_EVENT_COUNT - 1;\n }\n}\n\nexport default IdsMonthView;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAO,yBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
|
|
4
|
+
"sourcesContent": ["export default `.ids-month-view {\n display: flex;\n background-color: var(--ids-calendar-month-view-color-background-default);\n width: 100%;\n box-sizing: border-box;\n flex-direction: column;\n overflow: auto;\n max-width: inherit;\n}\n.ids-month-view .month-view-container {\n background-color: var(--ids-calendar-month-view-color-background-default);\n flex-shrink: 0;\n}\n.ids-month-view .month-view-table-header th {\n background-clip: padding-box;\n height: 30px;\n line-height: 30px;\n text-align: center;\n width: 14.3%;\n}\n.ids-month-view .month-view-table {\n width: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n}\n.ids-month-view .trigger-icon {\n color: var(--ids-color-blue-60);\n}\n.ids-month-view .month-view-legend {\n margin: 0 auto;\n padding: 10px 5px 0;\n}\n.ids-month-view .month-view-legend-swatch,\n.ids-month-view .month-view-legend-item,\n.ids-month-view .month-view-legend-text {\n display: inline-block;\n}\n.ids-month-view .month-view-legend-item {\n margin-bottom: 2px;\n}\n.ids-month-view .month-view-legend-swatch {\n background-color: var(--legend-color);\n opacity: 0.3;\n width: 16px;\n height: 16px;\n}\n.ids-month-view .month-view-legend-item.event-type .month-view-legend-swatch {\n border-radius: 10px;\n opacity: 1;\n width: 14px;\n height: 14px;\n}\n.ids-month-view .month-view-legend-text {\n position: relative;\n color: var(--ids-calendar-month-view-legend-color-text);\n padding: 0 10px 0 8px;\n top: -2px;\n}\n.ids-month-view .events-container {\n display: block;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n}\n.ids-month-view .events-container .events-overflow {\n position: absolute;\n bottom: 0;\n cursor: pointer;\n text-indent: 12px;\n}\n.ids-month-view .events-container ids-text::part(text) {\n text-transform: capitalize;\n}\n\n.ids-month-view.is-compact {\n position: relative;\n}\n.ids-month-view.is-compact .month-view-table-header th {\n line-height: unset;\n vertical-align: top;\n height: 22px;\n}\n.ids-month-view.is-compact .month-view-table {\n margin-top: 13px;\n}\n.ids-month-view.is-compact .weekday-text {\n color: var(--ids-calendar-month-view-weekday-color-text-compact);\n}\n.ids-month-view.is-compact td {\n width: 44px;\n height: 44px;\n text-align: center;\n}\n.ids-month-view.is-compact td:not(.is-disabled):hover {\n cursor: pointer;\n}\n.ids-month-view.is-compact td .day-container {\n display: inline-block;\n position: relative;\n border-radius: 50%;\n border: 1px solid transparent;\n margin: 5px 0;\n}\n.ids-month-view.is-compact td .day-text {\n display: inline-block;\n position: relative;\n z-index: 2;\n border-radius: 50%;\n margin: 2px;\n color: var(--ids-calendar-month-view-color-text-default);\n white-space: nowrap;\n transition: 0.2s background-color ease;\n}\n.ids-month-view.is-compact td.alternate .day-text {\n color: var(--ids-calendar-month-view-color-text-compact);\n}\n.ids-month-view.is-compact td.is-disabled .day-text {\n background-color: var(--ids-color-neutral-10);\n color: var(--ids-color-neutral-30);\n}\n.ids-month-view.is-compact td.is-disabled.has-legend .day-container::after {\n opacity: 0.4;\n}\n.ids-month-view.is-compact td.is-disabled.has-legend .day-text {\n background-color: transparent;\n}\n.ids-month-view.is-compact td ids-text::part(text) {\n border-radius: 50%;\n box-sizing: border-box;\n width: 35px;\n height: 35px;\n line-height: 35px;\n text-align: center;\n display: inline-block;\n}\n.ids-month-view.is-compact td:hover .day-text {\n color: var(--ids-calendar-month-view-weekday-color-text-compact-hover);\n}\n.ids-month-view.is-compact td.ids-disabled:hover .day-text {\n color: var(--ids-color-gray-30);\n}\n.ids-month-view.is-compact td.is-selected .day-text {\n color: var(--ids-calendar-month-view-weekday-color-text-compact-selected-hover);\n background-color: var(--ids-calendar-month-view-day-color-background-compact-selected);\n}\n.ids-month-view.is-compact td.is-selected:focus {\n outline: none;\n outline-style: none;\n}\n.ids-month-view.is-compact td.is-selected:not(.is-disabled):not(.range-selection):focus ids-text::part(text) {\n width: 31px;\n height: 31px;\n line-height: 31px;\n}\n.ids-month-view.is-compact td.is-selected:not(.is-disabled):not(.range-selection):focus ids-text {\n margin: 2px;\n}\n.ids-month-view.is-compact td.is-selected:not(.is-disabled):not(.range-selection):focus .day-container {\n border-color: var(--ids-calendar-month-view-day-color-background-compact-selected);\n z-index: 2;\n box-shadow: 0 0 2px 0 var(--ids-calendar-month-view-day-color-background-compact-selected);\n}\n.ids-month-view.is-compact td.is-today:not(.is-selected) .day-text::part(text) {\n border: 1px solid var(--ids-calendar-month-view-today-color-border-compact);\n}\n.ids-month-view.is-compact td:not(.is-disabled):not(.is-selected):not(.has-legend):not(.range-selection):hover .day-text, .ids-month-view.is-compact td:not(.is-disabled):not(.is-selected):not(.has-legend):not(.range-selection):active .day-text {\n background-color: var(--ids-calendar-month-view-day-color-background-compact-hover);\n}\n.ids-month-view.is-compact td.has-legend:not(.is-disabled):hover .day-container::after {\n opacity: 0.7;\n}\n.ids-month-view.is-compact td.has-legend .day-container::after {\n border-radius: 50%;\n position: absolute;\n content: \"\";\n background-color: var(--legend-color);\n display: inline-block;\n width: 35px;\n height: 35px;\n overflow: hidden;\n opacity: 0.3;\n transition: 0.2s opacity ease;\n inset: 0;\n margin: auto;\n}\n.ids-month-view.is-compact td.range-selection + .range-selection, .ids-month-view.is-compact td.range-next:not(:first-of-type), .ids-month-view.is-compact td.range-prev:not(:last-of-type) {\n position: relative;\n}\n.ids-month-view.is-compact td.range-selection + .range-selection::before, .ids-month-view.is-compact td.range-next:not(:first-of-type)::before, .ids-month-view.is-compact td.range-prev:not(:last-of-type)::before {\n position: absolute;\n width: 100%;\n z-index: 1;\n content: \"\";\n display: inline-block;\n height: 35px;\n top: 0;\n bottom: 0;\n margin-top: auto;\n margin-bottom: auto;\n}\n.ids-month-view.is-compact td.is-disabled.range-selection.not-included + .range-selection::before, .ids-month-view.is-compact td.is-disabled.range-prev.not-included::before {\n content: none;\n}\n.ids-month-view.is-compact td:not(.is-disabled.not-included).range-prev .day-text, .ids-month-view.is-compact td:not(.is-disabled.not-included).range-next .day-text, .ids-month-view.is-compact td:not(.is-disabled.not-included).range-next:not(:first-of-type)::before, .ids-month-view.is-compact td.range-prev:not(:last-of-type)::before {\n background-color: var(--ids-calendar-month-view-range-color-background-compact);\n}\n.ids-month-view.is-compact td.range-selection:not(:first-of-type)::before, .ids-month-view.is-compact td:not(.is-disabled.not-included).range-selection .day-text {\n background-color: var(--ids-calendar-month-view-range-color-background-compact-selected);\n}\n.ids-month-view.is-compact td.range-selection:not(.alternate):not(.is-disabled.not-included) .day-text {\n color: var(--ids-calendar-month-view-range-color-text-compact-selected);\n}\n.ids-month-view.is-compact td.range-selection:not(:first-of-type)::before, .ids-month-view.is-compact td.range-next:not(:first-of-type)::before {\n inset-inline-end: 50%;\n}\n.ids-month-view.is-compact td.range-prev:not(:last-of-type)::before {\n inset-inline-end: -50%;\n}\n.ids-month-view.is-compact td.range-selection .day-text, .ids-month-view.is-compact td.range-prev .day-text, .ids-month-view.is-compact td.range-next .day-text {\n border-radius: 50%;\n z-index: 2;\n transition: none;\n}\n.ids-month-view.is-compact th,\n.ids-month-view.is-compact td {\n padding: 0;\n}\n.ids-month-view.is-compact.range-select-week td .day-text {\n transition: none;\n}\n.ids-month-view.is-compact .btn-today {\n margin-right: -7px;\n}\n.ids-month-view.is-compact .btn-today::part(button) {\n padding-inline: 4px;\n padding-block: 2px;\n margin: 3px;\n}\n.ids-month-view.is-compact .btn-previous,\n.ids-month-view.is-compact .btn-next {\n padding-inline-start: 0;\n margin: 3px;\n}\n.ids-month-view.is-compact .btn-previous::part(button),\n.ids-month-view.is-compact .btn-next::part(button) {\n padding: 0;\n width: 38px;\n height: 38px;\n}\n.ids-month-view.is-compact .month-view-legend {\n padding-top: 27px;\n max-width: 300px;\n}\n.ids-month-view.is-compact .week-num-cell {\n border-inline-end: 1px solid var(--ids-calendar-month-view-color-border);\n}\n.ids-month-view.is-compact .week-num-cell ids-text {\n color: var(--ids-month-view-week-number-text-color);\n cursor: default;\n}\n\n.ids-month-view.is-fullsize {\n border-style: solid;\n border-width: 1px 1px 0;\n border-color: var(--ids-calendar-month-view-color-border);\n}\n.ids-month-view.is-fullsize .weekday-text {\n color: var(--ids-calendar-month-view-weekday-color-text);\n}\n.ids-month-view.is-fullsize.is-disabled.has-legend {\n opacity: 0.4;\n background-color: transparent;\n}\n.ids-month-view.is-fullsize .day-text {\n color: var(--ids-calendar-month-view-color-text-default);\n}\n.ids-month-view.is-fullsize td {\n border-style: solid;\n border-width: 0 1px 1px;\n position: relative;\n transition: 0.1s background-color ease-out;\n height: 99px;\n width: 14.3%;\n overflow: hidden;\n user-select: none;\n}\n.ids-month-view.is-fullsize td:last-child {\n border-right: 0;\n}\n.ids-month-view.is-fullsize td:first-child {\n border-left: 0;\n}\n.ids-month-view.is-fullsize td:not(.is-selected):not(.has-legend):not(.is-disabled):hover, .ids-month-view.is-fullsize td:not(.is-selected):not(.has-legend):not(.is-disabled):active {\n background-color: var(--ids-calendar-month-view-color-background-hover);\n}\n.ids-month-view.is-fullsize td.is-disabled {\n opacity: 0.5;\n background-color: var(--ids-calendar-month-view-color-background-disabled);\n}\n.ids-month-view.is-fullsize td.is-disabled.has-legend::after {\n opacity: 0.4;\n}\n.ids-month-view.is-fullsize td.is-selected:not(.has-legend) {\n background-color: var(--ids-calendar-month-view-color-background-selected);\n}\n.ids-month-view.is-fullsize td.is-selected {\n box-shadow: inset 0 5px 0 0 var(--ids-calendar-month-view-color-selected);\n}\n.ids-month-view.is-fullsize td.is-selected:focus {\n outline: none;\n}\n.ids-month-view.is-fullsize td.has-legend::after {\n position: absolute;\n width: 100%;\n background-color: var(--legend-color);\n content: \"\";\n inset: 0;\n opacity: 0.3;\n}\n.ids-month-view.is-fullsize td.has-legend.is-selected::after {\n top: 5px;\n}\n.ids-month-view.is-fullsize td.has-legend:hover::after {\n opacity: 0.7;\n}\n.ids-month-view.is-fullsize td.alternate .day-text {\n color: var(--ids-calendar-month-view-color-text-alternate);\n}\n.ids-month-view.is-fullsize td .day-text {\n position: absolute;\n cursor: pointer;\n z-index: 1;\n left: calc(100% - 25px);\n top: var(--ids-month-view-day-text-top, 13px);\n width: 10px;\n text-align: center;\n}\n.ids-month-view.is-fullsize td.month-label .day-text {\n left: auto;\n width: 100%;\n text-align: right;\n}\n.ids-month-view.is-fullsize td.month-label ids-text::part(text) {\n font-weight: 600;\n padding-right: 10px;\n}\n.ids-month-view.is-fullsize th,\n.ids-month-view.is-fullsize td {\n padding: 0;\n border-bottom: 1px solid;\n border-color: var(--ids-calendar-month-view-color-border);\n}\n.ids-month-view.is-fullsize.has-legend .month-view-container {\n border-bottom: 1px solid var(--ids-calendar-month-view-color-border);\n}\n\n.ids-month-view.is-date-picker {\n overflow: visible;\n}\n.ids-month-view.is-date-picker .month-view-container {\n padding-left: 10px;\n padding-right: 10px;\n}\n.ids-month-view.is-date-picker td .day-container {\n margin: 0;\n}\n.ids-month-view.is-date-picker ids-date-picker {\n margin-left: 12px;\n}\n\n.ids-month-view.is-date-picker .month-view-legend,\n.ids-month-view.is-fullsize .month-view-legend {\n text-align: center;\n}\n\n.month-view-legend-item.event-type .month-view-legend-swatch {\n border-radius: 10px;\n opacity: 1;\n}\n\nids-toolbar ids-menu-button[menu=view-picker] {\n margin-inline-end: 8px;\n}\n\n:host([dir=rtl]) .ids-month-view.is-fullsize td .day-text {\n left: unset;\n right: calc(100% - 25px);\n}\n:host([dir=rtl]) .ids-month-view.is-fullsize td.month-label .day-text {\n right: auto;\n text-align: left;\n}\n:host([dir=rtl]) .ids-month-view.is-fullsize td.month-label ids-text::part(text) {\n padding-right: unset;\n padding-left: 10px;\n}\n:host([dir=rtl]) .ids-month-view.is-fullsize td:last-child {\n border-left: 0;\n}\n:host([dir=rtl]) .ids-month-view.is-date-picker ids-date-picker {\n margin-left: 0;\n margin-right: 12px;\n}\n:host([dir=rtl]) .ids-month-view.is-date-picker .btn-today {\n margin-right: 0;\n margin-left: -7px;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2J1aWxkcy9pbmZvci1kZXNpZ24vZW50ZXJwcmlzZS13Yy9zcmMvY29tcG9uZW50cy9pZHMtbW9udGgtdmlldyIsInNvdXJjZXMiOlsiaWRzLW1vbnRoLXZpZXcuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTs7QUFJQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFJRjtFQUNFO0VBQ0E7O0FBR0Y7QUFBQTtBQUFBO0VBR0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOzs7QUFNTjtFQUNFOztBQUVBO0VBQ0U7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFJQTtFQUNFO0VBQ0E7O0FBSUE7RUFDRTs7QUFHRjtFQUNFOztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUE7RUFDRTs7QUFLRjtFQUNFOztBQUtGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUE7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFLTjtFQUNFOztBQUdGO0VBRUU7O0FBS0E7RUFDRTs7QUFLRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFLSjtFQUdFOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBTUY7RUFDRTs7QUFJSjtFQUlFOztBQUdGO0VBRUU7O0FBR0Y7RUFDRTs7QUFHRjtFQUVFOztBQUdGO0VBQ0U7O0FBR0Y7RUFHRTtFQUNBO0VBQ0E7O0FBSUo7QUFBQTtFQUVFOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTs7QUFJSjtBQUFBO0VBRUU7RUFDQTs7QUFFQTtBQUFBO0VBQ0U7RUFDQTtFQUNBOztBQUlKO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUVBO0VBQ0U7RUFDQTs7O0FBTU47RUFDRTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBVUE7RUFDQTtFQUNBO0VBQ0E7O0FBWEE7RUFDRTs7QUFHRjtFQUNFOztBQVFGO0VBRUU7O0FBR0Y7RUFDRTtFQUNBOztBQUVBO0VBQ0U7O0FBSUo7RUFDRTs7QUFHRjtFQUNFOztBQUVBO0VBQ0U7O0FBS0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUlKO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7O0FBSUo7QUFBQTtFQUVFO0VBQ0E7RUFDQTs7QUFJRjtFQUNFOzs7QUFLSjtFQUNFOztBQUVBO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7OztBQU9GO0FBQUE7RUFDRTs7O0FBS0o7RUFDRTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFPSTtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBOztBQUdGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUtGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIuaWRzLW1vbnRoLXZpZXcge1xuICBkaXNwbGF5OiBmbGV4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci1iYWNrZ3JvdW5kLWRlZmF1bHQpO1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIG1heC13aWR0aDogaW5oZXJpdDtcblxuICAubW9udGgtdmlldy1jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWNvbG9yLWJhY2tncm91bmQtZGVmYXVsdCk7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gIH1cblxuICAubW9udGgtdmlldy10YWJsZS1oZWFkZXIge1xuICAgIHRoIHtcbiAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAxNC4zJTtcbiAgICB9XG4gIH1cblxuICAubW9udGgtdmlldy10YWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXNwYWNpbmc6IDA7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgfVxuXG4gIC50cmlnZ2VyLWljb24ge1xuICAgIGNvbG9yOiB2YXIoLS1pZHMtY29sb3ItYmx1ZS02MCk7XG4gIH1cblxuICAvLyBMZWdlbmQgbXV0dWFsXG4gIC5tb250aC12aWV3LWxlZ2VuZCB7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgcGFkZGluZzogMTBweCA1cHggMDtcbiAgfVxuXG4gIC5tb250aC12aWV3LWxlZ2VuZC1zd2F0Y2gsXG4gIC5tb250aC12aWV3LWxlZ2VuZC1pdGVtLFxuICAubW9udGgtdmlldy1sZWdlbmQtdGV4dCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG5cbiAgLm1vbnRoLXZpZXctbGVnZW5kLWl0ZW0ge1xuICAgIG1hcmdpbi1ib3R0b206IDJweDtcbiAgfVxuXG4gIC5tb250aC12aWV3LWxlZ2VuZC1zd2F0Y2gge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxlZ2VuZC1jb2xvcik7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMTZweDtcbiAgfVxuXG4gIC5tb250aC12aWV3LWxlZ2VuZC1pdGVtLmV2ZW50LXR5cGUgLm1vbnRoLXZpZXctbGVnZW5kLXN3YXRjaCB7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHdpZHRoOiAxNHB4O1xuICAgIGhlaWdodDogMTRweDtcbiAgfVxuXG4gIC5tb250aC12aWV3LWxlZ2VuZC10ZXh0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWxlZ2VuZC1jb2xvci10ZXh0KTtcbiAgICBwYWRkaW5nOiAwIDEwcHggMCA4cHg7XG4gICAgdG9wOiAtMnB4O1xuICB9XG5cbiAgLmV2ZW50cy1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdG9wOiAwO1xuXG4gICAgLmV2ZW50cy1vdmVyZmxvdyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDA7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0ZXh0LWluZGVudDogMTJweDtcbiAgICB9XG5cbiAgICBpZHMtdGV4dDo6cGFydCh0ZXh0KSB7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQ29tcGFjdCB2aWV3XG4uaWRzLW1vbnRoLXZpZXcuaXMtY29tcGFjdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAubW9udGgtdmlldy10YWJsZS1oZWFkZXIgdGgge1xuICAgIGxpbmUtaGVpZ2h0OiB1bnNldDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIGhlaWdodDogMjJweDtcbiAgfVxuXG4gIC5tb250aC12aWV3LXRhYmxlIHtcbiAgICBtYXJnaW4tdG9wOiAxM3B4O1xuICB9XG5cbiAgLndlZWtkYXktdGV4dCB7XG4gICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXdlZWtkYXktY29sb3ItdGV4dC1jb21wYWN0KTtcbiAgfVxuXG4gIHRkIHtcbiAgICB3aWR0aDogNDRweDtcbiAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgJjpub3QoLmlzLWRpc2FibGVkKTpob3ZlciB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuXG4gICAgLmRheS1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBtYXJnaW46IDVweCAwO1xuICAgIH1cblxuICAgIC5kYXktdGV4dCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgICBjb2xvcjogdmFyKC0taWRzLWNhbGVuZGFyLW1vbnRoLXZpZXctY29sb3ItdGV4dC1kZWZhdWx0KTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB0cmFuc2l0aW9uOiAwLjJzIGJhY2tncm91bmQtY29sb3IgZWFzZTtcbiAgICB9XG5cbiAgICAmLmFsdGVybmF0ZSAuZGF5LXRleHQge1xuICAgICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWNvbG9yLXRleHQtY29tcGFjdCk7XG4gICAgfVxuXG4gICAgJi5pcy1kaXNhYmxlZCB7XG4gICAgICAuZGF5LXRleHQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtY29sb3ItbmV1dHJhbC0xMCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pZHMtY29sb3ItbmV1dHJhbC0zMCk7XG4gICAgICB9XG5cbiAgICAgICYuaGFzLWxlZ2VuZCB7XG4gICAgICAgIC5kYXktY29udGFpbmVyOjphZnRlciB7XG4gICAgICAgICAgb3BhY2l0eTogMC40O1xuICAgICAgICB9XG5cbiAgICAgICAgLmRheS10ZXh0IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlkcy10ZXh0OjpwYXJ0KHRleHQpIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICB3aWR0aDogMzVweDtcbiAgICAgIGhlaWdodDogMzVweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNXB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgLmRheS10ZXh0IHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXdlZWtkYXktY29sb3ItdGV4dC1jb21wYWN0LWhvdmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmlkcy1kaXNhYmxlZDpob3ZlciB7XG4gICAgICAuZGF5LXRleHQge1xuICAgICAgICBjb2xvcjogdmFyKC0taWRzLWNvbG9yLWdyYXktMzApO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtc2VsZWN0ZWQge1xuICAgICAgLmRheS10ZXh0IHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXdlZWtkYXktY29sb3ItdGV4dC1jb21wYWN0LXNlbGVjdGVkLWhvdmVyKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWNhbGVuZGFyLW1vbnRoLXZpZXctZGF5LWNvbG9yLWJhY2tncm91bmQtY29tcGFjdC1zZWxlY3RlZCk7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBvdXRsaW5lLXN0eWxlOiBub25lO1xuICAgICAgfVxuXG4gICAgICAmOm5vdCguaXMtZGlzYWJsZWQpOm5vdCgucmFuZ2Utc2VsZWN0aW9uKTpmb2N1cyB7XG4gICAgICAgIGlkcy10ZXh0OjpwYXJ0KHRleHQpIHtcbiAgICAgICAgICB3aWR0aDogMzFweDtcbiAgICAgICAgICBoZWlnaHQ6IDMxcHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDMxcHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZHMtdGV4dCB7XG4gICAgICAgICAgbWFyZ2luOiAycHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZGF5LWNvbnRhaW5lciB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1kYXktY29sb3ItYmFja2dyb3VuZC1jb21wYWN0LXNlbGVjdGVkKTtcbiAgICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAycHggMCB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1kYXktY29sb3ItYmFja2dyb3VuZC1jb21wYWN0LXNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtdG9kYXk6bm90KC5pcy1zZWxlY3RlZCkgLmRheS10ZXh0OjpwYXJ0KHRleHQpIHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXRvZGF5LWNvbG9yLWJvcmRlci1jb21wYWN0KTtcbiAgICB9XG5cbiAgICAmOm5vdCguaXMtZGlzYWJsZWQpOm5vdCguaXMtc2VsZWN0ZWQpOm5vdCguaGFzLWxlZ2VuZCk6bm90KC5yYW5nZS1zZWxlY3Rpb24pOmhvdmVyIC5kYXktdGV4dCxcbiAgICAmOm5vdCguaXMtZGlzYWJsZWQpOm5vdCguaXMtc2VsZWN0ZWQpOm5vdCguaGFzLWxlZ2VuZCk6bm90KC5yYW5nZS1zZWxlY3Rpb24pOmFjdGl2ZSAuZGF5LXRleHQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taWRzLWNhbGVuZGFyLW1vbnRoLXZpZXctZGF5LWNvbG9yLWJhY2tncm91bmQtY29tcGFjdC1ob3Zlcik7XG4gICAgfVxuXG4gICAgLy8gTGVnZW5kIGluIGNvbXBhY3QgbW9kZVxuICAgICYuaGFzLWxlZ2VuZDpub3QoLmlzLWRpc2FibGVkKTpob3ZlciB7XG4gICAgICAuZGF5LWNvbnRhaW5lcjo6YWZ0ZXIge1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5oYXMtbGVnZW5kIC5kYXktY29udGFpbmVyIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sZWdlbmQtY29sb3IpO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHdpZHRoOiAzNXB4O1xuICAgICAgICBoZWlnaHQ6IDM1cHg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIG9wYWNpdHk6IDAuMztcbiAgICAgICAgdHJhbnNpdGlvbjogMC4ycyBvcGFjaXR5IGVhc2U7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmFuZ2Ugc2VsZWN0aW9uXG4gICAgJi5yYW5nZS1zZWxlY3Rpb24gKyAucmFuZ2Utc2VsZWN0aW9uLFxuICAgICYucmFuZ2UtbmV4dDpub3QoOmZpcnN0LW9mLXR5cGUpLFxuICAgICYucmFuZ2UtcHJldjpub3QoOmxhc3Qtb2YtdHlwZSkge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDM1cHg7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiBhdXRvO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtZGlzYWJsZWQucmFuZ2Utc2VsZWN0aW9uLm5vdC1pbmNsdWRlZCArIC5yYW5nZS1zZWxlY3Rpb24sXG4gICAgJi5pcy1kaXNhYmxlZC5yYW5nZS1wcmV2Lm5vdC1pbmNsdWRlZCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6bm90KC5pcy1kaXNhYmxlZC5ub3QtaW5jbHVkZWQpLnJhbmdlLXByZXYgLmRheS10ZXh0LFxuICAgICY6bm90KC5pcy1kaXNhYmxlZC5ub3QtaW5jbHVkZWQpLnJhbmdlLW5leHQgLmRheS10ZXh0LFxuICAgICY6bm90KC5pcy1kaXNhYmxlZC5ub3QtaW5jbHVkZWQpLnJhbmdlLW5leHQ6bm90KDpmaXJzdC1vZi10eXBlKTo6YmVmb3JlLFxuICAgICYucmFuZ2UtcHJldjpub3QoOmxhc3Qtb2YtdHlwZSk6OmJlZm9yZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1yYW5nZS1jb2xvci1iYWNrZ3JvdW5kLWNvbXBhY3QpO1xuICAgIH1cblxuICAgICYucmFuZ2Utc2VsZWN0aW9uOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6OmJlZm9yZSxcbiAgICAmOm5vdCguaXMtZGlzYWJsZWQubm90LWluY2x1ZGVkKS5yYW5nZS1zZWxlY3Rpb24gLmRheS10ZXh0IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXJhbmdlLWNvbG9yLWJhY2tncm91bmQtY29tcGFjdC1zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgJi5yYW5nZS1zZWxlY3Rpb246bm90KC5hbHRlcm5hdGUpOm5vdCguaXMtZGlzYWJsZWQubm90LWluY2x1ZGVkKSAuZGF5LXRleHQge1xuICAgICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LXJhbmdlLWNvbG9yLXRleHQtY29tcGFjdC1zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgJi5yYW5nZS1zZWxlY3Rpb246bm90KDpmaXJzdC1vZi10eXBlKTo6YmVmb3JlLFxuICAgICYucmFuZ2UtbmV4dDpub3QoOmZpcnN0LW9mLXR5cGUpOjpiZWZvcmUge1xuICAgICAgaW5zZXQtaW5saW5lLWVuZDogNTAlO1xuICAgIH1cblxuICAgICYucmFuZ2UtcHJldjpub3QoOmxhc3Qtb2YtdHlwZSk6OmJlZm9yZSB7XG4gICAgICBpbnNldC1pbmxpbmUtZW5kOiAtNTAlO1xuICAgIH1cblxuICAgICYucmFuZ2Utc2VsZWN0aW9uIC5kYXktdGV4dCxcbiAgICAmLnJhbmdlLXByZXYgLmRheS10ZXh0LFxuICAgICYucmFuZ2UtbmV4dCAuZGF5LXRleHQge1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIHRyYW5zaXRpb246IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgdGgsXG4gIHRkIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgJi5yYW5nZS1zZWxlY3Qtd2VlayB0ZCAuZGF5LXRleHQge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gIH1cblxuICAuYnRuLXRvZGF5IHtcbiAgICBtYXJnaW4tcmlnaHQ6IC03cHg7XG5cbiAgICAmOjpwYXJ0KGJ1dHRvbikge1xuICAgICAgcGFkZGluZy1pbmxpbmU6IDRweDtcbiAgICAgIHBhZGRpbmctYmxvY2s6IDJweDtcbiAgICAgIG1hcmdpbjogM3B4O1xuICAgIH1cbiAgfVxuXG4gIC5idG4tcHJldmlvdXMsXG4gIC5idG4tbmV4dCB7XG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7XG4gICAgbWFyZ2luOiAzcHg7XG5cbiAgICAmOjpwYXJ0KGJ1dHRvbikge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHdpZHRoOiAzOHB4O1xuICAgICAgaGVpZ2h0OiAzOHB4O1xuICAgIH1cbiAgfVxuXG4gIC5tb250aC12aWV3LWxlZ2VuZCB7XG4gICAgcGFkZGluZy10b3A6IDI3cHg7XG4gICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgfVxuXG4gIC53ZWVrLW51bS1jZWxsIHtcbiAgICBib3JkZXItaW5saW5lLWVuZDogMXB4IHNvbGlkIHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWNvbG9yLWJvcmRlcik7XG5cbiAgICBpZHMtdGV4dCB7XG4gICAgICBjb2xvcjogdmFyKC0taWRzLW1vbnRoLXZpZXctd2Vlay1udW1iZXItdGV4dC1jb2xvcik7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgfVxuICB9XG59XG5cbi8vIEZ1bGwgc2l6ZSB2aWV3XG4uaWRzLW1vbnRoLXZpZXcuaXMtZnVsbHNpemUge1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItd2lkdGg6IDFweCAxcHggMDtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci1ib3JkZXIpO1xuXG4gIC53ZWVrZGF5LXRleHQge1xuICAgIGNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy13ZWVrZGF5LWNvbG9yLXRleHQpO1xuICB9XG5cbiAgJi5pcy1kaXNhYmxlZC5oYXMtbGVnZW5kIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAuZGF5LXRleHQge1xuICAgIGNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci10ZXh0LWRlZmF1bHQpO1xuICB9XG5cbiAgdGQge1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLXdpZHRoOiAwIDFweCAxcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRyYW5zaXRpb246IDAuMXMgYmFja2dyb3VuZC1jb2xvciBlYXNlLW91dDtcblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgfVxuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItbGVmdDogMDtcbiAgICB9XG5cbiAgICBoZWlnaHQ6IDk5cHg7XG4gICAgd2lkdGg6IDE0LjMlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgICAmOm5vdCguaXMtc2VsZWN0ZWQpOm5vdCguaGFzLWxlZ2VuZCk6bm90KC5pcy1kaXNhYmxlZCk6aG92ZXIsXG4gICAgJjpub3QoLmlzLXNlbGVjdGVkKTpub3QoLmhhcy1sZWdlbmQpOm5vdCguaXMtZGlzYWJsZWQpOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci1iYWNrZ3JvdW5kLWhvdmVyKTtcbiAgICB9XG5cbiAgICAmLmlzLWRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWNvbG9yLWJhY2tncm91bmQtZGlzYWJsZWQpO1xuXG4gICAgICAmLmhhcy1sZWdlbmQ6OmFmdGVyIHtcbiAgICAgICAgb3BhY2l0eTogMC40O1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtc2VsZWN0ZWQ6bm90KC5oYXMtbGVnZW5kKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci1iYWNrZ3JvdW5kLXNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAmLmlzLXNlbGVjdGVkIHtcbiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgNXB4IDAgMCB2YXIoLS1pZHMtY2FsZW5kYXItbW9udGgtdmlldy1jb2xvci1zZWxlY3RlZCk7XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaGFzLWxlZ2VuZCB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxlZ2VuZC1jb2xvcik7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3BhY2l0eTogMC4zO1xuICAgICAgfVxuXG4gICAgICAmLmlzLXNlbGVjdGVkOjphZnRlciB7XG4gICAgICAgIHRvcDogNXB4O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmFsdGVybmF0ZSAuZGF5LXRleHQge1xuICAgICAgY29sb3I6IHZhcigtLWlkcy1jYWxlbmRhci1tb250aC12aWV3LWNvbG9yLXRleHQtYWx0ZXJuYXRlKTtcbiAgICB9XG5cbiAgICAuZGF5LXRleHQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgei1pbmRleDogMTtcbiAgICAgIGxlZnQ6IGNhbGMoMTAwJSAtIDI1cHgpO1xuICAgICAgdG9wOiB2YXIoLS1pZHMtbW9udGgtdmlldy1kYXktdGV4dC10b3AsIDEzcHgpO1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgJi5tb250aC1sYWJlbCAuZGF5LXRleHQge1xuICAgICAgbGVmdDogYXV0bztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuXG4gICAgJi5tb250aC1sYWJlbCBpZHMtdGV4dDo6cGFydCh0ZXh0KSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgICB9XG4gIH1cblxuICB0aCxcbiAgdGQge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0taWRzLWNhbGVuZGFyLW1vbnRoLXZpZXctY29sb3ItYm9yZGVyKTtcbiAgfVxuXG4gIC8vIExlZ2VuZCBpbiBmdWxsIHNpemUgbW9kZVxuICAmLmhhcy1sZWdlbmQgLm1vbnRoLXZpZXctY29udGFpbmVyIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0taWRzLWNhbGVuZGFyLW1vbnRoLXZpZXctY29sb3ItYm9yZGVyKTtcbiAgfVxufVxuXG4vLyBVc2VkIGluIGEgZGF5IHBpY2tlclxuLmlkcy1tb250aC12aWV3LmlzLWRhdGUtcGlja2VyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG5cbiAgLm1vbnRoLXZpZXctY29udGFpbmVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgfVxuXG4gIHRkIC5kYXktY29udGFpbmVyIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICBpZHMtZGF0ZS1waWNrZXIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMnB4O1xuICB9XG59XG5cbi8vIExlZ2VuZCBmb3IgZnVsbCBzaXplIHZpZXcgYW5kIGlmIGl0J3MgaW4gYSBkYXRlcGlja2VyXG4uaWRzLW1vbnRoLXZpZXcuaXMtZGF0ZS1waWNrZXIsXG4uaWRzLW1vbnRoLXZpZXcuaXMtZnVsbHNpemUge1xuICAubW9udGgtdmlldy1sZWdlbmQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxufVxuXG4vLyBMZWdlbmQgZm9yIG1vbnRoXG4ubW9udGgtdmlldy1sZWdlbmQtaXRlbS5ldmVudC10eXBlIC5tb250aC12aWV3LWxlZ2VuZC1zd2F0Y2gge1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBvcGFjaXR5OiAxO1xufVxuXG5pZHMtdG9vbGJhciBpZHMtbWVudS1idXR0b25bbWVudT0ndmlldy1waWNrZXInXSB7XG4gIG1hcmdpbi1pbmxpbmUtZW5kOiA4cHg7XG59XG5cbi8vIFRleHQgZGlyZWN0aW9uXG46aG9zdChbZGlyPSdydGwnXSkge1xuICAuaWRzLW1vbnRoLXZpZXcge1xuICAgICYuaXMtZnVsbHNpemUgdGQge1xuICAgICAgLmRheS10ZXh0IHtcbiAgICAgICAgbGVmdDogdW5zZXQ7XG4gICAgICAgIHJpZ2h0OiBjYWxjKDEwMCUgLSAyNXB4KTtcbiAgICAgIH1cblxuICAgICAgJi5tb250aC1sYWJlbCAuZGF5LXRleHQge1xuICAgICAgICByaWdodDogYXV0bztcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIH1cblxuICAgICAgJi5tb250aC1sYWJlbCBpZHMtdGV4dDo6cGFydCh0ZXh0KSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IHVuc2V0O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuaXMtZGF0ZS1waWNrZXIge1xuICAgICAgaWRzLWRhdGUtcGlja2VyIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTJweDtcbiAgICAgIH1cblxuICAgICAgLmJ0bi10b2RheSB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC03cHg7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0= */`;\n", "import { customElement, scss } from '../../core/ids-decorators';\nimport { attributes } from '../../core/ids-attributes';\n\nimport IdsEventsMixin from '../../mixins/ids-events-mixin/ids-events-mixin';\nimport IdsDateAttributeMixin from '../../mixins/ids-date-attribute-mixin/ids-date-attribute-mixin';\nimport IdsLocaleMixin from '../../mixins/ids-locale-mixin/ids-locale-mixin';\nimport IdsCalendarEventsMixin from '../../mixins/ids-calendar-events-mixin/ids-calendar-events-mixin';\nimport IdsElement from '../../core/ids-element';\nimport IdsMonthViewAttributeMixin from './ids-month-view-attribute-mixin';\n\n// Import Utils\nimport {\n addDate,\n daysDiff,\n daysInMonth,\n firstDayOfMonthDate,\n firstDayOfWeekDate,\n gregorianToUmalqura,\n isValidDate,\n lastDayOfMonthDate,\n subtractDate,\n umalquraToGregorian,\n weeksInMonth,\n weeksInRange,\n removeDateRange,\n weekNumber\n} from '../../utils/ids-date-utils/ids-date-utils';\nimport {\n stringToBool,\n stringToNumber,\n buildClassAttrib,\n} from '../../utils/ids-string-utils/ids-string-utils';\n\n// Supporting components\nimport '../ids-button/ids-button';\nimport '../ids-icon/ids-icon';\nimport '../ids-text/ids-text';\nimport '../ids-trigger-field/ids-trigger-button';\n\n// Import Styles\nimport styles from './ids-month-view.scss';\nimport IdsCalendarEvent, { CalendarEventData, CalendarEventTypeData } from '../ids-calendar/ids-calendar-event';\nimport { getDateValuesFromString } from '../ids-date-picker/ids-date-picker-common';\n\nimport type {\n IdsRangeSettings,\n IdsDisableSettings,\n IdsLegendSettings,\n} from './ids-month-view-common';\nimport {\n BASE_Y_OFFSET,\n MIN_MONTH,\n MAX_MONTH,\n MAX_EVENT_COUNT,\n WEEK_LENGTH,\n IdsRangeSettingsInterface\n} from './ids-month-view-common';\n\nexport type IdsDayselectedEvent = CustomEventInit & {\n detail: {\n elem: IdsMonthView,\n date: Date,\n useRange: boolean,\n rangeStart: Date | null,\n rangeEnd: Date | null,\n events?: CalendarEventData[]\n },\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n};\n\nconst Base = IdsMonthViewAttributeMixin(\n IdsDateAttributeMixin(\n IdsCalendarEventsMixin(\n IdsLocaleMixin(\n IdsEventsMixin(\n IdsElement\n )\n )\n )\n )\n);\n\n/**\n * IDS Month View Component\n * @type {IdsMonthView}\n * @inherits IdsElement\n * @mixes IdsLocaleMixin\n * @mixes IdsEventsMixin\n * @mixes IdsCalendarEventsMixin\n * @part container - the container of the component\n * @part table-container - the container of the calendar table\n */\n@customElement('ids-month-view')\n@scss(styles)\nclass IdsMonthView extends Base implements IdsRangeSettingsInterface {\n #lastRenderedYear = NaN;\n\n #lastRenderedDay = NaN;\n\n #lastRenderedMonth = NaN;\n\n #lastRenderedFirstDayOfWeek = NaN;\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.#attachEventHandlers();\n this.#attachKeyboardListeners();\n this.#renderMonth();\n }\n\n // Flag value for custom calendar event\n #isCustom = false;\n\n /**\n * Return the attributes we handle as getters/setters\n * @returns {Array} The attributes in an array\n */\n static get attributes(): Array<string> {\n return [\n ...super.attributes,\n attributes.COMPACT,\n attributes.END_DATE,\n attributes.FIRST_DAY_OF_WEEK,\n attributes.IS_DATEPICKER,\n attributes.SHOW_PICKLIST_MONTH,\n attributes.SHOW_PICKLIST_WEEK,\n attributes.SHOW_PICKLIST_YEAR,\n attributes.SHOW_TODAY,\n attributes.START_DATE,\n ];\n }\n\n /**\n * Inner template contents\n * @returns {string} The template\n */\n template(): string {\n return `<div class=\"ids-month-view ${this.compact ? 'is-compact' : 'is-fullsize'}${this.isDatePicker ? ' is-date-picker' : ''}\" part=\"container\">\n <div class=\"month-view-container\" part=\"table-container\">\n <table class=\"month-view-table\" aria-label=\"${this.localeAPI?.translate('Calendar')}\" role=\"application\">\n <thead class=\"month-view-table-header\">\n <tr></tr>\n </thead>\n <tbody></tbody>\n </table>\n </div>\n </div>`;\n }\n\n /**\n * Establish internal event handlers\n * @returns {void}\n */\n #attachEventHandlers() {\n // Day select event\n this.offEvent('click.month-view-dayselect');\n this.onEvent('click.month-view-dayselect', this.container?.querySelector('tbody'), (e: MouseEvent) => {\n // ignore clicks from week number column\n if ((e.target as HTMLElement)?.classList.contains('week-num-text')) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n return;\n }\n\n this.#daySelectClick((e.target as HTMLElement).closest('td'));\n });\n\n // Range selection event\n this.offEvent('mouseover.month-view-range');\n this.onEvent('mouseover.month-view-range', this.container?.querySelector('tbody'), (e: MouseEvent) => {\n const element = (e.target as HTMLElement).closest('td');\n\n if (!element) return;\n\n const { year, month, day } = element.dataset;\n\n this.#rangePropagation(year, month, day);\n });\n\n // Clear range selection when hover outside\n this.offEvent('mouseleave.month-view-range');\n this.onEvent('mouseleave.month-view-range', this.container?.querySelector('tbody'), () => {\n this.container?.querySelectorAll('td')\n .forEach((item: HTMLElement) => item.classList.remove('range-next', 'range-prev'));\n });\n\n // Events Overflow click event\n this.onEvent('click.overflow', this.container, (evt: any) => {\n if (evt.target.tagName === 'IDS-TEXT' && evt.target.classList.contains('events-overflow')) {\n evt.stopPropagation();\n const date = new Date(evt.target.getAttribute('data-date'));\n this.triggerEvent('overflow-click', this, {\n detail: { date },\n bubbles: true,\n cancelable: true,\n composed: true\n });\n }\n });\n\n return this;\n }\n\n onLanguageChange = () => {\n this.#renderMonth();\n };\n\n onLocaleChange = () => {\n this.#renderMonth();\n };\n\n /**\n * Establish Internal Keyboard shortcuts\n * @returns {object} this class-instance object for chaining\n */\n #attachKeyboardListeners(): any {\n // Group key codes to stop keyboard event, trigger dayselected event and focus active day\n const keys = [33, 34, 35, 36, 37, 38, 39, 40, 187, 189];\n\n // Range calendar doesn't have keyboard shortcuts\n if (this.#isDisplayRange()) {\n this.offEvent('keydown.month-view-keyboard');\n } else {\n this.offEvent('keydown.month-view-keyboard');\n this.onEvent('keydown.month-view-keyboard', this.container?.querySelector('.month-view-table'), (e: KeyboardEvent) => {\n const key = e.keyCode;\n\n if (keys.includes(key)) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n\n // When range selection is started\n if (this.useRange) {\n if (this.rangeSettings.start) {\n // Escape resets range selection\n if (key === 27) {\n this.rangeSettings.start = null;\n this.#clearRangeClasses();\n this.selectDay(this.year, this.month, this.day);\n this.focus();\n }\n\n // Arrow Up includes range start and same day previous week\n if (key === 38) {\n this.changeDate('previous-week', true);\n this.#rangePropagation(this.year, this.month, this.day);\n }\n\n // Arrow Down includes range start and same day next week\n if (key === 40) {\n this.changeDate('next-week', true);\n this.#rangePropagation(this.year, this.month, this.day);\n }\n\n // Arrow Right or + key includes next day to range selection\n if (key === 39 || (key === 187 && e.shiftKey)) {\n this.changeDate('next-day', true);\n this.#rangePropagation(this.year, this.month, this.day);\n }\n\n // Arrow Left or - key includes previous day to range selection\n if (key === 37 || (key === 189 && !e.shiftKey)) {\n this.changeDate('previous-day', true);\n this.#rangePropagation(this.year, this.month, this.day);\n }\n\n // Enter or space key completes range selection if started\n if (key === 13 || key === 32) {\n this.#setRangeSelection(this.year, this.month, this.day);\n this.#triggerSelectedEvent();\n }\n\n this.focus();\n\n return;\n }\n\n // Enter or space key starts range selection\n if (key === 13 || key === 32) {\n if (this.rangeSettings.selectWeek) {\n this.#rangeSelectWeek(this.year, this.month, this.day);\n this.#triggerSelectedEvent();\n } else {\n this.#setRangeSelection(this.year, this.month, this.day);\n this.focus();\n }\n }\n }\n\n // Arrow Up selects same day previous week\n if (key === 38) {\n this.changeDate('previous-week');\n }\n\n // Arrow Down selects same day next week\n if (key === 40) {\n this.changeDate('next-week');\n }\n\n // Arrow Right or + key selects next day\n if (key === 39 || (key === 187 && e.shiftKey)) {\n this.changeDate('next-day');\n }\n\n // Arrow Left or - key selects previous day\n if (key === 37 || (key === 189 && !e.shiftKey)) {\n this.changeDate('previous-day');\n }\n\n // Page Up selects same day previous month\n if (key === 33 && !e.altKey && !(e.ctrlKey || e.metaKey)) {\n this.changeDate('previous-month');\n }\n\n // Page Down selects same day next month\n if (key === 34 && !e.altKey && !(e.ctrlKey || e.metaKey)) {\n this.changeDate('next-month');\n }\n\n // ctrl + Page Up selects same day previous year\n if (key === 33 && (e.ctrlKey || e.metaKey)) {\n this.changeDate('previous-year');\n }\n\n // ctrl + Page Down selects same day next year\n if (key === 34 && (e.ctrlKey || e.metaKey)) {\n this.changeDate('next-year');\n }\n\n // Home moves to start of the month\n if (key === 36) {\n this.changeDate('start-month');\n }\n\n // End moves to end of the month\n if (key === 35) {\n this.changeDate('end-month');\n }\n\n // 't' selects today\n if (key === 84) {\n this.changeDate('today');\n }\n\n // Add keys including Enter or Space triggers dayselected event in regular calendar\n if (((keys.includes(key) || key === 84) && !this.isDatePicker) || (key === 32 || key === 13)) {\n this.#triggerSelectedEvent();\n }\n\n if (keys.includes(key) || key === 84) {\n if (this.isDatePicker) {\n this.selectDay(this.year, this.month, this.day);\n }\n this.focus();\n }\n });\n }\n\n return this;\n }\n\n /**\n * Add/remove legend HTML to the container\n */\n #renderLegend(): void {\n const template = (this.legend && this.legend.length > 0) ? `\n <div class=\"month-view-legend\">\n ${this.legend.map((item: any) => `\n <div class=\"month-view-legend-item ${item.cssClass || ''}\">\n <span class=\"month-view-legend-swatch\" data-color=\"${item.color}\"></span>\n <ids-text class=\"month-view-legend-text\" ${item.fontSize ? `font-size=\"${item.fontSize}\"` : ''}>${item.name}</ids-text>\n </div>\n `).join('')}\n </div>\n ` : '';\n\n // Clear/add HTML\n this.container?.querySelector('.month-view-legend')?.remove();\n this.container?.querySelector('.month-view-container')?.insertAdjacentHTML('beforeend', template);\n\n this.#colorToVar();\n }\n\n /**\n * Change month/year/day by event type\n * @param {string} type of event to be called\n * @param {boolean} limitMonth date changing is limited only to the current month\n */\n changeDate(type: string, limitMonth = false): void {\n if (type === 'next-month') {\n if (this.localeAPI?.isIslamic()) {\n const umalqura = gregorianToUmalqura(this.activeDate);\n const year = umalqura.month === MAX_MONTH ? umalqura.year + 1 : umalqura.year;\n const month = umalqura.month === MAX_MONTH ? MIN_MONTH : umalqura.month + 1;\n const gregorian = umalquraToGregorian(year, month, umalqura.day === 30 ? 1 : umalqura.day);\n\n this.day = gregorian.getDate();\n this.year = gregorian.getFullYear();\n this.month = gregorian.getMonth();\n } else {\n this.year = this.month === MAX_MONTH ? this.year + 1 : this.year;\n this.month = this.month === MAX_MONTH ? MIN_MONTH : this.month + 1;\n this.day = this.#getDayInMonth(this.day);\n }\n }\n\n if (type === 'previous-month') {\n if (this.localeAPI?.isIslamic()) {\n const umalqura = gregorianToUmalqura(this.activeDate);\n const year = umalqura.month === MIN_MONTH ? umalqura.year - 1 : umalqura.year;\n const month = umalqura.month === MIN_MONTH ? MAX_MONTH : umalqura.month - 1;\n const gregorian = umalquraToGregorian(year, month, umalqura.day === 30 ? 1 : umalqura.day);\n\n this.day = gregorian.getDate();\n this.year = gregorian.getFullYear();\n this.month = gregorian.getMonth();\n } else {\n this.year = this.month === MIN_MONTH ? this.year - 1 : this.year;\n this.month = this.month === MIN_MONTH ? MAX_MONTH : this.month - 1;\n this.day = this.#getDayInMonth(this.day);\n }\n }\n\n if (type === 'next-day') {\n const lastDayOfMonth = lastDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n if (lastDayOfMonth.getDate() === this.day && limitMonth) return;\n\n if (this.localeAPI?.isIslamic()) {\n const nextDate = addDate(this.activeDate, 1, 'days');\n\n this.day = nextDate.getDate();\n this.year = nextDate.getFullYear();\n this.month = nextDate.getMonth();\n\n return;\n }\n\n // Next month/year with rerender\n if (lastDayOfMonth.getDate() === this.day) {\n const nextDate = addDate(lastDayOfMonth, 1, 'days');\n\n this.year = nextDate.getFullYear();\n this.month = nextDate.getMonth();\n this.day = nextDate.getDate();\n } else {\n // Just increase day without rerender\n this.day += 1;\n }\n }\n\n if (type === 'previous-day') {\n const firstDayOfMonth = firstDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n if (firstDayOfMonth.getDate() === this.day && limitMonth) return;\n\n if (this.localeAPI?.isIslamic()) {\n const prevDate = subtractDate(this.activeDate, 1, 'days');\n\n this.day = prevDate.getDate();\n this.year = prevDate.getFullYear();\n this.month = prevDate.getMonth();\n\n return;\n }\n\n // Previous month/year with rerender\n if (firstDayOfMonth.getDate() === this.day) {\n const prevDate = subtractDate(firstDayOfMonth, 1, 'days');\n\n this.year = prevDate.getFullYear();\n this.month = prevDate.getMonth();\n this.day = prevDate.getDate();\n } else {\n // Just decrease day without rerender\n this.day -= 1;\n }\n }\n\n if (type === 'next-year') {\n if (this.localeAPI?.isIslamic()) {\n const umalqura = gregorianToUmalqura(this.activeDate);\n const gregorian = umalquraToGregorian(\n umalqura.year + 1,\n umalqura.month,\n umalqura.day === 30 ? 1 : umalqura.day\n );\n\n this.day = gregorian.getDate();\n this.month = gregorian.getMonth();\n this.year = gregorian.getFullYear();\n } else {\n const y = this.year + 1;\n this.year = y;\n this.day = this.#getDayInMonth(this.day);\n }\n }\n\n if (type === 'previous-year') {\n if (this.localeAPI?.isIslamic()) {\n const umalqura = gregorianToUmalqura(this.activeDate);\n const gregorian = umalquraToGregorian(\n umalqura.year - 1,\n umalqura.month,\n umalqura.day === 30 ? 1 : umalqura.day\n );\n\n this.day = gregorian.getDate();\n this.month = gregorian.getMonth();\n this.year = gregorian.getFullYear();\n } else {\n const y = this.year - 1;\n this.year = y;\n this.day = this.#getDayInMonth(this.day);\n }\n }\n\n if (type === 'today') {\n const now = new Date();\n\n this.day = now.getDate();\n this.year = now.getFullYear();\n this.month = now.getMonth();\n\n if (this.useRange) {\n this.rangeSettings.start = now.getTime();\n this.rangeSettings.end = now.getTime();\n }\n this.focus();\n }\n\n if (type === 'next-week') {\n const nextWeek = addDate(this.activeDate, WEEK_LENGTH, 'days');\n const lastDayOfMonth = lastDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n if (nextWeek > lastDayOfMonth && limitMonth) return;\n\n this.day = nextWeek.getDate();\n\n if (nextWeek > lastDayOfMonth || this.localeAPI?.isIslamic()) {\n this.year = nextWeek.getFullYear();\n this.month = nextWeek.getMonth();\n }\n }\n\n if (type === 'previous-week') {\n const prevWeek = subtractDate(this.activeDate, WEEK_LENGTH, 'days');\n const firstDayOfMonth = firstDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n if (prevWeek < firstDayOfMonth && limitMonth) return;\n\n this.day = prevWeek.getDate();\n\n if (prevWeek < firstDayOfMonth || this.localeAPI?.isIslamic()) {\n this.year = prevWeek.getFullYear();\n this.month = prevWeek.getMonth();\n }\n }\n\n if (type === 'start-month') {\n const firstDayOfMonth = firstDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n this.day = firstDayOfMonth.getDate();\n\n if (this.localeAPI?.isIslamic()) {\n this.year = firstDayOfMonth.getFullYear();\n this.month = firstDayOfMonth.getMonth();\n }\n }\n\n if (type === 'end-month') {\n const lastDayOfMonth = lastDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n\n this.day = lastDayOfMonth.getDate();\n\n if (this.localeAPI?.isIslamic()) {\n this.month = lastDayOfMonth.getMonth();\n this.year = lastDayOfMonth.getFullYear();\n }\n }\n\n this.triggerDateChange(this.activeDate, type);\n }\n\n /**\n * Day cell clicked\n * @param {HTMLElement} element The element.\n */\n #daySelectClick(element: null | HTMLElement): void {\n if (!element) return;\n\n const { month, year, day }: any = element.dataset;\n const isDisabled = element.classList.contains('is-disabled');\n\n if (!isDisabled) {\n this.#setRangeSelection(year, month, day);\n\n this.day = day;\n\n if (stringToNumber(month) !== this.month || this.localeAPI?.isIslamic()) {\n this.month = month;\n }\n\n if (stringToNumber(year) !== this.year || this.localeAPI?.isIslamic()) {\n this.year = year;\n }\n\n this.focus();\n this.#triggerSelectedEvent();\n }\n }\n\n /**\n * Add given year, month, day to the range selection\n * @param {number} year to add to the range selection\n * @param {number} month to add to the range selection\n * @param {number} day to add to the range selection\n */\n #setRangeSelection(year: number, month: number, day: number | undefined): void {\n if (!this.useRange) return;\n\n const date = new Date(year, month, day);\n const dateTime = date.getTime();\n const diff = this.rangeSettings.start ? daysDiff(this.rangeSettings.start, date) : 0;\n const rangeStarted = this.rangeSettings.start && !this.rangeSettings.end;\n const canSelectBoth = !(this.rangeSettings.selectBackward || this.rangeSettings.selectForward);\n const selectBackward = this.rangeSettings.selectBackward && diff < 0;\n const selectForward = this.rangeSettings.selectForward && diff > 0;\n const startDate = new Date(this.rangeSettings.start as string);\n const startTime = startDate.getTime();\n const minDays = this.rangeSettings.minDays;\n const maxDays = this.rangeSettings.maxDays;\n const minRangeExceeded = (minDays as number) > 0 && Math.abs(diff) < (minDays as number);\n const maxRangeExceeded = (maxDays as number) > 0 && Math.abs(diff) > (maxDays as number);\n const minRangeDate = diff >= 0\n ? addDate(startDate, (minDays as number), 'days')\n : subtractDate(startDate, (minDays as number), 'days');\n\n this.selectDay(year, month, day);\n\n if (this.rangeSettings.selectWeek) {\n return;\n }\n\n // Start is set\n if (rangeStarted && !maxRangeExceeded && (canSelectBoth || selectBackward || selectForward)) {\n if (minRangeExceeded) {\n this.rangeSettings.end = dateTime >= startTime ? minRangeDate.getTime() : this.rangeSettings.start;\n this.rangeSettings.start = subtractDate(this.rangeSettings.end, (minDays as number), 'days');\n\n this.#renderRangeSelection();\n\n return;\n }\n\n this.rangeSettings.end = dateTime >= startTime ? dateTime : this.rangeSettings.start;\n this.rangeSettings.start = dateTime <= startTime ? dateTime : this.rangeSettings.start;\n\n this.#renderRangeSelection();\n // Start not set or both not set\n } else {\n this.rangeSettings.start = dateTime;\n this.rangeSettings.end = null;\n\n this.#clearRangeClasses();\n }\n }\n\n /**\n * Helper to clear range selection CSS classes\n */\n #clearRangeClasses(): void {\n this.container?.querySelectorAll('td')\n .forEach(\n (item: HTMLElement) => item.classList.remove(\n 'range-next',\n 'range-prev',\n 'range-selection',\n 'not-included'\n )\n );\n }\n\n /**\n * Add CSS classes and selected attrs to tables cells when range selection is completed\n */\n #renderRangeSelection(): void {\n if (!this.useRange) return;\n const startRange = new Date(this.rangeSettings.start);\n const endRange = new Date(this.rangeSettings.end);\n const days = this.rangeSettings.end ? daysDiff(startRange, endRange) : 0;\n\n this.#clearRangeClasses();\n\n Array.from({ length: days + 1 }).forEach((_, index) => {\n const rangeDay = addDate(startRange, index, 'days');\n const selectedQuery = [\n 'td',\n `[data-year=\"${rangeDay.getFullYear()}\"]`,\n `[data-month=\"${rangeDay.getMonth()}\"]`,\n `[data-day=\"${rangeDay.getDate()}\"]`\n ].join('');\n const element = this.container?.querySelector(selectedQuery);\n\n element?.classList.add('range-selection');\n\n if (!this.rangeSettings.includeDisabled) {\n element?.classList.add('not-included');\n }\n\n if ((index === 0 || index === days) && !this.rangeSettings.selectWeek) {\n element?.setAttribute('aria-selected', 'true');\n element?.setAttribute('role', 'gridcell');\n element?.classList.add('is-selected');\n }\n });\n }\n\n /**\n * Helper to check if date is in the range selection\n * @param {Date} date to check if is in range selection\n * @returns {boolean} whether the date is in range selection\n */\n #isRangeByDate(date: Date): boolean {\n const startRange = new Date(this.rangeSettings.start);\n const endRange = new Date(this.rangeSettings.end);\n\n return date.getTime() >= startRange.getTime()\n && date.getTime() <= endRange.getTime();\n }\n\n /**\n * Helper to handle week selection\n * @param {string|number} year to add to the range selection\n * @param {string|number} month to add to the range selection\n * @param {string|number} day to add to the range selection\n */\n #rangeSelectWeek(\n year: string | number | undefined,\n month: string | number | undefined,\n day: string | number | undefined\n ): void {\n const firstDayOfWeek: Date = firstDayOfWeekDate(\n new Date(year as number, month as number, day as number),\n this.firstDayOfWeek\n );\n\n if (firstDayOfWeek.getTime() !== this.rangeSettings.start?.getTime()) {\n this.rangeSettings.start = firstDayOfWeek;\n this.rangeSettings.end = addDate(this.rangeSettings.start, WEEK_LENGTH - 1, 'days');\n\n this.selectDay();\n this.#renderRangeSelection();\n }\n }\n\n /**\n * Add CSS classes to table cells when range selection is in progress\n * Starting from the range settings start\n * @param {string|number} year to add to the range selection\n * @param {string|number} month to add to the range selection\n * @param {string|number} day to add to the range selection\n */\n #rangePropagation(\n year: string | number | undefined,\n month: string | number | undefined,\n day: string | number | undefined\n ): void {\n if (!this.useRange) return;\n\n if (this.rangeSettings.selectWeek) {\n this.#rangeSelectWeek(year, month, day);\n\n return;\n }\n\n if (this.rangeSettings.start && !(this.rangeSettings.end && this.rangeSettings.start)) {\n const startRange = new Date(this.rangeSettings.start);\n const endRange = new Date(year as number, month as number, day as number);\n const diff = daysDiff(startRange, endRange);\n\n this.#clearRangeClasses();\n\n const canSelectBoth = !(this.rangeSettings.selectBackward || this.rangeSettings.selectForward);\n const selectBackward = this.rangeSettings.selectBackward && diff < 0;\n const selectForward = this.rangeSettings.selectForward && diff > 0;\n const maxDays = this.rangeSettings.maxDays;\n const maxRangeExceeded = (maxDays as number) > 0 && Math.abs(diff) > (maxDays as number);\n\n if (diff !== 0 && !maxRangeExceeded && (canSelectBoth || selectBackward || selectForward)) {\n Array.from({ length: Math.abs(diff) }).forEach((_, index) => {\n const rangeDay = diff > 0\n ? addDate(startRange, index + 1, 'days')\n : subtractDate(startRange, index + 1, 'days');\n const selectedQuery = [\n 'td',\n `[data-year=\"${rangeDay.getFullYear()}\"]`,\n `[data-month=\"${rangeDay.getMonth()}\"]`,\n `[data-day=\"${rangeDay.getDate()}\"]`\n ].join('');\n\n this.container?.querySelector(selectedQuery)\n ?.classList.add(diff > 0 ? 'range-next' : 'range-prev');\n\n if (!this.rangeSettings.includeDisabled) {\n this.container?.querySelector(selectedQuery)?.classList.add('not-included');\n }\n });\n }\n }\n }\n\n /**\n * Defines if a date is in disabled settings\n * @param {Date} date to check\n * @returns {boolean} wheter or not the date is disabled\n */\n isDisabledByDate(date: Date): boolean {\n const {\n years,\n dayOfWeek,\n dates,\n minDate,\n maxDate,\n isEnable\n }: IdsDisableSettings = this.disableSettings;\n\n const isOutOfDisplayRange: boolean = this.#isDisplayRange()\n && (date < (this.startDate as Date) || date > (this.endDate as Date));\n const ifYear: boolean = (years as Array<number>).some(\n (item: number) => item === date?.getFullYear()\n );\n const ifDayOfWeek: boolean = (dayOfWeek as Array<number>).some(\n (item: number) => item === date?.getDay()\n );\n const ifDates: boolean = (dates as Array<string>).some(\n (item: string) => (new Date(item))?.getTime() === date?.getTime()\n );\n const ifMinMaxDate: boolean = date <= new Date(minDate as string) || date >= new Date(maxDate as string);\n const ifBySettings: boolean = ifYear || ifDayOfWeek || ifDates || ifMinMaxDate;\n const withReverse: boolean = isEnable ? !ifBySettings : ifBySettings;\n\n return withReverse || isOutOfDisplayRange;\n }\n\n /**\n * Helper to get month format for first day of a month or first day of the display range\n * @param {Date} date date to check\n * @param {Date} rangeStartsOn very first day of the display range\n * @returns {string|undefined} Intl.DateTimeFormat options month format (numeric, long, short)\n */\n #monthInDayFormat(date: Date, rangeStartsOn: Date): string | undefined {\n const isFirstDayOfRange = daysDiff(date, rangeStartsOn) === 0;\n const isFirstDayOfMonth = this.localeAPI?.isIslamic()\n ? gregorianToUmalqura(date).day === 1\n : date.getDate() === 1;\n\n if (this.#isDisplayRange() && (isFirstDayOfRange || isFirstDayOfMonth)) {\n return 'short';\n }\n\n return undefined;\n }\n\n /**\n * Table cell HTML template with locale, data attributes\n * @param {number} weekIndex number of week in month starting from 0\n * @returns {string} table cell HTML template\n */\n #getCellTemplate(weekIndex: number): string {\n const firstDayOfRange: Date = this.#isDisplayRange()\n ? (this.startDate as Date)\n : firstDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n const lastDayOfRange: Date = this.#isDisplayRange()\n ? (this.endDate as Date)\n : lastDayOfMonthDate(this.year, this.month, this.day, this.localeAPI?.isIslamic());\n const rangeStartsOn = firstDayOfWeekDate(firstDayOfRange, this.firstDayOfWeek);\n const firstDayOfWeek = addDate(rangeStartsOn, (weekIndex * WEEK_LENGTH), 'days');\n const now: Date = new Date();\n const isCompact = this.compact;\n\n const dayCells = Array.from({ length: WEEK_LENGTH }).map((_, index) => {\n const date: Date = addDate(rangeStartsOn, (weekIndex * WEEK_LENGTH) + index, 'days');\n const monthFormat: string | undefined = this.#monthInDayFormat(date, rangeStartsOn);\n const dayText: string = this.localeAPI?.formatDate(date, {\n day: 'numeric',\n month: monthFormat,\n numberingSystem: 'latn'\n });\n const ariaLabel: string = this.localeAPI?.formatDate(date, { dateStyle: 'full' });\n const day: number = date.getDate();\n const month: number = date.getMonth();\n const year: number = date.getFullYear();\n const dateMatch: boolean = day === this.day && year === this.year && month === this.month;\n const isSelected: boolean = !this.useRange && dateMatch;\n const isSelectedWithRange: boolean = this.useRange && !this.rangeSettings.start && dateMatch;\n const isDisabled: boolean = this.isDisabledByDate(date);\n const isAlternate: boolean = !this.#isDisplayRange() && (date < firstDayOfRange || date > lastDayOfRange);\n const legend: any = this.getLegendByDate(date);\n const isRangeSelection: boolean = this.#isRangeByDate(date);\n const isToday: boolean = year === now.getFullYear() && month === now.getMonth() && day === now.getDate();\n const classAttr: string = buildClassAttrib(\n isAlternate && 'alternate',\n legend && 'has-legend',\n isDisabled && 'is-disabled',\n (isSelected || isSelectedWithRange) && 'is-selected',\n monthFormat && 'month-label',\n isRangeSelection && 'range-selection',\n isToday && 'is-today'\n );\n const selectedAttr: string = isSelected || isSelectedWithRange\n ? 'aria-selected=\"true\" tabindex=\"0\" role=\"gridcell\"' : 'role=\"link\"';\n const dataAttr: string = [`data-year=\"${year}\"`, `data-month=\"${month}\"`, `data-day=\"${day}\"`].join(' ');\n const colorAttr: string = legend ? `data-color=\"${legend.color}\"` : '';\n const dateKey = this.generateDateKey(new Date(year, month, day));\n\n let cellTemplate = `<td aria-label=\"${ariaLabel}\" ${dataAttr} ${classAttr} ${selectedAttr} ${colorAttr}>\n <span class=\"day-container\">\n <ids-text\n aria-hidden=\"true\"\n class=\"day-text\"\n font-size=\"14\"\n >${dayText}</ids-text>\n </span>\n ${isCompact ? '' : `<div class=\"events-container\" data-key=\"${dateKey}\"></div>`}\n </td>`;\n if (typeof this.state.onDayRender === 'function') {\n cellTemplate = this.state.onDayRender(cellTemplate, dateKey);\n }\n return cellTemplate;\n }).join('');\n\n // Week number cell if enabled\n const weekNumCell = `<td class=\"week-num-cell\">\n <ids-text class=\"week-num-text\" font-size=\"14\">${weekNumber(firstDayOfWeek, this.firstDayOfWeek)}</ids-text>\n </td>`;\n const weekNumCellTemplate = this.showWeekNumbers ? weekNumCell : '';\n\n return `${weekNumCellTemplate}${dayCells}`;\n }\n\n /**\n * Add week days HTML to the table\n */\n #renderWeekDays(): void {\n const weekDayKeys = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n const weekDays = weekDayKeys.map((item) => this.localeAPI?.translate(`${this.compact ? 'DayNarrow' : 'DayAbbreviated'}${item}`));\n const weekDaysWide = weekDayKeys.map((item) => this.localeAPI?.translate(`DayWide${item}`));\n\n // Week number header if enabled\n const weekNumHeader = `<th scope=\"col\" class=\"week-num-cell\">\n <ids-text class=\"week-num-text\" font-size=\"14\">W#</ids-text>\n </th>`;\n let weekDaysTemplate = this.showWeekNumbers ? weekNumHeader : '';\n\n weekDaysTemplate += weekDays.map((el: any, index: number) => {\n const idx = (index + this.firstDayOfWeek) % WEEK_LENGTH;\n const weekday = weekDays[idx];\n const weekdaywide = weekDaysWide[idx];\n\n return `\n <th scope=\"col\" abbr=\"${weekdaywide}\">\n <ids-text\n class=\"weekday-text\"\n font-size=\"14\"\n >${weekday}</ids-text>\n </th>\n `;\n }).join('');\n\n // Clear/add HTML\n this.container?.querySelectorAll('thead th').forEach((el: Element) => el.remove());\n this.container?.querySelector('thead tr')?.insertAdjacentHTML('beforeend', weekDaysTemplate);\n }\n\n /**\n * Add month HTML to the table\n */\n #renderMonth(): void {\n const weeksCount = this.#isDisplayRange()\n ? weeksInRange(this.startDate, this.endDate, this.firstDayOfWeek)\n : weeksInMonth(this.year, this.month, this.day, this.firstDayOfWeek, this.localeAPI?.isIslamic());\n this.triggerEvent('beforerendermonth', this, {\n bubbles: true,\n detail: { elem: this }\n });\n\n const rowsTemplate = Array.from({ length: weeksCount }).map((_, weekIndex) => `<tr>${this.#getCellTemplate(weekIndex)}</tr>`).join('');\n\n // Clear/add HTML\n this.container?.querySelectorAll('tbody tr').forEach((el: Element) => el.remove());\n this.container?.querySelector('tbody')?.insertAdjacentHTML('beforeend', rowsTemplate);\n\n this.#renderWeekDays();\n this.#colorToVar();\n this.state.hasRendered = true;\n\n if (!this.compact && !this.isDatePicker) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.renderEventsData();\n }\n\n this.#lastRenderedYear = this.year;\n this.#lastRenderedMonth = this.month;\n this.#lastRenderedDay = this.day;\n this.#lastRenderedFirstDayOfWeek = this.firstDayOfWeek;\n\n this.triggerEvent('afterrendermonth', this, {\n bubbles: true,\n detail: { elem: this }\n });\n }\n\n /**\n * Gets calendar events within the selected/active day\n * @returns {CalendarEventData[]} calendar events data\n */\n getActiveDayEvents(): CalendarEventData[] {\n const activeDay = this.getSelectedDay();\n let eventElems = activeDay ? [...activeDay.querySelectorAll('ids-calendar-event')] : [];\n if (this.#isCustom && activeDay) {\n const customCalendarEvents: any = activeDay.querySelectorAll('.events-container > [slot]');\n eventElems = activeDay ? [...customCalendarEvents] : [];\n }\n const events = eventElems.map((elem: any) => elem.eventData);\n\n return events;\n }\n\n /**\n * Trigger selected event with current params\n * @returns {void}\n */\n #triggerSelectedEvent(): void {\n if (this.isDisabledByDate(this.activeDate)) {\n return;\n }\n\n const args: IdsDayselectedEvent = {\n detail: {\n elem: this,\n date: this.activeDate,\n useRange: this.useRange,\n rangeStart: this.useRange && this.rangeSettings.start ? new Date(this.rangeSettings.start) : null,\n rangeEnd: this.useRange && this.rangeSettings.end ? new Date(this.rangeSettings.end) : null,\n value: this.getFormattedDate(this.activeDate)\n },\n bubbles: true,\n cancelable: true,\n composed: true\n };\n\n // For full-sized non datepicker month view\n if (!this.compact && !this.isDatePicker) {\n args.detail.events = this.getActiveDayEvents();\n }\n\n this.triggerEvent('dayselected', this, args);\n }\n\n /**\n * Add selectable attribute to active day\n * @param {number} year a given year\n * @param {number} month a given month\n * @param {number} day a given day\n */\n selectDay(year?: any, month?: any, day?: any): void {\n // Clear before\n this.#makeAllDeselected();\n const selectedQuery = `td[data-year=\"${year}\"][data-month=\"${month}\"][data-day=\"${day}\"]`;\n const selected = this.container?.querySelector<HTMLTableCellElement>(selectedQuery);\n if (selected) this.#makeSelected(selected);\n }\n\n /**\n * Makes a specified day in the Month View table appear \"selected\"\n * @param {HTMLTableCellElement} elem the element to make appear \"selected\"\n * @returns {void}\n */\n #makeSelected(elem: HTMLTableCellElement): void {\n if (!elem) return;\n elem.setAttribute(attributes.TABINDEX, '0');\n elem.setAttribute('aria-selected', 'true');\n elem.setAttribute('role', 'gridcell');\n elem.classList.add('is-selected');\n }\n\n /**\n * Makes a specified day in the Month View table appear \"selected\"\n * @param {HTMLTableCellElement} elem the element to make appear \"selected\"\n * @returns {void}\n */\n #makeDeselected(elem: HTMLTableCellElement): void {\n if (!elem) return;\n elem.removeAttribute(attributes.TABINDEX);\n elem.removeAttribute('aria-selected');\n elem.setAttribute('role', 'link');\n elem.classList.remove('is-selected');\n }\n\n /**\n * Clears all previously-selected days from the Month View\n */\n #makeAllDeselected(): void {\n this.container?.querySelectorAll<HTMLTableCellElement>('td.is-selected')?.forEach((item: HTMLTableCellElement) => {\n this.#makeDeselected(item);\n });\n }\n\n /**\n * Whether or not it should show range of dates instead of one month view\n * @returns {boolean} startDate and endDate are set\n */\n #isDisplayRange(): boolean {\n return isValidDate(this.startDate)\n && isValidDate(this.endDate)\n && (this.endDate as Date) >= (this.startDate as Date);\n }\n\n /**\n * Helper to check if the month has a day\n * @param {number} day to check\n * @returns {number} day of the month either active or first\n */\n #getDayInMonth(day: number): number {\n const numberOfDays = daysInMonth(this.year, this.month);\n\n return day > numberOfDays ? 1 : day;\n }\n\n /**\n * Iterate legend items with color data and add color css variable\n */\n #colorToVar(): void {\n this.container?.querySelectorAll('[data-color]')\n .forEach((el: any) => {\n const color = el.dataset.color;\n const isHex = color?.includes('#');\n\n if (color) {\n el.style = `--legend-color: ${isHex ? color : `var(--ids-color-${color})`}`;\n }\n });\n }\n\n /**\n * Queries selected day cell element\n * @returns {HTMLElement} selected day\n */\n getSelectedDay(): HTMLTableCellElement | null {\n const selectedQuery = `td[data-year=\"${this.year}\"][data-month=\"${this.month}\"][data-day=\"${this.day}\"]`;\n return this.container?.querySelector(selectedQuery) || null;\n }\n\n /**\n * Focuses the active/selected day\n * @returns {void}\n */\n focus(): void {\n const selectedDay = this.getSelectedDay();\n if (selectedDay) {\n const isDisabled = selectedDay.classList.contains('is-disabled');\n if (!isDisabled) {\n this.#makeAllDeselected();\n this.#makeSelected(selectedDay);\n setTimeout(() => selectedDay.focus(), 10);\n }\n }\n }\n\n /**\n * Inherited from `IdsDateAttributeMixin`\n * @returns {void}\n */\n onFirstDayOfWeekChange() {\n if (this.container && this.firstDayOfWeek !== this.#lastRenderedFirstDayOfWeek) {\n this.#renderMonth();\n }\n }\n\n /**\n * Inherited from `IdsDateAttributeMixin`\n * @returns {void}\n */\n onMonthChange() {\n if (!this.container) return;\n\n // Month change in range calendar doesn't trigger a rerender, just selects a day\n if (this.#isDisplayRange()) {\n this.selectDay(this.year, this.month, this.day);\n } else if (this.month !== this.#lastRenderedMonth) {\n this.#renderMonth();\n this.#renderRangeSelection();\n }\n }\n\n /**\n * Inherited from `IdsDateAttributeMixin`\n * @returns {void}\n */\n onYearChange() {\n if (!this.container) return;\n\n // Year change in range calendar doesn't trigger a rerender, just selects a day\n if (this.#isDisplayRange()) {\n this.selectDay(this.year, this.month, this.day);\n } else if (this.year !== this.#lastRenderedYear) {\n this.#renderMonth();\n this.#renderRangeSelection();\n }\n }\n\n /**\n * Inherited from `IdsDateAttributeMixin`\n * @param {number} numberVal new value\n * @param {boolean} validates true if the new value passed is valid\n * @returns {void}\n */\n onDayChange(numberVal: number, validates: boolean) {\n if (!this.container || this.day === this.#lastRenderedDay) return;\n\n if (!(this.rangeSettings.start || this.useRange) && !this.isDatePicker) {\n this.selectDay(this.year, this.month, validates ? numberVal : this.day);\n }\n }\n\n /**\n * start-date attribute\n * @returns {Date | null} startDate date parsed from attribute value\n */\n get startDate(): Date | null {\n const attrVal = this.getAttribute(attributes.START_DATE) ?? '';\n const attrDate = new Date(attrVal);\n\n if (attrVal && isValidDate(attrDate)) {\n return attrDate;\n }\n\n return null;\n }\n\n /**\n * Set start of the range to show\n * @param {string | Date | null} val startDate param value\n */\n set startDate(val: string | Date | null) {\n if (val) {\n this.setAttribute(attributes.START_DATE, String(val));\n } else {\n this.removeAttribute(attributes.START_DATE);\n }\n\n if (this.container) {\n this.#renderMonth();\n this.#attachKeyboardListeners();\n }\n }\n\n /**\n * end-date attribute\n * @returns {Date|null} endDate date parsed from attribute value\n */\n get endDate(): Date | null {\n const attrVal = this.getAttribute(attributes.END_DATE) ?? '';\n const attrDate = new Date(attrVal);\n\n if (attrVal && isValidDate(attrDate)) {\n return attrDate;\n }\n\n return null;\n }\n\n /**\n * Set end of the range to show\n * @param {Date | string | null} val endDate param value\n */\n set endDate(val: Date | string | null) {\n if (val) {\n this.setAttribute(attributes.END_DATE, String(val));\n } else {\n this.removeAttribute(attributes.END_DATE);\n }\n\n if (this.container) {\n this.#renderMonth();\n this.#attachKeyboardListeners();\n }\n }\n\n /**\n * compact attribute\n * @returns {boolean} compact param converted to boolean from attribute value\n */\n get compact(): boolean {\n const attrVal = this.getAttribute(attributes.COMPACT);\n\n return stringToBool(attrVal);\n }\n\n /**\n * Set whether or not the component should be compact view\n * @param {string|boolean|null} val compact param value\n */\n set compact(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n\n if (boolVal) {\n this.setAttribute(attributes.COMPACT, 'true');\n } else {\n this.removeAttribute(attributes.COMPACT);\n }\n\n // Toggle container CSS class\n this.container?.classList.toggle('is-fullsize', !boolVal);\n this.container?.classList.toggle('is-compact', boolVal);\n\n if (this.container) {\n // Render related views\n this.#renderWeekDays();\n }\n }\n\n /**\n * show-apply attribute\n * @returns {boolean} showCancel param converted to boolean from attribute value\n */\n get showApply(): boolean {\n return stringToBool(this.getAttribute(attributes.SHOW_APPLY));\n }\n\n /**\n * Set whether or not to show cancel button when the picker is expanded\n * @param {string|boolean|null} val show-cancel attribute value\n */\n set showApply(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n if (boolVal) {\n this.setAttribute(attributes.SHOW_APPLY, 'true');\n } else {\n this.removeAttribute(attributes.SHOW_APPLY);\n }\n }\n\n set showWeekNumbers(val: boolean | null) {\n if (stringToBool(val)) {\n this.setAttribute(attributes.SHOW_WEEK_NUMBERS, '');\n } else {\n this.removeAttribute(attributes.SHOW_WEEK_NUMBERS);\n }\n }\n\n get showWeekNumbers(): boolean {\n return stringToBool(this.getAttribute(attributes.SHOW_WEEK_NUMBERS));\n }\n\n /**\n * is-date-picker attribute\n * @returns {boolean} isDatePicker param converted to boolean from attribute value\n */\n get isDatePicker(): boolean {\n const attrVal = this.getAttribute(attributes.IS_DATEPICKER);\n\n return stringToBool(attrVal);\n }\n\n /**\n * Set whether or not the component is used in datepicker popup\n * @param {string|boolean|null} val compact param value\n */\n set isDatePicker(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n\n if (boolVal) {\n this.setAttribute(attributes.IS_DATEPICKER, 'true');\n } else {\n this.removeAttribute(attributes.IS_DATEPICKER);\n }\n\n // Toggle container CSS class\n this.container?.classList.toggle('is-date-picker', boolVal);\n }\n\n onDisableSettingsChange() {\n this.#renderMonth();\n }\n\n onLegendSettingsChange(val: IdsLegendSettings) {\n if (!this.container) return;\n\n this.#renderMonth();\n this.#renderLegend();\n this.container.classList[val && val.length ? 'add' : 'remove']('has-legend');\n }\n\n onRangeSettingsChange(val: IdsRangeSettings) {\n if (!this.container) return;\n\n if (this.useRange && val?.start) {\n this.selectDay();\n } else {\n this.year = this.#lastRenderedYear;\n this.month = this.#lastRenderedMonth;\n this.day = this.#lastRenderedDay;\n\n this.#clearRangeClasses();\n this.selectDay(this.year, this.month, this.day);\n }\n\n this.container.classList.toggle('range-select-week', this.rangeSettings.selectWeek);\n this.#renderMonth();\n this.#renderRangeSelection();\n }\n\n onUseRangeChange(newValue: boolean) {\n if (newValue) {\n this.selectDay();\n this.#renderRangeSelection();\n } else {\n this.#clearRangeClasses();\n this.selectDay(this.year, this.month, this.day);\n }\n }\n\n /**\n * show-picklist-year attribute, default is true\n * @returns {boolean} showPicklistYear param converted to boolean from attribute value\n */\n get showPicklistYear(): boolean {\n const attrVal = this.getAttribute(attributes.SHOW_PICKLIST_YEAR);\n\n if (attrVal) {\n return stringToBool(attrVal);\n }\n\n return true;\n }\n\n /**\n * Whether or not to show a list of years in the toolbar datepicker picklist\n * @param {string | boolean | null} val value to be set as show-picklist-year attribute converted to boolean\n */\n set showPicklistYear(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n\n this.setAttribute(attributes.SHOW_PICKLIST_YEAR, String(boolVal));\n }\n\n /**\n * show-picklist-month attribute, default is true\n * @returns {boolean} showPicklistMonth param converted to boolean from attribute value\n */\n get showPicklistMonth(): boolean {\n const attrVal = this.getAttribute(attributes.SHOW_PICKLIST_MONTH);\n\n if (attrVal) {\n return stringToBool(attrVal);\n }\n\n return true;\n }\n\n /**\n * Whether or not to show a list of months in the toolbar datepicker picklist\n * @param {string | boolean | null} val value to be set as show-picklist-month attribute converted to boolean\n */\n set showPicklistMonth(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n\n this.setAttribute(attributes.SHOW_PICKLIST_MONTH, String(boolVal));\n }\n\n /**\n * show-picklist-week attribute\n * @returns {boolean} showPicklistWeek param converted to boolean from attribute value\n */\n get showPicklistWeek(): boolean {\n return stringToBool(this.getAttribute(attributes.SHOW_PICKLIST_WEEK));\n }\n\n /**\n * Whether or not to show week numbers in the toolbar datepicker picklist\n * @param {string | boolean | null} val value to be set as show-picklist-week attribute converted to boolean\n */\n set showPicklistWeek(val: string | boolean | null) {\n const boolVal = stringToBool(val);\n\n if (boolVal) {\n this.setAttribute(attributes.SHOW_PICKLIST_WEEK, 'true');\n } else {\n this.removeAttribute(attributes.SHOW_PICKLIST_WEEK);\n }\n }\n\n /**\n * Remove month view calendar events and overflow elements\n */\n removeAllEvents(): void {\n this.container\n ?.querySelectorAll('.events-container')\n .forEach((container: Element) => { container.innerHTML = ''; });\n }\n\n /**\n * Groups calendar events by day using dateKey as key\n * @param {CalendarEventData[]} events calendar events data\n * @returns {Record<string, Array<CalendarEventData>>} collection of calendar events\n */\n #groupEventsByDay(events: CalendarEventData[]): Record<string, Array<CalendarEventData>> {\n const dayEvents: Record<string, Array<CalendarEventData>> = {};\n\n events.forEach((event: CalendarEventData) => {\n const dateKey = this.generateDateKey(new Date(event.starts)).toString();\n if (!dayEvents[dateKey]) dayEvents[dateKey] = [];\n dayEvents[dateKey].push(event);\n });\n\n return dayEvents;\n }\n\n /**\n * Filter calendar events data by current month\n * @param {CalendarEventData[]} data calendar events data\n * @returns {CalendarEventData[]} calendar events within month\n */\n filterEventsByMonth(data: CalendarEventData[] = []): CalendarEventData[] {\n return data.filter((event) => {\n const eventStart = new Date(event.starts);\n return this.startDate && this.endDate ? this.startDate <= eventStart && eventStart < this.endDate\n : eventStart.getMonth() === this.month && eventStart.getFullYear() === this.year;\n });\n }\n\n /**\n * Render Calendar Events data inside month view\n * @param {boolean} forceRender skip data fetch\n */\n async renderEventsData(forceRender = false): Promise<void> {\n if (!forceRender && typeof this.state.beforeEventsRender === 'function') {\n const startDate = this.startDate || new Date(this.year, this.month, 1);\n const endDate = this.endDate || new Date(this.year, this.month + 1, 0);\n this.eventsData = await this.state.beforeEventsRender(startDate, endDate);\n return;\n }\n\n this.removeAllEvents();\n\n if (!this.state.hasRendered || !this.eventsData?.length) return;\n\n const eventsInRange = this.filterEventsByMonth(this.eventsData);\n const monthEvents = this.#groupEventsByDay(eventsInRange);\n\n const customCalendarEvent: any = this.querySelector('[slot=\"customCalendarEvent\"]');\n for (const dateKey in monthEvents) {\n if (monthEvents.hasOwnProperty(dateKey)) {\n this.#renderDayEvents(dateKey, monthEvents[dateKey], customCalendarEvent);\n }\n }\n\n this.triggerEvent('eventsrendered', this, {\n detail: { eventsData: eventsInRange },\n bubbles: true,\n composed: true\n });\n }\n\n /**\n * Counts number of days for calendar events\n * @param {Date} start start date\n * @param {Date} end end date\n * @returns {number} days\n */\n #countDays(start: Date, end: Date): number {\n return Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));\n }\n\n /**\n * Renders calendar events within corresponding date's table cell\n * @param {string} dateKey generated date key\n * @param {CalendarEventData[]} events calendar events\n * @param {any} customCalendarEvent custom calendar events\n */\n #renderDayEvents(dateKey: string, events: CalendarEventData[], customCalendarEvent?: any): void {\n if (!this.container) return;\n\n const eventsContainer = this.container?.querySelector(`.events-container[data-key=\"${dateKey}\"]`);\n const orders = [...(eventsContainer?.childNodes) || []].map((elem: any) => elem.order);\n const baseOrder = orders.length ? Math.max(...orders) + 1 : 0;\n let isOverflowing = false;\n events.forEach((event: CalendarEventData, index: number) => {\n const start = new Date(event.starts);\n const end = new Date(event.ends);\n const days = this.#countDays(start, end) || 1;\n\n for (let i = 0; i < days; i++) {\n const calendarEvent = this.#newCalendarEvent(customCalendarEvent);\n const eventType = this.eventTypesData?.find((et: CalendarEventTypeData) => et.id === event.type) ?? null;\n const eventOrder = baseOrder + index;\n calendarEvent.eventTypeData = eventType;\n calendarEvent.eventData = event;\n calendarEvent.cssClass = ['is-month-view'];\n calendarEvent.order = eventOrder;\n\n if (i > 0) {\n start.setDate(start.getDate() + 1);\n }\n\n const day = start.getDate();\n const year = start.getFullYear();\n const month = start.getMonth();\n calendarEvent.dateKey = `${year}${month}${day}`;\n const dateCell = this.container?.querySelector(`td[data-year=\"${year}\"][data-month=\"${month}\"][data-day=\"${day}\"]`);\n calendarEvent.disabled = !!dateCell?.classList.contains('is-disabled');\n\n if (dateCell) {\n // multi day events\n if (days > 1) {\n const extraCss = ['all-day'];\n\n if (i === 0) {\n extraCss.push('calendar-event-start');\n } else if (i === days - 1) {\n extraCss.push('calendar-event-ends');\n } else {\n extraCss.push('calendar-event-continue');\n }\n\n calendarEvent.cssClass = extraCss;\n }\n\n const eventYOffset = this.generateYOffset(calendarEvent);\n calendarEvent.setAttribute(attributes.Y_OFFSET, `${eventYOffset}px`);\n // hide overflowing event\n isOverflowing = this.isEventOverflowing(calendarEvent);\n calendarEvent.hidden = isOverflowing;\n dateCell.querySelector('.events-container')?.appendChild(calendarEvent as any);\n\n const container = dateCell.querySelector('.events-container');\n this.triggerEvent('beforeeventrendered', this, {\n detail:\n {\n elem: this,\n events: this.eventsData,\n event: calendarEvent,\n dateCell: calendarEvent,\n container\n },\n bubbles: true\n });\n container?.appendChild(calendarEvent as any);\n this.triggerEvent('aftereventrendered', this, {\n detail:\n {\n elem: this,\n events: this.eventsData,\n event: calendarEvent,\n dateCell: calendarEvent,\n container\n },\n bubbles: true\n });\n }\n }\n });\n\n if (isOverflowing && eventsContainer) {\n this.#renderEventsOverflow(eventsContainer, dateKey);\n }\n }\n\n /**\n * Renders clickable event overflow element\n * Specifies number of calendar events overflowing the container\n * @param {Element} eventsContainer date specific event container elemeent\n * @param {string} dateKey generated date key\n */\n #renderEventsOverflow(eventsContainer: any, dateKey: string): void {\n if (!eventsContainer) return;\n\n const calendarEvents = [...eventsContainer.childNodes];\n const hiddenEvents = calendarEvents.filter((elem: IdsCalendarEvent) => elem.hidden);\n const year = dateKey.substring(0, 4);\n const month = parseInt(dateKey.substring(4, 6)) + 1;\n const day = dateKey.substring(6);\n const date = `${month}/${day}/${year}`;\n const tmpl = `\n <ids-text data-date=\"${date}\" class=\"events-overflow\" font-size=\"12\">\n ${hiddenEvents.length}+ ${this.localeAPI.translate('More')}\n </ids-text>\n `;\n\n eventsContainer.insertAdjacentHTML('beforeend', tmpl);\n }\n\n /**\n * Generates new IdsCalendarEvent\n * @param {IdsCalendarEvent} customCalendarEvent optional custom event to use instead of default\n * @returns {IdsCalendarEvent} calendar event\n */\n #newCalendarEvent(customCalendarEvent?: any): any {\n if (customCalendarEvent?.name === 'MonthViewCalendarEventTemplate') {\n const eventTemplate = customCalendarEvent.assignedNodes()[0];\n if (eventTemplate) {\n this.#isCustom = true;\n return eventTemplate.cloneNode(true);\n }\n }\n return new IdsCalendarEvent();\n }\n\n /**\n * Selects the Month View's current day from a stringified date\n * @param {string} val string representation of a date\n */\n selectDayFromValue(val: string) {\n let usableValue = val;\n if (this.useRange && this.rangeSettings.separator && this.rangeSettings.end) {\n usableValue = removeDateRange(val, this.rangeSettings.separator);\n }\n\n const { month, day, year } = getDateValuesFromString(usableValue);\n this.day = day;\n this.month = month;\n this.year = year;\n\n if (this.useRange) {\n this.selectDay();\n this.#renderRangeSelection();\n } else {\n this.#clearRangeClasses();\n this.selectDay(year, month, day);\n }\n }\n\n /**\n * Function that fires as the day cell is rendered.\n * @returns {Function} the function to call\n */\n public get onDayRender() {\n return this.state.onDayRender;\n }\n\n public set onDayRender(func) {\n this.state.onDayRender = func;\n }\n\n /**\n * Calculates the event Y_OFFSET value to set the event pill top position\n * @param {IdsCalendarEvent} event IdsCalendarEvent\n * @returns {number} yOffset\n */\n generateYOffset(event: IdsCalendarEvent): number {\n return (event.order * 16) + BASE_Y_OFFSET;\n }\n\n /**\n * Checks if the event pills exceed the MAX_EVENT_COUNT in a day cell\n * @param {IdsCalendarEvent} event IdsCalendarEvent\n * @returns {boolean} isEventOverflowing\n */\n isEventOverflowing(event: IdsCalendarEvent): boolean {\n return event.order > MAX_EVENT_COUNT - 1;\n }\n}\n\nexport default IdsMonthView;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAO,yBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
|
|
6
6
|
"names": ["ids_month_view_default"]
|
|
7
7
|
}
|