@acorex/components 20.4.9 → 20.4.11
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/fesm2022/acorex-components-scheduler.mjs +58 -29
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-text-box.mjs +17 -2
- package/fesm2022/acorex-components-text-box.mjs.map +1 -1
- package/package.json +23 -23
- package/scheduler/index.d.ts +19 -11
- package/text-box/index.d.ts +2 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { NXComponent, AXComponent } from '@acorex/cdk/common';
|
|
2
2
|
import { AXButtonComponent } from '@acorex/components/button';
|
|
3
|
+
import { AXBadgeComponent } from '@acorex/components/badge';
|
|
3
4
|
import { AXCalendarComponent } from '@acorex/components/calendar';
|
|
4
5
|
import { AXDecoratorIconComponent, AXDecoratorGenericComponent } from '@acorex/components/decorators';
|
|
5
6
|
import { AXPopoverComponent } from '@acorex/components/popover';
|
|
@@ -7,16 +8,18 @@ import { AXSelectBoxComponent } from '@acorex/components/select-box';
|
|
|
7
8
|
import { AXCalendarService } from '@acorex/core/date-time';
|
|
8
9
|
import { AXFormatService, AXFormatPipe } from '@acorex/core/format';
|
|
9
10
|
import { AXLocaleService } from '@acorex/core/locale';
|
|
11
|
+
import { AXPlatform } from '@acorex/core/platform';
|
|
10
12
|
import { AXTranslatorPipe, AXTranslationService } from '@acorex/core/translation';
|
|
11
|
-
import { AXUnsubscriber
|
|
12
|
-
import { AsyncPipe, NgTemplateOutlet, isPlatformBrowser } from '@angular/common';
|
|
13
|
+
import { AXUnsubscriber } from '@acorex/core/utils';
|
|
13
14
|
import * as i0 from '@angular/core';
|
|
14
|
-
import { inject, signal, Injectable, DOCUMENT, input, computed, output, ViewEncapsulation, ChangeDetectionStrategy, Component, DestroyRef, viewChild,
|
|
15
|
+
import { inject, signal, Injectable, DOCUMENT, input, computed, output, ViewEncapsulation, ChangeDetectionStrategy, Component, DestroyRef, viewChild, linkedSignal, model, effect, untracked, NgModule } from '@angular/core';
|
|
16
|
+
import { map } from 'rxjs';
|
|
15
17
|
import * as i1 from '@angular/forms';
|
|
16
18
|
import { FormsModule } from '@angular/forms';
|
|
17
19
|
import { isEqual, orderBy } from 'lodash-es';
|
|
18
20
|
import { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';
|
|
19
21
|
import { AXTooltipDirective } from '@acorex/components/tooltip';
|
|
22
|
+
import { AsyncPipe, NgTemplateOutlet } from '@angular/common';
|
|
20
23
|
|
|
21
24
|
class AXSchedulerService {
|
|
22
25
|
constructor() {
|
|
@@ -1016,6 +1019,7 @@ class AXSchedulerDayViewComponent extends NXComponent {
|
|
|
1016
1019
|
this.endDayHour = input.required(...(ngDevMode ? [{ debugName: "endDayHour" }] : []));
|
|
1017
1020
|
this.startDayHour = input.required(...(ngDevMode ? [{ debugName: "startDayHour" }] : []));
|
|
1018
1021
|
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
|
1022
|
+
this.scrollToCurrentTimeIndicator = input(false, ...(ngDevMode ? [{ debugName: "scrollToCurrentTimeIndicator" }] : []));
|
|
1019
1023
|
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
|
1020
1024
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
|
1021
1025
|
this.selectedAppointmentId = input(null, ...(ngDevMode ? [{ debugName: "selectedAppointmentId" }] : []));
|
|
@@ -1322,7 +1326,7 @@ class AXSchedulerDayViewComponent extends NXComponent {
|
|
|
1322
1326
|
this.resizeObserverCleanup?.();
|
|
1323
1327
|
}
|
|
1324
1328
|
setupCurrentTimeScroll() {
|
|
1325
|
-
if (!this.showCurrentTimeIndicator()) {
|
|
1329
|
+
if (!this.showCurrentTimeIndicator() || !this.scrollToCurrentTimeIndicator()) {
|
|
1326
1330
|
return undefined;
|
|
1327
1331
|
}
|
|
1328
1332
|
const currentPosition = this.getCurrentTimePosition();
|
|
@@ -1360,7 +1364,7 @@ class AXSchedulerDayViewComponent extends NXComponent {
|
|
|
1360
1364
|
this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);
|
|
1361
1365
|
}
|
|
1362
1366
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1363
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerDayViewComponent, isStandalone: true, selector: "ax-scheduler-day-view", inputs: { rtl: { classPropertyName: "rtl", publicName: "rtl", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: "endDayHour", publicName: "endDayHour", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: "startDayHour", publicName: "startDayHour", isSignal: true, isRequired: true, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-scheduler-day-header\">\n <div class=\"ax-scheduler-day-header-table\" aria-hidden=\"true\">\n <div>\n {{ '@acorex:dateTime.duration.all-day' | translate | async }}\n </div>\n </div>\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleAllDayDrop($event)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleAllDaySlotEvent($event)\"\n (dblclick)=\"handleAllDaySlotEvent($event)\"\n (contextmenu)=\"handleAllDaySlotEvent($event)\"\n class=\"ax-scheduler-day-header-table-container\"\n [attr.data-slot-id]=\"date().format('YYYYMMDD') + '-allday'\"\n >\n <div class=\"ax-scheduler-day-header-appointment-container\">\n @if (allDayAppointments().length) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || allDayAppointments()[0].readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n [dragData]=\"allDayAppointments()[0]\"\n (click)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (dblclick)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n [title]=\"tooltipTemplate() ? '' : allDayAppointments()[0].title\"\n class=\"ax-scheduler-header-day-appointment\"\n [class.ax-continuation-from-previous]=\"allDayAppointments()[0].isContinuationFromPreviousDay\"\n [class.ax-continuation-to-next]=\"allDayAppointments()[0].isContinuationToNextDay\"\n [class.ax-state-active]=\"isActive(allDayAppointments()[0].id)\"\n [class]=\"\n allDayAppointments()[0].cssClass ??\n 'ax-scheduler-' + (allDayAppointments()[0].priority ?? 'primary') + '-priority'\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"allDayAppointments()[0]\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ allDayAppointments()[0].title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, allDayAppointments()[0])\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{ allDayAppointments()[0].startDate | format: 'date' : { calendar: calendar() } | async }}\n -\n {{ allDayAppointments()[0].endDate | format: 'date' : { calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n @if (allDayAppointments().length > 1) {\n <div\n #moreAppointments\n class=\"ax-scheduler-day-header-more-tag\"\n [class]=\"\n allDayAppointments()[1].cssClass ??\n 'ax-scheduler-' + (allDayAppointments()[1].priority ?? 'primary') + '-priority'\n \"\n >\n {{\n '@acorex:common.general.more-items'\n | translate: { params: { number: allDayAppointments().length - 1 } }\n | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\">\n <div class=\"ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\" axDropZone>\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\n @if (!first) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"tooltipTemplate() ? '' : appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [class.ax-continuation-from-previous]=\"appointment.isContinuationFromPreviousDay\"\n [class.ax-continuation-to-next]=\"appointment.isContinuationToNextDay\"\n [class.ax-state-active]=\"isActive(appointment.id)\"\n [class]=\"appointment.cssClass ?? 'ax-scheduler-' + (appointment.priority ?? 'primary') + '-priority'\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n @if (appointment.isContinuationFromPreviousDay) {\n <span class=\"ax-continuation-arrow\">{{ rtl() ? '\u2192 ' : '\u2190 ' }}</span>\n }\n <span class=\"ax-scheduler-truncate\">{{ appointment.title }}</span>\n @if (appointment.isContinuationToNextDay) {\n <span class=\"ax-continuation-arrow\">{{ rtl() ? ' \u2190' : ' \u2192' }}</span>\n }\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{ appointment.originalStartDate | format: 'date' : { calendar: calendar() } | async }}\n -\n {{ appointment.originalEndDate | format: 'date' : { calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n</div>\n\n<div class=\"ax-scheduler-day-time-container\">\n <table class=\"ax-scheduler-day-time\" aria-hidden=\"true\" [border]=\"1\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div>\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </div>\n }\n </table>\n <div class=\"ax-scheduler-day-table-container\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePositionWithOffset() !== null) {\n <div\n #currentTimeLine\n class=\"ax-scheduler-current-time-line\"\n [style.inset-block-start]=\"getCurrentTimePositionWithOffset()\"\n ></div>\n }\n <div class=\"ax-scheduler-day-appointment-container\">\n @for (appointment of singleDayAppointments(); track appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"tooltipTemplate() ? '' : appointment.title\"\n class=\"ax-scheduler-day-appointment\"\n [class.ax-continuation-from-previous]=\"appointment.isContinuationFromPreviousDay\"\n [class.ax-continuation-to-next]=\"appointment.isContinuationToNextDay\"\n [class.ax-state-active]=\"isActive(appointment.id)\"\n [style.width]=\"getAppointmentWidth(appointment.id)\"\n [style.height]=\"getAppointmentHeight(appointment.id)\"\n [style.inset-block-start]=\"getAppointmentTop(appointment.id)\"\n [style.inset-inline-start]=\"getAppointmentLeft(appointment.id)\"\n [class]=\"appointment.cssClass ?? 'ax-scheduler-' + (appointment.priority ?? 'primary') + '-priority'\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{ appointment.originalStartDate | format: 'time' : { calendar: calendar() } | async }} -\n {{ appointment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div aria-hidden=\"true\" class=\"ax-scheduler-day-slot\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleSingleDayDrop($event, time)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleSingleSlotEvent($event, time)\"\n (dblclick)=\"handleSingleSlotEvent($event, time)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time)\"\n [attr.data-slot-id]=\"time.format('YYYYMMDD-HHmm')\"\n ></div>\n <div\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time.add('minute', 30))\"\n (click)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n (dblclick)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n (contextmenu)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n [attr.data-slot-id]=\"time.add('minute', 30).format('YYYYMMDD-HHmm')\"\n ></div>\n }\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";ax-scheduler-day-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-day-view .ax-scheduler-day-header{top:0;z-index:20;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table{z-index:10;position:sticky;inset-inline-start:0;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table div{display:flex;align-items:center;justify-content:center;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:var(--ax-comp-scheduler-basic-view-blocks-height);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container{width:100%;display:flex}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container{gap:1rem;display:flex;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment{width:100%;display:flex;overflow:hidden;position:relative;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-from-previous{border-start-start-radius:0;border-end-start-radius:0;padding-inline-start:1.25rem}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-from-previous:before{content:\"\\2190\";position:absolute;inset-inline-start:.25rem;top:50%;transform:translateY(-50%);font-size:.75rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-from-previous:before{content:\"\\2192\"}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-to-next{border-start-end-radius:0;border-end-end-radius:0;padding-inline-end:1.25rem}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-to-next:after{content:\"\\2192\";position:absolute;inset-inline-end:.25rem;top:50%;transform:translateY(-50%);font-size:.75rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-to-next:after{content:\"\\2190\"}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-day-header-more-tag{display:flex;cursor:pointer;text-wrap:nowrap;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:var(--ax-sys-border-radius)}ax-scheduler-day-view .ax-scheduler-day-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time{z-index:15;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container{width:100%;position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container{top:0;position:absolute;width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-from-previous{border-start-start-radius:0;border-end-start-radius:0}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-from-previous:before{content:\"\\2190\";position:absolute;inset-inline-start:.25rem;top:.25rem;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-from-previous:before{content:\"\\2192\"}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-to-next{border-start-end-radius:0;border-end-end-radius:0}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-to-next:after{content:\"\\2192\";position:absolute;inset-inline-end:.25rem;top:.25rem;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-to-next:after{content:\"\\2190\"}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot{width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div{height:var(--ax-comp-scheduler-basic-view-blocks-height);display:block;padding-inline:.5rem;border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div:first-child{border-block-start-width:0}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-header-day-appointment,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-appointment{cursor:pointer}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container:hover,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-day-view ax-title .ax-continuation-arrow{font-size:.65rem;opacity:.7;flex-shrink:0}ax-scheduler-day-view .ax-scheduler-current-time-line{inset-inline-start:0;inset-inline-end:0;height:2px}ax-scheduler-day-view .ax-scheduler-current-time-line:before{top:-5px;inset-inline-start:-6px}\n"], dependencies: [{ kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1367
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerDayViewComponent, isStandalone: true, selector: "ax-scheduler-day-view", inputs: { rtl: { classPropertyName: "rtl", publicName: "rtl", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: "endDayHour", publicName: "endDayHour", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: "startDayHour", publicName: "startDayHour", isSignal: true, isRequired: true, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, scrollToCurrentTimeIndicator: { classPropertyName: "scrollToCurrentTimeIndicator", publicName: "scrollToCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-scheduler-day-header\">\n <div class=\"ax-scheduler-day-header-table\" aria-hidden=\"true\">\n <div>\n {{ '@acorex:dateTime.duration.all-day' | translate | async }}\n </div>\n </div>\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleAllDayDrop($event)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleAllDaySlotEvent($event)\"\n (dblclick)=\"handleAllDaySlotEvent($event)\"\n (contextmenu)=\"handleAllDaySlotEvent($event)\"\n class=\"ax-scheduler-day-header-table-container\"\n [attr.data-slot-id]=\"date().format('YYYYMMDD') + '-allday'\"\n >\n <div class=\"ax-scheduler-day-header-appointment-container\">\n @if (allDayAppointments().length) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || allDayAppointments()[0].readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n [dragData]=\"allDayAppointments()[0]\"\n (click)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (dblclick)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n [title]=\"tooltipTemplate() ? '' : allDayAppointments()[0].title\"\n class=\"ax-scheduler-header-day-appointment\"\n [class.ax-continuation-from-previous]=\"allDayAppointments()[0].isContinuationFromPreviousDay\"\n [class.ax-continuation-to-next]=\"allDayAppointments()[0].isContinuationToNextDay\"\n [class.ax-state-active]=\"isActive(allDayAppointments()[0].id)\"\n [class]=\"\n allDayAppointments()[0].cssClass ??\n 'ax-scheduler-' + (allDayAppointments()[0].priority ?? 'primary') + '-priority'\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"allDayAppointments()[0]\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ allDayAppointments()[0].title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, allDayAppointments()[0])\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{ allDayAppointments()[0].startDate | format: 'date' : { calendar: calendar() } | async }}\n -\n {{ allDayAppointments()[0].endDate | format: 'date' : { calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n @if (allDayAppointments().length > 1) {\n <div\n #moreAppointments\n class=\"ax-scheduler-day-header-more-tag\"\n [class]=\"\n allDayAppointments()[1].cssClass ??\n 'ax-scheduler-' + (allDayAppointments()[1].priority ?? 'primary') + '-priority'\n \"\n >\n {{\n '@acorex:common.general.more-items'\n | translate: { params: { number: allDayAppointments().length - 1 } }\n | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\">\n <div class=\"ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\" axDropZone>\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\n @if (!first) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"tooltipTemplate() ? '' : appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [class.ax-continuation-from-previous]=\"appointment.isContinuationFromPreviousDay\"\n [class.ax-continuation-to-next]=\"appointment.isContinuationToNextDay\"\n [class.ax-state-active]=\"isActive(appointment.id)\"\n [class]=\"appointment.cssClass ?? 'ax-scheduler-' + (appointment.priority ?? 'primary') + '-priority'\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n @if (appointment.isContinuationFromPreviousDay) {\n <span class=\"ax-continuation-arrow\">{{ rtl() ? '\u2192 ' : '\u2190 ' }}</span>\n }\n <span class=\"ax-scheduler-truncate\">{{ appointment.title }}</span>\n @if (appointment.isContinuationToNextDay) {\n <span class=\"ax-continuation-arrow\">{{ rtl() ? ' \u2190' : ' \u2192' }}</span>\n }\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{ appointment.originalStartDate | format: 'date' : { calendar: calendar() } | async }}\n -\n {{ appointment.originalEndDate | format: 'date' : { calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n</div>\n\n<div class=\"ax-scheduler-day-time-container\">\n <table class=\"ax-scheduler-day-time\" aria-hidden=\"true\" [border]=\"1\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div>\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </div>\n }\n </table>\n <div class=\"ax-scheduler-day-table-container\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePositionWithOffset() !== null) {\n <div\n #currentTimeLine\n class=\"ax-scheduler-current-time-line\"\n [style.inset-block-start]=\"getCurrentTimePositionWithOffset()\"\n ></div>\n }\n <div class=\"ax-scheduler-day-appointment-container\">\n @for (appointment of singleDayAppointments(); track appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"tooltipTemplate() ? '' : appointment.title\"\n class=\"ax-scheduler-day-appointment\"\n [class.ax-continuation-from-previous]=\"appointment.isContinuationFromPreviousDay\"\n [class.ax-continuation-to-next]=\"appointment.isContinuationToNextDay\"\n [class.ax-state-active]=\"isActive(appointment.id)\"\n [style.width]=\"getAppointmentWidth(appointment.id)\"\n [style.height]=\"getAppointmentHeight(appointment.id)\"\n [style.inset-block-start]=\"getAppointmentTop(appointment.id)\"\n [style.inset-inline-start]=\"getAppointmentLeft(appointment.id)\"\n [class]=\"appointment.cssClass ?? 'ax-scheduler-' + (appointment.priority ?? 'primary') + '-priority'\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{ appointment.originalStartDate | format: 'time' : { calendar: calendar() } | async }} -\n {{ appointment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div aria-hidden=\"true\" class=\"ax-scheduler-day-slot\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleSingleDayDrop($event, time)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleSingleSlotEvent($event, time)\"\n (dblclick)=\"handleSingleSlotEvent($event, time)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time)\"\n [attr.data-slot-id]=\"time.format('YYYYMMDD-HHmm')\"\n ></div>\n <div\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time.add('minute', 30))\"\n (click)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n (dblclick)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n (contextmenu)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n [attr.data-slot-id]=\"time.add('minute', 30).format('YYYYMMDD-HHmm')\"\n ></div>\n }\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";ax-scheduler-day-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-day-view .ax-scheduler-day-header{top:0;z-index:20;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table{z-index:10;position:sticky;inset-inline-start:0;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table div{display:flex;align-items:center;justify-content:center;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:var(--ax-comp-scheduler-basic-view-blocks-height);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container{width:100%;display:flex}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container{gap:1rem;display:flex;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment{width:100%;display:flex;overflow:hidden;position:relative;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-from-previous{border-start-start-radius:0;border-end-start-radius:0;padding-inline-start:1.25rem}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-from-previous:before{content:\"\\2190\";position:absolute;inset-inline-start:.25rem;top:50%;transform:translateY(-50%);font-size:.75rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-from-previous:before{content:\"\\2192\"}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-to-next{border-start-end-radius:0;border-end-end-radius:0;padding-inline-end:1.25rem}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-to-next:after{content:\"\\2192\";position:absolute;inset-inline-end:.25rem;top:50%;transform:translateY(-50%);font-size:.75rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment.ax-continuation-to-next:after{content:\"\\2190\"}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-day-header-more-tag{display:flex;cursor:pointer;text-wrap:nowrap;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:var(--ax-sys-border-radius)}ax-scheduler-day-view .ax-scheduler-day-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time{z-index:15;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container{width:100%;position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container{top:0;position:absolute;width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-from-previous{border-start-start-radius:0;border-end-start-radius:0}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-from-previous:before{content:\"\\2190\";position:absolute;inset-inline-start:.25rem;top:.25rem;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-from-previous:before{content:\"\\2192\"}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-to-next{border-start-end-radius:0;border-end-end-radius:0}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-to-next:after{content:\"\\2192\";position:absolute;inset-inline-end:.25rem;top:.25rem;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment.ax-continuation-to-next:after{content:\"\\2190\"}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot{width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div{height:var(--ax-comp-scheduler-basic-view-blocks-height);display:block;padding-inline:.5rem;border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div:first-child{border-block-start-width:0}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-header-day-appointment,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-appointment{cursor:pointer}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container:hover,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-day-view ax-title .ax-continuation-arrow{font-size:.65rem;opacity:.7;flex-shrink:0}ax-scheduler-day-view .ax-scheduler-current-time-line{inset-inline-start:0;inset-inline-end:0;height:2px}ax-scheduler-day-view .ax-scheduler-current-time-line:before{top:-5px;inset-inline-start:-6px}\n"], dependencies: [{ kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1364
1368
|
}
|
|
1365
1369
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerDayViewComponent, decorators: [{
|
|
1366
1370
|
type: Component,
|
|
@@ -1839,6 +1843,7 @@ class AXSchedulerTimelineDayViewComponent extends NXComponent {
|
|
|
1839
1843
|
this.showUnassignedAppointments = input(true, ...(ngDevMode ? [{ debugName: "showUnassignedAppointments" }] : []));
|
|
1840
1844
|
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : []));
|
|
1841
1845
|
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
|
1846
|
+
this.scrollToCurrentTimeIndicator = input(false, ...(ngDevMode ? [{ debugName: "scrollToCurrentTimeIndicator" }] : []));
|
|
1842
1847
|
this.resourceTemplate = input(...(ngDevMode ? [undefined, { debugName: "resourceTemplate" }] : []));
|
|
1843
1848
|
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
|
1844
1849
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
|
@@ -2120,7 +2125,7 @@ class AXSchedulerTimelineDayViewComponent extends NXComponent {
|
|
|
2120
2125
|
this.resizeObserverCleanup?.();
|
|
2121
2126
|
}
|
|
2122
2127
|
setupCurrentTimeScroll() {
|
|
2123
|
-
if (!this.showCurrentTimeIndicator()) {
|
|
2128
|
+
if (!this.showCurrentTimeIndicator() || !this.scrollToCurrentTimeIndicator()) {
|
|
2124
2129
|
return undefined;
|
|
2125
2130
|
}
|
|
2126
2131
|
const currentPosition = this.getCurrentTimePosition();
|
|
@@ -2271,7 +2276,7 @@ class AXSchedulerTimelineDayViewComponent extends NXComponent {
|
|
|
2271
2276
|
this.dragStartSlotResourceId.set(dropListElement ? dropListElement.dataset['resourceId'] : null);
|
|
2272
2277
|
}
|
|
2273
2278
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
2274
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerTimelineDayViewComponent, isStandalone: true, selector: "ax-scheduler-timeline-day-view", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, showResourceHeaders: { classPropertyName: "showResourceHeaders", publicName: "showResourceHeaders", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: "endDayHour", publicName: "endDayHour", isSignal: true, isRequired: true, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null }, startDayHour: { classPropertyName: "startDayHour", publicName: "startDayHour", isSignal: true, isRequired: true, transformFunction: null }, showUnassignedAppointments: { classPropertyName: "showUnassignedAppointments", publicName: "showUnassignedAppointments", isSignal: true, isRequired: false, transformFunction: null }, resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, resourceTemplate: { classPropertyName: "resourceTemplate", publicName: "resourceTemplate", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-header\">\n @for (hour of hoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-header-hours\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-timeline-content\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePositionWithOffset() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start]=\"getCurrentTimePositionWithOffset()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n layout of resources().length === 0 ? appointmentLayouts() : getAppointmentLayoutsForResource(resourceIds()[0]);\n track layout.appointment.id\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"tooltipTemplate() ? '' : layout.appointment.title\"\n [style.width]=\"layout.layoutWidth\"\n [style.height]=\"layout.layoutHeight\"\n class=\"ax-scheduler-timeline-appointment {{\n layout.appointment.cssClass ?? 'ax-scheduler-' + (layout.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(layout.appointment.id)\"\n [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"layout.appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, layout.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div class=\"ax-scheduler-timeline-slot-row\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, time)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-slot-cell\"\n (click)=\"handleSlotEvent($event, time)\"\n (dblclick)=\"handleSlotEvent($event, time)\"\n (contextmenu)=\"handleSlotEvent($event, time)\"\n [attr.data-slot-id]=\"time.format('YYYYMMDD-HHmm')\"\n ></div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout -->\n <div class=\"ax-scheduler-timeline-resource-container\">\n <!-- Single sticky time header for all resources (only show if not used in multi-day) -->\n @if (showResourceHeaders()) {\n <div class=\"ax-scheduler-timeline-header ax-scheduler-timeline-header-sticky\">\n <div class=\"ax-scheduler-timeline-resource-header-placeholder\"><span>Resources</span></div>\n @for (hour of hoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-header-hours\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Resource rows -->\n <div class=\"ax-scheduler-timeline-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePositionWithOffset() !== null) {\n <div\n #currentTimeLine\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start]=\"getCurrentTimePositionWithOffset()\"\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div class=\"ax-scheduler-timeline-resource-row\" [style.height]=\"getResourceRowHeight(resourceId)\">\n @if (showResourceHeaders()) {\n <!-- Sticky Resource Header -->\n <div class=\"ax-scheduler-timeline-resource-header ax-scheduler-timeline-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <span class=\"ax-scheduler-timeline-resource-title\">{{ getResourceTitle(resourceId) }}</span>\n }\n </div>\n }\n\n <!-- Resource Content -->\n <div class=\"ax-scheduler-timeline-resource-content\">\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (layout of getAppointmentLayoutsForResource(resourceId); track layout.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"tooltipTemplate() ? '' : layout.appointment.title\"\n [style.width]=\"layout.layoutWidth\"\n [style.height]=\"layout.layoutHeight\"\n class=\"ax-scheduler-timeline-appointment {{\n layout.appointment.cssClass ??\n 'ax-scheduler-' + (layout.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(layout.appointment.id)\"\n [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"layout.appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, layout.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n layout.appointment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n layout.appointment.originalEndDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div class=\"ax-scheduler-timeline-slot-row\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, time, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-slot-cell\"\n (click)=\"handleSlotEvent($event, time)\"\n (dblclick)=\"handleSlotEvent($event, time)\"\n (contextmenu)=\"handleSlotEvent($event, time)\"\n [attr.data-slot-id]=\"time.format('YYYYMMDD-HHmm')\"\n [attr.data-resource-id]=\"resourceId\"\n ></div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container{height:auto;display:flex;min-height:100%;overflow:visible;flex-direction:column;background-color:inherit;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-header-sticky .ax-scheduler-timeline-resource-header-placeholder{left:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row{display:flex;min-height:0;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header.ax-scheduler-timeline-resource-header-sticky{position:sticky;left:0;z-index:15;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header .ax-scheduler-timeline-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content{flex:1;display:flex;flex-direction:column;min-width:0;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row{height:100%;display:flex;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell:after{content:\"\";position:absolute;top:0;right:0;width:1px;height:100%;background-color:rgba(var(--ax-sys-color-border-lightest-surface),.3)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-day-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-day-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2279
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerTimelineDayViewComponent, isStandalone: true, selector: "ax-scheduler-timeline-day-view", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, showResourceHeaders: { classPropertyName: "showResourceHeaders", publicName: "showResourceHeaders", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: "endDayHour", publicName: "endDayHour", isSignal: true, isRequired: true, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null }, startDayHour: { classPropertyName: "startDayHour", publicName: "startDayHour", isSignal: true, isRequired: true, transformFunction: null }, showUnassignedAppointments: { classPropertyName: "showUnassignedAppointments", publicName: "showUnassignedAppointments", isSignal: true, isRequired: false, transformFunction: null }, resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, scrollToCurrentTimeIndicator: { classPropertyName: "scrollToCurrentTimeIndicator", publicName: "scrollToCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, resourceTemplate: { classPropertyName: "resourceTemplate", publicName: "resourceTemplate", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-header\">\n @for (hour of hoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-header-hours\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-timeline-content\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePositionWithOffset() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start]=\"getCurrentTimePositionWithOffset()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n layout of resources().length === 0 ? appointmentLayouts() : getAppointmentLayoutsForResource(resourceIds()[0]);\n track layout.appointment.id\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"tooltipTemplate() ? '' : layout.appointment.title\"\n [style.width]=\"layout.layoutWidth\"\n [style.height]=\"layout.layoutHeight\"\n class=\"ax-scheduler-timeline-appointment {{\n layout.appointment.cssClass ?? 'ax-scheduler-' + (layout.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(layout.appointment.id)\"\n [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"layout.appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, layout.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div class=\"ax-scheduler-timeline-slot-row\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, time)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-slot-cell\"\n (click)=\"handleSlotEvent($event, time)\"\n (dblclick)=\"handleSlotEvent($event, time)\"\n (contextmenu)=\"handleSlotEvent($event, time)\"\n [attr.data-slot-id]=\"time.format('YYYYMMDD-HHmm')\"\n ></div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout -->\n <div class=\"ax-scheduler-timeline-resource-container\">\n <!-- Single sticky time header for all resources (only show if not used in multi-day) -->\n @if (showResourceHeaders()) {\n <div class=\"ax-scheduler-timeline-header ax-scheduler-timeline-header-sticky\">\n <div class=\"ax-scheduler-timeline-resource-header-placeholder\"><span>Resources</span></div>\n @for (hour of hoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-header-hours\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Resource rows -->\n <div class=\"ax-scheduler-timeline-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePositionWithOffset() !== null) {\n <div\n #currentTimeLine\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start]=\"getCurrentTimePositionWithOffset()\"\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div class=\"ax-scheduler-timeline-resource-row\" [style.height]=\"getResourceRowHeight(resourceId)\">\n @if (showResourceHeaders()) {\n <!-- Sticky Resource Header -->\n <div class=\"ax-scheduler-timeline-resource-header ax-scheduler-timeline-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <span class=\"ax-scheduler-timeline-resource-title\">{{ getResourceTitle(resourceId) }}</span>\n }\n </div>\n }\n\n <!-- Resource Content -->\n <div class=\"ax-scheduler-timeline-resource-content\">\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (layout of getAppointmentLayoutsForResource(resourceId); track layout.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"tooltipTemplate() ? '' : layout.appointment.title\"\n [style.width]=\"layout.layoutWidth\"\n [style.height]=\"layout.layoutHeight\"\n class=\"ax-scheduler-timeline-appointment {{\n layout.appointment.cssClass ??\n 'ax-scheduler-' + (layout.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(layout.appointment.id)\"\n [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"layout.appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, layout.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n layout.appointment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n layout.appointment.originalEndDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div class=\"ax-scheduler-timeline-slot-row\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, time, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-slot-cell\"\n (click)=\"handleSlotEvent($event, time)\"\n (dblclick)=\"handleSlotEvent($event, time)\"\n (contextmenu)=\"handleSlotEvent($event, time)\"\n [attr.data-slot-id]=\"time.format('YYYYMMDD-HHmm')\"\n [attr.data-resource-id]=\"resourceId\"\n ></div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container{height:auto;display:flex;min-height:100%;overflow:visible;flex-direction:column;background-color:inherit;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-header-sticky .ax-scheduler-timeline-resource-header-placeholder{left:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row{display:flex;min-height:0;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header.ax-scheduler-timeline-resource-header-sticky{position:sticky;inset-inline-start:0;z-index:15;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header .ax-scheduler-timeline-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content{flex:1;display:flex;flex-direction:column;min-width:0;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row{height:100%;display:flex;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell:after{content:\"\";position:absolute;top:0;right:0;width:1px;height:100%;background-color:rgba(var(--ax-sys-color-border-lightest-surface),.3)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-day-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-day-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2275
2280
|
}
|
|
2276
2281
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, decorators: [{
|
|
2277
2282
|
type: Component,
|
|
@@ -2286,7 +2291,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
2286
2291
|
AXDropZoneDirective,
|
|
2287
2292
|
AXDecoratorIconComponent,
|
|
2288
2293
|
AXDecoratorGenericComponent,
|
|
2289
|
-
], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-header\">\n @for (hour of hoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-header-hours\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-timeline-content\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePositionWithOffset() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start]=\"getCurrentTimePositionWithOffset()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n layout of resources().length === 0 ? appointmentLayouts() : getAppointmentLayoutsForResource(resourceIds()[0]);\n track layout.appointment.id\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"tooltipTemplate() ? '' : layout.appointment.title\"\n [style.width]=\"layout.layoutWidth\"\n [style.height]=\"layout.layoutHeight\"\n class=\"ax-scheduler-timeline-appointment {{\n layout.appointment.cssClass ?? 'ax-scheduler-' + (layout.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(layout.appointment.id)\"\n [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"layout.appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, layout.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div class=\"ax-scheduler-timeline-slot-row\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, time)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-slot-cell\"\n (click)=\"handleSlotEvent($event, time)\"\n (dblclick)=\"handleSlotEvent($event, time)\"\n (contextmenu)=\"handleSlotEvent($event, time)\"\n [attr.data-slot-id]=\"time.format('YYYYMMDD-HHmm')\"\n ></div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout -->\n <div class=\"ax-scheduler-timeline-resource-container\">\n <!-- Single sticky time header for all resources (only show if not used in multi-day) -->\n @if (showResourceHeaders()) {\n <div class=\"ax-scheduler-timeline-header ax-scheduler-timeline-header-sticky\">\n <div class=\"ax-scheduler-timeline-resource-header-placeholder\"><span>Resources</span></div>\n @for (hour of hoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-header-hours\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Resource rows -->\n <div class=\"ax-scheduler-timeline-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePositionWithOffset() !== null) {\n <div\n #currentTimeLine\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start]=\"getCurrentTimePositionWithOffset()\"\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div class=\"ax-scheduler-timeline-resource-row\" [style.height]=\"getResourceRowHeight(resourceId)\">\n @if (showResourceHeaders()) {\n <!-- Sticky Resource Header -->\n <div class=\"ax-scheduler-timeline-resource-header ax-scheduler-timeline-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <span class=\"ax-scheduler-timeline-resource-title\">{{ getResourceTitle(resourceId) }}</span>\n }\n </div>\n }\n\n <!-- Resource Content -->\n <div class=\"ax-scheduler-timeline-resource-content\">\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (layout of getAppointmentLayoutsForResource(resourceId); track layout.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"tooltipTemplate() ? '' : layout.appointment.title\"\n [style.width]=\"layout.layoutWidth\"\n [style.height]=\"layout.layoutHeight\"\n class=\"ax-scheduler-timeline-appointment {{\n layout.appointment.cssClass ??\n 'ax-scheduler-' + (layout.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(layout.appointment.id)\"\n [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"layout.appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, layout.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n layout.appointment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n layout.appointment.originalEndDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div class=\"ax-scheduler-timeline-slot-row\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, time, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-slot-cell\"\n (click)=\"handleSlotEvent($event, time)\"\n (dblclick)=\"handleSlotEvent($event, time)\"\n (contextmenu)=\"handleSlotEvent($event, time)\"\n [attr.data-slot-id]=\"time.format('YYYYMMDD-HHmm')\"\n [attr.data-resource-id]=\"resourceId\"\n ></div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container{height:auto;display:flex;min-height:100%;overflow:visible;flex-direction:column;background-color:inherit;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-header-sticky .ax-scheduler-timeline-resource-header-placeholder{left:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row{display:flex;min-height:0;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header.ax-scheduler-timeline-resource-header-sticky{position:sticky;left:0;z-index:15;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header .ax-scheduler-timeline-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content{flex:1;display:flex;flex-direction:column;min-width:0;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row{height:100%;display:flex;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell:after{content:\"\";position:absolute;top:0;right:0;width:1px;height:100%;background-color:rgba(var(--ax-sys-color-border-lightest-surface),.3)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-day-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-day-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"] }]
|
|
2294
|
+
], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-header\">\n @for (hour of hoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-header-hours\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-timeline-content\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePositionWithOffset() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start]=\"getCurrentTimePositionWithOffset()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n layout of resources().length === 0 ? appointmentLayouts() : getAppointmentLayoutsForResource(resourceIds()[0]);\n track layout.appointment.id\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"tooltipTemplate() ? '' : layout.appointment.title\"\n [style.width]=\"layout.layoutWidth\"\n [style.height]=\"layout.layoutHeight\"\n class=\"ax-scheduler-timeline-appointment {{\n layout.appointment.cssClass ?? 'ax-scheduler-' + (layout.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(layout.appointment.id)\"\n [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"layout.appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, layout.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div class=\"ax-scheduler-timeline-slot-row\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, time)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-slot-cell\"\n (click)=\"handleSlotEvent($event, time)\"\n (dblclick)=\"handleSlotEvent($event, time)\"\n (contextmenu)=\"handleSlotEvent($event, time)\"\n [attr.data-slot-id]=\"time.format('YYYYMMDD-HHmm')\"\n ></div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout -->\n <div class=\"ax-scheduler-timeline-resource-container\">\n <!-- Single sticky time header for all resources (only show if not used in multi-day) -->\n @if (showResourceHeaders()) {\n <div class=\"ax-scheduler-timeline-header ax-scheduler-timeline-header-sticky\">\n <div class=\"ax-scheduler-timeline-resource-header-placeholder\"><span>Resources</span></div>\n @for (hour of hoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-header-hours\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Resource rows -->\n <div class=\"ax-scheduler-timeline-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePositionWithOffset() !== null) {\n <div\n #currentTimeLine\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start]=\"getCurrentTimePositionWithOffset()\"\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div class=\"ax-scheduler-timeline-resource-row\" [style.height]=\"getResourceRowHeight(resourceId)\">\n @if (showResourceHeaders()) {\n <!-- Sticky Resource Header -->\n <div class=\"ax-scheduler-timeline-resource-header ax-scheduler-timeline-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <span class=\"ax-scheduler-timeline-resource-title\">{{ getResourceTitle(resourceId) }}</span>\n }\n </div>\n }\n\n <!-- Resource Content -->\n <div class=\"ax-scheduler-timeline-resource-content\">\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (layout of getAppointmentLayoutsForResource(resourceId); track layout.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"tooltipTemplate() ? '' : layout.appointment.title\"\n [style.width]=\"layout.layoutWidth\"\n [style.height]=\"layout.layoutHeight\"\n class=\"ax-scheduler-timeline-appointment {{\n layout.appointment.cssClass ??\n 'ax-scheduler-' + (layout.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(layout.appointment.id)\"\n [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"layout.appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, layout.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n layout.appointment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n layout.appointment.originalEndDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div class=\"ax-scheduler-timeline-slot-row\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, time, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-slot-cell\"\n (click)=\"handleSlotEvent($event, time)\"\n (dblclick)=\"handleSlotEvent($event, time)\"\n (contextmenu)=\"handleSlotEvent($event, time)\"\n [attr.data-slot-id]=\"time.format('YYYYMMDD-HHmm')\"\n [attr.data-resource-id]=\"resourceId\"\n ></div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container{height:auto;display:flex;min-height:100%;overflow:visible;flex-direction:column;background-color:inherit;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-header-sticky .ax-scheduler-timeline-resource-header-placeholder{left:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row{display:flex;min-height:0;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header.ax-scheduler-timeline-resource-header-sticky{position:sticky;inset-inline-start:0;z-index:15;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-header .ax-scheduler-timeline-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content{flex:1;display:flex;flex-direction:column;min-width:0;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row{height:100%;display:flex;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-resource-container .ax-scheduler-timeline-resource-row .ax-scheduler-timeline-resource-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell:after{content:\"\";position:absolute;top:0;right:0;width:1px;height:100%;background-color:rgba(var(--ax-sys-color-border-lightest-surface),.3)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-day-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-day-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"] }]
|
|
2290
2295
|
}] });
|
|
2291
2296
|
|
|
2292
2297
|
class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
@@ -2412,6 +2417,7 @@ class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
|
2412
2417
|
this.selectedAppointmentId = input(null, ...(ngDevMode ? [{ debugName: "selectedAppointmentId" }] : []));
|
|
2413
2418
|
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : []));
|
|
2414
2419
|
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
|
2420
|
+
this.scrollToCurrentTimeIndicator = input(false, ...(ngDevMode ? [{ debugName: "scrollToCurrentTimeIndicator" }] : []));
|
|
2415
2421
|
this.resourceTemplate = input(...(ngDevMode ? [undefined, { debugName: "resourceTemplate" }] : []));
|
|
2416
2422
|
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
|
2417
2423
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
|
@@ -2689,6 +2695,9 @@ class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
|
2689
2695
|
this.resizeObserverCleanup?.();
|
|
2690
2696
|
}
|
|
2691
2697
|
setupCurrentTimeScroll() {
|
|
2698
|
+
if (!this.showCurrentTimeIndicator() || !this.scrollToCurrentTimeIndicator()) {
|
|
2699
|
+
return undefined;
|
|
2700
|
+
}
|
|
2692
2701
|
const currentPosition = this.getCurrentTimePosition();
|
|
2693
2702
|
if (currentPosition === null) {
|
|
2694
2703
|
return undefined;
|
|
@@ -2791,7 +2800,7 @@ class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
|
2791
2800
|
return now.isSame(dayDate, 'day');
|
|
2792
2801
|
}
|
|
2793
2802
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
2794
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerTimelineMonthViewComponent, isStandalone: true, selector: "ax-scheduler-timeline-month-view", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, showResourceHeaders: { classPropertyName: "showResourceHeaders", publicName: "showResourceHeaders", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, showUnassignedAppointments: { classPropertyName: "showUnassignedAppointments", publicName: "showUnassignedAppointments", isSignal: true, isRequired: false, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null }, resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, resourceTemplate: { classPropertyName: "resourceTemplate", publicName: "resourceTemplate", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-month-wrapper\">\n <!-- Spanning appointments layer -->\n @if (spanningAppointments().length > 0) {\n <div class=\"ax-scheduler-timeline-month-spanning-layer\" [style.--timeline-days-count]=\"processedDayData().length\">\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n <div class=\"ax-scheduler-timeline-month-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-month-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-month-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [style.--spanning-rows-count]=\"maxSpanningRows()\"\n >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() &&\n shouldShowCurrentTimeForDay(dayData.date) &&\n getCurrentTimePosition() !== null\n ) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(segment.id)\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (\n segment of dayData.hiddenAppointments;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout with sticky resources -->\n <div class=\"ax-scheduler-timeline-month-resource-container\">\n <!-- Sticky header with resource placeholder and day headers -->\n @if (showResourceHeaders()) {\n <div class=\"ax-scheduler-timeline-month-header-sticky\">\n <div class=\"ax-scheduler-timeline-month-resource-header-placeholder\"><span>Resources</span></div>\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-month-day-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-month-header-date-day {{\n dayData.holiday?.state !== 'none' ? (dayData.holiday?.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday?.state === 'holiday' && dayData.holiday?.holiday?.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-month-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Resource rows with sticky resource headers -->\n <div class=\"ax-scheduler-timeline-month-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePosition() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-month-resource-row\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n @if (showResourceHeaders()) {\n <!-- Sticky Resource Header -->\n <div class=\"ax-scheduler-timeline-month-resource-header ax-scheduler-timeline-month-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <span class=\"ax-scheduler-timeline-month-resource-title\">{{ getResourceTitle(resourceId) }}</span>\n }\n </div>\n }\n\n <!-- Resource Content -->\n <div class=\"ax-scheduler-timeline-month-resource-content\">\n <!-- Spanning appointments layer for this resource -->\n @if (getSpanningAppointmentsForResource(resourceId).length > 0) {\n <div\n class=\"ax-scheduler-timeline-resource-spanning-layer\"\n [style.--timeline-days-count]=\"processedDayData().length\"\n >\n @for (spanning of getSpanningAppointmentsForResource(resourceId); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [attr.data-resource-id]=\"resourceId\"\n [style.--spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).visible;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [class.ax-state-active]=\"isActive(segment.id)\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n }\n </ax-subtitle>\n </div>\n }\n @if (getAppointmentsForResourceAndDay(resourceId, dayData).moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items'\n | translate\n : { params: { number: getAppointmentsForResourceAndDay(resourceId, dayData).moreCount } }\n | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).hidden;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n }\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";ax-scheduler-timeline-month-view{--ax-scheduler-timeline-spanning-row-height: 1.5rem;--ax-scheduler-timeline-spanning-gap: .125rem;height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-wrapper{height:100%;display:flex;flex-direction:column;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer{display:grid;position:absolute;top:4rem;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;pointer-events:none;align-content:start;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 31),var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2)))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;line-height:1rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-month-gap-height, .125rem);display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);min-height:2.5rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container{height:100%;display:flex;flex-direction:column;background-color:inherit;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-resource-header-placeholder{inset-inline-start:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding:.5rem;font-weight:500;font-size:.875rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header{flex:1;display:flex;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));min-width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;line-height:1rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row{border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;display:flex;min-height:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + var(--ax-comp-scheduler-timeline-month-row-base-height, 5rem))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));align-self:stretch}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header.ax-scheduler-timeline-month-resource-header-sticky{position:sticky;inset-inline-start:0;z-index:15;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header .ax-scheduler-timeline-month-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content{flex:1;display:flex;background-color:inherit;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer{display:grid;position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;align-content:start;pointer-events:none;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 31),var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2)))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content{display:flex;flex-direction:column;position:relative;background-color:inherit;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));min-width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);padding-bottom:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-month-gap-height, .125rem);display:flex;flex-direction:column;width:100%;padding-inline:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);flex-shrink:0;min-height:2.5rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem;flex-shrink:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-month-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-month-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-month-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-month-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2803
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerTimelineMonthViewComponent, isStandalone: true, selector: "ax-scheduler-timeline-month-view", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, showResourceHeaders: { classPropertyName: "showResourceHeaders", publicName: "showResourceHeaders", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, showUnassignedAppointments: { classPropertyName: "showUnassignedAppointments", publicName: "showUnassignedAppointments", isSignal: true, isRequired: false, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null }, resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, scrollToCurrentTimeIndicator: { classPropertyName: "scrollToCurrentTimeIndicator", publicName: "scrollToCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, resourceTemplate: { classPropertyName: "resourceTemplate", publicName: "resourceTemplate", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-month-wrapper\">\n <!-- Spanning appointments layer -->\n @if (spanningAppointments().length > 0) {\n <div class=\"ax-scheduler-timeline-month-spanning-layer\" [style.--timeline-days-count]=\"processedDayData().length\">\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n <div class=\"ax-scheduler-timeline-month-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-month-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-month-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [style.--spanning-rows-count]=\"maxSpanningRows()\"\n >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() &&\n shouldShowCurrentTimeForDay(dayData.date) &&\n getCurrentTimePosition() !== null\n ) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(segment.id)\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (\n segment of dayData.hiddenAppointments;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout with sticky resources -->\n <div class=\"ax-scheduler-timeline-month-resource-container\">\n <!-- Sticky header with resource placeholder and day headers -->\n @if (showResourceHeaders()) {\n <div class=\"ax-scheduler-timeline-month-header-sticky\">\n <div class=\"ax-scheduler-timeline-month-resource-header-placeholder\"><span>Resources</span></div>\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-month-day-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-month-header-date-day {{\n dayData.holiday?.state !== 'none' ? (dayData.holiday?.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday?.state === 'holiday' && dayData.holiday?.holiday?.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-month-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Resource rows with sticky resource headers -->\n <div class=\"ax-scheduler-timeline-month-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePosition() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-month-resource-row\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n @if (showResourceHeaders()) {\n <!-- Sticky Resource Header -->\n <div class=\"ax-scheduler-timeline-month-resource-header ax-scheduler-timeline-month-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <span class=\"ax-scheduler-timeline-month-resource-title\">{{ getResourceTitle(resourceId) }}</span>\n }\n </div>\n }\n\n <!-- Resource Content -->\n <div class=\"ax-scheduler-timeline-month-resource-content\">\n <!-- Spanning appointments layer for this resource -->\n @if (getSpanningAppointmentsForResource(resourceId).length > 0) {\n <div\n class=\"ax-scheduler-timeline-resource-spanning-layer\"\n [style.--timeline-days-count]=\"processedDayData().length\"\n >\n @for (spanning of getSpanningAppointmentsForResource(resourceId); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [attr.data-resource-id]=\"resourceId\"\n [style.--spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).visible;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [class.ax-state-active]=\"isActive(segment.id)\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n }\n </ax-subtitle>\n </div>\n }\n @if (getAppointmentsForResourceAndDay(resourceId, dayData).moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items'\n | translate\n : { params: { number: getAppointmentsForResourceAndDay(resourceId, dayData).moreCount } }\n | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).hidden;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n }\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";ax-scheduler-timeline-month-view{--ax-scheduler-timeline-spanning-row-height: 1.5rem;--ax-scheduler-timeline-spanning-gap: .125rem;height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-wrapper{height:100%;display:flex;flex-direction:column;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer{display:grid;position:absolute;top:4rem;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;pointer-events:none;align-content:start;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 31),var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2)))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;line-height:1rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-month-gap-height, .125rem);display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);min-height:2.5rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container{height:100%;display:flex;flex-direction:column;background-color:inherit;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-resource-header-placeholder{inset-inline-start:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding:.5rem;font-weight:500;font-size:.875rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header{flex:1;display:flex;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));min-width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;line-height:1rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row{border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;display:flex;min-height:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + var(--ax-comp-scheduler-timeline-month-row-base-height, 5rem))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));align-self:stretch}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header.ax-scheduler-timeline-month-resource-header-sticky{position:sticky;inset-inline-start:0;z-index:9;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header .ax-scheduler-timeline-month-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content{flex:1;display:flex;background-color:inherit;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer{display:grid;position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;align-content:start;pointer-events:none;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 31),var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2)))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content{display:flex;flex-direction:column;position:relative;background-color:inherit;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));min-width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);padding-bottom:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-month-gap-height, .125rem);display:flex;flex-direction:column;width:100%;padding-inline:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);flex-shrink:0;min-height:2.5rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem;flex-shrink:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-month-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-month-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-month-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-month-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2795
2804
|
}
|
|
2796
2805
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, decorators: [{
|
|
2797
2806
|
type: Component,
|
|
@@ -2808,7 +2817,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
2808
2817
|
AXDropZoneDirective,
|
|
2809
2818
|
AXDecoratorIconComponent,
|
|
2810
2819
|
AXDecoratorGenericComponent,
|
|
2811
|
-
], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-month-wrapper\">\n <!-- Spanning appointments layer -->\n @if (spanningAppointments().length > 0) {\n <div class=\"ax-scheduler-timeline-month-spanning-layer\" [style.--timeline-days-count]=\"processedDayData().length\">\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n <div class=\"ax-scheduler-timeline-month-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-month-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-month-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [style.--spanning-rows-count]=\"maxSpanningRows()\"\n >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() &&\n shouldShowCurrentTimeForDay(dayData.date) &&\n getCurrentTimePosition() !== null\n ) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(segment.id)\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (\n segment of dayData.hiddenAppointments;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout with sticky resources -->\n <div class=\"ax-scheduler-timeline-month-resource-container\">\n <!-- Sticky header with resource placeholder and day headers -->\n @if (showResourceHeaders()) {\n <div class=\"ax-scheduler-timeline-month-header-sticky\">\n <div class=\"ax-scheduler-timeline-month-resource-header-placeholder\"><span>Resources</span></div>\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-month-day-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-month-header-date-day {{\n dayData.holiday?.state !== 'none' ? (dayData.holiday?.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday?.state === 'holiday' && dayData.holiday?.holiday?.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-month-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Resource rows with sticky resource headers -->\n <div class=\"ax-scheduler-timeline-month-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePosition() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-month-resource-row\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n @if (showResourceHeaders()) {\n <!-- Sticky Resource Header -->\n <div class=\"ax-scheduler-timeline-month-resource-header ax-scheduler-timeline-month-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <span class=\"ax-scheduler-timeline-month-resource-title\">{{ getResourceTitle(resourceId) }}</span>\n }\n </div>\n }\n\n <!-- Resource Content -->\n <div class=\"ax-scheduler-timeline-month-resource-content\">\n <!-- Spanning appointments layer for this resource -->\n @if (getSpanningAppointmentsForResource(resourceId).length > 0) {\n <div\n class=\"ax-scheduler-timeline-resource-spanning-layer\"\n [style.--timeline-days-count]=\"processedDayData().length\"\n >\n @for (spanning of getSpanningAppointmentsForResource(resourceId); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [attr.data-resource-id]=\"resourceId\"\n [style.--spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).visible;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [class.ax-state-active]=\"isActive(segment.id)\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n }\n </ax-subtitle>\n </div>\n }\n @if (getAppointmentsForResourceAndDay(resourceId, dayData).moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items'\n | translate\n : { params: { number: getAppointmentsForResourceAndDay(resourceId, dayData).moreCount } }\n | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).hidden;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n }\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";ax-scheduler-timeline-month-view{--ax-scheduler-timeline-spanning-row-height: 1.5rem;--ax-scheduler-timeline-spanning-gap: .125rem;height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-wrapper{height:100%;display:flex;flex-direction:column;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer{display:grid;position:absolute;top:4rem;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;pointer-events:none;align-content:start;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 31),var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2)))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;line-height:1rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-month-gap-height, .125rem);display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);min-height:2.5rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container{height:100%;display:flex;flex-direction:column;background-color:inherit;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-resource-header-placeholder{inset-inline-start:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding:.5rem;font-weight:500;font-size:.875rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header{flex:1;display:flex;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));min-width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;line-height:1rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row{border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;display:flex;min-height:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + var(--ax-comp-scheduler-timeline-month-row-base-height, 5rem))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));align-self:stretch}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header.ax-scheduler-timeline-month-resource-header-sticky{position:sticky;inset-inline-start:0;z-index:15;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header .ax-scheduler-timeline-month-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content{flex:1;display:flex;background-color:inherit;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer{display:grid;position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;align-content:start;pointer-events:none;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 31),var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2)))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content{display:flex;flex-direction:column;position:relative;background-color:inherit;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));min-width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);padding-bottom:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-month-gap-height, .125rem);display:flex;flex-direction:column;width:100%;padding-inline:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);flex-shrink:0;min-height:2.5rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem;flex-shrink:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-month-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-month-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-month-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-month-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"] }]
|
|
2820
|
+
], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-month-wrapper\">\n <!-- Spanning appointments layer -->\n @if (spanningAppointments().length > 0) {\n <div class=\"ax-scheduler-timeline-month-spanning-layer\" [style.--timeline-days-count]=\"processedDayData().length\">\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n <div class=\"ax-scheduler-timeline-month-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-month-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-month-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [style.--spanning-rows-count]=\"maxSpanningRows()\"\n >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() &&\n shouldShowCurrentTimeForDay(dayData.date) &&\n getCurrentTimePosition() !== null\n ) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-state-active]=\"isActive(segment.id)\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (\n segment of dayData.hiddenAppointments;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout with sticky resources -->\n <div class=\"ax-scheduler-timeline-month-resource-container\">\n <!-- Sticky header with resource placeholder and day headers -->\n @if (showResourceHeaders()) {\n <div class=\"ax-scheduler-timeline-month-header-sticky\">\n <div class=\"ax-scheduler-timeline-month-resource-header-placeholder\"><span>Resources</span></div>\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-month-day-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-month-header-date-day {{\n dayData.holiday?.state !== 'none' ? (dayData.holiday?.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday?.state === 'holiday' && dayData.holiday?.holiday?.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-month-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Resource rows with sticky resource headers -->\n <div class=\"ax-scheduler-timeline-month-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePosition() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-month-resource-row\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n @if (showResourceHeaders()) {\n <!-- Sticky Resource Header -->\n <div class=\"ax-scheduler-timeline-month-resource-header ax-scheduler-timeline-month-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <span class=\"ax-scheduler-timeline-month-resource-title\">{{ getResourceTitle(resourceId) }}</span>\n }\n </div>\n }\n\n <!-- Resource Content -->\n <div class=\"ax-scheduler-timeline-month-resource-content\">\n <!-- Spanning appointments layer for this resource -->\n @if (getSpanningAppointmentsForResource(resourceId).length > 0) {\n <div\n class=\"ax-scheduler-timeline-resource-spanning-layer\"\n [style.--timeline-days-count]=\"processedDayData().length\"\n >\n @for (spanning of getSpanningAppointmentsForResource(resourceId); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [attr.data-resource-id]=\"resourceId\"\n [style.--spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).visible;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [class.ax-state-active]=\"isActive(segment.id)\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n }\n </ax-subtitle>\n </div>\n }\n @if (getAppointmentsForResourceAndDay(resourceId, dayData).moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items'\n | translate\n : { params: { number: getAppointmentsForResourceAndDay(resourceId, dayData).moreCount } }\n | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).hidden;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{\n segment.originalStartDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n -\n {{\n segment.originalEndDate\n | format: 'time' : { format: 'HH:mm', calendar: calendar() }\n | async\n }}\n }\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";ax-scheduler-timeline-month-view{--ax-scheduler-timeline-spanning-row-height: 1.5rem;--ax-scheduler-timeline-spanning-gap: .125rem;height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-wrapper{height:100%;display:flex;flex-direction:column;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer{display:grid;position:absolute;top:4rem;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;pointer-events:none;align-content:start;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 31),var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2)))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;line-height:1rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-month-gap-height, .125rem);display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);min-height:2.5rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container{height:100%;display:flex;flex-direction:column;background-color:inherit;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-resource-header-placeholder{inset-inline-start:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding:.5rem;font-weight:500;font-size:.875rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header{flex:1;display:flex;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));min-width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;line-height:1rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-header-sticky .ax-scheduler-timeline-month-day-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row{border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;display:flex;min-height:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + var(--ax-comp-scheduler-timeline-month-row-base-height, 5rem))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));align-self:stretch}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header.ax-scheduler-timeline-month-resource-header-sticky{position:sticky;inset-inline-start:0;z-index:9;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header .ax-scheduler-timeline-month-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content{flex:1;display:flex;background-color:inherit;position:relative}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer{display:grid;position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;align-content:start;pointer-events:none;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 31),var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2)))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content{display:flex;flex-direction:column;position:relative;background-color:inherit;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));min-width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);padding-bottom:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-month-gap-height, .125rem);display:flex;flex-direction:column;width:100%;padding-inline:.25rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);flex-shrink:0;min-height:2.5rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem;flex-shrink:0}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-resource-container .ax-scheduler-timeline-month-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-content .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-month-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-month-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-month-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-month-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"] }]
|
|
2812
2821
|
}] });
|
|
2813
2822
|
|
|
2814
2823
|
class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {
|
|
@@ -2829,6 +2838,7 @@ class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {
|
|
|
2829
2838
|
this.endDayHour = input.required(...(ngDevMode ? [{ debugName: "endDayHour" }] : []));
|
|
2830
2839
|
this.selectedAppointmentId = input(null, ...(ngDevMode ? [{ debugName: "selectedAppointmentId" }] : []));
|
|
2831
2840
|
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
|
2841
|
+
this.scrollToCurrentTimeIndicator = input(false, ...(ngDevMode ? [{ debugName: "scrollToCurrentTimeIndicator" }] : []));
|
|
2832
2842
|
this.startDayHour = input.required(...(ngDevMode ? [{ debugName: "startDayHour" }] : []));
|
|
2833
2843
|
this.showUnassignedAppointments = input(true, ...(ngDevMode ? [{ debugName: "showUnassignedAppointments" }] : []));
|
|
2834
2844
|
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : []));
|
|
@@ -3179,6 +3189,9 @@ class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {
|
|
|
3179
3189
|
this.resizeObserverCleanup?.();
|
|
3180
3190
|
}
|
|
3181
3191
|
setupCurrentTimeScroll() {
|
|
3192
|
+
if (!this.showCurrentTimeIndicator() || !this.scrollToCurrentTimeIndicator()) {
|
|
3193
|
+
return undefined;
|
|
3194
|
+
}
|
|
3182
3195
|
const now = this.calendarService.create(new Date(), this.calendar());
|
|
3183
3196
|
const multiViewStart = this.date();
|
|
3184
3197
|
const multiViewEnd = this.date().add('day', this.daysCount() - 1);
|
|
@@ -3372,7 +3385,7 @@ class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {
|
|
|
3372
3385
|
return { state: 'none' };
|
|
3373
3386
|
}
|
|
3374
3387
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
3375
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerTimelineMultiDayViewComponent, isStandalone: true, selector: "ax-scheduler-timeline-multi-day-view", inputs: { daysCount: { classPropertyName: "daysCount", publicName: "daysCount", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, showResourceHeaders: { classPropertyName: "showResourceHeaders", publicName: "showResourceHeaders", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: "endDayHour", publicName: "endDayHour", isSignal: true, isRequired: true, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, startDayHour: { classPropertyName: "startDayHour", publicName: "startDayHour", isSignal: true, isRequired: true, transformFunction: null }, showUnassignedAppointments: { classPropertyName: "showUnassignedAppointments", publicName: "showUnassignedAppointments", isSignal: true, isRequired: false, transformFunction: null }, resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, resourceTemplate: { classPropertyName: "resourceTemplate", publicName: "resourceTemplate", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-day-view-container\" [style.--spanning-rows-count]=\"maxSpanningRows()\">\n <!-- Spanning appointments layer -->\n @if (spanningAppointments().length > 0) {\n <div\n class=\"ax-scheduler-timeline-multi-day-spanning-layer\"\n [style.--timeline-days-count]=\"daysDataForTimelineViews().length\"\n >\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (click)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ' - ' +\n (spanning.appointment.endDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleSpanningActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-multi-day-column\">\n <div\n [class.ax-state-today]=\"isToday(daySlot.date)\"\n class=\"ax-scheduler-week-header-date-day {{\n daySlot.holiday.state !== 'none' ? (daySlot.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"daySlot.holiday.holiday?.title ?? ''\"\n >\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\n ( {{ daySlot.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-week-header-date-day-num\">\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n <ax-scheduler-timeline-day-view\n [date]=\"daySlot.date\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [resources]=\"resources()\"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [showResourceHeaders]=\"true\"\n [startDayHour]=\"startDayHour()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [appointments]=\"getFilteredAppointmentsForDay(daySlot.originalAppointmentsForThisDay)\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n (onActionClickInternal)=\"onActionClickInternal.emit($event)\"\n (slotClickedInternal)=\"slotClickedInternal.emit($event)\"\n (slotDblClickedInternal)=\"slotDblClickedInternal.emit($event)\"\n (slotRightClickedInternal)=\"slotRightClickedInternal.emit($event)\"\n (onAppointmentDropInternal)=\"handleDrop($event, undefined)\"\n (appointmentClickedInternal)=\"appointmentClickedInternal.emit($event)\"\n (appointmentDblClickedInternal)=\"appointmentDblClickedInternal.emit($event)\"\n (appointmentRightClickedInternal)=\"appointmentRightClickedInternal.emit($event)\"\n >\n </ax-scheduler-timeline-day-view>\n </div>\n }\n </div>\n} @else {\n <!-- Resource-based layout for multi-day -->\n <div\n class=\"ax-scheduler-timeline-multi-day-resource-container\"\n [style.--ax-comp-scheduler-hours-count]=\"getHoursCount()\"\n >\n <!-- Top header with day names -->\n <div class=\"ax-scheduler-timeline-multi-day-top-header\">\n <!-- Resource placeholder -->\n <div class=\"ax-scheduler-timeline-multi-day-resource-header-placeholder\"></div>\n <!-- Day headers -->\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-multi-day-day-header\">\n <div\n [class.ax-state-today]=\"isToday(daySlot.date)\"\n class=\"ax-scheduler-week-header-date-day {{\n daySlot.holiday.state !== 'none' ? (daySlot.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"daySlot.holiday.holiday?.title ?? ''\"\n >\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\n ( {{ daySlot.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-week-header-date-day-num\">\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n }\n </div>\n\n <!-- Time header with hours for each day -->\n <div class=\"ax-scheduler-timeline-multi-day-time-header\">\n <!-- Resource placeholder -->\n <div class=\"ax-scheduler-timeline-multi-day-time-header-placeholder\"><span>Resources</span></div>\n <!-- Time slots for each day -->\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-multi-day-day-time-slots\">\n @for (hour of getHoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-multi-day-time-slot\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Main content area -->\n <div class=\"ax-scheduler-timeline-multi-day-content\">\n <!-- Resource headers column -->\n <div class=\"ax-scheduler-timeline-multi-day-resource-headers\">\n <!-- Resource headers -->\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-multi-day-resource-header\"\n [style.height]=\"getResourceRowHeight(resourceId)\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <span class=\"ax-scheduler-timeline-resource-title\">{{ getResourceTitle(resourceId) }}</span>\n }\n </div>\n }\n </div>\n\n <!-- Days columns -->\n <div class=\"ax-scheduler-timeline-multi-day-days-container\" #daysContainer>\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime(); let dayIndex = $index) {\n <div class=\"ax-scheduler-timeline-multi-day-column\">\n <!-- Current Time Line Indicator for this day -->\n @if (\n showCurrentTimeIndicator() &&\n shouldShowCurrentTimeForDay(daySlot.date) &&\n getCurrentTimePosition() !== null\n ) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n <!-- Resource rows for this day -->\n <div class=\"ax-scheduler-timeline-multi-day-resource-rows\">\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-multi-day-resource-row\"\n [style.height]=\"getResourceRowHeight(resourceId)\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <!-- Spanning layer for this resource (only on first day column) -->\n @if (dayIndex === 0 && getSpanningAppointmentsForResource(resourceId).length > 0) {\n <div\n class=\"ax-scheduler-timeline-resource-spanning-layer\"\n [style.--timeline-days-count]=\"daysDataForTimelineViews().length\"\n >\n @for (spanning of getSpanningAppointmentsForResource(resourceId); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (click)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleSpanningActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n <ax-scheduler-timeline-day-view\n [date]=\"daySlot.date\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [resources]=\"\n resourceId === 'unassigned' ? [] : [{ id: resourceId, title: getResourceTitle(resourceId) }]\n \"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [showResourceHeaders]=\"false\"\n [startDayHour]=\"startDayHour()\"\n [showCurrentTimeIndicator]=\"false\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [showUnassignedAppointments]=\"resourceId === 'unassigned'\"\n [appointments]=\"\n getFilteredAppointmentsForDay(\n getAppointmentsForResourceAndDay(resourceId, daySlot.originalAppointmentsForThisDay)\n )\n \"\n (onActionClickInternal)=\"onActionClickInternal.emit($event)\"\n (slotClickedInternal)=\"slotClickedInternal.emit($event)\"\n (slotDblClickedInternal)=\"slotDblClickedInternal.emit($event)\"\n (slotRightClickedInternal)=\"slotRightClickedInternal.emit($event)\"\n (onAppointmentDropInternal)=\"handleDrop($event, resourceId)\"\n (appointmentClickedInternal)=\"appointmentClickedInternal.emit($event)\"\n (appointmentDblClickedInternal)=\"appointmentDblClickedInternal.emit($event)\"\n (appointmentRightClickedInternal)=\"appointmentRightClickedInternal.emit($event)\"\n >\n </ax-scheduler-timeline-day-view>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";ax-scheduler-timeline-multi-day-view{--ax-scheduler-timeline-spanning-row-height: 1.5rem;--ax-scheduler-timeline-spanning-gap: .125rem;background-color:inherit}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container{height:100%;display:flex;flex-direction:row;background-color:inherit;position:relative}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer{display:grid;position:absolute;top:4rem;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;pointer-events:none;align-content:start;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 7),calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16)))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container ax-scheduler-timeline-day-view{height:calc(100% - 4rem - var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) - .5rem);margin-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .5rem)}ax-scheduler-timeline-multi-day-view ax-scheduler-timeline-day-view{height:calc(100% - 4rem)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container{height:100%;display:flex;overflow:auto;flex-direction:column;background-color:inherit}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header{position:sticky;top:0;z-index:10;display:flex;flex-direction:row;min-width:max-content;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-resource-header-placeholder{width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);height:4rem;display:flex;align-items:center;justify-content:center;background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:sticky;inset-inline-start:0;z-index:15}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header{width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));min-width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));flex-shrink:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300;position:sticky;font-size:.75rem;inset-inline-start:calc(var(--ax-comp-scheduler-resource-header-width, 8rem) + 1rem)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;position:sticky;font-size:1.25rem;inset-inline-start:calc(var(--ax-comp-scheduler-resource-header-width, 8rem) + 1rem)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-time-header{top:4rem;z-index:10;display:flex;position:sticky;flex-direction:row;min-width:max-content;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-time-header .ax-scheduler-timeline-multi-day-time-header-placeholder{z-index:15;height:2rem;display:flex;position:sticky;align-items:center;inset-inline-start:0;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-time-header .ax-scheduler-timeline-multi-day-day-time-slots{width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));min-width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));height:2rem;display:flex;flex-direction:row;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));flex-shrink:0;background-color:inherit}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-time-header .ax-scheduler-timeline-multi-day-day-time-slots .ax-scheduler-timeline-multi-day-time-slot{display:flex;flex-shrink:0;position:relative;align-items:center;padding-inline:1rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);min-width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-time-header .ax-scheduler-timeline-multi-day-day-time-slots .ax-scheduler-timeline-multi-day-time-slot span{z-index:5;font-weight:400;position:sticky;font-size:.75rem;inset-inline-start:calc(var(--ax-comp-scheduler-resource-header-width, 8rem) + 1rem)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content{flex:1;display:flex;min-height:0;width:fit-content;flex-direction:row;background-color:inherit;align-items:stretch}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-resource-headers{z-index:15;display:flex;position:sticky;inset-inline-start:0;flex-direction:column;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-resource-headers .ax-scheduler-timeline-multi-day-resource-header{display:flex;align-items:center;justify-content:center;padding:.5rem;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));box-sizing:border-box}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-resource-headers .ax-scheduler-timeline-multi-day-resource-header .ax-scheduler-timeline-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container{flex:1;display:flex;flex-direction:row;min-width:max-content}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column{width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));min-width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));display:flex;flex-direction:column;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));flex-shrink:0;position:relative}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows{flex:1;display:flex;flex-direction:column}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row{border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative;box-sizing:border-box}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer{display:grid;position:absolute;top:0;inset-inline-start:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;align-content:start;pointer-events:none;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);width:calc(var(--timeline-days-count, 7) * var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));grid-template-columns:repeat(var(--timeline-days-count, 7),calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16)))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view{height:100%;width:100%;display:block}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{display:none}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-appointment-container{width:100%;position:absolute;top:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);height:calc(100% - var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) - .25rem)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-slot-row{height:100%;display:flex;position:relative;width:max-content;padding-top:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);box-sizing:border-box}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative;flex-shrink:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell:after{content:\"\";position:absolute;top:0;inset-inline-end:0;width:1px;height:100%;background-color:rgba(var(--ax-sys-color-border-lightest-surface),.3)}ax-scheduler-timeline-multi-day-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-multi-day-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXSchedulerTimelineDayViewComponent, selector: "ax-scheduler-timeline-day-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "endDayHour", "selectedAppointmentId", "startDayHour", "showUnassignedAppointments", "resources", "showCurrentTimeIndicator", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3388
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerTimelineMultiDayViewComponent, isStandalone: true, selector: "ax-scheduler-timeline-multi-day-view", inputs: { daysCount: { classPropertyName: "daysCount", publicName: "daysCount", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, showResourceHeaders: { classPropertyName: "showResourceHeaders", publicName: "showResourceHeaders", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: "endDayHour", publicName: "endDayHour", isSignal: true, isRequired: true, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, scrollToCurrentTimeIndicator: { classPropertyName: "scrollToCurrentTimeIndicator", publicName: "scrollToCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, startDayHour: { classPropertyName: "startDayHour", publicName: "startDayHour", isSignal: true, isRequired: true, transformFunction: null }, showUnassignedAppointments: { classPropertyName: "showUnassignedAppointments", publicName: "showUnassignedAppointments", isSignal: true, isRequired: false, transformFunction: null }, resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, resourceTemplate: { classPropertyName: "resourceTemplate", publicName: "resourceTemplate", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-day-view-container\" [style.--spanning-rows-count]=\"maxSpanningRows()\">\n <!-- Spanning appointments layer -->\n @if (spanningAppointments().length > 0) {\n <div\n class=\"ax-scheduler-timeline-multi-day-spanning-layer\"\n [style.--timeline-days-count]=\"daysDataForTimelineViews().length\"\n >\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (click)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ' - ' +\n (spanning.appointment.endDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleSpanningActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-multi-day-column\">\n <div\n [class.ax-state-today]=\"isToday(daySlot.date)\"\n class=\"ax-scheduler-week-header-date-day {{\n daySlot.holiday.state !== 'none' ? (daySlot.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"daySlot.holiday.holiday?.title ?? ''\"\n >\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\n ( {{ daySlot.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-week-header-date-day-num\">\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n <ax-scheduler-timeline-day-view\n [date]=\"daySlot.date\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [resources]=\"resources()\"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [showResourceHeaders]=\"true\"\n [startDayHour]=\"startDayHour()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [appointments]=\"getFilteredAppointmentsForDay(daySlot.originalAppointmentsForThisDay)\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n (onActionClickInternal)=\"onActionClickInternal.emit($event)\"\n (slotClickedInternal)=\"slotClickedInternal.emit($event)\"\n (slotDblClickedInternal)=\"slotDblClickedInternal.emit($event)\"\n (slotRightClickedInternal)=\"slotRightClickedInternal.emit($event)\"\n (onAppointmentDropInternal)=\"handleDrop($event, undefined)\"\n (appointmentClickedInternal)=\"appointmentClickedInternal.emit($event)\"\n (appointmentDblClickedInternal)=\"appointmentDblClickedInternal.emit($event)\"\n (appointmentRightClickedInternal)=\"appointmentRightClickedInternal.emit($event)\"\n >\n </ax-scheduler-timeline-day-view>\n </div>\n }\n </div>\n} @else {\n <!-- Resource-based layout for multi-day -->\n <div\n class=\"ax-scheduler-timeline-multi-day-resource-container\"\n [style.--ax-comp-scheduler-hours-count]=\"getHoursCount()\"\n >\n <!-- Top header with day names -->\n <div class=\"ax-scheduler-timeline-multi-day-top-header\">\n <!-- Resource placeholder -->\n <div class=\"ax-scheduler-timeline-multi-day-resource-header-placeholder\"></div>\n <!-- Day headers -->\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-multi-day-day-header\">\n <div\n [class.ax-state-today]=\"isToday(daySlot.date)\"\n class=\"ax-scheduler-week-header-date-day {{\n daySlot.holiday.state !== 'none' ? (daySlot.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"daySlot.holiday.holiday?.title ?? ''\"\n >\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\n ( {{ daySlot.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-week-header-date-day-num\">\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n }\n </div>\n\n <!-- Time header with hours for each day -->\n <div class=\"ax-scheduler-timeline-multi-day-time-header\">\n <!-- Resource placeholder -->\n <div class=\"ax-scheduler-timeline-multi-day-time-header-placeholder\"><span>Resources</span></div>\n <!-- Time slots for each day -->\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-multi-day-day-time-slots\">\n @for (hour of getHoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-multi-day-time-slot\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Main content area -->\n <div class=\"ax-scheduler-timeline-multi-day-content\">\n <!-- Resource headers column -->\n <div class=\"ax-scheduler-timeline-multi-day-resource-headers\">\n <!-- Resource headers -->\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-multi-day-resource-header\"\n [style.height]=\"getResourceRowHeight(resourceId)\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <span class=\"ax-scheduler-timeline-resource-title\">{{ getResourceTitle(resourceId) }}</span>\n }\n </div>\n }\n </div>\n\n <!-- Days columns -->\n <div class=\"ax-scheduler-timeline-multi-day-days-container\" #daysContainer>\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime(); let dayIndex = $index) {\n <div class=\"ax-scheduler-timeline-multi-day-column\">\n <!-- Current Time Line Indicator for this day -->\n @if (\n showCurrentTimeIndicator() &&\n shouldShowCurrentTimeForDay(daySlot.date) &&\n getCurrentTimePosition() !== null\n ) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n <!-- Resource rows for this day -->\n <div class=\"ax-scheduler-timeline-multi-day-resource-rows\">\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-multi-day-resource-row\"\n [style.height]=\"getResourceRowHeight(resourceId)\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <!-- Spanning layer for this resource (only on first day column) -->\n @if (dayIndex === 0 && getSpanningAppointmentsForResource(resourceId).length > 0) {\n <div\n class=\"ax-scheduler-timeline-resource-spanning-layer\"\n [style.--timeline-days-count]=\"daysDataForTimelineViews().length\"\n >\n @for (spanning of getSpanningAppointmentsForResource(resourceId); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (click)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleSpanningAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleSpanningActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n <ax-scheduler-timeline-day-view\n [date]=\"daySlot.date\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [resources]=\"\n resourceId === 'unassigned' ? [] : [{ id: resourceId, title: getResourceTitle(resourceId) }]\n \"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [showResourceHeaders]=\"false\"\n [startDayHour]=\"startDayHour()\"\n [showCurrentTimeIndicator]=\"false\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [showUnassignedAppointments]=\"resourceId === 'unassigned'\"\n [appointments]=\"\n getFilteredAppointmentsForDay(\n getAppointmentsForResourceAndDay(resourceId, daySlot.originalAppointmentsForThisDay)\n )\n \"\n (onActionClickInternal)=\"onActionClickInternal.emit($event)\"\n (slotClickedInternal)=\"slotClickedInternal.emit($event)\"\n (slotDblClickedInternal)=\"slotDblClickedInternal.emit($event)\"\n (slotRightClickedInternal)=\"slotRightClickedInternal.emit($event)\"\n (onAppointmentDropInternal)=\"handleDrop($event, resourceId)\"\n (appointmentClickedInternal)=\"appointmentClickedInternal.emit($event)\"\n (appointmentDblClickedInternal)=\"appointmentDblClickedInternal.emit($event)\"\n (appointmentRightClickedInternal)=\"appointmentRightClickedInternal.emit($event)\"\n >\n </ax-scheduler-timeline-day-view>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";ax-scheduler-timeline-multi-day-view{--ax-scheduler-timeline-spanning-row-height: 1.5rem;--ax-scheduler-timeline-spanning-gap: .125rem;background-color:inherit}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container{height:100%;display:flex;flex-direction:row;background-color:inherit;position:relative}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer{display:grid;position:absolute;top:4rem;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;pointer-events:none;align-content:start;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 7),calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16)))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-timeline-multi-day-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container ax-scheduler-timeline-day-view{height:calc(100% - 4rem - var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) - .5rem);margin-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .5rem)}ax-scheduler-timeline-multi-day-view ax-scheduler-timeline-day-view{height:calc(100% - 4rem)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container{height:100%;display:flex;overflow:auto;flex-direction:column;background-color:inherit}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header{position:sticky;top:0;z-index:10;display:flex;flex-direction:row;min-width:max-content;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-resource-header-placeholder{width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);height:4rem;display:flex;align-items:center;justify-content:center;background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:sticky;inset-inline-start:0;z-index:15}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header{width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));min-width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));flex-shrink:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300;position:sticky;font-size:.75rem;inset-inline-start:calc(var(--ax-comp-scheduler-resource-header-width, 8rem) + 1rem)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-top-header .ax-scheduler-timeline-multi-day-day-header .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;position:sticky;font-size:1.25rem;inset-inline-start:calc(var(--ax-comp-scheduler-resource-header-width, 8rem) + 1rem)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-time-header{top:4rem;z-index:10;display:flex;position:sticky;flex-direction:row;min-width:max-content;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-time-header .ax-scheduler-timeline-multi-day-time-header-placeholder{z-index:15;height:2rem;display:flex;position:sticky;align-items:center;inset-inline-start:0;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-time-header .ax-scheduler-timeline-multi-day-day-time-slots{width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));min-width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));height:2rem;display:flex;flex-direction:row;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));flex-shrink:0;background-color:inherit}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-time-header .ax-scheduler-timeline-multi-day-day-time-slots .ax-scheduler-timeline-multi-day-time-slot{display:flex;flex-shrink:0;position:relative;align-items:center;padding-inline:1rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);min-width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-time-header .ax-scheduler-timeline-multi-day-day-time-slots .ax-scheduler-timeline-multi-day-time-slot span{z-index:5;font-weight:400;position:sticky;font-size:.75rem;inset-inline-start:calc(var(--ax-comp-scheduler-resource-header-width, 8rem) + 1rem)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content{flex:1;display:flex;min-height:0;width:fit-content;flex-direction:row;background-color:inherit;align-items:stretch}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-resource-headers{z-index:15;display:flex;position:sticky;inset-inline-start:0;flex-direction:column;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-resource-headers .ax-scheduler-timeline-multi-day-resource-header{display:flex;align-items:center;justify-content:center;padding:.5rem;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));box-sizing:border-box}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-resource-headers .ax-scheduler-timeline-multi-day-resource-header .ax-scheduler-timeline-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container{flex:1;display:flex;flex-direction:row;min-width:max-content}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column{width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));min-width:calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));display:flex;flex-direction:column;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));flex-shrink:0;position:relative}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows{flex:1;display:flex;flex-direction:column}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row{border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative;box-sizing:border-box}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer{display:grid;position:absolute;top:0;inset-inline-start:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;align-content:start;pointer-events:none;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);width:calc(var(--timeline-days-count, 7) * var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16));grid-template-columns:repeat(var(--timeline-days-count, 7),calc(var(--ax-comp-scheduler-timeline-view-blocks-width) * var(--ax-comp-scheduler-hours-count, 16)))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view{height:100%;width:100%;display:block}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{display:none}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-appointment-container{width:100%;position:absolute;top:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);height:calc(100% - var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) - .25rem)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-slot-row{height:100%;display:flex;position:relative;width:max-content;padding-top:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);box-sizing:border-box}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative;flex-shrink:0}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-multi-day-resource-container .ax-scheduler-timeline-multi-day-content .ax-scheduler-timeline-multi-day-days-container .ax-scheduler-timeline-multi-day-column .ax-scheduler-timeline-multi-day-resource-rows .ax-scheduler-timeline-multi-day-resource-row ax-scheduler-timeline-day-view .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell:after{content:\"\";position:absolute;top:0;inset-inline-end:0;width:1px;height:100%;background-color:rgba(var(--ax-sys-color-border-lightest-surface),.3)}ax-scheduler-timeline-multi-day-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-multi-day-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXSchedulerTimelineDayViewComponent, selector: "ax-scheduler-timeline-day-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "endDayHour", "selectedAppointmentId", "startDayHour", "showUnassignedAppointments", "resources", "showCurrentTimeIndicator", "scrollToCurrentTimeIndicator", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3376
3389
|
}
|
|
3377
3390
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, decorators: [{
|
|
3378
3391
|
type: Component,
|
|
@@ -3512,6 +3525,7 @@ class AXSchedulerTimelineYearViewComponent extends NXComponent {
|
|
|
3512
3525
|
this.selectedAppointmentId = input(null, ...(ngDevMode ? [{ debugName: "selectedAppointmentId" }] : []));
|
|
3513
3526
|
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : []));
|
|
3514
3527
|
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
|
3528
|
+
this.scrollToCurrentTimeIndicator = input(false, ...(ngDevMode ? [{ debugName: "scrollToCurrentTimeIndicator" }] : []));
|
|
3515
3529
|
this.resourceTemplate = input(...(ngDevMode ? [undefined, { debugName: "resourceTemplate" }] : []));
|
|
3516
3530
|
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
|
3517
3531
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
|
@@ -3720,6 +3734,9 @@ class AXSchedulerTimelineYearViewComponent extends NXComponent {
|
|
|
3720
3734
|
this.resizeObserverCleanup?.();
|
|
3721
3735
|
}
|
|
3722
3736
|
setupCurrentTimeScroll() {
|
|
3737
|
+
if (!this.showCurrentTimeIndicator() || !this.scrollToCurrentTimeIndicator()) {
|
|
3738
|
+
return undefined;
|
|
3739
|
+
}
|
|
3723
3740
|
const currentPosition = this.getCurrentTimePosition();
|
|
3724
3741
|
if (currentPosition === null) {
|
|
3725
3742
|
return undefined;
|
|
@@ -3816,7 +3833,7 @@ class AXSchedulerTimelineYearViewComponent extends NXComponent {
|
|
|
3816
3833
|
this.dragStartSlotResourceId.set(dropListElement ? dropListElement.dataset['resourceId'] : null);
|
|
3817
3834
|
}
|
|
3818
3835
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineYearViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
3819
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerTimelineYearViewComponent, isStandalone: true, selector: "ax-scheduler-timeline-year-view", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, showResourceHeaders: { classPropertyName: "showResourceHeaders", publicName: "showResourceHeaders", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, showUnassignedAppointments: { classPropertyName: "showUnassignedAppointments", publicName: "showUnassignedAppointments", isSignal: true, isRequired: false, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null }, resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, resourceTemplate: { classPropertyName: "resourceTemplate", publicName: "resourceTemplate", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineYearViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-year-wrapper\">\n <!-- Spanning appointments layer -->\n @if (spanningAppointments().length > 0) {\n <div class=\"ax-scheduler-timeline-year-spanning-layer\" [style.--timeline-days-count]=\"processedDayData().length\">\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n <div class=\"ax-scheduler-timeline-year-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-year-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-year-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'MMMM', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-year-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [style.pointer-events]=\"draggable() ? 'auto' : 'none'\"\n [style.--spanning-rows-count]=\"maxSpanningRows()\"\n >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() &&\n shouldShowCurrentTimeForDay(dayData.date) &&\n getCurrentTimePosition() !== null\n ) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n </div>\n }\n\n <!-- Overflow Badge and Popover -->\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-year-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-timeline-year-popover-appointment\"\n >\n @for (\n segment of dayData.hiddenAppointments;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout -->\n <div class=\"ax-scheduler-timeline-year-resource-container\">\n <div class=\"ax-scheduler-timeline-year-header-sticky\">\n <div class=\"ax-scheduler-timeline-year-resource-header-placeholder\">\n <span>Resources</span>\n </div>\n\n <div class=\"ax-scheduler-timeline-year-day-header\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-year-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-year-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'MMMM', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-year-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n }\n </div>\n </div>\n\n <div class=\"ax-scheduler-timeline-year-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePosition() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-year-resource-row\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-year-resource-header ax-scheduler-timeline-year-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <div class=\"ax-scheduler-timeline-year-resource-title\">\n {{ getResourceTitle(resourceId) | translate | async }}\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-timeline-year-resource-content\">\n <!-- Spanning appointments layer for this resource -->\n @if (getSpanningAppointmentsForResource(resourceId).length > 0) {\n <div\n class=\"ax-scheduler-timeline-resource-spanning-layer\"\n [style.--timeline-days-count]=\"processedDayData().length\"\n >\n @for (spanning of getSpanningAppointmentsForResource(resourceId); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-year-slot-row\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [attr.data-resource-id]=\"resourceId\"\n [style.pointer-events]=\"draggable() ? 'auto' : 'none'\"\n [style.--spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).visible;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n }\n </span>\n </div>\n }\n\n <!-- Overflow Badge and Popover -->\n @if (getAppointmentsForResourceAndDay(resourceId, dayData).moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-year-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items'\n | translate\n : { params: { number: getAppointmentsForResourceAndDay(resourceId, dayData).moreCount } }\n | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-timeline-year-popover-appointment\"\n >\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).hidden;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n @if (!segment.allDay) {\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (\n !segment.allDay &&\n segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()\n ) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n }\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";ax-scheduler-timeline-year-view{--ax-scheduler-timeline-spanning-row-height: 1.5rem;--ax-scheduler-timeline-spanning-gap: .125rem;height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit;--ax-comp-scheduler-timeline-year-view-blocks-width: calc( var(--ax-comp-scheduler-timeline-view-blocks-width) / 2 )}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-wrapper{height:100%;display:flex;flex-direction:column;position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer{display:grid;position:absolute;top:4rem;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;pointer-events:none;align-content:start;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 365),var(--ax-comp-scheduler-timeline-year-view-blocks-width))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.7rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container{height:100%;display:flex;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-char{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-num{font-weight:700}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-char{max-width:100%;position:sticky;font-weight:300;font-size:.75rem;line-height:.875rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;gap:.125rem;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);font-size:.75rem;line-height:.875rem;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment ax-title{font-weight:600}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge{cursor:pointer;text-align:left;font-size:.7rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container{height:100%;display:flex;flex-direction:column;background-color:inherit;will-change:transform;transform:translateZ(0);position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-resource-header-placeholder{inset-inline-start:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding:.5rem;font-weight:500;font-size:.875rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header{flex:1;display:flex;background-color:inherit;overflow-x:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);min-width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-char{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-num{font-weight:700}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-char{max-width:100%;position:sticky;font-weight:300;font-size:.75rem;line-height:.875rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row{border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;display:flex;min-height:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + var(--ax-comp-scheduler-timeline-year-row-base-height, 4rem))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));align-self:stretch}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header.ax-scheduler-timeline-year-resource-header-sticky{position:sticky;inset-inline-start:0;z-index:15;background-color:inherit}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header .ax-scheduler-timeline-year-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content{flex:1;display:flex;background-color:inherit;position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer{display:grid;position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;align-content:start;pointer-events:none;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 365),var(--ax-comp-scheduler-timeline-year-view-blocks-width))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.7rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row{display:flex;flex-direction:column;position:relative;background-color:inherit;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);min-width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);padding-bottom:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-year-gap-height, .125rem);display:flex;flex-direction:column;width:100%;padding-inline:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container ax-popover{display:none}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;gap:.125rem;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);flex-shrink:0;font-size:.75rem;line-height:.875rem;min-height:2rem;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment ax-title{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge{cursor:pointer;text-align:left;font-size:.7rem;padding:.125rem 0;margin-top:.125rem;flex-shrink:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-content,ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-year-slot-row{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover,ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-year-slot-row:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-year-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-year-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment{font-size:.75rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);margin-bottom:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment:last-child{margin-bottom:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment .ax-appointment-chip-title{font-size:.8rem;margin-bottom:.125rem;font-weight:600}ax-scheduler-timeline-year-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-year-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3836
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerTimelineYearViewComponent, isStandalone: true, selector: "ax-scheduler-timeline-year-view", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, showResourceHeaders: { classPropertyName: "showResourceHeaders", publicName: "showResourceHeaders", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, showUnassignedAppointments: { classPropertyName: "showUnassignedAppointments", publicName: "showUnassignedAppointments", isSignal: true, isRequired: false, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null }, resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, scrollToCurrentTimeIndicator: { classPropertyName: "scrollToCurrentTimeIndicator", publicName: "scrollToCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, resourceTemplate: { classPropertyName: "resourceTemplate", publicName: "resourceTemplate", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineYearViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-year-wrapper\">\n <!-- Spanning appointments layer -->\n @if (spanningAppointments().length > 0) {\n <div class=\"ax-scheduler-timeline-year-spanning-layer\" [style.--timeline-days-count]=\"processedDayData().length\">\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n <div class=\"ax-scheduler-timeline-year-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-year-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-year-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'MMMM', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-year-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [style.pointer-events]=\"draggable() ? 'auto' : 'none'\"\n [style.--spanning-rows-count]=\"maxSpanningRows()\"\n >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() &&\n shouldShowCurrentTimeForDay(dayData.date) &&\n getCurrentTimePosition() !== null\n ) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n </div>\n }\n\n <!-- Overflow Badge and Popover -->\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-year-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-timeline-year-popover-appointment\"\n >\n @for (\n segment of dayData.hiddenAppointments;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout -->\n <div class=\"ax-scheduler-timeline-year-resource-container\">\n <div class=\"ax-scheduler-timeline-year-header-sticky\">\n <div class=\"ax-scheduler-timeline-year-resource-header-placeholder\">\n <span>Resources</span>\n </div>\n\n <div class=\"ax-scheduler-timeline-year-day-header\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-year-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-year-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'MMMM', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-year-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n }\n </div>\n </div>\n\n <div class=\"ax-scheduler-timeline-year-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePosition() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-year-resource-row\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-year-resource-header ax-scheduler-timeline-year-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <div class=\"ax-scheduler-timeline-year-resource-title\">\n {{ getResourceTitle(resourceId) | translate | async }}\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-timeline-year-resource-content\">\n <!-- Spanning appointments layer for this resource -->\n @if (getSpanningAppointmentsForResource(resourceId).length > 0) {\n <div\n class=\"ax-scheduler-timeline-resource-spanning-layer\"\n [style.--timeline-days-count]=\"processedDayData().length\"\n >\n @for (spanning of getSpanningAppointmentsForResource(resourceId); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-year-slot-row\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [attr.data-resource-id]=\"resourceId\"\n [style.pointer-events]=\"draggable() ? 'auto' : 'none'\"\n [style.--spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).visible;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n }\n </span>\n </div>\n }\n\n <!-- Overflow Badge and Popover -->\n @if (getAppointmentsForResourceAndDay(resourceId, dayData).moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-year-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items'\n | translate\n : { params: { number: getAppointmentsForResourceAndDay(resourceId, dayData).moreCount } }\n | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-timeline-year-popover-appointment\"\n >\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).hidden;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n @if (!segment.allDay) {\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (\n !segment.allDay &&\n segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()\n ) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n }\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";ax-scheduler-timeline-year-view{--ax-scheduler-timeline-spanning-row-height: 1.5rem;--ax-scheduler-timeline-spanning-gap: .125rem;height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit;--ax-comp-scheduler-timeline-year-view-blocks-width: calc( var(--ax-comp-scheduler-timeline-view-blocks-width) / 2 )}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-wrapper{height:100%;display:flex;flex-direction:column;position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer{display:grid;position:absolute;top:4rem;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;pointer-events:none;align-content:start;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 365),var(--ax-comp-scheduler-timeline-year-view-blocks-width))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.7rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container{height:100%;display:flex;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-char{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-num{font-weight:700}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-char{max-width:100%;position:sticky;font-weight:300;font-size:.75rem;line-height:.875rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;gap:.125rem;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);font-size:.75rem;line-height:.875rem;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment ax-title{font-weight:600}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge{cursor:pointer;text-align:left;font-size:.7rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container{height:100%;display:flex;flex-direction:column;background-color:inherit;will-change:transform;transform:translateZ(0);position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-resource-header-placeholder{inset-inline-start:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding:.5rem;font-weight:500;font-size:.875rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header{flex:1;display:flex;background-color:inherit;overflow-x:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);min-width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-char{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-num{font-weight:700}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-char{max-width:100%;position:sticky;font-weight:300;font-size:.75rem;line-height:.875rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row{border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;display:flex;min-height:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + var(--ax-comp-scheduler-timeline-year-row-base-height, 4rem))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));align-self:stretch}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header.ax-scheduler-timeline-year-resource-header-sticky{position:sticky;inset-inline-start:0;z-index:9;background-color:inherit}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header .ax-scheduler-timeline-year-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content{flex:1;display:flex;background-color:inherit;position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer{display:grid;position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;align-content:start;pointer-events:none;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 365),var(--ax-comp-scheduler-timeline-year-view-blocks-width))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.7rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row{display:flex;flex-direction:column;position:relative;background-color:inherit;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);min-width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);padding-bottom:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-year-gap-height, .125rem);display:flex;flex-direction:column;width:100%;padding-inline:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container ax-popover{display:none}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;gap:.125rem;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);flex-shrink:0;font-size:.75rem;line-height:.875rem;min-height:2rem;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment ax-title{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge{cursor:pointer;text-align:left;font-size:.7rem;padding:.125rem 0;margin-top:.125rem;flex-shrink:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-content,ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-year-slot-row{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover,ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-year-slot-row:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-year-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-year-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment{font-size:.75rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);margin-bottom:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment:last-child{margin-bottom:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment .ax-appointment-chip-title{font-size:.8rem;margin-bottom:.125rem;font-weight:600}ax-scheduler-timeline-year-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-year-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
3820
3837
|
}
|
|
3821
3838
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineYearViewComponent, decorators: [{
|
|
3822
3839
|
type: Component,
|
|
@@ -3833,7 +3850,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
3833
3850
|
AXDropZoneDirective,
|
|
3834
3851
|
AXDecoratorIconComponent,
|
|
3835
3852
|
AXDecoratorGenericComponent,
|
|
3836
|
-
], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineYearViewComponent }], template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-year-wrapper\">\n <!-- Spanning appointments layer -->\n @if (spanningAppointments().length > 0) {\n <div class=\"ax-scheduler-timeline-year-spanning-layer\" [style.--timeline-days-count]=\"processedDayData().length\">\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n <div class=\"ax-scheduler-timeline-year-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-year-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-year-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'MMMM', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-year-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [style.pointer-events]=\"draggable() ? 'auto' : 'none'\"\n [style.--spanning-rows-count]=\"maxSpanningRows()\"\n >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() &&\n shouldShowCurrentTimeForDay(dayData.date) &&\n getCurrentTimePosition() !== null\n ) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n </div>\n }\n\n <!-- Overflow Badge and Popover -->\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-year-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-timeline-year-popover-appointment\"\n >\n @for (\n segment of dayData.hiddenAppointments;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout -->\n <div class=\"ax-scheduler-timeline-year-resource-container\">\n <div class=\"ax-scheduler-timeline-year-header-sticky\">\n <div class=\"ax-scheduler-timeline-year-resource-header-placeholder\">\n <span>Resources</span>\n </div>\n\n <div class=\"ax-scheduler-timeline-year-day-header\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-year-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-year-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'MMMM', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-year-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n }\n </div>\n </div>\n\n <div class=\"ax-scheduler-timeline-year-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePosition() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-year-resource-row\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-year-resource-header ax-scheduler-timeline-year-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <div class=\"ax-scheduler-timeline-year-resource-title\">\n {{ getResourceTitle(resourceId) | translate | async }}\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-timeline-year-resource-content\">\n <!-- Spanning appointments layer for this resource -->\n @if (getSpanningAppointmentsForResource(resourceId).length > 0) {\n <div\n class=\"ax-scheduler-timeline-resource-spanning-layer\"\n [style.--timeline-days-count]=\"processedDayData().length\"\n >\n @for (spanning of getSpanningAppointmentsForResource(resourceId); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-year-slot-row\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [attr.data-resource-id]=\"resourceId\"\n [style.pointer-events]=\"draggable() ? 'auto' : 'none'\"\n [style.--spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).visible;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n }\n </span>\n </div>\n }\n\n <!-- Overflow Badge and Popover -->\n @if (getAppointmentsForResourceAndDay(resourceId, dayData).moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-year-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items'\n | translate\n : { params: { number: getAppointmentsForResourceAndDay(resourceId, dayData).moreCount } }\n | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-timeline-year-popover-appointment\"\n >\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).hidden;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n @if (!segment.allDay) {\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (\n !segment.allDay &&\n segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()\n ) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n }\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";ax-scheduler-timeline-year-view{--ax-scheduler-timeline-spanning-row-height: 1.5rem;--ax-scheduler-timeline-spanning-gap: .125rem;height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit;--ax-comp-scheduler-timeline-year-view-blocks-width: calc( var(--ax-comp-scheduler-timeline-view-blocks-width) / 2 )}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-wrapper{height:100%;display:flex;flex-direction:column;position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer{display:grid;position:absolute;top:4rem;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;pointer-events:none;align-content:start;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 365),var(--ax-comp-scheduler-timeline-year-view-blocks-width))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.7rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container{height:100%;display:flex;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-char{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-num{font-weight:700}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-char{max-width:100%;position:sticky;font-weight:300;font-size:.75rem;line-height:.875rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;gap:.125rem;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);font-size:.75rem;line-height:.875rem;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment ax-title{font-weight:600}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge{cursor:pointer;text-align:left;font-size:.7rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container{height:100%;display:flex;flex-direction:column;background-color:inherit;will-change:transform;transform:translateZ(0);position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-resource-header-placeholder{inset-inline-start:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding:.5rem;font-weight:500;font-size:.875rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header{flex:1;display:flex;background-color:inherit;overflow-x:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);min-width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-char{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-num{font-weight:700}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-char{max-width:100%;position:sticky;font-weight:300;font-size:.75rem;line-height:.875rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row{border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;display:flex;min-height:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + var(--ax-comp-scheduler-timeline-year-row-base-height, 4rem))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));align-self:stretch}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header.ax-scheduler-timeline-year-resource-header-sticky{position:sticky;inset-inline-start:0;z-index:15;background-color:inherit}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header .ax-scheduler-timeline-year-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content{flex:1;display:flex;background-color:inherit;position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer{display:grid;position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;align-content:start;pointer-events:none;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 365),var(--ax-comp-scheduler-timeline-year-view-blocks-width))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.7rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row{display:flex;flex-direction:column;position:relative;background-color:inherit;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);min-width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);padding-bottom:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-year-gap-height, .125rem);display:flex;flex-direction:column;width:100%;padding-inline:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container ax-popover{display:none}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;gap:.125rem;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);flex-shrink:0;font-size:.75rem;line-height:.875rem;min-height:2rem;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment ax-title{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge{cursor:pointer;text-align:left;font-size:.7rem;padding:.125rem 0;margin-top:.125rem;flex-shrink:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-content,ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-year-slot-row{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover,ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-year-slot-row:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-year-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-year-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment{font-size:.75rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);margin-bottom:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment:last-child{margin-bottom:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment .ax-appointment-chip-title{font-size:.8rem;margin-bottom:.125rem;font-weight:600}ax-scheduler-timeline-year-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-year-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"] }]
|
|
3853
|
+
], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineYearViewComponent }], template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-year-wrapper\">\n <!-- Spanning appointments layer -->\n @if (spanningAppointments().length > 0) {\n <div class=\"ax-scheduler-timeline-year-spanning-layer\" [style.--timeline-days-count]=\"processedDayData().length\">\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n <div class=\"ax-scheduler-timeline-year-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-year-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-year-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'MMMM', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-year-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [style.pointer-events]=\"draggable() ? 'auto' : 'none'\"\n [style.--spanning-rows-count]=\"maxSpanningRows()\"\n >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() &&\n shouldShowCurrentTimeForDay(dayData.date) &&\n getCurrentTimePosition() !== null\n ) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n </div>\n }\n\n <!-- Overflow Badge and Popover -->\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-year-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-timeline-year-popover-appointment\"\n >\n @for (\n segment of dayData.hiddenAppointments;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n} @else {\n <!-- Resource-based layout -->\n <div class=\"ax-scheduler-timeline-year-resource-container\">\n <div class=\"ax-scheduler-timeline-year-header-sticky\">\n <div class=\"ax-scheduler-timeline-year-resource-header-placeholder\">\n <span>Resources</span>\n </div>\n\n <div class=\"ax-scheduler-timeline-year-day-header\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-year-header-date-day {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-year-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'MMMM', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-year-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n }\n </div>\n </div>\n\n <div class=\"ax-scheduler-timeline-year-resource-rows\">\n <!-- Current Time Line Indicator -->\n @if (showCurrentTimeIndicator() && getCurrentTimePosition() !== null) {\n <div\n class=\"ax-scheduler-current-time-line\"\n [style.inset-inline-start.%]=\"getCurrentTimePosition()\"\n #currentTimeLine\n ></div>\n }\n\n @for (resourceId of resourceIds(); track resourceId) {\n <div\n class=\"ax-scheduler-timeline-year-resource-row\"\n [style.--resource-spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-year-resource-header ax-scheduler-timeline-year-resource-header-sticky\">\n @if (resourceTemplate() && typeof resourceTemplate() !== 'string') {\n <ng-container\n [ngTemplateOutlet]=\"$any(resourceTemplate())\"\n [ngTemplateOutletContext]=\"{\n $implicit: getResourceContext(resourceId),\n resource: getResourceContext(resourceId),\n resourceId: resourceId,\n }\"\n ></ng-container>\n } @else {\n <div class=\"ax-scheduler-timeline-year-resource-title\">\n {{ getResourceTitle(resourceId) | translate | async }}\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-timeline-year-resource-content\">\n <!-- Spanning appointments layer for this resource -->\n @if (getSpanningAppointmentsForResource(resourceId).length > 0) {\n <div\n class=\"ax-scheduler-timeline-resource-spanning-layer\"\n [style.--timeline-days-count]=\"processedDayData().length\"\n >\n @for (spanning of getSpanningAppointmentsForResource(resourceId); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-spanning-appointment {{\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n }}\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.grid-row]=\"spanning.rowIndex + 1\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date, resourceId)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-year-slot-row\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n [attr.data-slot-id]=\"dayData.date.format('YYYYMMDD')\"\n [attr.data-resource-id]=\"resourceId\"\n [style.pointer-events]=\"draggable() ? 'auto' : 'none'\"\n [style.--spanning-rows-count]=\"getMaxSpanningRowsForResource(resourceId)\"\n >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).visible;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragData]=\"segment\"\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-timeline-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n <span class=\"ax-scheduler-timeline-appointment-time\">\n @if (segment.allDay) {\n {{\n segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{\n segment.originalEndDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async\n }}\n }\n } @else {\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n }\n </span>\n </div>\n }\n\n <!-- Overflow Badge and Popover -->\n @if (getAppointmentsForResourceAndDay(resourceId, dayData).moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-year-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{\n '@acorex:common.general.more-items'\n | translate\n : { params: { number: getAppointmentsForResourceAndDay(resourceId, dayData).moreCount } }\n | async\n }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n axDropZone\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-scheduler-popover ax-scheduler-timeline-year-popover-appointment\"\n >\n @for (\n segment of getAppointmentsForResourceAndDay(resourceId, dayData).hidden;\n track segment.id + segment.originalStartDate.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"optimizedDragStartDelay()\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : segment.allDay\n ? segment.title\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n class=\"ax-scheduler-popover-appointment {{\n segment.cssClass ?? 'ax-scheduler-' + (segment.priority ?? 'primary') + '-priority'\n }}\"\n [class.all-day-segment]=\"segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, segment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n >\n </ax-icon>\n }\n </ax-title>\n @if (!segment.allDay) {\n <span class=\"ax-scheduler-timeline-appointment-time\">\n {{ segment.originalStartDate | format: 'time' : { calendar: calendar() } | async }}\n @if (\n !segment.allDay &&\n segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()\n ) {\n -\n {{ segment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\n }\n </span>\n }\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["@charset \"UTF-8\";ax-scheduler-timeline-year-view{--ax-scheduler-timeline-spanning-row-height: 1.5rem;--ax-scheduler-timeline-spanning-gap: .125rem;height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit;--ax-comp-scheduler-timeline-year-view-blocks-width: calc( var(--ax-comp-scheduler-timeline-view-blocks-width) / 2 )}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-wrapper{height:100%;display:flex;flex-direction:column;position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer{display:grid;position:absolute;top:4rem;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;pointer-events:none;align-content:start;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 365),var(--ax-comp-scheduler-timeline-year-view-blocks-width))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.7rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container{height:100%;display:flex;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-char{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-num{font-weight:700}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-char{max-width:100%;position:sticky;font-weight:300;font-size:.75rem;line-height:.875rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;gap:.125rem;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);font-size:.75rem;line-height:.875rem;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment ax-title{font-weight:600}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge{cursor:pointer;text-align:left;font-size:.7rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container{height:100%;display:flex;flex-direction:column;background-color:inherit;will-change:transform;transform:translateZ(0);position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky{position:sticky;top:0;z-index:10;display:flex;background-color:inherit;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-resource-header-placeholder{inset-inline-start:0;z-index:15;display:flex;position:sticky;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding:.5rem;font-weight:500;font-size:.875rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header{flex:1;display:flex;background-color:inherit;overflow-x:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);min-width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-char{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-today .ax-scheduler-year-header-date-day-num{font-weight:700}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-char{max-width:100%;position:sticky;font-weight:300;font-size:.75rem;line-height:.875rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-header-sticky .ax-scheduler-timeline-year-day-header .ax-scheduler-year-header-date-day .ax-scheduler-year-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows{flex:1;overflow:visible;position:relative;background-color:inherit}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row{border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;display:flex;min-height:calc(var(--resource-spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + var(--ax-comp-scheduler-timeline-year-row-base-height, 4rem))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header{display:flex;padding:.5rem;align-items:center;justify-content:center;background-color:inherit;width:var(--ax-comp-scheduler-resource-header-width, 8rem);min-width:var(--ax-comp-scheduler-resource-header-width, 8rem);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));align-self:stretch}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header.ax-scheduler-timeline-year-resource-header-sticky{position:sticky;inset-inline-start:0;z-index:9;background-color:inherit}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-header .ax-scheduler-timeline-year-resource-title{font-weight:500;font-size:.875rem;text-align:center;word-break:break-word}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content{flex:1;display:flex;background-color:inherit;position:relative}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer{display:grid;position:absolute;top:0;inset-inline-start:0;inset-inline-end:0;z-index:5;padding-block:.25rem;padding-inline:.125rem;align-content:start;pointer-events:none;row-gap:var(--ax-scheduler-timeline-spanning-gap);grid-auto-rows:var(--ax-scheduler-timeline-spanning-row-height);grid-template-columns:repeat(var(--timeline-days-count, 365),var(--ax-comp-scheduler-timeline-year-view-blocks-width))}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment{z-index:6;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.7rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem;margin-inline:.125rem;pointer-events:auto}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;padding-inline:.5rem;height:100%;width:100%}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:0;top:2px;font-size:.6rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-resource-spanning-layer .ax-scheduler-timeline-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row{display:flex;flex-direction:column;position:relative;background-color:inherit;width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);min-width:var(--ax-comp-scheduler-timeline-year-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));padding-top:calc(var(--spanning-rows-count, 0) * (var(--ax-scheduler-timeline-spanning-row-height) + var(--ax-scheduler-timeline-spanning-gap)) + .25rem);padding-bottom:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container{gap:var(--ax-comp-scheduler-timeline-year-gap-height, .125rem);display:flex;flex-direction:column;width:100%;padding-inline:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container ax-popover{display:none}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;gap:.125rem;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);flex-shrink:0;font-size:.75rem;line-height:.875rem;min-height:2rem;will-change:transform;transform:translateZ(0)}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment ax-title{font-weight:500}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge{cursor:pointer;text-align:left;font-size:.7rem;padding:.125rem 0;margin-top:.125rem;flex-shrink:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-resource-container .ax-scheduler-timeline-year-resource-rows .ax-scheduler-timeline-year-resource-row .ax-scheduler-timeline-year-resource-content .ax-scheduler-timeline-year-slot-row .ax-scheduler-timeline-appointment-container .ax-scheduler-year-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-content,ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-year-slot-row{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover,ax-scheduler-timeline-year-view:not(.ax-state-readonly) .ax-scheduler-timeline-year-slot-row:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-year-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-year-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment{font-size:.75rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);margin-bottom:.25rem}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment:last-child{margin-bottom:0}ax-scheduler-timeline-year-view .ax-scheduler-timeline-year-popover-appointment .ax-scheduler-popover-appointment .ax-appointment-chip-title{font-size:.8rem;margin-bottom:.125rem;font-weight:600}ax-scheduler-timeline-year-view .ax-scheduler-current-time-line{top:0;bottom:0;width:2px}ax-scheduler-timeline-year-view .ax-scheduler-current-time-line:before{top:-6px;inset-inline-start:-5px}\n"] }]
|
|
3837
3854
|
}] });
|
|
3838
3855
|
|
|
3839
3856
|
class AXSchedulerWeekViewComponent extends NXComponent {
|
|
@@ -3859,6 +3876,7 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
|
3859
3876
|
this.endDayHour = input.required(...(ngDevMode ? [{ debugName: "endDayHour" }] : []));
|
|
3860
3877
|
this.startDayHour = input.required(...(ngDevMode ? [{ debugName: "startDayHour" }] : []));
|
|
3861
3878
|
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
|
3879
|
+
this.scrollToCurrentTimeIndicator = input(false, ...(ngDevMode ? [{ debugName: "scrollToCurrentTimeIndicator" }] : []));
|
|
3862
3880
|
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
|
3863
3881
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
|
3864
3882
|
this.selectedAppointmentId = input(null, ...(ngDevMode ? [{ debugName: "selectedAppointmentId" }] : []));
|
|
@@ -4431,7 +4449,7 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
|
4431
4449
|
this.resizeObserverCleanup?.();
|
|
4432
4450
|
}
|
|
4433
4451
|
setupCurrentTimeScroll() {
|
|
4434
|
-
if (!this.showCurrentTimeIndicator()) {
|
|
4452
|
+
if (!this.showCurrentTimeIndicator() || !this.scrollToCurrentTimeIndicator()) {
|
|
4435
4453
|
return undefined;
|
|
4436
4454
|
}
|
|
4437
4455
|
const currentPosition = this.getCurrentTimePosition();
|
|
@@ -4480,7 +4498,7 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
|
4480
4498
|
return true;
|
|
4481
4499
|
}
|
|
4482
4500
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerWeekViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
4483
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerWeekViewComponent, isStandalone: true, selector: "ax-scheduler-week-view", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: "endDayHour", publicName: "endDayHour", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: "startDayHour", publicName: "startDayHour", isSignal: true, isRequired: true, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-scheduler-week-header\">\n <div class=\"ax-scheduler-week-header-days\">\n <div class=\"ax-scheduler-week-header-table\"></div>\n <div class=\"ax-scheduler-week-header-date\" aria-hidden=\"true\">\n @for (day of daysArray(); track day.date.date.getTime()) {\n <div\n [class.ax-state-today]=\"isToday(day.date)\"\n class=\"ax-scheduler-week-header-date-day {{\n day.holiday.state !== 'none' ? (day.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"day.holiday?.holiday?.title ?? ''\"\n >\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\n ( {{ day.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-week-header-date-day-num\">\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n }\n </div>\n </div>\n <!-- All-day / Multi-day Spanning Appointments Header -->\n <div class=\"ax-scheduler-week-header-days ax-scheduler-week-allday-header\">\n <div class=\"ax-scheduler-week-header-table\">{{ '@acorex:dateTime.duration.all-day' | translate | async }}</div>\n <div class=\"ax-scheduler-week-allday-content\">\n <!-- Spanning Appointments Layer -->\n @if (spanningAppointments().length > 0) {\n <div class=\"ax-scheduler-week-spanning-layer\">\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-week-spanning-appointment\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [class]=\"\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n \"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.--spanning-row-index]=\"spanning.rowIndex\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n <!-- Drop zones for each day -->\n <div class=\"ax-scheduler-week-allday-slots\">\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\n <div\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleAllDayDrop($event, slotData.day)\"\n class=\"ax-scheduler-all-day-slot\"\n (click)=\"handleAllDaySlotEvent($event, slotData.day)\"\n (dblclick)=\"handleAllDaySlotEvent($event, slotData.day)\"\n (contextmenu)=\"handleAllDaySlotEvent($event, slotData.day)\"\n >\n <!-- Single-day all-day appointments only -->\n @if (slotData.appointments.length > 0) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragData]=\"slotData.appointments[0]\"\n [dragDisabled]=\"!draggable() || slotData.appointments[0].readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (dblclick)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n [title]=\"tooltipTemplate() ? '' : slotData.appointments[0].title\"\n class=\"ax-scheduler-header-week-appointment\"\n [style.width]=\"slotData.appointments.length > 1 ? 'calc(100% - 2rem)' : '100%'\"\n [class.ax-state-active]=\"isActive(slotData.appointments[0].id)\"\n [class]=\"\n slotData.appointments[0].cssClass ??\n 'ax-scheduler-' + (slotData.appointments[0].priority ?? 'primary') + '-priority'\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"slotData.appointments[0]\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ slotData.appointments[0].title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, slotData.appointments[0])\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </ax-title>\n </div>\n }\n @if (slotData.appointments.length > 1) {\n <div\n #moreAppointments\n class=\"ax-scheduler-appointment-badge\"\n [style.width]=\"'1.5rem'\"\n [style.border]=\"'none'\"\n [class]=\"\n slotData.appointments[1].cssClass ??\n 'ax-scheduler-' + (slotData.appointments[1].priority ?? 'primary') + '-priority'\n \"\n >\n +{{ slotData.appointments.length - 1 }}\n </div>\n <ax-popover [target]=\"moreAppointments\">\n <div class=\"ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\" axDropZone>\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\n @if (!first) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"tooltipTemplate() ? '' : appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [class.ax-state-active]=\"isActive(appointment.id)\"\n [class]=\"\n appointment.cssClass ?? 'ax-scheduler-' + (appointment.priority ?? 'primary') + '-priority'\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </ax-title>\n </div>\n }\n }\n </div>\n </ax-popover>\n }\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"ax-scheduler-week-time-container\">\n <div class=\"ax-scheduler-week-time\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div>\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-week-table-container\">\n <!-- Current Time Line Indicator -->\n @if (\n shouldShowCurrentTimeForToday() &&\n getCurrentTimePositionWithOffset() !== null &&\n getCurrentDayColumnPosition() !== null\n ) {\n <div\n #currentTimeLine\n class=\"ax-scheduler-current-time-line\"\n [style.inset-block-start]=\"getCurrentTimePositionWithOffset()\"\n [style.inset-inline-start]=\"getCurrentDayColumnPosition()\"\n [style.width]=\"getCurrentDayColumnWidth()\"\n ></div>\n }\n <div class=\"ax-scheduler-week-appointment-container\">\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragData]=\"appt.appointment\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || appt.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, appt.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appt.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appt.appointment)\"\n [title]=\"tooltipTemplate() ? '' : appt.appointment.title\"\n [style.width]=\"appt.layoutWidth\"\n [style.height]=\"appt.layoutHeight\"\n class=\"ax-scheduler-week-appointment\"\n [style.inset-block-start]=\"appt.layoutTop\"\n [style.inset-inline-start]=\"appt.layoutLeft\"\n [class.ax-state-active]=\"isActive(appt.appointment.id)\"\n [class]=\"\n appt.appointment.cssClass ?? 'ax-scheduler-' + (appt.appointment.priority ?? 'primary') + '-priority'\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"appt.appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ appt.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, appt.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n\n <!-- Overflow Badges with Popovers -->\n @for (badge of overflowBadgesWithData(); track badge.key) {\n <!-- Wrap badge and popover for targeting -->\n <div\n style=\"position: absolute\"\n class=\"ax-scheduler-badge-wrapper\"\n [style.inset-block-start]=\"badge.badgeTop\"\n [style.inset-inline-start]=\"badge.badgeLeft\"\n >\n <!-- The Badge itself -->\n <div\n #actionButton\n class=\"ax-scheduler-appointment-badge\"\n [class]=\"\n badge.hiddenAppointments[0].cssClass ??\n 'ax-scheduler-' + (badge.hiddenAppointments[0].priority ?? 'primary') + '-priority'\n \"\n >\n +{{ badge.count }}\n </div>\n <!-- The Popover -->\n <ax-popover [target]=\"actionButton\">\n <div class=\"ax-scheduler-popover\" axDropZone>\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"tooltipTemplate() ? '' : appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [class.ax-state-active]=\"isActive(appointment.id)\"\n [class]=\"appointment.cssClass ?? 'ax-scheduler-' + (appointment.priority ?? 'primary') + '-priority'\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n </div>\n }\n </div>\n\n <table aria-hidden=\"true\" [border]=\"1\">\n <tbody>\n @for (time of hoursArray(); track time.date.getTime()) {\n <tr>\n @for (day of daysArray(); track day.date.date.getTime()) {\n <td\n axDropZone\n #zone=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time, day.date, 0)\"\n (click)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n (dblclick)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n [attr.data-slot-id]=\"day.date.format('YYYYMMDD') + '-' + time.format('HHmm')\"\n ></td>\n }\n </tr>\n <tr>\n @for (day of daysArray(); track day.date.date.getTime()) {\n <td\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time, day.date, 1)\"\n (click)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n (dblclick)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n [attr.data-slot-id]=\"day.date.format('YYYYMMDD') + '-' + time.add('minute', 30).format('HHmm')\"\n ></td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";ax-scheduler-week-view{--ax-scheduler-week-spanning-row-height: 1.5rem;--ax-scheduler-week-spanning-gap: .125rem;--ax-scheduler-week-spanning-row-gap: .25rem;display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-week-view .ax-scheduler-appointment-badge{display:flex;width:1.5rem;height:1.5rem;cursor:pointer;font-size:.75rem;align-items:center;border-radius:9999px;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header{top:0;z-index:20;width:100%;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days{display:flex;background-color:inherit;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-table{z-index:10;flex-shrink:0;position:sticky;text-align:center;inset-inline-start:0;width:var(--ax-comp-scheduler-basic-view-blocks-width);background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date{width:calc(100% - var(--ax-comp-scheduler-basic-view-blocks-width));display:flex}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day{gap:.25rem;display:grid;align-items:center;padding-inline:.5rem;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:100%;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot ax-popover{display:none}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content{display:flex;flex-direction:column;width:calc(100% - var(--ax-comp-scheduler-basic-view-blocks-width));position:relative}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer{display:grid;grid-template-columns:repeat(7,1fr);padding-block:.25rem;row-gap:var(--ax-scheduler-week-spanning-row-gap);align-content:start;position:relative}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer:before{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;background:linear-gradient(to right,transparent calc(14.2857142857% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(14.2857142857% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(14.2857142857% + .5px),transparent calc(14.2857142857% + .5px),transparent calc(28.5714285714% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(28.5714285714% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(28.5714285714% + .5px),transparent calc(28.5714285714% + .5px),transparent calc(42.8571428571% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(42.8571428571% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(42.8571428571% + .5px),transparent calc(42.8571428571% + .5px),transparent calc(57.1428571429% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(57.1428571429% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(57.1428571429% + .5px),transparent calc(57.1428571429% + .5px),transparent calc(71.4285714286% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(71.4285714286% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(71.4285714286% + .5px),transparent calc(71.4285714286% + .5px),transparent calc(85.7142857143% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(85.7142857143% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(85.7142857143% + .5px),transparent calc(85.7142857143% + .5px))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment{z-index:1;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .5rem;height:var(--ax-scheduler-week-spanning-row-height);margin-inline:.125rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;width:100%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0;padding-inline-start:1rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:.25rem;top:50%;transform:translateY(-50%);font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0;padding-inline-end:1rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:.25rem;top:50%;transform:translateY(-50%);font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-allday-slots{display:flex;height:100%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-allday-slots .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%;padding-block:.25rem;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-allday-slots .ax-scheduler-all-day-slot:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-allday-slots .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:100%;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-allday-slots .ax-scheduler-all-day-slot ax-popover{display:none}ax-scheduler-week-view .ax-scheduler-week-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:15;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container{width:100%;position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container{top:0;width:100%;position:absolute}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container .ax-scheduler-week-appointment{display:flex;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table{width:100%}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr{display:flex;height:var(--ax-comp-scheduler-basic-view-blocks-height);border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr:first-child{border-block-start-width:0}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td:last-child{border-inline-end-width:0}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-appointment,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-header-week-appointment{cursor:pointer}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot:hover,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-week-view ax-title{display:flex;justify-content:space-between}ax-scheduler-week-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-week-view .ax-scheduler-current-time-line{height:2px}ax-scheduler-week-view .ax-scheduler-current-time-line:before{top:-5px;inset-inline-start:-6px}\n"], dependencies: [{ kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
4501
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerWeekViewComponent, isStandalone: true, selector: "ax-scheduler-week-view", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: "endDayHour", publicName: "endDayHour", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: "startDayHour", publicName: "startDayHour", isSignal: true, isRequired: true, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, scrollToCurrentTimeIndicator: { classPropertyName: "scrollToCurrentTimeIndicator", publicName: "scrollToCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectedAppointmentId: { classPropertyName: "selectedAppointmentId", publicName: "selectedAppointmentId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "readonly()" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], viewQueries: [{ propertyName: "currentTimeLineElement", first: true, predicate: ["currentTimeLine"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-scheduler-week-header\">\n <div class=\"ax-scheduler-week-header-days\">\n <div class=\"ax-scheduler-week-header-table\"></div>\n <div class=\"ax-scheduler-week-header-date\" aria-hidden=\"true\">\n @for (day of daysArray(); track day.date.date.getTime()) {\n <div\n [class.ax-state-today]=\"isToday(day.date)\"\n class=\"ax-scheduler-week-header-date-day {{\n day.holiday.state !== 'none' ? (day.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\n >\n <span\n class=\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"day.holiday?.holiday?.title ?? ''\"\n >\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\n ( {{ day.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-week-header-date-day-num\">\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n }\n </div>\n </div>\n <!-- All-day / Multi-day Spanning Appointments Header -->\n <div class=\"ax-scheduler-week-header-days ax-scheduler-week-allday-header\">\n <div class=\"ax-scheduler-week-header-table\">{{ '@acorex:dateTime.duration.all-day' | translate | async }}</div>\n <div class=\"ax-scheduler-week-allday-content\">\n <!-- Spanning Appointments Layer -->\n @if (spanningAppointments().length > 0) {\n <div class=\"ax-scheduler-week-spanning-layer\">\n @for (spanning of spanningAppointments(); track spanning.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"spanning.appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || spanning.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, spanning.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, spanning.appointment)\"\n [title]=\"\n tooltipTemplate()\n ? ''\n : spanning.appointment.title +\n ' (' +\n (spanning.appointment.startDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (spanning.appointment.endDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ')'\n \"\n class=\"ax-scheduler-week-spanning-appointment\"\n [class.ax-spanning-start-clipped]=\"spanning.isStartClipped\"\n [class.ax-spanning-end-clipped]=\"spanning.isEndClipped\"\n [class.ax-state-active]=\"isActive(spanning.appointment.id)\"\n [class]=\"\n spanning.appointment.cssClass ??\n 'ax-scheduler-' + (spanning.appointment.priority ?? 'primary') + '-priority'\n \"\n [style.grid-column]=\"spanning.startDayIndex + 1 + ' / span ' + spanning.spanCount\"\n [style.--spanning-row-index]=\"spanning.rowIndex\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"spanning.appointment\"\n >\n <span class=\"ax-spanning-appointment-title\">\n <span class=\"ax-scheduler-truncate\">{{ spanning.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, spanning.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </span>\n </div>\n }\n </div>\n }\n <!-- Drop zones for each day -->\n <div class=\"ax-scheduler-week-allday-slots\">\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\n <div\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleAllDayDrop($event, slotData.day)\"\n class=\"ax-scheduler-all-day-slot\"\n (click)=\"handleAllDaySlotEvent($event, slotData.day)\"\n (dblclick)=\"handleAllDaySlotEvent($event, slotData.day)\"\n (contextmenu)=\"handleAllDaySlotEvent($event, slotData.day)\"\n >\n <!-- Single-day all-day appointments only -->\n @if (slotData.appointments.length > 0) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragData]=\"slotData.appointments[0]\"\n [dragDisabled]=\"!draggable() || slotData.appointments[0].readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (dblclick)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n [title]=\"tooltipTemplate() ? '' : slotData.appointments[0].title\"\n class=\"ax-scheduler-header-week-appointment\"\n [style.width]=\"slotData.appointments.length > 1 ? 'calc(100% - 2rem)' : '100%'\"\n [class.ax-state-active]=\"isActive(slotData.appointments[0].id)\"\n [class]=\"\n slotData.appointments[0].cssClass ??\n 'ax-scheduler-' + (slotData.appointments[0].priority ?? 'primary') + '-priority'\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"slotData.appointments[0]\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ slotData.appointments[0].title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, slotData.appointments[0])\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </ax-title>\n </div>\n }\n @if (slotData.appointments.length > 1) {\n <div\n #moreAppointments\n class=\"ax-scheduler-appointment-badge\"\n [style.width]=\"'1.5rem'\"\n [style.border]=\"'none'\"\n [class]=\"\n slotData.appointments[1].cssClass ??\n 'ax-scheduler-' + (slotData.appointments[1].priority ?? 'primary') + '-priority'\n \"\n >\n +{{ slotData.appointments.length - 1 }}\n </div>\n <ax-popover [target]=\"moreAppointments\">\n <div class=\"ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\" axDropZone>\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\n @if (!first) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"tooltipTemplate() ? '' : appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [class.ax-state-active]=\"isActive(appointment.id)\"\n [class]=\"\n appointment.cssClass ?? 'ax-scheduler-' + (appointment.priority ?? 'primary') + '-priority'\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </ax-title>\n </div>\n }\n }\n </div>\n </ax-popover>\n }\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"ax-scheduler-week-time-container\">\n <div class=\"ax-scheduler-week-time\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div>\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-week-table-container\">\n <!-- Current Time Line Indicator -->\n @if (\n shouldShowCurrentTimeForToday() &&\n getCurrentTimePositionWithOffset() !== null &&\n getCurrentDayColumnPosition() !== null\n ) {\n <div\n #currentTimeLine\n class=\"ax-scheduler-current-time-line\"\n [style.inset-block-start]=\"getCurrentTimePositionWithOffset()\"\n [style.inset-inline-start]=\"getCurrentDayColumnPosition()\"\n [style.width]=\"getCurrentDayColumnWidth()\"\n ></div>\n }\n <div class=\"ax-scheduler-week-appointment-container\">\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragData]=\"appt.appointment\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || appt.appointment.readonly || readonly()\"\n (pointerdown)=\"getSlotId($event)\"\n (click)=\"handleAppointmentEvent($event, appt.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appt.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appt.appointment)\"\n [title]=\"tooltipTemplate() ? '' : appt.appointment.title\"\n [style.width]=\"appt.layoutWidth\"\n [style.height]=\"appt.layoutHeight\"\n class=\"ax-scheduler-week-appointment\"\n [style.inset-block-start]=\"appt.layoutTop\"\n [style.inset-inline-start]=\"appt.layoutLeft\"\n [class.ax-state-active]=\"isActive(appt.appointment.id)\"\n [class]=\"\n appt.appointment.cssClass ?? 'ax-scheduler-' + (appt.appointment.priority ?? 'primary') + '-priority'\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"appt.appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ appt.appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, appt.appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n\n <!-- Overflow Badges with Popovers -->\n @for (badge of overflowBadgesWithData(); track badge.key) {\n <!-- Wrap badge and popover for targeting -->\n <div\n style=\"position: absolute\"\n class=\"ax-scheduler-badge-wrapper\"\n [style.inset-block-start]=\"badge.badgeTop\"\n [style.inset-inline-start]=\"badge.badgeLeft\"\n >\n <!-- The Badge itself -->\n <div\n #actionButton\n class=\"ax-scheduler-appointment-badge\"\n [class]=\"\n badge.hiddenAppointments[0].cssClass ??\n 'ax-scheduler-' + (badge.hiddenAppointments[0].priority ?? 'primary') + '-priority'\n \"\n >\n +{{ badge.count }}\n </div>\n <!-- The Popover -->\n <ax-popover [target]=\"actionButton\">\n <div class=\"ax-scheduler-popover\" axDropZone>\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragTransition]=\"false\"\n [dragElementClone]=\"true\"\n [dragStartDelay]=\"dragStartDelay()\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"tooltipTemplate() ? '' : appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [class.ax-state-active]=\"isActive(appointment.id)\"\n [class]=\"appointment.cssClass ?? 'ax-scheduler-' + (appointment.priority ?? 'primary') + '-priority'\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltipContext]=\"appointment\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <ax-title>\n <span class=\"ax-scheduler-truncate\">{{ appointment.title }}</span>\n @if (hasActions()) {\n <ax-icon\n (click)=\"handleActionClick($event, appointment)\"\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n ></ax-icon>\n }\n </ax-title>\n <ax-subtitle>\n {{\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n </div>\n }\n </div>\n\n <table aria-hidden=\"true\" [border]=\"1\">\n <tbody>\n @for (time of hoursArray(); track time.date.getTime()) {\n <tr>\n @for (day of daysArray(); track day.date.date.getTime()) {\n <td\n axDropZone\n #zone=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time, day.date, 0)\"\n (click)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n (dblclick)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n [attr.data-slot-id]=\"day.date.format('YYYYMMDD') + '-' + time.format('HHmm')\"\n ></td>\n }\n </tr>\n <tr>\n @for (day of daysArray(); track day.date.date.getTime()) {\n <td\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time, day.date, 1)\"\n (click)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n (dblclick)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n [attr.data-slot-id]=\"day.date.format('YYYYMMDD') + '-' + time.add('minute', 30).format('HHmm')\"\n ></td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";ax-scheduler-week-view{--ax-scheduler-week-spanning-row-height: 1.5rem;--ax-scheduler-week-spanning-gap: .125rem;--ax-scheduler-week-spanning-row-gap: .25rem;display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-week-view .ax-scheduler-appointment-badge{display:flex;width:1.5rem;height:1.5rem;cursor:pointer;font-size:.75rem;align-items:center;border-radius:9999px;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header{top:0;z-index:20;width:100%;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days{display:flex;background-color:inherit;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-table{z-index:10;flex-shrink:0;position:sticky;text-align:center;inset-inline-start:0;width:var(--ax-comp-scheduler-basic-view-blocks-width);background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date{width:calc(100% - var(--ax-comp-scheduler-basic-view-blocks-width));display:flex}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day{gap:.25rem;display:grid;align-items:center;padding-inline:.5rem;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:100%;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot ax-popover{display:none}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content{display:flex;flex-direction:column;width:calc(100% - var(--ax-comp-scheduler-basic-view-blocks-width));position:relative}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer{display:grid;grid-template-columns:repeat(7,1fr);padding-block:.25rem;row-gap:var(--ax-scheduler-week-spanning-row-gap);align-content:start;position:relative}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer:before{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;background:linear-gradient(to right,transparent calc(14.2857142857% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(14.2857142857% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(14.2857142857% + .5px),transparent calc(14.2857142857% + .5px),transparent calc(28.5714285714% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(28.5714285714% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(28.5714285714% + .5px),transparent calc(28.5714285714% + .5px),transparent calc(42.8571428571% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(42.8571428571% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(42.8571428571% + .5px),transparent calc(42.8571428571% + .5px),transparent calc(57.1428571429% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(57.1428571429% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(57.1428571429% + .5px),transparent calc(57.1428571429% + .5px),transparent calc(71.4285714286% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(71.4285714286% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(71.4285714286% + .5px),transparent calc(71.4285714286% + .5px),transparent calc(85.7142857143% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(85.7142857143% - .5px),rgba(var(--ax-sys-color-border-lightest-surface)) calc(85.7142857143% + .5px),transparent calc(85.7142857143% + .5px))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment{z-index:1;display:flex;align-items:center;cursor:pointer;overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .5rem;height:var(--ax-scheduler-week-spanning-row-height);margin-inline:.125rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment .ax-spanning-appointment-title{display:flex;align-items:center;justify-content:space-between;width:100%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-truncate{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment .ax-spanning-appointment-title .ax-scheduler-action-icon{width:auto;cursor:pointer;flex-shrink:0;margin-inline-start:.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-start-clipped{position:relative;border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:0;padding-inline-start:1rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2190 \";position:absolute;inset-inline-start:.25rem;top:50%;transform:translateY(-50%);font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-start-clipped:before{content:\"\\2192 \"}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-end-clipped{position:relative;border-start-end-radius:0;border-end-end-radius:0;margin-inline-end:0;padding-inline-end:1rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2192\";position:absolute;inset-inline-end:.25rem;top:50%;transform:translateY(-50%);font-size:.65rem;opacity:.7}ax-scheduler.ax-rtl ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-spanning-layer .ax-scheduler-week-spanning-appointment.ax-spanning-end-clipped:after{content:\" \\2190\"}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-allday-slots{display:flex;height:100%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-allday-slots .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%;padding-block:.25rem;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-allday-slots .ax-scheduler-all-day-slot:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-allday-slots .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:100%;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days.ax-scheduler-week-allday-header .ax-scheduler-week-allday-content .ax-scheduler-week-allday-slots .ax-scheduler-all-day-slot ax-popover{display:none}ax-scheduler-week-view .ax-scheduler-week-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:15;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container{width:100%;position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container{top:0;width:100%;position:absolute}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container .ax-scheduler-week-appointment{display:flex;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table{width:100%}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr{display:flex;height:var(--ax-comp-scheduler-basic-view-blocks-height);border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr:first-child{border-block-start-width:0}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td:last-child{border-inline-end-width:0}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-appointment,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-header-week-appointment{cursor:pointer}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot:hover,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-week-view ax-title{display:flex;justify-content:space-between}ax-scheduler-week-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-week-view .ax-scheduler-current-time-line{height:2px}ax-scheduler-week-view .ax-scheduler-current-time-line:before{top:-5px;inset-inline-start:-6px}\n"], dependencies: [{ kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXFormatPipe, name: "format" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
4484
4502
|
}
|
|
4485
4503
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerWeekViewComponent, decorators: [{
|
|
4486
4504
|
type: Component,
|
|
@@ -4502,7 +4520,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
4502
4520
|
class AXSchedulerComponent extends NXComponent {
|
|
4503
4521
|
constructor() {
|
|
4504
4522
|
super(...arguments);
|
|
4505
|
-
this.
|
|
4523
|
+
this.platformService = inject(AXPlatform);
|
|
4506
4524
|
this.unsubscriber = inject(AXUnsubscriber);
|
|
4507
4525
|
this.formatService = inject(AXFormatService);
|
|
4508
4526
|
this.localeService = inject(AXLocaleService);
|
|
@@ -4511,6 +4529,7 @@ class AXSchedulerComponent extends NXComponent {
|
|
|
4511
4529
|
this.translationService = inject(AXTranslationService);
|
|
4512
4530
|
this.viewModeSelectbox = viewChild(AXSelectBoxComponent, ...(ngDevMode ? [{ debugName: "viewModeSelectbox" }] : []));
|
|
4513
4531
|
this.calendarPopover = viewChild('calendarPopover', ...(ngDevMode ? [{ debugName: "calendarPopover" }] : []));
|
|
4532
|
+
this.calendarDayCellTemplate = viewChild('calendarDayCellTemplate', ...(ngDevMode ? [{ debugName: "calendarDayCellTemplate" }] : []));
|
|
4514
4533
|
this.displayViews = {
|
|
4515
4534
|
day: 'daily',
|
|
4516
4535
|
week: 'weekly',
|
|
@@ -4527,7 +4546,7 @@ class AXSchedulerComponent extends NXComponent {
|
|
|
4527
4546
|
this.currentDate = linkedSignal(() => this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'), ...(ngDevMode ? [{ debugName: "currentDate" }] : []));
|
|
4528
4547
|
this._appointments = signal([], ...(ngDevMode ? [{ debugName: "_appointments" }] : []));
|
|
4529
4548
|
this.appointments = this._appointments.asReadonly();
|
|
4530
|
-
this.rtl = signal(
|
|
4549
|
+
this.rtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: "rtl" }] : []));
|
|
4531
4550
|
this.isFullScreen = signal(false, ...(ngDevMode ? [{ debugName: "isFullScreen" }] : []));
|
|
4532
4551
|
this.viewsDataSource = signal([], ...(ngDevMode ? [{ debugName: "viewsDataSource" }] : []));
|
|
4533
4552
|
this.prevDate = signal(this.calendarService.create(new Date(), this.calendarType()), ...(ngDevMode ? [{ debugName: "prevDate" }] : []));
|
|
@@ -4545,6 +4564,7 @@ class AXSchedulerComponent extends NXComponent {
|
|
|
4545
4564
|
this.multiDayViewDaysCount = input(7, ...(ngDevMode ? [{ debugName: "multiDayViewDaysCount" }] : []));
|
|
4546
4565
|
this.showResourceHeaders = input(true, ...(ngDevMode ? [{ debugName: "showResourceHeaders" }] : []));
|
|
4547
4566
|
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
|
4567
|
+
this.scrollToCurrentTimeIndicator = input(false, ...(ngDevMode ? [{ debugName: "scrollToCurrentTimeIndicator" }] : []));
|
|
4548
4568
|
this.showUnassignedAppointments = input(true, ...(ngDevMode ? [{ debugName: "showUnassignedAppointments" }] : []));
|
|
4549
4569
|
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : []));
|
|
4550
4570
|
this.resourceTemplate = input(...(ngDevMode ? [undefined, { debugName: "resourceTemplate" }] : []));
|
|
@@ -4797,19 +4817,12 @@ class AXSchedulerComponent extends NXComponent {
|
|
|
4797
4817
|
if (!currentDate.equal(this.currentDate())) {
|
|
4798
4818
|
this.currentDate.set(currentDate);
|
|
4799
4819
|
}
|
|
4800
|
-
// Re-check RTL on language change
|
|
4801
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
4802
|
-
this.rtl.set(AXHtmlUtil.isRtl(this.nativeElement));
|
|
4803
|
-
}
|
|
4804
4820
|
});
|
|
4821
|
+
this.platformService.directionChange
|
|
4822
|
+
.pipe(map((event) => event.data === 'rtl'), this.unsubscriber.takeUntilDestroy)
|
|
4823
|
+
.subscribe((isRtl) => this.rtl.set(isRtl));
|
|
4805
4824
|
this.fillDataSource();
|
|
4806
4825
|
}
|
|
4807
|
-
ngAfterViewInit() {
|
|
4808
|
-
// Check RTL after view is fully initialized and DOM is ready
|
|
4809
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
4810
|
-
this.rtl.set(AXHtmlUtil.isRtl(this.nativeElement));
|
|
4811
|
-
}
|
|
4812
|
-
}
|
|
4813
4826
|
#appointmentEffect;
|
|
4814
4827
|
#holidayEffect;
|
|
4815
4828
|
#weekendEffect;
|
|
@@ -4833,6 +4846,21 @@ class AXSchedulerComponent extends NXComponent {
|
|
|
4833
4846
|
}
|
|
4834
4847
|
#rangeChangedEffect;
|
|
4835
4848
|
#viewChangedEffect;
|
|
4849
|
+
hasAppointmentsOnDate(date) {
|
|
4850
|
+
if (!date) {
|
|
4851
|
+
return false;
|
|
4852
|
+
}
|
|
4853
|
+
const target = this.calendarService.create(date, this.calendarType()).startOf('day');
|
|
4854
|
+
const appointments = this.viewAppointments();
|
|
4855
|
+
if (!appointments || appointments.length === 0) {
|
|
4856
|
+
return false;
|
|
4857
|
+
}
|
|
4858
|
+
return appointments.some((appt) => {
|
|
4859
|
+
const start = this.calendarService.create(appt.startDate, this.calendarType()).startOf('day');
|
|
4860
|
+
const end = this.calendarService.create(appt.endDate, this.calendarType()).startOf('day');
|
|
4861
|
+
return target.compare(start, 'day') >= 0 && target.compare(end, 'day') <= 0;
|
|
4862
|
+
});
|
|
4863
|
+
}
|
|
4836
4864
|
/**
|
|
4837
4865
|
* Handles view change events.
|
|
4838
4866
|
*
|
|
@@ -4971,7 +4999,7 @@ class AXSchedulerComponent extends NXComponent {
|
|
|
4971
4999
|
this.onDataLoaded.emit();
|
|
4972
5000
|
}
|
|
4973
5001
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
4974
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerComponent, isStandalone: true, selector: "ax-scheduler", inputs: { calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, startingDate: { classPropertyName: "startingDate", publicName: "startingDate", isSignal: true, isRequired: false, transformFunction: null }, endDayHour: { classPropertyName: "endDayHour", publicName: "endDayHour", isSignal: true, isRequired: false, transformFunction: null }, startDayHour: { classPropertyName: "startDayHour", publicName: "startDayHour", isSignal: true, isRequired: false, transformFunction: null }, hasHeader: { classPropertyName: "hasHeader", publicName: "hasHeader", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, weekend: { classPropertyName: "weekend", publicName: "weekend", isSignal: true, isRequired: false, transformFunction: null }, allowFullScreen: { classPropertyName: "allowFullScreen", publicName: "allowFullScreen", isSignal: true, isRequired: false, transformFunction: null }, multiDayViewDaysCount: { classPropertyName: "multiDayViewDaysCount", publicName: "multiDayViewDaysCount", isSignal: true, isRequired: false, transformFunction: null }, showResourceHeaders: { classPropertyName: "showResourceHeaders", publicName: "showResourceHeaders", isSignal: true, isRequired: false, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, showUnassignedAppointments: { classPropertyName: "showUnassignedAppointments", publicName: "showUnassignedAppointments", isSignal: true, isRequired: false, transformFunction: null }, resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, resourceTemplate: { classPropertyName: "resourceTemplate", publicName: "resourceTemplate", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, holidays: { classPropertyName: "holidays", publicName: "holidays", isSignal: true, isRequired: false, transformFunction: null }, views: { classPropertyName: "views", publicName: "views", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: "selectedView", publicName: "selectedView", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedView: "selectedViewChange", onDataLoaded: "onDataLoaded", onRangeChanged: "onRangeChanged", onSlotClicked: "onSlotClicked", onSlotDblClicked: "onSlotDblClicked", onSlotRightClick: "onSlotRightClick", onAppointmentDrop: "onAppointmentDrop", onActionClick: "onActionClick", onAppointmentClicked: "onAppointmentClicked", onAppointmentDblClicked: "onAppointmentDblClicked", onAppointmentRightClick: "onAppointmentRightClick" }, host: { properties: { "class.ax-rtl": "rtl()" } }, providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], viewQueries: [{ propertyName: "viewModeSelectbox", first: true, predicate: AXSelectBoxComponent, descendants: true, isSignal: true }, { propertyName: "calendarPopover", first: true, predicate: ["calendarPopover"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-scheduler-container\">\n @if (hasHeader()) {\n <div class=\"ax-scheduler-header\">\n <div class=\"ax-scheduler-date\">\n <ax-button look=\"blank\" (onClick)=\"prevClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [class.ax-icon-chevron-left]=\"!rtl()\"\n [class.ax-icon-chevron-right]=\"rtl()\"\n ></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"currentDateText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"nextClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [class.ax-icon-chevron-right]=\"!rtl()\"\n [class.ax-icon-chevron-left]=\"rtl()\"\n ></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" #calendarPopover>\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n (onValueChanged)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </ax-popover>\n </div>\n <div class=\"ax-scheduler-actions\">\n <ax-select-box\n [dropdownWidth]=\"'200px'\"\n [ngModel]=\"selectedView()\"\n [dataSource]=\"viewsDataSource()\"\n (onValueChanged)=\"viewChanged($event)\"\n ></ax-select-box>\n\n @if (allowFullScreen()) {\n <ax-button look=\"blank\" (onClick)=\"handleFullScreen()\">\n <ax-icon>\n <i class=\"fa-solid\" [class.fa-compress]=\"isFullScreen()\" [class.fa-expand]=\"!isFullScreen()\"></i>\n </ax-icon>\n </ax-button>\n }\n </div>\n </div>\n }\n <div class=\"ax-scheduler-views-container\">\n @switch (selectedView()) {\n @case ('day') {\n <ax-scheduler-day-view\n [rtl]=\"rtl()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [hasActions]=\"hasActions()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-day-view>\n }\n @case ('week') {\n <ax-scheduler-week-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [startDayHour]=\"startDayHour()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-week-view>\n }\n @case ('month') {\n <ax-scheduler-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-month-view>\n }\n @case ('timeline-day') {\n <ax-scheduler-timeline-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [hasActions]=\"hasActions()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-day-view>\n }\n @case ('timeline-multi-day') {\n <ax-scheduler-timeline-multi-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [daysCount]=\"multiDayViewDaysCount()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-multi-day-view>\n }\n @case ('timeline-month') {\n <ax-scheduler-timeline-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-month-view>\n }\n @case ('timeline-year') {\n <ax-scheduler-timeline-year-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-year-view>\n }\n @case ('agenda') {\n <ax-scheduler-agenda-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [daysCount]=\"multiDayViewDaysCount()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-agenda-view>\n }\n }\n </div>\n</div>\n", styles: [":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-lighter-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-lighter-surface);--ax-comp-scheduler-primary-active-border-color: var(--ax-sys-color-primary-500);--ax-comp-scheduler-highest-priority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-highest-priority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-highest-priority-active-border-color: var(--ax-sys-color-danger-700);--ax-comp-scheduler-high-priority-bg-color: var(--ax-sys-color-danger-lighter-surface);--ax-comp-scheduler-high-priority-text-color: var(--ax-sys-color-on-danger-lighter-surface);--ax-comp-scheduler-high-priority-active-border-color: var(--ax-sys-color-danger-500);--ax-comp-scheduler-medium-priority-bg-color: var(--ax-sys-color-warning-lighter-surface);--ax-comp-scheduler-medium-priority-text-color: var(--ax-sys-color-on-warning-lighter-surface);--ax-comp-scheduler-medium-priority-active-border-color: var(--ax-sys-color-warning-600);--ax-comp-scheduler-low-priority-bg-color: var(--ax-sys-color-success-lighter-surface);--ax-comp-scheduler-low-priority-text-color: var(--ax-sys-color-on-success-lighter-surface);--ax-comp-scheduler-low-priority-active-border-color: var(--ax-sys-color-success-500);--ax-comp-scheduler-lowest-priority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-priority-text-color: var(--ax-sys-color-on-success-lightest-surface);--ax-comp-scheduler-lowest-priority-active-border-color: var(--ax-sys-color-success-400)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;inset-inline-start:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-priority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-primary-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-primary-active-border-color));z-index:10}ax-scheduler .ax-scheduler-highest-priority{color:rgba(var(--ax-comp-scheduler-highest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-highest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-highest-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-high-priority{color:rgba(var(--ax-comp-scheduler-high-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-high-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-high-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-medium-priority{color:rgba(var(--ax-comp-scheduler-medium-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-medium-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-medium-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-low-priority{color:rgba(var(--ax-comp-scheduler-low-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-low-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-low-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-lowest-priority{color:rgba(var(--ax-comp-scheduler-lowest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-lowest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-lowest-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover ax-title,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title{display:flex;justify-content:space-between}.ax-overlay-pane.ax-scheduler-popover ax-title .ax-scheduler-action-icon,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-priority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-primary-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-priority{color:rgba(var(--ax-comp-scheduler-highest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-highest-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-priority{color:rgba(var(--ax-comp-scheduler-high-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-high-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-priority{color:rgba(var(--ax-comp-scheduler-medium-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-medium-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-priority{color:rgba(var(--ax-comp-scheduler-low-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-low-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-priority{color:rgba(var(--ax-comp-scheduler-lowest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-lowest-priority-active-border-color));z-index:10}.ax-scheduler-current-time-line{z-index:7;position:absolute;pointer-events:none;background-color:#ef4444;box-shadow:0 0 6px #ef4444cc}.ax-scheduler-current-time-line:before{content:\"\";width:12px;height:12px;position:absolute;border-radius:50%;background-color:#ef4444;box-shadow:0 0 8px #ef4444e6;border:2px solid rgba(var(--ax-sys-color-surface))}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXCalendarComponent, selector: "ax-calendar", inputs: ["rtl", "readonly", "value", "name", "disabled", "depth", "activeView", "minValue", "maxValue", "disabledDates", "holidayDates", "type", "dayCellTemplate", "monthCellTemplate", "yearCellTemplate", "cellClass", "showNavigation", "count", "id", "weekend", "weekdays"], outputs: ["onOptionChanged", "valueChange", "onValueChanged", "minValueChange", "maxValueChange", "onBlur", "onFocus", "depthChange", "typeChange", "activeViewChange", "disabledDatesChange", "holidayDatesChange", "onNavigate", "onSlotClick", "countChange"] }, { kind: "component", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXSchedulerDayViewComponent, selector: "ax-scheduler-day-view", inputs: ["rtl", "readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "date", "endDayHour", "startDayHour", "showCurrentTimeIndicator", "appointments", "tooltipTemplate", "selectedAppointmentId"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerWeekViewComponent, selector: "ax-scheduler-week-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "date", "endDayHour", "startDayHour", "showCurrentTimeIndicator", "appointments", "tooltipTemplate", "selectedAppointmentId"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerMonthViewComponent, selector: "ax-scheduler-month-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "date", "appointments", "firstDayOfWeek", "selectedAppointmentId", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerAgendaViewComponent, selector: "ax-scheduler-agenda-view", inputs: ["daysCount", "readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "date", "appointments", "tooltipTemplate", "selectedAppointmentId"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerTimelineDayViewComponent, selector: "ax-scheduler-timeline-day-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "endDayHour", "selectedAppointmentId", "startDayHour", "showUnassignedAppointments", "resources", "showCurrentTimeIndicator", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerTimelineMonthViewComponent, selector: "ax-scheduler-timeline-month-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "showUnassignedAppointments", "selectedAppointmentId", "resources", "showCurrentTimeIndicator", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerTimelineMultiDayViewComponent, selector: "ax-scheduler-timeline-multi-day-view", inputs: ["daysCount", "readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "endDayHour", "selectedAppointmentId", "showCurrentTimeIndicator", "startDayHour", "showUnassignedAppointments", "resources", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerTimelineYearViewComponent, selector: "ax-scheduler-timeline-year-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "showUnassignedAppointments", "selectedAppointmentId", "resources", "showCurrentTimeIndicator", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
5002
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerComponent, isStandalone: true, selector: "ax-scheduler", inputs: { calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, startingDate: { classPropertyName: "startingDate", publicName: "startingDate", isSignal: true, isRequired: false, transformFunction: null }, endDayHour: { classPropertyName: "endDayHour", publicName: "endDayHour", isSignal: true, isRequired: false, transformFunction: null }, startDayHour: { classPropertyName: "startDayHour", publicName: "startDayHour", isSignal: true, isRequired: false, transformFunction: null }, hasHeader: { classPropertyName: "hasHeader", publicName: "hasHeader", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: "hasActions", publicName: "hasActions", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, weekend: { classPropertyName: "weekend", publicName: "weekend", isSignal: true, isRequired: false, transformFunction: null }, allowFullScreen: { classPropertyName: "allowFullScreen", publicName: "allowFullScreen", isSignal: true, isRequired: false, transformFunction: null }, multiDayViewDaysCount: { classPropertyName: "multiDayViewDaysCount", publicName: "multiDayViewDaysCount", isSignal: true, isRequired: false, transformFunction: null }, showResourceHeaders: { classPropertyName: "showResourceHeaders", publicName: "showResourceHeaders", isSignal: true, isRequired: false, transformFunction: null }, showCurrentTimeIndicator: { classPropertyName: "showCurrentTimeIndicator", publicName: "showCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, scrollToCurrentTimeIndicator: { classPropertyName: "scrollToCurrentTimeIndicator", publicName: "scrollToCurrentTimeIndicator", isSignal: true, isRequired: false, transformFunction: null }, showUnassignedAppointments: { classPropertyName: "showUnassignedAppointments", publicName: "showUnassignedAppointments", isSignal: true, isRequired: false, transformFunction: null }, resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, resourceTemplate: { classPropertyName: "resourceTemplate", publicName: "resourceTemplate", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: "tooltipTemplate", publicName: "tooltipTemplate", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: false, transformFunction: null }, holidays: { classPropertyName: "holidays", publicName: "holidays", isSignal: true, isRequired: false, transformFunction: null }, views: { classPropertyName: "views", publicName: "views", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: "selectedView", publicName: "selectedView", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedView: "selectedViewChange", onDataLoaded: "onDataLoaded", onRangeChanged: "onRangeChanged", onSlotClicked: "onSlotClicked", onSlotDblClicked: "onSlotDblClicked", onSlotRightClick: "onSlotRightClick", onAppointmentDrop: "onAppointmentDrop", onActionClick: "onActionClick", onAppointmentClicked: "onAppointmentClicked", onAppointmentDblClicked: "onAppointmentDblClicked", onAppointmentRightClick: "onAppointmentRightClick" }, host: { properties: { "class.ax-rtl": "rtl()" } }, providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], viewQueries: [{ propertyName: "viewModeSelectbox", first: true, predicate: AXSelectBoxComponent, descendants: true, isSignal: true }, { propertyName: "calendarPopover", first: true, predicate: ["calendarPopover"], descendants: true, isSignal: true }, { propertyName: "calendarDayCellTemplate", first: true, predicate: ["calendarDayCellTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-scheduler-container\">\n @if (hasHeader()) {\n <div class=\"ax-scheduler-header\">\n <div class=\"ax-scheduler-date\">\n <ax-button look=\"blank\" (onClick)=\"prevClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [class.ax-icon-chevron-left]=\"!rtl()\"\n [class.ax-icon-chevron-right]=\"rtl()\"\n ></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"currentDateText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"nextClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [class.ax-icon-chevron-right]=\"!rtl()\"\n [class.ax-icon-chevron-left]=\"rtl()\"\n ></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" #calendarPopover>\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n [dayCellTemplate]=\"calendarDayCellTemplate\"\n (onValueChanged)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </ax-popover>\n </div>\n <div class=\"ax-scheduler-actions\">\n <ax-select-box\n [dropdownWidth]=\"'200px'\"\n [ngModel]=\"selectedView()\"\n [dataSource]=\"viewsDataSource()\"\n (onValueChanged)=\"viewChanged($event)\"\n ></ax-select-box>\n\n @if (allowFullScreen()) {\n <ax-button look=\"blank\" (onClick)=\"handleFullScreen()\">\n <ax-icon>\n <i class=\"fa-solid\" [class.fa-compress]=\"isFullScreen()\" [class.fa-expand]=\"!isFullScreen()\"></i>\n </ax-icon>\n </ax-button>\n }\n </div>\n </div>\n }\n <div class=\"ax-scheduler-views-container\">\n @switch (selectedView()) {\n @case ('day') {\n <ax-scheduler-day-view\n [rtl]=\"rtl()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [hasActions]=\"hasActions()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-day-view>\n }\n @case ('week') {\n <ax-scheduler-week-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [startDayHour]=\"startDayHour()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-week-view>\n }\n @case ('month') {\n <ax-scheduler-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-month-view>\n }\n @case ('timeline-day') {\n <ax-scheduler-timeline-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [hasActions]=\"hasActions()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-day-view>\n }\n @case ('timeline-multi-day') {\n <ax-scheduler-timeline-multi-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [daysCount]=\"multiDayViewDaysCount()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-multi-day-view>\n }\n @case ('timeline-month') {\n <ax-scheduler-timeline-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-month-view>\n }\n @case ('timeline-year') {\n <ax-scheduler-timeline-year-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-year-view>\n }\n @case ('agenda') {\n <ax-scheduler-agenda-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [daysCount]=\"multiDayViewDaysCount()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-agenda-view>\n }\n }\n </div>\n</div>\n<ng-template #calendarDayCellTemplate let-data>\n @let slot = data.slot;\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-1\">\n <span>{{ slot.text }}</span>\n @if (hasAppointmentsOnDate(slot.date.date)) {\n <ax-badge color=\"primary\"></ax-badge>\n }\n </div>\n</ng-template>\n", styles: [":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-lighter-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-lighter-surface);--ax-comp-scheduler-primary-active-border-color: var(--ax-sys-color-primary-500);--ax-comp-scheduler-highest-priority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-highest-priority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-highest-priority-active-border-color: var(--ax-sys-color-danger-700);--ax-comp-scheduler-high-priority-bg-color: var(--ax-sys-color-danger-lighter-surface);--ax-comp-scheduler-high-priority-text-color: var(--ax-sys-color-on-danger-lighter-surface);--ax-comp-scheduler-high-priority-active-border-color: var(--ax-sys-color-danger-500);--ax-comp-scheduler-medium-priority-bg-color: var(--ax-sys-color-warning-lighter-surface);--ax-comp-scheduler-medium-priority-text-color: var(--ax-sys-color-on-warning-lighter-surface);--ax-comp-scheduler-medium-priority-active-border-color: var(--ax-sys-color-warning-600);--ax-comp-scheduler-low-priority-bg-color: var(--ax-sys-color-success-lighter-surface);--ax-comp-scheduler-low-priority-text-color: var(--ax-sys-color-on-success-lighter-surface);--ax-comp-scheduler-low-priority-active-border-color: var(--ax-sys-color-success-500);--ax-comp-scheduler-lowest-priority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-priority-text-color: var(--ax-sys-color-on-success-lightest-surface);--ax-comp-scheduler-lowest-priority-active-border-color: var(--ax-sys-color-success-400)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;inset-inline-start:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-priority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-primary-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-primary-active-border-color));z-index:10}ax-scheduler .ax-scheduler-highest-priority{color:rgba(var(--ax-comp-scheduler-highest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-highest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-highest-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-high-priority{color:rgba(var(--ax-comp-scheduler-high-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-high-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-high-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-medium-priority{color:rgba(var(--ax-comp-scheduler-medium-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-medium-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-medium-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-low-priority{color:rgba(var(--ax-comp-scheduler-low-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-low-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-low-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-lowest-priority{color:rgba(var(--ax-comp-scheduler-lowest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-lowest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-lowest-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover ax-title,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title{display:flex;justify-content:space-between}.ax-overlay-pane.ax-scheduler-popover ax-title .ax-scheduler-action-icon,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-priority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-primary-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-priority{color:rgba(var(--ax-comp-scheduler-highest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-highest-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-priority{color:rgba(var(--ax-comp-scheduler-high-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-high-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-priority{color:rgba(var(--ax-comp-scheduler-medium-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-medium-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-priority{color:rgba(var(--ax-comp-scheduler-low-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-low-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-priority{color:rgba(var(--ax-comp-scheduler-lowest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-lowest-priority-active-border-color));z-index:10}.ax-scheduler-current-time-line{z-index:7;position:absolute;pointer-events:none;background-color:#ef4444;box-shadow:0 0 6px #ef4444cc}.ax-scheduler-current-time-line:before{content:\"\";width:12px;height:12px;position:absolute;border-radius:50%;background-color:#ef4444;box-shadow:0 0 8px #ef4444e6;border:2px solid rgba(var(--ax-sys-color-surface))}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXCalendarComponent, selector: "ax-calendar", inputs: ["rtl", "readonly", "value", "name", "disabled", "depth", "activeView", "minValue", "maxValue", "disabledDates", "holidayDates", "type", "dayCellTemplate", "monthCellTemplate", "yearCellTemplate", "cellClass", "showNavigation", "count", "id", "weekend", "weekdays"], outputs: ["onOptionChanged", "valueChange", "onValueChanged", "minValueChange", "maxValueChange", "onBlur", "onFocus", "depthChange", "typeChange", "activeViewChange", "disabledDatesChange", "holidayDatesChange", "onNavigate", "onSlotClick", "countChange"] }, { kind: "component", type: AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXSchedulerDayViewComponent, selector: "ax-scheduler-day-view", inputs: ["rtl", "readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "date", "endDayHour", "startDayHour", "showCurrentTimeIndicator", "scrollToCurrentTimeIndicator", "appointments", "tooltipTemplate", "selectedAppointmentId"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerWeekViewComponent, selector: "ax-scheduler-week-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "date", "endDayHour", "startDayHour", "showCurrentTimeIndicator", "scrollToCurrentTimeIndicator", "appointments", "tooltipTemplate", "selectedAppointmentId"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerMonthViewComponent, selector: "ax-scheduler-month-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "date", "appointments", "firstDayOfWeek", "selectedAppointmentId", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerAgendaViewComponent, selector: "ax-scheduler-agenda-view", inputs: ["daysCount", "readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "date", "appointments", "tooltipTemplate", "selectedAppointmentId"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerTimelineDayViewComponent, selector: "ax-scheduler-timeline-day-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "endDayHour", "selectedAppointmentId", "startDayHour", "showUnassignedAppointments", "resources", "showCurrentTimeIndicator", "scrollToCurrentTimeIndicator", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerTimelineMonthViewComponent, selector: "ax-scheduler-timeline-month-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "showUnassignedAppointments", "selectedAppointmentId", "resources", "showCurrentTimeIndicator", "scrollToCurrentTimeIndicator", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerTimelineMultiDayViewComponent, selector: "ax-scheduler-timeline-multi-day-view", inputs: ["daysCount", "readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "endDayHour", "selectedAppointmentId", "showCurrentTimeIndicator", "scrollToCurrentTimeIndicator", "startDayHour", "showUnassignedAppointments", "resources", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }, { kind: "component", type: AXSchedulerTimelineYearViewComponent, selector: "ax-scheduler-timeline-year-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "showUnassignedAppointments", "selectedAppointmentId", "resources", "showCurrentTimeIndicator", "scrollToCurrentTimeIndicator", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
4975
5003
|
}
|
|
4976
5004
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerComponent, decorators: [{
|
|
4977
5005
|
type: Component,
|
|
@@ -4979,6 +5007,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
4979
5007
|
'[class.ax-rtl]': 'rtl()',
|
|
4980
5008
|
}, imports: [
|
|
4981
5009
|
FormsModule,
|
|
5010
|
+
AXBadgeComponent,
|
|
4982
5011
|
AXButtonComponent,
|
|
4983
5012
|
AXPopoverComponent,
|
|
4984
5013
|
AXCalendarComponent,
|
|
@@ -4992,7 +5021,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
4992
5021
|
AXSchedulerTimelineMonthViewComponent,
|
|
4993
5022
|
AXSchedulerTimelineMultiDayViewComponent,
|
|
4994
5023
|
AXSchedulerTimelineYearViewComponent,
|
|
4995
|
-
], providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], template: "<div class=\"ax-scheduler-container\">\n @if (hasHeader()) {\n <div class=\"ax-scheduler-header\">\n <div class=\"ax-scheduler-date\">\n <ax-button look=\"blank\" (onClick)=\"prevClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [class.ax-icon-chevron-left]=\"!rtl()\"\n [class.ax-icon-chevron-right]=\"rtl()\"\n ></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"currentDateText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"nextClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [class.ax-icon-chevron-right]=\"!rtl()\"\n [class.ax-icon-chevron-left]=\"rtl()\"\n ></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" #calendarPopover>\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n (onValueChanged)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </ax-popover>\n </div>\n <div class=\"ax-scheduler-actions\">\n <ax-select-box\n [dropdownWidth]=\"'200px'\"\n [ngModel]=\"selectedView()\"\n [dataSource]=\"viewsDataSource()\"\n (onValueChanged)=\"viewChanged($event)\"\n ></ax-select-box>\n\n @if (allowFullScreen()) {\n <ax-button look=\"blank\" (onClick)=\"handleFullScreen()\">\n <ax-icon>\n <i class=\"fa-solid\" [class.fa-compress]=\"isFullScreen()\" [class.fa-expand]=\"!isFullScreen()\"></i>\n </ax-icon>\n </ax-button>\n }\n </div>\n </div>\n }\n <div class=\"ax-scheduler-views-container\">\n @switch (selectedView()) {\n @case ('day') {\n <ax-scheduler-day-view\n [rtl]=\"rtl()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [hasActions]=\"hasActions()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-day-view>\n }\n @case ('week') {\n <ax-scheduler-week-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [startDayHour]=\"startDayHour()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-week-view>\n }\n @case ('month') {\n <ax-scheduler-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-month-view>\n }\n @case ('timeline-day') {\n <ax-scheduler-timeline-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [hasActions]=\"hasActions()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-day-view>\n }\n @case ('timeline-multi-day') {\n <ax-scheduler-timeline-multi-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [daysCount]=\"multiDayViewDaysCount()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-multi-day-view>\n }\n @case ('timeline-month') {\n <ax-scheduler-timeline-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-month-view>\n }\n @case ('timeline-year') {\n <ax-scheduler-timeline-year-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-year-view>\n }\n @case ('agenda') {\n <ax-scheduler-agenda-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [daysCount]=\"multiDayViewDaysCount()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-agenda-view>\n }\n }\n </div>\n</div>\n", styles: [":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-lighter-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-lighter-surface);--ax-comp-scheduler-primary-active-border-color: var(--ax-sys-color-primary-500);--ax-comp-scheduler-highest-priority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-highest-priority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-highest-priority-active-border-color: var(--ax-sys-color-danger-700);--ax-comp-scheduler-high-priority-bg-color: var(--ax-sys-color-danger-lighter-surface);--ax-comp-scheduler-high-priority-text-color: var(--ax-sys-color-on-danger-lighter-surface);--ax-comp-scheduler-high-priority-active-border-color: var(--ax-sys-color-danger-500);--ax-comp-scheduler-medium-priority-bg-color: var(--ax-sys-color-warning-lighter-surface);--ax-comp-scheduler-medium-priority-text-color: var(--ax-sys-color-on-warning-lighter-surface);--ax-comp-scheduler-medium-priority-active-border-color: var(--ax-sys-color-warning-600);--ax-comp-scheduler-low-priority-bg-color: var(--ax-sys-color-success-lighter-surface);--ax-comp-scheduler-low-priority-text-color: var(--ax-sys-color-on-success-lighter-surface);--ax-comp-scheduler-low-priority-active-border-color: var(--ax-sys-color-success-500);--ax-comp-scheduler-lowest-priority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-priority-text-color: var(--ax-sys-color-on-success-lightest-surface);--ax-comp-scheduler-lowest-priority-active-border-color: var(--ax-sys-color-success-400)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;inset-inline-start:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-priority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-primary-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-primary-active-border-color));z-index:10}ax-scheduler .ax-scheduler-highest-priority{color:rgba(var(--ax-comp-scheduler-highest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-highest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-highest-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-high-priority{color:rgba(var(--ax-comp-scheduler-high-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-high-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-high-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-medium-priority{color:rgba(var(--ax-comp-scheduler-medium-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-medium-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-medium-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-low-priority{color:rgba(var(--ax-comp-scheduler-low-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-low-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-low-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-lowest-priority{color:rgba(var(--ax-comp-scheduler-lowest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-lowest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-lowest-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover ax-title,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title{display:flex;justify-content:space-between}.ax-overlay-pane.ax-scheduler-popover ax-title .ax-scheduler-action-icon,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-priority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-primary-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-priority{color:rgba(var(--ax-comp-scheduler-highest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-highest-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-priority{color:rgba(var(--ax-comp-scheduler-high-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-high-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-priority{color:rgba(var(--ax-comp-scheduler-medium-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-medium-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-priority{color:rgba(var(--ax-comp-scheduler-low-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-low-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-priority{color:rgba(var(--ax-comp-scheduler-lowest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-lowest-priority-active-border-color));z-index:10}.ax-scheduler-current-time-line{z-index:7;position:absolute;pointer-events:none;background-color:#ef4444;box-shadow:0 0 6px #ef4444cc}.ax-scheduler-current-time-line:before{content:\"\";width:12px;height:12px;position:absolute;border-radius:50%;background-color:#ef4444;box-shadow:0 0 8px #ef4444e6;border:2px solid rgba(var(--ax-sys-color-surface))}\n"] }]
|
|
5024
|
+
], providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], template: "<div class=\"ax-scheduler-container\">\n @if (hasHeader()) {\n <div class=\"ax-scheduler-header\">\n <div class=\"ax-scheduler-date\">\n <ax-button look=\"blank\" (onClick)=\"prevClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [class.ax-icon-chevron-left]=\"!rtl()\"\n [class.ax-icon-chevron-right]=\"rtl()\"\n ></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"currentDateText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"nextClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [class.ax-icon-chevron-right]=\"!rtl()\"\n [class.ax-icon-chevron-left]=\"rtl()\"\n ></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" #calendarPopover>\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n [dayCellTemplate]=\"calendarDayCellTemplate\"\n (onValueChanged)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </ax-popover>\n </div>\n <div class=\"ax-scheduler-actions\">\n <ax-select-box\n [dropdownWidth]=\"'200px'\"\n [ngModel]=\"selectedView()\"\n [dataSource]=\"viewsDataSource()\"\n (onValueChanged)=\"viewChanged($event)\"\n ></ax-select-box>\n\n @if (allowFullScreen()) {\n <ax-button look=\"blank\" (onClick)=\"handleFullScreen()\">\n <ax-icon>\n <i class=\"fa-solid\" [class.fa-compress]=\"isFullScreen()\" [class.fa-expand]=\"!isFullScreen()\"></i>\n </ax-icon>\n </ax-button>\n }\n </div>\n </div>\n }\n <div class=\"ax-scheduler-views-container\">\n @switch (selectedView()) {\n @case ('day') {\n <ax-scheduler-day-view\n [rtl]=\"rtl()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [hasActions]=\"hasActions()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-day-view>\n }\n @case ('week') {\n <ax-scheduler-week-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [startDayHour]=\"startDayHour()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-week-view>\n }\n @case ('month') {\n <ax-scheduler-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-month-view>\n }\n @case ('timeline-day') {\n <ax-scheduler-timeline-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [hasActions]=\"hasActions()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-day-view>\n }\n @case ('timeline-multi-day') {\n <ax-scheduler-timeline-multi-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [hasActions]=\"hasActions()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [daysCount]=\"multiDayViewDaysCount()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-multi-day-view>\n }\n @case ('timeline-month') {\n <ax-scheduler-timeline-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-month-view>\n }\n @case ('timeline-year') {\n <ax-scheduler-timeline-year-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [resources]=\"resources()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [resourceTemplate]=\"resourceTemplate()\"\n [showResourceHeaders]=\"showResourceHeaders()\"\n [showCurrentTimeIndicator]=\"showCurrentTimeIndicator()\"\n [scrollToCurrentTimeIndicator]=\"scrollToCurrentTimeIndicator()\"\n [showUnassignedAppointments]=\"showUnassignedAppointments()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-year-view>\n }\n @case ('agenda') {\n <ax-scheduler-agenda-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [daysCount]=\"multiDayViewDaysCount()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\n [selectedAppointmentId]=\"selectedAppointmentId()\"\n (onActionClickInternal)=\"onActionClick.emit($event)\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-agenda-view>\n }\n }\n </div>\n</div>\n<ng-template #calendarDayCellTemplate let-data>\n @let slot = data.slot;\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-1\">\n <span>{{ slot.text }}</span>\n @if (hasAppointmentsOnDate(slot.date.date)) {\n <ax-badge color=\"primary\"></ax-badge>\n }\n </div>\n</ng-template>\n", styles: [":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-lighter-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-lighter-surface);--ax-comp-scheduler-primary-active-border-color: var(--ax-sys-color-primary-500);--ax-comp-scheduler-highest-priority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-highest-priority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-highest-priority-active-border-color: var(--ax-sys-color-danger-700);--ax-comp-scheduler-high-priority-bg-color: var(--ax-sys-color-danger-lighter-surface);--ax-comp-scheduler-high-priority-text-color: var(--ax-sys-color-on-danger-lighter-surface);--ax-comp-scheduler-high-priority-active-border-color: var(--ax-sys-color-danger-500);--ax-comp-scheduler-medium-priority-bg-color: var(--ax-sys-color-warning-lighter-surface);--ax-comp-scheduler-medium-priority-text-color: var(--ax-sys-color-on-warning-lighter-surface);--ax-comp-scheduler-medium-priority-active-border-color: var(--ax-sys-color-warning-600);--ax-comp-scheduler-low-priority-bg-color: var(--ax-sys-color-success-lighter-surface);--ax-comp-scheduler-low-priority-text-color: var(--ax-sys-color-on-success-lighter-surface);--ax-comp-scheduler-low-priority-active-border-color: var(--ax-sys-color-success-500);--ax-comp-scheduler-lowest-priority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-priority-text-color: var(--ax-sys-color-on-success-lightest-surface);--ax-comp-scheduler-lowest-priority-active-border-color: var(--ax-sys-color-success-400)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;inset-inline-start:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-priority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-primary-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-primary-active-border-color));z-index:10}ax-scheduler .ax-scheduler-highest-priority{color:rgba(var(--ax-comp-scheduler-highest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-highest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-highest-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-high-priority{color:rgba(var(--ax-comp-scheduler-high-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-high-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-high-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-medium-priority{color:rgba(var(--ax-comp-scheduler-medium-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-medium-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-medium-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-low-priority{color:rgba(var(--ax-comp-scheduler-low-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-low-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-low-priority-active-border-color));z-index:10}ax-scheduler .ax-scheduler-lowest-priority{color:rgba(var(--ax-comp-scheduler-lowest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-priority-bg-color));border:2px solid transparent}ax-scheduler .ax-scheduler-lowest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-lowest-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover ax-title,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title{display:flex;justify-content:space-between}.ax-overlay-pane.ax-scheduler-popover ax-title .ax-scheduler-action-icon,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-priority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-primary-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-priority{color:rgba(var(--ax-comp-scheduler-highest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-highest-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-priority{color:rgba(var(--ax-comp-scheduler-high-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-high-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-priority{color:rgba(var(--ax-comp-scheduler-medium-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-medium-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-priority{color:rgba(var(--ax-comp-scheduler-low-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-low-priority-active-border-color));z-index:10}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-priority{color:rgba(var(--ax-comp-scheduler-lowest-priority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-priority-bg-color));border:2px solid transparent}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-priority.ax-state-active{border:2px solid rgba(var(--ax-comp-scheduler-lowest-priority-active-border-color));z-index:10}.ax-scheduler-current-time-line{z-index:7;position:absolute;pointer-events:none;background-color:#ef4444;box-shadow:0 0 6px #ef4444cc}.ax-scheduler-current-time-line:before{content:\"\";width:12px;height:12px;position:absolute;border-radius:50%;background-color:#ef4444;box-shadow:0 0 8px #ef4444e6;border:2px solid rgba(var(--ax-sys-color-surface))}\n"] }]
|
|
4996
5025
|
}] });
|
|
4997
5026
|
|
|
4998
5027
|
const COMPONENT = [
|