@agorapulse/ui-components 22.2.11 → 22.2.12
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/agorapulse-ui-components-22.2.12.tgz +0 -0
- package/fesm2022/agorapulse-ui-components-datepicker.mjs +16 -4
- package/fesm2022/agorapulse-ui-components-datepicker.mjs.map +1 -1
- package/package.json +2 -2
- package/types/agorapulse-ui-components-datepicker.d.ts +3 -0
- package/agorapulse-ui-components-22.2.11.tgz +0 -0
|
Binary file
|
|
@@ -406,8 +406,18 @@ class DatepickerComponent {
|
|
|
406
406
|
const chosen = this.datepickerRef?.chosenRange;
|
|
407
407
|
return chosen ? this.presets().find(preset => preset.label === chosen) : undefined;
|
|
408
408
|
}
|
|
409
|
+
/** The vendor's own arrows stop at `minDate`/`maxDate`; ours replace them and must stop there too. */
|
|
410
|
+
get canGoToPreviousMonth() {
|
|
411
|
+
return !this.minDateValue || this.datepickerRef.leftCalendar.month.isAfter(this.minDateValue, 'month');
|
|
412
|
+
}
|
|
413
|
+
get canGoToNextMonth() {
|
|
414
|
+
const lastMonth = this.mode === DatepickerMode.Range ? this.datepickerRef.rightCalendar.month : this.datepickerRef.leftCalendar.month;
|
|
415
|
+
return !this.maxDateValue || lastMonth.isBefore(this.maxDateValue, 'month');
|
|
416
|
+
}
|
|
409
417
|
onNextMonth() {
|
|
410
|
-
this.
|
|
418
|
+
if (this.canGoToNextMonth) {
|
|
419
|
+
this.datepickerRef.clickNext(SideEnum.right);
|
|
420
|
+
}
|
|
411
421
|
}
|
|
412
422
|
onLeftMonthPicked(picked) {
|
|
413
423
|
this.moveCalendarTo(picked, SideEnum.left);
|
|
@@ -425,7 +435,9 @@ class DatepickerComponent {
|
|
|
425
435
|
this.changeDetectorRef.detectChanges();
|
|
426
436
|
}
|
|
427
437
|
onPreviousMonth() {
|
|
428
|
-
this.
|
|
438
|
+
if (this.canGoToPreviousMonth) {
|
|
439
|
+
this.datepickerRef.clickPrev(SideEnum.left);
|
|
440
|
+
}
|
|
429
441
|
}
|
|
430
442
|
/**
|
|
431
443
|
* Ugly hack used here to open the calendar on the right day if they are selected dates
|
|
@@ -444,11 +456,11 @@ class DatepickerComponent {
|
|
|
444
456
|
this.changeDetectorRef.detectChanges();
|
|
445
457
|
}
|
|
446
458
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: DatepickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SymbolRegistry }], target: i0.ɵɵFactoryTarget.Component });
|
|
447
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: DatepickerComponent, isStandalone: true, selector: "ap-datepicker", inputs: { firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: false, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: false, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: false, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: false, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: false, isRequired: true, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: false, isRequired: false, transformFunction: null }, selectedDates: { classPropertyName: "selectedDates", publicName: "selectedDates", isSignal: false, isRequired: false, transformFunction: null }, selectedPeriod: { classPropertyName: "selectedPeriod", publicName: "selectedPeriod", isSignal: false, isRequired: false, transformFunction: null }, dateLimit: { classPropertyName: "dateLimit", publicName: "dateLimit", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateSelected: "dateSelected", periodSelected: "periodSelected" }, viewQueries: [{ propertyName: "datepickerRef", first: true, predicate: ["datepickerRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"custom-calendar\"\n [class.single-month]=\"mode !== DatepickerMode.Range\">\n <div class=\"custom-header\">\n @if (datepickerRef.leftCalendar.month) {\n <div class=\"month-header\">\n <ap-icon-button\n symbolId=\"arrow-left\"\n ariaLabel=\"Previous month\"\n (onClick)=\"onPreviousMonth()\" />\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"leftMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.leftCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #leftMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.leftCalendar.month.month()\"\n [year]=\"datepickerRef.leftCalendar.month.year()\"\n (monthSelected)=\"onLeftMonthPicked($event)\" />\n <!-- Outside Range a single month is rendered, so both arrows frame its header. -->\n @if (mode !== DatepickerMode.Range) {\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n (onClick)=\"onNextMonth()\" />\n }\n </div>\n }\n @if (mode === DatepickerMode.Range && datepickerRef.rightCalendar.month) {\n <div class=\"month-header\">\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"rightMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.rightCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #rightMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.rightCalendar.month.month()\"\n [year]=\"datepickerRef.rightCalendar.month.year()\"\n (monthSelected)=\"onRightMonthPicked($event)\" />\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n (onClick)=\"onNextMonth()\" />\n </div>\n }\n </div>\n <!--\n `showDropdowns` is on not for its own selects \u2014 those render into the header row we hide \u2014\n but because the vendor only maintains `calendarVariables[side].dropdowns` while it is, and\n that is what `monthOrYearChanged` reads to move a calendar.\n -->\n <ngx-daterangepicker-material\n #datepickerRef\n [class.hide-ranges]=\"!hasPresets\"\n [alwaysShowCalendars]=\"true\"\n [autoApply]=\"true\"\n [customRangeDirection]=\"true\"\n [dateLimit]=\"dateLimit() ?? 0\"\n [linkedCalendars]=\"true\"\n [isCustomDate]=\"$any(isCustomDate)\"\n [locale]=\"localeConfig\"\n [maxDate]=\"maxDateStr\"\n [minDate]=\"minDateStr\"\n [ranges]=\"vendorRanges\"\n [showCustomRangeLabel]=\"false\"\n [showDropdowns]=\"true\"\n [singleDatePicker]=\"mode !== DatepickerMode.Range\"\n (datesUpdated)=\"onDatesUpdated($event)\"\n (startDateChanged)=\"onStartDateChanged($event)\" />\n</div>\n", styles: ["::ng-deep .custom-calendar{display:flex;flex-direction:column;width:max-content;height:fit-content;border-radius:var(--ref-border-radius-md);background-color:var(--ref-color-white);font-family:var(--sys-text-style-body-font-family)}::ng-deep .custom-calendar.single-month .md-drppicker .calendar.right{padding-left:0}::ng-deep .custom-calendar.single-month .custom-header{width:224px}::ng-deep .custom-calendar.single-month .custom-header .month-header:first-child{padding-right:0}::ng-deep .custom-calendar .custom-header{display:flex;align-items:center;width:calc(14 * 32px + 2 * var(--ref-spacing-sm) + 1px);height:var(--comp-icon-button-height);gap:calc(2 * var(--ref-spacing-sm) + 1px);color:var(--ref-color-grey-100);font-size:var(--sys-text-style-body-bold-size);font-weight:var(--sys-text-style-body-bold-weight);line-height:var(--sys-text-style-body-bold-line-height);text-transform:capitalize}::ng-deep .custom-calendar .custom-header ap-icon-button button:focus:not(.disabled):not(:active),::ng-deep .custom-calendar .custom-header .month-label button:focus:not(:disabled):not(:active):not(.loading){outline:none}::ng-deep .custom-calendar .custom-header ap-icon-button button:focus-visible:not(.disabled):not(:active),::ng-deep .custom-calendar .custom-header .month-label button:focus-visible:not(:disabled):not(:active):not(.loading){box-shadow:inset 0 0 0 2px var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .custom-header .month-header{display:flex;width:224px;align-items:center;height:var(--comp-icon-button-height)}::ng-deep .custom-calendar .custom-header .month-header:first-child{padding-right:var(--comp-icon-button-width)}::ng-deep .custom-calendar .custom-header .month-header:nth-child(2){padding-left:var(--comp-icon-button-width)}::ng-deep .custom-calendar .custom-header .month-header .month-label{display:flex;flex:1;min-width:0;justify-content:center;--comp-button-padding-vertical: var(--ref-spacing-xxs)}::ng-deep .custom-calendar .custom-header .month-header .month-label button{min-width:0}::ng-deep .custom-calendar .custom-header .month-header .month-label-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .custom-calendar .md-drppicker{display:flex!important;width:unset;height:auto;margin:0;padding:0;overflow:visible;box-shadow:none;z-index:0;font-family:var(--sys-text-style-body-font-family)}::ng-deep .custom-calendar .md-drppicker .month{cursor:auto}::ng-deep .custom-calendar .md-drppicker .calendar{margin:0}::ng-deep .custom-calendar .md-drppicker .calendar.left{order:1;float:none;padding:0 var(--ref-spacing-sm) 0 0;border-right:1px solid var(--ref-color-grey-10)}::ng-deep .custom-calendar .md-drppicker .calendar.right{order:2;float:none;padding:0 0 0 var(--ref-spacing-sm)}::ng-deep .custom-calendar .md-drppicker .ranges{order:3;float:none!important;box-sizing:content-box;width:130px;max-width:none;height:calc(var(--comp-icon-button-height) + 7 * 32px + 8 * var(--ref-spacing-xxxs));margin-top:calc(-1 * var(--comp-icon-button-height));margin-left:var(--ref-spacing-sm);padding:0 0 0 var(--ref-spacing-sm);border-left:1px solid var(--ref-color-grey-10);overflow-y:auto}::ng-deep .custom-calendar .md-drppicker .ranges ul li{margin-left:0}::ng-deep .custom-calendar .md-drppicker .ranges ul li:hover{background:unset}::ng-deep .custom-calendar .md-drppicker .ranges ul li button{display:flex;align-items:center;min-height:var(--sys-button-height);padding:var(--ref-spacing-xxxs) var(--ref-spacing-xs);border-radius:var(--ref-border-radius-sm);background:none;color:var(--ref-color-grey-100);font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);transition:background-color var(--ref-animation-short) ease,color var(--ref-animation-short) ease}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:hover:not(.active):not(:disabled){background:var(--ref-color-grey-10);color:var(--ref-color-grey-100)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:active:not(.active):not(:disabled){background:var(--ref-color-grey-20)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button.active{background:var(--ref-color-electric-blue-20);color:var(--ref-color-electric-blue-150);font-weight:var(--sys-text-style-body-bold-weight)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:disabled{background:none;color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table{width:224px;padding:0!important;border:none!important}::ng-deep .custom-calendar .md-drppicker .calendar-table table{border-spacing:0 var(--ref-spacing-xxxs);height:auto}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead{line-height:normal}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead tr:first-child{display:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead tr th{height:32px;border:none;color:var(--ref-color-grey-100);font-family:var(--sys-text-style-body-bold-font-family);font-size:var(--sys-text-style-body-bold-size);font-weight:var(--sys-text-style-body-bold-weight);line-height:var(--sys-text-style-body-bold-line-height);text-transform:capitalize}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td{height:32px;padding:0;border:none;border-radius:0;opacity:1;color:var(--ref-color-grey-100);transition:background-color var(--ref-animation-short) ease}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td span{display:flex;align-items:center;justify-content:center;width:100%;height:32px;margin:0;border:none;border-radius:0;background-color:transparent;color:inherit;font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);line-height:var(--sys-text-style-body-line-height)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available:not(.off):not(.in-range):not(.hovered-end):hover{border-radius:var(--ref-border-radius-sm);background-color:var(--ref-color-grey-10)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available:not(.off):not(.in-range):not(.hovered-end):active{background-color:var(--ref-color-grey-20)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.off{background-color:transparent;color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.disabled{color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.force-inactive:not(.off){background-color:transparent;color:var(--ref-color-grey-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.today:not(.off):not(.in-range):not(.active):not(.hovered-end),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.today.force-inactive:not(.off):not(.hovered-end){border-radius:var(--ref-border-radius-sm);box-shadow:inset 0 0 0 1px var(--ref-color-grey-60)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive){background-color:var(--ref-color-electric-blue-20);color:var(--ref-color-electric-blue-150);font-weight:var(--sys-text-style-body-bold-weight)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive):not(.start-date):not(.end-date):hover{background-color:var(--ref-color-electric-blue-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive):not(.start-date):not(.end-date):active{background-color:var(--ref-color-electric-blue-60)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.in-range{border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.in-range{border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available.in-range:not(.start-date):not(.end-date):hover{border-radius:0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.available.in-range:not(.start-date):not(.end-date):hover{border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.available.in-range:not(.start-date):not(.end-date):hover{border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off){border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off){border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.active.start-date:not(.end-date).range-picker-mode:not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.active.end-date:not(.start-date).range-picker-mode:not(.off){border-radius:var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off):hover,::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off):active,::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off){border-radius:var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available.hovered-end:not(.off):not(.start-date):not(.end-date){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none;border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.available.hovered-end:not(.off):not(.start-date):not(.end-date){border-radius:var(--ref-border-radius-sm)}.hide-ranges ::ng-deep .ranges{display:none}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "ap-button", inputs: ["ariaLabel", "disabled", "name", "form", "config", "loading", "locked", "menuTrigger", "symbolPosition", "symbolId"], outputs: ["menuOpened", "menuClosed", "click", "focus", "blur"] }, { kind: "component", type: DatepickerMonthPickerComponent, selector: "ap-datepicker-month-picker", inputs: ["month", "year", "locale", "minDate", "maxDate"], outputs: ["monthSelected"] }, { kind: "directive", type: DropdownTriggerDirective, selector: "[apDropdownTrigger]", inputs: ["apDropdownTrigger"] }, { kind: "component", type: IconButtonComponent, selector: "ap-icon-button", inputs: ["ariaLabel", "name", "color", "disabled", "menuTrigger", "symbolId", "locked", "loading", "type"], outputs: ["onClick", "onFocus", "onBlur", "menuOpened", "menuClosed"] }, { kind: "ngmodule", type: NgxDaterangepickerMd }, { kind: "component", type: i2.DaterangepickerComponent, selector: "ngx-daterangepicker-material", inputs: ["startDate", "endDate", "dateLimit", "autoApply", "singleDatePicker", "showDropdowns", "showWeekNumbers", "showISOWeekNumbers", "linkedCalendars", "autoUpdateInput", "alwaysShowCalendars", "maxSpan", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "showClearButton", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "showCustomRangeLabel", "showCancel", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "customRangeDirection", "drops", "opens", "closeOnAutoApply", "minDate", "locale", "ranges", "maxDate", "isInvalidDate", "isCustomDate", "isTooltipDate"], outputs: ["choosedDate", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "cancelClicked", "clearClicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
459
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: DatepickerComponent, isStandalone: true, selector: "ap-datepicker", inputs: { firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: false, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: false, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: false, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: false, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: false, isRequired: true, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: false, isRequired: false, transformFunction: null }, selectedDates: { classPropertyName: "selectedDates", publicName: "selectedDates", isSignal: false, isRequired: false, transformFunction: null }, selectedPeriod: { classPropertyName: "selectedPeriod", publicName: "selectedPeriod", isSignal: false, isRequired: false, transformFunction: null }, dateLimit: { classPropertyName: "dateLimit", publicName: "dateLimit", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateSelected: "dateSelected", periodSelected: "periodSelected" }, viewQueries: [{ propertyName: "datepickerRef", first: true, predicate: ["datepickerRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"custom-calendar\"\n [class.single-month]=\"mode !== DatepickerMode.Range\">\n <div class=\"custom-header\">\n @if (datepickerRef.leftCalendar.month) {\n <div class=\"month-header\">\n <ap-icon-button\n symbolId=\"arrow-left\"\n ariaLabel=\"Previous month\"\n [disabled]=\"!canGoToPreviousMonth\"\n (onClick)=\"onPreviousMonth()\" />\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"leftMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.leftCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #leftMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.leftCalendar.month.month()\"\n [year]=\"datepickerRef.leftCalendar.month.year()\"\n (monthSelected)=\"onLeftMonthPicked($event)\" />\n <!-- Outside Range a single month is rendered, so both arrows frame its header. -->\n @if (mode !== DatepickerMode.Range) {\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n [disabled]=\"!canGoToNextMonth\"\n (onClick)=\"onNextMonth()\" />\n }\n </div>\n }\n @if (mode === DatepickerMode.Range && datepickerRef.rightCalendar.month) {\n <div class=\"month-header\">\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"rightMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.rightCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #rightMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.rightCalendar.month.month()\"\n [year]=\"datepickerRef.rightCalendar.month.year()\"\n (monthSelected)=\"onRightMonthPicked($event)\" />\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n [disabled]=\"!canGoToNextMonth\"\n (onClick)=\"onNextMonth()\" />\n </div>\n }\n </div>\n <!--\n `showDropdowns` is on not for its own selects \u2014 those render into the header row we hide \u2014\n but because the vendor only maintains `calendarVariables[side].dropdowns` while it is, and\n that is what `monthOrYearChanged` reads to move a calendar.\n -->\n <ngx-daterangepicker-material\n #datepickerRef\n [class.hide-ranges]=\"!hasPresets\"\n [alwaysShowCalendars]=\"true\"\n [autoApply]=\"true\"\n [customRangeDirection]=\"true\"\n [dateLimit]=\"dateLimit() ?? 0\"\n [linkedCalendars]=\"true\"\n [isCustomDate]=\"$any(isCustomDate)\"\n [locale]=\"localeConfig\"\n [maxDate]=\"maxDateStr\"\n [minDate]=\"minDateStr\"\n [ranges]=\"vendorRanges\"\n [showCustomRangeLabel]=\"false\"\n [showDropdowns]=\"true\"\n [singleDatePicker]=\"mode !== DatepickerMode.Range\"\n (datesUpdated)=\"onDatesUpdated($event)\"\n (startDateChanged)=\"onStartDateChanged($event)\" />\n</div>\n", styles: ["::ng-deep .custom-calendar{display:flex;flex-direction:column;width:max-content;height:fit-content;border-radius:var(--ref-border-radius-md);background-color:var(--ref-color-white);font-family:var(--sys-text-style-body-font-family)}::ng-deep .custom-calendar.single-month .md-drppicker .calendar.right{padding-left:0}::ng-deep .custom-calendar.single-month .custom-header{width:224px}::ng-deep .custom-calendar.single-month .custom-header .month-header:first-child{padding-right:0}::ng-deep .custom-calendar .custom-header{display:flex;align-items:center;width:calc(14 * 32px + 2 * var(--ref-spacing-sm) + 1px);height:var(--comp-icon-button-height);gap:calc(2 * var(--ref-spacing-sm) + 1px);color:var(--ref-color-grey-100);font-size:var(--sys-text-style-body-bold-size);font-weight:var(--sys-text-style-body-bold-weight);line-height:var(--sys-text-style-body-bold-line-height);text-transform:capitalize}::ng-deep .custom-calendar .custom-header ap-icon-button button:focus:not(.disabled):not(:active),::ng-deep .custom-calendar .custom-header .month-label button:focus:not(:disabled):not(:active):not(.loading){outline:none}::ng-deep .custom-calendar .custom-header ap-icon-button button:focus-visible:not(.disabled):not(:active),::ng-deep .custom-calendar .custom-header .month-label button:focus-visible:not(:disabled):not(:active):not(.loading){box-shadow:inset 0 0 0 2px var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .custom-header .month-header{display:flex;width:224px;align-items:center;height:var(--comp-icon-button-height)}::ng-deep .custom-calendar .custom-header .month-header:first-child{padding-right:var(--comp-icon-button-width)}::ng-deep .custom-calendar .custom-header .month-header:nth-child(2){padding-left:var(--comp-icon-button-width)}::ng-deep .custom-calendar .custom-header .month-header .month-label{display:flex;flex:1;min-width:0;justify-content:center;--comp-button-padding-vertical: var(--ref-spacing-xxs)}::ng-deep .custom-calendar .custom-header .month-header .month-label button{min-width:0}::ng-deep .custom-calendar .custom-header .month-header .month-label-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .custom-calendar .md-drppicker{display:flex!important;width:unset;height:auto;margin:0;padding:0;overflow:visible;box-shadow:none;z-index:0;font-family:var(--sys-text-style-body-font-family)}::ng-deep .custom-calendar .md-drppicker .month{cursor:auto}::ng-deep .custom-calendar .md-drppicker .calendar{margin:0}::ng-deep .custom-calendar .md-drppicker .calendar.left{order:1;float:none;padding:0 var(--ref-spacing-sm) 0 0;border-right:1px solid var(--ref-color-grey-10)}::ng-deep .custom-calendar .md-drppicker .calendar.right{order:2;float:none;padding:0 0 0 var(--ref-spacing-sm)}::ng-deep .custom-calendar .md-drppicker .ranges{order:3;float:none!important;box-sizing:content-box;width:130px;max-width:none;height:calc(var(--comp-icon-button-height) + 7 * 32px + 8 * var(--ref-spacing-xxxs));margin-top:calc(-1 * var(--comp-icon-button-height));margin-left:var(--ref-spacing-sm);padding:0 0 0 var(--ref-spacing-sm);border-left:1px solid var(--ref-color-grey-10);overflow-y:auto}::ng-deep .custom-calendar .md-drppicker .ranges ul li{margin-left:0}::ng-deep .custom-calendar .md-drppicker .ranges ul li:hover{background:unset}::ng-deep .custom-calendar .md-drppicker .ranges ul li button{display:flex;align-items:center;min-height:var(--sys-button-height);padding:var(--ref-spacing-xxxs) var(--ref-spacing-xs);border-radius:var(--ref-border-radius-sm);background:none;color:var(--ref-color-grey-100);font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);transition:background-color var(--ref-animation-short) ease,color var(--ref-animation-short) ease}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:hover:not(.active):not(:disabled){background:var(--ref-color-grey-10);color:var(--ref-color-grey-100)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:active:not(.active):not(:disabled){background:var(--ref-color-grey-20)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button.active{background:var(--ref-color-electric-blue-20);color:var(--ref-color-electric-blue-150);font-weight:var(--sys-text-style-body-bold-weight)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:disabled{background:none;color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table{width:224px;padding:0!important;border:none!important}::ng-deep .custom-calendar .md-drppicker .calendar-table table{border-spacing:0 var(--ref-spacing-xxxs);height:auto}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead{line-height:normal}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead tr:first-child{display:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead tr th{height:32px;border:none;color:var(--ref-color-grey-100);font-family:var(--sys-text-style-body-bold-font-family);font-size:var(--sys-text-style-body-bold-size);font-weight:var(--sys-text-style-body-bold-weight);line-height:var(--sys-text-style-body-bold-line-height);text-transform:capitalize}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td{height:32px;padding:0;border:none;border-radius:0;opacity:1;color:var(--ref-color-grey-100);transition:background-color var(--ref-animation-short) ease}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td span{display:flex;align-items:center;justify-content:center;width:100%;height:32px;margin:0;border:none;border-radius:0;background-color:transparent;color:inherit;font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);line-height:var(--sys-text-style-body-line-height)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available:not(.off):not(.in-range):not(.hovered-end):hover{border-radius:var(--ref-border-radius-sm);background-color:var(--ref-color-grey-10)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available:not(.off):not(.in-range):not(.hovered-end):active{background-color:var(--ref-color-grey-20)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.off{background-color:transparent;color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.disabled{color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.force-inactive:not(.off){background-color:transparent;color:var(--ref-color-grey-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.today:not(.off):not(.in-range):not(.active):not(.hovered-end),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.today.force-inactive:not(.off):not(.hovered-end){border-radius:var(--ref-border-radius-sm);box-shadow:inset 0 0 0 1px var(--ref-color-grey-60)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive){background-color:var(--ref-color-electric-blue-20);color:var(--ref-color-electric-blue-150);font-weight:var(--sys-text-style-body-bold-weight)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive):not(.start-date):not(.end-date):hover{background-color:var(--ref-color-electric-blue-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive):not(.start-date):not(.end-date):active{background-color:var(--ref-color-electric-blue-60)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.in-range{border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.in-range{border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available.in-range:not(.start-date):not(.end-date):hover{border-radius:0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.available.in-range:not(.start-date):not(.end-date):hover{border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.available.in-range:not(.start-date):not(.end-date):hover{border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off){border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off){border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.active.start-date:not(.end-date).range-picker-mode:not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.active.end-date:not(.start-date).range-picker-mode:not(.off){border-radius:var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off):hover,::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off):active,::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off){border-radius:var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available.hovered-end:not(.off):not(.start-date):not(.end-date){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none;border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.available.hovered-end:not(.off):not(.start-date):not(.end-date){border-radius:var(--ref-border-radius-sm)}.hide-ranges ::ng-deep .ranges{display:none}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "ap-button", inputs: ["ariaLabel", "disabled", "name", "form", "config", "loading", "locked", "menuTrigger", "symbolPosition", "symbolId"], outputs: ["menuOpened", "menuClosed", "click", "focus", "blur"] }, { kind: "component", type: DatepickerMonthPickerComponent, selector: "ap-datepicker-month-picker", inputs: ["month", "year", "locale", "minDate", "maxDate"], outputs: ["monthSelected"] }, { kind: "directive", type: DropdownTriggerDirective, selector: "[apDropdownTrigger]", inputs: ["apDropdownTrigger"] }, { kind: "component", type: IconButtonComponent, selector: "ap-icon-button", inputs: ["ariaLabel", "name", "color", "disabled", "menuTrigger", "symbolId", "locked", "loading", "type"], outputs: ["onClick", "onFocus", "onBlur", "menuOpened", "menuClosed"] }, { kind: "ngmodule", type: NgxDaterangepickerMd }, { kind: "component", type: i2.DaterangepickerComponent, selector: "ngx-daterangepicker-material", inputs: ["startDate", "endDate", "dateLimit", "autoApply", "singleDatePicker", "showDropdowns", "showWeekNumbers", "showISOWeekNumbers", "linkedCalendars", "autoUpdateInput", "alwaysShowCalendars", "maxSpan", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "showClearButton", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "showCustomRangeLabel", "showCancel", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "customRangeDirection", "drops", "opens", "closeOnAutoApply", "minDate", "locale", "ranges", "maxDate", "isInvalidDate", "isCustomDate", "isTooltipDate"], outputs: ["choosedDate", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "cancelClicked", "clearClicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
448
460
|
}
|
|
449
461
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: DatepickerComponent, decorators: [{
|
|
450
462
|
type: Component,
|
|
451
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ap-datepicker', imports: [ButtonComponent, DatepickerMonthPickerComponent, DropdownTriggerDirective, IconButtonComponent, NgxDaterangepickerMd], template: "<div\n class=\"custom-calendar\"\n [class.single-month]=\"mode !== DatepickerMode.Range\">\n <div class=\"custom-header\">\n @if (datepickerRef.leftCalendar.month) {\n <div class=\"month-header\">\n <ap-icon-button\n symbolId=\"arrow-left\"\n ariaLabel=\"Previous month\"\n (onClick)=\"onPreviousMonth()\" />\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"leftMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.leftCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #leftMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.leftCalendar.month.month()\"\n [year]=\"datepickerRef.leftCalendar.month.year()\"\n (monthSelected)=\"onLeftMonthPicked($event)\" />\n <!-- Outside Range a single month is rendered, so both arrows frame its header. -->\n @if (mode !== DatepickerMode.Range) {\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n (onClick)=\"onNextMonth()\" />\n }\n </div>\n }\n @if (mode === DatepickerMode.Range && datepickerRef.rightCalendar.month) {\n <div class=\"month-header\">\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"rightMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.rightCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #rightMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.rightCalendar.month.month()\"\n [year]=\"datepickerRef.rightCalendar.month.year()\"\n (monthSelected)=\"onRightMonthPicked($event)\" />\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n (onClick)=\"onNextMonth()\" />\n </div>\n }\n </div>\n <!--\n `showDropdowns` is on not for its own selects \u2014 those render into the header row we hide \u2014\n but because the vendor only maintains `calendarVariables[side].dropdowns` while it is, and\n that is what `monthOrYearChanged` reads to move a calendar.\n -->\n <ngx-daterangepicker-material\n #datepickerRef\n [class.hide-ranges]=\"!hasPresets\"\n [alwaysShowCalendars]=\"true\"\n [autoApply]=\"true\"\n [customRangeDirection]=\"true\"\n [dateLimit]=\"dateLimit() ?? 0\"\n [linkedCalendars]=\"true\"\n [isCustomDate]=\"$any(isCustomDate)\"\n [locale]=\"localeConfig\"\n [maxDate]=\"maxDateStr\"\n [minDate]=\"minDateStr\"\n [ranges]=\"vendorRanges\"\n [showCustomRangeLabel]=\"false\"\n [showDropdowns]=\"true\"\n [singleDatePicker]=\"mode !== DatepickerMode.Range\"\n (datesUpdated)=\"onDatesUpdated($event)\"\n (startDateChanged)=\"onStartDateChanged($event)\" />\n</div>\n", styles: ["::ng-deep .custom-calendar{display:flex;flex-direction:column;width:max-content;height:fit-content;border-radius:var(--ref-border-radius-md);background-color:var(--ref-color-white);font-family:var(--sys-text-style-body-font-family)}::ng-deep .custom-calendar.single-month .md-drppicker .calendar.right{padding-left:0}::ng-deep .custom-calendar.single-month .custom-header{width:224px}::ng-deep .custom-calendar.single-month .custom-header .month-header:first-child{padding-right:0}::ng-deep .custom-calendar .custom-header{display:flex;align-items:center;width:calc(14 * 32px + 2 * var(--ref-spacing-sm) + 1px);height:var(--comp-icon-button-height);gap:calc(2 * var(--ref-spacing-sm) + 1px);color:var(--ref-color-grey-100);font-size:var(--sys-text-style-body-bold-size);font-weight:var(--sys-text-style-body-bold-weight);line-height:var(--sys-text-style-body-bold-line-height);text-transform:capitalize}::ng-deep .custom-calendar .custom-header ap-icon-button button:focus:not(.disabled):not(:active),::ng-deep .custom-calendar .custom-header .month-label button:focus:not(:disabled):not(:active):not(.loading){outline:none}::ng-deep .custom-calendar .custom-header ap-icon-button button:focus-visible:not(.disabled):not(:active),::ng-deep .custom-calendar .custom-header .month-label button:focus-visible:not(:disabled):not(:active):not(.loading){box-shadow:inset 0 0 0 2px var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .custom-header .month-header{display:flex;width:224px;align-items:center;height:var(--comp-icon-button-height)}::ng-deep .custom-calendar .custom-header .month-header:first-child{padding-right:var(--comp-icon-button-width)}::ng-deep .custom-calendar .custom-header .month-header:nth-child(2){padding-left:var(--comp-icon-button-width)}::ng-deep .custom-calendar .custom-header .month-header .month-label{display:flex;flex:1;min-width:0;justify-content:center;--comp-button-padding-vertical: var(--ref-spacing-xxs)}::ng-deep .custom-calendar .custom-header .month-header .month-label button{min-width:0}::ng-deep .custom-calendar .custom-header .month-header .month-label-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .custom-calendar .md-drppicker{display:flex!important;width:unset;height:auto;margin:0;padding:0;overflow:visible;box-shadow:none;z-index:0;font-family:var(--sys-text-style-body-font-family)}::ng-deep .custom-calendar .md-drppicker .month{cursor:auto}::ng-deep .custom-calendar .md-drppicker .calendar{margin:0}::ng-deep .custom-calendar .md-drppicker .calendar.left{order:1;float:none;padding:0 var(--ref-spacing-sm) 0 0;border-right:1px solid var(--ref-color-grey-10)}::ng-deep .custom-calendar .md-drppicker .calendar.right{order:2;float:none;padding:0 0 0 var(--ref-spacing-sm)}::ng-deep .custom-calendar .md-drppicker .ranges{order:3;float:none!important;box-sizing:content-box;width:130px;max-width:none;height:calc(var(--comp-icon-button-height) + 7 * 32px + 8 * var(--ref-spacing-xxxs));margin-top:calc(-1 * var(--comp-icon-button-height));margin-left:var(--ref-spacing-sm);padding:0 0 0 var(--ref-spacing-sm);border-left:1px solid var(--ref-color-grey-10);overflow-y:auto}::ng-deep .custom-calendar .md-drppicker .ranges ul li{margin-left:0}::ng-deep .custom-calendar .md-drppicker .ranges ul li:hover{background:unset}::ng-deep .custom-calendar .md-drppicker .ranges ul li button{display:flex;align-items:center;min-height:var(--sys-button-height);padding:var(--ref-spacing-xxxs) var(--ref-spacing-xs);border-radius:var(--ref-border-radius-sm);background:none;color:var(--ref-color-grey-100);font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);transition:background-color var(--ref-animation-short) ease,color var(--ref-animation-short) ease}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:hover:not(.active):not(:disabled){background:var(--ref-color-grey-10);color:var(--ref-color-grey-100)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:active:not(.active):not(:disabled){background:var(--ref-color-grey-20)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button.active{background:var(--ref-color-electric-blue-20);color:var(--ref-color-electric-blue-150);font-weight:var(--sys-text-style-body-bold-weight)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:disabled{background:none;color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table{width:224px;padding:0!important;border:none!important}::ng-deep .custom-calendar .md-drppicker .calendar-table table{border-spacing:0 var(--ref-spacing-xxxs);height:auto}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead{line-height:normal}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead tr:first-child{display:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead tr th{height:32px;border:none;color:var(--ref-color-grey-100);font-family:var(--sys-text-style-body-bold-font-family);font-size:var(--sys-text-style-body-bold-size);font-weight:var(--sys-text-style-body-bold-weight);line-height:var(--sys-text-style-body-bold-line-height);text-transform:capitalize}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td{height:32px;padding:0;border:none;border-radius:0;opacity:1;color:var(--ref-color-grey-100);transition:background-color var(--ref-animation-short) ease}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td span{display:flex;align-items:center;justify-content:center;width:100%;height:32px;margin:0;border:none;border-radius:0;background-color:transparent;color:inherit;font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);line-height:var(--sys-text-style-body-line-height)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available:not(.off):not(.in-range):not(.hovered-end):hover{border-radius:var(--ref-border-radius-sm);background-color:var(--ref-color-grey-10)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available:not(.off):not(.in-range):not(.hovered-end):active{background-color:var(--ref-color-grey-20)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.off{background-color:transparent;color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.disabled{color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.force-inactive:not(.off){background-color:transparent;color:var(--ref-color-grey-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.today:not(.off):not(.in-range):not(.active):not(.hovered-end),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.today.force-inactive:not(.off):not(.hovered-end){border-radius:var(--ref-border-radius-sm);box-shadow:inset 0 0 0 1px var(--ref-color-grey-60)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive){background-color:var(--ref-color-electric-blue-20);color:var(--ref-color-electric-blue-150);font-weight:var(--sys-text-style-body-bold-weight)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive):not(.start-date):not(.end-date):hover{background-color:var(--ref-color-electric-blue-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive):not(.start-date):not(.end-date):active{background-color:var(--ref-color-electric-blue-60)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.in-range{border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.in-range{border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available.in-range:not(.start-date):not(.end-date):hover{border-radius:0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.available.in-range:not(.start-date):not(.end-date):hover{border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.available.in-range:not(.start-date):not(.end-date):hover{border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off){border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off){border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.active.start-date:not(.end-date).range-picker-mode:not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.active.end-date:not(.start-date).range-picker-mode:not(.off){border-radius:var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off):hover,::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off):active,::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off){border-radius:var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available.hovered-end:not(.off):not(.start-date):not(.end-date){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none;border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.available.hovered-end:not(.off):not(.start-date):not(.end-date){border-radius:var(--ref-border-radius-sm)}.hide-ranges ::ng-deep .ranges{display:none}\n"] }]
|
|
463
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ap-datepicker', imports: [ButtonComponent, DatepickerMonthPickerComponent, DropdownTriggerDirective, IconButtonComponent, NgxDaterangepickerMd], template: "<div\n class=\"custom-calendar\"\n [class.single-month]=\"mode !== DatepickerMode.Range\">\n <div class=\"custom-header\">\n @if (datepickerRef.leftCalendar.month) {\n <div class=\"month-header\">\n <ap-icon-button\n symbolId=\"arrow-left\"\n ariaLabel=\"Previous month\"\n [disabled]=\"!canGoToPreviousMonth\"\n (onClick)=\"onPreviousMonth()\" />\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"leftMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.leftCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #leftMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.leftCalendar.month.month()\"\n [year]=\"datepickerRef.leftCalendar.month.year()\"\n (monthSelected)=\"onLeftMonthPicked($event)\" />\n <!-- Outside Range a single month is rendered, so both arrows frame its header. -->\n @if (mode !== DatepickerMode.Range) {\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n [disabled]=\"!canGoToNextMonth\"\n (onClick)=\"onNextMonth()\" />\n }\n </div>\n }\n @if (mode === DatepickerMode.Range && datepickerRef.rightCalendar.month) {\n <div class=\"month-header\">\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"rightMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.rightCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #rightMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.rightCalendar.month.month()\"\n [year]=\"datepickerRef.rightCalendar.month.year()\"\n (monthSelected)=\"onRightMonthPicked($event)\" />\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n [disabled]=\"!canGoToNextMonth\"\n (onClick)=\"onNextMonth()\" />\n </div>\n }\n </div>\n <!--\n `showDropdowns` is on not for its own selects \u2014 those render into the header row we hide \u2014\n but because the vendor only maintains `calendarVariables[side].dropdowns` while it is, and\n that is what `monthOrYearChanged` reads to move a calendar.\n -->\n <ngx-daterangepicker-material\n #datepickerRef\n [class.hide-ranges]=\"!hasPresets\"\n [alwaysShowCalendars]=\"true\"\n [autoApply]=\"true\"\n [customRangeDirection]=\"true\"\n [dateLimit]=\"dateLimit() ?? 0\"\n [linkedCalendars]=\"true\"\n [isCustomDate]=\"$any(isCustomDate)\"\n [locale]=\"localeConfig\"\n [maxDate]=\"maxDateStr\"\n [minDate]=\"minDateStr\"\n [ranges]=\"vendorRanges\"\n [showCustomRangeLabel]=\"false\"\n [showDropdowns]=\"true\"\n [singleDatePicker]=\"mode !== DatepickerMode.Range\"\n (datesUpdated)=\"onDatesUpdated($event)\"\n (startDateChanged)=\"onStartDateChanged($event)\" />\n</div>\n", styles: ["::ng-deep .custom-calendar{display:flex;flex-direction:column;width:max-content;height:fit-content;border-radius:var(--ref-border-radius-md);background-color:var(--ref-color-white);font-family:var(--sys-text-style-body-font-family)}::ng-deep .custom-calendar.single-month .md-drppicker .calendar.right{padding-left:0}::ng-deep .custom-calendar.single-month .custom-header{width:224px}::ng-deep .custom-calendar.single-month .custom-header .month-header:first-child{padding-right:0}::ng-deep .custom-calendar .custom-header{display:flex;align-items:center;width:calc(14 * 32px + 2 * var(--ref-spacing-sm) + 1px);height:var(--comp-icon-button-height);gap:calc(2 * var(--ref-spacing-sm) + 1px);color:var(--ref-color-grey-100);font-size:var(--sys-text-style-body-bold-size);font-weight:var(--sys-text-style-body-bold-weight);line-height:var(--sys-text-style-body-bold-line-height);text-transform:capitalize}::ng-deep .custom-calendar .custom-header ap-icon-button button:focus:not(.disabled):not(:active),::ng-deep .custom-calendar .custom-header .month-label button:focus:not(:disabled):not(:active):not(.loading){outline:none}::ng-deep .custom-calendar .custom-header ap-icon-button button:focus-visible:not(.disabled):not(:active),::ng-deep .custom-calendar .custom-header .month-label button:focus-visible:not(:disabled):not(:active):not(.loading){box-shadow:inset 0 0 0 2px var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .custom-header .month-header{display:flex;width:224px;align-items:center;height:var(--comp-icon-button-height)}::ng-deep .custom-calendar .custom-header .month-header:first-child{padding-right:var(--comp-icon-button-width)}::ng-deep .custom-calendar .custom-header .month-header:nth-child(2){padding-left:var(--comp-icon-button-width)}::ng-deep .custom-calendar .custom-header .month-header .month-label{display:flex;flex:1;min-width:0;justify-content:center;--comp-button-padding-vertical: var(--ref-spacing-xxs)}::ng-deep .custom-calendar .custom-header .month-header .month-label button{min-width:0}::ng-deep .custom-calendar .custom-header .month-header .month-label-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .custom-calendar .md-drppicker{display:flex!important;width:unset;height:auto;margin:0;padding:0;overflow:visible;box-shadow:none;z-index:0;font-family:var(--sys-text-style-body-font-family)}::ng-deep .custom-calendar .md-drppicker .month{cursor:auto}::ng-deep .custom-calendar .md-drppicker .calendar{margin:0}::ng-deep .custom-calendar .md-drppicker .calendar.left{order:1;float:none;padding:0 var(--ref-spacing-sm) 0 0;border-right:1px solid var(--ref-color-grey-10)}::ng-deep .custom-calendar .md-drppicker .calendar.right{order:2;float:none;padding:0 0 0 var(--ref-spacing-sm)}::ng-deep .custom-calendar .md-drppicker .ranges{order:3;float:none!important;box-sizing:content-box;width:130px;max-width:none;height:calc(var(--comp-icon-button-height) + 7 * 32px + 8 * var(--ref-spacing-xxxs));margin-top:calc(-1 * var(--comp-icon-button-height));margin-left:var(--ref-spacing-sm);padding:0 0 0 var(--ref-spacing-sm);border-left:1px solid var(--ref-color-grey-10);overflow-y:auto}::ng-deep .custom-calendar .md-drppicker .ranges ul li{margin-left:0}::ng-deep .custom-calendar .md-drppicker .ranges ul li:hover{background:unset}::ng-deep .custom-calendar .md-drppicker .ranges ul li button{display:flex;align-items:center;min-height:var(--sys-button-height);padding:var(--ref-spacing-xxxs) var(--ref-spacing-xs);border-radius:var(--ref-border-radius-sm);background:none;color:var(--ref-color-grey-100);font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);transition:background-color var(--ref-animation-short) ease,color var(--ref-animation-short) ease}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:hover:not(.active):not(:disabled){background:var(--ref-color-grey-10);color:var(--ref-color-grey-100)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:active:not(.active):not(:disabled){background:var(--ref-color-grey-20)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button.active{background:var(--ref-color-electric-blue-20);color:var(--ref-color-electric-blue-150);font-weight:var(--sys-text-style-body-bold-weight)}::ng-deep .custom-calendar .md-drppicker .ranges ul li button:disabled{background:none;color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table{width:224px;padding:0!important;border:none!important}::ng-deep .custom-calendar .md-drppicker .calendar-table table{border-spacing:0 var(--ref-spacing-xxxs);height:auto}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead{line-height:normal}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead tr:first-child{display:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table thead tr th{height:32px;border:none;color:var(--ref-color-grey-100);font-family:var(--sys-text-style-body-bold-font-family);font-size:var(--sys-text-style-body-bold-size);font-weight:var(--sys-text-style-body-bold-weight);line-height:var(--sys-text-style-body-bold-line-height);text-transform:capitalize}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td{height:32px;padding:0;border:none;border-radius:0;opacity:1;color:var(--ref-color-grey-100);transition:background-color var(--ref-animation-short) ease}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td span{display:flex;align-items:center;justify-content:center;width:100%;height:32px;margin:0;border:none;border-radius:0;background-color:transparent;color:inherit;font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);line-height:var(--sys-text-style-body-line-height)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available:not(.off):not(.in-range):not(.hovered-end):hover{border-radius:var(--ref-border-radius-sm);background-color:var(--ref-color-grey-10)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available:not(.off):not(.in-range):not(.hovered-end):active{background-color:var(--ref-color-grey-20)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.off{background-color:transparent;color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.disabled{color:var(--ref-color-grey-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.force-inactive:not(.off){background-color:transparent;color:var(--ref-color-grey-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.today:not(.off):not(.in-range):not(.active):not(.hovered-end),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.today.force-inactive:not(.off):not(.hovered-end){border-radius:var(--ref-border-radius-sm);box-shadow:inset 0 0 0 1px var(--ref-color-grey-60)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive){background-color:var(--ref-color-electric-blue-20);color:var(--ref-color-electric-blue-150);font-weight:var(--sys-text-style-body-bold-weight)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive):not(.start-date):not(.end-date):hover{background-color:var(--ref-color-electric-blue-40)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.in-range:not(.off):not(.force-inactive):not(.start-date):not(.end-date):active{background-color:var(--ref-color-electric-blue-60)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.in-range{border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.in-range{border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available.in-range:not(.start-date):not(.end-date):hover{border-radius:0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.available.in-range:not(.start-date):not(.end-date):hover{border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.available.in-range:not(.start-date):not(.end-date):hover{border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date:not(.end-date).range-picker-mode:not(.off){border-radius:var(--ref-border-radius-sm) 0 0 var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.end-date:not(.start-date).range-picker-mode:not(.off){border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:last-child.active.start-date:not(.end-date).range-picker-mode:not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.active.end-date:not(.start-date).range-picker-mode:not(.off){border-radius:var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off):hover,::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off):hover{background-color:var(--ref-color-electric-blue-100)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off):active,::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off):active{background-color:var(--ref-color-electric-blue-80)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active.start-date.end-date.range-picker-mode:not(.force-inactive):not(.off),::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.active:not(.range-picker-mode):not(.force-inactive):not(.off){border-radius:var(--ref-border-radius-sm)}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody td.available.hovered-end:not(.off):not(.start-date):not(.end-date){background-color:var(--ref-color-electric-blue-150);color:var(--ref-color-white);font-weight:var(--sys-text-style-body-bold-weight);box-shadow:none;border-radius:0 var(--ref-border-radius-sm) var(--ref-border-radius-sm) 0}::ng-deep .custom-calendar .md-drppicker .calendar-table table tbody tr td:first-child.available.hovered-end:not(.off):not(.start-date):not(.end-date){border-radius:var(--ref-border-radius-sm)}.hide-ranges ::ng-deep .ranges{display:none}\n"] }]
|
|
452
464
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.SymbolRegistry }], propDecorators: { datepickerRef: [{
|
|
453
465
|
type: ViewChild,
|
|
454
466
|
args: ['datepickerRef']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agorapulse-ui-components-datepicker.mjs","sources":["../../../libs/ui-components/datepicker/src/datepicker-month-picker/datepicker-month-picker.component.ts","../../../libs/ui-components/datepicker/src/datepicker-month-picker/datepicker-month-picker.component.html","../../../libs/ui-components/datepicker/src/datepicker/datepicker.component.ts","../../../libs/ui-components/datepicker/src/datepicker/datepicker.component.html","../../../libs/ui-components/datepicker/src/datepicker-dropdown/datepicker-dropdown.component.ts","../../../libs/ui-components/datepicker/src/datepicker-dropdown/datepicker-dropdown.component.html","../../../libs/ui-components/datepicker/src/datepicker-preset.ts","../../../libs/ui-components/datepicker/src/datepicker-value.ts","../../../libs/ui-components/datepicker/src/datepicker-select/datepicker-select.component.ts","../../../libs/ui-components/datepicker/src/datepicker-select/datepicker-select.component.html","../../../libs/ui-components/datepicker/src/agorapulse-ui-components-datepicker.ts"],"sourcesContent":["import type { ButtonConfig } from '@agorapulse/ui-components/button';\nimport { ButtonComponent } from '@agorapulse/ui-components/button';\nimport type { DropdownOverlay } from '@agorapulse/ui-components/dropdown-base';\nimport { createDropdownOverlay } from '@agorapulse/ui-components/dropdown-base';\nimport { IconButtonComponent } from '@agorapulse/ui-components/icon-button';\nimport { apArrowLeft, apArrowRight, withSymbols } from '@agorapulse/ui-symbol';\nimport { ChangeDetectionStrategy, Component, computed, input, linkedSignal, output, signal, TemplateRef, viewChild } from '@angular/core';\nimport dayjs from 'dayjs';\n\nconst MONTHS_IN_YEAR = 12;\n/** A page of years fills the month grid exactly, so switching view never resizes the panel. */\nconst YEARS_PER_PAGE = MONTHS_IN_YEAR;\n\nconst SELECTED_MONTH_CONFIG: ButtonConfig = { style: 'primary', color: 'blue' };\nconst UNSELECTED_MONTH_CONFIG: ButtonConfig = { style: 'ghost', color: 'grey' };\n\n/** The month a calendar should move to. */\nexport interface DatepickerMonth {\n /** Zero-based, as dayjs and the vendor both count months. */\n month: number;\n year: number;\n}\n\n/** A cell of the grid, carrying the states the template would otherwise recompute on every render. */\ninterface MonthOption {\n month: number;\n label: string;\n ariaLabel: string;\n disabled: boolean;\n config: ButtonConfig;\n}\n\n/** A cell of the year grid the panel shows once the year is clicked. */\ninterface YearOption {\n year: number;\n disabled: boolean;\n config: ButtonConfig;\n}\n\n/**\n * A year of months in a dropdown, so a calendar can be moved somewhere far without paging through\n * the months in between. Driven by `apDropdownTrigger` on whatever the caller wants as a trigger.\n *\n * The year is browsable inside the panel; only clicking a month commits.\n *\n * @example\n * ```html\n * <ap-button [apDropdownTrigger]=\"picker\">{{ label }}</ap-button>\n * <ap-datepicker-month-picker\n * #picker\n * [month]=\"month\"\n * [year]=\"year\"\n * (monthSelected)=\"goTo($event)\" />\n * ```\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-datepicker-month-picker',\n templateUrl: './datepicker-month-picker.component.html',\n styleUrl: './datepicker-month-picker.component.scss',\n imports: [ButtonComponent, IconButtonComponent],\n providers: [withSymbols(apArrowLeft, apArrowRight)],\n})\nexport class DatepickerMonthPickerComponent implements DropdownOverlay {\n /** The month the calendar is showing, zero-based. Highlighted in the grid. */\n readonly month = input.required<number>();\n /** The year the calendar is showing. The panel opens on it, and returns to it when it moves. */\n readonly year = input.required<number>();\n readonly locale = input('en');\n readonly minDate = input<dayjs.Dayjs | undefined>(undefined);\n readonly maxDate = input<dayjs.Dayjs | undefined>(undefined);\n\n readonly monthSelected = output<DatepickerMonth>();\n\n /**\n * Months until the year is clicked, years until one is picked. Reaching a distant year through\n * the arrows alone costs one click per year; through the grid it costs one per page.\n */\n readonly showingYears = signal(false);\n\n private readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTemplate');\n private readonly overlay = createDropdownOverlay();\n\n readonly isOpen = this.overlay.isOpen;\n\n /** Browsable on its own, and re-anchored on the calendar's year whenever that moves. */\n readonly displayedYear = linkedSignal(() => this.year());\n\n /**\n * First year of the visible page. Pages are fixed blocks rather than a window around the\n * displayed year, so the same year always sits in the same page and browsing back and forth\n * lands on the same grid.\n */\n private readonly yearPageStart = computed(() => {\n const year = this.displayedYear();\n return year - (((year % YEARS_PER_PAGE) + YEARS_PER_PAGE) % YEARS_PER_PAGE);\n });\n\n /** The page the years grid spans, for the header that replaces the year while it shows. */\n readonly displayedYearRange = computed(() => `${this.yearPageStart()} - ${this.yearPageStart() + YEARS_PER_PAGE - 1}`);\n\n readonly canGoPrevious = computed(() => {\n const min = this.minDate();\n if (min === undefined) {\n return true;\n }\n return this.showingYears() ? this.yearPageStart() > min.year() : this.displayedYear() > min.year();\n });\n\n readonly canGoNext = computed(() => {\n const max = this.maxDate();\n if (max === undefined) {\n return true;\n }\n const lastOfPage = this.yearPageStart() + YEARS_PER_PAGE - 1;\n return this.showingYears() ? lastOfPage < max.year() : this.displayedYear() < max.year();\n });\n\n readonly months = computed<MonthOption[]>(() => {\n const locale = this.locale();\n const displayedYear = this.displayedYear();\n const showingCalendarYear = displayedYear === this.year();\n const calendarMonth = this.month();\n const min = this.minDate();\n const max = this.maxDate();\n\n return Array.from({ length: MONTHS_IN_YEAR }, (_, month) => {\n // Anchored on the 1st before the year and the month are set: from a 31st, moving to a\n // shorter month would otherwise spill into the next one.\n const firstOfMonth = dayjs().date(1).year(displayedYear).month(month).locale(locale);\n const selected = showingCalendarYear && month === calendarMonth;\n\n return {\n month,\n label: firstOfMonth.format('MMM'),\n ariaLabel: firstOfMonth.format('MMMM YYYY'),\n disabled:\n (min !== undefined && firstOfMonth.endOf('month').isBefore(min, 'day')) ||\n (max !== undefined && firstOfMonth.startOf('month').isAfter(max, 'day')),\n config: selected ? SELECTED_MONTH_CONFIG : UNSELECTED_MONTH_CONFIG,\n };\n });\n });\n\n readonly years = computed<YearOption[]>(() => {\n const pageStart = this.yearPageStart();\n const displayedYear = this.displayedYear();\n const min = this.minDate();\n const max = this.maxDate();\n\n return Array.from({ length: YEARS_PER_PAGE }, (_, offset) => {\n const year = pageStart + offset;\n const selected = year === displayedYear;\n\n return {\n year,\n disabled: (min !== undefined && year < min.year()) || (max !== undefined && year > max.year()),\n config: selected ? SELECTED_MONTH_CONFIG : UNSELECTED_MONTH_CONFIG,\n };\n });\n });\n\n open(triggerElement?: HTMLElement): void {\n const panelTemplate = this.panelTemplate();\n if (this.isOpen() || !panelTemplate) {\n return;\n }\n this.overlay.open(panelTemplate, triggerElement, { onClose: () => this.close() });\n }\n\n close(): void {\n // Back to months, so reopening never starts on the year grid the last visit happened to leave on.\n this.showingYears.set(false);\n this.overlay.close();\n }\n\n toggle(triggerElement?: HTMLElement): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open(triggerElement);\n }\n }\n\n onPrevious(): void {\n this.displayedYear.update(year => year - this.step());\n }\n\n onNext(): void {\n this.displayedYear.update(year => year + this.step());\n }\n\n /** Toggles the grid between the months of a year and the years of a page. */\n onToggleYears(): void {\n this.showingYears.update(showing => !showing);\n }\n\n onSelectYear(year: number): void {\n this.displayedYear.set(year);\n this.showingYears.set(false);\n }\n\n onSelectMonth(month: number): void {\n this.monthSelected.emit({ month, year: this.displayedYear() });\n this.close();\n }\n\n /** One year at a time through the months, a whole page at a time through the years. */\n private step(): number {\n return this.showingYears() ? YEARS_PER_PAGE : 1;\n }\n}\n","<ng-template #panelTemplate>\n <div\n class=\"ap-datepicker-month-picker\"\n role=\"dialog\"\n tabindex=\"-1\">\n <div class=\"ap-datepicker-month-picker__header\">\n <ap-icon-button\n symbolId=\"arrow-left\"\n [ariaLabel]=\"showingYears() ? 'Previous years' : 'Previous year'\"\n [disabled]=\"!canGoPrevious()\"\n (onClick)=\"onPrevious()\" />\n <!--\n A button, not a label: it is what opens the year grid. Reaching a distant year through\n the arrows alone costs one click per year.\n -->\n <ap-button\n class=\"ap-datepicker-month-picker__year\"\n [ariaLabel]=\"showingYears() ? 'Back to the months' : 'Choose a year'\"\n [config]=\"{ style: 'ghost', color: 'grey' }\"\n (click)=\"onToggleYears()\">\n {{ showingYears() ? displayedYearRange() : displayedYear() }}\n </ap-button>\n <ap-icon-button\n symbolId=\"arrow-right\"\n [ariaLabel]=\"showingYears() ? 'Next years' : 'Next year'\"\n [disabled]=\"!canGoNext()\"\n (onClick)=\"onNext()\" />\n </div>\n\n <!-- One grid for both: a page of years fills it exactly, so switching never resizes the panel. -->\n <div class=\"ap-datepicker-month-picker__grid\">\n @if (showingYears()) {\n @for (option of years(); track option.year) {\n <ap-button\n [config]=\"option.config\"\n [disabled]=\"option.disabled\"\n (click)=\"onSelectYear(option.year)\">\n {{ option.year }}\n </ap-button>\n }\n } @else {\n @for (option of months(); track option.month) {\n <ap-button\n [ariaLabel]=\"option.ariaLabel\"\n [config]=\"option.config\"\n [disabled]=\"option.disabled\"\n (click)=\"onSelectMonth(option.month)\">\n {{ option.label }}\n </ap-button>\n }\n }\n </div>\n </div>\n</ng-template>\n","import type { ButtonConfig } from '@agorapulse/ui-components/button';\nimport { ButtonComponent } from '@agorapulse/ui-components/button';\nimport { DropdownTriggerDirective } from '@agorapulse/ui-components/dropdown-base';\nimport { IconButtonComponent } from '@agorapulse/ui-components/icon-button';\nimport { SymbolRegistry, apArrowLeft, apArrowRight } from '@agorapulse/ui-symbol';\n\nimport { DaterangepickerComponent, NgxDaterangepickerMd } from '@agorapulse/ngx-daterangepicker-material';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n computed,\n input,\n} from '@angular/core';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/de';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/es';\nimport 'dayjs/locale/fr';\nimport 'dayjs/locale/pt';\nimport localeData from 'dayjs/plugin/localeData';\nimport type { DatepickerMonth } from '../datepicker-month-picker/datepicker-month-picker.component';\nimport { DatepickerMonthPickerComponent } from '../datepicker-month-picker/datepicker-month-picker.component';\nimport { DatepickerPreset } from '../datepicker-preset';\n\nexport enum DatepickerMode {\n Single = 'Single',\n Multiple = 'Multiple',\n Range = 'Range',\n}\n\nexport interface Period {\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n}\n\n/**\n * A range just picked, and the preset it came from when there is one. A widened `Period` rather\n * than a type of its own, so callers typing `periodSelected` as a `Period` keep compiling.\n */\nexport interface SelectedPeriod extends Period {\n preset?: DatepickerPreset;\n}\n\nexport interface StartDate {\n startDate: dayjs.Dayjs;\n}\n\nenum SideEnum {\n left = 'left',\n right = 'right',\n}\n\nexport type FirstDayOfWeek = 'sunday' | 'monday';\n\nexport type Locale = 'en' | 'fr' | 'es' | 'de';\n\ntype RangesConfigPresetType = { [periodText: string]: [dayjs.Dayjs, dayjs.Dayjs] };\n\n/** A stable \"no shortcuts\" reference: a fresh object would reset the vendor. */\nconst NO_RANGES: RangesConfigPresetType = {};\n\n// TODO fix css for range mode (more lateral padding)\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-datepicker',\n templateUrl: './datepicker.component.html',\n imports: [ButtonComponent, DatepickerMonthPickerComponent, DropdownTriggerDirective, IconButtonComponent, NgxDaterangepickerMd],\n styleUrls: ['./datepicker.component.scss'],\n})\nexport class DatepickerComponent implements OnInit, OnChanges, AfterViewInit {\n @ViewChild('datepickerRef') datepickerRef!: DaterangepickerComponent;\n\n @Input() firstDayOfWeek = 'monday';\n @Input() locale = 'en';\n @Input() set maxDate(maxDate: dayjs.Dayjs | undefined) {\n this.maxDateValue = maxDate;\n if (maxDate) {\n this.maxDateStr = maxDate.toISOString();\n } else {\n this.maxDateStr = '';\n }\n }\n @Input() set minDate(minDate: dayjs.Dayjs | undefined) {\n this.minDateValue = minDate;\n if (minDate) {\n this.minDateStr = minDate.toISOString();\n } else {\n this.minDateStr = '';\n }\n }\n @Input({\n required: true,\n })\n mode!: DatepickerMode;\n @Input() selectedDate: dayjs.Dayjs | undefined = undefined;\n @Input() selectedDates: dayjs.Dayjs[] = [];\n @Input() selectedPeriod: Period = { startDate: undefined, endDate: undefined };\n /** Maximum number of days between the start and the end date in Range mode. Undefined means no limit. */\n dateLimit = input<number | undefined>(undefined);\n /** Shortcuts listed beside the calendars. Empty by default, and ignored outside Range mode. */\n presets = input<DatepickerPreset[]>([]);\n\n @Output() dateSelected = new EventEmitter<any>();\n @Output() periodSelected = new EventEmitter<SelectedPeriod>();\n\n DatepickerMode = DatepickerMode;\n localeConfig!: {\n customRangeLabel: string;\n daysOfWeek: string[];\n monthNames: string[];\n firstDay: number;\n };\n pageSet = false;\n maxDateStr: string = '';\n minDateStr: string = '';\n /** The same bounds as `minDateStr`/`maxDateStr`, kept as dayjs for the month pickers. */\n maxDateValue: dayjs.Dayjs | undefined = undefined;\n minDateValue: dayjs.Dayjs | undefined = undefined;\n\n /** A field and not an inline literal: the template would rebuild the object on every pass. */\n readonly monthTriggerConfig: ButtonConfig = { style: 'ghost', color: 'grey' };\n\n /** A getter and not a `computed`: `mode` is a plain `@Input`, which a computed would not track. */\n get hasPresets(): boolean {\n return this.presets().length > 0 && this.mode === DatepickerMode.Range;\n }\n\n /**\n * Memoised, and a shared constant when empty, so the reference only changes when `presets` does.\n * A fresh `ranges` object reaches the vendor's setter, which resets the calendars and drops the\n * start anchor and the in-range preview of a selection still in progress.\n */\n private readonly presetRanges = computed<RangesConfigPresetType>(() =>\n // Annotated as a tuple: an inline array literal here infers as `(string | [Dayjs, Dayjs])[]`,\n // which resolves `Object.fromEntries` to its untyped `any` overload instead of the typed one.\n Object.fromEntries(this.presets().map(({ label, range }): [string, [dayjs.Dayjs, dayjs.Dayjs]] => [label, range]))\n );\n\n get vendorRanges(): RangesConfigPresetType {\n return this.hasPresets ? this.presetRanges() : NO_RANGES;\n }\n\n constructor(\n public changeDetectorRef: ChangeDetectorRef,\n public symbolRegistry: SymbolRegistry\n ) {\n this.symbolRegistry.registerSymbols([apArrowLeft, apArrowRight]);\n }\n\n ngOnInit() {\n dayjs.extend(localeData);\n this.initDatePickerLocale();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.datepickerRef) {\n setTimeout(() => {\n this.datepickerRef.updateCalendars();\n this.changeDetectorRef.detectChanges();\n }, 100);\n }\n if (changes.selectedPeriod?.currentValue && this.datepickerRef) {\n if (this.selectedPeriod.startDate === null && this.selectedPeriod.endDate === null) {\n this.datepickerRef.clear();\n } else {\n this.datepickerRef.setStartDate(this.selectedPeriod?.startDate ?? dayjs(undefined));\n this.datepickerRef.setEndDate(this.selectedPeriod.endDate ?? dayjs(undefined));\n }\n }\n if (changes.mode?.currentValue === DatepickerMode.Single && this.datepickerRef) {\n this.setCalendarCurrentPage();\n }\n }\n ngAfterViewInit(): void {\n if (this.datepickerRef) {\n setTimeout(() => {\n if (this.mode === DatepickerMode.Range && this.selectedPeriod?.startDate) {\n this.datepickerRef.setStartDate(this.selectedPeriod.startDate);\n this.datepickerRef.setEndDate(this.selectedPeriod.endDate ?? this.selectedPeriod.startDate);\n }\n this.datepickerRef.updateCalendars();\n this.setCalendarCurrentPage();\n }, 100);\n }\n }\n\n initDatePickerLocale() {\n if (this.locale) {\n dayjs.locale(this.locale);\n }\n let firstDayOfWeekIndex: number;\n if (this.firstDayOfWeek === 'sunday') {\n firstDayOfWeekIndex = 0;\n } else if (this.firstDayOfWeek === 'monday') {\n firstDayOfWeekIndex = 1;\n } else {\n firstDayOfWeekIndex = dayjs.localeData().firstDayOfWeek();\n }\n this.localeConfig = {\n // The vendor demands this label, but the entry is never shown: it only revealed the\n // calendars, which `alwaysShowCalendars` keeps visible anyway.\n customRangeLabel: 'Custom',\n daysOfWeek: dayjs.weekdaysMin(),\n monthNames: dayjs.months(),\n firstDay: firstDayOfWeekIndex,\n };\n }\n\n isCustomDate = (date: any) => {\n const classes: string[] = [];\n if (this.mode === DatepickerMode.Multiple) {\n classes.push(this.isSelected(date) ? 'active' : 'force-inactive');\n } else if (this.mode === DatepickerMode.Single) {\n classes.push(this.selectedDate && this.selectedDate.isSame(date, 'day') ? 'active' : 'force-inactive');\n } else if (this.mode === DatepickerMode.Range) {\n classes.push('range-picker-mode');\n // Workaround to fix the auto-active today date when no date is selected\n if (dayjs().isSame(date, 'day') && !this.selectedPeriod?.startDate && !this.selectedPeriod?.endDate) {\n classes.push('force-inactive');\n }\n // The picker only flags the days *between* start and hover as `in-range`, never the hovered one.\n const hoveredDate = this.datepickerRef?.pickingDate ? this.datepickerRef?.nowHoveredDate : undefined;\n if (hoveredDate && dayjs(date).isSame(dayjs(hoveredDate), 'day')) {\n classes.push('hovered-end');\n }\n }\n return classes;\n };\n\n private isSelected(date: any) {\n return this.selectedDates && this.selectedDates.some(selectedDate => selectedDate.isSame(date, 'day'));\n }\n\n onStartDateChanged(event: StartDate) {\n const date = event.startDate.toDate();\n const dateLocalTime = new Date(date.getTime());\n const dayJsDate = dayjs(dateLocalTime);\n if (this.mode === DatepickerMode.Range) {\n return;\n }\n this.selectedDate = dayJsDate;\n this.datepickerRef.setEndDate(dayJsDate);\n if (this.pageSet) {\n this.pageSet = false;\n } else {\n this.dateSelected.emit(dayJsDate.clone());\n }\n if (this.datepickerRef) {\n this.datepickerRef.updateCalendars();\n }\n }\n\n onDatesUpdated(event: Period) {\n // `autoApply` makes the vendor emit on the FIRST click of a range, with the end set equal\n // to the start. Emitting that reads as a finished selection: a dropdown closes on it, so\n // the second click never happens and no range wider than a day can be picked. While\n // `pickingDate` is true the user is still choosing the end — say nothing yet.\n if (this.mode === DatepickerMode.Range && !this.datepickerRef?.pickingDate) {\n const startDate = event.startDate?.toDate();\n const startDateLocalTime = startDate ? new Date(startDate.getTime()) : new Date();\n const endDate = event.endDate?.toDate();\n const endDateLocalTime = endDate ? new Date(endDate.getTime()) : new Date();\n this.periodSelected.emit({\n startDate: dayjs(startDateLocalTime).startOf('day'),\n endDate: dayjs(endDateLocalTime).endOf('day'),\n preset: this.chosenPreset(),\n });\n }\n if (this.datepickerRef) {\n this.datepickerRef.updateCalendars();\n // Nothing is emitted above, so nothing writes `selectedPeriod` back, `ngOnChanges` never\n // runs and this OnPush panel keeps the previous cells. Render here for the start anchor.\n this.changeDetectorRef.detectChanges();\n }\n }\n\n /**\n * The preset the current range came from. The vendor keeps `chosenRange` up to date both ways —\n * `clickRange` writes the clicked label, `clickDate` resets it to `customRangeLabel` — and those\n * labels are the keys of its `ranges` table, so they are unique. Matching on the label rather\n * than on a position survives a translated or reordered shortcut.\n */\n private chosenPreset(): DatepickerPreset | undefined {\n const chosen = this.datepickerRef?.chosenRange;\n return chosen ? this.presets().find(preset => preset.label === chosen) : undefined;\n }\n\n onNextMonth() {\n this.datepickerRef.clickNext(SideEnum.right);\n }\n\n onLeftMonthPicked(picked: DatepickerMonth): void {\n this.moveCalendarTo(picked, SideEnum.left);\n }\n\n onRightMonthPicked(picked: DatepickerMonth): void {\n this.moveCalendarTo(picked, SideEnum.right);\n }\n\n /**\n * The vendor moves the view only — never the selection — and clamps to its own min/max on the\n * way, so the picker's disabled months are a second line of defence rather than the only one.\n */\n private moveCalendarTo({ month, year }: DatepickerMonth, side: SideEnum): void {\n this.datepickerRef.monthOrYearChanged(month, year, side);\n this.datepickerRef.updateCalendars();\n this.changeDetectorRef.detectChanges();\n }\n\n onPreviousMonth() {\n this.datepickerRef.clickPrev(SideEnum.left);\n }\n\n /**\n * Ugly hack used here to open the calendar on the right day if they are selected dates\n * * https://github.com/fetrarij/ngx-daterangepicker-material/issues/139\n */\n setCalendarCurrentPage(): void {\n const selectedFirstDate = this.selectedDates.length > 0 ? this.selectedDates[0] : this.selectedDate;\n if (selectedFirstDate && selectedFirstDate.isValid() && this.mode !== DatepickerMode.Range) {\n const endDate = selectedFirstDate.clone();\n endDate.add(1, 'month');\n this.pageSet = true;\n this.datepickerRef.setStartDate(selectedFirstDate);\n this.datepickerRef.setEndDate(endDate);\n this.datepickerRef.updateView();\n }\n this.changeDetectorRef.detectChanges();\n }\n}\n","<div\n class=\"custom-calendar\"\n [class.single-month]=\"mode !== DatepickerMode.Range\">\n <div class=\"custom-header\">\n @if (datepickerRef.leftCalendar.month) {\n <div class=\"month-header\">\n <ap-icon-button\n symbolId=\"arrow-left\"\n ariaLabel=\"Previous month\"\n (onClick)=\"onPreviousMonth()\" />\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"leftMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.leftCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #leftMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.leftCalendar.month.month()\"\n [year]=\"datepickerRef.leftCalendar.month.year()\"\n (monthSelected)=\"onLeftMonthPicked($event)\" />\n <!-- Outside Range a single month is rendered, so both arrows frame its header. -->\n @if (mode !== DatepickerMode.Range) {\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n (onClick)=\"onNextMonth()\" />\n }\n </div>\n }\n @if (mode === DatepickerMode.Range && datepickerRef.rightCalendar.month) {\n <div class=\"month-header\">\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"rightMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.rightCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #rightMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.rightCalendar.month.month()\"\n [year]=\"datepickerRef.rightCalendar.month.year()\"\n (monthSelected)=\"onRightMonthPicked($event)\" />\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n (onClick)=\"onNextMonth()\" />\n </div>\n }\n </div>\n <!--\n `showDropdowns` is on not for its own selects — those render into the header row we hide —\n but because the vendor only maintains `calendarVariables[side].dropdowns` while it is, and\n that is what `monthOrYearChanged` reads to move a calendar.\n -->\n <ngx-daterangepicker-material\n #datepickerRef\n [class.hide-ranges]=\"!hasPresets\"\n [alwaysShowCalendars]=\"true\"\n [autoApply]=\"true\"\n [customRangeDirection]=\"true\"\n [dateLimit]=\"dateLimit() ?? 0\"\n [linkedCalendars]=\"true\"\n [isCustomDate]=\"$any(isCustomDate)\"\n [locale]=\"localeConfig\"\n [maxDate]=\"maxDateStr\"\n [minDate]=\"minDateStr\"\n [ranges]=\"vendorRanges\"\n [showCustomRangeLabel]=\"false\"\n [showDropdowns]=\"true\"\n [singleDatePicker]=\"mode !== DatepickerMode.Range\"\n (datesUpdated)=\"onDatesUpdated($event)\"\n (startDateChanged)=\"onStartDateChanged($event)\" />\n</div>\n","import { StopPropagationDirective } from '@agorapulse/ui-components/directives';\nimport { DropdownOverlay } from '@agorapulse/ui-components/dropdown-base';\nimport { DropdownContentDirective, DropdownPanelComponent } from '@agorapulse/ui-components/dropdown-panel';\nimport { FloatingPlacement } from '@agorapulse/ui-components/floating';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { APP_ID, ChangeDetectionStrategy, Component, computed, inject, input, output, TemplateRef, viewChild } from '@angular/core';\nimport dayjs from 'dayjs';\nimport { DatepickerComponent, DatepickerMode, Period, SelectedPeriod } from '../datepicker/datepicker.component';\nimport { DatepickerPreset } from '../datepicker-preset';\n\n/**\n * A dropdown component that displays a datepicker (single, multiple, or range mode)\n * in an overlay. Exposes open/close/toggle so it can be driven by apDropdownTrigger.\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-datepicker-dropdown',\n templateUrl: './datepicker-dropdown.component.html',\n styleUrls: ['./datepicker-dropdown.component.scss'],\n imports: [DatepickerComponent, DropdownContentDirective, DropdownPanelComponent, NgTemplateOutlet, StopPropagationDirective],\n})\nexport class DatepickerDropdownComponent implements DropdownOverlay {\n /**\n * Stable id for the panel (`role=\"dialog\"`), so a trigger can bind `aria-controls` to it.\n * Combines the app id — several federated Angular apps can share one page — with a per-instance\n * random suffix computed once at construction. No shared mutable counter, and no reliance on\n * `crypto.randomUUID()`, which browsers refuse outside a secure (HTTPS/localhost) context.\n */\n readonly panelId = `${inject(APP_ID)}-datepicker-panel-${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n private readonly panel = viewChild(DropdownPanelComponent);\n mode = input.required<DatepickerMode>();\n selectedDate = input<dayjs.Dayjs | undefined>(undefined);\n selectedDates = input<dayjs.Dayjs[]>([]);\n selectedPeriod = input<Period>({ startDate: undefined, endDate: undefined });\n minDate = input<dayjs.Dayjs | undefined>(undefined);\n maxDate = input<dayjs.Dayjs | undefined>(undefined);\n /** Maximum number of days between the start and the end date in Range mode. Undefined means no limit. */\n dateLimit = input<number | undefined>(undefined);\n /** Caption shown at the bottom of the panel, e.g. to explain a selection constraint. */\n hint = input<string | undefined>(undefined);\n /**\n * Rendered under `hint`, for what a caption cannot carry — a banner with its own button. A\n * `TemplateRef` and not an `ng-content`: the footer shows inside the overlay's embedded view.\n */\n panelFooter = input<TemplateRef<unknown> | undefined>(undefined);\n firstDayOfWeek = input<'monday' | 'sunday'>('monday');\n locale = input('en');\n /** Shortcuts listed beside the calendars. Empty: no column at all. */\n presets = input<DatepickerPreset[]>([]);\n showBackdrop = input(true);\n /**\n * Close the overlay once the selection is complete. When false it stays open until backdrop\n * click or Escape — which lets the host vet a selection before anything closes.\n */\n closeOnSelect = input(true);\n disabled = input(false);\n /** Panel placement. Unset means derived from the anchor mode, i.e. `bottom-start`. */\n readonly placement = input<FloatingPlacement>();\n\n opened = output<void>();\n closed = output<void>();\n dateSelected = output<dayjs.Dayjs>();\n periodSelected = output<SelectedPeriod>();\n readonly isOpen = computed(() => this.panel()?.isOpen() ?? false);\n\n open(triggerElement?: HTMLElement): void {\n const panel = this.panel();\n if (this.disabled() || this.isOpen() || !panel) return;\n\n panel.open(triggerElement);\n this.opened.emit();\n }\n\n /** `closed` is relayed from the panel, which fires it for a gesture as well as for this call. */\n close(): void {\n this.panel()?.close();\n }\n\n toggle(triggerElement?: HTMLElement): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open(triggerElement);\n }\n }\n\n onDateSelected(date: dayjs.Dayjs): void {\n this.dateSelected.emit(date);\n if (this.closeOnSelect() && this.mode() !== DatepickerMode.Multiple) {\n this.close();\n }\n }\n\n onPeriodSelected(period: SelectedPeriod): void {\n this.periodSelected.emit(period);\n if (this.closeOnSelect() && period.startDate && period.endDate) {\n this.close();\n }\n }\n}\n","<ap-dropdown-panel\n [placement]=\"placement()\"\n [showBackdrop]=\"showBackdrop()\"\n (closed)=\"closed.emit()\">\n <div\n *apDropdownContent\n class=\"ap-datepicker-dropdown__content\"\n role=\"dialog\"\n aria-label=\"Datepicker\"\n tabindex=\"-1\"\n [id]=\"panelId\">\n <ap-datepicker\n apStopPropagation\n [dateLimit]=\"dateLimit()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [maxDate]=\"maxDate()\"\n [minDate]=\"minDate()\"\n [mode]=\"mode()\"\n [presets]=\"presets()\"\n [selectedDate]=\"selectedDate()\"\n [selectedDates]=\"selectedDates()\"\n [selectedPeriod]=\"selectedPeriod()\"\n (dateSelected)=\"onDateSelected($event)\"\n (periodSelected)=\"onPeriodSelected($event)\" />\n @if (hint()) {\n <div class=\"ap-datepicker-dropdown__hint\">{{ hint() }}</div>\n }\n @if (panelFooter(); as footer) {\n <div class=\"ap-datepicker-dropdown__footer\">\n <ng-container [ngTemplateOutlet]=\"footer\" />\n </div>\n }\n </div>\n</ap-dropdown-panel>\n","import dayjs from 'dayjs';\n\n/** One shortcut in the column beside the calendars. */\nexport interface DatepickerPreset {\n /** Stable id, independent of the displayed label. */\n key: string;\n /** Text shown to the user. Already translated. */\n label: string;\n range: [dayjs.Dayjs, dayjs.Dayjs];\n}\n\nexport type DefaultPresetKey = 'yesterday' | 'lastWeek' | 'last30Days' | 'lastMonth' | 'thisMonth';\n\nconst DEFAULT_LABELS: Record<DefaultPresetKey, string> = {\n yesterday: 'Yesterday',\n lastWeek: 'Last Week',\n last30Days: 'Last 30 days',\n lastMonth: 'Previous month',\n thisMonth: 'This month',\n};\n\n/**\n * The five shortcuts a picker offers by default. A function and not a constant, so the ranges are\n * computed when shown: a session left open across midnight would otherwise offer yesterday's.\n */\nexport function defaultDatepickerPresets(\n labels?: Partial<Record<DefaultPresetKey, string>>,\n today: dayjs.Dayjs = dayjs()\n): DatepickerPreset[] {\n const yesterday = today.subtract(1, 'day');\n const previousMonth = today.subtract(1, 'month');\n const label = (key: DefaultPresetKey) => labels?.[key] ?? DEFAULT_LABELS[key];\n\n return [\n { key: 'yesterday', label: label('yesterday'), range: [yesterday, yesterday] },\n { key: 'lastWeek', label: label('lastWeek'), range: [today.subtract(7, 'day'), yesterday] },\n { key: 'last30Days', label: label('last30Days'), range: [today.subtract(30, 'day'), yesterday] },\n {\n key: 'lastMonth',\n label: label('lastMonth'),\n range: [previousMonth.startOf('month'), previousMonth.endOf('month')],\n },\n { key: 'thisMonth', label: label('thisMonth'), range: [today.startOf('month'), today.endOf('month')] },\n ];\n}\n","import dayjs from 'dayjs';\nimport { DatepickerMode, Period } from './datepicker/datepicker.component';\n\n/**\n * An `ap-datepicker-select` value. Its shape depends on the mode: a date in Single, a Period in\n * Range, an array of dates in Multiple. TypeScript cannot tie the two together — `mode` is a\n * runtime value — hence the guard below.\n */\nexport type DatepickerValue = dayjs.Dayjs | Period | dayjs.Dayjs[];\n\nconst EXPECTED: Record<DatepickerMode, string> = {\n [DatepickerMode.Single]: 'a single date',\n [DatepickerMode.Range]: 'a Period ({ startDate, endDate })',\n [DatepickerMode.Multiple]: 'an array of dates',\n};\n\nfunction describe(value: DatepickerValue | unknown): string {\n if (Array.isArray(value)) {\n return `an array of ${value.length} date${value.length === 1 ? '' : 's'}`;\n }\n if (dayjs.isDayjs(value)) {\n return 'a single date';\n }\n if (isPeriod(value)) {\n return 'a Period ({ startDate, endDate })';\n }\n return 'an unrecognised value';\n}\n\n/** Tells a `Period` from the two other shapes, without an `as`. */\nexport function isPeriod(value: unknown): value is Period {\n // Must be a non-null object\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n // Must not be an array\n if (Array.isArray(value)) {\n return false;\n }\n\n // Must not be a dayjs instance\n if (dayjs.isDayjs(value)) {\n return false;\n }\n\n // Must have startDate and endDate properties\n const obj = value as Record<string, unknown>;\n\n // Check that at least one of startDate/endDate is defined as an own property\n const hasStartDate = 'startDate' in obj;\n const hasEndDate = 'endDate' in obj;\n\n if (!hasStartDate && !hasEndDate) {\n return false;\n }\n\n const startDate = obj.startDate;\n const endDate = obj.endDate;\n\n // Each field must be either undefined/null or a dayjs instance\n const isValidDateField = (field: unknown): boolean => {\n return field === undefined || field === null || dayjs.isDayjs(field);\n };\n\n return isValidDateField(startDate) && isValidDateField(endDate);\n}\n\nfunction matches(mode: DatepickerMode, value: unknown): boolean {\n if (mode === DatepickerMode.Multiple) {\n return Array.isArray(value);\n }\n if (mode === DatepickerMode.Single) {\n return dayjs.isDayjs(value);\n }\n return isPeriod(value);\n}\n\n/**\n * Throws when the value does not match the mode. An empty value (`undefined`, `null`) is accepted\n * everywhere: it means nothing is selected.\n */\nexport function assertValueMatchesMode(mode: DatepickerMode, value: unknown): void {\n if (value === undefined || value === null) {\n return;\n }\n if (!matches(mode, value)) {\n throw new Error(`ap-datepicker-select: mode=\"${mode}\" expects ${EXPECTED[mode]}, received ${describe(value)}.`);\n }\n}\n","import { LOCALE_CONFIG, LocaleService } from '@agorapulse/ngx-daterangepicker-material';\nimport { OverflowCountDirective, OverflowCounterDirective, OverflowItemDirective } from '@agorapulse/ui-components/directives';\nimport { DropdownTriggerDirective } from '@agorapulse/ui-components/dropdown-base';\nimport { FloatingPlacement } from '@agorapulse/ui-components/floating';\nimport { IconButtonComponent } from '@agorapulse/ui-components/icon-button';\nimport { InputGroupComponent } from '@agorapulse/ui-components/input-group';\nimport { TagComponent } from '@agorapulse/ui-components/tag';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { apCalendar, apChevronDown, apChevronUp, apClock, apClose, apInfo, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport dayjs from 'dayjs';\nimport { DatepickerDropdownComponent } from '../datepicker-dropdown/datepicker-dropdown.component';\nimport { DatepickerPreset } from '../datepicker-preset';\nimport { assertValueMatchesMode, DatepickerValue, isPeriod } from '../datepicker-value';\nimport { DatepickerMode, FirstDayOfWeek, Locale, Period, SelectedPeriod } from '../datepicker/datepicker.component';\n\nconst EMPTY_PERIOD: Period = { startDate: undefined, endDate: undefined };\n\n/** A selected date, as the field shows it in Multiple mode. */\nexport interface DateChip {\n label: string;\n date: dayjs.Dayjs;\n}\n\n/** What the field just committed, and the preset it came from. */\nexport interface DatepickerSelection {\n /** The committed value, in the shape the mode requires. */\n value: DatepickerValue | undefined;\n /** The preset clicked, when the value came from one. Absent from a calendar pick. */\n preset?: DatepickerPreset;\n}\n\n/**\n * The design system's date field: it shows the value, opens the shared panel and binds to a form.\n * It carries no label of its own — wrap it in an `ap-form-field`, as `ap-select` is.\n *\n * @example\n * ```html\n * <ap-form-field>\n * <label for=\"period\">Reporting period</label>\n * <ap-datepicker-select [mode]=\"DatepickerMode.Range\" [(value)]=\"period\" [presets]=\"presets\" />\n * </ap-form-field>\n * ```\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-datepicker-select',\n templateUrl: './datepicker-select.component.html',\n styleUrl: './datepicker-select.component.scss',\n imports: [\n DatepickerDropdownComponent,\n DropdownTriggerDirective,\n IconButtonComponent,\n InputGroupComponent,\n OverflowCountDirective,\n OverflowCounterDirective,\n OverflowItemDirective,\n TagComponent,\n SymbolComponent,\n TooltipDirective,\n ],\n providers: [\n withSymbols(apCalendar, apChevronDown, apChevronUp, apClock, apClose, apInfo),\n // The vendored DaterangepickerComponent the panel renders injects LocaleService, and the plain\n // NgxDaterangepickerMd module provides none — only its forRoot() does.\n { provide: LOCALE_CONFIG, useValue: {} },\n LocaleService,\n ],\n host: {\n class: 'ap-datepicker-select',\n '[class.ap-datepicker-select--open]': 'isOpen()',\n '[class.ap-datepicker-select--multiple]': 'mode() === DatepickerMode.Multiple',\n },\n // Global `.ap-datepicker-select*` classes, readable and reusable outside Angular.\n encapsulation: ViewEncapsulation.None,\n})\nexport class DatepickerSelectComponent implements FormValueControl<DatepickerValue | undefined | null> {\n readonly mode = input.required<DatepickerMode>();\n /**\n * The selection. Its shape follows the mode: a date in Single, a `Period` in Range, an array in\n * Multiple. A shape that does not match the mode throws on the first render.\n *\n * Empty is `undefined`, and `null` is accepted for it: a form holding a nullable date has no\n * other empty to offer, and this is the type a binding is checked against.\n */\n readonly value = model<DatepickerValue | undefined | null>(undefined);\n /** Disables the field. A form writes here too, rather than to a second flag of its own. */\n readonly disabled = input(false);\n readonly invalid = input(false);\n readonly touched = input(false);\n readonly minDate = input<dayjs.Dayjs | undefined>(undefined);\n readonly maxDate = input<dayjs.Dayjs | undefined>(undefined);\n /**\n * Maximum number of days between the start and the end, in Range mode. It bars the days beyond\n * the limit without saying so: pair it with a `panelHint` when the constraint deserves a word.\n */\n readonly maxRangeDays = input<number | undefined>(undefined);\n /** Caption shown at the bottom of the panel, to explain a constraint for instance. */\n readonly panelHint = input<string | undefined>(undefined);\n /** Rendered under `panelHint`, for what a sentence cannot carry — a banner with its own button. */\n readonly panelFooter = input<TemplateRef<unknown> | undefined>(undefined);\n /**\n * Consulted before a selection is committed. Returning `false` keeps the current value, keeps the\n * panel open and emits `selectionRejected`.\n *\n * A constraint the panel can apply itself (`minDate`, `maxDate`, `maxRangeDays`) belongs there\n * instead: it bars the days rather than letting them be clicked and then refused.\n */\n readonly canSelect = input<((value: DatepickerValue) => boolean) | undefined>(undefined);\n /** Shortcuts listed beside the calendars. Empty: no column at all. */\n readonly presets = input<DatepickerPreset[]>([]);\n readonly placeholder = input('Select date');\n /**\n * Accessible name of the field, since `role=\"combobox\"` is not a name-from-content role and the\n * component carries no internal `<label>` — surround it with an `ap-form-field` for the visible\n * label, and mirror its text here.\n */\n readonly ariaLabel = input<string | undefined>(undefined);\n /**\n * dayjs format of the displayed text. Defaults to `'MM/DD/YYYY'`, which needs no plugin: the\n * localized tokens (`ll`, `LL`) assume the host application loaded `dayjs/plugin/localizedFormat`.\n */\n readonly dateFormat = input('MM/DD/YYYY');\n readonly locale = input<Locale>('en');\n readonly firstDayOfWeek = input<FirstDayOfWeek>('monday');\n /** Panel placement. Unset means derived from the anchor mode, i.e. `bottom-start`. */\n readonly placement = input<FloatingPlacement>();\n /** Shows a clear cross in the field as soon as something is selected. */\n readonly clearable = input(false);\n /** IANA time zone name. When set, a chip shows its abbreviation beside the field. */\n readonly timeZone = input<string | undefined>(undefined);\n /** Tooltip carried by the info icon next to the chip. */\n readonly timeZoneTooltip = input<string | undefined>(undefined);\n\n /** Blur of the combobox. A form reads it to mark the field touched. */\n readonly touch = output<void>();\n /** The committed value with the preset that produced it, beside `valueChange` — one event, not two halves to correlate. */\n readonly selectionChange = output<DatepickerSelection>();\n /** The selection `canSelect` just refused. The field's value has not moved. */\n readonly selectionRejected = output<DatepickerValue>();\n /** The panel just opened, just closed, so that what a host shows beside it can start over. */\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n protected readonly DatepickerMode = DatepickerMode;\n\n /**\n * The panel only closes itself without a refusal predicate: it emits the selection then closes,\n * so a veto would land too late. With one, the field closes what it accepted.\n */\n protected readonly closesOnSelect = computed(() => this.canSelect() === undefined);\n\n /** Fed by the dropdown's `opened`/`closed` rather than read back from it: a host class can only bind to our own members. */\n protected readonly isOpen = signal(false);\n\n /** The dropdown driving the panel — held only to close it when the field becomes disabled. */\n private readonly dropdown = viewChild<DatepickerDropdownComponent>('dropdown');\n\n /**\n * Closes an already-open panel the moment the field becomes disabled. The dropdown only guards\n * *new* opens, and its panel is a CDK overlay detached from this component's DOM.\n */\n private readonly closeOnDisable = effect(() => {\n if (this.disabled()) {\n this.dropdown()?.close();\n }\n });\n\n /** Checks the value once, and sorts it into the three shapes the panel expects. */\n private readonly shaped = computed(() => {\n const mode = this.mode();\n // Both empties collapse here, so nothing below has to know which one it was handed.\n const value = this.value() ?? undefined;\n assertValueMatchesMode(mode, value);\n\n if (mode === DatepickerMode.Single) {\n return { date: dayjs.isDayjs(value) ? value : undefined, dates: [], period: EMPTY_PERIOD };\n }\n if (mode === DatepickerMode.Multiple) {\n return { date: undefined, dates: Array.isArray(value) ? value : [], period: EMPTY_PERIOD };\n }\n return { date: undefined, dates: [], period: value !== undefined && isPeriod(value) ? value : EMPTY_PERIOD };\n });\n\n protected readonly selectedDate = computed(() => this.shaped().date);\n protected readonly selectedDates = computed(() => this.shaped().dates);\n /**\n * Bumped to re-impose the value a refusal kept. The panel only reacts to `selectedPeriod`\n * changing identity, so putting it back takes a fresh object.\n */\n private readonly restoreNonce = signal(0);\n\n protected readonly selectedPeriod = computed(() => {\n this.restoreNonce();\n return { ...this.shaped().period };\n });\n\n protected readonly hasValue = computed(() => {\n const mode = this.mode();\n if (mode === DatepickerMode.Single) {\n return this.selectedDate() !== undefined;\n }\n if (mode === DatepickerMode.Multiple) {\n return this.selectedDates().length > 0;\n }\n const { startDate, endDate } = this.selectedPeriod();\n return startDate !== undefined || endDate !== undefined;\n });\n\n /** The field's text: a one-day period reads as that day. Empty in Multiple, where the field shows chips instead. */\n readonly displayed = computed(() => {\n const format = (date: dayjs.Dayjs) => date.locale(this.locale()).format(this.dateFormat());\n const mode = this.mode();\n\n if (mode === DatepickerMode.Single) {\n const date = this.selectedDate();\n return date ? format(date) : '';\n }\n if (mode === DatepickerMode.Range) {\n const { startDate, endDate } = this.selectedPeriod();\n if (!startDate || !endDate) {\n return '';\n }\n return startDate.isSame(endDate, 'day') ? format(startDate) : `${format(startDate)} - ${format(endDate)}`;\n }\n return '';\n });\n\n /** The chips shown in Multiple mode, one per selected date. */\n readonly chips = computed<DateChip[]>(() =>\n this.selectedDates().map(date => ({\n label: date.locale(this.locale()).format(this.dateFormat()),\n date,\n }))\n );\n\n /** The zone abbreviation (\"EST\", \"CEST\"…), computed without touching dayjs globally. */\n readonly timeZoneOffset = computed(() => {\n const timeZone = this.timeZone();\n if (!timeZone) {\n return '';\n }\n return (\n new Intl.DateTimeFormat('en-US', { timeZone, timeZoneName: 'short' })\n .formatToParts(new Date())\n .find(({ type }) => type === 'timeZoneName')?.value ?? ''\n );\n });\n\n onDateSelected(date: dayjs.Dayjs): void {\n const mode = this.mode();\n if (mode === DatepickerMode.Single) {\n this.commit(date);\n return;\n }\n if (mode === DatepickerMode.Multiple) {\n // The panel re-emits the same date on every click: toggling is ours to do.\n const dates = this.selectedDates();\n const without = dates.filter(selected => !selected.isSame(date, 'day'));\n this.commit(without.length === dates.length ? [...dates, date] : without);\n }\n }\n\n /** Drops a date from the selection, from the chip the user closed. */\n removeDate(chip: DateChip): void {\n this.commit(this.selectedDates().filter(date => date !== chip.date));\n }\n\n protected onPanelOpened(): void {\n this.isOpen.set(true);\n this.touch.emit();\n this.opened.emit();\n }\n\n protected onPanelClosed(): void {\n this.isOpen.set(false);\n this.touch.emit();\n this.closed.emit();\n }\n\n /** The preset is stripped from the value: it says where the value came from, it is not part of it. */\n onPeriodSelected({ preset, ...period }: SelectedPeriod): void {\n if (this.mode() === DatepickerMode.Range) {\n this.commit(period, preset);\n }\n }\n\n /** Clears the selection. Stops propagation so the panel does not reopen. */\n clear(event: Event): void {\n event.stopPropagation();\n this.touch.emit();\n this.commit(undefined);\n }\n\n /** The single write point: the signal and the form get the same value, and a disabled field none. */\n private commit(value: DatepickerValue | undefined, preset?: DatepickerPreset): void {\n if (this.disabled()) return;\n\n // Clearing is not a selection: the predicate has no say in it.\n if (value !== undefined && this.canSelect()?.(value) === false) {\n this.selectionRejected.emit(value);\n this.restoreNonce.update(nonce => nonce + 1);\n return;\n }\n\n this.value.set(value);\n this.selectionChange.emit({ value, preset });\n\n if (!this.closesOnSelect() && this.isComplete(value)) {\n this.dropdown()?.close();\n }\n }\n\n /** True when nothing is left to pick — the panel's own closing criterion. */\n private isComplete(value: DatepickerValue | undefined): boolean {\n const mode = this.mode();\n if (mode === DatepickerMode.Multiple) {\n // A multiple selection is never finished: the panel stays open from one click to the next.\n return false;\n }\n if (mode === DatepickerMode.Single) {\n return value !== undefined;\n }\n return value !== undefined && isPeriod(value) && value.startDate !== undefined && value.endDate !== undefined;\n }\n}\n","<!--\n The trigger is the group itself, not the row inside it: `[apDropdownTrigger]` only listens on its\n own host, and that row is content-height and sits inside the group's padding — so a click on the\n band above, below or beside it fell on nothing. The group is also what the panel should line up\n with, and `toggle()` anchors the overlay to the trigger.\n\n Nothing here is a bare `ap-input-group` child, so its `ap-symbol` ng-content slot is unused and\n the whole row lands in the default slot, in source order (icon, value, clear, chevron).\n-->\n<ap-input-group\n [apDropdownTrigger]=\"dropdown\"\n [class.invalid]=\"invalid() && touched()\"\n [disabled]=\"disabled()\">\n <div class=\"ap-datepicker-select__field\">\n <ap-symbol\n size=\"sm\"\n symbolId=\"calendar\" />\n\n <!--\n The combobox is this box and not the field around it: ng-select does the same, carrying the\n role on its inner input so the clear and the arrow stay its siblings rather than its\n descendants. The field keeps [apDropdownTrigger] — it is the click surface and the overlay's\n anchor — and the directive listens on its host, so keys pressed here still reach it by\n bubbling. Being the growing box (flex: 1) also makes it the one that measures the chip row.\n -->\n <div\n #overflow=\"apOverflowCount\"\n class=\"ap-datepicker-select__values\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n apOverflowCount\n [attr.aria-label]=\"ariaLabel()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-controls]=\"dropdown.panelId\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-invalid]=\"invalid() && touched()\"\n (blur)=\"touch.emit()\">\n @if (mode() === DatepickerMode.Multiple && chips().length > 0) {\n @for (chip of chips(); track chip.date.valueOf()) {\n <ap-tag\n apOverflowItem\n color=\"grey\"\n [mini]=\"true\"\n [clearable]=\"!disabled()\"\n (clear)=\"removeDate(chip)\">\n {{ chip.label }}\n </ap-tag>\n }\n @if (overflow.hiddenCount() > 0) {\n <ap-tag\n apOverflowCounter\n color=\"grey\"\n [mini]=\"true\">\n +{{ overflow.hiddenCount() }}\n </ap-tag>\n }\n } @else if (displayed()) {\n <span class=\"ap-datepicker-select__value\">{{ displayed() }}</span>\n } @else {\n <span class=\"ap-datepicker-select__placeholder\">{{ placeholder() }}</span>\n }\n </div>\n\n <!--\n Before the chevron, as ng-select orders its own container: value, clear, arrow. Sitting\n inside the trigger, a click here would bubble up and open the panel — hence the\n stopPropagation() in clear().\n -->\n @if (clearable() && hasValue() && !disabled()) {\n <ap-icon-button\n class=\"ap-datepicker-select__clear\"\n type=\"flat\"\n name=\"datepicker-clear\"\n symbolId=\"close\"\n ariaLabel=\"Clear selection\"\n (click)=\"clear($event)\" />\n }\n\n <span class=\"ap-datepicker-select__chevron\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"isOpen() ? 'chevron-up' : 'chevron-down'\" />\n </span>\n </div>\n</ap-input-group>\n\n@if (timeZone(); as zone) {\n <div\n class=\"ap-datepicker-select__timezone\"\n apTooltipPosition=\"bottom\"\n [apTooltip]=\"zone\">\n <ap-symbol\n size=\"sm\"\n symbolId=\"clock\"\n color=\"grey\" />\n <span class=\"ap-datepicker-select__timezone-offset\">{{ timeZoneOffset() }}</span>\n </div>\n @if (timeZoneTooltip(); as tooltip) {\n <ap-symbol\n class=\"ap-datepicker-select__timezone-info\"\n size=\"sm\"\n symbolId=\"info\"\n color=\"grey-blue\"\n apTooltipPosition=\"bottom\"\n [apTooltip]=\"tooltip\" />\n }\n}\n\n<ap-datepicker-dropdown\n #dropdown\n [closeOnSelect]=\"closesOnSelect()\"\n [dateLimit]=\"maxRangeDays()\"\n [placement]=\"placement()\"\n [disabled]=\"disabled()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [hint]=\"panelHint()\"\n [locale]=\"locale()\"\n [maxDate]=\"maxDate()\"\n [minDate]=\"minDate()\"\n [mode]=\"mode()\"\n [panelFooter]=\"panelFooter()\"\n [presets]=\"presets()\"\n [selectedDate]=\"selectedDate()\"\n [selectedDates]=\"selectedDates()\"\n [selectedPeriod]=\"selectedPeriod()\"\n (closed)=\"onPanelClosed()\"\n (dateSelected)=\"onDateSelected($event)\"\n (opened)=\"onPanelOpened()\"\n (periodSelected)=\"onPeriodSelected($event)\" />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agorapulse-ui-components-datepicker.mjs","sources":["../../../libs/ui-components/datepicker/src/datepicker-month-picker/datepicker-month-picker.component.ts","../../../libs/ui-components/datepicker/src/datepicker-month-picker/datepicker-month-picker.component.html","../../../libs/ui-components/datepicker/src/datepicker/datepicker.component.ts","../../../libs/ui-components/datepicker/src/datepicker/datepicker.component.html","../../../libs/ui-components/datepicker/src/datepicker-dropdown/datepicker-dropdown.component.ts","../../../libs/ui-components/datepicker/src/datepicker-dropdown/datepicker-dropdown.component.html","../../../libs/ui-components/datepicker/src/datepicker-preset.ts","../../../libs/ui-components/datepicker/src/datepicker-value.ts","../../../libs/ui-components/datepicker/src/datepicker-select/datepicker-select.component.ts","../../../libs/ui-components/datepicker/src/datepicker-select/datepicker-select.component.html","../../../libs/ui-components/datepicker/src/agorapulse-ui-components-datepicker.ts"],"sourcesContent":["import type { ButtonConfig } from '@agorapulse/ui-components/button';\nimport { ButtonComponent } from '@agorapulse/ui-components/button';\nimport type { DropdownOverlay } from '@agorapulse/ui-components/dropdown-base';\nimport { createDropdownOverlay } from '@agorapulse/ui-components/dropdown-base';\nimport { IconButtonComponent } from '@agorapulse/ui-components/icon-button';\nimport { apArrowLeft, apArrowRight, withSymbols } from '@agorapulse/ui-symbol';\nimport { ChangeDetectionStrategy, Component, computed, input, linkedSignal, output, signal, TemplateRef, viewChild } from '@angular/core';\nimport dayjs from 'dayjs';\n\nconst MONTHS_IN_YEAR = 12;\n/** A page of years fills the month grid exactly, so switching view never resizes the panel. */\nconst YEARS_PER_PAGE = MONTHS_IN_YEAR;\n\nconst SELECTED_MONTH_CONFIG: ButtonConfig = { style: 'primary', color: 'blue' };\nconst UNSELECTED_MONTH_CONFIG: ButtonConfig = { style: 'ghost', color: 'grey' };\n\n/** The month a calendar should move to. */\nexport interface DatepickerMonth {\n /** Zero-based, as dayjs and the vendor both count months. */\n month: number;\n year: number;\n}\n\n/** A cell of the grid, carrying the states the template would otherwise recompute on every render. */\ninterface MonthOption {\n month: number;\n label: string;\n ariaLabel: string;\n disabled: boolean;\n config: ButtonConfig;\n}\n\n/** A cell of the year grid the panel shows once the year is clicked. */\ninterface YearOption {\n year: number;\n disabled: boolean;\n config: ButtonConfig;\n}\n\n/**\n * A year of months in a dropdown, so a calendar can be moved somewhere far without paging through\n * the months in between. Driven by `apDropdownTrigger` on whatever the caller wants as a trigger.\n *\n * The year is browsable inside the panel; only clicking a month commits.\n *\n * @example\n * ```html\n * <ap-button [apDropdownTrigger]=\"picker\">{{ label }}</ap-button>\n * <ap-datepicker-month-picker\n * #picker\n * [month]=\"month\"\n * [year]=\"year\"\n * (monthSelected)=\"goTo($event)\" />\n * ```\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-datepicker-month-picker',\n templateUrl: './datepicker-month-picker.component.html',\n styleUrl: './datepicker-month-picker.component.scss',\n imports: [ButtonComponent, IconButtonComponent],\n providers: [withSymbols(apArrowLeft, apArrowRight)],\n})\nexport class DatepickerMonthPickerComponent implements DropdownOverlay {\n /** The month the calendar is showing, zero-based. Highlighted in the grid. */\n readonly month = input.required<number>();\n /** The year the calendar is showing. The panel opens on it, and returns to it when it moves. */\n readonly year = input.required<number>();\n readonly locale = input('en');\n readonly minDate = input<dayjs.Dayjs | undefined>(undefined);\n readonly maxDate = input<dayjs.Dayjs | undefined>(undefined);\n\n readonly monthSelected = output<DatepickerMonth>();\n\n /**\n * Months until the year is clicked, years until one is picked. Reaching a distant year through\n * the arrows alone costs one click per year; through the grid it costs one per page.\n */\n readonly showingYears = signal(false);\n\n private readonly panelTemplate = viewChild<TemplateRef<unknown>>('panelTemplate');\n private readonly overlay = createDropdownOverlay();\n\n readonly isOpen = this.overlay.isOpen;\n\n /** Browsable on its own, and re-anchored on the calendar's year whenever that moves. */\n readonly displayedYear = linkedSignal(() => this.year());\n\n /**\n * First year of the visible page. Pages are fixed blocks rather than a window around the\n * displayed year, so the same year always sits in the same page and browsing back and forth\n * lands on the same grid.\n */\n private readonly yearPageStart = computed(() => {\n const year = this.displayedYear();\n return year - (((year % YEARS_PER_PAGE) + YEARS_PER_PAGE) % YEARS_PER_PAGE);\n });\n\n /** The page the years grid spans, for the header that replaces the year while it shows. */\n readonly displayedYearRange = computed(() => `${this.yearPageStart()} - ${this.yearPageStart() + YEARS_PER_PAGE - 1}`);\n\n readonly canGoPrevious = computed(() => {\n const min = this.minDate();\n if (min === undefined) {\n return true;\n }\n return this.showingYears() ? this.yearPageStart() > min.year() : this.displayedYear() > min.year();\n });\n\n readonly canGoNext = computed(() => {\n const max = this.maxDate();\n if (max === undefined) {\n return true;\n }\n const lastOfPage = this.yearPageStart() + YEARS_PER_PAGE - 1;\n return this.showingYears() ? lastOfPage < max.year() : this.displayedYear() < max.year();\n });\n\n readonly months = computed<MonthOption[]>(() => {\n const locale = this.locale();\n const displayedYear = this.displayedYear();\n const showingCalendarYear = displayedYear === this.year();\n const calendarMonth = this.month();\n const min = this.minDate();\n const max = this.maxDate();\n\n return Array.from({ length: MONTHS_IN_YEAR }, (_, month) => {\n // Anchored on the 1st before the year and the month are set: from a 31st, moving to a\n // shorter month would otherwise spill into the next one.\n const firstOfMonth = dayjs().date(1).year(displayedYear).month(month).locale(locale);\n const selected = showingCalendarYear && month === calendarMonth;\n\n return {\n month,\n label: firstOfMonth.format('MMM'),\n ariaLabel: firstOfMonth.format('MMMM YYYY'),\n disabled:\n (min !== undefined && firstOfMonth.endOf('month').isBefore(min, 'day')) ||\n (max !== undefined && firstOfMonth.startOf('month').isAfter(max, 'day')),\n config: selected ? SELECTED_MONTH_CONFIG : UNSELECTED_MONTH_CONFIG,\n };\n });\n });\n\n readonly years = computed<YearOption[]>(() => {\n const pageStart = this.yearPageStart();\n const displayedYear = this.displayedYear();\n const min = this.minDate();\n const max = this.maxDate();\n\n return Array.from({ length: YEARS_PER_PAGE }, (_, offset) => {\n const year = pageStart + offset;\n const selected = year === displayedYear;\n\n return {\n year,\n disabled: (min !== undefined && year < min.year()) || (max !== undefined && year > max.year()),\n config: selected ? SELECTED_MONTH_CONFIG : UNSELECTED_MONTH_CONFIG,\n };\n });\n });\n\n open(triggerElement?: HTMLElement): void {\n const panelTemplate = this.panelTemplate();\n if (this.isOpen() || !panelTemplate) {\n return;\n }\n this.overlay.open(panelTemplate, triggerElement, { onClose: () => this.close() });\n }\n\n close(): void {\n // Back to months, so reopening never starts on the year grid the last visit happened to leave on.\n this.showingYears.set(false);\n this.overlay.close();\n }\n\n toggle(triggerElement?: HTMLElement): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open(triggerElement);\n }\n }\n\n onPrevious(): void {\n this.displayedYear.update(year => year - this.step());\n }\n\n onNext(): void {\n this.displayedYear.update(year => year + this.step());\n }\n\n /** Toggles the grid between the months of a year and the years of a page. */\n onToggleYears(): void {\n this.showingYears.update(showing => !showing);\n }\n\n onSelectYear(year: number): void {\n this.displayedYear.set(year);\n this.showingYears.set(false);\n }\n\n onSelectMonth(month: number): void {\n this.monthSelected.emit({ month, year: this.displayedYear() });\n this.close();\n }\n\n /** One year at a time through the months, a whole page at a time through the years. */\n private step(): number {\n return this.showingYears() ? YEARS_PER_PAGE : 1;\n }\n}\n","<ng-template #panelTemplate>\n <div\n class=\"ap-datepicker-month-picker\"\n role=\"dialog\"\n tabindex=\"-1\">\n <div class=\"ap-datepicker-month-picker__header\">\n <ap-icon-button\n symbolId=\"arrow-left\"\n [ariaLabel]=\"showingYears() ? 'Previous years' : 'Previous year'\"\n [disabled]=\"!canGoPrevious()\"\n (onClick)=\"onPrevious()\" />\n <!--\n A button, not a label: it is what opens the year grid. Reaching a distant year through\n the arrows alone costs one click per year.\n -->\n <ap-button\n class=\"ap-datepicker-month-picker__year\"\n [ariaLabel]=\"showingYears() ? 'Back to the months' : 'Choose a year'\"\n [config]=\"{ style: 'ghost', color: 'grey' }\"\n (click)=\"onToggleYears()\">\n {{ showingYears() ? displayedYearRange() : displayedYear() }}\n </ap-button>\n <ap-icon-button\n symbolId=\"arrow-right\"\n [ariaLabel]=\"showingYears() ? 'Next years' : 'Next year'\"\n [disabled]=\"!canGoNext()\"\n (onClick)=\"onNext()\" />\n </div>\n\n <!-- One grid for both: a page of years fills it exactly, so switching never resizes the panel. -->\n <div class=\"ap-datepicker-month-picker__grid\">\n @if (showingYears()) {\n @for (option of years(); track option.year) {\n <ap-button\n [config]=\"option.config\"\n [disabled]=\"option.disabled\"\n (click)=\"onSelectYear(option.year)\">\n {{ option.year }}\n </ap-button>\n }\n } @else {\n @for (option of months(); track option.month) {\n <ap-button\n [ariaLabel]=\"option.ariaLabel\"\n [config]=\"option.config\"\n [disabled]=\"option.disabled\"\n (click)=\"onSelectMonth(option.month)\">\n {{ option.label }}\n </ap-button>\n }\n }\n </div>\n </div>\n</ng-template>\n","import type { ButtonConfig } from '@agorapulse/ui-components/button';\nimport { ButtonComponent } from '@agorapulse/ui-components/button';\nimport { DropdownTriggerDirective } from '@agorapulse/ui-components/dropdown-base';\nimport { IconButtonComponent } from '@agorapulse/ui-components/icon-button';\nimport { SymbolRegistry, apArrowLeft, apArrowRight } from '@agorapulse/ui-symbol';\n\nimport { DaterangepickerComponent, NgxDaterangepickerMd } from '@agorapulse/ngx-daterangepicker-material';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n computed,\n input,\n} from '@angular/core';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/de';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/es';\nimport 'dayjs/locale/fr';\nimport 'dayjs/locale/pt';\nimport localeData from 'dayjs/plugin/localeData';\nimport type { DatepickerMonth } from '../datepicker-month-picker/datepicker-month-picker.component';\nimport { DatepickerMonthPickerComponent } from '../datepicker-month-picker/datepicker-month-picker.component';\nimport { DatepickerPreset } from '../datepicker-preset';\n\nexport enum DatepickerMode {\n Single = 'Single',\n Multiple = 'Multiple',\n Range = 'Range',\n}\n\nexport interface Period {\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n}\n\n/**\n * A range just picked, and the preset it came from when there is one. A widened `Period` rather\n * than a type of its own, so callers typing `periodSelected` as a `Period` keep compiling.\n */\nexport interface SelectedPeriod extends Period {\n preset?: DatepickerPreset;\n}\n\nexport interface StartDate {\n startDate: dayjs.Dayjs;\n}\n\nenum SideEnum {\n left = 'left',\n right = 'right',\n}\n\nexport type FirstDayOfWeek = 'sunday' | 'monday';\n\nexport type Locale = 'en' | 'fr' | 'es' | 'de';\n\ntype RangesConfigPresetType = { [periodText: string]: [dayjs.Dayjs, dayjs.Dayjs] };\n\n/** A stable \"no shortcuts\" reference: a fresh object would reset the vendor. */\nconst NO_RANGES: RangesConfigPresetType = {};\n\n// TODO fix css for range mode (more lateral padding)\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-datepicker',\n templateUrl: './datepicker.component.html',\n imports: [ButtonComponent, DatepickerMonthPickerComponent, DropdownTriggerDirective, IconButtonComponent, NgxDaterangepickerMd],\n styleUrls: ['./datepicker.component.scss'],\n})\nexport class DatepickerComponent implements OnInit, OnChanges, AfterViewInit {\n @ViewChild('datepickerRef') datepickerRef!: DaterangepickerComponent;\n\n @Input() firstDayOfWeek = 'monday';\n @Input() locale = 'en';\n @Input() set maxDate(maxDate: dayjs.Dayjs | undefined) {\n this.maxDateValue = maxDate;\n if (maxDate) {\n this.maxDateStr = maxDate.toISOString();\n } else {\n this.maxDateStr = '';\n }\n }\n @Input() set minDate(minDate: dayjs.Dayjs | undefined) {\n this.minDateValue = minDate;\n if (minDate) {\n this.minDateStr = minDate.toISOString();\n } else {\n this.minDateStr = '';\n }\n }\n @Input({\n required: true,\n })\n mode!: DatepickerMode;\n @Input() selectedDate: dayjs.Dayjs | undefined = undefined;\n @Input() selectedDates: dayjs.Dayjs[] = [];\n @Input() selectedPeriod: Period = { startDate: undefined, endDate: undefined };\n /** Maximum number of days between the start and the end date in Range mode. Undefined means no limit. */\n dateLimit = input<number | undefined>(undefined);\n /** Shortcuts listed beside the calendars. Empty by default, and ignored outside Range mode. */\n presets = input<DatepickerPreset[]>([]);\n\n @Output() dateSelected = new EventEmitter<any>();\n @Output() periodSelected = new EventEmitter<SelectedPeriod>();\n\n DatepickerMode = DatepickerMode;\n localeConfig!: {\n customRangeLabel: string;\n daysOfWeek: string[];\n monthNames: string[];\n firstDay: number;\n };\n pageSet = false;\n maxDateStr: string = '';\n minDateStr: string = '';\n /** The same bounds as `minDateStr`/`maxDateStr`, kept as dayjs for the month pickers. */\n maxDateValue: dayjs.Dayjs | undefined = undefined;\n minDateValue: dayjs.Dayjs | undefined = undefined;\n\n /** A field and not an inline literal: the template would rebuild the object on every pass. */\n readonly monthTriggerConfig: ButtonConfig = { style: 'ghost', color: 'grey' };\n\n /** A getter and not a `computed`: `mode` is a plain `@Input`, which a computed would not track. */\n get hasPresets(): boolean {\n return this.presets().length > 0 && this.mode === DatepickerMode.Range;\n }\n\n /**\n * Memoised, and a shared constant when empty, so the reference only changes when `presets` does.\n * A fresh `ranges` object reaches the vendor's setter, which resets the calendars and drops the\n * start anchor and the in-range preview of a selection still in progress.\n */\n private readonly presetRanges = computed<RangesConfigPresetType>(() =>\n // Annotated as a tuple: an inline array literal here infers as `(string | [Dayjs, Dayjs])[]`,\n // which resolves `Object.fromEntries` to its untyped `any` overload instead of the typed one.\n Object.fromEntries(this.presets().map(({ label, range }): [string, [dayjs.Dayjs, dayjs.Dayjs]] => [label, range]))\n );\n\n get vendorRanges(): RangesConfigPresetType {\n return this.hasPresets ? this.presetRanges() : NO_RANGES;\n }\n\n constructor(\n public changeDetectorRef: ChangeDetectorRef,\n public symbolRegistry: SymbolRegistry\n ) {\n this.symbolRegistry.registerSymbols([apArrowLeft, apArrowRight]);\n }\n\n ngOnInit() {\n dayjs.extend(localeData);\n this.initDatePickerLocale();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.datepickerRef) {\n setTimeout(() => {\n this.datepickerRef.updateCalendars();\n this.changeDetectorRef.detectChanges();\n }, 100);\n }\n if (changes.selectedPeriod?.currentValue && this.datepickerRef) {\n if (this.selectedPeriod.startDate === null && this.selectedPeriod.endDate === null) {\n this.datepickerRef.clear();\n } else {\n this.datepickerRef.setStartDate(this.selectedPeriod?.startDate ?? dayjs(undefined));\n this.datepickerRef.setEndDate(this.selectedPeriod.endDate ?? dayjs(undefined));\n }\n }\n if (changes.mode?.currentValue === DatepickerMode.Single && this.datepickerRef) {\n this.setCalendarCurrentPage();\n }\n }\n ngAfterViewInit(): void {\n if (this.datepickerRef) {\n setTimeout(() => {\n if (this.mode === DatepickerMode.Range && this.selectedPeriod?.startDate) {\n this.datepickerRef.setStartDate(this.selectedPeriod.startDate);\n this.datepickerRef.setEndDate(this.selectedPeriod.endDate ?? this.selectedPeriod.startDate);\n }\n this.datepickerRef.updateCalendars();\n this.setCalendarCurrentPage();\n }, 100);\n }\n }\n\n initDatePickerLocale() {\n if (this.locale) {\n dayjs.locale(this.locale);\n }\n let firstDayOfWeekIndex: number;\n if (this.firstDayOfWeek === 'sunday') {\n firstDayOfWeekIndex = 0;\n } else if (this.firstDayOfWeek === 'monday') {\n firstDayOfWeekIndex = 1;\n } else {\n firstDayOfWeekIndex = dayjs.localeData().firstDayOfWeek();\n }\n this.localeConfig = {\n // The vendor demands this label, but the entry is never shown: it only revealed the\n // calendars, which `alwaysShowCalendars` keeps visible anyway.\n customRangeLabel: 'Custom',\n daysOfWeek: dayjs.weekdaysMin(),\n monthNames: dayjs.months(),\n firstDay: firstDayOfWeekIndex,\n };\n }\n\n isCustomDate = (date: any) => {\n const classes: string[] = [];\n if (this.mode === DatepickerMode.Multiple) {\n classes.push(this.isSelected(date) ? 'active' : 'force-inactive');\n } else if (this.mode === DatepickerMode.Single) {\n classes.push(this.selectedDate && this.selectedDate.isSame(date, 'day') ? 'active' : 'force-inactive');\n } else if (this.mode === DatepickerMode.Range) {\n classes.push('range-picker-mode');\n // Workaround to fix the auto-active today date when no date is selected\n if (dayjs().isSame(date, 'day') && !this.selectedPeriod?.startDate && !this.selectedPeriod?.endDate) {\n classes.push('force-inactive');\n }\n // The picker only flags the days *between* start and hover as `in-range`, never the hovered one.\n const hoveredDate = this.datepickerRef?.pickingDate ? this.datepickerRef?.nowHoveredDate : undefined;\n if (hoveredDate && dayjs(date).isSame(dayjs(hoveredDate), 'day')) {\n classes.push('hovered-end');\n }\n }\n return classes;\n };\n\n private isSelected(date: any) {\n return this.selectedDates && this.selectedDates.some(selectedDate => selectedDate.isSame(date, 'day'));\n }\n\n onStartDateChanged(event: StartDate) {\n const date = event.startDate.toDate();\n const dateLocalTime = new Date(date.getTime());\n const dayJsDate = dayjs(dateLocalTime);\n if (this.mode === DatepickerMode.Range) {\n return;\n }\n this.selectedDate = dayJsDate;\n this.datepickerRef.setEndDate(dayJsDate);\n if (this.pageSet) {\n this.pageSet = false;\n } else {\n this.dateSelected.emit(dayJsDate.clone());\n }\n if (this.datepickerRef) {\n this.datepickerRef.updateCalendars();\n }\n }\n\n onDatesUpdated(event: Period) {\n // `autoApply` makes the vendor emit on the FIRST click of a range, with the end set equal\n // to the start. Emitting that reads as a finished selection: a dropdown closes on it, so\n // the second click never happens and no range wider than a day can be picked. While\n // `pickingDate` is true the user is still choosing the end — say nothing yet.\n if (this.mode === DatepickerMode.Range && !this.datepickerRef?.pickingDate) {\n const startDate = event.startDate?.toDate();\n const startDateLocalTime = startDate ? new Date(startDate.getTime()) : new Date();\n const endDate = event.endDate?.toDate();\n const endDateLocalTime = endDate ? new Date(endDate.getTime()) : new Date();\n this.periodSelected.emit({\n startDate: dayjs(startDateLocalTime).startOf('day'),\n endDate: dayjs(endDateLocalTime).endOf('day'),\n preset: this.chosenPreset(),\n });\n }\n if (this.datepickerRef) {\n this.datepickerRef.updateCalendars();\n // Nothing is emitted above, so nothing writes `selectedPeriod` back, `ngOnChanges` never\n // runs and this OnPush panel keeps the previous cells. Render here for the start anchor.\n this.changeDetectorRef.detectChanges();\n }\n }\n\n /**\n * The preset the current range came from. The vendor keeps `chosenRange` up to date both ways —\n * `clickRange` writes the clicked label, `clickDate` resets it to `customRangeLabel` — and those\n * labels are the keys of its `ranges` table, so they are unique. Matching on the label rather\n * than on a position survives a translated or reordered shortcut.\n */\n private chosenPreset(): DatepickerPreset | undefined {\n const chosen = this.datepickerRef?.chosenRange;\n return chosen ? this.presets().find(preset => preset.label === chosen) : undefined;\n }\n\n /** The vendor's own arrows stop at `minDate`/`maxDate`; ours replace them and must stop there too. */\n get canGoToPreviousMonth(): boolean {\n return !this.minDateValue || this.datepickerRef.leftCalendar.month.isAfter(this.minDateValue, 'month');\n }\n\n get canGoToNextMonth(): boolean {\n const lastMonth =\n this.mode === DatepickerMode.Range ? this.datepickerRef.rightCalendar.month : this.datepickerRef.leftCalendar.month;\n return !this.maxDateValue || lastMonth.isBefore(this.maxDateValue, 'month');\n }\n\n onNextMonth() {\n if (this.canGoToNextMonth) {\n this.datepickerRef.clickNext(SideEnum.right);\n }\n }\n\n onLeftMonthPicked(picked: DatepickerMonth): void {\n this.moveCalendarTo(picked, SideEnum.left);\n }\n\n onRightMonthPicked(picked: DatepickerMonth): void {\n this.moveCalendarTo(picked, SideEnum.right);\n }\n\n /**\n * The vendor moves the view only — never the selection — and clamps to its own min/max on the\n * way, so the picker's disabled months are a second line of defence rather than the only one.\n */\n private moveCalendarTo({ month, year }: DatepickerMonth, side: SideEnum): void {\n this.datepickerRef.monthOrYearChanged(month, year, side);\n this.datepickerRef.updateCalendars();\n this.changeDetectorRef.detectChanges();\n }\n\n onPreviousMonth() {\n if (this.canGoToPreviousMonth) {\n this.datepickerRef.clickPrev(SideEnum.left);\n }\n }\n\n /**\n * Ugly hack used here to open the calendar on the right day if they are selected dates\n * * https://github.com/fetrarij/ngx-daterangepicker-material/issues/139\n */\n setCalendarCurrentPage(): void {\n const selectedFirstDate = this.selectedDates.length > 0 ? this.selectedDates[0] : this.selectedDate;\n if (selectedFirstDate && selectedFirstDate.isValid() && this.mode !== DatepickerMode.Range) {\n const endDate = selectedFirstDate.clone();\n endDate.add(1, 'month');\n this.pageSet = true;\n this.datepickerRef.setStartDate(selectedFirstDate);\n this.datepickerRef.setEndDate(endDate);\n this.datepickerRef.updateView();\n }\n this.changeDetectorRef.detectChanges();\n }\n}\n","<div\n class=\"custom-calendar\"\n [class.single-month]=\"mode !== DatepickerMode.Range\">\n <div class=\"custom-header\">\n @if (datepickerRef.leftCalendar.month) {\n <div class=\"month-header\">\n <ap-icon-button\n symbolId=\"arrow-left\"\n ariaLabel=\"Previous month\"\n [disabled]=\"!canGoToPreviousMonth\"\n (onClick)=\"onPreviousMonth()\" />\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"leftMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.leftCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #leftMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.leftCalendar.month.month()\"\n [year]=\"datepickerRef.leftCalendar.month.year()\"\n (monthSelected)=\"onLeftMonthPicked($event)\" />\n <!-- Outside Range a single month is rendered, so both arrows frame its header. -->\n @if (mode !== DatepickerMode.Range) {\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n [disabled]=\"!canGoToNextMonth\"\n (onClick)=\"onNextMonth()\" />\n }\n </div>\n }\n @if (mode === DatepickerMode.Range && datepickerRef.rightCalendar.month) {\n <div class=\"month-header\">\n <ap-button\n class=\"month-label\"\n symbolId=\"chevron-down\"\n [apDropdownTrigger]=\"rightMonthPicker\"\n [config]=\"monthTriggerConfig\">\n <span class=\"month-label-text\">{{ datepickerRef.rightCalendar.month.locale(locale).format('MMMM YYYY') }}</span>\n </ap-button>\n <ap-datepicker-month-picker\n #rightMonthPicker\n [locale]=\"locale\"\n [maxDate]=\"maxDateValue\"\n [minDate]=\"minDateValue\"\n [month]=\"datepickerRef.rightCalendar.month.month()\"\n [year]=\"datepickerRef.rightCalendar.month.year()\"\n (monthSelected)=\"onRightMonthPicked($event)\" />\n <ap-icon-button\n symbolId=\"arrow-right\"\n ariaLabel=\"Next month\"\n [disabled]=\"!canGoToNextMonth\"\n (onClick)=\"onNextMonth()\" />\n </div>\n }\n </div>\n <!--\n `showDropdowns` is on not for its own selects — those render into the header row we hide —\n but because the vendor only maintains `calendarVariables[side].dropdowns` while it is, and\n that is what `monthOrYearChanged` reads to move a calendar.\n -->\n <ngx-daterangepicker-material\n #datepickerRef\n [class.hide-ranges]=\"!hasPresets\"\n [alwaysShowCalendars]=\"true\"\n [autoApply]=\"true\"\n [customRangeDirection]=\"true\"\n [dateLimit]=\"dateLimit() ?? 0\"\n [linkedCalendars]=\"true\"\n [isCustomDate]=\"$any(isCustomDate)\"\n [locale]=\"localeConfig\"\n [maxDate]=\"maxDateStr\"\n [minDate]=\"minDateStr\"\n [ranges]=\"vendorRanges\"\n [showCustomRangeLabel]=\"false\"\n [showDropdowns]=\"true\"\n [singleDatePicker]=\"mode !== DatepickerMode.Range\"\n (datesUpdated)=\"onDatesUpdated($event)\"\n (startDateChanged)=\"onStartDateChanged($event)\" />\n</div>\n","import { StopPropagationDirective } from '@agorapulse/ui-components/directives';\nimport { DropdownOverlay } from '@agorapulse/ui-components/dropdown-base';\nimport { DropdownContentDirective, DropdownPanelComponent } from '@agorapulse/ui-components/dropdown-panel';\nimport { FloatingPlacement } from '@agorapulse/ui-components/floating';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { APP_ID, ChangeDetectionStrategy, Component, computed, inject, input, output, TemplateRef, viewChild } from '@angular/core';\nimport dayjs from 'dayjs';\nimport { DatepickerComponent, DatepickerMode, Period, SelectedPeriod } from '../datepicker/datepicker.component';\nimport { DatepickerPreset } from '../datepicker-preset';\n\n/**\n * A dropdown component that displays a datepicker (single, multiple, or range mode)\n * in an overlay. Exposes open/close/toggle so it can be driven by apDropdownTrigger.\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-datepicker-dropdown',\n templateUrl: './datepicker-dropdown.component.html',\n styleUrls: ['./datepicker-dropdown.component.scss'],\n imports: [DatepickerComponent, DropdownContentDirective, DropdownPanelComponent, NgTemplateOutlet, StopPropagationDirective],\n})\nexport class DatepickerDropdownComponent implements DropdownOverlay {\n /**\n * Stable id for the panel (`role=\"dialog\"`), so a trigger can bind `aria-controls` to it.\n * Combines the app id — several federated Angular apps can share one page — with a per-instance\n * random suffix computed once at construction. No shared mutable counter, and no reliance on\n * `crypto.randomUUID()`, which browsers refuse outside a secure (HTTPS/localhost) context.\n */\n readonly panelId = `${inject(APP_ID)}-datepicker-panel-${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n private readonly panel = viewChild(DropdownPanelComponent);\n mode = input.required<DatepickerMode>();\n selectedDate = input<dayjs.Dayjs | undefined>(undefined);\n selectedDates = input<dayjs.Dayjs[]>([]);\n selectedPeriod = input<Period>({ startDate: undefined, endDate: undefined });\n minDate = input<dayjs.Dayjs | undefined>(undefined);\n maxDate = input<dayjs.Dayjs | undefined>(undefined);\n /** Maximum number of days between the start and the end date in Range mode. Undefined means no limit. */\n dateLimit = input<number | undefined>(undefined);\n /** Caption shown at the bottom of the panel, e.g. to explain a selection constraint. */\n hint = input<string | undefined>(undefined);\n /**\n * Rendered under `hint`, for what a caption cannot carry — a banner with its own button. A\n * `TemplateRef` and not an `ng-content`: the footer shows inside the overlay's embedded view.\n */\n panelFooter = input<TemplateRef<unknown> | undefined>(undefined);\n firstDayOfWeek = input<'monday' | 'sunday'>('monday');\n locale = input('en');\n /** Shortcuts listed beside the calendars. Empty: no column at all. */\n presets = input<DatepickerPreset[]>([]);\n showBackdrop = input(true);\n /**\n * Close the overlay once the selection is complete. When false it stays open until backdrop\n * click or Escape — which lets the host vet a selection before anything closes.\n */\n closeOnSelect = input(true);\n disabled = input(false);\n /** Panel placement. Unset means derived from the anchor mode, i.e. `bottom-start`. */\n readonly placement = input<FloatingPlacement>();\n\n opened = output<void>();\n closed = output<void>();\n dateSelected = output<dayjs.Dayjs>();\n periodSelected = output<SelectedPeriod>();\n readonly isOpen = computed(() => this.panel()?.isOpen() ?? false);\n\n open(triggerElement?: HTMLElement): void {\n const panel = this.panel();\n if (this.disabled() || this.isOpen() || !panel) return;\n\n panel.open(triggerElement);\n this.opened.emit();\n }\n\n /** `closed` is relayed from the panel, which fires it for a gesture as well as for this call. */\n close(): void {\n this.panel()?.close();\n }\n\n toggle(triggerElement?: HTMLElement): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open(triggerElement);\n }\n }\n\n onDateSelected(date: dayjs.Dayjs): void {\n this.dateSelected.emit(date);\n if (this.closeOnSelect() && this.mode() !== DatepickerMode.Multiple) {\n this.close();\n }\n }\n\n onPeriodSelected(period: SelectedPeriod): void {\n this.periodSelected.emit(period);\n if (this.closeOnSelect() && period.startDate && period.endDate) {\n this.close();\n }\n }\n}\n","<ap-dropdown-panel\n [placement]=\"placement()\"\n [showBackdrop]=\"showBackdrop()\"\n (closed)=\"closed.emit()\">\n <div\n *apDropdownContent\n class=\"ap-datepicker-dropdown__content\"\n role=\"dialog\"\n aria-label=\"Datepicker\"\n tabindex=\"-1\"\n [id]=\"panelId\">\n <ap-datepicker\n apStopPropagation\n [dateLimit]=\"dateLimit()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [locale]=\"locale()\"\n [maxDate]=\"maxDate()\"\n [minDate]=\"minDate()\"\n [mode]=\"mode()\"\n [presets]=\"presets()\"\n [selectedDate]=\"selectedDate()\"\n [selectedDates]=\"selectedDates()\"\n [selectedPeriod]=\"selectedPeriod()\"\n (dateSelected)=\"onDateSelected($event)\"\n (periodSelected)=\"onPeriodSelected($event)\" />\n @if (hint()) {\n <div class=\"ap-datepicker-dropdown__hint\">{{ hint() }}</div>\n }\n @if (panelFooter(); as footer) {\n <div class=\"ap-datepicker-dropdown__footer\">\n <ng-container [ngTemplateOutlet]=\"footer\" />\n </div>\n }\n </div>\n</ap-dropdown-panel>\n","import dayjs from 'dayjs';\n\n/** One shortcut in the column beside the calendars. */\nexport interface DatepickerPreset {\n /** Stable id, independent of the displayed label. */\n key: string;\n /** Text shown to the user. Already translated. */\n label: string;\n range: [dayjs.Dayjs, dayjs.Dayjs];\n}\n\nexport type DefaultPresetKey = 'yesterday' | 'lastWeek' | 'last30Days' | 'lastMonth' | 'thisMonth';\n\nconst DEFAULT_LABELS: Record<DefaultPresetKey, string> = {\n yesterday: 'Yesterday',\n lastWeek: 'Last Week',\n last30Days: 'Last 30 days',\n lastMonth: 'Previous month',\n thisMonth: 'This month',\n};\n\n/**\n * The five shortcuts a picker offers by default. A function and not a constant, so the ranges are\n * computed when shown: a session left open across midnight would otherwise offer yesterday's.\n */\nexport function defaultDatepickerPresets(\n labels?: Partial<Record<DefaultPresetKey, string>>,\n today: dayjs.Dayjs = dayjs()\n): DatepickerPreset[] {\n const yesterday = today.subtract(1, 'day');\n const previousMonth = today.subtract(1, 'month');\n const label = (key: DefaultPresetKey) => labels?.[key] ?? DEFAULT_LABELS[key];\n\n return [\n { key: 'yesterday', label: label('yesterday'), range: [yesterday, yesterday] },\n { key: 'lastWeek', label: label('lastWeek'), range: [today.subtract(7, 'day'), yesterday] },\n { key: 'last30Days', label: label('last30Days'), range: [today.subtract(30, 'day'), yesterday] },\n {\n key: 'lastMonth',\n label: label('lastMonth'),\n range: [previousMonth.startOf('month'), previousMonth.endOf('month')],\n },\n { key: 'thisMonth', label: label('thisMonth'), range: [today.startOf('month'), today.endOf('month')] },\n ];\n}\n","import dayjs from 'dayjs';\nimport { DatepickerMode, Period } from './datepicker/datepicker.component';\n\n/**\n * An `ap-datepicker-select` value. Its shape depends on the mode: a date in Single, a Period in\n * Range, an array of dates in Multiple. TypeScript cannot tie the two together — `mode` is a\n * runtime value — hence the guard below.\n */\nexport type DatepickerValue = dayjs.Dayjs | Period | dayjs.Dayjs[];\n\nconst EXPECTED: Record<DatepickerMode, string> = {\n [DatepickerMode.Single]: 'a single date',\n [DatepickerMode.Range]: 'a Period ({ startDate, endDate })',\n [DatepickerMode.Multiple]: 'an array of dates',\n};\n\nfunction describe(value: DatepickerValue | unknown): string {\n if (Array.isArray(value)) {\n return `an array of ${value.length} date${value.length === 1 ? '' : 's'}`;\n }\n if (dayjs.isDayjs(value)) {\n return 'a single date';\n }\n if (isPeriod(value)) {\n return 'a Period ({ startDate, endDate })';\n }\n return 'an unrecognised value';\n}\n\n/** Tells a `Period` from the two other shapes, without an `as`. */\nexport function isPeriod(value: unknown): value is Period {\n // Must be a non-null object\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n // Must not be an array\n if (Array.isArray(value)) {\n return false;\n }\n\n // Must not be a dayjs instance\n if (dayjs.isDayjs(value)) {\n return false;\n }\n\n // Must have startDate and endDate properties\n const obj = value as Record<string, unknown>;\n\n // Check that at least one of startDate/endDate is defined as an own property\n const hasStartDate = 'startDate' in obj;\n const hasEndDate = 'endDate' in obj;\n\n if (!hasStartDate && !hasEndDate) {\n return false;\n }\n\n const startDate = obj.startDate;\n const endDate = obj.endDate;\n\n // Each field must be either undefined/null or a dayjs instance\n const isValidDateField = (field: unknown): boolean => {\n return field === undefined || field === null || dayjs.isDayjs(field);\n };\n\n return isValidDateField(startDate) && isValidDateField(endDate);\n}\n\nfunction matches(mode: DatepickerMode, value: unknown): boolean {\n if (mode === DatepickerMode.Multiple) {\n return Array.isArray(value);\n }\n if (mode === DatepickerMode.Single) {\n return dayjs.isDayjs(value);\n }\n return isPeriod(value);\n}\n\n/**\n * Throws when the value does not match the mode. An empty value (`undefined`, `null`) is accepted\n * everywhere: it means nothing is selected.\n */\nexport function assertValueMatchesMode(mode: DatepickerMode, value: unknown): void {\n if (value === undefined || value === null) {\n return;\n }\n if (!matches(mode, value)) {\n throw new Error(`ap-datepicker-select: mode=\"${mode}\" expects ${EXPECTED[mode]}, received ${describe(value)}.`);\n }\n}\n","import { LOCALE_CONFIG, LocaleService } from '@agorapulse/ngx-daterangepicker-material';\nimport { OverflowCountDirective, OverflowCounterDirective, OverflowItemDirective } from '@agorapulse/ui-components/directives';\nimport { DropdownTriggerDirective } from '@agorapulse/ui-components/dropdown-base';\nimport { FloatingPlacement } from '@agorapulse/ui-components/floating';\nimport { IconButtonComponent } from '@agorapulse/ui-components/icon-button';\nimport { InputGroupComponent } from '@agorapulse/ui-components/input-group';\nimport { TagComponent } from '@agorapulse/ui-components/tag';\nimport { TooltipDirective } from '@agorapulse/ui-components/tooltip';\nimport { apCalendar, apChevronDown, apChevronUp, apClock, apClose, apInfo, SymbolComponent, withSymbols } from '@agorapulse/ui-symbol';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormValueControl } from '@angular/forms/signals';\nimport dayjs from 'dayjs';\nimport { DatepickerDropdownComponent } from '../datepicker-dropdown/datepicker-dropdown.component';\nimport { DatepickerPreset } from '../datepicker-preset';\nimport { assertValueMatchesMode, DatepickerValue, isPeriod } from '../datepicker-value';\nimport { DatepickerMode, FirstDayOfWeek, Locale, Period, SelectedPeriod } from '../datepicker/datepicker.component';\n\nconst EMPTY_PERIOD: Period = { startDate: undefined, endDate: undefined };\n\n/** A selected date, as the field shows it in Multiple mode. */\nexport interface DateChip {\n label: string;\n date: dayjs.Dayjs;\n}\n\n/** What the field just committed, and the preset it came from. */\nexport interface DatepickerSelection {\n /** The committed value, in the shape the mode requires. */\n value: DatepickerValue | undefined;\n /** The preset clicked, when the value came from one. Absent from a calendar pick. */\n preset?: DatepickerPreset;\n}\n\n/**\n * The design system's date field: it shows the value, opens the shared panel and binds to a form.\n * It carries no label of its own — wrap it in an `ap-form-field`, as `ap-select` is.\n *\n * @example\n * ```html\n * <ap-form-field>\n * <label for=\"period\">Reporting period</label>\n * <ap-datepicker-select [mode]=\"DatepickerMode.Range\" [(value)]=\"period\" [presets]=\"presets\" />\n * </ap-form-field>\n * ```\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-datepicker-select',\n templateUrl: './datepicker-select.component.html',\n styleUrl: './datepicker-select.component.scss',\n imports: [\n DatepickerDropdownComponent,\n DropdownTriggerDirective,\n IconButtonComponent,\n InputGroupComponent,\n OverflowCountDirective,\n OverflowCounterDirective,\n OverflowItemDirective,\n TagComponent,\n SymbolComponent,\n TooltipDirective,\n ],\n providers: [\n withSymbols(apCalendar, apChevronDown, apChevronUp, apClock, apClose, apInfo),\n // The vendored DaterangepickerComponent the panel renders injects LocaleService, and the plain\n // NgxDaterangepickerMd module provides none — only its forRoot() does.\n { provide: LOCALE_CONFIG, useValue: {} },\n LocaleService,\n ],\n host: {\n class: 'ap-datepicker-select',\n '[class.ap-datepicker-select--open]': 'isOpen()',\n '[class.ap-datepicker-select--multiple]': 'mode() === DatepickerMode.Multiple',\n },\n // Global `.ap-datepicker-select*` classes, readable and reusable outside Angular.\n encapsulation: ViewEncapsulation.None,\n})\nexport class DatepickerSelectComponent implements FormValueControl<DatepickerValue | undefined | null> {\n readonly mode = input.required<DatepickerMode>();\n /**\n * The selection. Its shape follows the mode: a date in Single, a `Period` in Range, an array in\n * Multiple. A shape that does not match the mode throws on the first render.\n *\n * Empty is `undefined`, and `null` is accepted for it: a form holding a nullable date has no\n * other empty to offer, and this is the type a binding is checked against.\n */\n readonly value = model<DatepickerValue | undefined | null>(undefined);\n /** Disables the field. A form writes here too, rather than to a second flag of its own. */\n readonly disabled = input(false);\n readonly invalid = input(false);\n readonly touched = input(false);\n readonly minDate = input<dayjs.Dayjs | undefined>(undefined);\n readonly maxDate = input<dayjs.Dayjs | undefined>(undefined);\n /**\n * Maximum number of days between the start and the end, in Range mode. It bars the days beyond\n * the limit without saying so: pair it with a `panelHint` when the constraint deserves a word.\n */\n readonly maxRangeDays = input<number | undefined>(undefined);\n /** Caption shown at the bottom of the panel, to explain a constraint for instance. */\n readonly panelHint = input<string | undefined>(undefined);\n /** Rendered under `panelHint`, for what a sentence cannot carry — a banner with its own button. */\n readonly panelFooter = input<TemplateRef<unknown> | undefined>(undefined);\n /**\n * Consulted before a selection is committed. Returning `false` keeps the current value, keeps the\n * panel open and emits `selectionRejected`.\n *\n * A constraint the panel can apply itself (`minDate`, `maxDate`, `maxRangeDays`) belongs there\n * instead: it bars the days rather than letting them be clicked and then refused.\n */\n readonly canSelect = input<((value: DatepickerValue) => boolean) | undefined>(undefined);\n /** Shortcuts listed beside the calendars. Empty: no column at all. */\n readonly presets = input<DatepickerPreset[]>([]);\n readonly placeholder = input('Select date');\n /**\n * Accessible name of the field, since `role=\"combobox\"` is not a name-from-content role and the\n * component carries no internal `<label>` — surround it with an `ap-form-field` for the visible\n * label, and mirror its text here.\n */\n readonly ariaLabel = input<string | undefined>(undefined);\n /**\n * dayjs format of the displayed text. Defaults to `'MM/DD/YYYY'`, which needs no plugin: the\n * localized tokens (`ll`, `LL`) assume the host application loaded `dayjs/plugin/localizedFormat`.\n */\n readonly dateFormat = input('MM/DD/YYYY');\n readonly locale = input<Locale>('en');\n readonly firstDayOfWeek = input<FirstDayOfWeek>('monday');\n /** Panel placement. Unset means derived from the anchor mode, i.e. `bottom-start`. */\n readonly placement = input<FloatingPlacement>();\n /** Shows a clear cross in the field as soon as something is selected. */\n readonly clearable = input(false);\n /** IANA time zone name. When set, a chip shows its abbreviation beside the field. */\n readonly timeZone = input<string | undefined>(undefined);\n /** Tooltip carried by the info icon next to the chip. */\n readonly timeZoneTooltip = input<string | undefined>(undefined);\n\n /** Blur of the combobox. A form reads it to mark the field touched. */\n readonly touch = output<void>();\n /** The committed value with the preset that produced it, beside `valueChange` — one event, not two halves to correlate. */\n readonly selectionChange = output<DatepickerSelection>();\n /** The selection `canSelect` just refused. The field's value has not moved. */\n readonly selectionRejected = output<DatepickerValue>();\n /** The panel just opened, just closed, so that what a host shows beside it can start over. */\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n protected readonly DatepickerMode = DatepickerMode;\n\n /**\n * The panel only closes itself without a refusal predicate: it emits the selection then closes,\n * so a veto would land too late. With one, the field closes what it accepted.\n */\n protected readonly closesOnSelect = computed(() => this.canSelect() === undefined);\n\n /** Fed by the dropdown's `opened`/`closed` rather than read back from it: a host class can only bind to our own members. */\n protected readonly isOpen = signal(false);\n\n /** The dropdown driving the panel — held only to close it when the field becomes disabled. */\n private readonly dropdown = viewChild<DatepickerDropdownComponent>('dropdown');\n\n /**\n * Closes an already-open panel the moment the field becomes disabled. The dropdown only guards\n * *new* opens, and its panel is a CDK overlay detached from this component's DOM.\n */\n private readonly closeOnDisable = effect(() => {\n if (this.disabled()) {\n this.dropdown()?.close();\n }\n });\n\n /** Checks the value once, and sorts it into the three shapes the panel expects. */\n private readonly shaped = computed(() => {\n const mode = this.mode();\n // Both empties collapse here, so nothing below has to know which one it was handed.\n const value = this.value() ?? undefined;\n assertValueMatchesMode(mode, value);\n\n if (mode === DatepickerMode.Single) {\n return { date: dayjs.isDayjs(value) ? value : undefined, dates: [], period: EMPTY_PERIOD };\n }\n if (mode === DatepickerMode.Multiple) {\n return { date: undefined, dates: Array.isArray(value) ? value : [], period: EMPTY_PERIOD };\n }\n return { date: undefined, dates: [], period: value !== undefined && isPeriod(value) ? value : EMPTY_PERIOD };\n });\n\n protected readonly selectedDate = computed(() => this.shaped().date);\n protected readonly selectedDates = computed(() => this.shaped().dates);\n /**\n * Bumped to re-impose the value a refusal kept. The panel only reacts to `selectedPeriod`\n * changing identity, so putting it back takes a fresh object.\n */\n private readonly restoreNonce = signal(0);\n\n protected readonly selectedPeriod = computed(() => {\n this.restoreNonce();\n return { ...this.shaped().period };\n });\n\n protected readonly hasValue = computed(() => {\n const mode = this.mode();\n if (mode === DatepickerMode.Single) {\n return this.selectedDate() !== undefined;\n }\n if (mode === DatepickerMode.Multiple) {\n return this.selectedDates().length > 0;\n }\n const { startDate, endDate } = this.selectedPeriod();\n return startDate !== undefined || endDate !== undefined;\n });\n\n /** The field's text: a one-day period reads as that day. Empty in Multiple, where the field shows chips instead. */\n readonly displayed = computed(() => {\n const format = (date: dayjs.Dayjs) => date.locale(this.locale()).format(this.dateFormat());\n const mode = this.mode();\n\n if (mode === DatepickerMode.Single) {\n const date = this.selectedDate();\n return date ? format(date) : '';\n }\n if (mode === DatepickerMode.Range) {\n const { startDate, endDate } = this.selectedPeriod();\n if (!startDate || !endDate) {\n return '';\n }\n return startDate.isSame(endDate, 'day') ? format(startDate) : `${format(startDate)} - ${format(endDate)}`;\n }\n return '';\n });\n\n /** The chips shown in Multiple mode, one per selected date. */\n readonly chips = computed<DateChip[]>(() =>\n this.selectedDates().map(date => ({\n label: date.locale(this.locale()).format(this.dateFormat()),\n date,\n }))\n );\n\n /** The zone abbreviation (\"EST\", \"CEST\"…), computed without touching dayjs globally. */\n readonly timeZoneOffset = computed(() => {\n const timeZone = this.timeZone();\n if (!timeZone) {\n return '';\n }\n return (\n new Intl.DateTimeFormat('en-US', { timeZone, timeZoneName: 'short' })\n .formatToParts(new Date())\n .find(({ type }) => type === 'timeZoneName')?.value ?? ''\n );\n });\n\n onDateSelected(date: dayjs.Dayjs): void {\n const mode = this.mode();\n if (mode === DatepickerMode.Single) {\n this.commit(date);\n return;\n }\n if (mode === DatepickerMode.Multiple) {\n // The panel re-emits the same date on every click: toggling is ours to do.\n const dates = this.selectedDates();\n const without = dates.filter(selected => !selected.isSame(date, 'day'));\n this.commit(without.length === dates.length ? [...dates, date] : without);\n }\n }\n\n /** Drops a date from the selection, from the chip the user closed. */\n removeDate(chip: DateChip): void {\n this.commit(this.selectedDates().filter(date => date !== chip.date));\n }\n\n protected onPanelOpened(): void {\n this.isOpen.set(true);\n this.touch.emit();\n this.opened.emit();\n }\n\n protected onPanelClosed(): void {\n this.isOpen.set(false);\n this.touch.emit();\n this.closed.emit();\n }\n\n /** The preset is stripped from the value: it says where the value came from, it is not part of it. */\n onPeriodSelected({ preset, ...period }: SelectedPeriod): void {\n if (this.mode() === DatepickerMode.Range) {\n this.commit(period, preset);\n }\n }\n\n /** Clears the selection. Stops propagation so the panel does not reopen. */\n clear(event: Event): void {\n event.stopPropagation();\n this.touch.emit();\n this.commit(undefined);\n }\n\n /** The single write point: the signal and the form get the same value, and a disabled field none. */\n private commit(value: DatepickerValue | undefined, preset?: DatepickerPreset): void {\n if (this.disabled()) return;\n\n // Clearing is not a selection: the predicate has no say in it.\n if (value !== undefined && this.canSelect()?.(value) === false) {\n this.selectionRejected.emit(value);\n this.restoreNonce.update(nonce => nonce + 1);\n return;\n }\n\n this.value.set(value);\n this.selectionChange.emit({ value, preset });\n\n if (!this.closesOnSelect() && this.isComplete(value)) {\n this.dropdown()?.close();\n }\n }\n\n /** True when nothing is left to pick — the panel's own closing criterion. */\n private isComplete(value: DatepickerValue | undefined): boolean {\n const mode = this.mode();\n if (mode === DatepickerMode.Multiple) {\n // A multiple selection is never finished: the panel stays open from one click to the next.\n return false;\n }\n if (mode === DatepickerMode.Single) {\n return value !== undefined;\n }\n return value !== undefined && isPeriod(value) && value.startDate !== undefined && value.endDate !== undefined;\n }\n}\n","<!--\n The trigger is the group itself, not the row inside it: `[apDropdownTrigger]` only listens on its\n own host, and that row is content-height and sits inside the group's padding — so a click on the\n band above, below or beside it fell on nothing. The group is also what the panel should line up\n with, and `toggle()` anchors the overlay to the trigger.\n\n Nothing here is a bare `ap-input-group` child, so its `ap-symbol` ng-content slot is unused and\n the whole row lands in the default slot, in source order (icon, value, clear, chevron).\n-->\n<ap-input-group\n [apDropdownTrigger]=\"dropdown\"\n [class.invalid]=\"invalid() && touched()\"\n [disabled]=\"disabled()\">\n <div class=\"ap-datepicker-select__field\">\n <ap-symbol\n size=\"sm\"\n symbolId=\"calendar\" />\n\n <!--\n The combobox is this box and not the field around it: ng-select does the same, carrying the\n role on its inner input so the clear and the arrow stay its siblings rather than its\n descendants. The field keeps [apDropdownTrigger] — it is the click surface and the overlay's\n anchor — and the directive listens on its host, so keys pressed here still reach it by\n bubbling. Being the growing box (flex: 1) also makes it the one that measures the chip row.\n -->\n <div\n #overflow=\"apOverflowCount\"\n class=\"ap-datepicker-select__values\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n apOverflowCount\n [attr.aria-label]=\"ariaLabel()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-controls]=\"dropdown.panelId\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-invalid]=\"invalid() && touched()\"\n (blur)=\"touch.emit()\">\n @if (mode() === DatepickerMode.Multiple && chips().length > 0) {\n @for (chip of chips(); track chip.date.valueOf()) {\n <ap-tag\n apOverflowItem\n color=\"grey\"\n [mini]=\"true\"\n [clearable]=\"!disabled()\"\n (clear)=\"removeDate(chip)\">\n {{ chip.label }}\n </ap-tag>\n }\n @if (overflow.hiddenCount() > 0) {\n <ap-tag\n apOverflowCounter\n color=\"grey\"\n [mini]=\"true\">\n +{{ overflow.hiddenCount() }}\n </ap-tag>\n }\n } @else if (displayed()) {\n <span class=\"ap-datepicker-select__value\">{{ displayed() }}</span>\n } @else {\n <span class=\"ap-datepicker-select__placeholder\">{{ placeholder() }}</span>\n }\n </div>\n\n <!--\n Before the chevron, as ng-select orders its own container: value, clear, arrow. Sitting\n inside the trigger, a click here would bubble up and open the panel — hence the\n stopPropagation() in clear().\n -->\n @if (clearable() && hasValue() && !disabled()) {\n <ap-icon-button\n class=\"ap-datepicker-select__clear\"\n type=\"flat\"\n name=\"datepicker-clear\"\n symbolId=\"close\"\n ariaLabel=\"Clear selection\"\n (click)=\"clear($event)\" />\n }\n\n <span class=\"ap-datepicker-select__chevron\">\n <ap-symbol\n size=\"sm\"\n [symbolId]=\"isOpen() ? 'chevron-up' : 'chevron-down'\" />\n </span>\n </div>\n</ap-input-group>\n\n@if (timeZone(); as zone) {\n <div\n class=\"ap-datepicker-select__timezone\"\n apTooltipPosition=\"bottom\"\n [apTooltip]=\"zone\">\n <ap-symbol\n size=\"sm\"\n symbolId=\"clock\"\n color=\"grey\" />\n <span class=\"ap-datepicker-select__timezone-offset\">{{ timeZoneOffset() }}</span>\n </div>\n @if (timeZoneTooltip(); as tooltip) {\n <ap-symbol\n class=\"ap-datepicker-select__timezone-info\"\n size=\"sm\"\n symbolId=\"info\"\n color=\"grey-blue\"\n apTooltipPosition=\"bottom\"\n [apTooltip]=\"tooltip\" />\n }\n}\n\n<ap-datepicker-dropdown\n #dropdown\n [closeOnSelect]=\"closesOnSelect()\"\n [dateLimit]=\"maxRangeDays()\"\n [placement]=\"placement()\"\n [disabled]=\"disabled()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [hint]=\"panelHint()\"\n [locale]=\"locale()\"\n [maxDate]=\"maxDate()\"\n [minDate]=\"minDate()\"\n [mode]=\"mode()\"\n [panelFooter]=\"panelFooter()\"\n [presets]=\"presets()\"\n [selectedDate]=\"selectedDate()\"\n [selectedDates]=\"selectedDates()\"\n [selectedPeriod]=\"selectedPeriod()\"\n (closed)=\"onPanelClosed()\"\n (dateSelected)=\"onDateSelected($event)\"\n (opened)=\"onPanelOpened()\"\n (periodSelected)=\"onPeriodSelected($event)\" />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agorapulse/ui-components",
|
|
3
3
|
"description": "Agorapulse UI Components Library",
|
|
4
|
-
"version": "22.2.
|
|
4
|
+
"version": "22.2.12",
|
|
5
5
|
"author": "Benoit Hediard",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@angular/animations": "^22.0.0",
|
|
23
23
|
"@floating-ui/dom": "^1.8.0",
|
|
24
24
|
"@ng-select/ng-select": "^23.0.0",
|
|
25
|
-
"@agorapulse/ngx-daterangepicker-material": "^6.0.
|
|
25
|
+
"@agorapulse/ngx-daterangepicker-material": "^6.0.9",
|
|
26
26
|
"dayjs": "^1.11.8",
|
|
27
27
|
"es-toolkit": "1.39.8",
|
|
28
28
|
"ngxtension": "7.2.0"
|
|
@@ -187,6 +187,9 @@ declare class DatepickerComponent implements OnInit, OnChanges, AfterViewInit {
|
|
|
187
187
|
* than on a position survives a translated or reordered shortcut.
|
|
188
188
|
*/
|
|
189
189
|
private chosenPreset;
|
|
190
|
+
/** The vendor's own arrows stop at `minDate`/`maxDate`; ours replace them and must stop there too. */
|
|
191
|
+
get canGoToPreviousMonth(): boolean;
|
|
192
|
+
get canGoToNextMonth(): boolean;
|
|
190
193
|
onNextMonth(): void;
|
|
191
194
|
onLeftMonthPicked(picked: DatepickerMonth): void;
|
|
192
195
|
onRightMonthPicked(picked: DatepickerMonth): void;
|
|
Binary file
|