@acorex/components 20.2.0-next.9 → 20.2.0
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/accordion/index.d.ts +6 -5
- package/action-sheet/index.d.ts +1 -10
- package/alert/index.d.ts +1 -3
- package/aspect-ratio/README.md +3 -0
- package/aspect-ratio/index.d.ts +11 -0
- package/autocomplete/index.d.ts +6 -2
- package/avatar/index.d.ts +1 -2
- package/badge/index.d.ts +1 -2
- package/bottom-navigation/index.d.ts +10 -2
- package/breadcrumbs/index.d.ts +2 -3
- package/button/index.d.ts +56 -17
- package/button-group/index.d.ts +10 -6
- package/calendar/index.d.ts +9 -9
- package/check-box/index.d.ts +1 -4
- package/chips/index.d.ts +1 -2
- package/circular-progress/index.d.ts +23 -18
- package/code-editor/README.md +3 -0
- package/code-editor/index.d.ts +103 -0
- package/collapse/index.d.ts +7 -6
- package/color-box/index.d.ts +5 -8
- package/color-palette/index.d.ts +19 -24
- package/command/README.md +3 -0
- package/command/index.d.ts +60 -0
- package/comment/index.d.ts +15 -10
- package/conversation/index.d.ts +106 -78
- package/data-list/README.md +356 -0
- package/data-list/index.d.ts +102 -0
- package/data-pager/index.d.ts +22 -17
- package/data-table/index.d.ts +59 -3
- package/datetime-box/index.d.ts +11 -15
- package/datetime-input/index.d.ts +1 -4
- package/datetime-picker/index.d.ts +4 -11
- package/decorators/index.d.ts +2 -2
- package/dialog/index.d.ts +29 -4
- package/drawer-2/index.d.ts +22 -8
- package/dropdown/index.d.ts +44 -3
- package/dropdown-button/index.d.ts +7 -2
- package/fesm2022/acorex-components-accordion.mjs +74 -72
- package/fesm2022/acorex-components-accordion.mjs.map +1 -1
- package/fesm2022/acorex-components-action-sheet.mjs +22 -48
- package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
- package/fesm2022/acorex-components-alert.mjs +12 -16
- package/fesm2022/acorex-components-alert.mjs.map +1 -1
- package/fesm2022/acorex-components-aspect-ratio.mjs +36 -0
- package/fesm2022/acorex-components-aspect-ratio.mjs.map +1 -0
- package/fesm2022/acorex-components-audio-wave.mjs +7 -7
- package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
- package/fesm2022/acorex-components-autocomplete.mjs +25 -10
- package/fesm2022/acorex-components-autocomplete.mjs.map +1 -1
- package/fesm2022/acorex-components-avatar.mjs +13 -17
- package/fesm2022/acorex-components-avatar.mjs.map +1 -1
- package/fesm2022/acorex-components-badge.mjs +9 -11
- package/fesm2022/acorex-components-badge.mjs.map +1 -1
- package/fesm2022/acorex-components-bottom-navigation.mjs +18 -16
- package/fesm2022/acorex-components-bottom-navigation.mjs.map +1 -1
- package/fesm2022/acorex-components-breadcrumbs.mjs +21 -20
- package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/acorex-components-button-group.mjs +35 -26
- package/fesm2022/acorex-components-button-group.mjs.map +1 -1
- package/fesm2022/acorex-components-button.mjs +78 -38
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-calendar.mjs +52 -41
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +10 -13
- package/fesm2022/acorex-components-check-box.mjs.map +1 -1
- package/fesm2022/acorex-components-chips.mjs +9 -11
- package/fesm2022/acorex-components-chips.mjs.map +1 -1
- package/fesm2022/acorex-components-circular-progress.mjs +31 -26
- package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
- package/fesm2022/acorex-components-code-editor.mjs +591 -0
- package/fesm2022/acorex-components-code-editor.mjs.map +1 -0
- package/fesm2022/acorex-components-collapse.mjs +21 -21
- package/fesm2022/acorex-components-collapse.mjs.map +1 -1
- package/fesm2022/acorex-components-color-box.mjs +32 -32
- package/fesm2022/acorex-components-color-box.mjs.map +1 -1
- package/fesm2022/acorex-components-color-palette.mjs +68 -84
- package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
- package/fesm2022/acorex-components-command.mjs +144 -0
- package/fesm2022/acorex-components-command.mjs.map +1 -0
- package/fesm2022/acorex-components-comment.mjs +47 -41
- package/fesm2022/acorex-components-comment.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation.mjs +121 -89
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-cron-job.mjs +46 -46
- package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
- package/fesm2022/acorex-components-data-list.mjs +386 -0
- package/fesm2022/acorex-components-data-list.mjs.map +1 -0
- package/fesm2022/acorex-components-data-pager.mjs +41 -36
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +97 -41
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +21 -35
- package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-input.mjs +13 -17
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +44 -46
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +27 -27
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +44 -19
- package/fesm2022/acorex-components-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-drawer-2.mjs +28 -14
- package/fesm2022/acorex-components-drawer-2.mjs.map +1 -1
- package/fesm2022/acorex-components-drawer.mjs +13 -13
- package/fesm2022/acorex-components-drawer.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown-button.mjs +16 -11
- package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +57 -13
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-file-explorer.mjs +25 -25
- package/fesm2022/acorex-components-file-explorer.mjs.map +1 -1
- package/fesm2022/acorex-components-flow-chart.mjs +40 -16
- package/fesm2022/acorex-components-flow-chart.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +36 -17
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-grid-layout-builder.mjs +125 -15
- package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-image-editor.mjs +115 -92
- package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-image.mjs +7 -7
- package/fesm2022/acorex-components-image.mjs.map +1 -1
- package/fesm2022/acorex-components-json-viewer.mjs +8 -8
- package/fesm2022/acorex-components-json-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-kanban.mjs +11 -7
- package/fesm2022/acorex-components-kanban.mjs.map +1 -1
- package/fesm2022/acorex-components-kbd.mjs +21 -29
- package/fesm2022/acorex-components-kbd.mjs.map +1 -1
- package/fesm2022/acorex-components-label.mjs +11 -15
- package/fesm2022/acorex-components-label.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +17 -28
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading-dialog.mjs +58 -59
- package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-loading.mjs +84 -28
- package/fesm2022/acorex-components-loading.mjs.map +1 -1
- package/fesm2022/acorex-components-map.mjs +484 -112
- package/fesm2022/acorex-components-map.mjs.map +1 -1
- package/fesm2022/acorex-components-media-viewer.mjs +37 -37
- package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +67 -37
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/{acorex-components-modal-acorex-components-modal-C4zx7OP6.mjs → acorex-components-modal-acorex-components-modal-h5Y-qcbh.mjs} +117 -40
- package/fesm2022/acorex-components-modal-acorex-components-modal-h5Y-qcbh.mjs.map +1 -0
- package/fesm2022/acorex-components-modal-modal-content.component-B6tyMLdU.mjs +235 -0
- package/fesm2022/acorex-components-modal-modal-content.component-B6tyMLdU.mjs.map +1 -0
- package/fesm2022/acorex-components-modal.mjs +1 -1
- package/fesm2022/acorex-components-navbar.mjs +14 -10
- package/fesm2022/acorex-components-navbar.mjs.map +1 -1
- package/fesm2022/acorex-components-notification.mjs +31 -45
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box-2.mjs +18 -5
- package/fesm2022/acorex-components-number-box-2.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box.mjs +7 -7
- package/fesm2022/acorex-components-number-box.mjs.map +1 -1
- package/fesm2022/acorex-components-otp.mjs +14 -15
- package/fesm2022/acorex-components-otp.mjs.map +1 -1
- package/fesm2022/acorex-components-page.mjs +10 -10
- package/fesm2022/acorex-components-page.mjs.map +1 -1
- package/fesm2022/acorex-components-paint.mjs +68 -33
- package/fesm2022/acorex-components-paint.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +15 -18
- package/fesm2022/acorex-components-password-box.mjs.map +1 -1
- package/fesm2022/acorex-components-pdf-reader.mjs +7 -7
- package/fesm2022/acorex-components-pdf-reader.mjs.map +1 -1
- package/fesm2022/acorex-components-phone-box.mjs +44 -14
- package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
- package/fesm2022/acorex-components-picker.mjs +13 -13
- package/fesm2022/acorex-components-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs +13 -18
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +10 -10
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs +8 -8
- package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
- package/fesm2022/acorex-components-qrcode.mjs +7 -7
- package/fesm2022/acorex-components-qrcode.mjs.map +1 -1
- package/fesm2022/acorex-components-query-builder.mjs +7 -7
- package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-radio.mjs +7 -7
- package/fesm2022/acorex-components-radio.mjs.map +1 -1
- package/fesm2022/acorex-components-rail-navigation.mjs +26 -16
- package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +13 -9
- package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-rate-picker.mjs +7 -7
- package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-rest-api-generator.mjs +23 -23
- package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
- package/fesm2022/acorex-components-result.mjs +7 -7
- package/fesm2022/acorex-components-result.mjs.map +1 -1
- package/fesm2022/acorex-components-routing-progress.mjs +7 -7
- package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
- package/fesm2022/acorex-components-rrule.mjs +222 -102
- package/fesm2022/acorex-components-rrule.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler.mjs +1581 -167
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-scss.mjs +4 -4
- package/fesm2022/acorex-components-scss.mjs.map +1 -1
- package/fesm2022/acorex-components-search-box.mjs +7 -7
- package/fesm2022/acorex-components-search-box.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +70 -28
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list-2.mjs +12 -9
- package/fesm2022/acorex-components-selection-list-2.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +14 -11
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-side-menu.mjs +98 -43
- package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-skeleton.mjs +7 -7
- package/fesm2022/acorex-components-skeleton.mjs.map +1 -1
- package/fesm2022/acorex-components-slider.mjs +9 -9
- package/fesm2022/acorex-components-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-sliding-item.mjs +16 -16
- package/fesm2022/acorex-components-sliding-item.mjs.map +1 -1
- package/fesm2022/acorex-components-step-wizard.mjs +31 -32
- package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
- package/fesm2022/acorex-components-switch.mjs +12 -12
- package/fesm2022/acorex-components-switch.mjs.map +1 -1
- package/fesm2022/acorex-components-tabs.mjs +20 -15
- package/fesm2022/acorex-components-tabs.mjs.map +1 -1
- package/fesm2022/acorex-components-tag-box.mjs +47 -19
- package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
- package/fesm2022/acorex-components-tag.mjs +8 -8
- package/fesm2022/acorex-components-tag.mjs.map +1 -1
- package/fesm2022/acorex-components-text-area.mjs +8 -9
- package/fesm2022/acorex-components-text-area.mjs.map +1 -1
- package/fesm2022/acorex-components-text-box.mjs +22 -12
- package/fesm2022/acorex-components-text-box.mjs.map +1 -1
- package/fesm2022/acorex-components-time-duration.mjs +7 -7
- package/fesm2022/acorex-components-time-duration.mjs.map +1 -1
- package/fesm2022/acorex-components-time-line.mjs +13 -10
- package/fesm2022/acorex-components-time-line.mjs.map +1 -1
- package/fesm2022/acorex-components-toast.mjs +59 -14
- package/fesm2022/acorex-components-toast.mjs.map +1 -1
- package/fesm2022/acorex-components-toolbar.mjs +7 -7
- package/fesm2022/acorex-components-toolbar.mjs.map +1 -1
- package/fesm2022/acorex-components-tooltip.mjs +12 -11
- package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
- package/fesm2022/acorex-components-tree-view.mjs +12 -12
- package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
- package/fesm2022/acorex-components-uploader.mjs +252 -56
- package/fesm2022/acorex-components-uploader.mjs.map +1 -1
- package/fesm2022/acorex-components-video-player.mjs +7 -7
- package/fesm2022/acorex-components-video-player.mjs.map +1 -1
- package/fesm2022/acorex-components-wysiwyg.mjs +96 -60
- package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
- package/flow-chart/index.d.ts +24 -0
- package/form/index.d.ts +27 -13
- package/grid-layout-builder/index.d.ts +115 -4
- package/image/index.d.ts +4 -4
- package/image-editor/index.d.ts +16 -14
- package/json-viewer/index.d.ts +3 -3
- package/kanban/index.d.ts +7 -3
- package/kbd/index.d.ts +11 -11
- package/label/index.d.ts +1 -2
- package/list/index.d.ts +4 -14
- package/loading/index.d.ts +59 -6
- package/loading-dialog/index.d.ts +30 -19
- package/map/index.d.ts +95 -2
- package/menu/index.d.ts +38 -13
- package/modal/index.d.ts +47 -2
- package/navbar/index.d.ts +7 -3
- package/notification/index.d.ts +1 -8
- package/number-box-2/index.d.ts +1 -1
- package/otp/index.d.ts +1 -3
- package/package.json +43 -4
- package/paint/index.d.ts +42 -7
- package/password-box/index.d.ts +7 -10
- package/phone-box/index.d.ts +17 -16
- package/popover/index.d.ts +2 -2
- package/popup/index.d.ts +2 -2
- package/qrcode/index.d.ts +7 -7
- package/query-builder/index.d.ts +1 -1
- package/rail-navigation/index.d.ts +12 -3
- package/range-slider/index.d.ts +13 -13
- package/rate-picker/index.d.ts +5 -5
- package/rest-api-generator/index.d.ts +1 -1
- package/rrule/index.d.ts +40 -17
- package/scheduler/index.d.ts +541 -191
- package/search-box/index.d.ts +2 -2
- package/select-box/index.d.ts +13 -4
- package/selection-list-2/index.d.ts +3 -3
- package/side-menu/index.d.ts +24 -15
- package/sliding-item/index.d.ts +4 -5
- package/step-wizard/index.d.ts +10 -13
- package/switch/index.d.ts +0 -1
- package/tabs/index.d.ts +6 -1
- package/tag-box/index.d.ts +18 -2
- package/text-area/index.d.ts +1 -2
- package/text-box/index.d.ts +2 -0
- package/time-line/index.d.ts +3 -0
- package/toast/index.d.ts +45 -1
- package/tooltip/index.d.ts +2 -1
- package/uploader/index.d.ts +215 -5
- package/wysiwyg/index.d.ts +26 -5
- package/fesm2022/acorex-components-modal-acorex-components-modal-C4zx7OP6.mjs.map +0 -1
- package/fesm2022/acorex-components-modal-modal-content.component-DfhgA_WL.mjs +0 -218
- package/fesm2022/acorex-components-modal-modal-content.component-DfhgA_WL.mjs.map +0 -1
@@ -1,7 +1,7 @@
|
|
1
1
|
import { NXComponent, AXComponent } from '@acorex/cdk/common';
|
2
2
|
import { AXButtonComponent } from '@acorex/components/button';
|
3
3
|
import { AXCalendarComponent } from '@acorex/components/calendar';
|
4
|
-
import {
|
4
|
+
import { AXDecoratorIconComponent, AXDecoratorGenericComponent } from '@acorex/components/decorators';
|
5
5
|
import { AXPopoverComponent } from '@acorex/components/popover';
|
6
6
|
import { AXSelectBoxComponent } from '@acorex/components/select-box';
|
7
7
|
import { AXCalendarService } from '@acorex/core/date-time';
|
@@ -9,14 +9,14 @@ import { AXFormatService, AXFormatPipe } from '@acorex/core/format';
|
|
9
9
|
import { AXLocaleService } from '@acorex/core/locale';
|
10
10
|
import { AXTranslatorPipe, AXTranslationService } from '@acorex/core/translation';
|
11
11
|
import { AXUnsubscriber, AXHtmlUtil } from '@acorex/core/utils';
|
12
|
-
import { NgClass, AsyncPipe, isPlatformBrowser } from '@angular/common';
|
12
|
+
import { NgClass, AsyncPipe, NgTemplateOutlet, isPlatformBrowser } from '@angular/common';
|
13
13
|
import * as i0 from '@angular/core';
|
14
|
-
import { inject, signal, Injectable, DOCUMENT, input, computed, output, HostBinding, ViewEncapsulation, ChangeDetectionStrategy, Component,
|
14
|
+
import { inject, signal, Injectable, DOCUMENT, input, computed, output, HostBinding, ViewEncapsulation, ChangeDetectionStrategy, Component, viewChild, PLATFORM_ID, linkedSignal, model, effect, untracked, NgModule } from '@angular/core';
|
15
15
|
import * as i1 from '@angular/forms';
|
16
16
|
import { FormsModule } from '@angular/forms';
|
17
|
+
import { isEqual, orderBy } from 'lodash-es';
|
17
18
|
import { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';
|
18
19
|
import { AXTooltipDirective } from '@acorex/components/tooltip';
|
19
|
-
import { orderBy } from 'lodash-es';
|
20
20
|
|
21
21
|
class AXSchedulerService {
|
22
22
|
constructor() {
|
@@ -27,10 +27,15 @@ class AXSchedulerService {
|
|
27
27
|
this.BLOCK_DURATION_MINUTES = 30;
|
28
28
|
this.MILLISECONDS_PER_MINUTE = 60 * 1000;
|
29
29
|
this.MILLISECONDS_PER_DAY = this.HOURS_PER_DAY * this.MINUTES_PER_HOUR * this.MILLISECONDS_PER_MINUTE;
|
30
|
+
this.internalWeekend = signal([], ...(ngDevMode ? [{ debugName: "internalWeekend" }] : []));
|
30
31
|
this.internalHoliday = signal([], ...(ngDevMode ? [{ debugName: "internalHoliday" }] : []));
|
31
32
|
}
|
32
33
|
/**
|
33
34
|
* Checks if two appointments overlap in time.
|
35
|
+
*
|
36
|
+
* @param appointmentA - First appointment to check.
|
37
|
+
* @param appointmentB - Second appointment to check.
|
38
|
+
* @returns boolean - True if appointments overlap, false otherwise.
|
34
39
|
*/
|
35
40
|
doAppointmentsOverlap(appointmentA, appointmentB) {
|
36
41
|
if (!appointmentA?.startDate || !appointmentA.endDate || !appointmentB?.startDate || !appointmentB.endDate) {
|
@@ -45,6 +50,9 @@ class AXSchedulerService {
|
|
45
50
|
}
|
46
51
|
/**
|
47
52
|
* Calculates appointment duration in minutes.
|
53
|
+
*
|
54
|
+
* @param Appointment - The appointment to calculate duration for.
|
55
|
+
* @returns number - Duration in minutes.
|
48
56
|
*/
|
49
57
|
calculateDurationInMinutes(Appointment) {
|
50
58
|
if (!Appointment?.startDate || !Appointment.endDate)
|
@@ -53,15 +61,14 @@ class AXSchedulerService {
|
|
53
61
|
return Math.max(0, durationMillis / this.MILLISECONDS_PER_MINUTE);
|
54
62
|
}
|
55
63
|
/**
|
56
|
-
*
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
*
|
64
|
-
* for a given date time within the view context. Returns null if outside view.
|
64
|
+
* Gets the day index and block index for a given date time within the view context.
|
65
|
+
*
|
66
|
+
* @param dateTime - The date time to get block identifier for.
|
67
|
+
* @param viewStartDate - Start date of the view.
|
68
|
+
* @param startHour - Start hour of the view.
|
69
|
+
* @param endHour - End hour of the view (exclusive).
|
70
|
+
* @param viewTotalDays - Total days in the view (default: 1).
|
71
|
+
* @returns AXSchedulerBlockIdentifier | null - Block identifier or null if outside view.
|
65
72
|
*/
|
66
73
|
getBlockIdentifier(dateTime, viewStartDate, startHour, endHour, // Exclusive end hour
|
67
74
|
viewTotalDays = 1) {
|
@@ -93,7 +100,13 @@ class AXSchedulerService {
|
|
93
100
|
}
|
94
101
|
/**
|
95
102
|
* Groups appointments by the blocks they are ACTIVE in for a given view.
|
96
|
-
*
|
103
|
+
*
|
104
|
+
* @param singleDayAppointments - Array of appointment segments.
|
105
|
+
* @param viewStartDate - Start date of the view.
|
106
|
+
* @param startHour - Start hour of the view.
|
107
|
+
* @param endHour - End hour of the view.
|
108
|
+
* @param viewTotalDays - Total days in the view.
|
109
|
+
* @returns AXSchedulerActiveAppointmentsInBlock - Active appointments grouped by blocks.
|
97
110
|
*/
|
98
111
|
calculateActiveAppointmentsInBlock(singleDayAppointments, viewStartDate, startHour, endHour, viewTotalDays) {
|
99
112
|
const blocks = {};
|
@@ -157,7 +170,13 @@ class AXSchedulerService {
|
|
157
170
|
return blocks;
|
158
171
|
}
|
159
172
|
/**
|
160
|
-
* Calculates
|
173
|
+
* Calculates day view concurrency information for appointments.
|
174
|
+
*
|
175
|
+
* @param singleDayAppointments - Array of appointment segments.
|
176
|
+
* @param viewStartDate - Start date of the view.
|
177
|
+
* @param startHour - Start hour of the view.
|
178
|
+
* @param endHour - End hour of the view.
|
179
|
+
* @returns Map<any, { maxConcurrency: number; effectiveTotalColumns: number }> - Concurrency information map.
|
161
180
|
*/
|
162
181
|
calculateDayViewConcurrencyInfo(singleDayAppointments, // These are segments for the current day
|
163
182
|
viewStartDate, startHour, endHour) {
|
@@ -223,28 +242,12 @@ class AXSchedulerService {
|
|
223
242
|
return resultInfo;
|
224
243
|
}
|
225
244
|
/**
|
226
|
-
* Groups appointments by
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
return;
|
233
|
-
const startInfo = this.getBlockIdentifier(this.calendarService.create(appointment.startDate), viewStartDate, startHour, endHour, 7);
|
234
|
-
if (startInfo) {
|
235
|
-
const { dayIndex, blockIndex } = startInfo;
|
236
|
-
if (!blocks[dayIndex])
|
237
|
-
blocks[dayIndex] = {};
|
238
|
-
if (!blocks[dayIndex][blockIndex])
|
239
|
-
blocks[dayIndex][blockIndex] = [];
|
240
|
-
blocks[dayIndex][blockIndex].push(appointment);
|
241
|
-
}
|
242
|
-
});
|
243
|
-
return blocks;
|
244
|
-
}
|
245
|
-
/**
|
246
|
-
* Groups appointments by the day(s) they occur on within a given date range.
|
247
|
-
* Returns a Map where the key is the date string ('YYYY-MM-DD') and the value is an array of appointments.
|
245
|
+
* Groups appointments by day within a date range.
|
246
|
+
*
|
247
|
+
* @param appointments - Array of appointments.
|
248
|
+
* @param viewStartDate - Start date of the view.
|
249
|
+
* @param viewEndDate - End date of the view.
|
250
|
+
* @returns Map<string, AXSchedulerAppointment[]> - Appointments grouped by day.
|
248
251
|
*/
|
249
252
|
groupAppointmentsByDay(appointments, viewStartDate, // First day visible in the grid
|
250
253
|
viewEndDate) {
|
@@ -289,6 +292,12 @@ class AXSchedulerService {
|
|
289
292
|
});
|
290
293
|
return groupedAppointments;
|
291
294
|
}
|
295
|
+
/**
|
296
|
+
* Gets the day of week number for a given day name.
|
297
|
+
*
|
298
|
+
* @param dayName - The day name to get number for.
|
299
|
+
* @returns number - Day number (1-7, where 1 is Sunday).
|
300
|
+
*/
|
292
301
|
getDayOfWeekNumber(dayName) {
|
293
302
|
switch (dayName) {
|
294
303
|
case 'sunday':
|
@@ -310,6 +319,13 @@ class AXSchedulerService {
|
|
310
319
|
return 1;
|
311
320
|
}
|
312
321
|
}
|
322
|
+
/**
|
323
|
+
* Gets slot data for a given start date and view.
|
324
|
+
*
|
325
|
+
* @param startDate - Start date for the slot.
|
326
|
+
* @param view - View type.
|
327
|
+
* @returns { startDate: AXDateTime; endDate: AXDateTime; view: AXSchedulerView } - Slot data.
|
328
|
+
*/
|
313
329
|
getSlotData(startDate, view) {
|
314
330
|
let endDate;
|
315
331
|
switch (view) {
|
@@ -324,12 +340,20 @@ class AXSchedulerService {
|
|
324
340
|
case 'month':
|
325
341
|
case 'agenda':
|
326
342
|
case 'timeline-month':
|
343
|
+
case 'timeline-year':
|
327
344
|
startDate = startDate.startOf('day');
|
328
345
|
endDate = startDate.endOf('day');
|
329
346
|
break;
|
330
347
|
}
|
331
348
|
return { startDate, endDate, view };
|
332
349
|
}
|
350
|
+
/**
|
351
|
+
* Handles events for appointments and slots.
|
352
|
+
*
|
353
|
+
* @param event - The event to handle.
|
354
|
+
* @param eventOutputMap - Map of event outputs.
|
355
|
+
* @param eventType - Type of event ('appointment' or 'slot').
|
356
|
+
*/
|
333
357
|
handleEvent(event, eventOutputMap, eventType) {
|
334
358
|
const mouseEvent = event.nativeEvent;
|
335
359
|
mouseEvent.preventDefault();
|
@@ -347,7 +371,14 @@ class AXSchedulerService {
|
|
347
371
|
emitter.emit(event);
|
348
372
|
}
|
349
373
|
}
|
350
|
-
|
374
|
+
/**
|
375
|
+
* Calculates timeline layout for appointments.
|
376
|
+
*
|
377
|
+
* @param appt - The appointment to calculate layout for.
|
378
|
+
* @param viewStartHour - Start hour of the view.
|
379
|
+
* @param viewEndHour - End hour of the view.
|
380
|
+
* @returns { left: string; width: string } | null - Layout information or null.
|
381
|
+
*/
|
351
382
|
calculateTimelineLayout(
|
352
383
|
// `appt` here will be an AXSchedulerAppointmentSegmentType when called from TimelineDayView
|
353
384
|
appt, viewStartHour, // e.g., 8 for 8 AM
|
@@ -421,9 +452,14 @@ class AXSchedulerService {
|
|
421
452
|
};
|
422
453
|
}
|
423
454
|
/**
|
424
|
-
*
|
425
|
-
*
|
426
|
-
*
|
455
|
+
* Gets cloned appointment segment for a specific day.
|
456
|
+
*
|
457
|
+
* @param appointment - The appointment to clone.
|
458
|
+
* @param day - The day to get segment for.
|
459
|
+
* @param viewStartHour - Start hour of the view.
|
460
|
+
* @param viewEndHour - End hour of the view.
|
461
|
+
* @param isFullDayCellContext - Whether this is for full day cell context.
|
462
|
+
* @returns AXSchedulerAppointmentSegment | null - Cloned segment or null.
|
427
463
|
*/
|
428
464
|
getClonedAppointmentSegmentOnDay(appointment, // This is the ORIGINAL appointment
|
429
465
|
day, viewStartHour, viewEndHour, isFullDayCellContext = false) {
|
@@ -434,21 +470,12 @@ class AXSchedulerService {
|
|
434
470
|
const appointmentEndDate = this.calendarService.create(appointment.endDate);
|
435
471
|
if (appointment.allDay) {
|
436
472
|
const dayStartOf = day.clone().startOf('day');
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
originalStartDate: appointmentStartDate.date,
|
444
|
-
originalEndDate: appointmentEndDate.date,
|
445
|
-
isContinuationFromPreviousDay: false,
|
446
|
-
isContinuationToNextDay: appointmentEndDate.startOf('day').compare(dayStartOf, 'day') > 0,
|
447
|
-
originalAppointmentRef: appointment,
|
448
|
-
};
|
449
|
-
}
|
450
|
-
else if (appointmentStartDate.startOf('day').compare(dayStartOf, 'day') < 0 &&
|
451
|
-
appointmentEndDate.startOf('day').compare(dayStartOf, 'day') >= 0) {
|
473
|
+
const appointmentStartDay = appointmentStartDate.startOf('day');
|
474
|
+
const appointmentEndDay = appointmentEndDate.startOf('day');
|
475
|
+
// Check if the appointment overlaps with the current day
|
476
|
+
if (appointmentStartDay.compare(dayStartOf, 'day') <= 0 && appointmentEndDay.compare(dayStartOf, 'day') >= 0) {
|
477
|
+
const isContinuationFromPreviousDay = appointmentStartDay.compare(dayStartOf, 'day') < 0;
|
478
|
+
const isContinuationToNextDay = appointmentEndDay.compare(dayStartOf, 'day') > 0;
|
452
479
|
return {
|
453
480
|
...appointment,
|
454
481
|
startDate: dayStartOf.date,
|
@@ -456,8 +483,8 @@ class AXSchedulerService {
|
|
456
483
|
allDay: true,
|
457
484
|
originalStartDate: appointmentStartDate.date,
|
458
485
|
originalEndDate: appointmentEndDate.date,
|
459
|
-
isContinuationFromPreviousDay
|
460
|
-
isContinuationToNextDay
|
486
|
+
isContinuationFromPreviousDay,
|
487
|
+
isContinuationToNextDay,
|
461
488
|
originalAppointmentRef: appointment,
|
462
489
|
};
|
463
490
|
}
|
@@ -497,6 +524,12 @@ class AXSchedulerService {
|
|
497
524
|
originalAppointmentRef: appointment,
|
498
525
|
};
|
499
526
|
}
|
527
|
+
/**
|
528
|
+
* Gets the original appointment from a segment.
|
529
|
+
*
|
530
|
+
* @param item - Appointment or appointment segment.
|
531
|
+
* @returns AXSchedulerAppointment - The original appointment.
|
532
|
+
*/
|
500
533
|
getOriginalAppointment(item) {
|
501
534
|
const segment = item;
|
502
535
|
if (segment.originalAppointmentRef) {
|
@@ -504,22 +537,112 @@ class AXSchedulerService {
|
|
504
537
|
}
|
505
538
|
return item;
|
506
539
|
}
|
540
|
+
/**
|
541
|
+
* Checks if a date is a holiday.
|
542
|
+
*
|
543
|
+
* @param date - The date to check.
|
544
|
+
* @returns boolean - True if the date is a holiday.
|
545
|
+
*/
|
507
546
|
isHoliday(date) {
|
508
547
|
const globalHolidays = this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));
|
509
548
|
const internalHolidays = this.internalHoliday().some((d) => date.equal(d.date, 'day'));
|
510
549
|
return globalHolidays || internalHolidays;
|
511
550
|
}
|
551
|
+
/**
|
552
|
+
* Checks if a date is a weekend.
|
553
|
+
*
|
554
|
+
* @param date - The date to check.
|
555
|
+
* @param calendar - The calendar type to use.
|
556
|
+
* @returns boolean - True if the date is a weekend.
|
557
|
+
*/
|
512
558
|
isWeekend(date, calendar) {
|
513
|
-
const
|
514
|
-
|
559
|
+
const internalWeekend = this.internalWeekend();
|
560
|
+
const globalWeekend = this.calendarService.resolveCalendar(calendar).weekend;
|
561
|
+
if (internalWeekend.length === 0) {
|
562
|
+
return globalWeekend.includes(date.dayOfWeek - 1);
|
563
|
+
}
|
564
|
+
return this.internalWeekend().includes(date.dayOfWeek - 1);
|
565
|
+
}
|
566
|
+
/**
|
567
|
+
* Filters appointments by resources and unassigned appointments.
|
568
|
+
*
|
569
|
+
* @param appointments - Array of appointments to filter.
|
570
|
+
* @param resources - Array of resources.
|
571
|
+
* @param showUnassignedAppointments - Whether to show appointments without resources.
|
572
|
+
* @returns Map<any, AXSchedulerAppointment[]> - Appointments grouped by resource ID.
|
573
|
+
*/
|
574
|
+
filterAppointmentsByResources(appointments, resources, showUnassignedAppointments = true) {
|
575
|
+
const result = new Map();
|
576
|
+
if (!resources || resources.length === 0) {
|
577
|
+
// If no resources, return all appointments under a default key
|
578
|
+
result.set('default', appointments);
|
579
|
+
return result;
|
580
|
+
}
|
581
|
+
// Initialize result map with empty arrays for each resource
|
582
|
+
resources.forEach((resource) => {
|
583
|
+
result.set(resource.id, []);
|
584
|
+
});
|
585
|
+
// Add unassigned appointments key if needed
|
586
|
+
if (showUnassignedAppointments) {
|
587
|
+
result.set('unassigned', []);
|
588
|
+
}
|
589
|
+
// Group appointments by resource
|
590
|
+
appointments.forEach((appointment) => {
|
591
|
+
if (appointment.resourceId !== undefined && appointment.resourceId !== null) {
|
592
|
+
// Find matching resource using isEqual for proper comparison
|
593
|
+
let foundResource = false;
|
594
|
+
for (const [key, resourceAppointments] of result.entries()) {
|
595
|
+
if (key !== 'unassigned' && isEqual(key, appointment.resourceId)) {
|
596
|
+
resourceAppointments.push(appointment);
|
597
|
+
foundResource = true;
|
598
|
+
break;
|
599
|
+
}
|
600
|
+
}
|
601
|
+
if (!foundResource && showUnassignedAppointments) {
|
602
|
+
// If resource doesn't exist in the resources array, treat as unassigned
|
603
|
+
result.get('unassigned').push(appointment);
|
604
|
+
}
|
605
|
+
}
|
606
|
+
else if (showUnassignedAppointments) {
|
607
|
+
result.get('unassigned').push(appointment);
|
608
|
+
}
|
609
|
+
});
|
610
|
+
return result;
|
611
|
+
}
|
612
|
+
/**
|
613
|
+
* Gets appointments for a specific resource.
|
614
|
+
*
|
615
|
+
* @param appointments - Array of appointments.
|
616
|
+
* @param resourceId - The resource ID to filter by.
|
617
|
+
* @returns AXSchedulerAppointment[] - Filtered appointments.
|
618
|
+
*/
|
619
|
+
getAppointmentsForResource(appointments, resourceId) {
|
620
|
+
if (resourceId === 'unassigned') {
|
621
|
+
return appointments.filter((appointment) => appointment.resourceId === undefined || appointment.resourceId === null);
|
622
|
+
}
|
623
|
+
return appointments.filter((appointment) => isEqual(appointment.resourceId, resourceId));
|
515
624
|
}
|
516
|
-
|
517
|
-
|
625
|
+
/**
|
626
|
+
* Gets all resource IDs including unassigned if applicable.
|
627
|
+
*
|
628
|
+
* @param resources - Array of resources.
|
629
|
+
* @param showUnassignedAppointments - Whether to include unassigned appointments.
|
630
|
+
* @returns string[] - Array of resource IDs.
|
631
|
+
*/
|
632
|
+
getAllResourceIds(resources, showUnassignedAppointments = true) {
|
633
|
+
const resourceIds = resources.map((resource) => resource.id);
|
634
|
+
if (showUnassignedAppointments) {
|
635
|
+
resourceIds.push('unassigned');
|
636
|
+
}
|
637
|
+
return resourceIds;
|
638
|
+
}
|
639
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
640
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerService, providedIn: 'root' }); }
|
518
641
|
}
|
519
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
642
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerService, decorators: [{
|
520
643
|
type: Injectable,
|
521
644
|
args: [{
|
522
|
-
providedIn: 'root',
|
645
|
+
providedIn: 'root',
|
523
646
|
}]
|
524
647
|
}] });
|
525
648
|
|
@@ -664,23 +787,22 @@ class AXSchedulerAgendaViewComponent extends NXComponent {
|
|
664
787
|
get isReadonly() {
|
665
788
|
return this.readonly();
|
666
789
|
}
|
667
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
668
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXSchedulerAgendaViewComponent, isStandalone: true, selector: "ax-scheduler-agenda-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 }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, 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": "this.isReadonly" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-scheduler-agenda-container\">\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-agenda-view-container {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\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 >\n <div class=\"ax-scheduler-agenda-header-date-day\">\n <span\n class=\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n [axTooltipPlacement]=\"'top-start'\"\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-agenda-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n <div class=\"ax-scheduler-agenda-appointment-container\">\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ' (All Day)'\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n class=\"ax-scheduler-agenda-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <div class=\"ax-scheduler-agenda-appointment-time\">\n @if (segment.allDay) {\n <span>{{ '@acorex:dateTime.duration.all-day' | translate | async }}</span>\n } @else {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n <ax-title class=\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\">{{ segment.title }}</ax-title>\n <!-- Description could go here if needed -->\n <!-- @if (segment.description) {\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\n } -->\n @if (hasActions()) {\n <ax-icon\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n (click)=\"handleActionClick($event, segment)\"\n >\n </ax-icon>\n }\n </div>\n }\n @if (dayData.appointments.length === 0) {\n <div class=\"ax-scheduler-agenda-no-appointments\">\n {{ '@acorex:common.general.no-record' | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n</div>\n", styles: ["ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center;width:calc(100% - 7rem)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;justify-content:space-between;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:5rem;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{width:100%}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { 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 }); }
|
790
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerAgendaViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
791
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerAgendaViewComponent, isStandalone: true, selector: "ax-scheduler-agenda-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 }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, 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": "this.isReadonly" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-scheduler-agenda-container\">\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-agenda-view-container {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\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 >\n <div class=\"ax-scheduler-agenda-header-date-day\">\n <span\n class=\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n [axTooltipPlacement]=\"'top-start'\"\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-agenda-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n <div class=\"ax-scheduler-agenda-appointment-container\">\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ' (All Day)'\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n class=\"ax-scheduler-agenda-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <div class=\"ax-scheduler-agenda-appointment-time\">\n @if (segment.allDay) {\n <span>{{ '@acorex:dateTime.duration.all-day' | translate | async }}</span>\n } @else {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n <ax-title class=\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\">{{ segment.title }}</ax-title>\n <!-- Description could go here if needed -->\n <!-- @if (segment.description) {\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\n } -->\n @if (hasActions()) {\n <ax-icon\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n (click)=\"handleActionClick($event, segment)\"\n >\n </ax-icon>\n }\n </div>\n }\n @if (dayData.appointments.length === 0) {\n <div class=\"ax-scheduler-agenda-no-appointments\">\n {{ '@acorex:common.general.no-record' | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n</div>\n", styles: ["ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center;width:calc(100% - 7rem)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;justify-content:space-between;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:5rem;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{width:100%}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["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" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
669
792
|
}
|
670
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
793
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerAgendaViewComponent, decorators: [{
|
671
794
|
type: Component,
|
672
795
|
args: [{ selector: 'ax-scheduler-agenda-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
673
796
|
NgClass,
|
674
797
|
AsyncPipe,
|
675
798
|
AXFormatPipe,
|
676
|
-
AXDecoratorGenericComponent,
|
677
799
|
AXDragDirective,
|
678
|
-
AXDropZoneDirective,
|
679
800
|
AXTranslatorPipe,
|
680
801
|
AXTooltipDirective,
|
802
|
+
AXDropZoneDirective,
|
681
803
|
AXDecoratorIconComponent,
|
682
|
-
|
683
|
-
], providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], template: "<div class=\"ax-scheduler-agenda-container\">\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-agenda-view-container {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\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 >\n <div class=\"ax-scheduler-agenda-header-date-day\">\n <span\n class=\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n [axTooltipPlacement]=\"'top-start'\"\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-agenda-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n <div class=\"ax-scheduler-agenda-appointment-container\">\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ' (All Day)'\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n class=\"ax-scheduler-agenda-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <div class=\"ax-scheduler-agenda-appointment-time\">\n @if (segment.allDay) {\n <span>{{ '@acorex:dateTime.duration.all-day' | translate | async }}</span>\n } @else {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n <ax-title class=\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\">{{ segment.title }}</ax-title>\n <!-- Description could go here if needed -->\n <!-- @if (segment.description) {\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\n } -->\n @if (hasActions()) {\n <ax-icon\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n (click)=\"handleActionClick($event, segment)\"\n >\n </ax-icon>\n }\n </div>\n }\n @if (dayData.appointments.length === 0) {\n <div class=\"ax-scheduler-agenda-no-appointments\">\n {{ '@acorex:common.general.no-record' | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n</div>\n", styles: ["ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center;width:calc(100% - 7rem)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;justify-content:space-between;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:5rem;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{width:100%}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\n"] }]
|
804
|
+
AXDecoratorGenericComponent,
|
805
|
+
], providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], template: "<div class=\"ax-scheduler-agenda-container\">\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n [class.ax-state-today]=\"isToday(dayData.date)\"\n class=\"ax-scheduler-agenda-view-container {{\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\n }}\"\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 >\n <div class=\"ax-scheduler-agenda-header-date-day\">\n <span\n class=\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n [axTooltipPlacement]=\"'top-start'\"\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-agenda-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n <div class=\"ax-scheduler-agenda-appointment-container\">\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ' (All Day)'\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n class=\"ax-scheduler-agenda-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <div class=\"ax-scheduler-agenda-appointment-time\">\n @if (segment.allDay) {\n <span>{{ '@acorex:dateTime.duration.all-day' | translate | async }}</span>\n } @else {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n <ax-title class=\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\">{{ segment.title }}</ax-title>\n <!-- Description could go here if needed -->\n <!-- @if (segment.description) {\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\n } -->\n @if (hasActions()) {\n <ax-icon\n class=\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\"\n (click)=\"handleActionClick($event, segment)\"\n >\n </ax-icon>\n }\n </div>\n }\n @if (dayData.appointments.length === 0) {\n <div class=\"ax-scheduler-agenda-no-appointments\">\n {{ '@acorex:common.general.no-record' | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n</div>\n", styles: ["ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center;width:calc(100% - 7rem)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;justify-content:space-between;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:5rem;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{width:100%}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\n"] }]
|
684
806
|
}], propDecorators: { isReadonly: [{
|
685
807
|
type: HostBinding,
|
686
808
|
args: ['class.ax-state-readonly']
|
@@ -702,8 +824,11 @@ class AXSchedulerDayViewComponent extends NXComponent {
|
|
702
824
|
this.date = input.required(...(ngDevMode ? [{ debugName: "date" }] : []));
|
703
825
|
this.endDayHour = input.required(...(ngDevMode ? [{ debugName: "endDayHour" }] : []));
|
704
826
|
this.startDayHour = input.required(...(ngDevMode ? [{ debugName: "startDayHour" }] : []));
|
827
|
+
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
705
828
|
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
706
829
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
830
|
+
// ViewChild for current time line element
|
831
|
+
this.currentTimeLineElement = viewChild('currentTimeLine', ...(ngDevMode ? [{ debugName: "currentTimeLineElement" }] : []));
|
707
832
|
this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: "dragStartSlotId" }] : []));
|
708
833
|
this.processedAppointmentsForLayout = computed(() => {
|
709
834
|
const viewDate = this.date();
|
@@ -961,6 +1086,79 @@ class AXSchedulerDayViewComponent extends NXComponent {
|
|
961
1086
|
}
|
962
1087
|
return '0px';
|
963
1088
|
}
|
1089
|
+
getCurrentTimePosition() {
|
1090
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
1091
|
+
const dayStart = this.date().startOf('day');
|
1092
|
+
const dayEnd = this.date().endOf('day');
|
1093
|
+
const startHour = this.startDayHour();
|
1094
|
+
const endHour = this.endDayHour();
|
1095
|
+
// Check if current time is within the displayed day
|
1096
|
+
if (now.isBefore(dayStart) || now.isAfter(dayEnd)) {
|
1097
|
+
return null;
|
1098
|
+
}
|
1099
|
+
// Check if current time is within the visible hours
|
1100
|
+
if (now.hour < startHour || now.hour >= endHour) {
|
1101
|
+
return null;
|
1102
|
+
}
|
1103
|
+
// Calculate position as percentage within the visible time range
|
1104
|
+
const currentMinutes = now.hour * 60 + now.minute;
|
1105
|
+
const startMinutes = startHour * 60;
|
1106
|
+
const endMinutes = endHour * 60;
|
1107
|
+
const totalMinutes = endMinutes - startMinutes;
|
1108
|
+
const positionInMinutes = currentMinutes - startMinutes;
|
1109
|
+
return (positionInMinutes / totalMinutes) * 100;
|
1110
|
+
}
|
1111
|
+
getCurrentTimePositionWithOffset() {
|
1112
|
+
const position = this.getCurrentTimePosition();
|
1113
|
+
if (position === null) {
|
1114
|
+
return null;
|
1115
|
+
}
|
1116
|
+
// For day view, calculate the vertical position (top) for the horizontal line
|
1117
|
+
// based on the current time within the visible hours
|
1118
|
+
const currentMinutes = this.calendarService.create(new Date(), this.calendar()).hour * 60 +
|
1119
|
+
this.calendarService.create(new Date(), this.calendar()).minute;
|
1120
|
+
const startMinutes = this.startDayHour() * 60;
|
1121
|
+
const positionInMinutes = currentMinutes - startMinutes;
|
1122
|
+
const blockHeight = 30; // 30 minutes per block
|
1123
|
+
const blocksFromStart = positionInMinutes / blockHeight;
|
1124
|
+
return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${blocksFromStart} + 1px)`;
|
1125
|
+
}
|
1126
|
+
ngAfterViewInit() {
|
1127
|
+
// Auto-scroll to current time when available using ResizeObserver
|
1128
|
+
this.setupCurrentTimeScroll();
|
1129
|
+
}
|
1130
|
+
setupCurrentTimeScroll() {
|
1131
|
+
if (!this.showCurrentTimeIndicator()) {
|
1132
|
+
return undefined;
|
1133
|
+
}
|
1134
|
+
const currentPosition = this.getCurrentTimePosition();
|
1135
|
+
if (currentPosition === null) {
|
1136
|
+
return undefined;
|
1137
|
+
}
|
1138
|
+
const timeLineElement = this.currentTimeLineElement()?.nativeElement;
|
1139
|
+
if (!timeLineElement) {
|
1140
|
+
return undefined;
|
1141
|
+
}
|
1142
|
+
// Use ResizeObserver to detect when the element is properly rendered
|
1143
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
1144
|
+
for (const entry of entries) {
|
1145
|
+
if (entry.contentRect.width > 0 && entry.contentRect.height > 0) {
|
1146
|
+
// Element has proper dimensions, scroll to it
|
1147
|
+
timeLineElement.scrollIntoView({
|
1148
|
+
behavior: 'smooth',
|
1149
|
+
block: 'center',
|
1150
|
+
inline: 'nearest',
|
1151
|
+
});
|
1152
|
+
// Disconnect observer after successful scroll
|
1153
|
+
resizeObserver.disconnect();
|
1154
|
+
break;
|
1155
|
+
}
|
1156
|
+
}
|
1157
|
+
});
|
1158
|
+
resizeObserver.observe(timeLineElement);
|
1159
|
+
// Cleanup on component destroy
|
1160
|
+
return () => resizeObserver.disconnect();
|
1161
|
+
}
|
964
1162
|
getSlotId(e) {
|
965
1163
|
const dropListElement = this.document
|
966
1164
|
.elementsFromPoint(e.clientX, e.clientY)
|
@@ -970,23 +1168,23 @@ class AXSchedulerDayViewComponent extends NXComponent {
|
|
970
1168
|
get isReadonly() {
|
971
1169
|
return this.readonly();
|
972
1170
|
}
|
973
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
974
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXSchedulerDayViewComponent, isStandalone: true, selector: "ax-scheduler-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 }, 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 }, 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": "this.isReadonly" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], 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 [ngClass]=\"\n allDayAppointments()[0].cssClass ??\n `ax-scheduler-${allDayAppointments()[0].priority ?? 'primary'}-periority`\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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 [ngClass]=\"\n allDayAppointments()[1].cssClass ??\n `ax-scheduler-${allDayAppointments()[1].priority ?? 'primary'}-periority`\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-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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.startDate | format: 'date' : { calendar: calendar() } | async }}\n -\n {{ appointment.endDate | 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 <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 [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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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: ["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:3;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:3;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;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-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:2;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))}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:calc(100% - 2.5rem)}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-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}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
1171
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
1172
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerDayViewComponent, isStandalone: true, selector: "ax-scheduler-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 }, 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 } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "this.isReadonly" } }, 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 [ngClass]=\"\n allDayAppointments()[0].cssClass ??\n `ax-scheduler-${allDayAppointments()[0].priority ?? 'primary'}-periority`\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 [ngClass]=\"\n allDayAppointments()[1].cssClass ??\n `ax-scheduler-${allDayAppointments()[1].priority ?? 'primary'}-periority`\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-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\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.startDate | format: 'date' : { calendar: calendar() } | async }}\n -\n {{ appointment.endDate | 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 [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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\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: ["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:10;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;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-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:calc(100% - 2.5rem)}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-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-scheduler-current-time-line{left:0;right:0;height:2px}ax-scheduler-day-view .ax-scheduler-current-time-line:before{top:-5px;inset-inline-start:-6px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["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", "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 }); }
|
975
1173
|
}
|
976
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
1174
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerDayViewComponent, decorators: [{
|
977
1175
|
type: Component,
|
978
1176
|
args: [{ selector: 'ax-scheduler-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
979
1177
|
NgClass,
|
980
|
-
AXDecoratorGenericComponent,
|
981
1178
|
AsyncPipe,
|
982
|
-
AXTranslatorPipe,
|
983
|
-
AXPopoverComponent,
|
984
1179
|
AXFormatPipe,
|
985
1180
|
AXDragDirective,
|
1181
|
+
AXTranslatorPipe,
|
1182
|
+
AXPopoverComponent,
|
1183
|
+
AXTooltipDirective,
|
986
1184
|
AXDropZoneDirective,
|
987
1185
|
AXDecoratorIconComponent,
|
988
|
-
|
989
|
-
], providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], 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 [ngClass]=\"\n allDayAppointments()[0].cssClass ??\n `ax-scheduler-${allDayAppointments()[0].priority ?? 'primary'}-periority`\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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 [ngClass]=\"\n allDayAppointments()[1].cssClass ??\n `ax-scheduler-${allDayAppointments()[1].priority ?? 'primary'}-periority`\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-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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.startDate | format: 'date' : { calendar: calendar() } | async }}\n -\n {{ appointment.endDate | 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 <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 [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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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: ["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:3;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:3;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;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-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:2;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))}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:calc(100% - 2.5rem)}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-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}\n"] }]
|
1186
|
+
AXDecoratorGenericComponent,
|
1187
|
+
], providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], 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 [ngClass]=\"\n allDayAppointments()[0].cssClass ??\n `ax-scheduler-${allDayAppointments()[0].priority ?? 'primary'}-periority`\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 [ngClass]=\"\n allDayAppointments()[1].cssClass ??\n `ax-scheduler-${allDayAppointments()[1].priority ?? 'primary'}-periority`\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-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\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.startDate | format: 'date' : { calendar: calendar() } | async }}\n -\n {{ appointment.endDate | 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 [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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\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: ["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:10;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;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-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:calc(100% - 2.5rem)}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-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-scheduler-current-time-line{left:0;right:0;height:2px}ax-scheduler-day-view .ax-scheduler-current-time-line:before{top:-5px;inset-inline-start:-6px}\n"] }]
|
990
1188
|
}], propDecorators: { isReadonly: [{
|
991
1189
|
type: HostBinding,
|
992
1190
|
args: ['class.ax-state-readonly']
|
@@ -1219,24 +1417,22 @@ class AXSchedulerMonthViewComponent extends NXComponent {
|
|
1219
1417
|
get isReadonly() {
|
1220
1418
|
return this.readonly();
|
1221
1419
|
}
|
1222
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
1223
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXSchedulerMonthViewComponent, isStandalone: true, selector: "ax-scheduler-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 }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", 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 } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "this.isReadonly" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-scheduler-month-container\">\n <!-- Weekday Header -->\n <div class=\"ax-scheduler-month-weekdays\">\n @for (day of daysArray(); track day.date.getTime()) {\n <div class=\"ax-scheduler-month-weekday\">\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n </div>\n }\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"ax-scheduler-month-grid\" [style.gridTemplateRows]=\"gridTemplateRowsStyle()\">\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayCell.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleSlotEvent($event, dayCell.date)\"\n (dblclick)=\"handleSlotEvent($event, dayCell.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayCell.date)\"\n class=\"ax-scheduler-month-day-cell {{\n dayCell.isHoliday ? (dayCell.holidayCssClass ?? 'ax-state-holiday') : ''\n }}\"\n [class.ax-state-today]=\"dayCell.isToday\"\n [class.ax-other-month]=\"!dayCell.isCurrentMonth\"\n [attr.data-slot-id]=\"dayCell.date.format('YYYYMMDD')\"\n >\n <div class=\"ax-scheduler-month-day-header\">\n <span class=\"ax-scheduler-month-day-number ax-scheduler-truncate\" [axTooltip]=\"dayCell.holidayTitle ?? ''\">\n {{ dayCell.date.dayOfMonth }}\n\n @if (dayCell.holidayTitle) {\n ( {{ dayCell.holidayTitle }} )\n }\n </span>\n </div>\n <div class=\"ax-scheduler-month-day-appointments\">\n <!-- Visible Appointment Segments -->\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ''\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n [class.all-day-segment]=\"segment.allDay\"\n class=\"ax-scheduler-month-appointment-chip\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [class.continuation-to-next]=\"segment.isContinuationToNextDay && !segment.allDay\"\n [class.continuation-from-prev]=\"segment.isContinuationFromPreviousDay && !segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <span class=\"ax-appointment-chip-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 </span>\n @if (!segment.allDay) {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n }\n <!-- Overflow Badge and Popover -->\n @if (dayCell.overflowCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n <!-- Stop propagation to prevent slot click -->\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayCell.overflowCount } } | 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-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ''\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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <span class=\"ax-appointment-chip-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 </span>\n @if (!segment.allDay) {\n <span>\n {{\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', 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", styles: ["ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:2;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}ax-scheduler-month-view .ax-appointment-chip-title{display:flex;justify-content:space-between}ax-scheduler-month-view .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
1420
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
1421
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXSchedulerMonthViewComponent, isStandalone: true, selector: "ax-scheduler-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 }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: "appointments", publicName: "appointments", 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 } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "this.isReadonly" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-scheduler-month-container\">\n <!-- Weekday Header -->\n <div class=\"ax-scheduler-month-weekdays\">\n @for (day of daysArray(); track day.date.getTime()) {\n <div class=\"ax-scheduler-month-weekday\">\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n </div>\n }\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"ax-scheduler-month-grid\" [style.gridTemplateRows]=\"gridTemplateRowsStyle()\">\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayCell.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleSlotEvent($event, dayCell.date)\"\n (dblclick)=\"handleSlotEvent($event, dayCell.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayCell.date)\"\n class=\"ax-scheduler-month-day-cell {{\n dayCell.isHoliday ? (dayCell.holidayCssClass ?? 'ax-state-holiday') : ''\n }}\"\n [class.ax-state-today]=\"dayCell.isToday\"\n [class.ax-other-month]=\"!dayCell.isCurrentMonth\"\n [attr.data-slot-id]=\"dayCell.date.format('YYYYMMDD')\"\n >\n <div class=\"ax-scheduler-month-day-header\">\n <span class=\"ax-scheduler-month-day-number ax-scheduler-truncate\" [axTooltip]=\"dayCell.holidayTitle ?? ''\">\n {{ dayCell.date.dayOfMonth }}\n\n @if (dayCell.holidayTitle) {\n ( {{ dayCell.holidayTitle }} )\n }\n </span>\n </div>\n <div class=\"ax-scheduler-month-day-appointments\">\n <!-- Visible Appointment Segments -->\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ''\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n [class.all-day-segment]=\"segment.allDay\"\n class=\"ax-scheduler-month-appointment-chip\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [class.continuation-to-next]=\"segment.isContinuationToNextDay && !segment.allDay\"\n [class.continuation-from-prev]=\"segment.isContinuationFromPreviousDay && !segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <span class=\"ax-appointment-chip-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 </span>\n @if (!segment.allDay) {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n }\n <!-- Overflow Badge and Popover -->\n @if (dayCell.overflowCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n <!-- Stop propagation to prevent slot click -->\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayCell.overflowCount } } | 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-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ''\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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <span class=\"ax-appointment-chip-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 </span>\n @if (!segment.allDay) {\n <span>\n {{\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', 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", styles: ["ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:10;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}ax-scheduler-month-view .ax-appointment-chip-title{display:flex;justify-content:space-between}ax-scheduler-month-view .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["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", "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: "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 }); }
|
1224
1422
|
}
|
1225
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
1423
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerMonthViewComponent, decorators: [{
|
1226
1424
|
type: Component,
|
1227
1425
|
args: [{ selector: 'ax-scheduler-month-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
1228
1426
|
NgClass,
|
1229
1427
|
AsyncPipe,
|
1230
|
-
AXTranslatorPipe,
|
1231
|
-
AXPopoverComponent,
|
1232
1428
|
AXFormatPipe,
|
1233
|
-
AsyncPipe,
|
1234
1429
|
AXDragDirective,
|
1235
|
-
|
1430
|
+
AXTranslatorPipe,
|
1431
|
+
AXPopoverComponent,
|
1236
1432
|
AXTooltipDirective,
|
1433
|
+
AXDropZoneDirective,
|
1237
1434
|
AXDecoratorIconComponent,
|
1238
|
-
AXTooltipDirective,
|
1239
|
-
], providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], template: "<div class=\"ax-scheduler-month-container\">\n <!-- Weekday Header -->\n <div class=\"ax-scheduler-month-weekdays\">\n @for (day of daysArray(); track day.date.getTime()) {\n <div class=\"ax-scheduler-month-weekday\">\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n </div>\n }\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"ax-scheduler-month-grid\" [style.gridTemplateRows]=\"gridTemplateRowsStyle()\">\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayCell.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleSlotEvent($event, dayCell.date)\"\n (dblclick)=\"handleSlotEvent($event, dayCell.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayCell.date)\"\n class=\"ax-scheduler-month-day-cell {{\n dayCell.isHoliday ? (dayCell.holidayCssClass ?? 'ax-state-holiday') : ''\n }}\"\n [class.ax-state-today]=\"dayCell.isToday\"\n [class.ax-other-month]=\"!dayCell.isCurrentMonth\"\n [attr.data-slot-id]=\"dayCell.date.format('YYYYMMDD')\"\n >\n <div class=\"ax-scheduler-month-day-header\">\n <span class=\"ax-scheduler-month-day-number ax-scheduler-truncate\" [axTooltip]=\"dayCell.holidayTitle ?? ''\">\n {{ dayCell.date.dayOfMonth }}\n\n @if (dayCell.holidayTitle) {\n ( {{ dayCell.holidayTitle }} )\n }\n </span>\n </div>\n <div class=\"ax-scheduler-month-day-appointments\">\n <!-- Visible Appointment Segments -->\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ''\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n [class.all-day-segment]=\"segment.allDay\"\n class=\"ax-scheduler-month-appointment-chip\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [class.continuation-to-next]=\"segment.isContinuationToNextDay && !segment.allDay\"\n [class.continuation-from-prev]=\"segment.isContinuationFromPreviousDay && !segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <span class=\"ax-appointment-chip-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 </span>\n @if (!segment.allDay) {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n }\n <!-- Overflow Badge and Popover -->\n @if (dayCell.overflowCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n <!-- Stop propagation to prevent slot click -->\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayCell.overflowCount } } | 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-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ''\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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n >\n <span class=\"ax-appointment-chip-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 </span>\n @if (!segment.allDay) {\n <span>\n {{\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', 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", styles: ["ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:2;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}ax-scheduler-month-view .ax-appointment-chip-title{display:flex;justify-content:space-between}ax-scheduler-month-view .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\n"] }]
|
1435
|
+
], providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], template: "<div class=\"ax-scheduler-month-container\">\n <!-- Weekday Header -->\n <div class=\"ax-scheduler-month-weekdays\">\n @for (day of daysArray(); track day.date.getTime()) {\n <div class=\"ax-scheduler-month-weekday\">\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n </div>\n }\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"ax-scheduler-month-grid\" [style.gridTemplateRows]=\"gridTemplateRowsStyle()\">\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayCell.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleSlotEvent($event, dayCell.date)\"\n (dblclick)=\"handleSlotEvent($event, dayCell.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayCell.date)\"\n class=\"ax-scheduler-month-day-cell {{\n dayCell.isHoliday ? (dayCell.holidayCssClass ?? 'ax-state-holiday') : ''\n }}\"\n [class.ax-state-today]=\"dayCell.isToday\"\n [class.ax-other-month]=\"!dayCell.isCurrentMonth\"\n [attr.data-slot-id]=\"dayCell.date.format('YYYYMMDD')\"\n >\n <div class=\"ax-scheduler-month-day-header\">\n <span class=\"ax-scheduler-month-day-number ax-scheduler-truncate\" [axTooltip]=\"dayCell.holidayTitle ?? ''\">\n {{ dayCell.date.dayOfMonth }}\n\n @if (dayCell.holidayTitle) {\n ( {{ dayCell.holidayTitle }} )\n }\n </span>\n </div>\n <div class=\"ax-scheduler-month-day-appointments\">\n <!-- Visible Appointment Segments -->\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ''\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n [class.all-day-segment]=\"segment.allDay\"\n class=\"ax-scheduler-month-appointment-chip\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [class.continuation-to-next]=\"segment.isContinuationToNextDay && !segment.allDay\"\n [class.continuation-from-prev]=\"segment.isContinuationFromPreviousDay && !segment.allDay\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <span class=\"ax-appointment-chip-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 </span>\n @if (!segment.allDay) {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n }\n <!-- Overflow Badge and Popover -->\n @if (dayCell.overflowCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n <!-- Stop propagation to prevent slot click -->\n +{{\n '@acorex:common.general.more-items' | translate: { params: { number: dayCell.overflowCount } } | 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-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\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 (segment.allDay\n ? ''\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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\n [axTooltipContext]=\"segment\"\n >\n <span class=\"ax-appointment-chip-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 </span>\n @if (!segment.allDay) {\n <span>\n {{\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', 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", styles: ["ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:10;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}ax-scheduler-month-view .ax-appointment-chip-title{display:flex;justify-content:space-between}ax-scheduler-month-view .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\n"] }]
|
1240
1436
|
}], propDecorators: { isReadonly: [{
|
1241
1437
|
type: HostBinding,
|
1242
1438
|
args: ['class.ax-state-readonly']
|
@@ -1255,12 +1451,36 @@ class AXSchedulerTimelineDayViewComponent extends NXComponent {
|
|
1255
1451
|
this.hasActions = input(false, ...(ngDevMode ? [{ debugName: "hasActions" }] : []));
|
1256
1452
|
this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: "dragStartDelay" }] : []));
|
1257
1453
|
this.calendar = input(...(ngDevMode ? [undefined, { debugName: "calendar" }] : []));
|
1454
|
+
this.showResourceHeaders = input(true, ...(ngDevMode ? [{ debugName: "showResourceHeaders" }] : []));
|
1258
1455
|
this.date = input.required(...(ngDevMode ? [{ debugName: "date" }] : []));
|
1259
1456
|
this.endDayHour = input.required(...(ngDevMode ? [{ debugName: "endDayHour" }] : []));
|
1260
1457
|
this.startDayHour = input.required(...(ngDevMode ? [{ debugName: "startDayHour" }] : []));
|
1458
|
+
this.showUnassignedAppointments = input(true, ...(ngDevMode ? [{ debugName: "showUnassignedAppointments" }] : []));
|
1459
|
+
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : []));
|
1460
|
+
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
1461
|
+
this.resourceTemplate = input(...(ngDevMode ? [undefined, { debugName: "resourceTemplate" }] : []));
|
1261
1462
|
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
1262
1463
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
1263
1464
|
this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: "dragStartSlotId" }] : []));
|
1465
|
+
this.dragStartSlotResourceId = signal(null, ...(ngDevMode ? [{ debugName: "dragStartSlotResourceId" }] : []));
|
1466
|
+
this.currentTimeLineElement = viewChild('currentTimeLine', ...(ngDevMode ? [{ debugName: "currentTimeLineElement" }] : []));
|
1467
|
+
/**
|
1468
|
+
* Gets appointments grouped by resources for timeline view.
|
1469
|
+
*/
|
1470
|
+
this.appointmentsByResource = computed(() => {
|
1471
|
+
const allAppointments = this.appointments();
|
1472
|
+
const resources = this.resources();
|
1473
|
+
const showUnassigned = this.showUnassignedAppointments();
|
1474
|
+
return this.schedulerService.filterAppointmentsByResources(allAppointments, resources, showUnassigned);
|
1475
|
+
}, ...(ngDevMode ? [{ debugName: "appointmentsByResource" }] : []));
|
1476
|
+
/**
|
1477
|
+
* Gets all resource IDs including unassigned if applicable.
|
1478
|
+
*/
|
1479
|
+
this.resourceIds = computed(() => {
|
1480
|
+
const resources = this.resources();
|
1481
|
+
const showUnassigned = this.showUnassignedAppointments();
|
1482
|
+
return this.schedulerService.getAllResourceIds(resources, showUnassigned);
|
1483
|
+
}, ...(ngDevMode ? [{ debugName: "resourceIds" }] : []));
|
1264
1484
|
/**
|
1265
1485
|
* Processes original appointments to get segments relevant to this specific day and its viewable hours.
|
1266
1486
|
* Filters out original all-day events.
|
@@ -1276,6 +1496,26 @@ class AXSchedulerTimelineDayViewComponent extends NXComponent {
|
|
1276
1496
|
const segmentsOnThisDay = [];
|
1277
1497
|
for (const appt of allOriginalAppointments) {
|
1278
1498
|
if (appt.allDay) {
|
1499
|
+
// For all-day appointments, create a segment that spans the full day
|
1500
|
+
const dayStart = viewDate.startOf('day');
|
1501
|
+
const dayEnd = viewDate.endOf('day');
|
1502
|
+
// Check if the all-day appointment overlaps with this day
|
1503
|
+
const apptStart = this.calendarService.create(appt.startDate, this.calendar()).startOf('day');
|
1504
|
+
const apptEnd = this.calendarService.create(appt.endDate, this.calendar()).startOf('day');
|
1505
|
+
if (apptStart.compare(dayEnd, 'day') <= 0 && apptEnd.compare(dayStart, 'day') >= 0) {
|
1506
|
+
const allDaySegment = {
|
1507
|
+
...appt,
|
1508
|
+
startDate: dayStart.date,
|
1509
|
+
endDate: dayEnd.date,
|
1510
|
+
allDay: true,
|
1511
|
+
originalStartDate: appt.startDate,
|
1512
|
+
originalEndDate: appt.endDate,
|
1513
|
+
isContinuationFromPreviousDay: apptStart.compare(dayStart, 'day') < 0,
|
1514
|
+
isContinuationToNextDay: apptEnd.compare(dayStart, 'day') > 0,
|
1515
|
+
originalAppointmentRef: appt,
|
1516
|
+
};
|
1517
|
+
segmentsOnThisDay.push(allDaySegment);
|
1518
|
+
}
|
1279
1519
|
continue;
|
1280
1520
|
}
|
1281
1521
|
const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, viewConfigStartHour, viewConfigEndHour, false);
|
@@ -1385,7 +1625,7 @@ class AXSchedulerTimelineDayViewComponent extends NXComponent {
|
|
1385
1625
|
if (slotData)
|
1386
1626
|
this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');
|
1387
1627
|
}
|
1388
|
-
handleDrop(e, startDate) {
|
1628
|
+
handleDrop(e, startDate, resourceId) {
|
1389
1629
|
const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');
|
1390
1630
|
const droppedItem = e.dropped.dragData();
|
1391
1631
|
const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);
|
@@ -1394,12 +1634,19 @@ class AXSchedulerTimelineDayViewComponent extends NXComponent {
|
|
1394
1634
|
endDate: originalAppointment.endDate,
|
1395
1635
|
startDate: originalAppointment.startDate,
|
1396
1636
|
};
|
1637
|
+
// Convert 'unassigned' string to undefined for proper unassigned appointments
|
1638
|
+
const actualResourceId = resourceId === 'unassigned' ? undefined : resourceId;
|
1639
|
+
// Check if it's the same slot (same time AND same resource)
|
1640
|
+
const dragStartSlotId = this.dragStartSlotId();
|
1641
|
+
const dropSlotId = e.sender.element().dataset['slotId'];
|
1642
|
+
const dragStartResourceId = this.dragStartSlotResourceId();
|
1643
|
+
const isSameSlotDrop = dragStartSlotId === dropSlotId && dragStartResourceId === resourceId;
|
1397
1644
|
this.onAppointmentDropInternal.emit({
|
1398
1645
|
dropEvent: e,
|
1399
|
-
slot: slotData,
|
1646
|
+
slot: { ...slotData, resourceId: actualResourceId },
|
1400
1647
|
sender: this.scheduler,
|
1401
1648
|
appointment: appointmentRef,
|
1402
|
-
isSameSlotDrop
|
1649
|
+
isSameSlotDrop,
|
1403
1650
|
});
|
1404
1651
|
}
|
1405
1652
|
handleActionClick(event, appointmentItem) {
|
@@ -1411,30 +1658,246 @@ class AXSchedulerTimelineDayViewComponent extends NXComponent {
|
|
1411
1658
|
sender: this.scheduler,
|
1412
1659
|
});
|
1413
1660
|
}
|
1661
|
+
/**
|
1662
|
+
* Gets appointments for a specific resource.
|
1663
|
+
*/
|
1664
|
+
getAppointmentsForResource(resourceId) {
|
1665
|
+
const appointmentsByResource = this.appointmentsByResource();
|
1666
|
+
// Find the correct key in the Map using isEqual for proper comparison
|
1667
|
+
for (const [key, appointments] of appointmentsByResource.entries()) {
|
1668
|
+
if (key === 'unassigned' && resourceId === 'unassigned') {
|
1669
|
+
return appointments;
|
1670
|
+
}
|
1671
|
+
if (key !== 'unassigned' && isEqual(key, resourceId)) {
|
1672
|
+
return appointments;
|
1673
|
+
}
|
1674
|
+
}
|
1675
|
+
return [];
|
1676
|
+
}
|
1677
|
+
/**
|
1678
|
+
* Gets resource title by ID.
|
1679
|
+
*/
|
1680
|
+
getResourceTitle(resourceId) {
|
1681
|
+
if (resourceId === 'unassigned') {
|
1682
|
+
return 'Unassigned';
|
1683
|
+
}
|
1684
|
+
const resources = this.resources();
|
1685
|
+
const resource = resources.find((r) => isEqual(r.id, resourceId));
|
1686
|
+
return resource?.title || String(resourceId);
|
1687
|
+
}
|
1688
|
+
getResourceContext(resourceId) {
|
1689
|
+
const resources = this.resources();
|
1690
|
+
const resource = resources.find((r) => isEqual(r.id, resourceId));
|
1691
|
+
return resource || { id: resourceId, title: String(resourceId) };
|
1692
|
+
}
|
1693
|
+
getCurrentTimePosition() {
|
1694
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
1695
|
+
const dayStart = this.date().startOf('day');
|
1696
|
+
const dayEnd = this.date().endOf('day');
|
1697
|
+
const startHour = this.startDayHour();
|
1698
|
+
const endHour = this.endDayHour();
|
1699
|
+
// Check if current time is within the displayed day
|
1700
|
+
if (now.isBefore(dayStart) || now.isAfter(dayEnd)) {
|
1701
|
+
return null;
|
1702
|
+
}
|
1703
|
+
// Check if current time is within the visible hours
|
1704
|
+
if (now.hour < startHour || now.hour >= endHour) {
|
1705
|
+
return null;
|
1706
|
+
}
|
1707
|
+
// Calculate position as percentage within the visible time range
|
1708
|
+
const currentMinutes = now.hour * 60 + now.minute;
|
1709
|
+
const startMinutes = startHour * 60;
|
1710
|
+
const endMinutes = endHour * 60;
|
1711
|
+
const totalMinutes = endMinutes - startMinutes;
|
1712
|
+
const positionInMinutes = currentMinutes - startMinutes;
|
1713
|
+
return (positionInMinutes / totalMinutes) * 100;
|
1714
|
+
}
|
1715
|
+
getCurrentTimePositionWithOffset() {
|
1716
|
+
const position = this.getCurrentTimePosition();
|
1717
|
+
if (position === null) {
|
1718
|
+
return null;
|
1719
|
+
}
|
1720
|
+
if (this.showResourceHeaders() && this.resources().length > 0) {
|
1721
|
+
return `calc(${position}% + (${100 - position} * var(--ax-comp-scheduler-resource-header-width, 8rem)) / 100)`;
|
1722
|
+
}
|
1723
|
+
else {
|
1724
|
+
return `${position}%`;
|
1725
|
+
}
|
1726
|
+
}
|
1727
|
+
ngAfterViewInit() {
|
1728
|
+
// Auto-scroll to current time when available using ResizeObserver
|
1729
|
+
this.setupCurrentTimeScroll();
|
1730
|
+
}
|
1731
|
+
setupCurrentTimeScroll() {
|
1732
|
+
if (!this.showCurrentTimeIndicator()) {
|
1733
|
+
return undefined;
|
1734
|
+
}
|
1735
|
+
const currentPosition = this.getCurrentTimePosition();
|
1736
|
+
if (currentPosition === null) {
|
1737
|
+
return undefined;
|
1738
|
+
}
|
1739
|
+
const timeLineElement = this.currentTimeLineElement()?.nativeElement;
|
1740
|
+
if (!timeLineElement) {
|
1741
|
+
return undefined;
|
1742
|
+
}
|
1743
|
+
// Use ResizeObserver to detect when the element is properly rendered
|
1744
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
1745
|
+
for (const entry of entries) {
|
1746
|
+
if (entry.contentRect.width > 0 && entry.contentRect.height > 0) {
|
1747
|
+
// Element has proper dimensions, scroll to it
|
1748
|
+
timeLineElement.scrollIntoView({
|
1749
|
+
behavior: 'smooth',
|
1750
|
+
block: 'nearest',
|
1751
|
+
inline: 'center',
|
1752
|
+
});
|
1753
|
+
// Disconnect observer after successful scroll
|
1754
|
+
resizeObserver.disconnect();
|
1755
|
+
break;
|
1756
|
+
}
|
1757
|
+
}
|
1758
|
+
});
|
1759
|
+
resizeObserver.observe(timeLineElement);
|
1760
|
+
// Cleanup on component destroy
|
1761
|
+
return () => resizeObserver.disconnect();
|
1762
|
+
}
|
1763
|
+
/**
|
1764
|
+
* Gets appointment layouts for a specific resource with proper positioning.
|
1765
|
+
*/
|
1766
|
+
getAppointmentLayoutsForResource(resourceId) {
|
1767
|
+
const resourceAppointments = this.getAppointmentsForResource(resourceId);
|
1768
|
+
const viewDate = this.date();
|
1769
|
+
const viewConfigStartHour = this.startDayHour();
|
1770
|
+
const viewConfigEndHour = this.endDayHour();
|
1771
|
+
if (!viewDate || resourceAppointments.length === 0) {
|
1772
|
+
return [];
|
1773
|
+
}
|
1774
|
+
// Get segments for this specific resource
|
1775
|
+
const resourceSegments = [];
|
1776
|
+
for (const appt of resourceAppointments) {
|
1777
|
+
const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, viewConfigStartHour, viewConfigEndHour);
|
1778
|
+
if (segment) {
|
1779
|
+
resourceSegments.push(segment);
|
1780
|
+
}
|
1781
|
+
}
|
1782
|
+
const finalLayouts = [];
|
1783
|
+
const sortedAppointments = orderBy(resourceSegments, [(seg) => seg.startDate.getTime(), (seg) => seg.originalEndDate.getTime()], ['asc', 'desc']);
|
1784
|
+
const rowEndTimes = [];
|
1785
|
+
for (const segment of sortedAppointments) {
|
1786
|
+
const horizLayout = this.schedulerService.calculateTimelineLayout(segment, viewConfigStartHour, viewConfigEndHour);
|
1787
|
+
if (!horizLayout)
|
1788
|
+
continue;
|
1789
|
+
const segmentStartTime = this.calendarService.create(segment.startDate, this.calendar());
|
1790
|
+
const segmentEndTime = this.calendarService.create(segment.endDate, this.calendar());
|
1791
|
+
let assignedRowIndex = -1;
|
1792
|
+
for (let i = 0; i < rowEndTimes.length; i++) {
|
1793
|
+
if (segmentStartTime.compare(rowEndTimes[i], 'minute') >= 0) {
|
1794
|
+
assignedRowIndex = i;
|
1795
|
+
break;
|
1796
|
+
}
|
1797
|
+
}
|
1798
|
+
if (assignedRowIndex === -1) {
|
1799
|
+
assignedRowIndex = rowEndTimes.length;
|
1800
|
+
rowEndTimes.push(segmentEndTime);
|
1801
|
+
}
|
1802
|
+
else {
|
1803
|
+
rowEndTimes[assignedRowIndex] = segmentEndTime;
|
1804
|
+
}
|
1805
|
+
const layoutHeight = 'var(--ax-comp-scheduler-timeline-view-blocks-height)';
|
1806
|
+
const layoutLeft = horizLayout.left;
|
1807
|
+
const layoutWidth = `calc(${horizLayout.width} - ${this.GAP_PX}px)`;
|
1808
|
+
const layoutTop = `calc(${assignedRowIndex} * (${layoutHeight} + ${this.GAP_PX}px))`;
|
1809
|
+
finalLayouts.push({
|
1810
|
+
appointment: segment,
|
1811
|
+
layoutLeft,
|
1812
|
+
layoutWidth,
|
1813
|
+
layoutTop,
|
1814
|
+
layoutHeight,
|
1815
|
+
});
|
1816
|
+
}
|
1817
|
+
return finalLayouts;
|
1818
|
+
}
|
1819
|
+
/**
|
1820
|
+
* Calculates the height for a resource row based on its appointments.
|
1821
|
+
*/
|
1822
|
+
getResourceRowHeight(resourceId) {
|
1823
|
+
const layouts = this.getAppointmentLayoutsForResource(resourceId);
|
1824
|
+
if (layouts.length === 0) {
|
1825
|
+
// If no appointments, use minimum height (one appointment height)
|
1826
|
+
return 'var(--ax-comp-scheduler-basic-view-blocks-height)';
|
1827
|
+
}
|
1828
|
+
// Calculate the maximum number of overlapping rows needed
|
1829
|
+
const appointments = layouts.map((layout) => layout.appointment);
|
1830
|
+
const maxOverlappingRows = this.calculateMaxOverlappingRows(appointments);
|
1831
|
+
// Use CSS calc() to handle the height calculation with CSS variables
|
1832
|
+
return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${maxOverlappingRows} + ${this.GAP_PX}px * ${Math.max(0, maxOverlappingRows)})`;
|
1833
|
+
}
|
1834
|
+
/**
|
1835
|
+
* Calculates the maximum number of overlapping appointment rows needed.
|
1836
|
+
*/
|
1837
|
+
calculateMaxOverlappingRows(appointments) {
|
1838
|
+
if (appointments.length === 0)
|
1839
|
+
return 0;
|
1840
|
+
if (appointments.length === 1)
|
1841
|
+
return 1;
|
1842
|
+
// Sort appointments by start time, then by end time (descending)
|
1843
|
+
const sortedAppointments = [...appointments].sort((a, b) => {
|
1844
|
+
const startDiff = a.startDate.getTime() - b.startDate.getTime();
|
1845
|
+
if (startDiff !== 0)
|
1846
|
+
return startDiff;
|
1847
|
+
return b.endDate.getTime() - a.endDate.getTime(); // Longer appointments first
|
1848
|
+
});
|
1849
|
+
// Simulate the row assignment algorithm from the original layout
|
1850
|
+
const rowEndTimes = [];
|
1851
|
+
let maxRows = 0;
|
1852
|
+
for (const appointment of sortedAppointments) {
|
1853
|
+
let assignedRowIndex = -1;
|
1854
|
+
// Find the first available row
|
1855
|
+
for (let i = 0; i < rowEndTimes.length; i++) {
|
1856
|
+
if (appointment.startDate >= rowEndTimes[i]) {
|
1857
|
+
assignedRowIndex = i;
|
1858
|
+
break;
|
1859
|
+
}
|
1860
|
+
}
|
1861
|
+
// If no available row, create a new one
|
1862
|
+
if (assignedRowIndex === -1) {
|
1863
|
+
assignedRowIndex = rowEndTimes.length;
|
1864
|
+
rowEndTimes.push(appointment.endDate);
|
1865
|
+
}
|
1866
|
+
else {
|
1867
|
+
// Update the row's end time
|
1868
|
+
rowEndTimes[assignedRowIndex] = appointment.endDate;
|
1869
|
+
}
|
1870
|
+
// Track the maximum number of rows used
|
1871
|
+
maxRows = Math.max(maxRows, rowEndTimes.length);
|
1872
|
+
}
|
1873
|
+
return Math.max(maxRows, 1); // Minimum one row
|
1874
|
+
}
|
1414
1875
|
getSlotId(e) {
|
1415
1876
|
const dropListElement = this.document
|
1416
1877
|
.elementsFromPoint(e.clientX, e.clientY)
|
1417
1878
|
.find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);
|
1418
1879
|
this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);
|
1880
|
+
this.dragStartSlotResourceId.set(dropListElement ? dropListElement.dataset['resourceId'] : null);
|
1419
1881
|
}
|
1420
1882
|
get isReadonly() {
|
1421
1883
|
return this.readonly();
|
1422
1884
|
}
|
1423
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
1424
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.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 }, 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 }, 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": "this.isReadonly" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], usesInheritance: true, ngImport: i0, template: "<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 <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (layout of appointmentLayouts(); 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 [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [ngClass]=\"layout.appointment.cssClass ?? `ax-scheduler-${layout.appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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 {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\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", 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-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}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "pipe", type: AXFormatPipe, name: "format" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
1885
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
1886
|
+
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 }, 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": "this.isReadonly" } }, 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 [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [ngClass]=\"\n layout.appointment.cssClass ?? `ax-scheduler-${layout.appointment.priority ?? 'primary'}-periority`\n \"\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 [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [ngClass]=\"\n layout.appointment.cssClass ?? `ax-scheduler-${layout.appointment.priority ?? 'primary'}-periority`\n \"\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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["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 }); }
|
1425
1887
|
}
|
1426
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
1888
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, decorators: [{
|
1427
1889
|
type: Component,
|
1428
1890
|
args: [{ selector: 'ax-scheduler-timeline-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
1429
1891
|
NgClass,
|
1430
|
-
|
1431
|
-
AXFormatPipe,
|
1892
|
+
NgTemplateOutlet,
|
1432
1893
|
AsyncPipe,
|
1894
|
+
AXFormatPipe,
|
1433
1895
|
AXDragDirective,
|
1896
|
+
AXTooltipDirective,
|
1434
1897
|
AXDropZoneDirective,
|
1435
1898
|
AXDecoratorIconComponent,
|
1436
|
-
|
1437
|
-
], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], template: "<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 <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (layout of appointmentLayouts(); 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 [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [ngClass]=\"layout.appointment.cssClass ?? `ax-scheduler-${layout.appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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 {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\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", 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-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}\n"] }]
|
1899
|
+
AXDecoratorGenericComponent,
|
1900
|
+
], 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 [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [ngClass]=\"\n layout.appointment.cssClass ?? `ax-scheduler-${layout.appointment.priority ?? 'primary'}-periority`\n \"\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 [style.insetBlockStart]=\"layout.layoutTop\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [ngClass]=\"\n layout.appointment.cssClass ?? `ax-scheduler-${layout.appointment.priority ?? 'primary'}-periority`\n \"\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"] }]
|
1438
1901
|
}], propDecorators: { isReadonly: [{
|
1439
1902
|
type: HostBinding,
|
1440
1903
|
args: ['class.ax-state-readonly']
|
@@ -1453,14 +1916,23 @@ class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
1453
1916
|
this.hasActions = input(false, ...(ngDevMode ? [{ debugName: "hasActions" }] : []));
|
1454
1917
|
this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: "dragStartDelay" }] : []));
|
1455
1918
|
this.calendar = input(...(ngDevMode ? [undefined, { debugName: "calendar" }] : []));
|
1919
|
+
this.showResourceHeaders = input(true, ...(ngDevMode ? [{ debugName: "showResourceHeaders" }] : []));
|
1456
1920
|
this.date = input.required(...(ngDevMode ? [{ debugName: "date" }] : []));
|
1921
|
+
this.showUnassignedAppointments = input(true, ...(ngDevMode ? [{ debugName: "showUnassignedAppointments" }] : []));
|
1922
|
+
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : []));
|
1923
|
+
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
1924
|
+
this.resourceTemplate = input(...(ngDevMode ? [undefined, { debugName: "resourceTemplate" }] : []));
|
1457
1925
|
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
1458
1926
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
1459
1927
|
this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: "dragStartSlotId" }] : []));
|
1928
|
+
this.dragStartSlotResourceId = signal(null, ...(ngDevMode ? [{ debugName: "dragStartSlotResourceId" }] : []));
|
1929
|
+
this.currentTimeLineElement = viewChild('currentTimeLine', ...(ngDevMode ? [{ debugName: "currentTimeLineElement" }] : []));
|
1460
1930
|
this.processedDayData = computed(() => {
|
1461
1931
|
const allOriginalAppointments = this.appointments();
|
1462
1932
|
const monthStartDate = this.date().startOf('month');
|
1463
1933
|
const daysInMonth = monthStartDate.endOf('month').dayOfMonth;
|
1934
|
+
const resources = this.resources();
|
1935
|
+
const showUnassigned = this.showUnassignedAppointments();
|
1464
1936
|
if (!allOriginalAppointments) {
|
1465
1937
|
return Array.from({ length: daysInMonth }, (_, i) => {
|
1466
1938
|
const dayDate = monthStartDate.add('day', i);
|
@@ -1469,6 +1941,7 @@ class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
1469
1941
|
visibleAppointments: [],
|
1470
1942
|
hiddenAppointments: [],
|
1471
1943
|
moreCount: 0,
|
1944
|
+
appointmentsByResource: resources.length > 0 ? new Map() : undefined,
|
1472
1945
|
};
|
1473
1946
|
});
|
1474
1947
|
}
|
@@ -1494,12 +1967,35 @@ class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
1494
1967
|
], ['asc', 'asc', 'desc', 'asc']);
|
1495
1968
|
const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);
|
1496
1969
|
const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);
|
1970
|
+
// Handle resource grouping if resources are provided
|
1971
|
+
let appointmentsByResource;
|
1972
|
+
if (resources.length > 0) {
|
1973
|
+
appointmentsByResource = new Map();
|
1974
|
+
const resourceIds = this.schedulerService.getAllResourceIds(resources, showUnassigned);
|
1975
|
+
for (const resourceId of resourceIds) {
|
1976
|
+
// Filter segments by resource ID
|
1977
|
+
const resourceSegments = sortedSegments.filter((segment) => {
|
1978
|
+
if (resourceId === 'unassigned') {
|
1979
|
+
return segment.resourceId === undefined || segment.resourceId === null;
|
1980
|
+
}
|
1981
|
+
return isEqual(segment.resourceId, resourceId);
|
1982
|
+
});
|
1983
|
+
const resourceVisible = resourceSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);
|
1984
|
+
const resourceHidden = resourceSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);
|
1985
|
+
appointmentsByResource.set(resourceId, {
|
1986
|
+
visible: resourceVisible,
|
1987
|
+
hidden: resourceHidden,
|
1988
|
+
moreCount: resourceHidden.length,
|
1989
|
+
});
|
1990
|
+
}
|
1991
|
+
}
|
1497
1992
|
result.push({
|
1498
1993
|
date: currentDayDate,
|
1499
1994
|
visibleAppointments: visibleAppointments,
|
1500
1995
|
hiddenAppointments: hiddenAppointments,
|
1501
1996
|
moreCount: hiddenAppointments.length,
|
1502
1997
|
holiday: this.isHoliday(currentDayDate),
|
1998
|
+
appointmentsByResource,
|
1503
1999
|
});
|
1504
2000
|
}
|
1505
2001
|
return result;
|
@@ -1526,6 +2022,23 @@ class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
1526
2022
|
contextmenu: this.appointmentRightClickedInternal,
|
1527
2023
|
},
|
1528
2024
|
};
|
2025
|
+
/**
|
2026
|
+
* Gets appointments grouped by resources for timeline view.
|
2027
|
+
*/
|
2028
|
+
this.appointmentsByResource = computed(() => {
|
2029
|
+
const allAppointments = this.appointments();
|
2030
|
+
const resources = this.resources();
|
2031
|
+
const showUnassigned = this.showUnassignedAppointments();
|
2032
|
+
return this.schedulerService.filterAppointmentsByResources(allAppointments, resources, showUnassigned);
|
2033
|
+
}, ...(ngDevMode ? [{ debugName: "appointmentsByResource" }] : []));
|
2034
|
+
/**
|
2035
|
+
* Gets all resource IDs including unassigned if applicable.
|
2036
|
+
*/
|
2037
|
+
this.resourceIds = computed(() => {
|
2038
|
+
const resources = this.resources();
|
2039
|
+
const showUnassigned = this.showUnassignedAppointments();
|
2040
|
+
return this.schedulerService.getAllResourceIds(resources, showUnassigned);
|
2041
|
+
}, ...(ngDevMode ? [{ debugName: "resourceIds" }] : []));
|
1529
2042
|
}
|
1530
2043
|
handleAppointmentEvent(mouseEvent, appointmentItem) {
|
1531
2044
|
const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);
|
@@ -1542,7 +2055,7 @@ class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
1542
2055
|
if (slotData)
|
1543
2056
|
this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');
|
1544
2057
|
}
|
1545
|
-
handleDrop(e, date) {
|
2058
|
+
handleDrop(e, date, resourceId) {
|
1546
2059
|
// date is the specific day
|
1547
2060
|
const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');
|
1548
2061
|
const droppedItem = e.dropped.dragData();
|
@@ -1552,12 +2065,19 @@ class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
1552
2065
|
endDate: originalAppointment.endDate,
|
1553
2066
|
startDate: originalAppointment.startDate,
|
1554
2067
|
};
|
2068
|
+
// Convert 'unassigned' string to undefined for proper unassigned appointments
|
2069
|
+
const actualResourceId = resourceId === 'unassigned' ? undefined : resourceId;
|
2070
|
+
// Check if it's the same slot (same time AND same resource)
|
2071
|
+
const dragStartSlotId = this.dragStartSlotId();
|
2072
|
+
const dropSlotId = e.sender.element().dataset['slotId'];
|
2073
|
+
const dragStartResourceId = this.dragStartSlotResourceId();
|
2074
|
+
const isSameSlotDrop = dragStartSlotId === dropSlotId && dragStartResourceId === resourceId;
|
1555
2075
|
this.onAppointmentDropInternal.emit({
|
1556
2076
|
dropEvent: e,
|
1557
|
-
slot: slotData,
|
2077
|
+
slot: { ...slotData, resourceId: actualResourceId },
|
1558
2078
|
sender: this.scheduler,
|
1559
2079
|
appointment: appointmentRef,
|
1560
|
-
isSameSlotDrop
|
2080
|
+
isSameSlotDrop,
|
1561
2081
|
});
|
1562
2082
|
}
|
1563
2083
|
handleActionClick(event, appointmentItem) {
|
@@ -1590,32 +2110,178 @@ class AXSchedulerTimelineMonthViewComponent extends NXComponent {
|
|
1590
2110
|
}
|
1591
2111
|
return { state: 'none' };
|
1592
2112
|
}
|
2113
|
+
/**
|
2114
|
+
* Gets appointments for a specific resource.
|
2115
|
+
*/
|
2116
|
+
getAppointmentsForResource(resourceId) {
|
2117
|
+
const appointmentsByResource = this.appointmentsByResource();
|
2118
|
+
// Find the correct key in the Map using isEqual for proper comparison
|
2119
|
+
for (const [key, appointments] of appointmentsByResource.entries()) {
|
2120
|
+
if (key === 'unassigned' && resourceId === 'unassigned') {
|
2121
|
+
return appointments;
|
2122
|
+
}
|
2123
|
+
if (key !== 'unassigned' && isEqual(key, resourceId)) {
|
2124
|
+
return appointments;
|
2125
|
+
}
|
2126
|
+
}
|
2127
|
+
return [];
|
2128
|
+
}
|
2129
|
+
/**
|
2130
|
+
* Gets resource title by ID.
|
2131
|
+
*/
|
2132
|
+
getResourceTitle(resourceId) {
|
2133
|
+
if (resourceId === 'unassigned') {
|
2134
|
+
return 'Unassigned';
|
2135
|
+
}
|
2136
|
+
const resources = this.resources();
|
2137
|
+
const resource = resources.find((r) => isEqual(r.id, resourceId));
|
2138
|
+
return resource?.title || String(resourceId);
|
2139
|
+
}
|
2140
|
+
getResourceContext(resourceId) {
|
2141
|
+
const resources = this.resources();
|
2142
|
+
const resource = resources.find((r) => isEqual(r.id, resourceId));
|
2143
|
+
return resource || { id: resourceId, title: String(resourceId) };
|
2144
|
+
}
|
2145
|
+
getCurrentTimePosition() {
|
2146
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
2147
|
+
const monthStart = this.date().startOf('month');
|
2148
|
+
const monthEnd = this.date().endOf('month');
|
2149
|
+
// Check if current time is within the displayed month
|
2150
|
+
if (now.isBefore(monthStart) || now.isAfter(monthEnd)) {
|
2151
|
+
return null;
|
2152
|
+
}
|
2153
|
+
// Calculate position as percentage of the month
|
2154
|
+
const durationFromStart = now.duration(monthStart);
|
2155
|
+
const totalDuration = monthEnd.duration(monthStart);
|
2156
|
+
return (durationFromStart.total.days / totalDuration.total.days) * 100;
|
2157
|
+
}
|
2158
|
+
ngAfterViewInit() {
|
2159
|
+
// Auto-scroll to current time when available using ResizeObserver
|
2160
|
+
this.setupCurrentTimeScroll();
|
2161
|
+
}
|
2162
|
+
setupCurrentTimeScroll() {
|
2163
|
+
const currentPosition = this.getCurrentTimePosition();
|
2164
|
+
if (currentPosition === null) {
|
2165
|
+
return undefined;
|
2166
|
+
}
|
2167
|
+
const timeLineElement = this.currentTimeLineElement()?.nativeElement;
|
2168
|
+
if (!timeLineElement) {
|
2169
|
+
return undefined;
|
2170
|
+
}
|
2171
|
+
// Use ResizeObserver to detect when the element is properly rendered
|
2172
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
2173
|
+
for (const entry of entries) {
|
2174
|
+
if (entry.contentRect.width > 0 && entry.contentRect.height > 0) {
|
2175
|
+
// Element has proper dimensions, scroll to it
|
2176
|
+
timeLineElement.scrollIntoView({
|
2177
|
+
behavior: 'smooth',
|
2178
|
+
block: 'nearest',
|
2179
|
+
inline: 'center',
|
2180
|
+
});
|
2181
|
+
// Disconnect observer after successful scroll
|
2182
|
+
resizeObserver.disconnect();
|
2183
|
+
break;
|
2184
|
+
}
|
2185
|
+
}
|
2186
|
+
});
|
2187
|
+
resizeObserver.observe(timeLineElement);
|
2188
|
+
// Cleanup on component destroy
|
2189
|
+
return () => resizeObserver.disconnect();
|
2190
|
+
}
|
2191
|
+
/**
|
2192
|
+
* Gets appointments for a specific resource and day.
|
2193
|
+
*/
|
2194
|
+
getAppointmentsForResourceAndDay(resourceId, dayData) {
|
2195
|
+
if (!dayData.appointmentsByResource) {
|
2196
|
+
return { visible: [], hidden: [], moreCount: 0 };
|
2197
|
+
}
|
2198
|
+
return dayData.appointmentsByResource.get(resourceId) || { visible: [], hidden: [], moreCount: 0 };
|
2199
|
+
}
|
1593
2200
|
getSlotId(e) {
|
1594
2201
|
const dropListElement = this.document
|
1595
2202
|
.elementsFromPoint(e.clientX, e.clientY)
|
1596
2203
|
.find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);
|
1597
2204
|
this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);
|
2205
|
+
this.dragStartSlotResourceId.set(dropListElement ? dropListElement.dataset['resourceId'] : null);
|
2206
|
+
}
|
2207
|
+
/**
|
2208
|
+
* Gets the height for a specific resource row based on appointments.
|
2209
|
+
*/
|
2210
|
+
getResourceRowHeight(resourceId) {
|
2211
|
+
const dayData = this.processedDayData();
|
2212
|
+
let maxAppointments = 0;
|
2213
|
+
let hasMoreLink = false;
|
2214
|
+
// Find the maximum number of visible appointments for this resource across all days
|
2215
|
+
// Only consider visible appointments, not hidden ones
|
2216
|
+
for (const day of dayData) {
|
2217
|
+
const resourceAppointments = this.getAppointmentsForResourceAndDay(resourceId, day);
|
2218
|
+
maxAppointments = Math.max(maxAppointments, resourceAppointments.visible.length);
|
2219
|
+
// Check if any day has hidden appointments (more link)
|
2220
|
+
if (resourceAppointments.moreCount > 0) {
|
2221
|
+
hasMoreLink = true;
|
2222
|
+
}
|
2223
|
+
}
|
2224
|
+
if (maxAppointments === 0) {
|
2225
|
+
// If no appointments, use minimum height (one appointment height)
|
2226
|
+
return 'var(--ax-comp-scheduler-basic-view-blocks-height)';
|
2227
|
+
}
|
2228
|
+
// Use CSS calc with CSS variables for dynamic height calculation
|
2229
|
+
// Formula: (appointments * appointment-height) + (gaps) + (more-link if present)
|
2230
|
+
const appointmentHeight = 'var(--ax-comp-scheduler-timeline-month-appointment-height, 3rem)';
|
2231
|
+
const gapHeight = 'var(--ax-comp-scheduler-timeline-month-gap-height, 0.125rem)';
|
2232
|
+
const moreLinkHeight = 'var(--ax-comp-scheduler-timeline-month-more-link-height, 2.5rem)';
|
2233
|
+
if (hasMoreLink) {
|
2234
|
+
// If there are hidden appointments, add space for the more link
|
2235
|
+
return `calc(${maxAppointments} * ${appointmentHeight} + ${maxAppointments - 1} * ${gapHeight} + ${moreLinkHeight})`;
|
2236
|
+
}
|
2237
|
+
else {
|
2238
|
+
// No more link needed
|
2239
|
+
return `calc(${maxAppointments} * ${appointmentHeight} + ${maxAppointments - 1} * ${gapHeight})`;
|
2240
|
+
}
|
2241
|
+
}
|
2242
|
+
/**
|
2243
|
+
* Calculates the maximum number of overlapping appointment rows needed.
|
2244
|
+
* This is a simplified version for timeline month view.
|
2245
|
+
*/
|
2246
|
+
calculateMaxOverlappingRows(appointments) {
|
2247
|
+
if (appointments.length === 0)
|
2248
|
+
return 1;
|
2249
|
+
// For timeline month view, we'll use a simple approach
|
2250
|
+
// Each appointment takes one row, so the max overlapping rows is just the count
|
2251
|
+
return Math.max(1, appointments.length);
|
2252
|
+
}
|
2253
|
+
shouldShowCurrentTimeForDay(dayDate) {
|
2254
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
2255
|
+
const monthStart = this.date().startOf('month');
|
2256
|
+
const monthEnd = this.date().endOf('month');
|
2257
|
+
// Check if current time is within the displayed month range
|
2258
|
+
if (now.isBefore(monthStart) || now.isAfter(monthEnd)) {
|
2259
|
+
return false;
|
2260
|
+
}
|
2261
|
+
// Check if current time is on the same day as this day column
|
2262
|
+
return now.isSame(dayDate, 'day');
|
1598
2263
|
}
|
1599
2264
|
get isReadonly() {
|
1600
2265
|
return this.readonly();
|
1601
2266
|
}
|
1602
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
1603
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.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 }, date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: true, 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": "this.isReadonly" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], usesInheritance: true, ngImport: i0, template: "<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 >\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.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-timeline-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\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 <!-- Display segment's start/end times if not allDay for this segment -->\n @if (!segment.allDay) {\n <ax-subtitle>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n }\n </div>\n }\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{ '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async }}\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-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (segment of dayData.hiddenAppointments; 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 (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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\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 <ax-subtitle>\n {{\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n }\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n</div>\n", styles: ["ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}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;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:.125rem .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))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;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)}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: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}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "pipe", type: AXFormatPipe, name: "format" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
2267
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
2268
|
+
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 }, 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": "this.isReadonly" } }, 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-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 >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() && shouldShowCurrentTimeForDay(dayData.date) && 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.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | 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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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 <!-- Display segment's start/end times or date range -->\n <ax-subtitle>\n @if (segment.allDay) {\n {{ segment.originalStartDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async }}\n }\n } @else {\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n }\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-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (segment of dayData.hiddenAppointments; 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 (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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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 </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\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 class=\"ax-scheduler-timeline-month-resource-row\" [style.height]=\"getResourceRowHeight(resourceId)\">\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 @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 >\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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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-overlay-pane 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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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: ["ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}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:.125rem .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))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;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)}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{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));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{min-height:0;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;min-height:3.313rem;display:flex}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-right: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-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header.ax-scheduler-timeline-month-resource-header-sticky{position:sticky;left: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}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{flex:1;display:flex;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))}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;height:100%;overflow:hidden;width:100%;padding-inline:.25rem;padding-block:.125rem}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%;height:var(--ax-comp-scheduler-timeline-month-appointment-height, 3rem);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}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;height:var(--ax-comp-scheduler-timeline-month-more-link-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-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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["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", "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 }); }
|
1604
2269
|
}
|
1605
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
2270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, decorators: [{
|
1606
2271
|
type: Component,
|
1607
2272
|
args: [{ selector: 'ax-scheduler-timeline-month-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
1608
2273
|
NgClass,
|
1609
|
-
|
1610
|
-
AXFormatPipe,
|
2274
|
+
NgTemplateOutlet,
|
1611
2275
|
AsyncPipe,
|
2276
|
+
AXFormatPipe,
|
2277
|
+
AXDragDirective,
|
1612
2278
|
AXTranslatorPipe,
|
1613
2279
|
AXPopoverComponent,
|
1614
|
-
AXDragDirective,
|
1615
|
-
AXDropZoneDirective,
|
1616
2280
|
AXTooltipDirective,
|
2281
|
+
AXDropZoneDirective,
|
1617
2282
|
AXDecoratorIconComponent,
|
1618
|
-
], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], template: "<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 >\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.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-timeline-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\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 <!-- Display segment's start/end times if not allDay for this segment -->\n @if (!segment.allDay) {\n <ax-subtitle>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n }\n </div>\n }\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{ '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async }}\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-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (segment of dayData.hiddenAppointments; 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 (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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\n [axTooltip]=\"tooltipTemplate()\"\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 <ax-subtitle>\n {{\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n }\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n</div>\n", styles: ["ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}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;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:.125rem .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))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;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)}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: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}\n"] }]
|
2283
|
+
AXDecoratorGenericComponent,
|
2284
|
+
], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\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 >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() && shouldShowCurrentTimeForDay(dayData.date) && 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.allDay\n ? segment.title +\n ' (' +\n (segment.originalStartDate\n | format: 'date' : { format: 'MMM d', calendar: calendar() }\n | async) +\n ' - ' +\n (segment.originalEndDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | 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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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 <!-- Display segment's start/end times or date range -->\n <ax-subtitle>\n @if (segment.allDay) {\n {{ segment.originalStartDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async }}\n }\n } @else {\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n }\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-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (segment of dayData.hiddenAppointments; 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 (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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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 </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\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 class=\"ax-scheduler-timeline-month-resource-row\" [style.height]=\"getResourceRowHeight(resourceId)\">\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 @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 >\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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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-overlay-pane 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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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: ["ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}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:.125rem .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))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;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)}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{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));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{min-height:0;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;min-height:3.313rem;display:flex}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-right: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-resource-rows .ax-scheduler-timeline-month-resource-row .ax-scheduler-timeline-month-resource-header.ax-scheduler-timeline-month-resource-header-sticky{position:sticky;left: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}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{flex:1;display:flex;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))}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;height:100%;overflow:hidden;width:100%;padding-inline:.25rem;padding-block:.125rem}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%;height:var(--ax-comp-scheduler-timeline-month-appointment-height, 3rem);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}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;height:var(--ax-comp-scheduler-timeline-month-more-link-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-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"] }]
|
1619
2285
|
}], propDecorators: { isReadonly: [{
|
1620
2286
|
type: HostBinding,
|
1621
2287
|
args: ['class.ax-state-readonly']
|
@@ -1632,11 +2298,17 @@ class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {
|
|
1632
2298
|
this.hasActions = input(false, ...(ngDevMode ? [{ debugName: "hasActions" }] : []));
|
1633
2299
|
this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: "dragStartDelay" }] : []));
|
1634
2300
|
this.calendar = input(...(ngDevMode ? [undefined, { debugName: "calendar" }] : []));
|
2301
|
+
this.showResourceHeaders = input(true, ...(ngDevMode ? [{ debugName: "showResourceHeaders" }] : []));
|
1635
2302
|
this.date = input.required(...(ngDevMode ? [{ debugName: "date" }] : []));
|
1636
2303
|
this.endDayHour = input.required(...(ngDevMode ? [{ debugName: "endDayHour" }] : []));
|
2304
|
+
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
1637
2305
|
this.startDayHour = input.required(...(ngDevMode ? [{ debugName: "startDayHour" }] : []));
|
2306
|
+
this.showUnassignedAppointments = input(true, ...(ngDevMode ? [{ debugName: "showUnassignedAppointments" }] : []));
|
2307
|
+
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : []));
|
2308
|
+
this.resourceTemplate = input(...(ngDevMode ? [undefined, { debugName: "resourceTemplate" }] : []));
|
1638
2309
|
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
1639
2310
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
2311
|
+
this.currentTimeLineElement = viewChild('currentTimeLine', ...(ngDevMode ? [{ debugName: "currentTimeLineElement" }] : []));
|
1640
2312
|
this.daysDataForTimelineViews = computed(() => {
|
1641
2313
|
const allOriginalAppointments = this.appointments();
|
1642
2314
|
const multiViewStartDate = this.date();
|
@@ -1648,19 +2320,18 @@ class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {
|
|
1648
2320
|
for (let i = 0; i < numberOfDays; i++) {
|
1649
2321
|
const currentDayDate = multiViewStartDate.add('day', i);
|
1650
2322
|
const currentDayStart = currentDayDate.startOf('day');
|
1651
|
-
const currentDayEnd = currentDayDate.endOf('day');
|
1652
|
-
|
1653
|
-
|
1654
|
-
return false;
|
1655
|
-
}
|
2323
|
+
const currentDayEnd = currentDayDate.endOf('day');
|
2324
|
+
// Filter appointments that overlap with this day, preserving original times
|
2325
|
+
const appointmentsForThisDay = allOriginalAppointments.filter((appt) => {
|
1656
2326
|
const apptStart = this.calendarService.create(appt.startDate, this.calendar());
|
1657
2327
|
const apptEnd = this.calendarService.create(appt.endDate, this.calendar());
|
2328
|
+
// Check if appointment overlaps with this day
|
1658
2329
|
return apptStart.compare(currentDayEnd, 'second') <= 0 && apptEnd.compare(currentDayStart, 'second') >= 0;
|
1659
2330
|
});
|
1660
2331
|
result.push({
|
1661
2332
|
date: currentDayDate,
|
1662
2333
|
holiday: this.isHoliday(currentDayDate),
|
1663
|
-
originalAppointmentsForThisDay:
|
2334
|
+
originalAppointmentsForThisDay: appointmentsForThisDay,
|
1664
2335
|
});
|
1665
2336
|
}
|
1666
2337
|
return result;
|
@@ -1673,34 +2344,595 @@ class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {
|
|
1673
2344
|
this.appointmentRightClickedInternal = output();
|
1674
2345
|
this.onActionClickInternal = output();
|
1675
2346
|
this.onAppointmentDropInternal = output();
|
2347
|
+
/**
|
2348
|
+
* Gets appointments grouped by resources for timeline view.
|
2349
|
+
*/
|
2350
|
+
this.appointmentsByResource = computed(() => {
|
2351
|
+
const allAppointments = this.appointments();
|
2352
|
+
const resources = this.resources();
|
2353
|
+
const showUnassigned = this.showUnassignedAppointments();
|
2354
|
+
return this.schedulerService.filterAppointmentsByResources(allAppointments, resources, showUnassigned);
|
2355
|
+
}, ...(ngDevMode ? [{ debugName: "appointmentsByResource" }] : []));
|
2356
|
+
/**
|
2357
|
+
* Gets all resource IDs including unassigned if applicable.
|
2358
|
+
*/
|
2359
|
+
this.resourceIds = computed(() => {
|
2360
|
+
const resources = this.resources();
|
2361
|
+
const showUnassigned = this.showUnassignedAppointments();
|
2362
|
+
return this.schedulerService.getAllResourceIds(resources, showUnassigned);
|
2363
|
+
}, ...(ngDevMode ? [{ debugName: "resourceIds" }] : []));
|
2364
|
+
}
|
2365
|
+
handleDrop(event, resourceId) {
|
2366
|
+
// Convert 'unassigned' string to undefined for proper unassigned appointments
|
2367
|
+
const actualResourceId = resourceId === 'unassigned' ? undefined : resourceId;
|
2368
|
+
// Use the isSameSlotDrop value from the child timeline-day-view component
|
2369
|
+
// The child component has the proper context for its own day
|
2370
|
+
const isSameSlotDrop = event.isSameSlotDrop;
|
2371
|
+
// Update the slot with the correct resource ID
|
2372
|
+
const updatedEvent = {
|
2373
|
+
...event,
|
2374
|
+
slot: {
|
2375
|
+
...event.slot,
|
2376
|
+
resourceId: actualResourceId,
|
2377
|
+
},
|
2378
|
+
isSameSlotDrop,
|
2379
|
+
};
|
2380
|
+
this.onAppointmentDropInternal.emit(updatedEvent);
|
1676
2381
|
}
|
1677
2382
|
isToday(date) {
|
1678
2383
|
const today = this.calendarService.create(new Date());
|
1679
2384
|
return date.equal(today, 'day');
|
1680
2385
|
}
|
1681
|
-
|
1682
|
-
|
1683
|
-
|
1684
|
-
|
1685
|
-
|
1686
|
-
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
}
|
2386
|
+
/**
|
2387
|
+
* Gets appointments for a specific resource.
|
2388
|
+
*/
|
2389
|
+
getAppointmentsForResource(resourceId) {
|
2390
|
+
const appointmentsByResource = this.appointmentsByResource();
|
2391
|
+
// Find the correct key in the Map using isEqual for proper comparison
|
2392
|
+
for (const [key, appointments] of appointmentsByResource.entries()) {
|
2393
|
+
if (key === 'unassigned' && resourceId === 'unassigned') {
|
2394
|
+
return appointments;
|
2395
|
+
}
|
2396
|
+
if (key !== 'unassigned' && isEqual(key, resourceId)) {
|
2397
|
+
return appointments;
|
2398
|
+
}
|
1691
2399
|
}
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
2400
|
+
return [];
|
2401
|
+
}
|
2402
|
+
/**
|
2403
|
+
* Gets resource title by ID.
|
2404
|
+
*/
|
2405
|
+
getResourceTitle(resourceId) {
|
2406
|
+
if (resourceId === 'unassigned') {
|
2407
|
+
return 'Unassigned';
|
1695
2408
|
}
|
1696
|
-
|
2409
|
+
const resources = this.resources();
|
2410
|
+
const resource = resources.find((r) => isEqual(r.id, resourceId));
|
2411
|
+
return resource?.title || String(resourceId);
|
2412
|
+
}
|
2413
|
+
getResourceContext(resourceId) {
|
2414
|
+
const resources = this.resources();
|
2415
|
+
const resource = resources.find((r) => isEqual(r.id, resourceId));
|
2416
|
+
return resource || { id: resourceId, title: String(resourceId) };
|
2417
|
+
}
|
2418
|
+
getCurrentTimePosition() {
|
2419
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
2420
|
+
const startHour = this.startDayHour();
|
2421
|
+
const endHour = this.endDayHour();
|
2422
|
+
// Check if current time is within the visible hours
|
2423
|
+
if (now.hour < startHour || now.hour >= endHour) {
|
2424
|
+
return null;
|
2425
|
+
}
|
2426
|
+
// Calculate position as percentage within the visible time range
|
2427
|
+
const currentMinutes = now.hour * 60 + now.minute;
|
2428
|
+
const startMinutes = startHour * 60;
|
2429
|
+
const endMinutes = endHour * 60;
|
2430
|
+
const totalMinutes = endMinutes - startMinutes;
|
2431
|
+
const positionInMinutes = currentMinutes - startMinutes;
|
2432
|
+
return (positionInMinutes / totalMinutes) * 100;
|
2433
|
+
}
|
2434
|
+
shouldShowCurrentTimeForDay(dayDate) {
|
2435
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
2436
|
+
const multiViewStart = this.date();
|
2437
|
+
const multiViewEnd = this.date().add('day', this.daysCount() - 1);
|
2438
|
+
// Check if current time is within the displayed multi-day range
|
2439
|
+
if (now.isBefore(multiViewStart) || now.isAfter(multiViewEnd)) {
|
2440
|
+
return false;
|
2441
|
+
}
|
2442
|
+
// Check if current time is on the same day as this day column
|
2443
|
+
return now.isSame(dayDate, 'day');
|
2444
|
+
}
|
2445
|
+
ngAfterViewInit() {
|
2446
|
+
// Auto-scroll to current time when available using ResizeObserver
|
2447
|
+
this.setupCurrentTimeScroll();
|
2448
|
+
}
|
2449
|
+
setupCurrentTimeScroll() {
|
2450
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
2451
|
+
const multiViewStart = this.date();
|
2452
|
+
const multiViewEnd = this.date().add('day', this.daysCount() - 1);
|
2453
|
+
// Check if current time is within the displayed multi-day range
|
2454
|
+
if (now.isBefore(multiViewStart) || now.isAfter(multiViewEnd)) {
|
2455
|
+
return undefined;
|
2456
|
+
}
|
2457
|
+
const currentPosition = this.getCurrentTimePosition();
|
2458
|
+
if (currentPosition === null) {
|
2459
|
+
return undefined;
|
2460
|
+
}
|
2461
|
+
const timeLineElement = this.currentTimeLineElement()?.nativeElement;
|
2462
|
+
if (!timeLineElement) {
|
2463
|
+
return undefined;
|
2464
|
+
}
|
2465
|
+
// Use ResizeObserver to detect when the element is properly rendered
|
2466
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
2467
|
+
for (const entry of entries) {
|
2468
|
+
if (entry.contentRect.width > 0 && entry.contentRect.height > 0) {
|
2469
|
+
// Element has proper dimensions, scroll to it
|
2470
|
+
timeLineElement.scrollIntoView({
|
2471
|
+
behavior: 'smooth',
|
2472
|
+
block: 'nearest',
|
2473
|
+
inline: 'center',
|
2474
|
+
});
|
2475
|
+
// Disconnect observer after successful scroll
|
2476
|
+
resizeObserver.disconnect();
|
2477
|
+
break;
|
2478
|
+
}
|
2479
|
+
}
|
2480
|
+
});
|
2481
|
+
resizeObserver.observe(timeLineElement);
|
2482
|
+
// Cleanup on component destroy
|
2483
|
+
return () => resizeObserver.disconnect();
|
1697
2484
|
}
|
1698
|
-
|
1699
|
-
|
2485
|
+
/**
|
2486
|
+
* Gets appointments for a specific resource and day.
|
2487
|
+
*/
|
2488
|
+
getAppointmentsForResourceAndDay(resourceId, dayAppointments) {
|
2489
|
+
if (resourceId === 'unassigned') {
|
2490
|
+
return dayAppointments.filter((appointment) => appointment.resourceId === undefined || appointment.resourceId === null);
|
2491
|
+
}
|
2492
|
+
// Use isEqual for proper comparison of resource IDs of any type
|
2493
|
+
return dayAppointments.filter((appointment) => isEqual(appointment.resourceId, resourceId));
|
2494
|
+
}
|
2495
|
+
/**
|
2496
|
+
* Gets the height for a specific resource across all days.
|
2497
|
+
*/
|
2498
|
+
getResourceRowHeight(resourceId) {
|
2499
|
+
// Calculate the maximum height needed for this specific resource across all days
|
2500
|
+
const daysData = this.daysDataForTimelineViews();
|
2501
|
+
let maxHeight = 1; // Minimum height
|
2502
|
+
for (const daySlot of daysData) {
|
2503
|
+
const appointments = this.getAppointmentsForResourceAndDay(resourceId, daySlot.originalAppointmentsForThisDay);
|
2504
|
+
if (appointments.length > 0) {
|
2505
|
+
// Calculate overlapping rows for this resource on this day
|
2506
|
+
const overlappingRows = this.calculateMaxOverlappingRowsForAppointments(appointments, daySlot.date);
|
2507
|
+
maxHeight = Math.max(maxHeight, overlappingRows);
|
2508
|
+
}
|
2509
|
+
}
|
2510
|
+
// Use CSS calc to return the height
|
2511
|
+
const GAP_PX = 4; // Same as in timeline-day component
|
2512
|
+
return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${maxHeight} + ${GAP_PX}px * ${Math.max(0, maxHeight - 1)})`;
|
2513
|
+
}
|
2514
|
+
/**
|
2515
|
+
* Calculates the maximum number of overlapping rows for a set of appointments.
|
2516
|
+
* Uses the actual segmented times that will be displayed in the timeline view.
|
2517
|
+
*/
|
2518
|
+
calculateMaxOverlappingRowsForAppointments(appointments, dayDate) {
|
2519
|
+
if (appointments.length === 0)
|
2520
|
+
return 1;
|
2521
|
+
if (appointments.length === 1)
|
2522
|
+
return 1;
|
2523
|
+
// Get the actual segments that will be displayed in the timeline view
|
2524
|
+
const segments = [];
|
2525
|
+
const viewConfigStartHour = this.startDayHour();
|
2526
|
+
const viewConfigEndHour = this.endDayHour();
|
2527
|
+
for (const appointment of appointments) {
|
2528
|
+
if (appointment.allDay) {
|
2529
|
+
// For all-day appointments, create a segment that spans the full day
|
2530
|
+
const dayStart = this.calendarService.create(appointment.startDate, this.calendar()).startOf('day');
|
2531
|
+
const dayEnd = this.calendarService.create(appointment.endDate, this.calendar()).startOf('day');
|
2532
|
+
// Check if the all-day appointment overlaps with the current day
|
2533
|
+
const currentDayStart = dayDate.startOf('day');
|
2534
|
+
const currentDayEnd = dayDate.endOf('day');
|
2535
|
+
if (dayStart.compare(currentDayEnd, 'day') <= 0 && dayEnd.compare(currentDayStart, 'day') >= 0) {
|
2536
|
+
segments.push({
|
2537
|
+
startDate: currentDayStart.date,
|
2538
|
+
endDate: currentDayEnd.date,
|
2539
|
+
allDay: true,
|
2540
|
+
});
|
2541
|
+
}
|
2542
|
+
}
|
2543
|
+
else {
|
2544
|
+
// For regular appointments, get the proper segment
|
2545
|
+
const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appointment, dayDate, viewConfigStartHour, viewConfigEndHour, false);
|
2546
|
+
if (segment) {
|
2547
|
+
segments.push(segment);
|
2548
|
+
}
|
2549
|
+
}
|
2550
|
+
}
|
2551
|
+
if (segments.length === 0)
|
2552
|
+
return 1;
|
2553
|
+
if (segments.length === 1)
|
2554
|
+
return 1;
|
2555
|
+
// Sort segments by start time, then by end time (descending)
|
2556
|
+
const sortedSegments = [...segments].sort((a, b) => {
|
2557
|
+
const startDiff = a.startDate.getTime() - b.startDate.getTime();
|
2558
|
+
if (startDiff !== 0)
|
2559
|
+
return startDiff;
|
2560
|
+
return b.endDate.getTime() - a.endDate.getTime();
|
2561
|
+
});
|
2562
|
+
const rowEndTimes = [];
|
2563
|
+
let maxRows = 0;
|
2564
|
+
for (const segment of sortedSegments) {
|
2565
|
+
let assignedRowIndex = -1;
|
2566
|
+
// Find the first row where this segment can fit
|
2567
|
+
for (let i = 0; i < rowEndTimes.length; i++) {
|
2568
|
+
if (segment.startDate >= rowEndTimes[i]) {
|
2569
|
+
assignedRowIndex = i;
|
2570
|
+
break;
|
2571
|
+
}
|
2572
|
+
}
|
2573
|
+
// If no row is available, create a new one
|
2574
|
+
if (assignedRowIndex === -1) {
|
2575
|
+
assignedRowIndex = rowEndTimes.length;
|
2576
|
+
rowEndTimes.push(segment.endDate);
|
2577
|
+
}
|
2578
|
+
else {
|
2579
|
+
rowEndTimes[assignedRowIndex] = segment.endDate;
|
2580
|
+
}
|
2581
|
+
maxRows = Math.max(maxRows, rowEndTimes.length);
|
2582
|
+
}
|
2583
|
+
return Math.max(maxRows, 1);
|
2584
|
+
}
|
2585
|
+
/**
|
2586
|
+
* Gets the hours array for time slots display.
|
2587
|
+
*/
|
2588
|
+
getHoursArray() {
|
2589
|
+
const startHour = this.startDayHour();
|
2590
|
+
const endHour = this.endDayHour();
|
2591
|
+
const hours = [];
|
2592
|
+
// Use the first day's date as a base for creating time slots
|
2593
|
+
const firstDay = this.daysDataForTimelineViews()[0];
|
2594
|
+
if (!firstDay)
|
2595
|
+
return [];
|
2596
|
+
let time = firstDay.date.set('hour', startHour).startOf('hour');
|
2597
|
+
hours.push(time);
|
2598
|
+
while (time.hour < endHour - 1) {
|
2599
|
+
time = time.add('hour', 1);
|
2600
|
+
hours.push(time);
|
2601
|
+
}
|
2602
|
+
return hours;
|
2603
|
+
}
|
2604
|
+
/**
|
2605
|
+
* Gets the number of hours for CSS calculations.
|
2606
|
+
*/
|
2607
|
+
getHoursCount() {
|
2608
|
+
return this.endDayHour() - this.startDayHour();
|
2609
|
+
}
|
2610
|
+
isHoliday(date) {
|
2611
|
+
const isHoliday = this.schedulerService.isHoliday(date);
|
2612
|
+
if (isHoliday) {
|
2613
|
+
const globalHoliday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));
|
2614
|
+
const internalHoliday = this.schedulerService.internalHoliday().find((d) => date.equal(d.date, 'day'));
|
2615
|
+
const holiday = globalHoliday || internalHoliday;
|
2616
|
+
return {
|
2617
|
+
state: 'holiday',
|
2618
|
+
holiday,
|
2619
|
+
};
|
2620
|
+
}
|
2621
|
+
const isWeekend = this.schedulerService.isWeekend(date, this.calendar());
|
2622
|
+
if (isWeekend) {
|
2623
|
+
return { state: 'weekend' };
|
2624
|
+
}
|
2625
|
+
return { state: 'none' };
|
2626
|
+
}
|
2627
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
2628
|
+
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 }, 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" }, 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\">\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]=\"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 >\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()) {\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 >\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 getAppointmentsForResourceAndDay(resourceId, daySlot.originalAppointmentsForThisDay)\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: ["ax-scheduler-timeline-multi-day-view{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-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{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-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:sticky;left: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-right: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-right: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-right: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-right: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}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;height:fit-content;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-right: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))}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-right: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));min-height:var(--ax-comp-scheduler-basic-view-blocks-height)}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{top:0;width:100%;height:100%;position:absolute}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}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;right: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: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXSchedulerTimelineDayViewComponent, selector: "ax-scheduler-timeline-day-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "showResourceHeaders", "date", "endDayHour", "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 }); }
|
2629
|
+
}
|
2630
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, decorators: [{
|
2631
|
+
type: Component,
|
2632
|
+
args: [{ selector: 'ax-scheduler-timeline-multi-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AsyncPipe, NgTemplateOutlet, AXFormatPipe, AXTooltipDirective, AXSchedulerTimelineDayViewComponent], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\n <div class=\"ax-scheduler-timeline-day-view-container\">\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]=\"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 >\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()) {\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 >\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 getAppointmentsForResourceAndDay(resourceId, daySlot.originalAppointmentsForThisDay)\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: ["ax-scheduler-timeline-multi-day-view{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-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{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-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));position:sticky;left: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-right: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-right: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-right: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-right: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}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;height:fit-content;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-right: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))}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-right: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));min-height:var(--ax-comp-scheduler-basic-view-blocks-height)}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{top:0;width:100%;height:100%;position:absolute}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}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;right: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"] }]
|
2633
|
+
}] });
|
2634
|
+
|
2635
|
+
class AXSchedulerTimelineYearViewComponent extends NXComponent {
|
2636
|
+
constructor() {
|
2637
|
+
super(...arguments);
|
2638
|
+
this.document = inject(DOCUMENT);
|
2639
|
+
this.scheduler = inject(AXSchedulerComponent);
|
2640
|
+
this.calendarService = inject(AXCalendarService);
|
2641
|
+
this.schedulerService = inject(AXSchedulerService);
|
2642
|
+
this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 3; // Reduced for year view due to space constraints
|
2643
|
+
this.readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : []));
|
2644
|
+
this.draggable = input(true, ...(ngDevMode ? [{ debugName: "draggable" }] : []));
|
2645
|
+
this.hasActions = input(false, ...(ngDevMode ? [{ debugName: "hasActions" }] : []));
|
2646
|
+
this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: "dragStartDelay" }] : []));
|
2647
|
+
this.calendar = input(...(ngDevMode ? [undefined, { debugName: "calendar" }] : []));
|
2648
|
+
this.showResourceHeaders = input(true, ...(ngDevMode ? [{ debugName: "showResourceHeaders" }] : []));
|
2649
|
+
this.date = input.required(...(ngDevMode ? [{ debugName: "date" }] : []));
|
2650
|
+
this.showUnassignedAppointments = input(true, ...(ngDevMode ? [{ debugName: "showUnassignedAppointments" }] : []));
|
2651
|
+
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : []));
|
2652
|
+
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
2653
|
+
this.resourceTemplate = input(...(ngDevMode ? [undefined, { debugName: "resourceTemplate" }] : []));
|
2654
|
+
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
2655
|
+
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
2656
|
+
this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: "dragStartSlotId" }] : []));
|
2657
|
+
this.dragStartSlotResourceId = signal(null, ...(ngDevMode ? [{ debugName: "dragStartSlotResourceId" }] : []));
|
2658
|
+
this.currentTimeLineElement = viewChild('currentTimeLine', ...(ngDevMode ? [{ debugName: "currentTimeLineElement" }] : []));
|
2659
|
+
// Performance optimization: reduce drag start delay for year view
|
2660
|
+
this.optimizedDragStartDelay = computed(() => {
|
2661
|
+
return this.dragStartDelay() > 0 ? Math.min(this.dragStartDelay(), 50) : 0;
|
2662
|
+
}, ...(ngDevMode ? [{ debugName: "optimizedDragStartDelay" }] : []));
|
2663
|
+
this.processedDayData = computed(() => {
|
2664
|
+
const allOriginalAppointments = this.appointments();
|
2665
|
+
const yearStartDate = this.date().startOf('year');
|
2666
|
+
const yearEndDate = this.date().endOf('year');
|
2667
|
+
const daysInYear = yearEndDate.dayOfYear;
|
2668
|
+
const resources = this.resources();
|
2669
|
+
const showUnassigned = this.showUnassignedAppointments();
|
2670
|
+
if (!allOriginalAppointments) {
|
2671
|
+
return Array.from({ length: daysInYear }, (_, i) => {
|
2672
|
+
const currentDayDate = yearStartDate.add('day', i).startOf('day');
|
2673
|
+
return {
|
2674
|
+
date: currentDayDate,
|
2675
|
+
visibleAppointments: [],
|
2676
|
+
hiddenAppointments: [],
|
2677
|
+
moreCount: 0,
|
2678
|
+
holiday: this.getHolidayInfo(currentDayDate),
|
2679
|
+
};
|
2680
|
+
});
|
2681
|
+
}
|
2682
|
+
const result = [];
|
2683
|
+
for (let i = 0; i < daysInYear; i++) {
|
2684
|
+
const currentDayDate = yearStartDate.add('day', i).startOf('day');
|
2685
|
+
const segmentsForThisDay = [];
|
2686
|
+
for (const appt of allOriginalAppointments) {
|
2687
|
+
// For Timeline Year View, each day is a column. We want segments for the full 24h of that day.
|
2688
|
+
const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDayDate, 0, 24, true);
|
2689
|
+
if (segment) {
|
2690
|
+
segmentsForThisDay.push(segment);
|
2691
|
+
}
|
2692
|
+
}
|
2693
|
+
// Sort segments: all-day first, then by segment start time (which is clipped to the day)
|
2694
|
+
const sortedSegments = orderBy(segmentsForThisDay, [
|
2695
|
+
(s) => (s.allDay ? 0 : 1), // Segments marked as allDay first
|
2696
|
+
(s) => s.startDate.getTime(), // Segment's start time on this day
|
2697
|
+
(s) => s.endDate.getTime() - s.startDate.getTime(), // Segment's duration on this day
|
2698
|
+
(s) => s.title?.toLowerCase() ?? '',
|
2699
|
+
], ['asc', 'asc', 'desc', 'asc']);
|
2700
|
+
const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);
|
2701
|
+
const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);
|
2702
|
+
// Handle resource grouping if resources are provided
|
2703
|
+
let appointmentsByResource;
|
2704
|
+
if (resources.length > 0) {
|
2705
|
+
appointmentsByResource = new Map();
|
2706
|
+
const allResourceIds = this.schedulerService.getAllResourceIds(resources, showUnassigned);
|
2707
|
+
allResourceIds.forEach((resourceId) => {
|
2708
|
+
const appointmentsForResource = this.schedulerService.getAppointmentsForResource(allOriginalAppointments, resourceId);
|
2709
|
+
const resourceSegments = [];
|
2710
|
+
for (const appt of appointmentsForResource) {
|
2711
|
+
const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDayDate, 0, 24, true);
|
2712
|
+
if (segment) {
|
2713
|
+
resourceSegments.push(segment);
|
2714
|
+
}
|
2715
|
+
}
|
2716
|
+
const sortedResourceSegments = orderBy(resourceSegments, [
|
2717
|
+
(s) => (s.allDay ? 0 : 1),
|
2718
|
+
(s) => s.startDate.getTime(),
|
2719
|
+
(s) => s.endDate.getTime() - s.startDate.getTime(),
|
2720
|
+
(s) => s.title?.toLowerCase() ?? '',
|
2721
|
+
], ['asc', 'asc', 'desc', 'asc']);
|
2722
|
+
const visible = sortedResourceSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);
|
2723
|
+
const hidden = sortedResourceSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);
|
2724
|
+
appointmentsByResource.set(resourceId, {
|
2725
|
+
visible,
|
2726
|
+
hidden,
|
2727
|
+
moreCount: hidden.length,
|
2728
|
+
});
|
2729
|
+
});
|
2730
|
+
}
|
2731
|
+
result.push({
|
2732
|
+
date: currentDayDate,
|
2733
|
+
visibleAppointments,
|
2734
|
+
hiddenAppointments,
|
2735
|
+
moreCount: hiddenAppointments.length,
|
2736
|
+
holiday: this.getHolidayInfo(currentDayDate),
|
2737
|
+
appointmentsByResource,
|
2738
|
+
});
|
2739
|
+
}
|
2740
|
+
return result;
|
2741
|
+
}, ...(ngDevMode ? [{ debugName: "processedDayData" }] : []));
|
2742
|
+
this.resourceIds = computed(() => {
|
2743
|
+
const resources = this.resources();
|
2744
|
+
if (resources.length === 0)
|
2745
|
+
return [];
|
2746
|
+
return this.schedulerService.getAllResourceIds(resources, this.showUnassignedAppointments());
|
2747
|
+
}, ...(ngDevMode ? [{ debugName: "resourceIds" }] : []));
|
2748
|
+
// Internal outputs to be caught by parent AXSchedulerComponent
|
2749
|
+
this.slotClickedInternal = output();
|
2750
|
+
this.slotDblClickedInternal = output();
|
2751
|
+
this.slotRightClickedInternal = output();
|
2752
|
+
this.appointmentClickedInternal = output();
|
2753
|
+
this.appointmentDblClickedInternal = output();
|
2754
|
+
this.appointmentRightClickedInternal = output();
|
2755
|
+
this.onActionClickInternal = output();
|
2756
|
+
this.onAppointmentDropInternal = output();
|
2757
|
+
// --- Event Handlers ---
|
2758
|
+
this.eventOutputMap = {
|
2759
|
+
slot: {
|
2760
|
+
click: this.slotClickedInternal,
|
2761
|
+
dblclick: this.slotDblClickedInternal,
|
2762
|
+
contextmenu: this.slotRightClickedInternal,
|
2763
|
+
},
|
2764
|
+
appointment: {
|
2765
|
+
click: this.appointmentClickedInternal,
|
2766
|
+
dblclick: this.appointmentDblClickedInternal,
|
2767
|
+
contextmenu: this.appointmentRightClickedInternal,
|
2768
|
+
},
|
2769
|
+
};
|
2770
|
+
}
|
2771
|
+
getHolidayInfo(date) {
|
2772
|
+
const isHoliday = this.schedulerService.isHoliday(date);
|
2773
|
+
if (isHoliday) {
|
2774
|
+
const globalHoliday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));
|
2775
|
+
const internalHoliday = this.schedulerService.internalHoliday().find((d) => date.equal(d.date, 'day'));
|
2776
|
+
const holiday = globalHoliday || internalHoliday;
|
2777
|
+
return {
|
2778
|
+
state: 'holiday',
|
2779
|
+
holiday,
|
2780
|
+
};
|
2781
|
+
}
|
2782
|
+
const isWeekend = this.schedulerService.isWeekend(date, this.calendar());
|
2783
|
+
if (isWeekend) {
|
2784
|
+
return { state: 'weekend' };
|
2785
|
+
}
|
2786
|
+
return { state: 'none' };
|
2787
|
+
}
|
2788
|
+
isToday(date) {
|
2789
|
+
const today = this.calendarService.create(new Date(), this.calendar());
|
2790
|
+
return date.equal(today, 'day');
|
2791
|
+
}
|
2792
|
+
getResourceTitle(resourceId) {
|
2793
|
+
const resources = this.resources();
|
2794
|
+
const resource = resources.find((r) => isEqual(r.id, resourceId));
|
2795
|
+
return resource?.title ?? String(resourceId);
|
2796
|
+
}
|
2797
|
+
getAppointmentsForResourceAndDay(resourceId, dayData) {
|
2798
|
+
return dayData.appointmentsByResource?.get(resourceId) ?? { visible: [], hidden: [], moreCount: 0 };
|
2799
|
+
}
|
2800
|
+
getResourceContext(resourceId) {
|
2801
|
+
const resources = this.resources();
|
2802
|
+
const resource = resources.find((r) => isEqual(r.id, resourceId));
|
2803
|
+
return resource || { id: resourceId, title: String(resourceId) };
|
2804
|
+
}
|
2805
|
+
getCurrentTimePosition() {
|
2806
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
2807
|
+
const yearStart = this.date().startOf('year');
|
2808
|
+
const yearEnd = this.date().endOf('year');
|
2809
|
+
// Check if current time is within the displayed year
|
2810
|
+
if (now.isBefore(yearStart) || now.isAfter(yearEnd)) {
|
2811
|
+
return null;
|
2812
|
+
}
|
2813
|
+
// Calculate position as percentage of the year
|
2814
|
+
const durationFromStart = now.duration(yearStart);
|
2815
|
+
const totalDuration = yearEnd.duration(yearStart);
|
2816
|
+
return (durationFromStart.total.days / totalDuration.total.days) * 100;
|
2817
|
+
}
|
2818
|
+
ngAfterViewInit() {
|
2819
|
+
// Auto-scroll to current time when available using ResizeObserver
|
2820
|
+
this.setupCurrentTimeScroll();
|
2821
|
+
}
|
2822
|
+
setupCurrentTimeScroll() {
|
2823
|
+
const currentPosition = this.getCurrentTimePosition();
|
2824
|
+
if (currentPosition === null) {
|
2825
|
+
return undefined;
|
2826
|
+
}
|
2827
|
+
const timeLineElement = this.currentTimeLineElement()?.nativeElement;
|
2828
|
+
if (!timeLineElement) {
|
2829
|
+
return undefined;
|
2830
|
+
}
|
2831
|
+
// Use ResizeObserver to detect when the element is properly rendered
|
2832
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
2833
|
+
for (const entry of entries) {
|
2834
|
+
if (entry.contentRect.width > 0 && entry.contentRect.height > 0) {
|
2835
|
+
// Element has proper dimensions, scroll to it
|
2836
|
+
timeLineElement.scrollIntoView({
|
2837
|
+
behavior: 'smooth',
|
2838
|
+
block: 'nearest',
|
2839
|
+
inline: 'center',
|
2840
|
+
});
|
2841
|
+
// Disconnect observer after successful scroll
|
2842
|
+
resizeObserver.disconnect();
|
2843
|
+
break;
|
2844
|
+
}
|
2845
|
+
}
|
2846
|
+
});
|
2847
|
+
resizeObserver.observe(timeLineElement);
|
2848
|
+
// Cleanup on component destroy
|
2849
|
+
return () => resizeObserver.disconnect();
|
2850
|
+
}
|
2851
|
+
handleAppointmentEvent(mouseEvent, appointmentItem) {
|
2852
|
+
const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);
|
2853
|
+
const appointmentRef = {
|
2854
|
+
...originalAppointment,
|
2855
|
+
endDate: originalAppointment.endDate,
|
2856
|
+
startDate: originalAppointment.startDate,
|
2857
|
+
};
|
2858
|
+
this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');
|
2859
|
+
}
|
2860
|
+
handleSlotEvent(mouseEvent, date) {
|
2861
|
+
// date is the specific day
|
2862
|
+
const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-year');
|
2863
|
+
if (slotData)
|
2864
|
+
this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');
|
2865
|
+
}
|
2866
|
+
handleDrop(e, date, resourceId) {
|
2867
|
+
// date is the specific day
|
2868
|
+
const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-year');
|
2869
|
+
const droppedItem = e.dropped.dragData();
|
2870
|
+
const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);
|
2871
|
+
const appointmentRef = {
|
2872
|
+
...originalAppointment,
|
2873
|
+
endDate: originalAppointment.endDate,
|
2874
|
+
startDate: originalAppointment.startDate,
|
2875
|
+
};
|
2876
|
+
// Convert 'unassigned' string to undefined for proper unassigned appointments
|
2877
|
+
const actualResourceId = resourceId === 'unassigned' ? undefined : resourceId;
|
2878
|
+
// Check if it's the same slot (same time AND same resource)
|
2879
|
+
const dragStartSlotId = this.dragStartSlotId();
|
2880
|
+
const dropSlotId = e.sender.element().dataset['slotId'];
|
2881
|
+
const dragStartResourceId = this.dragStartSlotResourceId();
|
2882
|
+
const isSameSlotDrop = dragStartSlotId === dropSlotId && dragStartResourceId === resourceId;
|
2883
|
+
this.onAppointmentDropInternal.emit({
|
2884
|
+
dropEvent: e,
|
2885
|
+
slot: { ...slotData, resourceId: actualResourceId },
|
2886
|
+
sender: this.scheduler,
|
2887
|
+
appointment: appointmentRef,
|
2888
|
+
isSameSlotDrop,
|
2889
|
+
});
|
2890
|
+
}
|
2891
|
+
handleActionClick(event, appointmentItem) {
|
2892
|
+
event.stopPropagation();
|
2893
|
+
const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);
|
2894
|
+
this.onActionClickInternal.emit({
|
2895
|
+
appointment: originalAppointment,
|
2896
|
+
nativeEvent: event,
|
2897
|
+
sender: this.scheduler,
|
2898
|
+
});
|
2899
|
+
}
|
2900
|
+
shouldShowCurrentTimeForDay(dayDate) {
|
2901
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
2902
|
+
const yearStart = this.date().startOf('year');
|
2903
|
+
const yearEnd = this.date().endOf('year');
|
2904
|
+
// Check if current time is within the displayed year range
|
2905
|
+
if (now.isBefore(yearStart) || now.isAfter(yearEnd)) {
|
2906
|
+
return false;
|
2907
|
+
}
|
2908
|
+
// Check if current time is on the same day as this day column
|
2909
|
+
return now.isSame(dayDate, 'day');
|
2910
|
+
}
|
2911
|
+
getSlotId(e) {
|
2912
|
+
const dropListElement = this.document
|
2913
|
+
.elementsFromPoint(e.clientX, e.clientY)
|
2914
|
+
.find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);
|
2915
|
+
this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);
|
2916
|
+
this.dragStartSlotResourceId.set(dropListElement ? dropListElement.dataset['resourceId'] : null);
|
2917
|
+
}
|
2918
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineYearViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
2919
|
+
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 }, 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" }, 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-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 >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() && shouldShowCurrentTimeForDay(dayData.date) && 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.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-timeline-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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 {{ segment.originalStartDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async }}\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 (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-overlay-pane ax-scheduler-popover ax-scheduler-timeline-year-popover-appointment\"\n >\n @for (segment of dayData.hiddenAppointments; track segment.id + segment.originalStartDate.getTime()) {\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 ' (' +\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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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 </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\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 class=\"ax-scheduler-timeline-year-resource-row\">\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 @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 >\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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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-overlay-pane 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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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: ["ax-scheduler-timeline-year-view{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-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))}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{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));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{min-height:auto;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;display:flex}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;min-height:2.625rem;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-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;left: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}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{flex:1;display:flex;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))}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;min-height:100%;overflow:visible;width:100%;padding-inline:.25rem;padding-block:.125rem}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;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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["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", "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 }); }
|
1700
2920
|
}
|
1701
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
2921
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerTimelineYearViewComponent, decorators: [{
|
1702
2922
|
type: Component,
|
1703
|
-
args: [{ selector: 'ax-scheduler-timeline-
|
2923
|
+
args: [{ selector: 'ax-scheduler-timeline-year-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
2924
|
+
NgClass,
|
2925
|
+
NgTemplateOutlet,
|
2926
|
+
AsyncPipe,
|
2927
|
+
AXFormatPipe,
|
2928
|
+
AXDragDirective,
|
2929
|
+
AXTranslatorPipe,
|
2930
|
+
AXPopoverComponent,
|
2931
|
+
AXTooltipDirective,
|
2932
|
+
AXDropZoneDirective,
|
2933
|
+
AXDecoratorIconComponent,
|
2934
|
+
AXDecoratorGenericComponent,
|
2935
|
+
], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineYearViewComponent }], template: "@if (resources().length === 0 || !showResourceHeaders()) {\n <!-- Original layout when no resources -->\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 >\n <!-- Current Time Line Indicator -->\n @if (\n showCurrentTimeIndicator() && shouldShowCurrentTimeForDay(dayData.date) && 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.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-timeline-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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 {{ segment.originalStartDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async }}\n @if (segment.originalStartDate.getTime() !== segment.originalEndDate.getTime()) {\n -\n {{ segment.originalEndDate | format: 'date' : { format: 'MMM d', calendar: calendar() } | async }}\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 (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-overlay-pane ax-scheduler-popover ax-scheduler-timeline-year-popover-appointment\"\n >\n @for (segment of dayData.hiddenAppointments; track segment.id + segment.originalStartDate.getTime()) {\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 ' (' +\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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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 </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\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 class=\"ax-scheduler-timeline-year-resource-row\">\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 @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 >\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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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-overlay-pane 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 [class.all-day-segment]=\"segment.allDay\"\n [ngClass]=\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\"\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: ["ax-scheduler-timeline-year-view{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-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))}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{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));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{min-height:auto;border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface));width:max-content;background-color:inherit;display:flex}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;min-height:2.625rem;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-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;left: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}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{flex:1;display:flex;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))}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;min-height:100%;overflow:visible;width:100%;padding-inline:.25rem;padding-block:.125rem}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;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"] }]
|
1704
2936
|
}] });
|
1705
2937
|
|
1706
2938
|
class AXSchedulerWeekViewComponent extends NXComponent {
|
@@ -1724,8 +2956,11 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
1724
2956
|
this.date = input.required(...(ngDevMode ? [{ debugName: "date" }] : []));
|
1725
2957
|
this.endDayHour = input.required(...(ngDevMode ? [{ debugName: "endDayHour" }] : []));
|
1726
2958
|
this.startDayHour = input.required(...(ngDevMode ? [{ debugName: "startDayHour" }] : []));
|
2959
|
+
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
1727
2960
|
this.appointments = input([], ...(ngDevMode ? [{ debugName: "appointments" }] : []));
|
1728
2961
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
2962
|
+
// ViewChild for current time line element
|
2963
|
+
this.currentTimeLineElement = viewChild('currentTimeLine', ...(ngDevMode ? [{ debugName: "currentTimeLineElement" }] : []));
|
1729
2964
|
// --- Component Outputs (Internal, to be caught by the main scheduler) ---
|
1730
2965
|
this.slotClickedInternal = output();
|
1731
2966
|
this.slotDblClickedInternal = output();
|
@@ -1984,7 +3219,7 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
1984
3219
|
* Handles click, dblclick, and contextmenu events on an appointment and emits them to the parent.
|
1985
3220
|
* @param mouseEvent The native DOM event.
|
1986
3221
|
* @param appointmentSegment The appointment data segment that was interacted with.
|
1987
|
-
* @
|
3222
|
+
* @protected
|
1988
3223
|
*/
|
1989
3224
|
handleAppointmentEvent(mouseEvent, appointmentSegment) {
|
1990
3225
|
const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegment);
|
@@ -1996,7 +3231,7 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
1996
3231
|
* @param hour The starting hour of the slot.
|
1997
3232
|
* @param day The day of the slot.
|
1998
3233
|
* @param minuteIndex The half-hour index (0 or 1).
|
1999
|
-
* @
|
3234
|
+
* @protected
|
2000
3235
|
*/
|
2001
3236
|
handleSingleSlotEvent(mouseEvent, hour, day, minuteIndex) {
|
2002
3237
|
const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);
|
@@ -2008,7 +3243,7 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
2008
3243
|
* Handles interaction events on the all-day slot.
|
2009
3244
|
* @param mouseEvent The native DOM event.
|
2010
3245
|
* @param day The corresponding day for the all-day slot.
|
2011
|
-
* @
|
3246
|
+
* @protected
|
2012
3247
|
*/
|
2013
3248
|
handleAllDaySlotEvent(mouseEvent, day) {
|
2014
3249
|
const slotData = { startDate: day.startOf('day'), endDate: day.endOf('day'), view: 'week' };
|
@@ -2018,7 +3253,7 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
2018
3253
|
* Handles dropping an appointment onto the all-day slot.
|
2019
3254
|
* @param e The drop event from the CDK.
|
2020
3255
|
* @param day The corresponding day for the all-day slot.
|
2021
|
-
* @
|
3256
|
+
* @protected
|
2022
3257
|
*/
|
2023
3258
|
handleAllDayDrop(e, day) {
|
2024
3259
|
const slotData = { startDate: day.startOf('day'), endDate: day.endOf('day'), view: 'week' };
|
@@ -2037,7 +3272,7 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
2037
3272
|
* @param hour The starting hour of the drop target.
|
2038
3273
|
* @param day The day of the drop target.
|
2039
3274
|
* @param minuteIndex The half-hour index (0 or 1) of the drop target.
|
2040
|
-
* @
|
3275
|
+
* @protected
|
2041
3276
|
*/
|
2042
3277
|
handleSingleDayDrop(e, hour, day, minuteIndex) {
|
2043
3278
|
const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);
|
@@ -2055,7 +3290,7 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
2055
3290
|
* Handles clicks on the "more" action icon on an appointment.
|
2056
3291
|
* @param event The native mouse event.
|
2057
3292
|
* @param appointmentItem The appointment associated with the action.
|
2058
|
-
* @
|
3293
|
+
* @protected
|
2059
3294
|
*/
|
2060
3295
|
handleActionClick(event, appointmentItem) {
|
2061
3296
|
event.stopPropagation();
|
@@ -2102,27 +3337,139 @@ class AXSchedulerWeekViewComponent extends NXComponent {
|
|
2102
3337
|
.find((el) => el.dataset['slotId'] !== undefined);
|
2103
3338
|
this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);
|
2104
3339
|
}
|
3340
|
+
getCurrentTimePosition() {
|
3341
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
3342
|
+
const weekStart = this.date().startOf('day');
|
3343
|
+
const weekEnd = this.date().add('day', 7).startOf('day');
|
3344
|
+
const startHour = this.startDayHour();
|
3345
|
+
const endHour = this.endDayHour();
|
3346
|
+
// Check if current time is within the displayed week
|
3347
|
+
if (now.isBefore(weekStart) || now.isAfter(weekEnd)) {
|
3348
|
+
return null;
|
3349
|
+
}
|
3350
|
+
// Check if current time is within the visible hours
|
3351
|
+
if (now.hour < startHour || now.hour >= endHour) {
|
3352
|
+
return null;
|
3353
|
+
}
|
3354
|
+
// Calculate position as percentage within the visible time range
|
3355
|
+
const currentMinutes = now.hour * 60 + now.minute;
|
3356
|
+
const startMinutes = startHour * 60;
|
3357
|
+
const endMinutes = endHour * 60;
|
3358
|
+
const totalMinutes = endMinutes - startMinutes;
|
3359
|
+
const positionInMinutes = currentMinutes - startMinutes;
|
3360
|
+
return (positionInMinutes / totalMinutes) * 100;
|
3361
|
+
}
|
3362
|
+
getCurrentTimePositionWithOffset() {
|
3363
|
+
const position = this.getCurrentTimePosition();
|
3364
|
+
if (position === null) {
|
3365
|
+
return null;
|
3366
|
+
}
|
3367
|
+
// For week view, calculate the vertical position (top) for the horizontal line
|
3368
|
+
// based on the current time within the visible hours
|
3369
|
+
const currentMinutes = this.calendarService.create(new Date(), this.calendar()).hour * 60 +
|
3370
|
+
this.calendarService.create(new Date(), this.calendar()).minute;
|
3371
|
+
const startMinutes = this.startDayHour() * 60;
|
3372
|
+
const positionInMinutes = currentMinutes - startMinutes;
|
3373
|
+
const blockHeight = 30; // 30 minutes per block
|
3374
|
+
const blocksFromStart = positionInMinutes / blockHeight;
|
3375
|
+
return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${blocksFromStart} + 1px)`;
|
3376
|
+
}
|
3377
|
+
getCurrentDayColumnPosition() {
|
3378
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
3379
|
+
const weekStart = this.date().startOf('day');
|
3380
|
+
const weekEnd = this.date().add('day', 7).startOf('day');
|
3381
|
+
// Check if current time is within the displayed week
|
3382
|
+
if (now.isBefore(weekStart) || now.isAfter(weekEnd)) {
|
3383
|
+
return null;
|
3384
|
+
}
|
3385
|
+
// Calculate which day of the week the current day falls into
|
3386
|
+
const daysDiff = Math.floor((now.date.getTime() - weekStart.date.getTime()) / (24 * 60 * 60 * 1000));
|
3387
|
+
if (daysDiff < 0 || daysDiff >= 7) {
|
3388
|
+
return null;
|
3389
|
+
}
|
3390
|
+
// Calculate the left position for the current day column
|
3391
|
+
// The time column width is already accounted for in the container positioning
|
3392
|
+
const dayWidth = 100 / 7; // 7 days in a week
|
3393
|
+
const leftPosition = daysDiff * dayWidth;
|
3394
|
+
return `${leftPosition}%`;
|
3395
|
+
}
|
3396
|
+
getCurrentDayColumnWidth() {
|
3397
|
+
const dayWidth = 100 / 7; // 7 days in a week
|
3398
|
+
return `${dayWidth}%`;
|
3399
|
+
}
|
3400
|
+
ngAfterViewInit() {
|
3401
|
+
// Auto-scroll to current time when available using ResizeObserver
|
3402
|
+
this.setupCurrentTimeScroll();
|
3403
|
+
}
|
3404
|
+
setupCurrentTimeScroll() {
|
3405
|
+
if (!this.showCurrentTimeIndicator()) {
|
3406
|
+
return undefined;
|
3407
|
+
}
|
3408
|
+
const currentPosition = this.getCurrentTimePosition();
|
3409
|
+
if (currentPosition === null) {
|
3410
|
+
return undefined;
|
3411
|
+
}
|
3412
|
+
const timeLineElement = this.currentTimeLineElement()?.nativeElement;
|
3413
|
+
if (!timeLineElement) {
|
3414
|
+
return undefined;
|
3415
|
+
}
|
3416
|
+
// Use ResizeObserver to detect when the element is properly rendered
|
3417
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
3418
|
+
for (const entry of entries) {
|
3419
|
+
if (entry.contentRect.width > 0 && entry.contentRect.height > 0) {
|
3420
|
+
// Element has proper dimensions, scroll to it
|
3421
|
+
timeLineElement.scrollIntoView({
|
3422
|
+
behavior: 'smooth',
|
3423
|
+
block: 'center',
|
3424
|
+
inline: 'nearest',
|
3425
|
+
});
|
3426
|
+
// Disconnect observer after successful scroll
|
3427
|
+
resizeObserver.disconnect();
|
3428
|
+
break;
|
3429
|
+
}
|
3430
|
+
}
|
3431
|
+
});
|
3432
|
+
resizeObserver.observe(timeLineElement);
|
3433
|
+
// Cleanup on component destroy
|
3434
|
+
return () => resizeObserver.disconnect();
|
3435
|
+
}
|
3436
|
+
shouldShowCurrentTimeForToday() {
|
3437
|
+
if (!this.showCurrentTimeIndicator()) {
|
3438
|
+
return false;
|
3439
|
+
}
|
3440
|
+
const now = this.calendarService.create(new Date(), this.calendar());
|
3441
|
+
const weekStart = this.date().startOf('day');
|
3442
|
+
const weekEnd = this.date().add('day', 7).startOf('day');
|
3443
|
+
// Check if current time is within the displayed week
|
3444
|
+
if (now.isBefore(weekStart) || now.isAfter(weekEnd)) {
|
3445
|
+
return false;
|
3446
|
+
}
|
3447
|
+
// Check if current time is within the visible hours
|
3448
|
+
if (now.hour < this.startDayHour() || now.hour >= this.endDayHour()) {
|
3449
|
+
return false;
|
3450
|
+
}
|
3451
|
+
return true;
|
3452
|
+
}
|
2105
3453
|
get isReadonly() {
|
2106
3454
|
return this.readonly();
|
2107
3455
|
}
|
2108
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
2109
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.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 }, 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": "this.isReadonly" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], 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 <div class=\"ax-scheduler-week-header-days\">\n <div class=\"ax-scheduler-week-header-table\">{{ '@acorex:dateTime.duration.all-day' | translate | async }}</div>\n <div aria-hidden=\"true\" class=\"ax-scheduler-week-header-date\">\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 @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 [ngClass]=\"\n slotData.appointments[0].cssClass ??\n `ax-scheduler-${slotData.appointments[0].priority ?? 'primary'}-periority`\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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 [ngClass]=\"\n slotData.appointments[1].cssClass ??\n `ax-scheduler-${slotData.appointments[1].priority ?? 'primary'}-periority`\n \"\n >\n +{{ slotData.appointments.length - 1 }}\n </div>\n <ax-popover [target]=\"moreAppointments\">\n <div class=\"ax-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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\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 <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 [ngClass]=\"appt.appointment.cssClass ?? `ax-scheduler-${appt.appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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 [ngClass]=\"\n badge.hiddenAppointments[0].cssClass ??\n `ax-scheduler-${badge.hiddenAppointments[0].priority ?? 'primary'}-periority`\n \"\n >\n +{{ badge.count }}\n </div>\n <!-- The Popover -->\n <ax-popover [target]=\"actionButton\">\n <div class=\"ax-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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: ["ax-scheduler-week-view{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:2;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:2;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-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:1;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))}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}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXDropZoneDirective, selector: "[axDropZone]", inputs: ["dropZoneGroup"], outputs: ["onElementDrop", "onElementHover"], exportAs: ["axDropZone"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
3456
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerWeekViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
3457
|
+
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 } }, outputs: { slotClickedInternal: "slotClickedInternal", slotDblClickedInternal: "slotDblClickedInternal", slotRightClickedInternal: "slotRightClickedInternal", appointmentClickedInternal: "appointmentClickedInternal", appointmentDblClickedInternal: "appointmentDblClickedInternal", appointmentRightClickedInternal: "appointmentRightClickedInternal", onActionClickInternal: "onActionClickInternal", onAppointmentDropInternal: "onAppointmentDropInternal" }, host: { properties: { "class.ax-state-readonly": "this.isReadonly" } }, 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 <div class=\"ax-scheduler-week-header-days\">\n <div class=\"ax-scheduler-week-header-table\">{{ '@acorex:dateTime.duration.all-day' | translate | async }}</div>\n <div aria-hidden=\"true\" class=\"ax-scheduler-week-header-date\">\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 @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 [ngClass]=\"\n slotData.appointments[0].cssClass ??\n `ax-scheduler-${slotData.appointments[0].priority ?? 'primary'}-periority`\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 [ngClass]=\"\n slotData.appointments[1].cssClass ??\n `ax-scheduler-${slotData.appointments[1].priority ?? 'primary'}-periority`\n \"\n >\n +{{ slotData.appointments.length - 1 }}\n </div>\n <ax-popover [target]=\"moreAppointments\">\n <div class=\"ax-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\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\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 [ngClass]=\"appt.appointment.cssClass ?? `ax-scheduler-${appt.appointment.priority ?? 'primary'}-periority`\"\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 [ngClass]=\"\n badge.hiddenAppointments[0].cssClass ??\n `ax-scheduler-${badge.hiddenAppointments[0].priority ?? 'primary'}-periority`\n \"\n >\n +{{ badge.count }}\n </div>\n <!-- The Popover -->\n <ax-popover [target]=\"actionButton\">\n <div class=\"ax-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\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: ["ax-scheduler-week-view{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:10;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-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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["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", "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 }); }
|
2110
3458
|
}
|
2111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
3459
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerWeekViewComponent, decorators: [{
|
2112
3460
|
type: Component,
|
2113
3461
|
args: [{ selector: 'ax-scheduler-week-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
2114
3462
|
NgClass,
|
2115
|
-
AXDecoratorGenericComponent,
|
2116
3463
|
AsyncPipe,
|
2117
|
-
AXTranslatorPipe,
|
2118
|
-
AXPopoverComponent,
|
2119
3464
|
AXFormatPipe,
|
2120
3465
|
AXDragDirective,
|
2121
|
-
|
3466
|
+
AXTranslatorPipe,
|
3467
|
+
AXPopoverComponent,
|
2122
3468
|
AXTooltipDirective,
|
3469
|
+
AXDropZoneDirective,
|
2123
3470
|
AXDecoratorIconComponent,
|
2124
|
-
|
2125
|
-
], providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], 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 <div class=\"ax-scheduler-week-header-days\">\n <div class=\"ax-scheduler-week-header-table\">{{ '@acorex:dateTime.duration.all-day' | translate | async }}</div>\n <div aria-hidden=\"true\" class=\"ax-scheduler-week-header-date\">\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 @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 [ngClass]=\"\n slotData.appointments[0].cssClass ??\n `ax-scheduler-${slotData.appointments[0].priority ?? 'primary'}-periority`\n \"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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 [ngClass]=\"\n slotData.appointments[1].cssClass ??\n `ax-scheduler-${slotData.appointments[1].priority ?? 'primary'}-periority`\n \"\n >\n +{{ slotData.appointments.length - 1 }}\n </div>\n <ax-popover [target]=\"moreAppointments\">\n <div class=\"ax-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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\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 <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 [ngClass]=\"appt.appointment.cssClass ?? `ax-scheduler-${appt.appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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 [ngClass]=\"\n badge.hiddenAppointments[0].cssClass ??\n `ax-scheduler-${badge.hiddenAppointments[0].priority ?? 'primary'}-periority`\n \"\n >\n +{{ badge.count }}\n </div>\n <!-- The Popover -->\n <ax-popover [target]=\"actionButton\">\n <div class=\"ax-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\n [axTooltipDisabled]=\"tooltipTemplate() ? false : true\"\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: ["ax-scheduler-week-view{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:2;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:2;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-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:1;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))}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}\n"] }]
|
3471
|
+
AXDecoratorGenericComponent,
|
3472
|
+
], providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], 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 <div class=\"ax-scheduler-week-header-days\">\n <div class=\"ax-scheduler-week-header-table\">{{ '@acorex:dateTime.duration.all-day' | translate | async }}</div>\n <div aria-hidden=\"true\" class=\"ax-scheduler-week-header-date\">\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 @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 [ngClass]=\"\n slotData.appointments[0].cssClass ??\n `ax-scheduler-${slotData.appointments[0].priority ?? 'primary'}-periority`\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 [ngClass]=\"\n slotData.appointments[1].cssClass ??\n `ax-scheduler-${slotData.appointments[1].priority ?? 'primary'}-periority`\n \"\n >\n +{{ slotData.appointments.length - 1 }}\n </div>\n <ax-popover [target]=\"moreAppointments\">\n <div class=\"ax-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\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\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 [ngClass]=\"appt.appointment.cssClass ?? `ax-scheduler-${appt.appointment.priority ?? 'primary'}-periority`\"\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 [ngClass]=\"\n badge.hiddenAppointments[0].cssClass ??\n `ax-scheduler-${badge.hiddenAppointments[0].priority ?? 'primary'}-periority`\n \"\n >\n +{{ badge.count }}\n </div>\n <!-- The Popover -->\n <ax-popover [target]=\"actionButton\">\n <div class=\"ax-overlay-pane 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 [ngClass]=\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\"\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: ["ax-scheduler-week-view{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:10;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-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"] }]
|
2126
3473
|
}], propDecorators: { isReadonly: [{
|
2127
3474
|
type: HostBinding,
|
2128
3475
|
args: ['class.ax-state-readonly']
|
@@ -2147,12 +3494,13 @@ class AXSchedulerComponent extends NXComponent {
|
|
2147
3494
|
'timeline-day': 'daily-timeline',
|
2148
3495
|
'timeline-multi-day': 'multi-day-timeline',
|
2149
3496
|
'timeline-month': 'monthly-timeline',
|
3497
|
+
'timeline-year': 'yearly-timeline',
|
2150
3498
|
agenda: 'agenda',
|
2151
3499
|
};
|
2152
3500
|
this.calendar = input(...(ngDevMode ? [undefined, { debugName: "calendar" }] : []));
|
2153
|
-
this.calendarType = linkedSignal(() => this.calendar() ?? this.localeService.activeProfile().calendar.system);
|
3501
|
+
this.calendarType = linkedSignal(() => this.calendar() ?? this.localeService.activeProfile().calendar.system, ...(ngDevMode ? [{ debugName: "calendarType" }] : []));
|
2154
3502
|
this.startingDate = input(new Date(), ...(ngDevMode ? [{ debugName: "startingDate" }] : []));
|
2155
|
-
this.currentDate = linkedSignal(() => this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'));
|
3503
|
+
this.currentDate = linkedSignal(() => this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'), ...(ngDevMode ? [{ debugName: "currentDate" }] : []));
|
2156
3504
|
this._appointments = signal([], ...(ngDevMode ? [{ debugName: "_appointments" }] : []));
|
2157
3505
|
this.appointments = this._appointments.asReadonly();
|
2158
3506
|
this.rtl = signal(false, ...(ngDevMode ? [{ debugName: "rtl" }] : []));
|
@@ -2166,12 +3514,18 @@ class AXSchedulerComponent extends NXComponent {
|
|
2166
3514
|
this.draggable = input(true, ...(ngDevMode ? [{ debugName: "draggable" }] : []));
|
2167
3515
|
this.hasActions = input(false, ...(ngDevMode ? [{ debugName: "hasActions" }] : []));
|
2168
3516
|
this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: "dragStartDelay" }] : []));
|
3517
|
+
this.weekend = input([], ...(ngDevMode ? [{ debugName: "weekend" }] : []));
|
2169
3518
|
this.allowFullScreen = input(true, ...(ngDevMode ? [{ debugName: "allowFullScreen" }] : []));
|
2170
3519
|
this.multiDayViewDaysCount = input(7, ...(ngDevMode ? [{ debugName: "multiDayViewDaysCount" }] : []));
|
3520
|
+
this.showResourceHeaders = input(true, ...(ngDevMode ? [{ debugName: "showResourceHeaders" }] : []));
|
3521
|
+
this.showCurrentTimeIndicator = input(true, ...(ngDevMode ? [{ debugName: "showCurrentTimeIndicator" }] : []));
|
3522
|
+
this.showUnassignedAppointments = input(true, ...(ngDevMode ? [{ debugName: "showUnassignedAppointments" }] : []));
|
3523
|
+
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : []));
|
3524
|
+
this.resourceTemplate = input(...(ngDevMode ? [undefined, { debugName: "resourceTemplate" }] : []));
|
3525
|
+
this.firstDayOfWeek = input('sunday', ...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : []));
|
2171
3526
|
this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: "tooltipTemplate" }] : []));
|
2172
3527
|
this.dataSource = input([], ...(ngDevMode ? [{ debugName: "dataSource" }] : []));
|
2173
3528
|
this.holidays = input(...(ngDevMode ? [undefined, { debugName: "holidays" }] : []));
|
2174
|
-
this.firstDayOfWeek = input('sunday', ...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : []));
|
2175
3529
|
this.views = input([
|
2176
3530
|
'day',
|
2177
3531
|
'week',
|
@@ -2179,6 +3533,7 @@ class AXSchedulerComponent extends NXComponent {
|
|
2179
3533
|
'timeline-day',
|
2180
3534
|
'timeline-multi-day',
|
2181
3535
|
'timeline-month',
|
3536
|
+
'timeline-year',
|
2182
3537
|
'agenda',
|
2183
3538
|
], ...(ngDevMode ? [{ debugName: "views" }] : []));
|
2184
3539
|
this.selectedView = model(this.views()[0], ...(ngDevMode ? [{ debugName: "selectedView" }] : []));
|
@@ -2218,6 +3573,10 @@ class AXSchedulerComponent extends NXComponent {
|
|
2218
3573
|
};
|
2219
3574
|
this.schedulerService.internalHoliday.set(await func(range));
|
2220
3575
|
}, ...(ngDevMode ? [{ debugName: "#holidayEffect" }] : []));
|
3576
|
+
this.#weekendEffect = effect(async () => {
|
3577
|
+
const weekend = this.weekend();
|
3578
|
+
this.schedulerService.internalWeekend.set(weekend);
|
3579
|
+
}, ...(ngDevMode ? [{ debugName: "#weekendEffect" }] : []));
|
2221
3580
|
this.currentDateText = computed(() => {
|
2222
3581
|
switch (this.selectedView()) {
|
2223
3582
|
case 'day':
|
@@ -2255,6 +3614,11 @@ class AXSchedulerComponent extends NXComponent {
|
|
2255
3614
|
format: 'MMMM yyyy',
|
2256
3615
|
calendar: this.calendarType(),
|
2257
3616
|
});
|
3617
|
+
case 'timeline-year':
|
3618
|
+
return this.formatService.format(this.currentDate(), 'datetime', {
|
3619
|
+
format: 'yyyy',
|
3620
|
+
calendar: this.calendarType(),
|
3621
|
+
});
|
2258
3622
|
}
|
2259
3623
|
}, ...(ngDevMode ? [{ debugName: "currentDateText" }] : []));
|
2260
3624
|
this.calendarDepth = computed(() => {
|
@@ -2268,6 +3632,8 @@ class AXSchedulerComponent extends NXComponent {
|
|
2268
3632
|
case 'month':
|
2269
3633
|
case 'timeline-month':
|
2270
3634
|
return 'month';
|
3635
|
+
case 'timeline-year':
|
3636
|
+
return 'year';
|
2271
3637
|
}
|
2272
3638
|
}, ...(ngDevMode ? [{ debugName: "calendarDepth" }] : []));
|
2273
3639
|
this.mappedAppointments = computed(() => {
|
@@ -2319,6 +3685,10 @@ class AXSchedulerComponent extends NXComponent {
|
|
2319
3685
|
const range = { from: current.date, end: current.add('day', this.multiDayViewDaysCount()).date };
|
2320
3686
|
return range;
|
2321
3687
|
}
|
3688
|
+
case 'timeline-year': {
|
3689
|
+
const range = { from: current.startOf('year').date, end: current.endOf('year').date };
|
3690
|
+
return range;
|
3691
|
+
}
|
2322
3692
|
}
|
2323
3693
|
}, ...(ngDevMode ? [{ debugName: "range" }] : []));
|
2324
3694
|
this.#rangeChangedEffect = effect(() => {
|
@@ -2384,6 +3754,7 @@ class AXSchedulerComponent extends NXComponent {
|
|
2384
3754
|
}
|
2385
3755
|
#appointmentEffect;
|
2386
3756
|
#holidayEffect;
|
3757
|
+
#weekendEffect;
|
2387
3758
|
async fillDataSource() {
|
2388
3759
|
const result = [];
|
2389
3760
|
for await (const c of this.views()) {
|
@@ -2404,6 +3775,11 @@ class AXSchedulerComponent extends NXComponent {
|
|
2404
3775
|
}
|
2405
3776
|
#rangeChangedEffect;
|
2406
3777
|
#viewChangedEffect;
|
3778
|
+
/**
|
3779
|
+
* Handles view change events.
|
3780
|
+
*
|
3781
|
+
* @param e - The value changed event containing old and new view values.
|
3782
|
+
*/
|
2407
3783
|
viewChanged(e) {
|
2408
3784
|
const newView = e.value;
|
2409
3785
|
const oldView = e.oldValue;
|
@@ -2428,6 +3804,9 @@ class AXSchedulerComponent extends NXComponent {
|
|
2428
3804
|
}
|
2429
3805
|
this.prevView.set(newView);
|
2430
3806
|
}
|
3807
|
+
/**
|
3808
|
+
* Navigates to the next time period based on current view.
|
3809
|
+
*/
|
2431
3810
|
nextClick() {
|
2432
3811
|
switch (this.selectedView()) {
|
2433
3812
|
case 'day':
|
@@ -2445,8 +3824,14 @@ class AXSchedulerComponent extends NXComponent {
|
|
2445
3824
|
case 'timeline-month':
|
2446
3825
|
this.currentDate.set(this.currentDate().add('month', 1));
|
2447
3826
|
break;
|
3827
|
+
case 'timeline-year':
|
3828
|
+
this.currentDate.set(this.currentDate().add('year', 1));
|
3829
|
+
break;
|
2448
3830
|
}
|
2449
3831
|
}
|
3832
|
+
/**
|
3833
|
+
* Navigates to the previous time period based on current view.
|
3834
|
+
*/
|
2450
3835
|
prevClick() {
|
2451
3836
|
switch (this.selectedView()) {
|
2452
3837
|
case 'day':
|
@@ -2464,8 +3849,16 @@ class AXSchedulerComponent extends NXComponent {
|
|
2464
3849
|
case 'timeline-month':
|
2465
3850
|
this.currentDate.set(this.currentDate().add('month', -1));
|
2466
3851
|
break;
|
3852
|
+
case 'timeline-year':
|
3853
|
+
this.currentDate.set(this.currentDate().add('year', -1));
|
3854
|
+
break;
|
2467
3855
|
}
|
2468
3856
|
}
|
3857
|
+
/**
|
3858
|
+
* Handles calendar date change events.
|
3859
|
+
*
|
3860
|
+
* @param e - The value changed event containing the new date.
|
3861
|
+
*/
|
2469
3862
|
calendarDateChanged(e) {
|
2470
3863
|
let currentDate = this.calendarService.create(e.value, this.calendarType());
|
2471
3864
|
if (this.selectedView() === 'week') {
|
@@ -2480,6 +3873,9 @@ class AXSchedulerComponent extends NXComponent {
|
|
2480
3873
|
}
|
2481
3874
|
this.calendarPopover()?.close();
|
2482
3875
|
}
|
3876
|
+
/**
|
3877
|
+
* Toggles fullscreen mode for the scheduler.
|
3878
|
+
*/
|
2483
3879
|
handleFullScreen() {
|
2484
3880
|
if (!this.isFullScreen())
|
2485
3881
|
this.nativeElement.classList.add('ax-full-screen-container');
|
@@ -2487,6 +3883,11 @@ class AXSchedulerComponent extends NXComponent {
|
|
2487
3883
|
this.nativeElement.classList.remove('ax-full-screen-container');
|
2488
3884
|
this.isFullScreen.set(!this.isFullScreen());
|
2489
3885
|
}
|
3886
|
+
/**
|
3887
|
+
* Refreshes the scheduler data.
|
3888
|
+
*
|
3889
|
+
* @param appointments - Optional array of appointments to refresh with.
|
3890
|
+
*/
|
2490
3891
|
async refresh(appointments) {
|
2491
3892
|
if (appointments) {
|
2492
3893
|
const newAppointments = this._appointments().map((appt) => {
|
@@ -2511,27 +3912,28 @@ class AXSchedulerComponent extends NXComponent {
|
|
2511
3912
|
this._appointments.set(list);
|
2512
3913
|
this.onDataLoaded.emit();
|
2513
3914
|
}
|
2514
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
2515
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.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 }, allowFullScreen: { classPropertyName: "allowFullScreen", publicName: "allowFullScreen", isSignal: true, isRequired: false, transformFunction: null }, multiDayViewDaysCount: { classPropertyName: "multiDayViewDaysCount", publicName: "multiDayViewDaysCount", 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 }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", 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" }, 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 [ngClass]=\"{\n 'ax-icon-chevron-left': !rtl(),\n 'ax-icon-chevron-right': rtl(),\n }\"\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 [ngClass]=\"{\n 'ax-icon-chevron-right': !rtl(),\n 'ax-icon-chevron-left': rtl(),\n }\"\n ></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" #calendarPopover>\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n (onValueChanged)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </div>\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\n class=\"fa-solid fa-expand\"\n [ngClass]=\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\"\n ></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 [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\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 (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 [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\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 (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 [draggable]=\"draggable()\"\n [hasActions]=\"hasActions()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\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 [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 (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 [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\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 ('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 (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-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}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;left: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-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.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-periority{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-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}\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: 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", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { 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: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "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", "cellTemplate", "cellClass", "showNavigation", "count", "id"], outputs: ["onOptionChanged", "valueChange", "onValueChanged", "minValueChange", "maxValueChange", "onBlur", "onFocus", "depthChange", "typeChange", "activeViewChange", "disabledDatesChange", "holidayDatesChange", "onNavigate", "onSlotClick", "countChange"] }, { kind: "component", type: AXSchedulerDayViewComponent, selector: "ax-scheduler-day-view", inputs: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "date", "endDayHour", "startDayHour", "appointments", "tooltipTemplate"], 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", "appointments", "tooltipTemplate"], 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", "tooltipTemplate"], 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", "date", "endDayHour", "startDayHour", "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", "date", "endDayHour", "startDayHour", "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", "date", "appointments", "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"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
3915
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
3916
|
+
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" }, 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 [ngClass]=\"{\n 'ax-icon-chevron-left': !rtl(),\n 'ax-icon-chevron-right': rtl(),\n }\"\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 [ngClass]=\"{\n 'ax-icon-chevron-right': !rtl(),\n 'ax-icon-chevron-left': rtl(),\n }\"\n ></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" #calendarPopover>\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n (onValueChanged)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </div>\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\n class=\"fa-solid fa-expand\"\n [ngClass]=\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\"\n ></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 [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 (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 (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 (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 (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 (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 (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 (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 (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-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}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;left: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-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.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-periority{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-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.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: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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", "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", "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: ["readonly", "draggable", "hasActions", "dragStartDelay", "calendar", "date", "endDayHour", "startDayHour", "showCurrentTimeIndicator", "appointments", "tooltipTemplate"], 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"], 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", "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"], 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", "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", "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", "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", "resources", "showCurrentTimeIndicator", "resourceTemplate", "appointments", "tooltipTemplate"], outputs: ["slotClickedInternal", "slotDblClickedInternal", "slotRightClickedInternal", "appointmentClickedInternal", "appointmentDblClickedInternal", "appointmentRightClickedInternal", "onActionClickInternal", "onAppointmentDropInternal"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
2516
3917
|
}
|
2517
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
3918
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerComponent, decorators: [{
|
2518
3919
|
type: Component,
|
2519
3920
|
args: [{ selector: 'ax-scheduler', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
|
3921
|
+
NgClass,
|
2520
3922
|
FormsModule,
|
2521
|
-
AXSelectBoxComponent,
|
2522
|
-
AXDecoratorIconComponent,
|
2523
3923
|
AXButtonComponent,
|
2524
|
-
NgClass,
|
2525
3924
|
AXPopoverComponent,
|
2526
3925
|
AXCalendarComponent,
|
3926
|
+
AXSelectBoxComponent,
|
3927
|
+
AXDecoratorIconComponent,
|
2527
3928
|
AXSchedulerDayViewComponent,
|
2528
3929
|
AXSchedulerWeekViewComponent,
|
2529
3930
|
AXSchedulerMonthViewComponent,
|
3931
|
+
AXSchedulerAgendaViewComponent,
|
2530
3932
|
AXSchedulerTimelineDayViewComponent,
|
2531
|
-
AXSchedulerTimelineMultiDayViewComponent,
|
2532
3933
|
AXSchedulerTimelineMonthViewComponent,
|
2533
|
-
|
2534
|
-
], 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 [ngClass]=\"{\n 'ax-icon-chevron-left': !rtl(),\n 'ax-icon-chevron-right': rtl(),\n }\"\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 [ngClass]=\"{\n 'ax-icon-chevron-right': !rtl(),\n 'ax-icon-chevron-left': rtl(),\n }\"\n ></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" #calendarPopover>\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n (onValueChanged)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </div>\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\n class=\"fa-solid fa-expand\"\n [ngClass]=\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\"\n ></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 [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\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 (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 [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\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 (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 [draggable]=\"draggable()\"\n [hasActions]=\"hasActions()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\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 [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 (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 [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [hasActions]=\"hasActions()\"\n [appointments]=\"viewAppointments()\"\n [dragStartDelay]=\"dragStartDelay()\"\n [tooltipTemplate]=\"tooltipTemplate()\"\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 ('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 (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-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}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;left: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-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.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-periority{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-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}\n"] }]
|
3934
|
+
AXSchedulerTimelineMultiDayViewComponent,
|
3935
|
+
AXSchedulerTimelineYearViewComponent,
|
3936
|
+
], 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 [ngClass]=\"{\n 'ax-icon-chevron-left': !rtl(),\n 'ax-icon-chevron-right': rtl(),\n }\"\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 [ngClass]=\"{\n 'ax-icon-chevron-right': !rtl(),\n 'ax-icon-chevron-left': rtl(),\n }\"\n ></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" #calendarPopover>\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n (onValueChanged)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </div>\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\n class=\"fa-solid fa-expand\"\n [ngClass]=\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\"\n ></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 [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 (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 (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 (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 (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 (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 (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 (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 (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-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}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;left: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-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.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-periority{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-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.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"] }]
|
2535
3937
|
}] });
|
2536
3938
|
|
2537
3939
|
const COMPONENT = [
|
@@ -2539,22 +3941,34 @@ const COMPONENT = [
|
|
2539
3941
|
AXSchedulerDayViewComponent,
|
2540
3942
|
AXSchedulerWeekViewComponent,
|
2541
3943
|
AXSchedulerMonthViewComponent,
|
3944
|
+
AXSchedulerAgendaViewComponent,
|
2542
3945
|
AXSchedulerTimelineDayViewComponent,
|
3946
|
+
AXSchedulerTimelineMonthViewComponent,
|
3947
|
+
AXSchedulerTimelineMultiDayViewComponent,
|
3948
|
+
AXSchedulerTimelineYearViewComponent,
|
2543
3949
|
];
|
2544
3950
|
class AXSchedulerModule {
|
2545
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.
|
2546
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.
|
3951
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
3952
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerModule, imports: [AXSchedulerComponent,
|
2547
3953
|
AXSchedulerDayViewComponent,
|
2548
3954
|
AXSchedulerWeekViewComponent,
|
2549
3955
|
AXSchedulerMonthViewComponent,
|
2550
|
-
|
3956
|
+
AXSchedulerAgendaViewComponent,
|
3957
|
+
AXSchedulerTimelineDayViewComponent,
|
3958
|
+
AXSchedulerTimelineMonthViewComponent,
|
3959
|
+
AXSchedulerTimelineMultiDayViewComponent,
|
3960
|
+
AXSchedulerTimelineYearViewComponent], exports: [AXSchedulerComponent,
|
2551
3961
|
AXSchedulerDayViewComponent,
|
2552
3962
|
AXSchedulerWeekViewComponent,
|
2553
3963
|
AXSchedulerMonthViewComponent,
|
2554
|
-
|
2555
|
-
|
3964
|
+
AXSchedulerAgendaViewComponent,
|
3965
|
+
AXSchedulerTimelineDayViewComponent,
|
3966
|
+
AXSchedulerTimelineMonthViewComponent,
|
3967
|
+
AXSchedulerTimelineMultiDayViewComponent,
|
3968
|
+
AXSchedulerTimelineYearViewComponent] }); }
|
3969
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerModule, imports: [COMPONENT] }); }
|
2556
3970
|
}
|
2557
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.
|
3971
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXSchedulerModule, decorators: [{
|
2558
3972
|
type: NgModule,
|
2559
3973
|
args: [{
|
2560
3974
|
imports: [...COMPONENT],
|
@@ -2567,5 +3981,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
|
|
2567
3981
|
* Generated bundle index. Do not edit.
|
2568
3982
|
*/
|
2569
3983
|
|
2570
|
-
export { AXSchedulerAgendaViewComponent, AXSchedulerComponent, AXSchedulerDayViewComponent, AXSchedulerModule, AXSchedulerMonthViewComponent, AXSchedulerService, AXSchedulerTimelineDayViewComponent, AXSchedulerTimelineMonthViewComponent, AXSchedulerTimelineMultiDayViewComponent, AXSchedulerWeekViewComponent };
|
3984
|
+
export { AXSchedulerAgendaViewComponent, AXSchedulerComponent, AXSchedulerDayViewComponent, AXSchedulerModule, AXSchedulerMonthViewComponent, AXSchedulerService, AXSchedulerTimelineDayViewComponent, AXSchedulerTimelineMonthViewComponent, AXSchedulerTimelineMultiDayViewComponent, AXSchedulerTimelineYearViewComponent, AXSchedulerWeekViewComponent };
|
2571
3985
|
//# sourceMappingURL=acorex-components-scheduler.mjs.map
|