@acorex/components 19.14.0 → 19.14.2
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/action-sheet/lib/action-sheet.class.d.ts +1 -1
- package/action-sheet/lib/action-sheet.component.d.ts +1 -1
- package/action-sheet/lib/action-sheet.module.d.ts +1 -1
- package/alert/lib/alert.component.d.ts +1 -1
- package/audio-wave/lib/interfaces/audio-wave.interface.d.ts +1 -1
- package/autocomplete/lib/autocomplete.component.d.ts +1 -1
- package/avatar/lib/avatar.component.d.ts +1 -1
- package/badge/lib/badge.component.d.ts +1 -1
- package/bottom-navigation/lib/bottom-navigation-item/bottom-navigation-item.component.d.ts +2 -2
- package/bottom-navigation/lib/bottom-navigation.component.d.ts +1 -1
- package/breadcrumbs/lib/breadcrumbs-item.component.d.ts +1 -1
- package/breadcrumbs/lib/breadcrumbs.component.d.ts +1 -1
- package/button/lib/button-item-list.component.d.ts +2 -2
- package/button/lib/button-item.class.d.ts +1 -1
- package/button/lib/button-item.component.d.ts +1 -1
- package/button/lib/button.component.d.ts +1 -1
- package/button/lib/button.module.d.ts +1 -1
- package/button-group/lib/button-group-item.component.d.ts +1 -1
- package/button-group/lib/button-group.component.d.ts +1 -1
- package/calendar/lib/calendar-range.component.d.ts +1 -1
- package/calendar/lib/calendar.class.d.ts +1 -1
- package/calendar/lib/calendar.component.d.ts +1 -1
- package/calendar/lib/calendar.module.d.ts +1 -1
- package/check-box/lib/check-box.component.d.ts +1 -1
- package/chips/lib/chips.component.d.ts +2 -2
- package/circular-progress/lib/circular-progress.component.d.ts +1 -1
- package/collapse/lib/collapse-group.component.d.ts +1 -1
- package/collapse/lib/collapse.component.d.ts +1 -1
- package/color-box/lib/color-box.component.d.ts +1 -1
- package/color-palette/lib/color-palette-input.component.d.ts +1 -1
- package/color-palette/lib/color-palette-picker.component.d.ts +1 -1
- package/color-palette/lib/color-palette-preview.component.d.ts +1 -1
- package/color-palette/lib/color-palette-swatches.component.d.ts +1 -1
- package/color-palette/lib/color-palette.class.d.ts +1 -1
- package/color-palette/lib/color-palette.component.d.ts +1 -1
- package/conversation/lib/classes/events.interface.d.ts +1 -1
- package/conversation/lib/conversation-input/conversation-input.component.d.ts +1 -1
- package/conversation/lib/conversation-message/conversation-message.component.d.ts +1 -1
- package/conversation/lib/conversation-view/conversation-view.component.d.ts +1 -1
- package/conversation/lib/conversation.module.d.ts +1 -1
- package/cron-job/lib/cron-job-container/cron-job-container.component.d.ts +1 -1
- package/cron-job/lib/day/day.component.d.ts +1 -1
- package/cron-job/lib/hours/hours.component.d.ts +1 -1
- package/cron-job/lib/minutes/minutes.component.d.ts +1 -1
- package/cron-job/lib/month/month.component.d.ts +1 -1
- package/cron-job/lib/seconds/seconds.component.d.ts +1 -1
- package/cron-job/lib/year/year.component.d.ts +1 -1
- package/data-pager/lib/data-pager-base.component.d.ts +1 -1
- package/data-pager/lib/data-pager-input-selector.component.d.ts +1 -1
- package/data-pager/lib/data-pager-next-buttons.component.d.ts +1 -1
- package/data-pager/lib/data-pager-pagesize-dropdown.component.d.ts +1 -1
- package/data-pager/lib/data-pager-prev-buttons.component.d.ts +1 -1
- package/data-pager/lib/data-pager.component.d.ts +1 -1
- package/data-table/lib/base-data-table.class.d.ts +1 -1
- package/data-table/lib/columns/data-table-column.d.ts +1 -1
- package/data-table/lib/columns/row-command-column.component.d.ts +1 -1
- package/data-table/lib/columns/row-select-column.component.d.ts +1 -1
- package/data-table/lib/data-table.module.d.ts +1 -1
- package/data-table/lib/infinite-scroll-data-table/infinite-scroll-data-table.component.d.ts +1 -1
- package/datetime-box/lib/datetime-box.component.d.ts +1 -1
- package/datetime-input/lib/datetime-input.component.d.ts +1 -1
- package/datetime-picker/lib/datetime-picker.component.d.ts +1 -1
- package/decorators/lib/components/clear-button/clear-button.component.d.ts +2 -2
- package/decorators/lib/components/close-button/close-button.component.d.ts +2 -2
- package/decorators/lib/components/full-screen/full-screen-button.component.d.ts +1 -1
- package/decorators/lib/components/generic-content.component.d.ts +1 -1
- package/decorators/lib/components/heading/heading.component.d.ts +1 -1
- package/decorators/lib/components/icon/icon.component.d.ts +1 -1
- package/dialog/lib/dialog.class.d.ts +1 -1
- package/dialog/lib/dialog.component.d.ts +1 -1
- package/dialog/lib/dialog.module.d.ts +1 -1
- package/dialog/lib/dialog.service.d.ts +1 -1
- package/drawer/lib/drawer/drawer-container/drawer-container.component.d.ts +1 -1
- package/drawer/lib/drawer/drawer-item/drawer.component.d.ts +1 -1
- package/dropdown/lib/dropdown-box.class.d.ts +1 -1
- package/dropdown/lib/dropdown-box.component.d.ts +2 -2
- package/dropdown/lib/dropdown-panel.component.d.ts +2 -2
- package/dropdown/lib/dropdown.module.d.ts +1 -1
- package/dropdown-button/lib/dropdown-button.component.d.ts +2 -2
- package/dropdown-button/lib/dropdown-button.module.d.ts +1 -1
- package/fesm2022/acorex-components-action-sheet.mjs +15 -13
- package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
- package/fesm2022/acorex-components-alert.mjs +15 -9
- package/fesm2022/acorex-components-alert.mjs.map +1 -1
- package/fesm2022/acorex-components-audio-wave.mjs +9 -8
- package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
- package/fesm2022/acorex-components-autocomplete.mjs +10 -10
- package/fesm2022/acorex-components-autocomplete.mjs.map +1 -1
- package/fesm2022/acorex-components-avatar.mjs +13 -12
- package/fesm2022/acorex-components-avatar.mjs.map +1 -1
- package/fesm2022/acorex-components-badge.mjs +9 -9
- package/fesm2022/acorex-components-badge.mjs.map +1 -1
- package/fesm2022/acorex-components-bottom-navigation.mjs +14 -14
- package/fesm2022/acorex-components-bottom-navigation.mjs.map +1 -1
- package/fesm2022/acorex-components-breadcrumbs.mjs +13 -13
- package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/acorex-components-button-group.mjs +13 -12
- package/fesm2022/acorex-components-button-group.mjs.map +1 -1
- package/fesm2022/acorex-components-button.mjs +22 -22
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-calendar.mjs +18 -14
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +12 -10
- package/fesm2022/acorex-components-check-box.mjs.map +1 -1
- package/fesm2022/acorex-components-chips.mjs +10 -10
- package/fesm2022/acorex-components-chips.mjs.map +1 -1
- package/fesm2022/acorex-components-circular-progress.mjs +9 -9
- package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
- package/fesm2022/acorex-components-collapse.mjs +15 -13
- package/fesm2022/acorex-components-collapse.mjs.map +1 -1
- package/fesm2022/acorex-components-color-box.mjs +8 -8
- package/fesm2022/acorex-components-color-box.mjs.map +1 -1
- package/fesm2022/acorex-components-color-palette.mjs +36 -26
- package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
- package/fesm2022/acorex-components-comment.mjs +37 -36
- package/fesm2022/acorex-components-comment.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation.mjs +61 -63
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-cron-job.mjs +57 -53
- package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
- package/fesm2022/acorex-components-data-pager.mjs +75 -37
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +59 -39
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +8 -8
- package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-input.mjs +8 -8
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +10 -10
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +46 -36
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +21 -13
- package/fesm2022/acorex-components-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-drawer.mjs +17 -17
- package/fesm2022/acorex-components-drawer.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown-button.mjs +12 -10
- package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +19 -17
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-file-explorer.mjs +39 -31
- package/fesm2022/acorex-components-file-explorer.mjs.map +1 -1
- package/fesm2022/acorex-components-flow-chart.mjs +30 -20
- package/fesm2022/acorex-components-flow-chart.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +20 -18
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-grid-layout-builder.mjs +55 -16
- package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-image-editor.mjs +43 -45
- package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-image.mjs +15 -9
- package/fesm2022/acorex-components-image.mjs.map +1 -1
- package/fesm2022/acorex-components-json-viewer.mjs +9 -8
- package/fesm2022/acorex-components-json-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-kbd.mjs +13 -12
- package/fesm2022/acorex-components-kbd.mjs.map +1 -1
- package/fesm2022/acorex-components-label.mjs +15 -9
- package/fesm2022/acorex-components-label.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +8 -8
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading-dialog.mjs +12 -12
- package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-loading.mjs +19 -19
- package/fesm2022/acorex-components-loading.mjs.map +1 -1
- package/fesm2022/acorex-components-map.mjs +269 -105
- package/fesm2022/acorex-components-map.mjs.map +1 -1
- package/fesm2022/acorex-components-media-viewer.mjs +42 -41
- package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +41 -17
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/{acorex-components-modal-acorex-components-modal-Ckn70-o5.mjs → acorex-components-modal-acorex-components-modal-CJ3M9U7p.mjs} +24 -23
- package/fesm2022/acorex-components-modal-acorex-components-modal-CJ3M9U7p.mjs.map +1 -0
- package/fesm2022/acorex-components-modal-modal-content.component-Ef5XWxUb.mjs +216 -0
- package/fesm2022/acorex-components-modal-modal-content.component-Ef5XWxUb.mjs.map +1 -0
- package/fesm2022/acorex-components-modal.mjs +1 -1
- package/fesm2022/acorex-components-navbar.mjs +9 -9
- package/fesm2022/acorex-components-navbar.mjs.map +1 -1
- package/fesm2022/acorex-components-notification.mjs +18 -12
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box.mjs +8 -8
- package/fesm2022/acorex-components-number-box.mjs.map +1 -1
- package/fesm2022/acorex-components-otp.mjs +20 -8
- package/fesm2022/acorex-components-otp.mjs.map +1 -1
- package/fesm2022/acorex-components-page.mjs +11 -11
- package/fesm2022/acorex-components-page.mjs.map +1 -1
- package/fesm2022/acorex-components-paint.mjs +31 -33
- package/fesm2022/acorex-components-paint.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +21 -23
- package/fesm2022/acorex-components-password-box.mjs.map +1 -1
- package/fesm2022/acorex-components-pdf-reader.mjs +9 -8
- package/fesm2022/acorex-components-pdf-reader.mjs.map +1 -1
- package/fesm2022/acorex-components-phone-box.mjs +8 -8
- package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
- package/fesm2022/acorex-components-picker.mjs +18 -16
- package/fesm2022/acorex-components-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs +15 -9
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +18 -12
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs +9 -9
- package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
- package/fesm2022/acorex-components-qrcode.mjs +10 -8
- package/fesm2022/acorex-components-qrcode.mjs.map +1 -1
- package/fesm2022/acorex-components-query-builder.mjs +9 -9
- package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-radio.mjs +10 -8
- package/fesm2022/acorex-components-radio.mjs.map +1 -1
- package/fesm2022/acorex-components-rail-navigation.mjs +16 -16
- package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +13 -11
- package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-rate-picker.mjs +10 -8
- package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-rest-api-generator.mjs +28 -27
- package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
- package/fesm2022/acorex-components-result.mjs +9 -9
- package/fesm2022/acorex-components-result.mjs.map +1 -1
- package/fesm2022/acorex-components-routing-progress.mjs +9 -9
- package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler.mjs +331 -256
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-scss.mjs +4 -4
- package/fesm2022/acorex-components-search-box.mjs +9 -9
- package/fesm2022/acorex-components-search-box.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +18 -12
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +8 -8
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-side-menu.mjs +16 -16
- package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-skeleton.mjs +9 -9
- package/fesm2022/acorex-components-skeleton.mjs.map +1 -1
- package/fesm2022/acorex-components-slider.mjs +10 -8
- package/fesm2022/acorex-components-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-sliding-item.mjs +17 -16
- package/fesm2022/acorex-components-sliding-item.mjs.map +1 -1
- package/fesm2022/acorex-components-step-wizard.mjs +16 -16
- package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
- package/fesm2022/acorex-components-switch.mjs +14 -11
- package/fesm2022/acorex-components-switch.mjs.map +1 -1
- package/fesm2022/acorex-components-tabs.mjs +16 -15
- package/fesm2022/acorex-components-tabs.mjs.map +1 -1
- package/fesm2022/acorex-components-tag-box.mjs +10 -10
- package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
- package/fesm2022/acorex-components-tag.mjs +9 -9
- package/fesm2022/acorex-components-tag.mjs.map +1 -1
- package/fesm2022/acorex-components-text-area.mjs +8 -8
- package/fesm2022/acorex-components-text-area.mjs.map +1 -1
- package/fesm2022/acorex-components-text-box.mjs +13 -13
- package/fesm2022/acorex-components-text-box.mjs.map +1 -1
- package/fesm2022/acorex-components-time-duration.mjs +59 -98
- package/fesm2022/acorex-components-time-duration.mjs.map +1 -1
- package/fesm2022/acorex-components-time-line.mjs +13 -12
- package/fesm2022/acorex-components-time-line.mjs.map +1 -1
- package/fesm2022/acorex-components-toast.mjs +18 -12
- package/fesm2022/acorex-components-toast.mjs.map +1 -1
- package/fesm2022/acorex-components-toolbar.mjs +9 -8
- package/fesm2022/acorex-components-toolbar.mjs.map +1 -1
- package/fesm2022/acorex-components-tooltip.mjs +12 -12
- 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 +27 -27
- package/fesm2022/acorex-components-uploader.mjs.map +1 -1
- package/fesm2022/acorex-components-video-player.mjs +9 -8
- package/fesm2022/acorex-components-video-player.mjs.map +1 -1
- package/fesm2022/acorex-components-wysiwyg.mjs +39 -41
- package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
- package/file-explorer/lib/file-explorer-item/file-explorer-item.component.d.ts +1 -1
- package/flow-chart/lib/flow-chart-creator/flow-chart-creator.component.d.ts +1 -1
- package/flow-chart/lib/flow-chart-renderer/flow-chart-renderer.component.d.ts +1 -1
- package/flow-chart/lib/flow-chart.component.d.ts +1 -1
- package/form/lib/form-field.component.d.ts +1 -1
- package/form/lib/form.component.d.ts +1 -1
- package/form/lib/validation-summary.component.d.ts +1 -1
- package/grid-layout-builder/lib/grid-layout-container.component.d.ts +4 -3
- package/grid-layout-builder/lib/types.d.ts +1 -1
- package/image/lib/image.component.d.ts +1 -1
- package/image-editor/lib/image-editor-container/image-editor-container.component.d.ts +1 -1
- package/image-editor/lib/image-editor-view/image-editor-view.component.d.ts +1 -1
- package/label/lib/label.component.d.ts +1 -1
- package/list/lib/list.component.d.ts +1 -1
- package/loading/lib/loading-spinner.component.d.ts +1 -1
- package/loading/lib/loading.component.d.ts +1 -1
- package/loading-dialog/lib/loading-dialog.class.d.ts +1 -1
- package/loading-dialog/lib/loading-dialog.component.d.ts +1 -1
- package/loading-dialog/lib/loading-dialog.module.d.ts +1 -1
- package/map/lib/map.component.d.ts +38 -11
- package/menu/lib/context-menu.component.d.ts +1 -1
- package/menu/lib/menu-item.component.d.ts +1 -1
- package/menu/lib/menu.component.d.ts +1 -1
- package/menu/lib/menu.types.d.ts +1 -1
- package/modal/lib/modal-content/modal-content.component.d.ts +1 -1
- package/modal/lib/modal.component.d.ts +1 -1
- package/navbar/lib/navbar.component.d.ts +1 -1
- package/notification/lib/notification.class.d.ts +1 -1
- package/notification/lib/notification.component.d.ts +1 -1
- package/notification/lib/notification.config.d.ts +1 -1
- package/number-box/lib/number-box.component.d.ts +1 -1
- package/otp/lib/otp.class.d.ts +1 -1
- package/otp/lib/otp.component.d.ts +1 -1
- package/package.json +1 -5
- package/page/lib/base-page.class.d.ts +1 -1
- package/page/lib/page.component.d.ts +1 -1
- package/paint/lib/paint/paint-container/paint-container.component.d.ts +1 -1
- package/password-box/lib/password-box.component.d.ts +1 -1
- package/password-box/lib/password-strength-validation/password-strength-validation.component.d.ts +9 -11
- package/phone-box/lib/phone-box.component.d.ts +1 -1
- package/picker/lib/picker-items/picker-items.component.d.ts +1 -1
- package/popover/lib/popover.component.d.ts +1 -1
- package/popup/lib/popup.component.d.ts +1 -1
- package/popup/lib/popup.module.d.ts +1 -1
- package/popup/lib/popup.service.d.ts +1 -1
- package/progress-bar/lib/progress-bar.component.d.ts +1 -1
- package/query-builder/lib/query-builder.component.d.ts +1 -1
- package/radio/lib/radio.component.d.ts +1 -1
- package/rail-navigation/lib/rail-navigation-item/rail-navigation-item.component.d.ts +1 -1
- package/rail-navigation/lib/rail-navigation.component.d.ts +1 -1
- package/range-slider/lib/range-slider.class.d.ts +1 -1
- package/range-slider/lib/range-slider.component.d.ts +1 -1
- package/rate-picker/lib/rate-picker.component.d.ts +1 -1
- package/rest-api-generator/lib/query-params/query-params.component.d.ts +1 -1
- package/rest-api-generator/lib/request-body/request-body.component.d.ts +1 -1
- package/rest-api-generator/lib/request-headers/request-headers.component.d.ts +1 -1
- package/rest-api-generator/lib/rest-api-auth/rest-api-auth.component.d.ts +1 -1
- package/rest-api-generator/lib/rest-api-generator.component.d.ts +1 -1
- package/result/lib/result.component.d.ts +1 -1
- package/routing-progress/lib/routing-progress.component.d.ts +1 -1
- package/scheduler/lib/scheduler.class.d.ts +35 -31
- package/scheduler/lib/scheduler.component.d.ts +60 -41
- package/scheduler/lib/scheduler.service.d.ts +15 -14
- package/scheduler/lib/views/agenda/scheduler-agenda-view.component.d.ts +14 -12
- package/scheduler/lib/views/day/scheduler-day-view.component.d.ts +19 -17
- package/scheduler/lib/views/month/scheduler-month-view.component.d.ts +17 -15
- package/scheduler/lib/views/timeline-day/scheduler-timeline-day-view.component.d.ts +17 -15
- package/scheduler/lib/views/timeline-month/scheduler-timeline-month-view.component.d.ts +15 -13
- package/scheduler/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.d.ts +15 -14
- package/scheduler/lib/views/week/scheduler-week-view.component.d.ts +19 -17
- package/search-box/lib/search-box.component.d.ts +1 -1
- package/search-box/lib/search-box.module.d.ts +1 -1
- package/select-box/lib/select-box.component.d.ts +2 -1
- package/select-box/lib/select-box.module.d.ts +1 -1
- package/selection-list/lib/selection-list.component.d.ts +1 -1
- package/side-menu/lib/side-menu-item/side-menu-item.component.d.ts +1 -1
- package/side-menu/lib/side-menu.component.d.ts +1 -1
- package/side-menu/lib/side-menu.module.d.ts +1 -1
- package/skeleton/lib/skeleton.component.d.ts +1 -1
- package/slider/lib/slider.component.d.ts +1 -1
- package/slider/lib/slider.module.d.ts +1 -1
- package/sliding-item/lib/sliding-item-prefix/sliding-item-prefix.component.d.ts +1 -1
- package/sliding-item/lib/sliding-item-suffix/sliding-item-suffix.component.d.ts +1 -1
- package/step-wizard/lib/step-wizard-item/step-wizard-item.component.d.ts +1 -1
- package/step-wizard/lib/step-wizard.component.d.ts +1 -1
- package/switch/lib/switch-content.component.d.ts +1 -1
- package/switch/lib/switch.component.d.ts +1 -1
- package/tabs/lib/tab-item.component.d.ts +1 -1
- package/tabs/lib/tabs.class.d.ts +1 -1
- package/tabs/lib/tabs.component.d.ts +1 -1
- package/tag/lib/tag.component.d.ts +1 -1
- package/tag-box/lib/tag-box.component.d.ts +1 -1
- package/text-area/lib/text-area.component.d.ts +1 -1
- package/text-box/lib/text-box.component.d.ts +1 -1
- package/text-box/lib/text-box.module.d.ts +1 -1
- package/time-duration/lib/time-duration.component.d.ts +3 -5
- package/toast/lib/toast.class.d.ts +1 -1
- package/toast/lib/toast.component.d.ts +1 -1
- package/toast/lib/toast.config.d.ts +1 -1
- package/tooltip/lib/tooltip.component.d.ts +1 -1
- package/tooltip/lib/tooltip.directive.d.ts +1 -1
- package/tree-view/lib/tree-view-item.component.d.ts +1 -1
- package/tree-view/lib/tree-view.class.d.ts +1 -1
- package/tree-view/lib/tree-view.component.d.ts +1 -1
- package/tree-view/lib/tree-view.component.module.d.ts +1 -1
- package/uploader/lib/uploader-drop-zone/uploader-drop-zone.component.d.ts +1 -1
- package/uploader/lib/uploader.models.d.ts +1 -1
- package/wysiwyg/lib/wysiwyg/wysiwyg-container/wysiwyg-container.component.d.ts +1 -1
- package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-alignment/wysiwyg-alignment.component.d.ts +1 -1
- package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-colors/wysiwyg-colors.component.d.ts +1 -1
- package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-insert/wysiwyg-insert.component.d.ts +1 -1
- package/common/README.md +0 -3
- package/common/index.d.ts +0 -32
- package/common/lib/classes/components.class.d.ts +0 -97
- package/common/lib/classes/datalist.class.d.ts +0 -37
- package/common/lib/classes/datasource.class.d.ts +0 -87
- package/common/lib/classes/events.class.d.ts +0 -96
- package/common/lib/classes/styles.class.d.ts +0 -12
- package/common/lib/common.module.d.ts +0 -10
- package/common/lib/components/base-component.class.d.ts +0 -42
- package/common/lib/components/button-base-component.class.d.ts +0 -55
- package/common/lib/components/color-component.class.d.ts +0 -12
- package/common/lib/components/colorlook-component.class.d.ts +0 -6
- package/common/lib/components/input-base-value-component.class.d.ts +0 -35
- package/common/lib/components/interactive-component.class.d.ts +0 -57
- package/common/lib/components/look-component.class.d.ts +0 -18
- package/common/lib/components/selection-base.component.class.d.ts +0 -53
- package/common/lib/components/value-component.class.d.ts +0 -70
- package/common/lib/directives/auto-focus.directive.d.ts +0 -17
- package/common/lib/directives/copy-clipboard.directive.d.ts +0 -40
- package/common/lib/directives/delayed-value-changed.directive.d.ts +0 -17
- package/common/lib/directives/hotkey.directive.d.ts +0 -22
- package/common/lib/directives/infinite-scroll.directive.d.ts +0 -25
- package/common/lib/directives/inverted-color.directive.d.ts +0 -12
- package/common/lib/directives/responsive.directive.d.ts +0 -10
- package/common/lib/directives/ripple.directive.d.ts +0 -18
- package/common/lib/interfaces/component.interface.d.ts +0 -4
- package/common/lib/services/dom.service.d.ts +0 -6
- package/common/lib/services/hotkey.service.d.ts +0 -31
- package/common/lib/types/base/button.type.d.ts +0 -8
- package/common/lib/types/base/color.type.d.ts +0 -7
- package/common/lib/types/base/component.types.d.ts +0 -8
- package/common/lib/types/base/events.types.d.ts +0 -21
- package/common/lib/types/base/index.d.ts +0 -7
- package/common/lib/types/base/interactive.type.d.ts +0 -13
- package/common/lib/types/base/look.type.d.ts +0 -7
- package/common/lib/types/base/value.type.d.ts +0 -9
- package/common/lib/types/direction.d.ts +0 -4
- package/common/lib/types/orientation.d.ts +0 -4
- package/common/lib/types/placement.d.ts +0 -30
- package/common/lib/types/range.d.ts +0 -4
- package/common/lib/types/selection-mode.d.ts +0 -4
- package/fesm2022/acorex-components-common.mjs +0 -2087
- package/fesm2022/acorex-components-common.mjs.map +0 -1
- package/fesm2022/acorex-components-modal-acorex-components-modal-Ckn70-o5.mjs.map +0 -1
- package/fesm2022/acorex-components-modal-modal-content.component-DzRhA-Nt.mjs +0 -216
- package/fesm2022/acorex-components-modal-modal-content.component-DzRhA-Nt.mjs.map +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"acorex-components-scheduler.mjs","sources":["../../../../packages/components/scheduler/src/lib/scheduler.service.ts","../../../../packages/components/scheduler/src/lib/views/agenda/scheduler-agenda-view.component.ts","../../../../packages/components/scheduler/src/lib/views/agenda/scheduler-agenda-view.component.html","../../../../packages/components/scheduler/src/lib/views/day/scheduler-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/day/scheduler-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/month/scheduler-month-view.component.ts","../../../../packages/components/scheduler/src/lib/views/month/scheduler-month-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-day/scheduler-timeline-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-day/scheduler-timeline-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-month/scheduler-timeline-month-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-month/scheduler-timeline-month-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/week/scheduler-week-view.component.ts","../../../../packages/components/scheduler/src/lib/views/week/scheduler-week-view.component.html","../../../../packages/components/scheduler/src/lib/scheduler.component.ts","../../../../packages/components/scheduler/src/lib/scheduler.component.html","../../../../packages/components/scheduler/src/lib/scheduler.module.ts","../../../../packages/components/scheduler/src/acorex-components-scheduler.ts"],"sourcesContent":["import { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXDayOfWeekName,\n AXSchedulerActiveAppointmentsInBlock,\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentsByStartBlock,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerBlockIdentifier,\n AXSchedulerSlotEvent,\n AXSchedulerView,\n} from './scheduler.class';\n\n@Injectable({\n providedIn: 'root', // Provide service application-wide\n})\nexport class AXSchedulerService {\n private calendarService = inject(AXCalendarService);\n private formatService = inject(AXFormatService);\n\n readonly HOURS_PER_DAY = 24;\n readonly MINUTES_PER_HOUR = 60;\n readonly BLOCK_DURATION_MINUTES = 30;\n readonly MILLISECONDS_PER_MINUTE = 60 * 1000;\n readonly MILLISECONDS_PER_DAY = this.HOURS_PER_DAY * this.MINUTES_PER_HOUR * this.MILLISECONDS_PER_MINUTE;\n\n /**\n * Checks if two appointments overlap in time.\n */\n doAppointmentsOverlap(appointmentA: AXSchedulerAppointmentType, appointmentB: AXSchedulerAppointmentType): boolean {\n if (!appointmentA?.startDate || !appointmentA.endDate || !appointmentB?.startDate || !appointmentB.endDate) {\n return false;\n }\n const startA = appointmentA.startDate.date.getTime();\n const endA = appointmentA.endDate.date.getTime();\n const startB = appointmentB.startDate.date.getTime();\n const endB = appointmentB.endDate.date.getTime();\n // Uses strict overlap check (change < / > to <= / >= if touching boundaries count)\n return startA < endB && endA > startB;\n }\n\n /**\n * Calculates appointment duration in minutes.\n */\n calculateDurationInMinutes(Appointment: AXSchedulerAppointmentType): number {\n if (!Appointment?.startDate || !Appointment.endDate) return 0;\n const durationMillis = Appointment.endDate.date.getTime() - Appointment.startDate.date.getTime();\n return Math.max(0, durationMillis / this.MILLISECONDS_PER_MINUTE);\n }\n\n /**\n * Calculates appointment duration in blocks (default 30 min).\n */\n calculateDurationInBlocks(appointment: AXSchedulerAppointmentType): number {\n const durationMinutes = this.calculateDurationInMinutes(appointment);\n return Math.ceil(durationMinutes / this.BLOCK_DURATION_MINUTES);\n }\n\n /**\n * Gets the day index (relative to view start) and block index (relative to start hour)\n * for a given date time within the view context. Returns null if outside view.\n */\n getBlockIdentifier(\n dateTime: AXDateTime,\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number, // Exclusive end hour\n viewTotalDays = 1, // Default to 1 for day view\n ): AXSchedulerBlockIdentifier | null {\n if (!viewStartDate || !dateTime || typeof startHour !== 'number' || typeof endHour !== 'number') {\n return null;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Calculate exclusive end date\n\n // Check if dateTime is within the view's date and time range\n if (\n dateTime.compare(viewStartDate, 'day') < 0 ||\n dateTime.compare(viewEndDate, 'day') >= 0 || // Check against exclusive end date\n dateTime.hour < startHour ||\n dateTime.hour >= endHour // Check against exclusive end hour\n ) {\n return null;\n }\n\n // Calculate day index relative to view start\n const dayIndex = Math.floor((dateTime.date.getTime() - viewStartDate.date.getTime()) / this.MILLISECONDS_PER_DAY);\n\n // Ensure dayIndex is valid for the view duration\n if (dayIndex < 0 || dayIndex >= viewTotalDays) {\n return null;\n }\n\n const minutesIntoDay = dateTime.hour * this.MINUTES_PER_HOUR + dateTime.minute;\n const minutesIntoViewHours = minutesIntoDay - startHour * this.MINUTES_PER_HOUR;\n\n // This check should be redundant due to initial hour check, but safe to keep\n if (minutesIntoViewHours < 0) return null;\n\n const blockIndex = Math.floor(minutesIntoViewHours / this.BLOCK_DURATION_MINUTES);\n\n return { dayIndex, blockIndex };\n }\n\n /**\n * Groups appointments by the blocks they are ACTIVE in for a given view.\n * @param viewTotalDays - Number of days in the current view (1 for Day, 7 for Week, etc.)\n */\n calculateActiveAppointmentsInBlock(\n singleDayAppointments: AXSchedulerAppointmentSegmentType[],\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n viewTotalDays: number, // Now required\n ): AXSchedulerActiveAppointmentsInBlock {\n const blocks: AXSchedulerActiveAppointmentsInBlock = {};\n if (!viewStartDate || typeof startHour !== 'number' || typeof endHour !== 'number' || viewTotalDays <= 0) {\n return blocks;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Exclusive end date\n // Calculate total blocks based on consistent block duration\n const totalBlocksPerDay = Math.max(\n 0,\n (endHour - startHour) * (this.MINUTES_PER_HOUR / this.BLOCK_DURATION_MINUTES),\n );\n\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.key) return;\n\n // Clamp appointment start/end times to the view boundaries (days and hours)\n let effectiveStart = appointment.startDate.compare(viewStartDate) < 0 ? viewStartDate : appointment.startDate;\n if (effectiveStart.hour < startHour) effectiveStart = effectiveStart.set('hour', startHour).startOf('hour');\n\n let effectiveEnd = appointment.endDate.compare(viewEndDate) >= 0 ? viewEndDate : appointment.endDate;\n if (effectiveEnd.hour >= endHour) {\n const endDayBase = effectiveEnd.compare(viewEndDate) >= 0 ? viewEndDate.add('day', -1) : effectiveEnd;\n effectiveEnd = endDayBase.set('hour', endHour).startOf('hour');\n }\n\n // Get start block info using the specified viewTotalDays\n const startInfo = this.getBlockIdentifier(effectiveStart, viewStartDate, startHour, endHour, viewTotalDays);\n if (!startInfo) return; // Appointment starts completely outside view\n\n // Get end block info (last block occupied) using the specified viewTotalDays\n const timeBeforeEnd = effectiveEnd.add('minute', -1);\n const endInfo = this.getBlockIdentifier(timeBeforeEnd, viewStartDate, startHour, endHour, viewTotalDays);\n // If endInfo is null, it means the appointment ends before the viewable part starts,\n // or exactly at the start, so it occupies no blocks. Handle this case.\n if (\n !endInfo ||\n endInfo.dayIndex < startInfo.dayIndex ||\n (endInfo.dayIndex === startInfo.dayIndex && endInfo.blockIndex < startInfo.blockIndex)\n ) {\n return; // Appointment effectively has no duration within the viewable blocks\n }\n\n // Iterate through the days and blocks the appointment spans within the view\n for (let dIdx = startInfo.dayIndex; dIdx <= endInfo.dayIndex; dIdx++) {\n // Clamp day index just in case (should be handled by getBlockIdentifier checks)\n if (dIdx < 0 || dIdx >= viewTotalDays) continue;\n\n const startBlock = dIdx === startInfo.dayIndex ? startInfo.blockIndex : 0;\n // Make sure endBlock doesn't exceed the calculated totalBlocksPerDay\n const endBlock = dIdx === endInfo.dayIndex ? endInfo.blockIndex : totalBlocksPerDay - 1;\n\n if (!blocks[dIdx]) blocks[dIdx] = {};\n\n for (let bIdx = startBlock; bIdx <= endBlock; bIdx++) {\n // Final check for block index validity\n if (bIdx >= 0 && bIdx < totalBlocksPerDay) {\n if (!blocks[dIdx][bIdx]) blocks[dIdx][bIdx] = [];\n // Avoid duplicates if the same appointment is processed multiple times (shouldn't happen with outer loop)\n if (!blocks[dIdx][bIdx].some((e) => e.key === appointment.key)) {\n blocks[dIdx][bIdx].push(appointment);\n }\n }\n }\n }\n });\n return blocks;\n }\n\n /**\n * Calculates max concurrency and effective total columns for Day View appointments.\n */\n calculateDayViewConcurrencyInfo(\n singleDayAppointments: AXSchedulerAppointmentSegmentType[], // These are segments for the current day\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n ): Map<any, { maxConcurrency: number; effectiveTotalColumns: number }> {\n const resultInfo = new Map<any, { maxConcurrency: number; effectiveTotalColumns: number }>();\n if (singleDayAppointments.length === 0) return resultInfo;\n\n const activeAppointmentsMap = this.calculateActiveAppointmentsInBlock(\n singleDayAppointments,\n viewStartDate,\n startHour,\n endHour,\n 1, // Day view\n );\n const blocks = activeAppointmentsMap[0] ?? {};\n\n // 1. Calculate initial maxConcurrency for each appointment segment\n const maxConcurrencyMap = new Map<any, number>();\n singleDayAppointments.forEach((segment) => {\n let maxOverlapInSegmentBlocks = 0;\n const segmentStartMinutes = segment.startDate.hour * this.MINUTES_PER_HOUR + segment.startDate.minute;\n const segmentEndMinutes = segment.endDate.hour * this.MINUTES_PER_HOUR + segment.endDate.minute;\n\n // Determine blocks this segment occupies relative to view's startHour\n const viewRelativeStartMinutes = Math.max(0, segmentStartMinutes - startHour * this.MINUTES_PER_HOUR);\n const viewRelativeEndMinutes = Math.min(\n (endHour - startHour) * this.MINUTES_PER_HOUR,\n segmentEndMinutes - startHour * this.MINUTES_PER_HOUR,\n );\n\n const firstBlockIndex = Math.floor(viewRelativeStartMinutes / this.BLOCK_DURATION_MINUTES);\n const lastBlockIndex = Math.floor((viewRelativeEndMinutes - 1) / this.BLOCK_DURATION_MINUTES); // -1 because end is exclusive for block counting\n\n for (let blockIdx = firstBlockIndex; blockIdx <= lastBlockIndex; blockIdx++) {\n const appointmentsInBlock = blocks[blockIdx];\n if (appointmentsInBlock) {\n maxOverlapInSegmentBlocks = Math.max(maxOverlapInSegmentBlocks, appointmentsInBlock.length);\n }\n }\n maxConcurrencyMap.set(segment.key, maxOverlapInSegmentBlocks || 1);\n });\n\n // 2. Iteratively determine effectiveTotalColumns for groups of overlapping appointments\n const initialEffectiveTotalColumns = new Map<any, number>();\n singleDayAppointments.forEach((segment) => {\n initialEffectiveTotalColumns.set(segment.key, maxConcurrencyMap.get(segment.key) || 1);\n });\n\n let changed = true;\n while (changed) {\n changed = false;\n singleDayAppointments.forEach((segmentA) => {\n singleDayAppointments.forEach((segmentB) => {\n if (segmentA.key === segmentB.key) return;\n\n if (this.doAppointmentsOverlap(segmentA, segmentB)) {\n const etcA = initialEffectiveTotalColumns.get(segmentA.key) || 1;\n const etcB = initialEffectiveTotalColumns.get(segmentB.key) || 1;\n const maxETC = Math.max(etcA, etcB);\n\n if (etcA !== maxETC) {\n initialEffectiveTotalColumns.set(segmentA.key, maxETC);\n changed = true;\n }\n if (etcB !== maxETC) {\n initialEffectiveTotalColumns.set(segmentB.key, maxETC);\n changed = true;\n }\n }\n });\n });\n }\n\n // Populate final result\n singleDayAppointments.forEach((segment) => {\n resultInfo.set(segment.key, {\n maxConcurrency: maxConcurrencyMap.get(segment.key) || 1,\n effectiveTotalColumns: initialEffectiveTotalColumns.get(segment.key) || 1,\n });\n });\n\n return resultInfo;\n }\n\n /**\n * Groups appointments by the block they START in for Week View.\n */\n calculateWeekViewAppointmentsByStartBlock(\n singleDayAppointments: AXSchedulerAppointmentSegmentType[],\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n ): AXSchedulerAppointmentsByStartBlock {\n const blocks: AXSchedulerAppointmentsByStartBlock = {};\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate) return;\n const startInfo = this.getBlockIdentifier(appointment.startDate, viewStartDate, startHour, endHour, 7);\n if (startInfo) {\n const { dayIndex, blockIndex } = startInfo;\n if (!blocks[dayIndex]) blocks[dayIndex] = {};\n if (!blocks[dayIndex][blockIndex]) blocks[dayIndex][blockIndex] = [];\n blocks[dayIndex][blockIndex].push(appointment);\n }\n });\n return blocks;\n }\n\n /**\n * Groups appointments by the day(s) they occur on within a given date range.\n * Returns a Map where the key is the date string ('YYYY-MM-DD') and the value is an array of appointments.\n */\n groupAppointmentsByDay(\n appointments: AXSchedulerAppointmentType[],\n viewStartDate: AXDateTime, // First day visible in the grid\n viewEndDate: AXDateTime, // Last day visible in the grid\n ): Map<string, AXSchedulerAppointmentType[]> {\n const groupedAppointments = new Map<string, AXSchedulerAppointmentType[]>();\n if (!appointments || appointments.length === 0 || !viewStartDate || !viewEndDate) {\n return groupedAppointments;\n }\n\n // Pre-calculate the end date for comparison (exclusive)\n const exclusiveViewEndDate = viewEndDate.add('day', 1);\n\n appointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.key) return;\n\n // Determine the effective start and end dates of the appointment clamped by the view range\n const appointmentStart = appointment.startDate;\n const appointmentEnd = appointment.endDate;\n\n // Skip if appointment ends before the view starts or starts after the view ends\n if (\n appointmentEnd.compare(viewStartDate, 'day') < 0 ||\n appointmentStart.compare(exclusiveViewEndDate, 'day') >= 0\n ) {\n return;\n }\n\n // Clamp start date to the view start date\n let currentDay =\n appointmentStart.compare(viewStartDate, 'day') < 0 ? viewStartDate : appointmentStart.startOf('day');\n\n // Loop through each day the appointment spans within the view range\n let safeCount = 0; // Prevent infinite loops\n while (\n currentDay.compare(appointmentEnd, 'day') <= 0 &&\n currentDay.compare(exclusiveViewEndDate, 'day') < 0 &&\n safeCount < 100\n ) {\n const dateString = this.formatService.format(currentDay, 'datetime', { format: 'YYYY-MM-DD' }); // Use a consistent key format\n\n if (!groupedAppointments.has(dateString)) {\n groupedAppointments.set(dateString, []);\n }\n // Add the appointment if it's not already in the list for that day\n if (!groupedAppointments.get(dateString).some((e) => e.key === appointment.key)) {\n groupedAppointments.get(dateString).push(appointment);\n }\n\n currentDay = currentDay.add('day', 1);\n safeCount++;\n }\n if (safeCount >= 100) {\n console.warn('Safety break hit in groupAppointmentsByDay loop for appointment:', appointment.key);\n }\n });\n\n return groupedAppointments;\n }\n\n getDayOfWeekNumber(dayName: AXDayOfWeekName): number {\n switch (dayName) {\n case 'Sunday':\n return 1;\n case 'Monday':\n return 2;\n case 'Tuesday':\n return 3;\n case 'Wednesday':\n return 4;\n case 'Thursday':\n return 5;\n case 'Friday':\n return 6;\n case 'Saturday':\n return 7;\n default:\n console.warn(`Invalid day name: ${dayName}. Defaulting to Sunday (1).`);\n return 1;\n }\n }\n\n getSlotData(\n startDate: AXDateTime,\n view: AXSchedulerView,\n ): { startDate: AXDateTime; endDate: AXDateTime; view: AXSchedulerView } {\n let endDate: AXDateTime;\n switch (view) {\n case 'day':\n case 'week':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES);\n break;\n case 'timelineDay':\n case 'timelineMultiDay':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES * 2);\n break;\n case 'month':\n case 'agenda':\n case 'timelineMonth':\n startDate = startDate.startOf('day');\n endDate = startDate.endOf('day');\n break;\n }\n return { startDate, endDate, view };\n }\n\n handleEvent(\n event: AXSchedulerSlotEvent | AXSchedulerAppointmentEvent,\n eventOutputMap,\n eventType: 'appointment' | 'slot',\n ) {\n const mouseEvent = event.event;\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n if (eventType === 'appointment') {\n const appointmentOutputMap = eventOutputMap[eventType];\n const emitter = appointmentOutputMap[mouseEvent.type as keyof typeof appointmentOutputMap];\n if (emitter) emitter.emit(event as AXSchedulerAppointmentEvent);\n }\n if (eventType === 'slot') {\n const slotOutputMap = eventOutputMap[eventType];\n const emitter = slotOutputMap[mouseEvent.type as keyof typeof slotOutputMap];\n if (emitter) emitter.emit(event as AXSchedulerSlotEvent);\n }\n }\n\n // --- Timeline Specific Helpers ---\n\n calculateTimelineLayout(\n // `appt` here will be an AXSchedulerAppointmentSegmentType when called from TimelineDayView\n appt: AXSchedulerAppointmentType,\n viewStartHour: number, // e.g., 8 for 8 AM\n viewEndHour: number, // e.g., 18 for 6 PM (timeline runs from 8:00 up to, but not including, 18:00)\n ): { left: string; width: string } | null {\n if (\n !appt?.startDate ||\n !appt.endDate ||\n typeof viewStartHour !== 'number' ||\n typeof viewEndHour !== 'number' ||\n viewStartHour >= viewEndHour // Basic sanity check\n ) {\n console.warn('calculateTimelineLayout: Invalid input', { appt, viewStartHour, viewEndHour });\n return null;\n }\n\n const totalViewDurationMinutes = (viewEndHour - viewStartHour) * 60;\n if (totalViewDurationMinutes <= 0) return null; // No viewable duration\n\n // Segment's start and end times (these are already clipped to the day by getClonedAppointmentSegmentOnDay)\n const segmentStart = appt.startDate;\n const segmentEnd = appt.endDate;\n\n // --- Calculate Start Position (left) ---\n // Effective start of the segment within the view's hours for THIS day\n let effectiveSegmentStartMinutesInDay = segmentStart.hour * 60 + segmentStart.minute;\n\n // Clamp to viewStartHour for calculation if segment starts before viewable hours (shouldn't happen if segmenter worked)\n effectiveSegmentStartMinutesInDay = Math.max(effectiveSegmentStartMinutesInDay, viewStartHour * 60);\n // Clamp to viewEndHour for calculation if segment starts after viewable hours (shouldn't happen)\n effectiveSegmentStartMinutesInDay = Math.min(effectiveSegmentStartMinutesInDay, viewEndHour * 60);\n\n const minutesFromViewStartToSegmentStart = effectiveSegmentStartMinutesInDay - viewStartHour * 60;\n\n // If segment effectively starts before the viewable part (after clamping), it means it's not visible or starts at 0%\n if (\n minutesFromViewStartToSegmentStart < 0 &&\n Math.abs(minutesFromViewStartToSegmentStart) > 1e-6 /*epsilon for float issues*/\n ) {\n // This case should ideally be caught by the segmenter or initial overlap checks.\n // If it happens, treat as starting at 0% but it might mean no visible part.\n }\n\n const leftPercentage = (Math.max(0, minutesFromViewStartToSegmentStart) / totalViewDurationMinutes) * 100;\n\n // --- Calculate Duration and Width ---\n // Effective end of the segment within the view's hours for THIS day\n let effectiveSegmentEndMinutesInDay = segmentEnd.hour * 60 + segmentEnd.minute;\n if (segmentEnd.hour === 0 && segmentEnd.minute === 0 && segmentEnd.date.getTime() > segmentStart.date.getTime()) {\n // If segment ends exactly at midnight (00:00 of next day, meaning it filled up to 24:00 of current day)\n effectiveSegmentEndMinutesInDay = 24 * 60;\n }\n\n // Clamp to viewEndHour for calculation\n effectiveSegmentEndMinutesInDay = Math.min(effectiveSegmentEndMinutesInDay, viewEndHour * 60);\n // Clamp to viewStartHour for calculation (if segment ends before view starts)\n effectiveSegmentEndMinutesInDay = Math.max(effectiveSegmentEndMinutesInDay, viewStartHour * 60);\n\n const segmentDurationMinutesInView = Math.max(\n 0,\n effectiveSegmentEndMinutesInDay - effectiveSegmentStartMinutesInDay,\n );\n\n if (segmentDurationMinutesInView <= 0) {\n // Segment has no visible duration within the timeline hours\n return null;\n }\n\n const widthPercentage = (segmentDurationMinutesInView / totalViewDurationMinutes) * 100;\n\n // Ensure percentages are valid\n if (\n leftPercentage > 100 ||\n leftPercentage < 0 ||\n widthPercentage <= 0 ||\n widthPercentage > 100 ||\n leftPercentage + widthPercentage > 100.0001 /*allow for float errors*/\n ) {\n // This might indicate an issue with date clamping or logic.\n // For now, if it results in an invalid layout, return null.\n // console.warn(\"Timeline layout calculation resulted in out-of-bounds percentages:\",\n // {leftPercentage, widthPercentage, segmentStart, segmentEnd, viewStartHour, viewEndHour});\n // A common case for (left + width > 100) is if an event ends *exactly* at viewEndHour,\n // and viewEndHour itself is the boundary.\n // Let's be a bit tolerant here if width is positive.\n if (widthPercentage <= 0) return null;\n }\n\n return {\n left: `${Math.max(0, Math.min(100, leftPercentage))}%`,\n width: `${Math.max(0, Math.min(100, widthPercentage))}%`,\n };\n }\n\n /**\n * Calculates the visible segment of a timed appointment on a specific day,\n * constrained by the view's start and end hours.\n * Returns a new appointment-like object representing the segment.\n */\n getClonedAppointmentSegmentOnDay(\n appointment: AXSchedulerAppointmentType, // This is the ORIGINAL appointment\n day: AXDateTime,\n viewStartHour: number,\n viewEndHour: number,\n isFullDayCellContext = false,\n ): AXSchedulerAppointmentSegmentType | null {\n if (!appointment || !appointment.startDate || !appointment.endDate) {\n return null;\n }\n\n if (appointment.allDay) {\n const dayStartOf = day.clone().startOf('day');\n if (appointment.startDate.startOf('day').equal(dayStartOf, 'day')) {\n return {\n ...appointment,\n startDate: dayStartOf,\n endDate: dayStartOf.clone().add('day', 1).startOf('day'),\n allDay: true,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay: false,\n isContinuationToNextDay: appointment.endDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n } else if (\n appointment.startDate.startOf('day').compare(dayStartOf, 'day') < 0 &&\n appointment.endDate.startOf('day').compare(dayStartOf, 'day') >= 0\n ) {\n return {\n ...appointment,\n startDate: dayStartOf,\n endDate: dayStartOf.clone().add('day', 1).startOf('day'),\n allDay: true,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay: true,\n isContinuationToNextDay: appointment.endDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n } else {\n return null;\n }\n }\n\n const dayStartBoundary = isFullDayCellContext\n ? day.clone().startOf('day')\n : day.clone().set('hour', viewStartHour).startOf('hour');\n const dayEndBoundary = isFullDayCellContext\n ? day.clone().add('day', 1).startOf('day')\n : viewEndHour === 24 || (viewEndHour === 0 && viewStartHour === 0)\n ? day.clone().add('day', 1).startOf('day')\n : day.clone().set('hour', viewEndHour).startOf('hour');\n\n if (\n appointment.endDate.compare(dayStartBoundary, 'second') <= 0 ||\n appointment.startDate.compare(dayEndBoundary, 'second') >= 0\n ) {\n return null;\n }\n const segmentStartDate =\n appointment.startDate.compare(dayStartBoundary, 'second') > 0 ? appointment.startDate : dayStartBoundary;\n const segmentEndDate =\n appointment.endDate.compare(dayEndBoundary, 'second') < 0 ? appointment.endDate : dayEndBoundary;\n\n if (segmentStartDate.compare(segmentEndDate, 'second') >= 0) {\n return null;\n }\n\n const isContinuationFromPreviousDay = appointment.startDate.compare(segmentStartDate, 'second') < 0;\n const isContinuationToNextDay = appointment.endDate.compare(segmentEndDate, 'second') > 0;\n const duration = appointment.startDate.duration(appointment.endDate);\n\n return {\n ...appointment,\n startDate: segmentStartDate,\n endDate: segmentEndDate,\n allDay: appointment.allDay || duration.total.days >= 1,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay,\n isContinuationToNextDay,\n originalAppointmentRef: appointment,\n };\n }\n\n getOriginalAppointment(\n item: AXSchedulerAppointmentType | AXSchedulerAppointmentSegmentType,\n ): AXSchedulerAppointmentType {\n const segment = item as AXSchedulerAppointmentSegmentType;\n if (segment.originalAppointmentRef) {\n return segment.originalAppointmentRef;\n }\n return item;\n }\n\n isHoliday(date: AXDateTime): boolean {\n return this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));\n }\n isWeekend(date: AXDateTime, calendar: string): boolean {\n const weekend = this.calendarService.resolveCalendar(calendar).weekend;\n return weekend.includes(date.dayOfWeek - 1);\n }\n}\n","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\n\nexport interface AgendaDayData {\n date: AXDateTime;\n appointments: AXSchedulerAppointmentSegmentType[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-agenda-view',\n templateUrl: './scheduler-agenda-view.component.html',\n styleUrl: './scheduler-agenda-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXFormatPipe,\n AXDecoratorGenericComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTranslatorPipe,\n AXTooltipDirective,\n ],\n})\nexport class AXSchedulerAgendaViewComponent extends MXBaseComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n daysCount = input(7);\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n agendaDaysLayout = computed<AgendaDayData[]>(() => {\n const allOriginalAppointments = this.appointments();\n const agendaStartDate = this.date();\n const numberOfDays = this.daysCount();\n\n if (!agendaStartDate || !allOriginalAppointments) {\n return [];\n }\n\n const result: AgendaDayData[] = [];\n\n for (let i = 0; i < numberOfDays; i++) {\n const currentDay = agendaStartDate.add('day', i).startOf('day');\n const segmentsForThisDay: AXSchedulerAppointmentSegmentType[] = [];\n\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDay, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1),\n (s) => s.startDate.date.getTime(),\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(),\n ],\n ['asc', 'asc', 'desc'],\n );\n\n result.push({\n date: currentDay,\n appointments: sortedSegments,\n holiday: this.isHoliday(currentDay),\n });\n }\n return result;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerAppointmentType) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n if (slotData) {\n this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<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-state-holiday]=\"dayData.holiday.state !== 'none'\"\n class=\"ax-scheduler-agenda-view-container\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\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.key + segment.originalStartDate.date.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\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 [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-agenda-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <div class=\"ax-scheduler-agenda-appointment-time\">\n @if (segment.allDay) {\n <span>{{ '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 <!-- <ax-subtitle *ngIf=\"segment.description\">{{ segment.description }}</ax-subtitle> -->\n </div>\n }\n @if (dayData.appointments.length === 0) {\n <div class=\"ax-scheduler-agenda-no-appointments\">\n {{ 'noRecord' | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerDayAppointmentLayout,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\n\n@Component({\n selector: 'ax-scheduler-day-view',\n templateUrl: './scheduler-day-view.component.html',\n styleUrl: './scheduler-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n ],\n})\nexport class AXSchedulerDayViewComponent extends MXBaseComponent {\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n endHour = input.required<number>();\n date = input.required<AXDateTime>();\n startHour = input.required<number>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n processedAppointmentsForLayout = computed(() => {\n const viewDate = this.date();\n const startH = this.startHour();\n const endH = this.endHour();\n const allAppointmentsInView = this.appointments();\n if (!viewDate || allAppointmentsInView.length === 0) {\n return [];\n }\n const segmentsForThisDay: AXSchedulerAppointmentSegmentType[] = [];\n for (const appt of allAppointmentsInView) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, startH, endH);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n return segmentsForThisDay;\n });\n allDayAppointments = computed(() => {\n const originalAllDayAppointments = this.appointments()?.filter((e) => e && e.allDay) ?? [];\n const multiDayBecomingAllDaySegments =\n this.processedAppointmentsForLayout()?.filter(\n (segment) => segment && segment.allDay && !this.appointments().find((orig) => orig.key === segment.key)?.allDay,\n ) ?? [];\n const combined = new Map<any, AXSchedulerAppointmentType>();\n originalAllDayAppointments.forEach((appt) => combined.set(appt.key, appt));\n multiDayBecomingAllDaySegments.forEach((appt) => {\n if (!combined.has(appt.key)) {\n combined.set(appt.key, appt);\n }\n });\n return Array.from(combined.values());\n });\n singleDayAppointments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((e) => e && !e.allDay) ?? [];\n });\n\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointment: AXSchedulerAppointmentType) {\n const originalAppointment = (appointment as AXSchedulerAppointmentSegmentType).originalStartDate\n ? ({\n ...appointment,\n startDate: (appointment as AXSchedulerAppointmentSegmentType).originalStartDate,\n endDate: (appointment as AXSchedulerAppointmentSegmentType).originalEndDate,\n } as AXSchedulerAppointmentType)\n : appointment;\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSingleSlotEvent(mouseEvent: MouseEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleAllDaySlotEvent(mouseEvent: MouseEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' as const };\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleAllDayDrop(e: AXDropZoneDropEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' as const };\n\n const droppedAppt = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalDroppedAppt = (droppedAppt as AXSchedulerAppointmentSegmentType).originalStartDate\n ? ({\n ...droppedAppt,\n startDate: (droppedAppt as AXSchedulerAppointmentSegmentType).originalStartDate,\n endDate: (droppedAppt as AXSchedulerAppointmentSegmentType).originalEndDate,\n } as AXSchedulerAppointmentType)\n : droppedAppt;\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalDroppedAppt,\n });\n }\n handleSingleDayDrop(e: AXDropZoneDropEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n const droppedAppt = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalDroppedAppt = (droppedAppt as AXSchedulerAppointmentSegmentType).originalStartDate\n ? ({\n ...droppedAppt,\n startDate: (droppedAppt as AXSchedulerAppointmentSegmentType).originalStartDate,\n endDate: (droppedAppt as AXSchedulerAppointmentSegmentType).originalEndDate,\n } as AXSchedulerAppointmentType)\n : droppedAppt;\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalDroppedAppt,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n appointmentLayouts = computed(() => {\n const layouts = new Map<any, AXSchedulerDayAppointmentLayout>();\n const appointmentsToLayout = this.singleDayAppointments();\n const viewDate = this.date();\n const startH = this.startHour();\n const endH = this.endHour();\n\n if (appointmentsToLayout.length === 0 || !viewDate || typeof startH !== 'number' || typeof endH !== 'number') {\n return layouts;\n }\n\n const concurrencyInfoMap = this.schedulerService.calculateDayViewConcurrencyInfo(\n appointmentsToLayout,\n viewDate,\n startH,\n endH,\n );\n\n const sortedAppointments = orderBy(\n appointmentsToLayout,\n [(e) => e.startDate.date.getTime(), (e) => e.originalEndDate.date.getTime() - e.originalStartDate.date.getTime()],\n ['asc', 'desc'],\n );\n\n const columnsData: { appointments: AXSchedulerAppointmentSegmentType[] }[] = [];\n\n for (const appointmentSegment of sortedAppointments) {\n let assignedCol = -1;\n\n for (let c = 0; ; c++) {\n if (!columnsData[c]) {\n columnsData[c] = { appointments: [] };\n }\n\n let conflict = false;\n\n for (const placedSegment of columnsData[c].appointments) {\n if (\n appointmentSegment.startDate.compare(placedSegment.endDate, 'minute') < 0 &&\n appointmentSegment.endDate.compare(placedSegment.startDate, 'minute') > 0\n ) {\n conflict = true;\n break;\n }\n }\n\n if (!conflict) {\n assignedCol = c;\n columnsData[c].appointments.push(appointmentSegment);\n break;\n }\n\n if (c > appointmentsToLayout.length) {\n console.warn(\n `DayView: Safety break in column assignment for ${appointmentSegment.title}, assigning to new column ${c}`,\n );\n if (!columnsData[c]) columnsData[c] = { appointments: [] };\n columnsData[c].appointments.push(appointmentSegment);\n assignedCol = c;\n break;\n }\n }\n\n const concurrencyInfo = concurrencyInfoMap.get(appointmentSegment.key);\n const effectiveCols = concurrencyInfo ? concurrencyInfo.effectiveTotalColumns : 1;\n\n layouts.set(appointmentSegment.key, {\n columnIndex: assignedCol,\n effectiveTotalColumns: effectiveCols,\n });\n }\n return layouts;\n });\n\n getAppointmentLayout(key: any): AXSchedulerDayAppointmentLayout | undefined {\n return this.appointmentLayouts().get(key);\n }\n\n getAppointmentLeft(key: any): string {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n const C = layout.columnIndex;\n if (C < 0) {\n console.warn('Invalid columnIndex < 0 for key:', key);\n return '0px';\n }\n if (C === 0 || N <= 1) return '0px';\n const leftPercent = C * (100 / N);\n const gapOffsetPx = C * this.GAP_PX;\n return `calc(${leftPercent}% + ${gapOffsetPx}px)`;\n }\n return '0px';\n }\n\n getAppointmentWidth(key: any): string {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n\n if (N <= 0) return '0%';\n if (N === 1) return `calc(100% - ${this.GAP_PX}px)`;\n\n const widthPercent = (1 / N) * 100;\n\n return `calc(${widthPercent}% - ${this.GAP_PX}px)`;\n }\n return '0%';\n }\n\n getAppointmentTop(key: any): string {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.key === key);\n\n if (appointmentSegment) {\n const startMinutes = appointmentSegment.startDate.hour * 60 + appointmentSegment.startDate.minute;\n const startBlockOffset = startMinutes - this.startHour() * 60;\n const yBlock = startBlockOffset / 30;\n return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${yBlock} + 1px)`;\n }\n return '';\n }\n\n getAppointmentHeight(key: any): string {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.key === key);\n if (appointmentSegment) {\n const durationMillis = appointmentSegment.endDate.date.getTime() - appointmentSegment.startDate.date.getTime();\n const durationMinutes = Math.max(0, durationMillis / (1000 * 60));\n if (durationMinutes <= 0) return '0px';\n\n const heightBlock = durationMinutes / 30;\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height)`;\n\n return `calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px)`;\n }\n return '0px';\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-day-header\">\n <div class=\"ax-scheduler-day-header-table\" aria-hidden=\"true\">\n <div>\n {{ '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 >\n <div class=\"ax-scheduler-day-header-appointment-container\">\n @if (allDayAppointments().length) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || allDayAppointments()[0].readonly || readonly()\"\n [dragData]=\"allDayAppointments()[0]\"\n (click)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (dblclick)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n [title]=\"allDayAppointments()[0].title\"\n class=\"ax-scheduler-header-day-appointment\"\n [style.color]=\"allDayAppointments()[0].textColor\"\n [style.background-color]=\"allDayAppointments()[0].backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ allDayAppointments()[0].title }}</ax-title>\n </div>\n }\n @if (allDayAppointments().length > 1) {\n <div\n #moreAppointments\n class=\"ax-scheduler-day-header-more-tag\"\n [style.color]=\"allDayAppointments()[1].textColor\"\n [style.background-color]=\"allDayAppointments()[1].backgroundColor\"\n >\n {{ 'more-items' | translate: { params: { number: allDayAppointments().length - 1 } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\">\n @for (appointment of allDayAppointments(); track appointment.key; let first = $first) {\n @if (!first) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\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.key) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-day-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.width]=\"getAppointmentWidth(appointment.key)\"\n [style.height]=\"getAppointmentHeight(appointment.key)\"\n [style.background-color]=\"appointment.backgroundColor\"\n [style.inset-block-start]=\"getAppointmentTop(appointment.key)\"\n [style.inset-inline-start]=\"getAppointmentLeft(appointment.key)\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\n <ax-subtitle>\n {{ appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\n {{ appointment.originalEndDate | format: 'time' : { format: 'HH:mm', 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 ></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 ></div>\n }\n </div>\n </div>\n</div>\n","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXDayOfWeekName,\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class'; // Adjust path\nimport { AXSchedulerService } from '../../scheduler.service'; // Adjust path\n\n// --- Types specific to Month View Layout ---\n// Represents a single day cell in the month grid\nexport type AXSchedulerMonthDayCell = {\n date: AXDateTime;\n isCurrentMonth: boolean;\n isToday: boolean;\n isHoliday: boolean;\n holidayTitle?: string;\n appointments: AXSchedulerAppointmentSegmentType[]; // All appointments for this day\n visibleAppointments: AXSchedulerAppointmentSegmentType[]; // Appointments to display as chips\n hiddenAppointments: AXSchedulerAppointmentSegmentType[]; // Appointments hidden behind the badge\n overflowCount: number; // Count of hidden appointments (length of hiddenAppointments)\n};\n\n@Component({\n selector: 'ax-scheduler-month-view',\n templateUrl: './scheduler-month-view.component.html',\n styleUrl: './scheduler-month-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AsyncPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n})\nexport class AXSchedulerMonthViewComponent extends MXBaseComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n // --- Inputs ---\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n firstDayOfWeek = input<AXDayOfWeekName>('Saturday');\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n // --- Constants ---\n readonly DAYS_IN_WEEK = 7;\n readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentSegmentOrOriginal: AXSchedulerAppointmentType) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegmentOrOriginal);\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month'); // Ensure it's start of day\n if (slotData) {\n this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month');\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n\n // --- Base Computeds ---\n // Calculate the start of the month based on the input date\n monthStartDate = computed(() => {\n const d = this.date();\n return d ? d.startOf('month') : null;\n });\n\n // Generate the list of weekday names based on the firstDayOfWeek\n daysArray = computed(() => {\n const dayNames: AXDateTime[] = [];\n\n const currentDate = this.date(); // Use a stable date for generating week headers\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n\n // Calculate days to subtract to get to the start of the week based on firstDayOfWeek\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n let headerStartDate = currentDate.add('day', -daysToSubtract);\n\n for (let i = 0; i < 7; i++) {\n dayNames.push(headerStartDate);\n headerStartDate = headerStartDate.add('day', 1);\n }\n return dayNames;\n });\n\n // --- Calendar Grid Calculation ---\n calendarDaysInfo = computed(() => {\n const monthStart = this.monthStartDate();\n if (!monthStart) return { days: [], weeksNeeded: 0 };\n\n const firstDayOfMonth = monthStart;\n const lastDayOfMonth = monthStart.endOf('month');\n\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n\n const leadingDays = (firstDisplayedDayOfWeek - firstDayGridNum + this.DAYS_IN_WEEK) % this.DAYS_IN_WEEK;\n const firstDayOfGrid = firstDayOfMonth.add('day', -leadingDays);\n\n // Determine how many total days to show to fill out the weeks\n // A common approach is 6 weeks to ensure consistency, but your dynamic weeksNeeded is fine too.\n // Let's stick to your dynamic `weeksNeeded` and `totalDaysToGenerate`\n const daysInMonth = lastDayOfMonth.dayOfMonth;\n const totalCellsMinimum = leadingDays + daysInMonth;\n const weeksNeededDynamic = Math.ceil(totalCellsMinimum / this.DAYS_IN_WEEK);\n const actualWeeksToShow = Math.max(4, Math.min(weeksNeededDynamic, 6)); // Clamp weeks\n const totalDaysToGenerate = actualWeeksToShow * this.DAYS_IN_WEEK;\n\n const days: {\n date: AXDateTime;\n isCurrentMonth: boolean;\n isToday: boolean;\n isHoliday: boolean;\n holidayTitle?: string;\n }[] = [];\n const today = this.calendarService.create(new Date());\n let currentDay = firstDayOfGrid;\n\n for (let i = 0; i < totalDaysToGenerate; i++) {\n const isHoliday =\n this.schedulerService.isHoliday(currentDay) || this.schedulerService.isWeekend(currentDay, this.calendar());\n\n let holidayTitle: null | string = null;\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => currentDay.equal(d.date, 'day'))[0];\n if (holiday) {\n holidayTitle = holiday.title;\n }\n }\n\n days.push({\n date: currentDay,\n isCurrentMonth: currentDay.monthOfYear === monthStart.monthOfYear,\n isToday: currentDay.equal(today, 'day'),\n isHoliday,\n holidayTitle,\n });\n currentDay = currentDay.add('day', 1);\n }\n return { days: days, weeksNeeded: actualWeeksToShow };\n });\n\n // --- Appointment Grouping ---\n appointmentsGroupedByDay = computed(() => {\n const { days } = this.calendarDaysInfo(); // Destructure to get days array\n if (days.length === 0) return new Map<string, AXSchedulerAppointmentType[]>();\n\n const viewStartDate = days[0].date;\n const viewEndDate = days[days.length - 1].date;\n const relevantAppointments = this.appointments();\n\n return this.schedulerService.groupAppointmentsByDay(relevantAppointments, viewStartDate, viewEndDate);\n });\n\n // --- Day Cell Layout Calculation ---\n dayCellLayouts = computed<AXSchedulerMonthDayCell[]>(() => {\n const { days: initialDaysInfo } = this.calendarDaysInfo();\n const allOriginalAppointments = this.appointments();\n\n if (initialDaysInfo.length === 0) {\n return []; // Return empty array if no days to process\n }\n if (!allOriginalAppointments || allOriginalAppointments.length === 0) {\n // If no appointments, map initialDaysInfo to the full structure with empty appointment arrays\n return initialDaysInfo.map((dayInfo) => ({\n ...dayInfo,\n appointments: [],\n visibleAppointments: [],\n hiddenAppointments: [],\n overflowCount: 0,\n }));\n }\n\n return initialDaysInfo.map((dayInfo) => {\n const dayAsStartOfDay = dayInfo.date.startOf('day');\n const segmentsForThisDay: AXSchedulerAppointmentSegmentType[] = [];\n\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n dayAsStartOfDay,\n 0, // viewStartHour for month cell context (full day)\n 24, // viewEndHour for month cell context (full day)\n true, // isFullDayCellContext = true\n );\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.originalStartDate.date.getTime(), // Then by original start time\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(), // Then by duration (longer first)\n (s) => s.title?.toLowerCase() ?? '', // Then by title\n ],\n ['asc', 'asc', 'desc', 'asc'],\n );\n\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const overflowCount = hiddenAppointments.length;\n\n return {\n ...dayInfo,\n appointments: sortedSegments,\n visibleAppointments,\n hiddenAppointments,\n overflowCount,\n };\n });\n });\n\n // --- Dynamic Grid Rows ---\n gridTemplateRowsStyle = computed(() => {\n const { weeksNeeded } = this.calendarDaysInfo();\n if (!weeksNeeded || weeksNeeded <= 0) {\n return `repeat(6, minmax(0, 1fr))`; // Fallback, ensures grid is at least somewhat sensible\n }\n return `repeat(${weeksNeeded}, minmax(0, 1fr))`; // Use 1fr for equal distribution\n });\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<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 [class.ax-state-today]=\"dayCell.isToday\"\n [class.ax-state-holiday]=\"dayCell.isHoliday\"\n [class.ax-other-month]=\"!dayCell.isCurrentMonth\"\n [attr.data-date]=\"dayCell.date | format: 'date' : { format: 'YYYY-MM-DD' }\"\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.key + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\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 [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-month-appointment-chip\"\n [class.all-day-segment]=\"segment.allDay\"\n [class.continuation-from-prev]=\"segment.isContinuationFromPreviousDay && !segment.allDay\"\n [class.continuation-to-next]=\"segment.isContinuationToNextDay && !segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</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 +{{ 'more-items' | translate: { params: { number: dayCell.overflowCount } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\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.key + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\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 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 [style.color]=\"segment.textColor\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</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","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentLayout,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\n\n@Component({\n selector: 'ax-scheduler-timeline-day-view',\n templateUrl: './scheduler-timeline-day-view.component.html',\n styleUrl: './scheduler-timeline-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDecoratorGenericComponent, AXFormatPipe, AsyncPipe, AXDragDirective, AXDropZoneDirective],\n})\nexport class AXSchedulerTimelineDayViewComponent extends MXBaseComponent {\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n endHour = input.required<number>();\n date = input.required<AXDateTime>();\n startHour = input.required<number>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n /**\n * Processes original appointments to get segments relevant to this specific day and its viewable hours.\n * Filters out original all-day events.\n */\n processedSegmentsForLayout = computed<AXSchedulerAppointmentSegmentType[]>(() => {\n const viewDate = this.date();\n const allOriginalAppointments = this.appointments();\n const viewConfigStartHour = this.startHour();\n const viewConfigEndHour = this.endHour();\n\n if (!viewDate || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n\n const segmentsOnThisDay: AXSchedulerAppointmentSegmentType[] = [];\n for (const appt of allOriginalAppointments) {\n if (appt.allDay) {\n continue;\n }\n\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n viewDate,\n viewConfigStartHour,\n viewConfigEndHour,\n false,\n );\n\n if (segment) {\n segmentsOnThisDay.push(segment);\n }\n }\n return segmentsOnThisDay;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerAppointmentType) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timelineDay');\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleDrop(e: AXDropZoneDropEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timelineDay');\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n // --- Appointment Layout Calculation ---\n appointmentLayouts = computed((): AXSchedulerAppointmentLayout[] => {\n const finalLayouts: AXSchedulerAppointmentLayout[] = [];\n const viewConfigStartHour = this.startHour();\n const viewConfigEndHour = this.endHour();\n const appointmentsToLayout = this.processedSegmentsForLayout(); // USE SEGMENTS\n\n if (\n typeof viewConfigStartHour !== 'number' ||\n typeof viewConfigEndHour !== 'number' ||\n appointmentsToLayout.length === 0\n ) {\n return finalLayouts;\n }\n\n const sortedAppointments = orderBy(\n appointmentsToLayout,\n [(seg) => seg.startDate.date.getTime(), (seg) => seg.originalEndDate.date.getTime()],\n ['asc', 'desc'],\n );\n\n const rowEndTimes: AXDateTime[] = [];\n\n for (const segment of sortedAppointments) {\n const horizLayout = this.schedulerService.calculateTimelineLayout(\n segment, // Pass the segment\n viewConfigStartHour,\n viewConfigEndHour,\n );\n\n if (!horizLayout) continue; // Segment is outside the viewable hour range or invalid\n\n // For overlap check, use the segment's start and end times\n const segmentStartTime = segment.startDate;\n const segmentEndTime = segment.endDate;\n\n let assignedRowIndex = -1;\n for (let i = 0; i < rowEndTimes.length; i++) {\n // If this segment starts AFTER OR AT the time the row becomes free\n if (segmentStartTime.compare(rowEndTimes[i], 'minute') >= 0) {\n assignedRowIndex = i;\n break;\n }\n }\n\n if (assignedRowIndex === -1) {\n assignedRowIndex = rowEndTimes.length;\n rowEndTimes.push(segmentEndTime); // Add segment's end time for the new row\n } else {\n // Update the end time for the assigned row with this segment's end time\n rowEndTimes[assignedRowIndex] = segmentEndTime;\n }\n\n const layoutHeight = 'var(--ax-comp-scheduler-timeline-view-blocks-height)'; // CSS variable for height\n const layoutLeft = horizLayout.left;\n const layoutWidth = `calc(${horizLayout.width} - ${this.GAP_PX}px)`; // Apply horizontal gap if items are side-by-side within a row (not typical for this stacking)\n const layoutTop = `calc(${assignedRowIndex} * (${layoutHeight} + ${this.GAP_PX}px))`; // Vertical stacking with gap\n\n finalLayouts.push({\n appointment: segment, // Store the segment data\n layoutLeft,\n layoutWidth,\n layoutTop,\n layoutHeight,\n });\n }\n\n return finalLayouts;\n });\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\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 <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (layout of appointmentLayouts(); track layout.appointment.key) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"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.color]=\"layout.appointment.textColor\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [style.background-color]=\"layout.appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</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 ></div>\n }\n </div>\n</div>\n","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\n\nexport interface TimelineMonthViewDayData {\n date: AXDateTime;\n // These will be segments, precisely clipped and flagged for this day\n visibleAppointments: AXSchedulerAppointmentSegmentType[];\n hiddenAppointments: AXSchedulerAppointmentSegmentType[];\n moreCount: number;\n // You might also want to store all segments for the day if needed elsewhere\n // allSegmentsForDay: AXSchedulerAppointmentSegmentType[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-timeline-month-view',\n templateUrl: './scheduler-timeline-month-view.component.html',\n styleUrl: './scheduler-timeline-month-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AXFormatPipe,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n})\nexport class AXSchedulerTimelineMonthViewComponent extends MXBaseComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n private readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY = 3;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n processedDayData = computed<TimelineMonthViewDayData[]>(() => {\n const allOriginalAppointments = this.appointments();\n const monthStartDate = this.date().startOf('month');\n const daysInMonth = monthStartDate.endOf('month').dayOfMonth;\n\n if (!allOriginalAppointments) {\n return Array.from({ length: daysInMonth }, (_, i) => {\n const dayDate = monthStartDate.add('day', i);\n\n return {\n date: dayDate,\n visibleAppointments: [],\n hiddenAppointments: [],\n moreCount: 0,\n };\n });\n }\n\n const result: TimelineMonthViewDayData[] = [];\n\n for (let i = 0; i < daysInMonth; i++) {\n const currentDayDate = monthStartDate.add('day', i).startOf('day'); // Ensure it's start of day\n const segmentsForThisDay: AXSchedulerAppointmentSegmentType[] = [];\n\n for (const appt of allOriginalAppointments) {\n // For Timeline Month View, each day is a row. We want segments for the full 24h of that day.\n // The view's startHour/endHour are NOT used to clip segments here,\n // as it's not a horizontal time scale *within* the day row.\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDayDate, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n // Sort segments: all-day first, then by segment start time (which is clipped to the day)\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.startDate.date.getTime(), // Segment's start time on this day\n (s) => s.endDate.date.getTime() - s.startDate.date.getTime(), // Segment's duration on this day\n (s) => s.title?.toLowerCase() ?? '',\n ],\n ['asc', 'asc', 'desc', 'asc'],\n );\n\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n\n result.push({\n date: currentDayDate,\n visibleAppointments: visibleAppointments,\n hiddenAppointments: hiddenAppointments,\n moreCount: hiddenAppointments.length,\n holiday: this.isHoliday(currentDayDate),\n });\n }\n return result;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerAppointmentType) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timelineMonth');\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timelineMonth');\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-timeline-month-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n class=\"ax-scheduler-month-header-date-day\"\n [class.ax-state-today]=\"isToday(dayData.date)\"\n [class.ax-state-holiday]=\"dayData.holiday.state !== 'none'\"\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 >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.key + segment.originalStartDate.date.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\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 [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-timeline-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ segment.title }}</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 +{{ 'more-items' | translate: { params: { number: dayData.moreCount } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\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 dayData.hiddenAppointments;\n track segment.key + segment.originalStartDate.date.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\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 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 [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-popover-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</span>\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","import { MXBaseComponent } from '@acorex/components/common';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, output } from '@angular/core';\nimport {\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport { AXSchedulerTimelineDayViewComponent } from '../timeline-day/scheduler-timeline-day-view.component';\n\nexport interface TimelineMultiDayDaySlot {\n date: AXDateTime;\n // Pass the RAW original appointments that *overlap* with this day.\n // The child timeline-day-view will handle segmentation.\n originalAppointmentsForThisDay: AXSchedulerAppointmentType[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-timeline-multi-day-view',\n templateUrl: './scheduler-timeline-multi-day-view.component.html',\n styleUrl: './scheduler-timeline-multi-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXSchedulerTimelineDayViewComponent, AsyncPipe, AXFormatPipe, AXTooltipDirective],\n})\nexport class AXSchedulerTimelineMultiDayViewComponent extends MXBaseComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n daysCount = input(7);\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n endHour = input.required<number>();\n date = input.required<AXDateTime>();\n startHour = input.required<number>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n daysDataForTimelineViews = computed<TimelineMultiDayDaySlot[]>(() => {\n const allOriginalAppointments = this.appointments();\n const multiViewStartDate = this.date();\n const numberOfDays = this.daysCount();\n\n if (!multiViewStartDate || !allOriginalAppointments) {\n return [];\n }\n\n const result: TimelineMultiDayDaySlot[] = [];\n\n for (let i = 0; i < numberOfDays; i++) {\n const currentDayDate = multiViewStartDate.add('day', i);\n const currentDayStart = currentDayDate.startOf('day');\n const currentDayEnd = currentDayDate.endOf('day'); // Use full day for overlap check\n\n const appointmentsOverlappingThisDay = allOriginalAppointments.filter((appt) => {\n if (appt.allDay) {\n return false;\n }\n return appt.endDate.compare(currentDayStart, 'day') >= 0 && appt.startDate.compare(currentDayEnd, 'day') <= 0;\n });\n\n result.push({\n date: currentDayDate,\n holiday: this.isHoliday(currentDayDate),\n originalAppointmentsForThisDay: appointmentsOverlappingThisDay,\n });\n }\n return result;\n });\n\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n}\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-scheduler-week-header-date-day\"\n [class.ax-state-today]=\"isToday(daySlot.date)\"\n [class.ax-state-holiday]=\"daySlot.holiday.state !== 'none'\"\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 [endHour]=\"endHour()\"\n [readonly]=\"readonly()\"\n [startHour]=\"startHour()\"\n [draggable]=\"draggable()\"\n [appointments]=\"daySlot.originalAppointmentsForThisDay\"\n (slotClickedInternal)=\"slotClickedInternal.emit($event)\"\n (slotDblClickedInternal)=\"slotDblClickedInternal.emit($event)\"\n (slotRightClickedInternal)=\"slotRightClickedInternal.emit($event)\"\n (onAppointmentDropInternal)=\"onAppointmentDropInternal.emit($event)\"\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","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerActiveAppointmentsInBlock,\n AXSchedulerAllDaySlotData,\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentLayout,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerOverflowBadge,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\n\ntype AXSchedulerGridBadgeInfo = AXSchedulerOverflowBadge & {\n hiddenAppointments: AXSchedulerAppointmentSegmentType[];\n};\n\n@Component({\n selector: 'ax-scheduler-week-view',\n templateUrl: './scheduler-week-view.component.html',\n styleUrl: './scheduler-week-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n})\nexport class AXSchedulerWeekViewComponent extends MXBaseComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n endHour = input.required<number>();\n date = input.required<AXDateTime>();\n startHour = input.required<number>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n /**\n * Processes all original appointments and generates day-specific segments for the entire week.\n * Each segment represents the visible part of an appointment on a particular day.\n * The segment's 'allDay' flag indicates if it should be in the all-day slot or timed grid for that day.\n */\n processedAppointmentsForLayout = computed<AXSchedulerAppointmentSegmentType[]>(() => {\n const viewDays = this.daysArray().map((e) => e.date); // Array of AXDateTime for each day in the week\n const allOriginalAppointments = this.appointments(); // Raw appointments from input\n const viewConfigStartHour = this.startHour(); // Configured start hour for the timed grid\n const viewConfigEndHour = this.endHour(); // Configured end hour for the timed grid\n\n if (!viewDays || viewDays.length === 0 || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n\n const allSegmentsInView: AXSchedulerAppointmentSegmentType[] = [];\n for (const day of viewDays) {\n // For each day in the week\n const dayAsStartOfDay = day.startOf('day'); // Use startOf('day') for consistent cache key if AXDateTime interns\n for (const appt of allOriginalAppointments) {\n // Determine segmentation boundaries for this specific 'day':\n // - If original appt is allDay, segment across the full 0-24h of 'day'.\n // The service method will ensure segment.allDay is true.\n // - If original appt is timed, segment across viewConfigStartHour-viewConfigEndHour.\n // The service method will set segment.allDay=true if this timed segment fills that window.\n const effectiveSegmentStartHour = appt.allDay ? 0 : viewConfigStartHour;\n const effectiveSegmentEndHour = appt.allDay ? 24 : viewConfigEndHour;\n\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n dayAsStartOfDay, // Pass the AXDateTime object for the current day in loop\n effectiveSegmentStartHour,\n effectiveSegmentEndHour,\n );\n\n if (segment) {\n allSegmentsInView.push(segment);\n }\n }\n }\n\n // Deduplicate segments. A segment is unique by its original key and its specific start/end on a day.\n // The service method already produces day-specific start/end times.\n const uniqueSegmentsMap = new Map<string, AXSchedulerAppointmentSegmentType>();\n allSegmentsInView.forEach((seg) => {\n // Create a unique key for the segment based on original appt key and segment's own date range\n const mapKey = `${seg.key}-${seg.startDate.format('YYYYMMDDHHmmssSSS')}-${seg.endDate.format('YYYYMMDDHHmmssSSS')}`;\n if (!uniqueSegmentsMap.has(mapKey)) {\n uniqueSegmentsMap.set(mapKey, seg);\n }\n });\n return Array.from(uniqueSegmentsMap.values());\n });\n\n /**\n * Segments that are to be displayed in the timed grid area of the week view.\n * These are segments from processedAppointmentsForLayout where segment.allDay is false.\n */\n timedGridSegments = computed<AXSchedulerAppointmentSegmentType[]>(() => {\n return this.processedAppointmentsForLayout()?.filter((segment) => !segment.allDay) ?? [];\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentSegment: AXSchedulerAppointmentType) {\n // 'appointmentSegment' here is the segment that was interacted with\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegment);\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSingleSlotEvent(mouseEvent: MouseEvent, hour: AXDateTime, day: AXDateTime, minuteIndex: number) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleAllDaySlotEvent(mouseEvent: MouseEvent, day: AXDateTime) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' as const };\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleAllDayDrop(e: AXDropZoneDropEvent, day: AXDateTime) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' as const };\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n handleSingleDayDrop(e: AXDropZoneDropEvent, hour: AXDateTime, day: AXDateTime, minuteIndex: number) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n daysArray = computed(\n (): { date: AXDateTime; holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } }[] => {\n const time = this.date();\n if (!time) return [];\n const days = [{ date: time, holiday: this.isHoliday(time) }];\n for (let index = 1; index <= 6; index++) {\n const date = time.add('day', index);\n days.push({ date, holiday: this.isHoliday(date) });\n }\n return days;\n },\n );\n\n totalBlocksPerViewDay = computed(() => {\n const startH = this.startHour();\n const endH = this.endHour();\n if (typeof startH !== 'number' || typeof endH !== 'number') return 0;\n return Math.max(0, (endH - startH) * (60 / 30));\n });\n\n appointmentsByStartBlock = computed(() => {\n const viewDate = this.date(); // This should be the start date of the week\n const startH = this.startHour();\n const endH = this.endHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number') return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateWeekViewAppointmentsByStartBlock(\n this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate,\n startH,\n endH,\n );\n });\n\n activeAppointmentsInBlock = computed((): AXSchedulerActiveAppointmentsInBlock => {\n const viewDate = this.date(); // Start date of the week\n const startH = this.startHour();\n const endH = this.endHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number') return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateActiveAppointmentsInBlock(\n this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate,\n startH,\n endH,\n 7, // Explicitly 7 days for week view\n );\n });\n\n visibleAppointmentsLayout = computed((): AXSchedulerAppointmentLayout[] => {\n const layouts: AXSchedulerAppointmentLayout[] = [];\n const startingBlocks = this.appointmentsByStartBlock();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n const occupiedBlocks: Record<number, Record<number, any>> = {};\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n const dayBlocks = startingBlocks[dayIndex] ?? {};\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n if (occupiedBlocks[dayIndex]?.[blockIndex]) continue;\n\n const startingAppointments = dayBlocks[blockIndex] ?? [];\n if (startingAppointments.length > 0) {\n const appointmentToShow = orderBy(startingAppointments, [(e) => e.endDate.date.getTime()], ['desc'])[0];\n\n const C = dayIndex;\n let layoutLeft = '0px';\n if (C > 0 && N > 1) layoutLeft = `calc(${C * (100 / N)}%)`;\n const layoutTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n let layoutHeight = '0px';\n let appointmentDurationMinutes = 0;\n if (appointmentToShow.endDate && appointmentToShow.startDate) {\n appointmentDurationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentToShow);\n if (appointmentDurationMinutes > 0) {\n const heightBlock = appointmentDurationMinutes / 30;\n layoutHeight = `max(0px, calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px))`;\n }\n }\n\n layouts.push({\n layoutTop,\n layoutLeft,\n layoutHeight,\n appointment: appointmentToShow,\n layoutWidth: 'calc(100% / 7 - 2rem)',\n });\n\n const blocksToOccupy = Math.ceil(appointmentDurationMinutes / 30);\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = blockIndex + i;\n if (occupiedBlockIndex < totalBlocksPerDay) {\n if (!occupiedBlocks[dayIndex]) occupiedBlocks[dayIndex] = {};\n if (!occupiedBlocks[dayIndex][occupiedBlockIndex]) {\n occupiedBlocks[dayIndex][occupiedBlockIndex] = appointmentToShow.key;\n }\n } else {\n break;\n }\n }\n }\n }\n }\n return layouts;\n });\n\n visualOccupancyMap = computed(() => {\n const map = new Map<string, any>();\n const visibleLayouts = this.visibleAppointmentsLayout();\n const viewStartDate = this.date();\n const startH = this.startHour();\n const endH = this.endHour();\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n\n if (!viewStartDate || typeof startH !== 'number' || typeof endH !== 'number') return map;\n\n for (const appointmentLayout of visibleLayouts) {\n const startInfo = this.schedulerService.getBlockIdentifier(\n appointmentLayout.appointment.startDate,\n viewStartDate,\n startH,\n endH,\n 7,\n );\n if (!startInfo) continue;\n\n const durationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentLayout.appointment);\n const blocksToOccupy = Math.ceil(durationMinutes / 30);\n\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = startInfo.blockIndex + i;\n if (occupiedBlockIndex >= 0 && occupiedBlockIndex < totalBlocksPerDay) {\n const mapKey = `${startInfo.dayIndex}-${occupiedBlockIndex}`;\n if (!map.has(mapKey)) {\n map.set(mapKey, appointmentLayout.appointment.key);\n }\n } else {\n break;\n }\n }\n }\n return map;\n });\n\n overflowBadges = computed((): AXSchedulerOverflowBadge[] => {\n const badges: AXSchedulerOverflowBadge[] = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0) return badges;\n\n const countedHiddenAppointmentKeysToday = new Map<number, Set<any>>();\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0) continue;\n\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n const hiddenAppointments = activeAppointments.filter(\n (appointment) => appointment.key !== visibleAppointmentKey,\n );\n const newlyHidden = hiddenAppointments.filter(\n (e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.key),\n );\n\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1) baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n\n badges.push({ key: blockMapKey, count: newlyHidden.length, badgeTop, badgeLeft });\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.key));\n }\n }\n }\n return badges;\n });\n\n /**\n * Structures all-day (or \"becomes all-day\") segments for rendering in the all-day slots for each day of the week.\n */\n allDayAppointmentsPerDay = computed((): AXSchedulerAllDaySlotData[] => {\n const daysInWeek = this.daysArray().map((e) => e.date); // AXDateTime objects for each day in the week\n const allSegmentsInView = this.processedAppointmentsForLayout(); // All processed segments\n const result: AXSchedulerAllDaySlotData[] = [];\n\n if (!daysInWeek || daysInWeek.length === 0) return result;\n\n daysInWeek.forEach((dayDate) => {\n const currentDayStart = dayDate.startOf('day'); // For accurate day comparison\n\n // Filter segments that are marked as 'allDay' AND belong to the current 'dayDate'\n const allDaySegmentsForThisDay = allSegmentsInView.filter(\n (segment) => segment.allDay && segment.startDate.startOf('day').equal(currentDayStart, 'day'),\n );\n\n // Sort these segments for consistent display\n // Primarily by original start time, then by duration of original appointment, then title\n const sortedAppointmentsForThisDay = orderBy(\n allDaySegmentsForThisDay,\n [\n (s) => s.originalStartDate.date.getTime(),\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(),\n (s) => s.title?.toLowerCase() ?? '',\n ],\n ['asc', 'desc', 'asc'], // Earlier start, longer duration, then alphabetical title\n );\n\n result.push({\n day: dayDate, // The AXDateTime for this day column\n appointments: sortedAppointmentsForThisDay, // Array of segments for the all-day slot\n });\n });\n return result;\n });\n\n overflowBadgesWithData = computed((): AXSchedulerGridBadgeInfo[] => {\n const badgesInfo: AXSchedulerGridBadgeInfo[] = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0) return badgesInfo;\n\n const countedHiddenAppointmentKeysToday = new Map<number, Set<any>>();\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0) continue;\n\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n // Find all hidden appointments for this specific block\n const hiddenAppointments = activeAppointments.filter(\n (appointment) => appointment.key !== visibleAppointmentKey,\n );\n // Find which of those hidden ones haven't been counted today yet\n const newlyHidden = hiddenAppointments.filter(\n (e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.key),\n );\n\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1) baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n // Keep your positioning logic for the badge itself\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n\n // Store the badge info *and* the list of appointments it represents\n badgesInfo.push({\n key: blockMapKey,\n count: newlyHidden.length,\n badgeTop,\n badgeLeft,\n hiddenAppointments: newlyHidden, // Store the actual hidden appointments\n });\n\n // Mark these as counted for today\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.key));\n }\n }\n }\n // Sort the badges by top then left for consistent rendering order? (Optional)\n // badgesInfo.sort((a, b) => {\n // const topCompare = a.badgeTop.localeCompare(b.badgeTop);\n // if (topCompare !== 0) return topCompare;\n // return a.badgeLeft.localeCompare(b.badgeLeft);\n // });\n return badgesInfo;\n });\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<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 [class.ax-state-holiday]=\"day.holiday.state !== 'none'\"\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\">{{ '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 [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || slotData.appointments[0].readonly || readonly()\"\n [dragData]=\"slotData.appointments[0]\"\n (click)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (dblclick)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n [title]=\"slotData.appointments[0].title\"\n class=\"ax-scheduler-header-week-appointment\"\n [style.color]=\"slotData.appointments[0].textColor\"\n [style.background-color]=\"slotData.appointments[0].backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ slotData.appointments[0].title }}</ax-title>\n </div>\n }\n @if (slotData.appointments.length > 1) {\n <div #moreAppointments class=\"ax-scheduler-appointment-badge\">+{{ slotData.appointments.length - 1 }}</div>\n <ax-popover [target]=\"moreAppointments\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\">\n @for (appointment of slotData.appointments; track appointment.key; let first = $first) {\n @if (!first) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</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.key) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appt.appointment.readonly || readonly()\"\n [dragData]=\"appt.appointment\"\n (click)=\"handleAppointmentEvent($event, appt.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appt.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appt.appointment)\"\n [title]=\"appt.appointment.title\"\n [style.height]=\"appt.layoutHeight\"\n class=\"ax-scheduler-week-appointment\"\n [style.color]=\"appt.appointment.textColor\"\n [style.inset-block-start]=\"appt.layoutTop\"\n [style.inset-inline-start]=\"appt.layoutLeft\"\n [style.background-color]=\"appt.appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appt.appointment.title }}</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 #actionButton class=\"ax-scheduler-appointment-badge\">+{{ badge.count }}</div>\n <!-- The Popover -->\n <ax-popover [target]=\"actionButton\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\">\n @for (appointment of badge.hiddenAppointments; track appointment.key) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n [style.color]=\"appointment.textColor\"\n class=\"ax-scheduler-popover-appointment\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</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 ></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 ></td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXCalendarComponent } from '@acorex/components/calendar';\nimport {\n AXDataSource,\n AXValueChangedEvent,\n convertArrayToDataSource,\n MXBaseComponent,\n} from '@acorex/components/common';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXSelectBoxComponent } from '@acorex/components/select-box';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n linkedSignal,\n model,\n OnInit,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { distinctUntilChanged, map, Observable, of, startWith, switchMap } from 'rxjs';\nimport {\n AXDayOfWeekName,\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n AXSchedulerView,\n} from './scheduler.class';\nimport { AXSchedulerService } from './scheduler.service';\nimport { AXSchedulerAgendaViewComponent } from './views/agenda/scheduler-agenda-view.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerTimelineMonthViewComponent } from './views/timeline-month/scheduler-timeline-month-view.component';\nimport { AXSchedulerTimelineMultiDayViewComponent } from './views/timeline-multi-day/scheduler-timeline-multi-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\n\n@Component({\n selector: 'ax-scheduler',\n templateUrl: './scheduler.component.html',\n styleUrls: ['./scheduler.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n FormsModule,\n AXSelectBoxComponent,\n AXDecoratorIconComponent,\n AXButtonComponent,\n NgClass,\n AXPopoverComponent,\n AXCalendarComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n AXSchedulerTimelineMultiDayViewComponent,\n AXSchedulerTimelineMonthViewComponent,\n AXSchedulerAgendaViewComponent,\n ],\n providers: [AXUnsubscriber],\n})\nexport class AXSchedulerComponent extends MXBaseComponent implements OnInit {\n private platformId = inject(PLATFORM_ID);\n private unsubscriber = inject(AXUnsubscriber);\n private formatService = inject(AXFormatService);\n private localeService = inject(AXLocaleService);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n private translationService = inject(AXTranslationService);\n\n private viewModeSelectbox = viewChild(AXSelectBoxComponent);\n\n displayViews: Record<AXSchedulerView, string> = {\n day: 'daily',\n week: 'weekly',\n month: 'monthly',\n timelineDay: 'daily-timeline',\n timelineMultiDay: 'multi-day-timeline',\n timelineMonth: 'monthly-timeline',\n agenda: 'agenda',\n };\n\n calendar = input<'gregorian' | 'solar-hijri' | string>();\n calendarType = linkedSignal<'gregorian' | 'solar-hijri' | string>(\n () => this.calendar() ?? this.localeService.activeProfile().calendar.system,\n );\n\n startingDate = input<Date>(new Date());\n currentDate = linkedSignal<AXDateTime>(() =>\n this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'),\n );\n\n rtl = signal(false);\n isLoading = signal(false);\n isFullScreen = signal(false);\n viewsDataSource = signal<{ id: string; text: string }[]>([]);\n oldDate = signal<AXDateTime>(this.calendarService.create(new Date(), this.calendarType()));\n\n endHour = input(24);\n startHour = input(8);\n keyField = input('id');\n readonly = input(false);\n draggable = input(true);\n titleField = input('title');\n allDayField = input('allDay');\n allowFullScreen = input(true);\n endDateField = input('endDate');\n multiDayViewDaysCount = input(7);\n readonlyField = input('readonly');\n startDateField = input('startDate');\n textColorField = input('textColor');\n descriptionField = input('description');\n backgroundColorField = input('backgroundColor');\n dataSource = input<AXDataSource<any> | any[]>([]);\n firstDayOfWeek = input<AXDayOfWeekName>('Sunday');\n views = input<AXSchedulerView[]>([\n 'day',\n 'week',\n 'month',\n 'timelineDay',\n 'timelineMultiDay',\n 'timelineMonth',\n 'agenda',\n ]);\n\n selectedView = model<AXSchedulerView>(this.views()[0]);\n\n // --- Public Outputs ---\n onSlotClicked = output<AXSchedulerSlotEvent>();\n onSlotDblClicked = output<AXSchedulerSlotEvent>();\n onSlotRightClick = output<AXSchedulerSlotEvent>();\n onAppointmentDrop = output<AXSchedulerSlotDropEvent>();\n onAppointmentClicked = output<AXSchedulerAppointmentEvent>();\n onAppointmentDblClicked = output<AXSchedulerAppointmentEvent>();\n onAppointmentRightClick = output<AXSchedulerAppointmentEvent>();\n\n // --- Internal Handlers for View Outputs ---\n protected handleSlotClickInternal(eventData: AXSchedulerSlotEvent) {\n this.onSlotClicked.emit(eventData);\n }\n protected handleSlotDblClickInternal(eventData: AXSchedulerSlotEvent) {\n this.onSlotDblClicked.emit(eventData);\n }\n protected handleSlotRightClickInternal(eventData: AXSchedulerSlotEvent) {\n this.onSlotRightClick.emit(eventData);\n }\n protected handleAppointmentClickInternal(eventData: AXSchedulerAppointmentEvent) {\n this.onAppointmentClicked.emit(eventData);\n }\n protected handleAppointmentDblClickInternal(eventData: AXSchedulerAppointmentEvent) {\n this.onAppointmentDblClicked.emit(eventData);\n }\n protected handleAppointmentRightClickInternal(eventData: AXSchedulerAppointmentEvent) {\n this.onAppointmentRightClick.emit(eventData);\n }\n protected handleAppointmentDropInternal(eventData: AXSchedulerSlotDropEvent) {\n this.onAppointmentDrop.emit(eventData);\n }\n\n override ngOnInit() {\n super.ngOnInit();\n\n this.calendarService.calendarChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {\n this.currentDate.set(this.calendarService.create(this.currentDate().date, this.calendarType()));\n this.appointmentsList().refresh();\n });\n\n this.translationService.langChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {\n await this.fillDataSource();\n this.viewModeSelectbox().selectItems(this.viewsDataSource().find((c) => c.id == this.selectedView()));\n this.currentDate.set(this.calendarService.create(this.currentDate().date, this.calendarType()));\n });\n\n if (isPlatformBrowser(this.platformId)) this.rtl.set(AXHtmlUtil.isRtl(this.getHostElement()));\n this.fillDataSource();\n }\n\n async fillDataSource() {\n const result = [];\n for await (const c of this.views()) {\n const text = await this.translationService.translateAsync(`dateTime.duration.${this.displayViews[c]}`);\n result.push({ text, id: c });\n }\n this.viewsDataSource.set(result);\n }\n\n private getGridDateRange(dateInMonth: AXDateTime): { gridStartDate: AXDateTime; gridEndDate: AXDateTime } {\n const firstDayOfMonth = dateInMonth.startOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const daysFromPrevMonth = (firstDisplayedDayOfWeek - firstDayGridNum + 7) % 7;\n const gridStartDate = firstDayOfMonth.add('day', -daysFromPrevMonth);\n // Calculate end date based on standard 6 weeks for safety, or calculate dynamically if preferred\n const gridEndDate = gridStartDate.add('day', 6 * 7 - 1);\n return { gridStartDate, gridEndDate };\n }\n\n appointmentsList = computed(() => {\n const v = this.dataSource();\n let ds: AXDataSource<any>;\n if (Array.isArray(v)) {\n ds = convertArrayToDataSource(v, { key: this.keyField(), pageSize: 9999 });\n } else {\n ds = v as AXDataSource<any>;\n }\n // ds.refresh();\n return ds;\n });\n\n private dataSourceItemsSignal = toSignal(\n new Observable<AXDataSource<any> | null>((subscriber) => {\n const watcher = effect(() => {\n const dsInstance = this.appointmentsList();\n subscriber.next(dsInstance);\n });\n return () => {\n watcher.destroy();\n };\n }).pipe(\n distinctUntilChanged(),\n switchMap((dsInstance) => {\n if (!dsInstance) return of([]);\n return dsInstance.onChanged.pipe(\n map((event) => event.items ?? []),\n startWith(dsInstance.items ?? []),\n );\n }),\n ),\n { initialValue: [] },\n );\n\n #updatedDataSource = effect(() => {\n const ds = this.appointmentsList();\n untracked(() => {\n if (ds) ds.refresh();\n });\n });\n\n currentDateText = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'timelineDay':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n case 'week': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('week', 1).add('day', -1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'agenda':\n case 'timelineMultiDay': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(\n this.currentDate().add('day', this.multiDayViewDaysCount() - 1),\n 'datetime',\n {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n },\n );\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'month':\n case 'timelineMonth':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'MMMM yyyy',\n calendar: this.calendarType(),\n });\n }\n });\n\n calendarDepth = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'week':\n case 'agenda':\n case 'timelineMultiDay':\n return 'day';\n case 'month':\n case 'timelineMonth':\n return 'month';\n case 'timelineDay':\n return 'day';\n }\n });\n\n mappedAppointments = computed(() => {\n const items = this.dataSourceItemsSignal();\n const keyField = this.keyField();\n const titleField = this.titleField();\n const allDayField = this.allDayField();\n const readonlyField = this.readonlyField();\n const textColorField = this.textColorField();\n const descriptionField = this.descriptionField();\n const backgroundColorField = this.backgroundColorField();\n const startDateField = this.startDateField();\n const endDateField = this.endDateField();\n\n return items\n .map((item) => {\n const startDate = this.calendarService.create(item[startDateField], this.calendarType());\n const endDate = this.calendarService.create(item[endDateField], this.calendarType());\n // Basic validation\n if (!startDate?.date || !endDate?.date) {\n console.warn('Scheduler: Skipping item due to invalid date fields:', item);\n return null;\n }\n // Check if dates are valid after creation\n if (isNaN(startDate.date.getTime()) || isNaN(endDate.date.getTime())) {\n console.warn('Scheduler: Skipping item due to invalid parsed date (NaN):', item);\n return null;\n }\n\n // Calculate singleDay based on *calendar day*, not just time\n const isSingleDay = startDate.equal(endDate, 'day');\n\n const appointment: AXSchedulerAppointmentType = {\n key: item[keyField],\n title: item[titleField],\n startDate,\n endDate,\n allDay: !!item[allDayField], // Ensure boolean\n singleDay: isSingleDay, // Use calculated singleDay\n readonly: !!item[readonlyField],\n textColor: item[textColorField],\n description: item[descriptionField],\n backgroundColor: item[backgroundColorField],\n };\n return appointment;\n })\n .filter((appt): appt is AXSchedulerAppointmentType => appt !== null); // Filter out nulls from invalid dates\n });\n\n viewAppointments = computed<AXSchedulerAppointmentType[]>(() => {\n const mapped = this.mappedAppointments();\n const view = this.selectedView();\n const current = this.currentDate();\n\n if (!current || mapped.length === 0) return [];\n\n switch (view) {\n case 'day':\n case 'timelineDay': {\n const dayStart = current.startOf('day');\n const dayEnd = current.endOf('day');\n return mapped.filter(\n (appt) => appt.endDate.compare(dayStart, 'day') >= 0 && appt.startDate.compare(dayEnd, 'day') <= 0,\n );\n }\n case 'week': {\n const weekStart = current;\n const weekEnd = weekStart.add('day', 7);\n return mapped.filter(\n (appt) => appt.startDate.compare(weekEnd, 'day') < 0 && appt.endDate.compare(weekStart, 'day') >= 0,\n );\n }\n case 'month': {\n const { gridStartDate, gridEndDate } = this.getGridDateRange(current);\n const exclusiveGridEndDate = gridEndDate.add('day', 1);\n return mapped.filter(\n (appt) =>\n appt.startDate.compare(exclusiveGridEndDate, 'day') < 0 && appt.endDate.compare(gridStartDate, 'day') >= 0,\n );\n }\n case 'timelineMonth': {\n const dayStart = current.startOf('month');\n const dayEnd = dayStart.endOf('month');\n return mapped.filter(\n (appt) => appt.startDate.compare(dayEnd, 'day') < 0 && appt.endDate.compare(dayStart, 'day') >= 0,\n );\n }\n case 'agenda':\n case 'timelineMultiDay': {\n const dayStart = current;\n const dayEnd = dayStart.add('day', this.multiDayViewDaysCount());\n return mapped.filter(\n (appt) => appt.startDate.compare(dayEnd, 'day') < 0 && appt.endDate.compare(dayStart, 'day') >= 0,\n );\n }\n }\n });\n\n viewChanged(e: AXValueChangedEvent<AXSchedulerView>) {\n const newView = e.value;\n const oldView = e.oldValue;\n this.selectedView.set(newView);\n\n if (oldView === 'week') {\n const oldDayOfWeek = this.oldDate().dayOfWeek % 7;\n const date = this.currentDate().add('day', oldDayOfWeek - 1);\n this.currentDate.set(date);\n }\n\n this.oldDate.set(this.currentDate());\n\n if (newView === 'week') {\n const currentDate = this.currentDate();\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n const startOfWeekDate = currentDate.add('day', -daysToSubtract);\n this.currentDate.set(startOfWeekDate);\n }\n }\n\n nextClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timelineDay':\n this.currentDate.set(this.currentDate().add('day', 1));\n break;\n\n case 'week':\n this.currentDate.set(this.currentDate().add('week', 1));\n break;\n\n case 'agenda':\n case 'timelineMultiDay':\n this.currentDate.set(this.currentDate().add('day', this.multiDayViewDaysCount()));\n break;\n\n case 'month':\n case 'timelineMonth':\n this.currentDate.set(this.currentDate().add('month', 1));\n break;\n }\n }\n\n prevClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timelineDay':\n this.currentDate.set(this.currentDate().add('day', -1));\n break;\n\n case 'week':\n this.currentDate.set(this.currentDate().add('week', -1));\n break;\n\n case 'agenda':\n case 'timelineMultiDay':\n this.currentDate.set(this.currentDate().add('day', -this.multiDayViewDaysCount()));\n break;\n\n case 'month':\n case 'timelineMonth':\n this.currentDate.set(this.currentDate().add('month', -1));\n break;\n }\n }\n\n calendarDateChanged(e: any) {\n let currentDate = this.calendarService.create(e, this.calendarType());\n if (this.selectedView() === 'week') {\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n currentDate = currentDate.add('day', -daysToSubtract);\n }\n this.currentDate.set(currentDate);\n }\n\n handleFullScreen() {\n if (!this.isFullScreen()) this.getHostElement().classList.add('ax-full-screen-container');\n if (this.isFullScreen()) this.getHostElement().classList.remove('ax-full-screen-container');\n this.isFullScreen.set(!this.isFullScreen());\n }\n}\n","<div class=\"ax-scheduler-container\">\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\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n (ngModelChange)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </div>\n </ax-popover>\n </div>\n <div class=\"ax-scheduler-actions\">\n <ax-select-box\n [dropdownWidth]=\"200\"\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 <div class=\"ax-scheduler-views-container\">\n @switch (selectedView()) {\n @case ('day') {\n <ax-scheduler-day-view\n [endHour]=\"endHour()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [startHour]=\"startHour()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\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 [endHour]=\"endHour()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [startHour]=\"startHour()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\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 [firstDayOfWeek]=\"firstDayOfWeek()\"\n [appointments]=\"viewAppointments()\"\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 ('timelineDay') {\n <ax-scheduler-timeline-day-view\n [endHour]=\"endHour()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [startHour]=\"startHour()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\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 ('timelineMultiDay') {\n <ax-scheduler-timeline-multi-day-view\n [endHour]=\"endHour()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [startHour]=\"startHour()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\n [daysCount]=\"multiDayViewDaysCount()\"\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 ('timelineMonth') {\n <ax-scheduler-timeline-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\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 [appointments]=\"viewAppointments()\"\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","import { NgModule } from '@angular/core';\nimport { AXSchedulerComponent } from './scheduler.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\n\nconst COMPONENT = [\n AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n];\n\n@NgModule({\n imports: [...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n})\nexport class AXSchedulerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;MAkBa,kBAAkB,CAAA;AAH/B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;QAEtC,IAAa,CAAA,aAAA,GAAG,EAAE;QAClB,IAAgB,CAAA,gBAAA,GAAG,EAAE;QACrB,IAAsB,CAAA,sBAAA,GAAG,EAAE;AAC3B,QAAA,IAAA,CAAA,uBAAuB,GAAG,EAAE,GAAG,IAAI;AACnC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB;AA4lB1G;AA1lBC;;AAEG;IACH,qBAAqB,CAAC,YAAwC,EAAE,YAAwC,EAAA;QACtG,IAAI,CAAC,YAAY,EAAE,SAAS,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,SAAS,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC1G,YAAA,OAAO,KAAK;;QAEd,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;QACpD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;QAChD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;QACpD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;;AAEhD,QAAA,OAAO,MAAM,GAAG,IAAI,IAAI,IAAI,GAAG,MAAM;;AAGvC;;AAEG;AACH,IAAA,0BAA0B,CAAC,WAAuC,EAAA;QAChE,IAAI,CAAC,WAAW,EAAE,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO;AAAE,YAAA,OAAO,CAAC;AAC7D,QAAA,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;AAChG,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC;;AAGnE;;AAEG;AACH,IAAA,yBAAyB,CAAC,WAAuC,EAAA;QAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC;;AAGjE;;;AAGG;IACH,kBAAkB,CAChB,QAAoB,EACpB,aAAyB,EACzB,SAAiB,EACjB,OAAe;AACf,IAAA,aAAa,GAAG,CAAC,EAAA;AAEjB,QAAA,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/F,YAAA,OAAO,IAAI;;AAEb,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;;QAG5D,IACE,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC;YAC1C,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC;YACzC,QAAQ,CAAC,IAAI,GAAG,SAAS;AACzB,YAAA,QAAQ,CAAC,IAAI,IAAI,OAAO;UACxB;AACA,YAAA,OAAO,IAAI;;;QAIb,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,oBAAoB,CAAC;;QAGjH,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,aAAa,EAAE;AAC7C,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM;QAC9E,MAAM,oBAAoB,GAAG,cAAc,GAAG,SAAS,GAAG,IAAI,CAAC,gBAAgB;;QAG/E,IAAI,oBAAoB,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;AAEzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC;AAEjF,QAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;;AAGjC;;;AAGG;IACH,kCAAkC,CAChC,qBAA0D,EAC1D,aAAyB,EACzB,SAAiB,EACjB,OAAe,EACf,aAAqB,EAAA;QAErB,MAAM,MAAM,GAAyC,EAAE;AACvD,QAAA,IAAI,CAAC,aAAa,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAC,EAAE;AACxG,YAAA,OAAO,MAAM;;AAEf,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;;QAE5D,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAChC,CAAC,EACD,CAAC,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAC9E;AAED,QAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AAC5C,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG;gBAAE;;YAGxE,IAAI,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,WAAW,CAAC,SAAS;AAC7G,YAAA,IAAI,cAAc,CAAC,IAAI,GAAG,SAAS;AAAE,gBAAA,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YAE3G,IAAI,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,GAAG,WAAW,CAAC,OAAO;AACpG,YAAA,IAAI,YAAY,CAAC,IAAI,IAAI,OAAO,EAAE;gBAChC,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY;AACrG,gBAAA,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;;;AAIhE,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC;AAC3G,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,OAAO;;YAGvB,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC;;;AAGxG,YAAA,IACE,CAAC,OAAO;AACR,gBAAA,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ;AACrC,iBAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,EACtF;AACA,gBAAA,OAAO;;;AAIT,YAAA,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;;AAEpE,gBAAA,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,aAAa;oBAAE;AAEvC,gBAAA,MAAM,UAAU,GAAG,IAAI,KAAK,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC;;AAEzE,gBAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,GAAG,iBAAiB,GAAG,CAAC;AAEvF,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAAE,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;AAEpC,gBAAA,KAAK,IAAI,IAAI,GAAG,UAAU,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,EAAE;;oBAEpD,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,iBAAiB,EAAE;AACzC,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;4BAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;;wBAEhD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE;4BAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;;;;;AAK9C,SAAC,CAAC;AACF,QAAA,OAAO,MAAM;;AAGf;;AAEG;IACH,+BAA+B,CAC7B,qBAA0D;IAC1D,aAAyB,EACzB,SAAiB,EACjB,OAAe,EAAA;AAEf,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkE;AAC5F,QAAA,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,UAAU;AAEzD,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,kCAAkC,CACnE,qBAAqB,EACrB,aAAa,EACb,SAAS,EACT,OAAO,EACP,CAAC,CACF;QACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE;;AAG7C,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAe;AAChD,QAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACxC,IAAI,yBAAyB,GAAG,CAAC;AACjC,YAAA,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM;AACrG,YAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM;;AAG/F,YAAA,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACrG,MAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,CACrC,CAAC,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAC7C,iBAAiB,GAAG,SAAS,GAAG,IAAI,CAAC,gBAAgB,CACtD;AAED,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,sBAAsB,CAAC;AAC1F,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,sBAAsB,GAAG,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAE9F,YAAA,KAAK,IAAI,QAAQ,GAAG,eAAe,EAAE,QAAQ,IAAI,cAAc,EAAE,QAAQ,EAAE,EAAE;AAC3E,gBAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAC5C,IAAI,mBAAmB,EAAE;oBACvB,yBAAyB,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,mBAAmB,CAAC,MAAM,CAAC;;;YAG/F,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,yBAAyB,IAAI,CAAC,CAAC;AACpE,SAAC,CAAC;;AAGF,QAAA,MAAM,4BAA4B,GAAG,IAAI,GAAG,EAAe;AAC3D,QAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACxC,YAAA,4BAA4B,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxF,SAAC,CAAC;QAEF,IAAI,OAAO,GAAG,IAAI;QAClB,OAAO,OAAO,EAAE;YACd,OAAO,GAAG,KAAK;AACf,YAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACzC,gBAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AACzC,oBAAA,IAAI,QAAQ,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG;wBAAE;oBAEnC,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;AAClD,wBAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAChE,wBAAA,MAAM,IAAI,GAAG,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;wBAChE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AAEnC,wBAAA,IAAI,IAAI,KAAK,MAAM,EAAE;4BACnB,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;4BACtD,OAAO,GAAG,IAAI;;AAEhB,wBAAA,IAAI,IAAI,KAAK,MAAM,EAAE;4BACnB,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;4BACtD,OAAO,GAAG,IAAI;;;AAGpB,iBAAC,CAAC;AACJ,aAAC,CAAC;;;AAIJ,QAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACxC,YAAA,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC1B,cAAc,EAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvD,qBAAqB,EAAE,4BAA4B,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1E,aAAA,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,OAAO,UAAU;;AAGnB;;AAEG;AACH,IAAA,yCAAyC,CACvC,qBAA0D,EAC1D,aAAyB,EACzB,SAAiB,EACjB,OAAe,EAAA;QAEf,MAAM,MAAM,GAAwC,EAAE;AACtD,QAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;YAC5C,IAAI,CAAC,WAAW,CAAC,SAAS;gBAAE;AAC5B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YACtG,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,SAAS;AAC1C,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAAE,oBAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE;AAC5C,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC;oBAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;gBACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;;AAElD,SAAC,CAAC;AACF,QAAA,OAAO,MAAM;;AAGf;;;AAGG;AACH,IAAA,sBAAsB,CACpB,YAA0C,EAC1C,aAAyB;IACzB,WAAuB,EAAA;AAEvB,QAAA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAwC;AAC3E,QAAA,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE;AAChF,YAAA,OAAO,mBAAmB;;;QAI5B,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAEtD,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG;gBAAE;;AAGxE,YAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS;AAC9C,YAAA,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO;;YAG1C,IACE,cAAc,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC;gBAChD,gBAAgB,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,EAC1D;gBACA;;;YAIF,IAAI,UAAU,GACZ,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;;AAGtG,YAAA,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,OACE,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC;gBAC9C,UAAU,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC;gBACnD,SAAS,GAAG,GAAG,EACf;gBACA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;gBAE/F,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACxC,oBAAA,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;;;gBAGzC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE;oBAC/E,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;;gBAGvD,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,gBAAA,SAAS,EAAE;;AAEb,YAAA,IAAI,SAAS,IAAI,GAAG,EAAE;gBACpB,OAAO,CAAC,IAAI,CAAC,kEAAkE,EAAE,WAAW,CAAC,GAAG,CAAC;;AAErG,SAAC,CAAC;AAEF,QAAA,OAAO,mBAAmB;;AAG5B,IAAA,kBAAkB,CAAC,OAAwB,EAAA;QACzC,QAAQ,OAAO;AACb,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC;AACV,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC;AACV,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,CAAC;AACV,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,CAAC;AACV,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,CAAC;AACV,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,CAAC;AACV,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,CAAC;AACV,YAAA;AACE,gBAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAA,2BAAA,CAA6B,CAAC;AACvE,gBAAA,OAAO,CAAC;;;IAId,WAAW,CACT,SAAqB,EACrB,IAAqB,EAAA;AAErB,QAAA,IAAI,OAAmB;QACvB,QAAQ,IAAI;AACV,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,MAAM;gBACT,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC;gBAC9D;AACF,YAAA,KAAK,aAAa;AAClB,YAAA,KAAK,kBAAkB;AACrB,gBAAA,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;gBAClE;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,eAAe;AAClB,gBAAA,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;AACpC,gBAAA,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;gBAChC;;AAEJ,QAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;;AAGrC,IAAA,WAAW,CACT,KAAyD,EACzD,cAAc,EACd,SAAiC,EAAA;AAEjC,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK;QAC9B,UAAU,CAAC,cAAc,EAAE;QAC3B,UAAU,CAAC,eAAe,EAAE;AAC5B,QAAA,IAAI,SAAS,KAAK,aAAa,EAAE;AAC/B,YAAA,MAAM,oBAAoB,GAAG,cAAc,CAAC,SAAS,CAAC;YACtD,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAyC,CAAC;AAC1F,YAAA,IAAI,OAAO;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,KAAoC,CAAC;;AAEjE,QAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACxB,YAAA,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC;YAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,IAAkC,CAAC;AAC5E,YAAA,IAAI,OAAO;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,KAA6B,CAAC;;;;IAM5D,uBAAuB;;IAErB,IAAgC,EAChC,aAAqB;IACrB,WAAmB,EAAA;QAEnB,IACE,CAAC,IAAI,EAAE,SAAS;YAChB,CAAC,IAAI,CAAC,OAAO;YACb,OAAO,aAAa,KAAK,QAAQ;YACjC,OAAO,WAAW,KAAK,QAAQ;YAC/B,aAAa,IAAI,WAAW;UAC5B;AACA,YAAA,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AAC5F,YAAA,OAAO,IAAI;;QAGb,MAAM,wBAAwB,GAAG,CAAC,WAAW,GAAG,aAAa,IAAI,EAAE;QACnE,IAAI,wBAAwB,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;;AAG/C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS;AACnC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;;;QAI/B,IAAI,iCAAiC,GAAG,YAAY,CAAC,IAAI,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM;;QAGpF,iCAAiC,GAAG,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,aAAa,GAAG,EAAE,CAAC;;QAEnG,iCAAiC,GAAG,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,WAAW,GAAG,EAAE,CAAC;AAEjG,QAAA,MAAM,kCAAkC,GAAG,iCAAiC,GAAG,aAAa,GAAG,EAAE;;QAGjG,IACE,kCAAkC,GAAG,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,GAAG,IAAI,+BACnD;;;;AAKF,QAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kCAAkC,CAAC,GAAG,wBAAwB,IAAI,GAAG;;;QAIzG,IAAI,+BAA+B,GAAG,UAAU,CAAC,IAAI,GAAG,EAAE,GAAG,UAAU,CAAC,MAAM;QAC9E,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;;AAE/G,YAAA,+BAA+B,GAAG,EAAE,GAAG,EAAE;;;QAI3C,+BAA+B,GAAG,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,WAAW,GAAG,EAAE,CAAC;;QAE7F,+BAA+B,GAAG,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,aAAa,GAAG,EAAE,CAAC;AAE/F,QAAA,MAAM,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAC3C,CAAC,EACD,+BAA+B,GAAG,iCAAiC,CACpE;AAED,QAAA,IAAI,4BAA4B,IAAI,CAAC,EAAE;;AAErC,YAAA,OAAO,IAAI;;QAGb,MAAM,eAAe,GAAG,CAAC,4BAA4B,GAAG,wBAAwB,IAAI,GAAG;;QAGvF,IACE,cAAc,GAAG,GAAG;AACpB,YAAA,cAAc,GAAG,CAAC;AAClB,YAAA,eAAe,IAAI,CAAC;AACpB,YAAA,eAAe,GAAG,GAAG;AACrB,YAAA,cAAc,GAAG,eAAe,GAAG,QAAQ,6BAC3C;;;;;;;;YAQA,IAAI,eAAe,IAAI,CAAC;AAAE,gBAAA,OAAO,IAAI;;QAGvC,OAAO;AACL,YAAA,IAAI,EAAE,CAAG,EAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAG,CAAA,CAAA;AACtD,YAAA,KAAK,EAAE,CAAG,EAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAG,CAAA,CAAA;SACzD;;AAGH;;;;AAIG;IACH,gCAAgC,CAC9B,WAAuC;AACvC,IAAA,GAAe,EACf,aAAqB,EACrB,WAAmB,EACnB,oBAAoB,GAAG,KAAK,EAAA;AAE5B,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAClE,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI,WAAW,CAAC,MAAM,EAAE;YACtB,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7C,YAAA,IAAI,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;gBACjE,OAAO;AACL,oBAAA,GAAG,WAAW;AACd,oBAAA,SAAS,EAAE,UAAU;AACrB,oBAAA,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AACxD,oBAAA,MAAM,EAAE,IAAI;oBACZ,iBAAiB,EAAE,WAAW,CAAC,SAAS;oBACxC,eAAe,EAAE,WAAW,CAAC,OAAO;AACpC,oBAAA,6BAA6B,EAAE,KAAK;AACpC,oBAAA,uBAAuB,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC;AAC1F,oBAAA,sBAAsB,EAAE,WAAW;iBACpC;;AACI,iBAAA,IACL,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC;AACnE,gBAAA,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,EAClE;gBACA,OAAO;AACL,oBAAA,GAAG,WAAW;AACd,oBAAA,SAAS,EAAE,UAAU;AACrB,oBAAA,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AACxD,oBAAA,MAAM,EAAE,IAAI;oBACZ,iBAAiB,EAAE,WAAW,CAAC,SAAS;oBACxC,eAAe,EAAE,WAAW,CAAC,OAAO;AACpC,oBAAA,6BAA6B,EAAE,IAAI;AACnC,oBAAA,uBAAuB,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC;AAC1F,oBAAA,sBAAsB,EAAE,WAAW;iBACpC;;iBACI;AACL,gBAAA,OAAO,IAAI;;;QAIf,MAAM,gBAAgB,GAAG;cACrB,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK;AAC3B,cAAE,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1D,MAAM,cAAc,GAAG;AACrB,cAAE,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;AACzC,cAAE,WAAW,KAAK,EAAE,KAAK,WAAW,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC;AAC/D,kBAAE,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;AACzC,kBAAE,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAE1D,IACE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC5D,YAAA,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,EAC5D;AACA,YAAA,OAAO,IAAI;;QAEb,MAAM,gBAAgB,GACpB,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,GAAG,gBAAgB;QAC1G,MAAM,cAAc,GAClB,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,GAAG,cAAc;QAElG,IAAI,gBAAgB,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC3D,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,6BAA6B,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC;AACnG,QAAA,MAAM,uBAAuB,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC;AACzF,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;QAEpE,OAAO;AACL,YAAA,GAAG,WAAW;AACd,YAAA,SAAS,EAAE,gBAAgB;AAC3B,YAAA,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;YACtD,iBAAiB,EAAE,WAAW,CAAC,SAAS;YACxC,eAAe,EAAE,WAAW,CAAC,OAAO;YACpC,6BAA6B;YAC7B,uBAAuB;AACvB,YAAA,sBAAsB,EAAE,WAAW;SACpC;;AAGH,IAAA,sBAAsB,CACpB,IAAoE,EAAA;QAEpE,MAAM,OAAO,GAAG,IAAyC;AACzD,QAAA,IAAI,OAAO,CAAC,sBAAsB,EAAE;YAClC,OAAO,OAAO,CAAC,sBAAsB;;AAEvC,QAAA,OAAO,IAAI;;AAGb,IAAA,SAAS,CAAC,IAAgB,EAAA;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;IAE7E,SAAS,CAAC,IAAgB,EAAE,QAAgB,EAAA;AAC1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,OAAO;QACtE,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;;+GAlmBlC,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;oBACV,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACiCK,MAAO,8BAA+B,SAAQ,eAAe,CAAA;AAhBnE,IAAA,WAAA,GAAA;;AAiBU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAErD,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAU;AAC1B,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAc;AACnC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAA+B,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAkB,MAAK;AAChD,YAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;AACnD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE;AACnC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE;AAErC,YAAA,IAAI,CAAC,eAAe,IAAI,CAAC,uBAAuB,EAAE;AAChD,gBAAA,OAAO,EAAE;;YAGX,MAAM,MAAM,GAAoB,EAAE;AAElC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC/D,MAAM,kBAAkB,GAAwC,EAAE;AAElE,gBAAA,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE;AAC1C,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC;oBACrG,IAAI,OAAO,EAAE;AACX,wBAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAIpC,gBAAA,MAAM,cAAc,GAAG,OAAO,CAC5B,kBAAkB,EAClB;AACE,oBAAA,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;oBACjC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE;iBAC7E,EACD,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CACvB;gBAED,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,YAAY,EAAE,cAAc;AAC5B,oBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACpC,iBAAA,CAAC;;AAEJ,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;;QAGF,IAAmB,CAAA,mBAAA,GAAG,MAAM,EAAwB;QACpD,IAAsB,CAAA,sBAAA,GAAG,MAAM,EAAwB;QACvD,IAAwB,CAAA,wBAAA,GAAG,MAAM,EAAwB;QACzD,IAA0B,CAAA,0BAAA,GAAG,MAAM,EAA+B;QAClE,IAA6B,CAAA,6BAAA,GAAG,MAAM,EAA+B;QACrE,IAA+B,CAAA,+BAAA,GAAG,MAAM,EAA+B;QACvE,IAAyB,CAAA,yBAAA,GAAG,MAAM,EAA4B;;AAG7C,QAAA,IAAA,CAAA,cAAc,GAAG;AAChC,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,mBAAmB;gBAC/B,QAAQ,EAAE,IAAI,CAAC,sBAAsB;gBACrC,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC3C,aAAA;AACD,YAAA,WAAW,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,0BAA0B;gBACtC,QAAQ,EAAE,IAAI,CAAC,6BAA6B;gBAC5C,WAAW,EAAE,IAAI,CAAC,+BAA+B;AAClD,aAAA;SACF;AAiDF;IAhDC,sBAAsB,CAAC,UAAsB,EAAE,eAA2C,EAAA;QACxF,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;QACzF,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC/B,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,EACvD,IAAI,CAAC,cAAc,EACnB,aAAa,CACd;;IAEH,eAAe,CAAC,UAAsB,EAAE,IAAgB,EAAA;AACtD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;QACjF,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;;;IAGzG,UAAU,CAAC,CAAsB,EAAE,IAAgB,EAAA;AACjD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;QACjF,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAgC;QACtE,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC;AACrF,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,mBAAmB;AACjC,SAAA,CAAC;;AAGM,IAAA,OAAO,CAAC,IAAgB,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;;AAEvB,IAAA,SAAS,CAAC,IAAgB,EAAA;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;QACvD,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,OAAO;AACL,gBAAA,KAAK,EAAE,SAAS;gBAChB,OAAO;aACR;;AAEH,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxE,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;;AAE7B,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;;AAG1B,IAAA,IAA4C,UAAU,GAAA;AACpD,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;+GAxHb,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,EClD3C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ksHAgFA,EDvCI,MAAA,EAAA,CAAA,0rIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,yCACT,YAAY,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,2BAA2B,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,eAAe,EACf,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,gBAAgB,kDAChB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGT,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAhB1C,SAAS;+BACE,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACP,SAAS;wBACT,YAAY;wBACZ,2BAA2B;wBAC3B,eAAe;wBACf,mBAAmB;wBACnB,gBAAgB;wBAChB,kBAAkB;AACnB,qBAAA,EAAA,QAAA,EAAA,ksHAAA,EAAA,MAAA,EAAA,CAAA,0rIAAA,CAAA,EAAA;8BAyH2C,UAAU,EAAA,CAAA;sBAArD,WAAW;uBAAC,yBAAyB;;;AE5HlC,MAAO,2BAA4B,SAAQ,eAAe,CAAA;AAhBhE,IAAA,WAAA,GAAA;;AAiBU,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QAE5C,IAAM,CAAA,MAAA,GAAG,CAAC;AAEnB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAU;AAC1B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAU;AAClC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAc;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAU;AACpC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAA+B,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,8BAA8B,GAAG,QAAQ,CAAC,MAAK;AAC7C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE;AAC5B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,YAAY,EAAE;YACjD,IAAI,CAAC,QAAQ,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE;AACnD,gBAAA,OAAO,EAAE;;YAEX,MAAM,kBAAkB,GAAwC,EAAE;AAClE,YAAA,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE;AACxC,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;gBACpG,IAAI,OAAO,EAAE;AACX,oBAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAGpC,YAAA,OAAO,kBAAkB;AAC3B,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;YACjC,MAAM,0BAA0B,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;YAC1F,MAAM,8BAA8B,GAClC,IAAI,CAAC,8BAA8B,EAAE,EAAE,MAAM,CAC3C,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAChH,IAAI,EAAE;AACT,YAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmC;AAC3D,YAAA,0BAA0B,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1E,YAAA,8BAA8B,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBAC3B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;AAEhC,aAAC,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;AACtC,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;YACpC,OAAO,IAAI,CAAC,8BAA8B,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;AACnF,SAAC,CAAC;QAEF,IAAmB,CAAA,mBAAA,GAAG,MAAM,EAAwB;QACpD,IAAsB,CAAA,sBAAA,GAAG,MAAM,EAAwB;QACvD,IAAwB,CAAA,wBAAA,GAAG,MAAM,EAAwB;QACzD,IAA0B,CAAA,0BAAA,GAAG,MAAM,EAA+B;QAClE,IAA6B,CAAA,6BAAA,GAAG,MAAM,EAA+B;QACrE,IAA+B,CAAA,+BAAA,GAAG,MAAM,EAA+B;QACvE,IAAyB,CAAA,yBAAA,GAAG,MAAM,EAA4B;AAE7C,QAAA,IAAA,CAAA,cAAc,GAAG;AAChC,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,mBAAmB;gBAC/B,QAAQ,EAAE,IAAI,CAAC,sBAAsB;gBACrC,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC3C,aAAA;AACD,YAAA,WAAW,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,0BAA0B;gBACtC,QAAQ,EAAE,IAAI,CAAC,6BAA6B;gBAC5C,WAAW,EAAE,IAAI,CAAC,+BAA+B;AAClD,aAAA;SACF;AA6DD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,EAAE;AACpB,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACzD,YAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC;YACpB,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACrC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1B,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAElB,YAAA,OAAO,KAAK;AACd,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwC;AAC/D,YAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACzD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE;AAC5B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAE3B,YAAA,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5G,gBAAA,OAAO,OAAO;;AAGhB,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,+BAA+B,CAC9E,oBAAoB,EACpB,QAAQ,EACR,MAAM,EACN,IAAI,CACL;YAED,MAAM,kBAAkB,GAAG,OAAO,CAChC,oBAAoB,EACpB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EACjH,CAAC,KAAK,EAAE,MAAM,CAAC,CAChB;YAED,MAAM,WAAW,GAA4D,EAAE;AAE/E,YAAA,KAAK,MAAM,kBAAkB,IAAI,kBAAkB,EAAE;AACnD,gBAAA,IAAI,WAAW,GAAG,CAAC,CAAC;gBAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE;AACrB,oBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;wBACnB,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE;;oBAGvC,IAAI,QAAQ,GAAG,KAAK;oBAEpB,KAAK,MAAM,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE;AACvD,wBAAA,IACE,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC;AACzE,4BAAA,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EACzE;4BACA,QAAQ,GAAG,IAAI;4BACf;;;oBAIJ,IAAI,CAAC,QAAQ,EAAE;wBACb,WAAW,GAAG,CAAC;wBACf,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;wBACpD;;AAGF,oBAAA,IAAI,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE;wBACnC,OAAO,CAAC,IAAI,CACV,CAAkD,+CAAA,EAAA,kBAAkB,CAAC,KAAK,CAA6B,0BAAA,EAAA,CAAC,CAAE,CAAA,CAC3G;AACD,wBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;4BAAE,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE;wBAC1D,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;wBACpD,WAAW,GAAG,CAAC;wBACf;;;gBAIJ,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC;AACtE,gBAAA,MAAM,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC,qBAAqB,GAAG,CAAC;AAEjF,gBAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,EAAE;AAClC,oBAAA,WAAW,EAAE,WAAW;AACxB,oBAAA,qBAAqB,EAAE,aAAa;AACrC,iBAAA,CAAC;;AAEJ,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;AAoEH;IApNC,sBAAsB,CAAC,UAAsB,EAAE,WAAuC,EAAA;AACpF,QAAA,MAAM,mBAAmB,GAAI,WAAiD,CAAC;AAC7E,cAAG;AACC,gBAAA,GAAG,WAAW;gBACd,SAAS,EAAG,WAAiD,CAAC,iBAAiB;gBAC/E,OAAO,EAAG,WAAiD,CAAC,eAAe;AAC7C;cAChC,WAAW;QACf,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC/B,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,EACvD,IAAI,CAAC,cAAc,EACnB,aAAa,CACd;;IAEH,qBAAqB,CAAC,UAAsB,EAAE,SAAqB,EAAA;AACjE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC;AACpE,QAAA,IAAI,QAAQ;YAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;;AAErH,IAAA,qBAAqB,CAAC,UAAsB,EAAA;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5C,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAc,EAAE;AAC7D,QAAA,IAAI,QAAQ;YAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;;AAErH,IAAA,gBAAgB,CAAC,CAAsB,EAAA;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5C,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAc,EAAE;QAE7D,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAgC;AACtE,QAAA,MAAM,mBAAmB,GAAI,WAAiD,CAAC;AAC7E,cAAG;AACC,gBAAA,GAAG,WAAW;gBACd,SAAS,EAAG,WAAiD,CAAC,iBAAiB;gBAC/E,OAAO,EAAG,WAAiD,CAAC,eAAe;AAC7C;cAChC,WAAW;AACf,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,mBAAmB;AACjC,SAAA,CAAC;;IAEJ,mBAAmB,CAAC,CAAsB,EAAE,SAAqB,EAAA;AAC/D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC;QACpE,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAgC;AACtE,QAAA,MAAM,mBAAmB,GAAI,WAAiD,CAAC;AAC7E,cAAG;AACC,gBAAA,GAAG,WAAW;gBACd,SAAS,EAAG,WAAiD,CAAC,iBAAiB;gBAC/E,OAAO,EAAG,WAAiD,CAAC,eAAe;AAC7C;cAChC,WAAW;AACf,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,mBAAmB;AACjC,SAAA,CAAC;;AAyFJ,IAAA,oBAAoB,CAAC,GAAQ,EAAA;QAC3B,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG3C,IAAA,kBAAkB,CAAC,GAAQ,EAAA;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;QAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,qBAAqB,GAAG,CAAC,EAAE;AAC9C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,qBAAqB;AACtC,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW;AAC5B,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,gBAAA,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC;AACrD,gBAAA,OAAO,KAAK;;AAEd,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,KAAK;YACnC,MAAM,WAAW,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AACjC,YAAA,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;AACnC,YAAA,OAAO,CAAQ,KAAA,EAAA,WAAW,CAAO,IAAA,EAAA,WAAW,KAAK;;AAEnD,QAAA,OAAO,KAAK;;AAGd,IAAA,mBAAmB,CAAC,GAAQ,EAAA;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;QAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,qBAAqB,GAAG,CAAC,EAAE;AAC9C,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,qBAAqB;YAEtC,IAAI,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,IAAI;YACvB,IAAI,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,CAAe,YAAA,EAAA,IAAI,CAAC,MAAM,KAAK;YAEnD,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;AAElC,YAAA,OAAO,QAAQ,YAAY,CAAA,IAAA,EAAO,IAAI,CAAC,MAAM,KAAK;;AAEpD,QAAA,OAAO,IAAI;;AAGb,IAAA,iBAAiB,CAAC,GAAQ,EAAA;QACxB,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QAElF,IAAI,kBAAkB,EAAE;AACtB,YAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM;YACjG,MAAM,gBAAgB,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;AAC7D,YAAA,MAAM,MAAM,GAAG,gBAAgB,GAAG,EAAE;YACpC,OAAO,CAAA,yDAAA,EAA4D,MAAM,CAAA,OAAA,CAAS;;AAEpF,QAAA,OAAO,EAAE;;AAGX,IAAA,oBAAoB,CAAC,GAAQ,EAAA;QAC3B,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QAClF,IAAI,kBAAkB,EAAE;AACtB,YAAA,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;AAC9G,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YACjE,IAAI,eAAe,IAAI,CAAC;AAAE,gBAAA,OAAO,KAAK;AAEtC,YAAA,MAAM,WAAW,GAAG,eAAe,GAAG,EAAE;YACxC,MAAM,eAAe,GAAG,CAAA,iDAAA,CAAmD;YAE3E,OAAO,CAAA,KAAA,EAAQ,eAAe,CAAM,GAAA,EAAA,WAAW,MAAM,IAAI,CAAC,MAAM,CAAA,GAAA,CAAK;;AAEvE,QAAA,OAAO,KAAK;;AAGd,IAAA,IAA4C,UAAU,GAAA;AACpD,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;+GAvRb,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EC7CxC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,mlMAsIA,EDlGI,MAAA,EAAA,CAAA,+hJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,2BAA2B,oLAC3B,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kBAAkB,EAClB,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,YAAY,EACZ,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,yPACf,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGV,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAhBvC,SAAS;+BACE,uBAAuB,EAAA,eAAA,EAGhB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACP,2BAA2B;wBAC3B,SAAS;wBACT,gBAAgB;wBAChB,kBAAkB;wBAClB,YAAY;wBACZ,eAAe;wBACf,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,mlMAAA,EAAA,MAAA,EAAA,CAAA,+hJAAA,CAAA,EAAA;8BAwR2C,UAAU,EAAA,CAAA;sBAArD,WAAW;uBAAC,yBAAyB;;;AEvQlC,MAAO,6BAA8B,SAAQ,eAAe,CAAA;AAjBlE,IAAA,WAAA,GAAA;;AAkBU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;;AAGrD,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAU;AAC1B,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAc;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAkB,UAAU,CAAC;AACnD,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAA+B,EAAE,CAAC;;QAG7C,IAAY,CAAA,YAAA,GAAG,CAAC;QAChB,IAAgC,CAAA,gCAAA,GAAG,CAAC;;QAG7C,IAAmB,CAAA,mBAAA,GAAG,MAAM,EAAwB;QACpD,IAAsB,CAAA,sBAAA,GAAG,MAAM,EAAwB;QACvD,IAAwB,CAAA,wBAAA,GAAG,MAAM,EAAwB;QACzD,IAA0B,CAAA,0BAAA,GAAG,MAAM,EAA+B;QAClE,IAA6B,CAAA,6BAAA,GAAG,MAAM,EAA+B;QACrE,IAA+B,CAAA,+BAAA,GAAG,MAAM,EAA+B;QACvE,IAAyB,CAAA,yBAAA,GAAG,MAAM,EAA4B;;AAG7C,QAAA,IAAA,CAAA,cAAc,GAAG;AAChC,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,mBAAmB;gBAC/B,QAAQ,EAAE,IAAI,CAAC,sBAAsB;gBACrC,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC3C,aAAA;AACD,YAAA,WAAW,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,0BAA0B;gBACtC,QAAQ,EAAE,IAAI,CAAC,6BAA6B;gBAC5C,WAAW,EAAE,IAAI,CAAC,+BAA+B;AAClD,aAAA;SACF;;;AA6BD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;AACtC,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;YACxB,MAAM,QAAQ,GAAiB,EAAE;YAEjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAChC,YAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS;AAC9C,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE;YACjD,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;;YAG3F,MAAM,cAAc,GAAG,CAAC,gBAAgB,GAAG,qBAAqB,GAAG,CAAC,IAAI,CAAC;YACzE,IAAI,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC;AAE7D,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,gBAAA,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;gBAC9B,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;;AAEjD,YAAA,OAAO,QAAQ;AACjB,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACxC,YAAA,IAAI,CAAC,UAAU;gBAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;YAEpD,MAAM,eAAe,GAAG,UAAU;YAClC,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;AAEhD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AACvF,YAAA,MAAM,uBAAuB,GAAG,eAAe,CAAC,SAAS;AAEzD,YAAA,MAAM,WAAW,GAAG,CAAC,uBAAuB,GAAG,eAAe,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;YACvG,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC;;;;AAK/D,YAAA,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU;AAC7C,YAAA,MAAM,iBAAiB,GAAG,WAAW,GAAG,WAAW;AACnD,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC;AAC3E,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC;AACvE,YAAA,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CAAC,YAAY;YAEjE,MAAM,IAAI,GAMJ,EAAE;AACR,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrD,IAAI,UAAU,GAAG,cAAc;AAE/B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,SAAS,GACb,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAE7G,IAAI,YAAY,GAAkB,IAAI;gBACtC,IAAI,SAAS,EAAE;AACb,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/F,IAAI,OAAO,EAAE;AACX,wBAAA,YAAY,GAAG,OAAO,CAAC,KAAK;;;gBAIhC,IAAI,CAAC,IAAI,CAAC;AACR,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,cAAc,EAAE,UAAU,CAAC,WAAW,KAAK,UAAU,CAAC,WAAW;oBACjE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;oBACvC,SAAS;oBACT,YAAY;AACb,iBAAA,CAAC;gBACF,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;;YAEvC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE;AACvD,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAK;YACvC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACzC,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,GAAG,EAAwC;YAE7E,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;AAClC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI;AAC9C,YAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE;AAEhD,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,oBAAoB,EAAE,aAAa,EAAE,WAAW,CAAC;AACvG,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAA4B,MAAK;YACxD,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACzD,YAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;AAEnD,YAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChC,OAAO,EAAE,CAAC;;YAEZ,IAAI,CAAC,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;;gBAEpE,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM;AACvC,oBAAA,GAAG,OAAO;AACV,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,mBAAmB,EAAE,EAAE;AACvB,oBAAA,kBAAkB,EAAE,EAAE;AACtB,oBAAA,aAAa,EAAE,CAAC;AACjB,iBAAA,CAAC,CAAC;;AAGL,YAAA,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;gBACrC,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;gBACnD,MAAM,kBAAkB,GAAwC,EAAE;AAElE,gBAAA,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE;AAC1C,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CACpE,IAAI,EACJ,eAAe,EACf,CAAC;AACD,oBAAA,EAAE;AACF,oBAAA,IAAI,CACL;oBACD,IAAI,OAAO,EAAE;AACX,wBAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAIpC,gBAAA,MAAM,cAAc,GAAG,OAAO,CAC5B,kBAAkB,EAClB;AACE,oBAAA,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB,oBAAA,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE;oBACzC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE;AAC5E,oBAAA,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;iBACpC,EACD,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAC9B;AAED,gBAAA,MAAM,mBAAmB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,gCAAgC,CAAC;gBAC1F,MAAM,kBAAkB,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC;AACtF,gBAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM;gBAE/C,OAAO;AACL,oBAAA,GAAG,OAAO;AACV,oBAAA,YAAY,EAAE,cAAc;oBAC5B,mBAAmB;oBACnB,kBAAkB;oBAClB,aAAa;iBACd;AACH,aAAC,CAAC;AACJ,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;YACpC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC/C,YAAA,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,CAAC,EAAE;gBACpC,OAAO,CAAA,yBAAA,CAA2B,CAAC;;AAErC,YAAA,OAAO,CAAU,OAAA,EAAA,WAAW,CAAmB,iBAAA,CAAA,CAAC;AAClD,SAAC,CAAC;AAKH;IAnMC,sBAAsB,CAAC,UAAsB,EAAE,4BAAwD,EAAA;QACrG,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,4BAA4B,CAAC;QACtG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC/B,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,EACvD,IAAI,CAAC,cAAc,EACnB,aAAa,CACd;;IAEH,eAAe,CAAC,UAAsB,EAAE,IAAgB,EAAA;AACtD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACjF,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;;;IAGzG,UAAU,CAAC,CAAsB,EAAE,IAAgB,EAAA;AACjD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAChF,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAgC;QACtE,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC;AAErF,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,mBAAmB;AACjC,SAAA,CAAC;;AAyKJ,IAAA,IAA4C,UAAU,GAAA;AACpD,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;+GAvOb,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EC5D1C,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,m7MAqIA,EDnFI,MAAA,EAAA,CAAA,klJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,yCACT,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAClB,YAAY,EAEZ,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,EACf,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,4JACnB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGT,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAjBzC,SAAS;+BACE,yBAAyB,EAAA,eAAA,EAGlB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACP,SAAS;wBACT,gBAAgB;wBAChB,kBAAkB;wBAClB,YAAY;wBACZ,SAAS;wBACT,eAAe;wBACf,mBAAmB;wBACnB,kBAAkB;AACnB,qBAAA,EAAA,QAAA,EAAA,m7MAAA,EAAA,MAAA,EAAA,CAAA,klJAAA,CAAA,EAAA;8BAwO2C,UAAU,EAAA,CAAA;sBAArD,WAAW;uBAAC,yBAAyB;;;AE/PlC,MAAO,mCAAoC,SAAQ,eAAe,CAAA;AARxE,IAAA,WAAA,GAAA;;AASU,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QAE5C,IAAM,CAAA,MAAA,GAAG,CAAC;AAEnB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAU;AAC1B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAU;AAClC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAc;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAU;AACpC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAA+B,EAAE,CAAC;AAEtD;;;AAGG;AACH,QAAA,IAAA,CAAA,0BAA0B,GAAG,QAAQ,CAAsC,MAAK;AAC9E,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE;AAC5B,YAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;AACnD,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5C,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE;AAExC,YAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;AACjF,gBAAA,OAAO,EAAE;;YAGX,MAAM,iBAAiB,GAAwC,EAAE;AACjE,YAAA,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE;AAC1C,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;oBACf;;AAGF,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CACpE,IAAI,EACJ,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,CACN;gBAED,IAAI,OAAO,EAAE;AACX,oBAAA,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAGnC,YAAA,OAAO,iBAAiB;AAC1B,SAAC,CAAC;;QAGF,IAAmB,CAAA,mBAAA,GAAG,MAAM,EAAwB;QACpD,IAAsB,CAAA,sBAAA,GAAG,MAAM,EAAwB;QACvD,IAAwB,CAAA,wBAAA,GAAG,MAAM,EAAwB;QACzD,IAA0B,CAAA,0BAAA,GAAG,MAAM,EAA+B;QAClE,IAA6B,CAAA,6BAAA,GAAG,MAAM,EAA+B;QACrE,IAA+B,CAAA,+BAAA,GAAG,MAAM,EAA+B;QACvE,IAAyB,CAAA,yBAAA,GAAG,MAAM,EAA4B;;AAG7C,QAAA,IAAA,CAAA,cAAc,GAAG;AAChC,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,mBAAmB;gBAC/B,QAAQ,EAAE,IAAI,CAAC,sBAAsB;gBACrC,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC3C,aAAA;AACD,YAAA,WAAW,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,0BAA0B;gBACtC,QAAQ,EAAE,IAAI,CAAC,6BAA6B;gBAC5C,WAAW,EAAE,IAAI,CAAC,+BAA+B;AAClD,aAAA;SACF;AAwBD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,EAAE;AACpB,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACzD,YAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC;YACpB,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACrC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1B,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAElB,YAAA,OAAO,KAAK;AACd,SAAC,CAAC;;AAGF,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAqC;YACjE,MAAM,YAAY,GAAmC,EAAE;AACvD,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5C,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE;YACxC,MAAM,oBAAoB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAE/D,IACE,OAAO,mBAAmB,KAAK,QAAQ;gBACvC,OAAO,iBAAiB,KAAK,QAAQ;AACrC,gBAAA,oBAAoB,CAAC,MAAM,KAAK,CAAC,EACjC;AACA,gBAAA,OAAO,YAAY;;AAGrB,YAAA,MAAM,kBAAkB,GAAG,OAAO,CAChC,oBAAoB,EACpB,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EACpF,CAAC,KAAK,EAAE,MAAM,CAAC,CAChB;YAED,MAAM,WAAW,GAAiB,EAAE;AAEpC,YAAA,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE;gBACxC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAC/D,OAAO;gBACP,mBAAmB,EACnB,iBAAiB,CAClB;AAED,gBAAA,IAAI,CAAC,WAAW;AAAE,oBAAA,SAAS;;AAG3B,gBAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS;AAC1C,gBAAA,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO;AAEtC,gBAAA,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAE3C,oBAAA,IAAI,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;wBAC3D,gBAAgB,GAAG,CAAC;wBACpB;;;AAIJ,gBAAA,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE;AAC3B,oBAAA,gBAAgB,GAAG,WAAW,CAAC,MAAM;AACrC,oBAAA,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;qBAC5B;;AAEL,oBAAA,WAAW,CAAC,gBAAgB,CAAC,GAAG,cAAc;;AAGhD,gBAAA,MAAM,YAAY,GAAG,sDAAsD,CAAC;AAC5E,gBAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI;AACnC,gBAAA,MAAM,WAAW,GAAG,CAAQ,KAAA,EAAA,WAAW,CAAC,KAAK,CAAM,GAAA,EAAA,IAAI,CAAC,MAAM,CAAK,GAAA,CAAA,CAAC;AACpE,gBAAA,MAAM,SAAS,GAAG,CAAQ,KAAA,EAAA,gBAAgB,CAAO,IAAA,EAAA,YAAY,CAAM,GAAA,EAAA,IAAI,CAAC,MAAM,CAAM,IAAA,CAAA,CAAC;gBAErF,YAAY,CAAC,IAAI,CAAC;oBAChB,WAAW,EAAE,OAAO;oBACpB,UAAU;oBACV,WAAW;oBACX,SAAS;oBACT,YAAY;AACb,iBAAA,CAAC;;AAGJ,YAAA,OAAO,YAAY;AACrB,SAAC,CAAC;AAKH;IA5GC,sBAAsB,CAAC,UAAsB,EAAE,eAA2C,EAAA;QACxF,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;QACzF,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC/B,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,EACvD,IAAI,CAAC,cAAc,EACnB,aAAa,CACd;;IAEH,eAAe,CAAC,UAAsB,EAAE,SAAqB,EAAA;AAC3D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC;AAC5E,QAAA,IAAI,QAAQ;YAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;;IAErH,UAAU,CAAC,CAAsB,EAAE,SAAqB,EAAA;AACtD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC;QAC5E,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAgC;QACtE,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC;AACrF,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,mBAAmB;AACjC,SAAA,CAAC;;AAqFJ,IAAA,IAA4C,UAAU,GAAA;AACpD,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;+GAhLb,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnChD,m1EAuDA,EAAA,MAAA,EAAA,CAAA,85EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtBY,2BAA2B,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,YAAY,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAEzF,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAR/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,mBAGzB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,2BAA2B,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,m1EAAA,EAAA,MAAA,EAAA,CAAA,85EAAA,CAAA,EAAA;8BAiLzD,UAAU,EAAA,CAAA;sBAArD,WAAW;uBAAC,yBAAyB;;;AEzJlC,MAAO,qCAAsC,SAAQ,eAAe,CAAA;AAjB1E,IAAA,WAAA,GAAA;;AAkBU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QAEpC,IAAgC,CAAA,gCAAA,GAAG,CAAC;AAErD,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAU;AAC1B,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAc;AACnC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAA+B,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAA6B,MAAK;AAC3D,YAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;YACnD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;YACnD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU;YAE5D,IAAI,CAAC,uBAAuB,EAAE;AAC5B,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;oBAClD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;oBAE5C,OAAO;AACL,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,mBAAmB,EAAE,EAAE;AACvB,wBAAA,kBAAkB,EAAE,EAAE;AACtB,wBAAA,SAAS,EAAE,CAAC;qBACb;AACH,iBAAC,CAAC;;YAGJ,MAAM,MAAM,GAA+B,EAAE;AAE7C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AACpC,gBAAA,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnE,MAAM,kBAAkB,GAAwC,EAAE;AAElE,gBAAA,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE;;;;AAI1C,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC;oBACzG,IAAI,OAAO,EAAE;AACX,wBAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;;;;AAKpC,gBAAA,MAAM,cAAc,GAAG,OAAO,CAC5B,kBAAkB,EAClB;AACE,oBAAA,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB,oBAAA,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;oBACjC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE;oBAC5D,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;iBACpC,EACD,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAC9B;AAED,gBAAA,MAAM,mBAAmB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,gCAAgC,CAAC;gBAC1F,MAAM,kBAAkB,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC;gBAEtF,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,mBAAmB,EAAE,mBAAmB;AACxC,oBAAA,kBAAkB,EAAE,kBAAkB;oBACtC,SAAS,EAAE,kBAAkB,CAAC,MAAM;AACpC,oBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AACxC,iBAAA,CAAC;;AAEJ,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;;QAGF,IAAmB,CAAA,mBAAA,GAAG,MAAM,EAAwB;QACpD,IAAsB,CAAA,sBAAA,GAAG,MAAM,EAAwB;QACvD,IAAwB,CAAA,wBAAA,GAAG,MAAM,EAAwB;QACzD,IAA0B,CAAA,0BAAA,GAAG,MAAM,EAA+B;QAClE,IAA6B,CAAA,6BAAA,GAAG,MAAM,EAA+B;QACrE,IAA+B,CAAA,+BAAA,GAAG,MAAM,EAA+B;QACvE,IAAyB,CAAA,yBAAA,GAAG,MAAM,EAA4B;;AAG7C,QAAA,IAAA,CAAA,cAAc,GAAG;AAChC,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,mBAAmB;gBAC/B,QAAQ,EAAE,IAAI,CAAC,sBAAsB;gBACrC,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC3C,aAAA;AACD,YAAA,WAAW,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,0BAA0B;gBACtC,QAAQ,EAAE,IAAI,CAAC,6BAA6B;gBAC5C,WAAW,EAAE,IAAI,CAAC,+BAA+B;AAClD,aAAA;SACF;AAiDF;IAhDC,sBAAsB,CAAC,UAAsB,EAAE,eAA2C,EAAA;QACxF,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;QACzF,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC/B,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,EACvD,IAAI,CAAC,cAAc,EACnB,aAAa,CACd;;IAEH,eAAe,CAAC,UAAsB,EAAE,IAAgB,EAAA;;AAEtD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;AACxF,QAAA,IAAI,QAAQ;YAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;;IAErH,UAAU,CAAC,CAAsB,EAAE,IAAgB,EAAA;;AAEjD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;QACxF,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAgC;QACtE,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC;AACrF,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,mBAAmB;AACjC,SAAA,CAAC;;AAGM,IAAA,OAAO,CAAC,IAAgB,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;;AAEvB,IAAA,SAAS,CAAC,IAAgB,EAAA;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;QACvD,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,OAAO;AACL,gBAAA,KAAK,EAAE,SAAS;gBAChB,OAAO;aACR;;AAEH,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxE,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;;AAE7B,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;;AAG1B,IAAA,IAA4C,UAAU,GAAA;AACpD,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;+GA5Ib,qCAAqC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qCAAqC,quCCzDlD,yrMAiIA,EAAA,MAAA,EAAA,CAAA,smJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlFI,2BAA2B,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC3B,YAAY,EACZ,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,EACT,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,gBAAgB,kDAChB,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,eAAe,EACf,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,4JACnB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGT,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAjBjD,SAAS;+BACE,kCAAkC,EAAA,eAAA,EAG3B,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACP,2BAA2B;wBAC3B,YAAY;wBACZ,SAAS;wBACT,gBAAgB;wBAChB,kBAAkB;wBAClB,eAAe;wBACf,mBAAmB;wBACnB,kBAAkB;AACnB,qBAAA,EAAA,QAAA,EAAA,yrMAAA,EAAA,MAAA,EAAA,CAAA,smJAAA,CAAA,EAAA;8BA6I2C,UAAU,EAAA,CAAA;sBAArD,WAAW;uBAAC,yBAAyB;;;AErKlC,MAAO,wCAAyC,SAAQ,eAAe,CAAA;AAR7E,IAAA,WAAA,GAAA;;AASU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAErD,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAU;AAC1B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAU;AAClC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAc;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAU;AACpC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAA+B,EAAE,CAAC;AAEtD,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAA4B,MAAK;AAClE,YAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;AACnD,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,EAAE;AACtC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE;AAErC,YAAA,IAAI,CAAC,kBAAkB,IAAI,CAAC,uBAAuB,EAAE;AACnD,gBAAA,OAAO,EAAE;;YAGX,MAAM,MAAM,GAA8B,EAAE;AAE5C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;gBACrC,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvD,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC;gBACrD,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAElD,MAAM,8BAA8B,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC7E,oBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,wBAAA,OAAO,KAAK;;oBAEd,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC;AAC/G,iBAAC,CAAC;gBAEF,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AACvC,oBAAA,8BAA8B,EAAE,8BAA8B;AAC/D,iBAAA,CAAC;;AAEJ,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;QAEF,IAAmB,CAAA,mBAAA,GAAG,MAAM,EAAwB;QACpD,IAAsB,CAAA,sBAAA,GAAG,MAAM,EAAwB;QACvD,IAAwB,CAAA,wBAAA,GAAG,MAAM,EAAwB;QACzD,IAA0B,CAAA,0BAAA,GAAG,MAAM,EAA+B;QAClE,IAA6B,CAAA,6BAAA,GAAG,MAAM,EAA+B;QACrE,IAA+B,CAAA,+BAAA,GAAG,MAAM,EAA+B;QACvE,IAAyB,CAAA,yBAAA,GAAG,MAAM,EAA4B;AAqB/D;AAnBW,IAAA,OAAO,CAAC,IAAgB,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;;AAEvB,IAAA,SAAS,CAAC,IAAgB,EAAA;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;QACvD,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,OAAO;AACL,gBAAA,KAAK,EAAE,SAAS;gBAChB,OAAO;aACR;;AAEH,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxE,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;;AAE7B,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;;+GAtEf,wCAAwC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAxC,wCAAwC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BrD,u6DAwCA,EDXY,MAAA,EAAA,CAAA,giEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mCAAmC,4XAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,YAAY,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAE/E,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBARpD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sCAAsC,mBAG/B,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA,CAAC,mCAAmC,EAAE,SAAS,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,u6DAAA,EAAA,MAAA,EAAA,CAAA,giEAAA,CAAA,EAAA;;;AEyBvF,MAAO,4BAA6B,SAAQ,eAAe,CAAA;AAjBjE,IAAA,WAAA,GAAA;;AAkBU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QAE5C,IAAM,CAAA,MAAA,GAAG,CAAC;AAEnB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAU;AAC1B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAU;AAClC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAc;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAU;AACpC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAA+B,EAAE,CAAC;AAEtD;;;;AAIG;AACH,QAAA,IAAA,CAAA,8BAA8B,GAAG,QAAQ,CAAsC,MAAK;YAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACpD,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7C,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAEzC,YAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1G,gBAAA,OAAO,EAAE;;YAGX,MAAM,iBAAiB,GAAwC,EAAE;AACjE,YAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;;gBAE1B,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,gBAAA,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE;;;;;;AAM1C,oBAAA,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,mBAAmB;AACvE,oBAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,iBAAiB;AAEpE,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CACpE,IAAI,EACJ,eAAe;oBACf,yBAAyB,EACzB,uBAAuB,CACxB;oBAED,IAAI,OAAO,EAAE;AACX,wBAAA,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;AAOrC,YAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA6C;AAC9E,YAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;;gBAEhC,MAAM,MAAM,GAAG,CAAA,EAAG,GAAG,CAAC,GAAG,CAAI,CAAA,EAAA,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAI,CAAA,EAAA,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA,CAAE;gBACnH,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAClC,oBAAA,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;;AAEtC,aAAC,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;AAC/C,SAAC,CAAC;AAEF;;;AAGG;AACH,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAsC,MAAK;AACrE,YAAA,OAAO,IAAI,CAAC,8BAA8B,EAAE,EAAE,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;AAC1F,SAAC,CAAC;;QAGF,IAAmB,CAAA,mBAAA,GAAG,MAAM,EAAwB;QACpD,IAAsB,CAAA,sBAAA,GAAG,MAAM,EAAwB;QACvD,IAAwB,CAAA,wBAAA,GAAG,MAAM,EAAwB;QACzD,IAA0B,CAAA,0BAAA,GAAG,MAAM,EAA+B;QAClE,IAA6B,CAAA,6BAAA,GAAG,MAAM,EAA+B;QACrE,IAA+B,CAAA,+BAAA,GAAG,MAAM,EAA+B;QACvE,IAAyB,CAAA,yBAAA,GAAG,MAAM,EAA4B;;AAG7C,QAAA,IAAA,CAAA,cAAc,GAAG;AAChC,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC,mBAAmB;gBAC/B,QAAQ,EAAE,IAAI,CAAC,sBAAsB;gBACrC,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC3C,aAAA;AACD,YAAA,WAAW,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,0BAA0B;gBACtC,QAAQ,EAAE,IAAI,CAAC,6BAA6B;gBAC5C,WAAW,EAAE,IAAI,CAAC,+BAA+B;AAClD,aAAA;SACF;AA6CD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzB,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,EAAE;AACpB,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACzD,YAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC;YACpB,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACrC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1B,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAElB,YAAA,OAAO,KAAK;AACd,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAClB,MAA2G;AACzG,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5D,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;AACnC,gBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;;AAEpD,YAAA,OAAO,IAAI;AACb,SAAC,CACF;AAED,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AACpC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;YAC3B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;AAAE,gBAAA,OAAO,CAAC;AACpE,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACjD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAK;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;YAC3B,IAAI,CAAC,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;AAAE,gBAAA,OAAO,EAAE;;YAElF,OAAO,IAAI,CAAC,gBAAgB,CAAC,yCAAyC,CACpE,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,QAAQ,EACR,MAAM,EACN,IAAI,CACL;AACH,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,yBAAyB,GAAG,QAAQ,CAAC,MAA2C;YAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;YAC3B,IAAI,CAAC,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;AAAE,gBAAA,OAAO,EAAE;;YAElF,OAAO,IAAI,CAAC,gBAAgB,CAAC,kCAAkC,CAC7D,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,CAAC,CACF;AACH,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,yBAAyB,GAAG,QAAQ,CAAC,MAAqC;YACxE,MAAM,OAAO,GAAmC,EAAE;AAClD,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,EAAE;YACtD,MAAM,SAAS,GAAG,CAAC;AACnB,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE;YACtD,MAAM,eAAe,GAAG,CAAA,uDAAA,CAAyD;YACjF,MAAM,CAAC,GAAW,SAAS;YAC3B,MAAM,cAAc,GAAwC,EAAE;AAE9D,YAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,EAAE;gBACvD,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE;AAChD,gBAAA,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,iBAAiB,EAAE,UAAU,EAAE,EAAE;AACrE,oBAAA,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;wBAAE;oBAE5C,MAAM,oBAAoB,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE;AACxD,oBAAA,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,wBAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAEvG,MAAM,CAAC,GAAG,QAAQ;wBAClB,IAAI,UAAU,GAAG,KAAK;AACtB,wBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;4BAAE,UAAU,GAAG,CAAQ,KAAA,EAAA,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAA,EAAA,CAAI;AAC1D,wBAAA,MAAM,SAAS,GAAG,CAAA,KAAA,EAAQ,eAAe,CAAM,GAAA,EAAA,UAAU,GAAG;wBAC5D,IAAI,YAAY,GAAG,KAAK;wBACxB,IAAI,0BAA0B,GAAG,CAAC;wBAClC,IAAI,iBAAiB,CAAC,OAAO,IAAI,iBAAiB,CAAC,SAAS,EAAE;4BAC5D,0BAA0B,GAAG,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,iBAAiB,CAAC;AAChG,4BAAA,IAAI,0BAA0B,GAAG,CAAC,EAAE;AAClC,gCAAA,MAAM,WAAW,GAAG,0BAA0B,GAAG,EAAE;gCACnD,YAAY,GAAG,CAAiB,cAAA,EAAA,eAAe,CAAM,GAAA,EAAA,WAAW,MAAM,IAAI,CAAC,MAAM,CAAA,IAAA,CAAM;;;wBAI3F,OAAO,CAAC,IAAI,CAAC;4BACX,SAAS;4BACT,UAAU;4BACV,YAAY;AACZ,4BAAA,WAAW,EAAE,iBAAiB;AAC9B,4BAAA,WAAW,EAAE,uBAAuB;AACrC,yBAAA,CAAC;wBAEF,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;AACjE,wBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;AACvC,4BAAA,MAAM,kBAAkB,GAAG,UAAU,GAAG,CAAC;AACzC,4BAAA,IAAI,kBAAkB,GAAG,iBAAiB,EAAE;AAC1C,gCAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAAE,oCAAA,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE;gCAC5D,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE;oCACjD,cAAc,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,iBAAiB,CAAC,GAAG;;;iCAEjE;gCACL;;;;;;AAMV,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAe;AAClC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,EAAE;AACvD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE;AACjC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE;YAEtD,IAAI,CAAC,aAAa,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;AAAE,gBAAA,OAAO,GAAG;AAExF,YAAA,KAAK,MAAM,iBAAiB,IAAI,cAAc,EAAE;gBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CACxD,iBAAiB,CAAC,WAAW,CAAC,SAAS,EACvC,aAAa,EACb,MAAM,EACN,IAAI,EACJ,CAAC,CACF;AACD,gBAAA,IAAI,CAAC,SAAS;oBAAE;AAEhB,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,WAAW,CAAC;gBACvG,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAEtD,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;AACvC,oBAAA,MAAM,kBAAkB,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC;oBACnD,IAAI,kBAAkB,IAAI,CAAC,IAAI,kBAAkB,GAAG,iBAAiB,EAAE;wBACrE,MAAM,MAAM,GAAG,CAAG,EAAA,SAAS,CAAC,QAAQ,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAE;wBAC5D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;4BACpB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC;;;yBAE/C;wBACL;;;;AAIN,YAAA,OAAO,GAAG;AACZ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAiC;YACzD,MAAM,MAAM,GAA+B,EAAE;AAC7C,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,EAAE;AACrD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE;YAC9C,MAAM,SAAS,GAAG,CAAC;AACnB,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE;YACtD,MAAM,eAAe,GAAG,CAAA,uDAAA,CAAyD;YACjF,MAAM,CAAC,GAAW,SAAS;YAE3B,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,IAAI,iBAAiB,KAAK,CAAC;AAAE,gBAAA,OAAO,MAAM;AAE5E,YAAA,MAAM,iCAAiC,GAAG,IAAI,GAAG,EAAoB;AAErE,YAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,EAAE;gBACvD,iCAAiC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC;AAC1D,gBAAA,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,iBAAiB,EAAE,UAAU,EAAE,EAAE;AACrE,oBAAA,MAAM,WAAW,GAAG,CAAA,EAAG,QAAQ,CAAI,CAAA,EAAA,UAAU,EAAE;AAC/C,oBAAA,MAAM,kBAAkB,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE;AACrE,oBAAA,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC;wBAAE;oBAErC,MAAM,qBAAqB,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;AAC3D,oBAAA,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAClD,CAAC,WAAW,KAAK,WAAW,CAAC,GAAG,KAAK,qBAAqB,CAC3D;oBACD,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAC3C,CAAC,CAAC,KAAK,CAAC,iCAAiC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CACnE;AAED,oBAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC1B,MAAM,CAAC,GAAG,QAAQ;wBAClB,IAAI,WAAW,GAAG,KAAK;AACvB,wBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;4BAAE,WAAW,GAAG,CAAQ,KAAA,EAAA,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAA,EAAA,CAAI;AAC3D,wBAAA,MAAM,OAAO,GAAG,CAAA,KAAA,EAAQ,eAAe,CAAM,GAAA,EAAA,UAAU,GAAG;AAC1D,wBAAA,MAAM,SAAS,GAAG,CAAA,KAAA,EAAQ,WAAW,CAAkB,eAAA,EAAA,CAAC,cAAc;AACtE,wBAAA,MAAM,QAAQ,GAAG,CAAQ,KAAA,EAAA,OAAO,aAAa;AAE7C,wBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;wBACjF,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,iCAAiC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;;;AAI5F,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;AAEF;;AAEG;AACH,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAkC;YACpE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;YAChE,MAAM,MAAM,GAAgC,EAAE;AAE9C,YAAA,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,MAAM;AAEzD,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;gBAC7B,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;;AAG/C,gBAAA,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,MAAM,CACvD,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAC9F;;;AAID,gBAAA,MAAM,4BAA4B,GAAG,OAAO,CAC1C,wBAAwB,EACxB;oBACE,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE;oBACzC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE;oBAC5E,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;iBACpC,EACD,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CACvB;gBAED,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,EAAE,OAAO;oBACZ,YAAY,EAAE,4BAA4B;AAC3C,iBAAA,CAAC;AACJ,aAAC,CAAC;AACF,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAiC;YACjE,MAAM,UAAU,GAA+B,EAAE;AACjD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,EAAE;AACrD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE;YAC9C,MAAM,SAAS,GAAG,CAAC;AACnB,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE;YACtD,MAAM,eAAe,GAAG,CAAA,uDAAA,CAAyD;YACjF,MAAM,CAAC,GAAW,SAAS;YAE3B,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,IAAI,iBAAiB,KAAK,CAAC;AAAE,gBAAA,OAAO,UAAU;AAEhF,YAAA,MAAM,iCAAiC,GAAG,IAAI,GAAG,EAAoB;AAErE,YAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,EAAE;gBACvD,iCAAiC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC;AAC1D,gBAAA,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,iBAAiB,EAAE,UAAU,EAAE,EAAE;AACrE,oBAAA,MAAM,WAAW,GAAG,CAAA,EAAG,QAAQ,CAAI,CAAA,EAAA,UAAU,EAAE;AAC/C,oBAAA,MAAM,kBAAkB,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE;AACrE,oBAAA,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC;wBAAE;oBAErC,MAAM,qBAAqB,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;;AAE3D,oBAAA,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAClD,CAAC,WAAW,KAAK,WAAW,CAAC,GAAG,KAAK,qBAAqB,CAC3D;;oBAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAC3C,CAAC,CAAC,KAAK,CAAC,iCAAiC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CACnE;AAED,oBAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC1B,MAAM,CAAC,GAAG,QAAQ;wBAClB,IAAI,WAAW,GAAG,KAAK;AACvB,wBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;4BAAE,WAAW,GAAG,CAAQ,KAAA,EAAA,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAA,EAAA,CAAI;AAC3D,wBAAA,MAAM,OAAO,GAAG,CAAA,KAAA,EAAQ,eAAe,CAAM,GAAA,EAAA,UAAU,GAAG;;AAE1D,wBAAA,MAAM,SAAS,GAAG,CAAA,KAAA,EAAQ,WAAW,CAAkB,eAAA,EAAA,CAAC,cAAc;AACtE,wBAAA,MAAM,QAAQ,GAAG,CAAQ,KAAA,EAAA,OAAO,aAAa;;wBAG7C,UAAU,CAAC,IAAI,CAAC;AACd,4BAAA,GAAG,EAAE,WAAW;4BAChB,KAAK,EAAE,WAAW,CAAC,MAAM;4BACzB,QAAQ;4BACR,SAAS;4BACT,kBAAkB,EAAE,WAAW;AAChC,yBAAA,CAAC;;wBAGF,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,iCAAiC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;;;;;;;;;AAU5F,YAAA,OAAO,UAAU;AACnB,SAAC,CAAC;AAyBH;IAhXC,sBAAsB,CAAC,UAAsB,EAAE,kBAA8C,EAAA;;QAE3F,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,kBAAkB,CAAC;QAC5F,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC/B,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,EACvD,IAAI,CAAC,cAAc,EACnB,aAAa,CACd;;AAEH,IAAA,qBAAqB,CAAC,UAAsB,EAAE,IAAgB,EAAE,GAAe,EAAE,WAAmB,EAAA;QAClG,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,GAAG,EAAE,CAAC;AAC5E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC;AACrE,QAAA,IAAI,QAAQ;YAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;;IAErH,qBAAqB,CAAC,UAAsB,EAAE,GAAe,EAAA;QAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QAChC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;QACpC,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE;AAC9D,QAAA,IAAI,QAAQ;YAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;;IAErH,gBAAgB,CAAC,CAAsB,EAAE,GAAe,EAAA;QACtD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QAChC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;QACpC,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE;QAC9D,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAgC;QACtE,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC;AACrF,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,mBAAmB;AACjC,SAAA,CAAC;;AAEJ,IAAA,mBAAmB,CAAC,CAAsB,EAAE,IAAgB,EAAE,GAAe,EAAE,WAAmB,EAAA;QAChG,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,GAAG,EAAE,CAAC;AAC5E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC;QACrE,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAgC;QACtE,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC;AACrF,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,mBAAmB;AACjC,SAAA,CAAC;;AAgTM,IAAA,OAAO,CAAC,IAAgB,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;;AAEvB,IAAA,SAAS,CAAC,IAAgB,EAAA;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;QACvD,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,OAAO;AACL,gBAAA,KAAK,EAAE,SAAS;gBAChB,OAAO;aACR;;AAEH,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxE,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;;AAE7B,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;;AAG1B,IAAA,IAA4C,UAAU,GAAA;AACpD,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;+GAhdb,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,29CCtDzC,+0TAoNA,EAAA,MAAA,EAAA,CAAA,s9NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxKI,2BAA2B,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC3B,SAAS,EACT,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,0QAClB,YAAY,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,eAAe,EACf,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,4JACnB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGT,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAjBxC,SAAS;+BACE,wBAAwB,EAAA,eAAA,EAGjB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACP,2BAA2B;wBAC3B,SAAS;wBACT,gBAAgB;wBAChB,kBAAkB;wBAClB,YAAY;wBACZ,eAAe;wBACf,mBAAmB;wBACnB,kBAAkB;AACnB,qBAAA,EAAA,QAAA,EAAA,+0TAAA,EAAA,MAAA,EAAA,CAAA,s9NAAA,CAAA,EAAA;8BAid2C,UAAU,EAAA,CAAA;sBAArD,WAAW;uBAAC,yBAAyB;;;AEvblC,MAAO,oBAAqB,SAAQ,eAAe,CAAA;AAxBzD,IAAA,WAAA,GAAA;;AAyBU,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC7C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,SAAS,CAAC,oBAAoB,CAAC;AAE3D,QAAA,IAAA,CAAA,YAAY,GAAoC;AAC9C,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,WAAW,EAAE,gBAAgB;AAC7B,YAAA,gBAAgB,EAAE,oBAAoB;AACtC,YAAA,aAAa,EAAE,kBAAkB;AACjC,YAAA,MAAM,EAAE,QAAQ;SACjB;QAED,IAAQ,CAAA,QAAA,GAAG,KAAK,EAAwC;QACxD,IAAY,CAAA,YAAA,GAAG,YAAY,CACzB,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,CAC5E;AAED,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAO,IAAI,IAAI,EAAE,CAAC;AACtC,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,CAAa,MACrC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CACrF;AAED,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AACnB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAiC,EAAE,CAAC;AAC5D,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAa,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAE1F,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;AACnB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AACvB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;AAC3B,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC7B,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAC,CAAC,CAAC;AAChC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC;AACjC,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC;AACnC,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC;AACnC,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,CAAC;AAC/C,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAA4B,EAAE,CAAC;AACjD,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAkB,QAAQ,CAAC;QACjD,IAAK,CAAA,KAAA,GAAG,KAAK,CAAoB;YAC/B,KAAK;YACL,MAAM;YACN,OAAO;YACP,aAAa;YACb,kBAAkB;YAClB,eAAe;YACf,QAAQ;AACT,SAAA,CAAC;QAEF,IAAY,CAAA,YAAA,GAAG,KAAK,CAAkB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;;QAGtD,IAAa,CAAA,aAAA,GAAG,MAAM,EAAwB;QAC9C,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAwB;QACjD,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAwB;QACjD,IAAiB,CAAA,iBAAA,GAAG,MAAM,EAA4B;QACtD,IAAoB,CAAA,oBAAA,GAAG,MAAM,EAA+B;QAC5D,IAAuB,CAAA,uBAAA,GAAG,MAAM,EAA+B;QAC/D,IAAuB,CAAA,uBAAA,GAAG,MAAM,EAA+B;AA+D/D,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE;AAC3B,YAAA,IAAI,EAAqB;AACzB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACpB,gBAAA,EAAE,GAAG,wBAAwB,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iBACrE;gBACL,EAAE,GAAG,CAAsB;;;AAG7B,YAAA,OAAO,EAAE;AACX,SAAC,CAAC;QAEM,IAAqB,CAAA,qBAAA,GAAG,QAAQ,CACtC,IAAI,UAAU,CAA2B,CAAC,UAAU,KAAI;AACtD,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAK;AAC1B,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC1C,gBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,aAAC,CAAC;AACF,YAAA,OAAO,MAAK;gBACV,OAAO,CAAC,OAAO,EAAE;AACnB,aAAC;AACH,SAAC,CAAC,CAAC,IAAI,CACL,oBAAoB,EAAE,EACtB,SAAS,CAAC,CAAC,UAAU,KAAI;AACvB,YAAA,IAAI,CAAC,UAAU;AAAE,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC;AAC9B,YAAA,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAC9B,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EACjC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAClC;SACF,CAAC,CACH,EACD,EAAE,YAAY,EAAE,EAAE,EAAE,CACrB;AAED,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,MAAK;AAC/B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;YAClC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,EAAE;oBAAE,EAAE,CAAC,OAAO,EAAE;AACtB,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,QAAQ,IAAI,CAAC,YAAY,EAAE;AACzB,gBAAA,KAAK,KAAK;AACV,gBAAA,KAAK,aAAa;AAChB,oBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE;AAC/D,wBAAA,MAAM,EAAE,cAAc;AACtB,wBAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AAC9B,qBAAA,CAAC;gBACJ,KAAK,MAAM,EAAE;AACX,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE;AAC5E,wBAAA,MAAM,EAAE,cAAc;AACtB,wBAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AAC9B,qBAAA,CAAC;AACF,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE;AACxG,wBAAA,MAAM,EAAE,cAAc;AACtB,wBAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AAC9B,qBAAA,CAAC;AACF,oBAAA,OAAO,CAAG,EAAA,WAAW,CAAM,GAAA,EAAA,SAAS,EAAE;;AAExC,gBAAA,KAAK,QAAQ;gBACb,KAAK,kBAAkB,EAAE;AACvB,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE;AAC5E,wBAAA,MAAM,EAAE,cAAc;AACtB,wBAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AAC9B,qBAAA,CAAC;oBACF,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CACzC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,EAC/D,UAAU,EACV;AACE,wBAAA,MAAM,EAAE,cAAc;AACtB,wBAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AAC9B,qBAAA,CACF;AACD,oBAAA,OAAO,CAAG,EAAA,WAAW,CAAM,GAAA,EAAA,SAAS,EAAE;;AAExC,gBAAA,KAAK,OAAO;AACZ,gBAAA,KAAK,eAAe;AAClB,oBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE;AAC/D,wBAAA,MAAM,EAAE,WAAW;AACnB,wBAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AAC9B,qBAAA,CAAC;;AAER,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,QAAQ,IAAI,CAAC,YAAY,EAAE;AACzB,gBAAA,KAAK,KAAK;AACV,gBAAA,KAAK,MAAM;AACX,gBAAA,KAAK,QAAQ;AACb,gBAAA,KAAK,kBAAkB;AACrB,oBAAA,OAAO,KAAK;AACd,gBAAA,KAAK,OAAO;AACZ,gBAAA,KAAK,eAAe;AAClB,oBAAA,OAAO,OAAO;AAChB,gBAAA,KAAK,aAAa;AAChB,oBAAA,OAAO,KAAK;;AAElB,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC1C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAChD,YAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACxD,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AAExC,YAAA,OAAO;AACJ,iBAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACxF,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;;gBAEpF,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AACtC,oBAAA,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,IAAI,CAAC;AAC1E,oBAAA,OAAO,IAAI;;;gBAGb,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AACpE,oBAAA,OAAO,CAAC,IAAI,CAAC,4DAA4D,EAAE,IAAI,CAAC;AAChF,oBAAA,OAAO,IAAI;;;gBAIb,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;AAEnD,gBAAA,MAAM,WAAW,GAA+B;AAC9C,oBAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;AACnB,oBAAA,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;oBACvB,SAAS;oBACT,OAAO;oBACP,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;oBAC3B,SAAS,EAAE,WAAW;AACtB,oBAAA,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;AAC/B,oBAAA,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC;AAC/B,oBAAA,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACnC,oBAAA,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC;iBAC5C;AACD,gBAAA,OAAO,WAAW;AACpB,aAAC;AACA,iBAAA,MAAM,CAAC,CAAC,IAAI,KAAyC,IAAI,KAAK,IAAI,CAAC,CAAC;AACzE,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAA+B,MAAK;AAC7D,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAElC,YAAA,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,EAAE;YAE9C,QAAQ,IAAI;AACV,gBAAA,KAAK,KAAK;gBACV,KAAK,aAAa,EAAE;oBAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;oBACvC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACnC,oBAAA,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CACnG;;gBAEH,KAAK,MAAM,EAAE;oBACX,MAAM,SAAS,GAAG,OAAO;oBACzB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AACvC,oBAAA,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CACpG;;gBAEH,KAAK,OAAO,EAAE;AACZ,oBAAA,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;oBACrE,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AACtD,oBAAA,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,IAAI,KACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAC7G;;gBAEH,KAAK,eAAe,EAAE;oBACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;oBACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;AACtC,oBAAA,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAClG;;AAEH,gBAAA,KAAK,QAAQ;gBACb,KAAK,kBAAkB,EAAE;oBACvB,MAAM,QAAQ,GAAG,OAAO;AACxB,oBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAChE,oBAAA,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAClG;;;AAGP,SAAC,CAAC;AAyFH;;AAvVW,IAAA,uBAAuB,CAAC,SAA+B,EAAA;AAC/D,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE1B,IAAA,0BAA0B,CAAC,SAA+B,EAAA;AAClE,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE7B,IAAA,4BAA4B,CAAC,SAA+B,EAAA;AACpE,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE7B,IAAA,8BAA8B,CAAC,SAAsC,EAAA;AAC7E,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEjC,IAAA,iCAAiC,CAAC,SAAsC,EAAA;AAChF,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEpC,IAAA,mCAAmC,CAAC,SAAsC,EAAA;AAClF,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEpC,IAAA,6BAA6B,CAAC,SAAmC,EAAA;AACzE,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;;IAG/B,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,MAAK;YAC5F,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAC/F,YAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE;AACnC,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,YAAW;AACjG,YAAA,MAAM,IAAI,CAAC,cAAc,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACrG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AACjG,SAAC,CAAC;AAEF,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,cAAc,EAAE;;AAGvB,IAAA,MAAM,cAAc,GAAA;QAClB,MAAM,MAAM,GAAG,EAAE;QACjB,WAAW,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAClC,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAqB,kBAAA,EAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;YACtG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;;AAE9B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;;AAG1B,IAAA,gBAAgB,CAAC,WAAuB,EAAA;QAC9C,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;AACpD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AACvF,QAAA,MAAM,uBAAuB,GAAG,eAAe,CAAC,SAAS;QACzD,MAAM,iBAAiB,GAAG,CAAC,uBAAuB,GAAG,eAAe,GAAG,CAAC,IAAI,CAAC;QAC7E,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,iBAAiB,CAAC;;AAEpE,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvD,QAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE;;AAqCvC,IAAA,kBAAkB;AAkKlB,IAAA,WAAW,CAAC,CAAuC,EAAA;AACjD,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK;AACvB,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;AAE9B,QAAA,IAAI,OAAO,KAAK,MAAM,EAAE;YACtB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,GAAG,CAAC;AACjD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;QAG5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAEpC,QAAA,IAAI,OAAO,KAAK,MAAM,EAAE;AACtB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS;AAC9C,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE;YACjD,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;YAC3F,MAAM,cAAc,GAAG,CAAC,gBAAgB,GAAG,qBAAqB,GAAG,CAAC,IAAI,CAAC;YACzE,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC;AAC/D,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC;;;IAIzC,SAAS,GAAA;AACP,QAAA,QAAQ,IAAI,CAAC,YAAY,EAAE;AACzB,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACtD;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACvD;AAEF,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,kBAAkB;gBACrB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBACjF;AAEF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACxD;;;IAIN,SAAS,GAAA;AACP,QAAA,QAAQ,IAAI,CAAC,YAAY,EAAE;AACzB,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBACvD;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxD;AAEF,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,kBAAkB;gBACrB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBAClF;AAEF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzD;;;AAIN,IAAA,mBAAmB,CAAC,CAAM,EAAA;AACxB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACrE,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,MAAM,EAAE;AAClC,YAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS;AAC9C,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE;YACjD,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;YAC3F,MAAM,cAAc,GAAG,CAAC,gBAAgB,GAAG,qBAAqB,GAAG,CAAC,IAAI,CAAC;YACzE,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC;;AAEvD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;;IAGnC,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC;QACzF,IAAI,IAAI,CAAC,YAAY,EAAE;YAAE,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,0BAA0B,CAAC;QAC3F,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;;+GAjalC,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAFpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,SAAA,EAAA,CAAC,cAAc,CAAC,6EAWW,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvF5D,61QAwLA,EAAA,MAAA,EAAA,CAAA,qqFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3HI,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,EACpB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,sEACxB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,kBAAkB,EAClB,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,2BAA2B,wXAC3B,4BAA4B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,6BAA6B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,mCAAmC,EACnC,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wCAAwC,EACxC,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qCAAqC,2WACrC,8BAA8B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,2BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAIrB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAxBhC,SAAS;+BACE,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACP,WAAW;wBACX,oBAAoB;wBACpB,wBAAwB;wBACxB,iBAAiB;wBACjB,OAAO;wBACP,kBAAkB;wBAClB,mBAAmB;wBACnB,2BAA2B;wBAC3B,4BAA4B;wBAC5B,6BAA6B;wBAC7B,mCAAmC;wBACnC,wCAAwC;wBACxC,qCAAqC;wBACrC,8BAA8B;qBAC/B,EACU,SAAA,EAAA,CAAC,cAAc,CAAC,EAAA,QAAA,EAAA,61QAAA,EAAA,MAAA,EAAA,CAAA,qqFAAA,CAAA,EAAA;;;AErE7B,MAAM,SAAS,GAAG;IAChB,oBAAoB;IACpB,2BAA2B;IAC3B,4BAA4B;IAC5B,6BAA6B;IAC7B,mCAAmC;CACpC;MAOY,iBAAiB,CAAA;+GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAZ5B,oBAAoB;YACpB,2BAA2B;YAC3B,4BAA4B;YAC5B,6BAA6B;AAC7B,YAAA,mCAAmC,aAJnC,oBAAoB;YACpB,2BAA2B;YAC3B,4BAA4B;YAC5B,6BAA6B;YAC7B,mCAAmC,CAAA,EAAA,CAAA,CAAA;AAQxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAJf,SAAS,CAAA,EAAA,CAAA,CAAA;;4FAIX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;AACvB,oBAAA,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;AACvB,oBAAA,SAAS,EAAE,EAAE;AACd,iBAAA;;;ACnBD;;AAEG;;;;"}
|
1
|
+
{"version":3,"file":"acorex-components-scheduler.mjs","sources":["../../../../packages/components/scheduler/src/lib/scheduler.service.ts","../../../../packages/components/scheduler/src/lib/views/agenda/scheduler-agenda-view.component.ts","../../../../packages/components/scheduler/src/lib/views/agenda/scheduler-agenda-view.component.html","../../../../packages/components/scheduler/src/lib/views/day/scheduler-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/day/scheduler-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/month/scheduler-month-view.component.ts","../../../../packages/components/scheduler/src/lib/views/month/scheduler-month-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-day/scheduler-timeline-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-day/scheduler-timeline-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-month/scheduler-timeline-month-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-month/scheduler-timeline-month-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/week/scheduler-week-view.component.ts","../../../../packages/components/scheduler/src/lib/views/week/scheduler-week-view.component.html","../../../../packages/components/scheduler/src/lib/scheduler.component.ts","../../../../packages/components/scheduler/src/lib/scheduler.component.html","../../../../packages/components/scheduler/src/lib/scheduler.module.ts","../../../../packages/components/scheduler/src/acorex-components-scheduler.ts"],"sourcesContent":["import { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXDayOfWeekName,\n AXSchedulerActiveAppointmentsInBlock,\n AXSchedulerAppointmentsByStartBlock,\n AXSchedulerAppointmentSegment,\n AXSchedulerBlockIdentifier,\n AXSchedulerInternalAppointment,\n AXSchedulerView,\n} from './scheduler.class';\nimport { AXSchedulerAppointmentMouseEvent, AXSchedulerSlotMouseEvent } from './scheduler.component';\n\n@Injectable({\n providedIn: 'root', // Provide service application-wide\n})\nexport class AXSchedulerService {\n private calendarService = inject(AXCalendarService);\n private formatService = inject(AXFormatService);\n\n readonly HOURS_PER_DAY = 24;\n readonly MINUTES_PER_HOUR = 60;\n readonly BLOCK_DURATION_MINUTES = 30;\n readonly MILLISECONDS_PER_MINUTE = 60 * 1000;\n readonly MILLISECONDS_PER_DAY = this.HOURS_PER_DAY * this.MINUTES_PER_HOUR * this.MILLISECONDS_PER_MINUTE;\n\n /**\n * Checks if two appointments overlap in time.\n */\n doAppointmentsOverlap(\n appointmentA: AXSchedulerInternalAppointment,\n appointmentB: AXSchedulerInternalAppointment,\n ): boolean {\n if (!appointmentA?.startDate || !appointmentA.endDate || !appointmentB?.startDate || !appointmentB.endDate) {\n return false;\n }\n const startA = appointmentA.startDate.date.getTime();\n const endA = appointmentA.endDate.date.getTime();\n const startB = appointmentB.startDate.date.getTime();\n const endB = appointmentB.endDate.date.getTime();\n // Uses strict overlap check (change < / > to <= / >= if touching boundaries count)\n return startA < endB && endA > startB;\n }\n\n /**\n * Calculates appointment duration in minutes.\n */\n calculateDurationInMinutes(Appointment: AXSchedulerInternalAppointment): number {\n if (!Appointment?.startDate || !Appointment.endDate) return 0;\n const durationMillis = Appointment.endDate.date.getTime() - Appointment.startDate.date.getTime();\n return Math.max(0, durationMillis / this.MILLISECONDS_PER_MINUTE);\n }\n\n /**\n * Calculates appointment duration in blocks (default 30 min).\n */\n calculateDurationInBlocks(appointment: AXSchedulerInternalAppointment): number {\n const durationMinutes = this.calculateDurationInMinutes(appointment);\n return Math.ceil(durationMinutes / this.BLOCK_DURATION_MINUTES);\n }\n\n /**\n * Gets the day index (relative to view start) and block index (relative to start hour)\n * for a given date time within the view context. Returns null if outside view.\n */\n getBlockIdentifier(\n dateTime: AXDateTime,\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number, // Exclusive end hour\n viewTotalDays = 1, // Default to 1 for day view\n ): AXSchedulerBlockIdentifier | null {\n if (!viewStartDate || !dateTime || typeof startHour !== 'number' || typeof endHour !== 'number') {\n return null;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Calculate exclusive end date\n\n // Check if dateTime is within the view's date and time range\n if (\n dateTime.compare(viewStartDate, 'day') < 0 ||\n dateTime.compare(viewEndDate, 'day') >= 0 || // Check against exclusive end date\n dateTime.hour < startHour ||\n dateTime.hour >= endHour // Check against exclusive end hour\n ) {\n return null;\n }\n\n // Calculate day index relative to view start\n const dayIndex = Math.floor((dateTime.date.getTime() - viewStartDate.date.getTime()) / this.MILLISECONDS_PER_DAY);\n\n // Ensure dayIndex is valid for the view duration\n if (dayIndex < 0 || dayIndex >= viewTotalDays) {\n return null;\n }\n\n const minutesIntoDay = dateTime.hour * this.MINUTES_PER_HOUR + dateTime.minute;\n const minutesIntoViewHours = minutesIntoDay - startHour * this.MINUTES_PER_HOUR;\n\n // This check should be redundant due to initial hour check, but safe to keep\n if (minutesIntoViewHours < 0) return null;\n\n const blockIndex = Math.floor(minutesIntoViewHours / this.BLOCK_DURATION_MINUTES);\n\n return { dayIndex, blockIndex };\n }\n\n /**\n * Groups appointments by the blocks they are ACTIVE in for a given view.\n * @param viewTotalDays - Number of days in the current view (1 for Day, 7 for Week, etc.)\n */\n calculateActiveAppointmentsInBlock(\n singleDayAppointments: AXSchedulerAppointmentSegment[],\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n viewTotalDays: number, // Now required\n ): AXSchedulerActiveAppointmentsInBlock {\n const blocks: AXSchedulerActiveAppointmentsInBlock = {};\n if (!viewStartDate || typeof startHour !== 'number' || typeof endHour !== 'number' || viewTotalDays <= 0) {\n return blocks;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Exclusive end date\n // Calculate total blocks based on consistent block duration\n const totalBlocksPerDay = Math.max(\n 0,\n (endHour - startHour) * (this.MINUTES_PER_HOUR / this.BLOCK_DURATION_MINUTES),\n );\n\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id) return;\n\n // Clamp appointment start/end times to the view boundaries (days and hours)\n let effectiveStart = appointment.startDate.compare(viewStartDate) < 0 ? viewStartDate : appointment.startDate;\n if (effectiveStart.hour < startHour) effectiveStart = effectiveStart.set('hour', startHour).startOf('hour');\n\n let effectiveEnd = appointment.endDate.compare(viewEndDate) >= 0 ? viewEndDate : appointment.endDate;\n if (effectiveEnd.hour >= endHour) {\n const endDayBase = effectiveEnd.compare(viewEndDate) >= 0 ? viewEndDate.add('day', -1) : effectiveEnd;\n effectiveEnd = endDayBase.set('hour', endHour).startOf('hour');\n }\n\n // Get start block info using the specified viewTotalDays\n const startInfo = this.getBlockIdentifier(effectiveStart, viewStartDate, startHour, endHour, viewTotalDays);\n if (!startInfo) return; // Appointment starts completely outside view\n\n // Get end block info (last block occupied) using the specified viewTotalDays\n const timeBeforeEnd = effectiveEnd.add('minute', -1);\n const endInfo = this.getBlockIdentifier(timeBeforeEnd, viewStartDate, startHour, endHour, viewTotalDays);\n // If endInfo is null, it means the appointment ends before the viewable part starts,\n // or exactly at the start, so it occupies no blocks. Handle this case.\n if (\n !endInfo ||\n endInfo.dayIndex < startInfo.dayIndex ||\n (endInfo.dayIndex === startInfo.dayIndex && endInfo.blockIndex < startInfo.blockIndex)\n ) {\n return; // Appointment effectively has no duration within the viewable blocks\n }\n\n // Iterate through the days and blocks the appointment spans within the view\n for (let dIdx = startInfo.dayIndex; dIdx <= endInfo.dayIndex; dIdx++) {\n // Clamp day index just in case (should be handled by getBlockIdentifier checks)\n if (dIdx < 0 || dIdx >= viewTotalDays) continue;\n\n const startBlock = dIdx === startInfo.dayIndex ? startInfo.blockIndex : 0;\n // Make sure endBlock doesn't exceed the calculated totalBlocksPerDay\n const endBlock = dIdx === endInfo.dayIndex ? endInfo.blockIndex : totalBlocksPerDay - 1;\n\n if (!blocks[dIdx]) blocks[dIdx] = {};\n\n for (let bIdx = startBlock; bIdx <= endBlock; bIdx++) {\n // Final check for block index validity\n if (bIdx >= 0 && bIdx < totalBlocksPerDay) {\n if (!blocks[dIdx][bIdx]) blocks[dIdx][bIdx] = [];\n // Avoid duplicates if the same appointment is processed multiple times (shouldn't happen with outer loop)\n if (!blocks[dIdx][bIdx].some((e) => e.id === appointment.id)) {\n blocks[dIdx][bIdx].push(appointment);\n }\n }\n }\n }\n });\n return blocks;\n }\n\n /**\n * Calculates max concurrency and effective total columns for Day View appointments.\n */\n calculateDayViewConcurrencyInfo(\n singleDayAppointments: AXSchedulerAppointmentSegment[], // These are segments for the current day\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n ): Map<any, { maxConcurrency: number; effectiveTotalColumns: number }> {\n const resultInfo = new Map<any, { maxConcurrency: number; effectiveTotalColumns: number }>();\n if (singleDayAppointments.length === 0) return resultInfo;\n\n const activeAppointmentsMap = this.calculateActiveAppointmentsInBlock(\n singleDayAppointments,\n viewStartDate,\n startHour,\n endHour,\n 1, // Day view\n );\n const blocks = activeAppointmentsMap[0] ?? {};\n\n // 1. Calculate initial maxConcurrency for each appointment segment\n const maxConcurrencyMap = new Map<any, number>();\n singleDayAppointments.forEach((segment) => {\n let maxOverlapInSegmentBlocks = 0;\n const segmentStartMinutes = segment.startDate.hour * this.MINUTES_PER_HOUR + segment.startDate.minute;\n const segmentEndMinutes = segment.endDate.hour * this.MINUTES_PER_HOUR + segment.endDate.minute;\n\n // Determine blocks this segment occupies relative to view's startHour\n const viewRelativeStartMinutes = Math.max(0, segmentStartMinutes - startHour * this.MINUTES_PER_HOUR);\n const viewRelativeEndMinutes = Math.min(\n (endHour - startHour) * this.MINUTES_PER_HOUR,\n segmentEndMinutes - startHour * this.MINUTES_PER_HOUR,\n );\n\n const firstBlockIndex = Math.floor(viewRelativeStartMinutes / this.BLOCK_DURATION_MINUTES);\n const lastBlockIndex = Math.floor((viewRelativeEndMinutes - 1) / this.BLOCK_DURATION_MINUTES); // -1 because end is exclusive for block counting\n\n for (let blockIdx = firstBlockIndex; blockIdx <= lastBlockIndex; blockIdx++) {\n const appointmentsInBlock = blocks[blockIdx];\n if (appointmentsInBlock) {\n maxOverlapInSegmentBlocks = Math.max(maxOverlapInSegmentBlocks, appointmentsInBlock.length);\n }\n }\n maxConcurrencyMap.set(segment.id, maxOverlapInSegmentBlocks || 1);\n });\n\n // 2. Iteratively determine effectiveTotalColumns for groups of overlapping appointments\n const initialEffectiveTotalColumns = new Map<any, number>();\n singleDayAppointments.forEach((segment) => {\n initialEffectiveTotalColumns.set(segment.id, maxConcurrencyMap.get(segment.id) || 1);\n });\n\n let changed = true;\n while (changed) {\n changed = false;\n singleDayAppointments.forEach((segmentA) => {\n singleDayAppointments.forEach((segmentB) => {\n if (segmentA.id === segmentB.id) return;\n\n if (this.doAppointmentsOverlap(segmentA, segmentB)) {\n const etcA = initialEffectiveTotalColumns.get(segmentA.id) || 1;\n const etcB = initialEffectiveTotalColumns.get(segmentB.id) || 1;\n const maxETC = Math.max(etcA, etcB);\n\n if (etcA !== maxETC) {\n initialEffectiveTotalColumns.set(segmentA.id, maxETC);\n changed = true;\n }\n if (etcB !== maxETC) {\n initialEffectiveTotalColumns.set(segmentB.id, maxETC);\n changed = true;\n }\n }\n });\n });\n }\n\n // Populate final result\n singleDayAppointments.forEach((segment) => {\n resultInfo.set(segment.id, {\n maxConcurrency: maxConcurrencyMap.get(segment.id) || 1,\n effectiveTotalColumns: initialEffectiveTotalColumns.get(segment.id) || 1,\n });\n });\n\n return resultInfo;\n }\n\n /**\n * Groups appointments by the block they START in for Week View.\n */\n calculateWeekViewAppointmentsByStartBlock(\n singleDayAppointments: AXSchedulerAppointmentSegment[],\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n ): AXSchedulerAppointmentsByStartBlock {\n const blocks: AXSchedulerAppointmentsByStartBlock = {};\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate) return;\n const startInfo = this.getBlockIdentifier(appointment.startDate, viewStartDate, startHour, endHour, 7);\n if (startInfo) {\n const { dayIndex, blockIndex } = startInfo;\n if (!blocks[dayIndex]) blocks[dayIndex] = {};\n if (!blocks[dayIndex][blockIndex]) blocks[dayIndex][blockIndex] = [];\n blocks[dayIndex][blockIndex].push(appointment);\n }\n });\n return blocks;\n }\n\n /**\n * Groups appointments by the day(s) they occur on within a given date range.\n * Returns a Map where the key is the date string ('YYYY-MM-DD') and the value is an array of appointments.\n */\n groupAppointmentsByDay(\n appointments: AXSchedulerInternalAppointment[],\n viewStartDate: AXDateTime, // First day visible in the grid\n viewEndDate: AXDateTime, // Last day visible in the grid\n ): Map<string, AXSchedulerInternalAppointment[]> {\n const groupedAppointments = new Map<string, AXSchedulerInternalAppointment[]>();\n if (!appointments || appointments.length === 0 || !viewStartDate || !viewEndDate) {\n return groupedAppointments;\n }\n\n // Pre-calculate the end date for comparison (exclusive)\n const exclusiveViewEndDate = viewEndDate.add('day', 1);\n\n appointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id) return;\n\n // Determine the effective start and end dates of the appointment clamped by the view range\n const appointmentStart = appointment.startDate;\n const appointmentEnd = appointment.endDate;\n\n // Skip if appointment ends before the view starts or starts after the view ends\n if (\n appointmentEnd.compare(viewStartDate, 'day') < 0 ||\n appointmentStart.compare(exclusiveViewEndDate, 'day') >= 0\n ) {\n return;\n }\n\n // Clamp start date to the view start date\n let currentDay =\n appointmentStart.compare(viewStartDate, 'day') < 0 ? viewStartDate : appointmentStart.startOf('day');\n\n // Loop through each day the appointment spans within the view range\n let safeCount = 0; // Prevent infinite loops\n while (\n currentDay.compare(appointmentEnd, 'day') <= 0 &&\n currentDay.compare(exclusiveViewEndDate, 'day') < 0 &&\n safeCount < 100\n ) {\n const dateString = this.formatService.format(currentDay, 'datetime', { format: 'YYYY-MM-DD' }); // Use a consistent key format\n\n if (!groupedAppointments.has(dateString)) {\n groupedAppointments.set(dateString, []);\n }\n // Add the appointment if it's not already in the list for that day\n if (!groupedAppointments.get(dateString).some((e) => e.id === appointment.id)) {\n groupedAppointments.get(dateString).push(appointment);\n }\n\n currentDay = currentDay.add('day', 1);\n safeCount++;\n }\n if (safeCount >= 100) {\n console.warn('Safety break hit in groupAppointmentsByDay loop for appointment:', appointment.id);\n }\n });\n\n return groupedAppointments;\n }\n\n getDayOfWeekNumber(dayName: AXDayOfWeekName): number {\n switch (dayName) {\n case 'sunday':\n return 1;\n case 'monday':\n return 2;\n case 'tuesday':\n return 3;\n case 'wednesday':\n return 4;\n case 'thursday':\n return 5;\n case 'friday':\n return 6;\n case 'saturday':\n return 7;\n default:\n console.warn(`Invalid day name: ${dayName}. Defaulting to Sunday (1).`);\n return 1;\n }\n }\n\n getSlotData(\n startDate: AXDateTime,\n view: AXSchedulerView,\n ): { startDate: AXDateTime; endDate: AXDateTime; view: AXSchedulerView } {\n let endDate: AXDateTime;\n switch (view) {\n case 'day':\n case 'week':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES);\n break;\n case 'timeline-day':\n case 'timeline-multi-day':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES * 2);\n break;\n case 'month':\n case 'agenda':\n case 'timeline-month':\n startDate = startDate.startOf('day');\n endDate = startDate.endOf('day');\n break;\n }\n return { startDate, endDate, view };\n }\n\n handleEvent(\n event: AXSchedulerSlotMouseEvent | AXSchedulerAppointmentMouseEvent,\n eventOutputMap,\n eventType: 'appointment' | 'slot',\n ) {\n const mouseEvent = event.nativeEvent;\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n if (eventType === 'appointment') {\n const appointmentOutputMap = eventOutputMap[eventType];\n const emitter = appointmentOutputMap[mouseEvent.type as keyof typeof appointmentOutputMap];\n if (emitter) emitter.emit(event as AXSchedulerAppointmentMouseEvent);\n }\n if (eventType === 'slot') {\n const slotOutputMap = eventOutputMap[eventType];\n const emitter = slotOutputMap[mouseEvent.type as keyof typeof slotOutputMap];\n if (emitter) emitter.emit(event as AXSchedulerSlotMouseEvent);\n }\n }\n\n // --- Timeline Specific Helpers ---\n\n calculateTimelineLayout(\n // `appt` here will be an AXSchedulerAppointmentSegmentType when called from TimelineDayView\n appt: AXSchedulerInternalAppointment,\n viewStartHour: number, // e.g., 8 for 8 AM\n viewEndHour: number, // e.g., 18 for 6 PM (timeline runs from 8:00 up to, but not including, 18:00)\n ): { left: string; width: string } | null {\n if (\n !appt?.startDate ||\n !appt.endDate ||\n typeof viewStartHour !== 'number' ||\n typeof viewEndHour !== 'number' ||\n viewStartHour >= viewEndHour // Basic sanity check\n ) {\n console.warn('calculateTimelineLayout: Invalid input', { appt, viewStartHour, viewEndHour });\n return null;\n }\n\n const totalViewDurationMinutes = (viewEndHour - viewStartHour) * 60;\n if (totalViewDurationMinutes <= 0) return null; // No viewable duration\n\n // Segment's start and end times (these are already clipped to the day by getClonedAppointmentSegmentOnDay)\n const segmentStart = appt.startDate;\n const segmentEnd = appt.endDate;\n\n // --- Calculate Start Position (left) ---\n // Effective start of the segment within the view's hours for THIS day\n let effectiveSegmentStartMinutesInDay = segmentStart.hour * 60 + segmentStart.minute;\n\n // Clamp to viewStartHour for calculation if segment starts before viewable hours (shouldn't happen if segmenter worked)\n effectiveSegmentStartMinutesInDay = Math.max(effectiveSegmentStartMinutesInDay, viewStartHour * 60);\n // Clamp to viewEndHour for calculation if segment starts after viewable hours (shouldn't happen)\n effectiveSegmentStartMinutesInDay = Math.min(effectiveSegmentStartMinutesInDay, viewEndHour * 60);\n\n const minutesFromViewStartToSegmentStart = effectiveSegmentStartMinutesInDay - viewStartHour * 60;\n\n // If segment effectively starts before the viewable part (after clamping), it means it's not visible or starts at 0%\n if (\n minutesFromViewStartToSegmentStart < 0 &&\n Math.abs(minutesFromViewStartToSegmentStart) > 1e-6 /*epsilon for float issues*/\n ) {\n // This case should ideally be caught by the segmenter or initial overlap checks.\n // If it happens, treat as starting at 0% but it might mean no visible part.\n }\n\n const leftPercentage = (Math.max(0, minutesFromViewStartToSegmentStart) / totalViewDurationMinutes) * 100;\n\n // --- Calculate Duration and Width ---\n // Effective end of the segment within the view's hours for THIS day\n let effectiveSegmentEndMinutesInDay = segmentEnd.hour * 60 + segmentEnd.minute;\n if (segmentEnd.hour === 0 && segmentEnd.minute === 0 && segmentEnd.date.getTime() > segmentStart.date.getTime()) {\n // If segment ends exactly at midnight (00:00 of next day, meaning it filled up to 24:00 of current day)\n effectiveSegmentEndMinutesInDay = 24 * 60;\n }\n\n // Clamp to viewEndHour for calculation\n effectiveSegmentEndMinutesInDay = Math.min(effectiveSegmentEndMinutesInDay, viewEndHour * 60);\n // Clamp to viewStartHour for calculation (if segment ends before view starts)\n effectiveSegmentEndMinutesInDay = Math.max(effectiveSegmentEndMinutesInDay, viewStartHour * 60);\n\n const segmentDurationMinutesInView = Math.max(\n 0,\n effectiveSegmentEndMinutesInDay - effectiveSegmentStartMinutesInDay,\n );\n\n if (segmentDurationMinutesInView <= 0) {\n // Segment has no visible duration within the timeline hours\n return null;\n }\n\n const widthPercentage = (segmentDurationMinutesInView / totalViewDurationMinutes) * 100;\n\n // Ensure percentages are valid\n if (\n leftPercentage > 100 ||\n leftPercentage < 0 ||\n widthPercentage <= 0 ||\n widthPercentage > 100 ||\n leftPercentage + widthPercentage > 100.0001 /*allow for float errors*/\n ) {\n // This might indicate an issue with date clamping or logic.\n // For now, if it results in an invalid layout, return null.\n // console.warn(\"Timeline layout calculation resulted in out-of-bounds percentages:\",\n // {leftPercentage, widthPercentage, segmentStart, segmentEnd, viewStartHour, viewEndHour});\n // A common case for (left + width > 100) is if an event ends *exactly* at viewEndHour,\n // and viewEndHour itself is the boundary.\n // Let's be a bit tolerant here if width is positive.\n if (widthPercentage <= 0) return null;\n }\n\n return {\n left: `${Math.max(0, Math.min(100, leftPercentage))}%`,\n width: `${Math.max(0, Math.min(100, widthPercentage))}%`,\n };\n }\n\n /**\n * Calculates the visible segment of a timed appointment on a specific day,\n * constrained by the view's start and end hours.\n * Returns a new appointment-like object representing the segment.\n */\n getClonedAppointmentSegmentOnDay(\n appointment: AXSchedulerInternalAppointment, // This is the ORIGINAL appointment\n day: AXDateTime,\n viewStartHour: number,\n viewEndHour: number,\n isFullDayCellContext = false,\n ): AXSchedulerAppointmentSegment | null {\n if (!appointment || !appointment.startDate || !appointment.endDate) {\n return null;\n }\n\n if (appointment.allDay) {\n const dayStartOf = day.clone().startOf('day');\n if (appointment.startDate.startOf('day').equal(dayStartOf, 'day')) {\n return {\n ...appointment,\n startDate: dayStartOf,\n endDate: dayStartOf.clone().add('day', 1).startOf('day'),\n allDay: true,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay: false,\n isContinuationToNextDay: appointment.endDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n } else if (\n appointment.startDate.startOf('day').compare(dayStartOf, 'day') < 0 &&\n appointment.endDate.startOf('day').compare(dayStartOf, 'day') >= 0\n ) {\n return {\n ...appointment,\n startDate: dayStartOf,\n endDate: dayStartOf.clone().add('day', 1).startOf('day'),\n allDay: true,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay: true,\n isContinuationToNextDay: appointment.endDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n } else {\n return null;\n }\n }\n\n const dayStartBoundary = isFullDayCellContext\n ? day.clone().startOf('day')\n : day.clone().set('hour', viewStartHour).startOf('hour');\n const dayEndBoundary = isFullDayCellContext\n ? day.clone().add('day', 1).startOf('day')\n : viewEndHour === 24 || (viewEndHour === 0 && viewStartHour === 0)\n ? day.clone().add('day', 1).startOf('day')\n : day.clone().set('hour', viewEndHour).startOf('hour');\n\n if (\n appointment.endDate.compare(dayStartBoundary, 'second') <= 0 ||\n appointment.startDate.compare(dayEndBoundary, 'second') >= 0\n ) {\n return null;\n }\n const segmentStartDate =\n appointment.startDate.compare(dayStartBoundary, 'second') > 0 ? appointment.startDate : dayStartBoundary;\n const segmentEndDate =\n appointment.endDate.compare(dayEndBoundary, 'second') < 0 ? appointment.endDate : dayEndBoundary;\n\n if (segmentStartDate.compare(segmentEndDate, 'second') >= 0) {\n return null;\n }\n\n const isContinuationFromPreviousDay = appointment.startDate.compare(segmentStartDate, 'second') < 0;\n const isContinuationToNextDay = appointment.endDate.compare(segmentEndDate, 'second') > 0;\n const duration = appointment.startDate.duration(appointment.endDate);\n\n return {\n ...appointment,\n startDate: segmentStartDate,\n endDate: segmentEndDate,\n allDay: appointment.allDay || duration.total.days >= 1,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay,\n isContinuationToNextDay,\n originalAppointmentRef: appointment,\n };\n }\n\n getOriginalAppointment(\n item: AXSchedulerInternalAppointment | AXSchedulerAppointmentSegment,\n ): AXSchedulerInternalAppointment {\n const segment = item as AXSchedulerAppointmentSegment;\n if (segment.originalAppointmentRef) {\n return segment.originalAppointmentRef;\n }\n return item;\n }\n\n isHoliday(date: AXDateTime): boolean {\n return this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));\n }\n isWeekend(date: AXDateTime, calendar: string): boolean {\n const weekend = this.calendarService.resolveCalendar(calendar).weekend;\n return weekend.includes(date.dayOfWeek - 1);\n }\n}\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerAppointmentSegment, AXSchedulerInternalAppointment } from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\n\nexport interface AgendaDayData {\n date: AXDateTime;\n appointments: AXSchedulerAppointmentSegment[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-agenda-view',\n templateUrl: './scheduler-agenda-view.component.html',\n styleUrl: './scheduler-agenda-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXFormatPipe,\n AXDecoratorGenericComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTranslatorPipe,\n AXTooltipDirective,\n ],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }],\n})\nexport class AXSchedulerAgendaViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n daysCount = input(7);\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n agendaDaysLayout = computed<AgendaDayData[]>(() => {\n const allOriginalAppointments = this.appointments();\n const agendaStartDate = this.date();\n const numberOfDays = this.daysCount();\n\n if (!agendaStartDate || !allOriginalAppointments) {\n return [];\n }\n\n const result: AgendaDayData[] = [];\n\n for (let i = 0; i < numberOfDays; i++) {\n const currentDay = agendaStartDate.add('day', i).startOf('day');\n const segmentsForThisDay: AXSchedulerAppointmentSegment[] = [];\n\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDay, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1),\n (s) => s.startDate.date.getTime(),\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(),\n ],\n ['asc', 'asc', 'desc'],\n );\n\n result.push({\n date: currentDay,\n appointments: sortedSegments,\n holiday: this.isHoliday(currentDay),\n });\n }\n return result;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerInternalAppointment) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n if (slotData) {\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<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-state-holiday]=\"dayData.holiday.state !== 'none'\"\n class=\"ax-scheduler-agenda-view-container\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\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.date.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\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 [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-agenda-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <div class=\"ax-scheduler-agenda-appointment-time\">\n @if (segment.allDay) {\n <span>{{ '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 <!-- <ax-subtitle *ngIf=\"segment.description\">{{ segment.description }}</ax-subtitle> -->\n </div>\n }\n @if (dayData.appointments.length === 0) {\n <div class=\"ax-scheduler-agenda-no-appointments\">\n {{ 'noRecord' | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentSegment,\n AXSchedulerDayAppointmentLayout,\n AXSchedulerInternalAppointment,\n} from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\n\n@Component({\n selector: 'ax-scheduler-day-view',\n templateUrl: './scheduler-day-view.component.html',\n styleUrl: './scheduler-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n ],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }],\n})\nexport class AXSchedulerDayViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n endDayHour = input.required<number>();\n startDayHour = input.required<number>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n processedAppointmentsForLayout = computed(() => {\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const allAppointmentsInView = this.appointments();\n if (!viewDate || allAppointmentsInView.length === 0) {\n return [];\n }\n const segmentsForThisDay: AXSchedulerAppointmentSegment[] = [];\n for (const appt of allAppointmentsInView) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, startH, endH);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n return segmentsForThisDay;\n });\n allDayAppointments = computed(() => {\n const originalAllDayAppointments = this.appointments()?.filter((e) => e && e.allDay) ?? [];\n const multiDayBecomingAllDaySegments =\n this.processedAppointmentsForLayout()?.filter(\n (segment) => segment && segment.allDay && !this.appointments().find((orig) => orig.id === segment.id)?.allDay,\n ) ?? [];\n const combined = new Map<any, AXSchedulerInternalAppointment>();\n originalAllDayAppointments.forEach((appt) => combined.set(appt.id, appt));\n multiDayBecomingAllDaySegments.forEach((appt) => {\n if (!combined.has(appt.id)) {\n combined.set(appt.id, appt);\n }\n });\n return Array.from(combined.values());\n });\n singleDayAppointments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((e) => e && !e.allDay) ?? [];\n });\n\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointment: AXSchedulerInternalAppointment) {\n const originalAppointment = (appointment as AXSchedulerAppointmentSegment).originalStartDate\n ? ({\n ...appointment,\n startDate: (appointment as AXSchedulerAppointmentSegment).originalStartDate,\n endDate: (appointment as AXSchedulerAppointmentSegment).originalEndDate,\n } as AXSchedulerInternalAppointment)\n : appointment;\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSingleSlotEvent(mouseEvent: MouseEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleAllDaySlotEvent(mouseEvent: MouseEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' as const };\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleAllDayDrop(e: AXDropZoneDropEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' as const };\n\n const droppedAppt = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalDroppedAppt = (droppedAppt as AXSchedulerAppointmentSegment).originalStartDate\n ? ({\n ...droppedAppt,\n startDate: (droppedAppt as AXSchedulerAppointmentSegment).originalStartDate,\n endDate: (droppedAppt as AXSchedulerAppointmentSegment).originalEndDate,\n } as AXSchedulerInternalAppointment)\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate.date,\n startDate: originalDroppedAppt.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n handleSingleDayDrop(e: AXDropZoneDropEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n const droppedAppt = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalDroppedAppt = (droppedAppt as AXSchedulerAppointmentSegment).originalStartDate\n ? ({\n ...droppedAppt,\n startDate: (droppedAppt as AXSchedulerAppointmentSegment).originalStartDate,\n endDate: (droppedAppt as AXSchedulerAppointmentSegment).originalEndDate,\n } as AXSchedulerInternalAppointment)\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate.date,\n startDate: originalDroppedAppt.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n appointmentLayouts = computed(() => {\n const layouts = new Map<any, AXSchedulerDayAppointmentLayout>();\n const appointmentsToLayout = this.singleDayAppointments();\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n\n if (appointmentsToLayout.length === 0 || !viewDate || typeof startH !== 'number' || typeof endH !== 'number') {\n return layouts;\n }\n\n const concurrencyInfoMap = this.schedulerService.calculateDayViewConcurrencyInfo(\n appointmentsToLayout,\n viewDate,\n startH,\n endH,\n );\n\n const sortedAppointments = orderBy(\n appointmentsToLayout,\n [(e) => e.startDate.date.getTime(), (e) => e.originalEndDate.date.getTime() - e.originalStartDate.date.getTime()],\n ['asc', 'desc'],\n );\n\n const columnsData: { appointments: AXSchedulerAppointmentSegment[] }[] = [];\n\n for (const appointmentSegment of sortedAppointments) {\n let assignedCol = -1;\n\n for (let c = 0; ; c++) {\n if (!columnsData[c]) {\n columnsData[c] = { appointments: [] };\n }\n\n let conflict = false;\n\n for (const placedSegment of columnsData[c].appointments) {\n if (\n appointmentSegment.startDate.compare(placedSegment.endDate, 'minute') < 0 &&\n appointmentSegment.endDate.compare(placedSegment.startDate, 'minute') > 0\n ) {\n conflict = true;\n break;\n }\n }\n\n if (!conflict) {\n assignedCol = c;\n columnsData[c].appointments.push(appointmentSegment);\n break;\n }\n\n if (c > appointmentsToLayout.length) {\n console.warn(\n `DayView: Safety break in column assignment for ${appointmentSegment.title}, assigning to new column ${c}`,\n );\n if (!columnsData[c]) columnsData[c] = { appointments: [] };\n columnsData[c].appointments.push(appointmentSegment);\n assignedCol = c;\n break;\n }\n }\n\n const concurrencyInfo = concurrencyInfoMap.get(appointmentSegment.id);\n const effectiveCols = concurrencyInfo ? concurrencyInfo.effectiveTotalColumns : 1;\n\n layouts.set(appointmentSegment.id, {\n columnIndex: assignedCol,\n effectiveTotalColumns: effectiveCols,\n });\n }\n return layouts;\n });\n\n getAppointmentLayout(key: any): AXSchedulerDayAppointmentLayout | undefined {\n return this.appointmentLayouts().get(key);\n }\n\n getAppointmentLeft(key: any): string {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n const C = layout.columnIndex;\n if (C < 0) {\n console.warn('Invalid columnIndex < 0 for key:', key);\n return '0px';\n }\n if (C === 0 || N <= 1) return '0px';\n const leftPercent = C * (100 / N);\n const gapOffsetPx = C * this.GAP_PX;\n return `calc(${leftPercent}% + ${gapOffsetPx}px)`;\n }\n return '0px';\n }\n\n getAppointmentWidth(key: any): string {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n\n if (N <= 0) return '0%';\n if (N === 1) return `calc(100% - ${this.GAP_PX}px)`;\n\n const widthPercent = (1 / N) * 100;\n\n return `calc(${widthPercent}% - ${this.GAP_PX}px)`;\n }\n return '0%';\n }\n\n getAppointmentTop(key: any): string {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n\n if (appointmentSegment) {\n const startMinutes = appointmentSegment.startDate.hour * 60 + appointmentSegment.startDate.minute;\n const startBlockOffset = startMinutes - this.startDayHour() * 60;\n const yBlock = startBlockOffset / 30;\n return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${yBlock} + 1px)`;\n }\n return '';\n }\n\n getAppointmentHeight(key: any): string {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n if (appointmentSegment) {\n const durationMillis = appointmentSegment.endDate.date.getTime() - appointmentSegment.startDate.date.getTime();\n const durationMinutes = Math.max(0, durationMillis / (1000 * 60));\n if (durationMinutes <= 0) return '0px';\n\n const heightBlock = durationMinutes / 30;\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height)`;\n\n return `calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px)`;\n }\n return '0px';\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-day-header\">\n <div class=\"ax-scheduler-day-header-table\" aria-hidden=\"true\">\n <div>\n {{ '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 >\n <div class=\"ax-scheduler-day-header-appointment-container\">\n @if (allDayAppointments().length) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || allDayAppointments()[0].readonly || readonly()\"\n [dragData]=\"allDayAppointments()[0]\"\n (click)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (dblclick)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n [title]=\"allDayAppointments()[0].title\"\n class=\"ax-scheduler-header-day-appointment\"\n [style.color]=\"allDayAppointments()[0].textColor\"\n [style.background-color]=\"allDayAppointments()[0].backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ allDayAppointments()[0].title }}</ax-title>\n </div>\n }\n @if (allDayAppointments().length > 1) {\n <div\n #moreAppointments\n class=\"ax-scheduler-day-header-more-tag\"\n [style.color]=\"allDayAppointments()[1].textColor\"\n [style.background-color]=\"allDayAppointments()[1].backgroundColor\"\n >\n {{ 'more-items' | translate: { params: { number: allDayAppointments().length - 1 } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\">\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 [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\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 [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-day-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.width]=\"getAppointmentWidth(appointment.id)\"\n [style.height]=\"getAppointmentHeight(appointment.id)\"\n [style.background-color]=\"appointment.backgroundColor\"\n [style.inset-block-start]=\"getAppointmentTop(appointment.id)\"\n [style.inset-inline-start]=\"getAppointmentLeft(appointment.id)\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\n <ax-subtitle>\n {{ appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\n {{ appointment.originalEndDate | format: 'time' : { format: 'HH:mm', 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 ></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 ></div>\n }\n </div>\n </div>\n</div>\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXDayOfWeekName, AXSchedulerAppointmentSegment, AXSchedulerInternalAppointment } from '../../scheduler.class'; // Adjust path\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service'; // Adjust path\n\n// --- Types specific to Month View Layout ---\n// Represents a single day cell in the month grid\nexport type AXSchedulerMonthDayCell = {\n date: AXDateTime;\n isCurrentMonth: boolean;\n isToday: boolean;\n isHoliday: boolean;\n holidayTitle?: string;\n appointments: AXSchedulerAppointmentSegment[]; // All appointments for this day\n visibleAppointments: AXSchedulerAppointmentSegment[]; // Appointments to display as chips\n hiddenAppointments: AXSchedulerAppointmentSegment[]; // Appointments hidden behind the badge\n overflowCount: number; // Count of hidden appointments (length of hiddenAppointments)\n};\n\n@Component({\n selector: 'ax-scheduler-month-view',\n templateUrl: './scheduler-month-view.component.html',\n styleUrl: './scheduler-month-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AsyncPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }],\n})\nexport class AXSchedulerMonthViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n // --- Inputs ---\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n firstDayOfWeek = input<AXDayOfWeekName>('saturday');\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n // --- Constants ---\n readonly DAYS_IN_WEEK = 7;\n readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentSegmentOrOriginal: AXSchedulerInternalAppointment) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegmentOrOriginal);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month'); // Ensure it's start of day\n if (slotData) {\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month');\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n // --- Base Computeds ---\n // Calculate the start of the month based on the input date\n monthStartDate = computed(() => {\n const d = this.date();\n return d ? d.startOf('month') : null;\n });\n\n // Generate the list of weekday names based on the firstDayOfWeek\n daysArray = computed(() => {\n const dayNames: AXDateTime[] = [];\n\n const currentDate = this.date(); // Use a stable date for generating week headers\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n\n // Calculate days to subtract to get to the start of the week based on firstDayOfWeek\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n let headerStartDate = currentDate.add('day', -daysToSubtract);\n\n for (let i = 0; i < 7; i++) {\n dayNames.push(headerStartDate);\n headerStartDate = headerStartDate.add('day', 1);\n }\n return dayNames;\n });\n\n // --- Calendar Grid Calculation ---\n calendarDaysInfo = computed(() => {\n const monthStart = this.monthStartDate();\n if (!monthStart) return { days: [], weeksNeeded: 0 };\n\n const firstDayOfMonth = monthStart;\n const lastDayOfMonth = monthStart.endOf('month');\n\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n\n const leadingDays = (firstDisplayedDayOfWeek - firstDayGridNum + this.DAYS_IN_WEEK) % this.DAYS_IN_WEEK;\n const firstDayOfGrid = firstDayOfMonth.add('day', -leadingDays);\n\n // Determine how many total days to show to fill out the weeks\n // A common approach is 6 weeks to ensure consistency, but your dynamic weeksNeeded is fine too.\n // Let's stick to your dynamic `weeksNeeded` and `totalDaysToGenerate`\n const daysInMonth = lastDayOfMonth.dayOfMonth;\n const totalCellsMinimum = leadingDays + daysInMonth;\n const weeksNeededDynamic = Math.ceil(totalCellsMinimum / this.DAYS_IN_WEEK);\n const actualWeeksToShow = Math.max(4, Math.min(weeksNeededDynamic, 6)); // Clamp weeks\n const totalDaysToGenerate = actualWeeksToShow * this.DAYS_IN_WEEK;\n\n const days: {\n date: AXDateTime;\n isCurrentMonth: boolean;\n isToday: boolean;\n isHoliday: boolean;\n holidayTitle?: string;\n }[] = [];\n const today = this.calendarService.create(new Date());\n let currentDay = firstDayOfGrid;\n\n for (let i = 0; i < totalDaysToGenerate; i++) {\n const isHoliday =\n this.schedulerService.isHoliday(currentDay) || this.schedulerService.isWeekend(currentDay, this.calendar());\n\n let holidayTitle: null | string = null;\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => currentDay.equal(d.date, 'day'))[0];\n if (holiday) {\n holidayTitle = holiday.title;\n }\n }\n\n days.push({\n date: currentDay,\n isCurrentMonth: currentDay.monthOfYear === monthStart.monthOfYear,\n isToday: currentDay.equal(today, 'day'),\n isHoliday,\n holidayTitle,\n });\n currentDay = currentDay.add('day', 1);\n }\n return { days: days, weeksNeeded: actualWeeksToShow };\n });\n\n // --- Appointment Grouping ---\n appointmentsGroupedByDay = computed(() => {\n const { days } = this.calendarDaysInfo(); // Destructure to get days array\n if (days.length === 0) return new Map<string, AXSchedulerInternalAppointment[]>();\n\n const viewStartDate = days[0].date;\n const viewEndDate = days[days.length - 1].date;\n const relevantAppointments = this.appointments();\n\n return this.schedulerService.groupAppointmentsByDay(relevantAppointments, viewStartDate, viewEndDate);\n });\n\n // --- Day Cell Layout Calculation ---\n dayCellLayouts = computed<AXSchedulerMonthDayCell[]>(() => {\n const { days: initialDaysInfo } = this.calendarDaysInfo();\n const allOriginalAppointments = this.appointments();\n\n if (initialDaysInfo.length === 0) {\n return []; // Return empty array if no days to process\n }\n if (!allOriginalAppointments || allOriginalAppointments.length === 0) {\n // If no appointments, map initialDaysInfo to the full structure with empty appointment arrays\n return initialDaysInfo.map((dayInfo) => ({\n ...dayInfo,\n appointments: [],\n visibleAppointments: [],\n hiddenAppointments: [],\n overflowCount: 0,\n }));\n }\n\n return initialDaysInfo.map((dayInfo) => {\n const dayAsStartOfDay = dayInfo.date.startOf('day');\n const segmentsForThisDay: AXSchedulerAppointmentSegment[] = [];\n\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n dayAsStartOfDay,\n 0, // viewStartHour for month cell context (full day)\n 24, // viewEndHour for month cell context (full day)\n true, // isFullDayCellContext = true\n );\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.originalStartDate.date.getTime(), // Then by original start time\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(), // Then by duration (longer first)\n (s) => s.title?.toLowerCase() ?? '', // Then by title\n ],\n ['asc', 'asc', 'desc', 'asc'],\n );\n\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const overflowCount = hiddenAppointments.length;\n\n return {\n ...dayInfo,\n appointments: sortedSegments,\n visibleAppointments,\n hiddenAppointments,\n overflowCount,\n };\n });\n });\n\n // --- Dynamic Grid Rows ---\n gridTemplateRowsStyle = computed(() => {\n const { weeksNeeded } = this.calendarDaysInfo();\n if (!weeksNeeded || weeksNeeded <= 0) {\n return `repeat(6, minmax(0, 1fr))`; // Fallback, ensures grid is at least somewhat sensible\n }\n return `repeat(${weeksNeeded}, minmax(0, 1fr))`; // Use 1fr for equal distribution\n });\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<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 [class.ax-state-today]=\"dayCell.isToday\"\n [class.ax-state-holiday]=\"dayCell.isHoliday\"\n [class.ax-other-month]=\"!dayCell.isCurrentMonth\"\n [attr.data-date]=\"dayCell.date | format: 'date' : { format: 'YYYY-MM-DD' }\"\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 [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\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 [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-month-appointment-chip\"\n [class.all-day-segment]=\"segment.allDay\"\n [class.continuation-from-prev]=\"segment.isContinuationFromPreviousDay && !segment.allDay\"\n [class.continuation-to-next]=\"segment.isContinuationToNextDay && !segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</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 +{{ 'more-items' | translate: { params: { number: dayCell.overflowCount } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\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 [dragElementClone]=\"true\"\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 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 [style.color]=\"segment.textColor\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</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","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentLayout,\n AXSchedulerAppointmentSegment,\n AXSchedulerInternalAppointment,\n} from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\n\n@Component({\n selector: 'ax-scheduler-timeline-day-view',\n templateUrl: './scheduler-timeline-day-view.component.html',\n styleUrl: './scheduler-timeline-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDecoratorGenericComponent, AXFormatPipe, AsyncPipe, AXDragDirective, AXDropZoneDirective],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }],\n})\nexport class AXSchedulerTimelineDayViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n endDayHour = input.required<number>();\n startDayHour = input.required<number>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n /**\n * Processes original appointments to get segments relevant to this specific day and its viewable hours.\n * Filters out original all-day events.\n */\n processedSegmentsForLayout = computed<AXSchedulerAppointmentSegment[]>(() => {\n const viewDate = this.date();\n const allOriginalAppointments = this.appointments();\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n\n if (!viewDate || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n\n const segmentsOnThisDay: AXSchedulerAppointmentSegment[] = [];\n for (const appt of allOriginalAppointments) {\n if (appt.allDay) {\n continue;\n }\n\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n viewDate,\n viewConfigStartHour,\n viewConfigEndHour,\n false,\n );\n\n if (segment) {\n segmentsOnThisDay.push(segment);\n }\n }\n return segmentsOnThisDay;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerInternalAppointment) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleDrop(e: AXDropZoneDropEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n // --- Appointment Layout Calculation ---\n appointmentLayouts = computed((): AXSchedulerAppointmentLayout[] => {\n const finalLayouts: AXSchedulerAppointmentLayout[] = [];\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n const appointmentsToLayout = this.processedSegmentsForLayout(); // USE SEGMENTS\n\n if (\n typeof viewConfigStartHour !== 'number' ||\n typeof viewConfigEndHour !== 'number' ||\n appointmentsToLayout.length === 0\n ) {\n return finalLayouts;\n }\n\n const sortedAppointments = orderBy(\n appointmentsToLayout,\n [(seg) => seg.startDate.date.getTime(), (seg) => seg.originalEndDate.date.getTime()],\n ['asc', 'desc'],\n );\n\n const rowEndTimes: AXDateTime[] = [];\n\n for (const segment of sortedAppointments) {\n const horizLayout = this.schedulerService.calculateTimelineLayout(\n segment, // Pass the segment\n viewConfigStartHour,\n viewConfigEndHour,\n );\n\n if (!horizLayout) continue; // Segment is outside the viewable hour range or invalid\n\n // For overlap check, use the segment's start and end times\n const segmentStartTime = segment.startDate;\n const segmentEndTime = segment.endDate;\n\n let assignedRowIndex = -1;\n for (let i = 0; i < rowEndTimes.length; i++) {\n // If this segment starts AFTER OR AT the time the row becomes free\n if (segmentStartTime.compare(rowEndTimes[i], 'minute') >= 0) {\n assignedRowIndex = i;\n break;\n }\n }\n\n if (assignedRowIndex === -1) {\n assignedRowIndex = rowEndTimes.length;\n rowEndTimes.push(segmentEndTime); // Add segment's end time for the new row\n } else {\n // Update the end time for the assigned row with this segment's end time\n rowEndTimes[assignedRowIndex] = segmentEndTime;\n }\n\n const layoutHeight = 'var(--ax-comp-scheduler-timeline-view-blocks-height)'; // CSS variable for height\n const layoutLeft = horizLayout.left;\n const layoutWidth = `calc(${horizLayout.width} - ${this.GAP_PX}px)`; // Apply horizontal gap if items are side-by-side within a row (not typical for this stacking)\n const layoutTop = `calc(${assignedRowIndex} * (${layoutHeight} + ${this.GAP_PX}px))`; // Vertical stacking with gap\n\n finalLayouts.push({\n appointment: segment, // Store the segment data\n layoutLeft,\n layoutWidth,\n layoutTop,\n layoutHeight,\n });\n }\n\n return finalLayouts;\n });\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\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 <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (layout of appointmentLayouts(); track layout.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"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.color]=\"layout.appointment.textColor\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [style.background-color]=\"layout.appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</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 ></div>\n }\n </div>\n</div>\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerAppointmentSegment, AXSchedulerInternalAppointment } from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\n\nexport interface TimelineMonthViewDayData {\n date: AXDateTime;\n // These will be segments, precisely clipped and flagged for this day\n visibleAppointments: AXSchedulerAppointmentSegment[];\n hiddenAppointments: AXSchedulerAppointmentSegment[];\n moreCount: number;\n // You might also want to store all segments for the day if needed elsewhere\n // allSegmentsForDay: AXSchedulerAppointmentSegmentType[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-timeline-month-view',\n templateUrl: './scheduler-timeline-month-view.component.html',\n styleUrl: './scheduler-timeline-month-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AXFormatPipe,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }],\n})\nexport class AXSchedulerTimelineMonthViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n private readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY = 3;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n processedDayData = computed<TimelineMonthViewDayData[]>(() => {\n const allOriginalAppointments = this.appointments();\n const monthStartDate = this.date().startOf('month');\n const daysInMonth = monthStartDate.endOf('month').dayOfMonth;\n\n if (!allOriginalAppointments) {\n return Array.from({ length: daysInMonth }, (_, i) => {\n const dayDate = monthStartDate.add('day', i);\n\n return {\n date: dayDate,\n visibleAppointments: [],\n hiddenAppointments: [],\n moreCount: 0,\n };\n });\n }\n\n const result: TimelineMonthViewDayData[] = [];\n\n for (let i = 0; i < daysInMonth; i++) {\n const currentDayDate = monthStartDate.add('day', i).startOf('day'); // Ensure it's start of day\n const segmentsForThisDay: AXSchedulerAppointmentSegment[] = [];\n\n for (const appt of allOriginalAppointments) {\n // For Timeline Month View, each day is a row. We want segments for the full 24h of that day.\n // The view's startHour/endHour are NOT used to clip segments here,\n // as it's not a horizontal time scale *within* the day row.\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDayDate, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n // Sort segments: all-day first, then by segment start time (which is clipped to the day)\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.startDate.date.getTime(), // Segment's start time on this day\n (s) => s.endDate.date.getTime() - s.startDate.date.getTime(), // Segment's duration on this day\n (s) => s.title?.toLowerCase() ?? '',\n ],\n ['asc', 'asc', 'desc', 'asc'],\n );\n\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n\n result.push({\n date: currentDayDate,\n visibleAppointments: visibleAppointments,\n hiddenAppointments: hiddenAppointments,\n moreCount: hiddenAppointments.length,\n holiday: this.isHoliday(currentDayDate),\n });\n }\n return result;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerInternalAppointment) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-timeline-month-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n class=\"ax-scheduler-month-header-date-day\"\n [class.ax-state-today]=\"isToday(dayData.date)\"\n [class.ax-state-holiday]=\"dayData.holiday.state !== 'none'\"\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 >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.date.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\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 [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-timeline-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ segment.title }}</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 +{{ 'more-items' | translate: { params: { number: dayData.moreCount } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\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 dayData.hiddenAppointments;\n track segment.id + segment.originalStartDate.date.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\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 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 [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-popover-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</span>\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","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, output } from '@angular/core';\nimport { AXSchedulerInternalAppointment } from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport { AXSchedulerTimelineDayViewComponent } from '../timeline-day/scheduler-timeline-day-view.component';\n\nexport interface TimelineMultiDayDaySlot {\n date: AXDateTime;\n // Pass the RAW original appointments that *overlap* with this day.\n // The child timeline-day-view will handle segmentation.\n originalAppointmentsForThisDay: AXSchedulerInternalAppointment[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-timeline-multi-day-view',\n templateUrl: './scheduler-timeline-multi-day-view.component.html',\n styleUrl: './scheduler-timeline-multi-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXSchedulerTimelineDayViewComponent, AsyncPipe, AXFormatPipe, AXTooltipDirective],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }],\n})\nexport class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n daysCount = input(7);\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n endDayHour = input.required<number>();\n startDayHour = input.required<number>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n daysDataForTimelineViews = computed<TimelineMultiDayDaySlot[]>(() => {\n const allOriginalAppointments = this.appointments();\n const multiViewStartDate = this.date();\n const numberOfDays = this.daysCount();\n\n if (!multiViewStartDate || !allOriginalAppointments) {\n return [];\n }\n\n const result: TimelineMultiDayDaySlot[] = [];\n\n for (let i = 0; i < numberOfDays; i++) {\n const currentDayDate = multiViewStartDate.add('day', i);\n const currentDayStart = currentDayDate.startOf('day');\n const currentDayEnd = currentDayDate.endOf('day'); // Use full day for overlap check\n\n const appointmentsOverlappingThisDay = allOriginalAppointments.filter((appt) => {\n if (appt.allDay) {\n return false;\n }\n return appt.endDate.compare(currentDayStart, 'day') >= 0 && appt.startDate.compare(currentDayEnd, 'day') <= 0;\n });\n\n result.push({\n date: currentDayDate,\n holiday: this.isHoliday(currentDayDate),\n originalAppointmentsForThisDay: appointmentsOverlappingThisDay,\n });\n }\n return result;\n });\n\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n}\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-scheduler-week-header-date-day\"\n [class.ax-state-today]=\"isToday(daySlot.date)\"\n [class.ax-state-holiday]=\"daySlot.holiday.state !== 'none'\"\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 [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"daySlot.originalAppointmentsForThisDay\"\n (slotClickedInternal)=\"slotClickedInternal.emit($event)\"\n (slotDblClickedInternal)=\"slotDblClickedInternal.emit($event)\"\n (slotRightClickedInternal)=\"slotRightClickedInternal.emit($event)\"\n (onAppointmentDropInternal)=\"onAppointmentDropInternal.emit($event)\"\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","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerActiveAppointmentsInBlock,\n AXSchedulerAllDaySlotData,\n AXSchedulerAppointmentLayout,\n AXSchedulerAppointmentSegment,\n AXSchedulerInternalAppointment,\n AXSchedulerOverflowBadge,\n} from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\n\ntype AXSchedulerGridBadgeInfo = AXSchedulerOverflowBadge & {\n hiddenAppointments: AXSchedulerAppointmentSegment[];\n};\n\n@Component({\n selector: 'ax-scheduler-week-view',\n templateUrl: './scheduler-week-view.component.html',\n styleUrl: './scheduler-week-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }],\n})\nexport class AXSchedulerWeekViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n endDayHour = input.required<number>();\n startDayHour = input.required<number>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n /**\n * Processes all original appointments and generates day-specific segments for the entire week.\n * Each segment represents the visible part of an appointment on a particular day.\n * The segment's 'allDay' flag indicates if it should be in the all-day slot or timed grid for that day.\n */\n processedAppointmentsForLayout = computed<AXSchedulerAppointmentSegment[]>(() => {\n const viewDays = this.daysArray().map((e) => e.date); // Array of AXDateTime for each day in the week\n const allOriginalAppointments = this.appointments(); // Raw appointments from input\n const viewConfigStartHour = this.startDayHour(); // Configured start hour for the timed grid\n const viewConfigEndHour = this.endDayHour(); // Configured end hour for the timed grid\n\n if (!viewDays || viewDays.length === 0 || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n\n const allSegmentsInView: AXSchedulerAppointmentSegment[] = [];\n for (const day of viewDays) {\n // For each day in the week\n const dayAsStartOfDay = day.startOf('day'); // Use startOf('day') for consistent cache key if AXDateTime interns\n for (const appt of allOriginalAppointments) {\n // Determine segmentation boundaries for this specific 'day':\n // - If original appt is allDay, segment across the full 0-24h of 'day'.\n // The service method will ensure segment.allDay is true.\n // - If original appt is timed, segment across viewConfigStartHour-viewConfigEndHour.\n // The service method will set segment.allDay=true if this timed segment fills that window.\n const effectiveSegmentStartHour = appt.allDay ? 0 : viewConfigStartHour;\n const effectiveSegmentEndHour = appt.allDay ? 24 : viewConfigEndHour;\n\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n dayAsStartOfDay, // Pass the AXDateTime object for the current day in loop\n effectiveSegmentStartHour,\n effectiveSegmentEndHour,\n );\n\n if (segment) {\n allSegmentsInView.push(segment);\n }\n }\n }\n\n // Deduplicate segments. A segment is unique by its original key and its specific start/end on a day.\n // The service method already produces day-specific start/end times.\n const uniqueSegmentsMap = new Map<string, AXSchedulerAppointmentSegment>();\n allSegmentsInView.forEach((seg) => {\n // Create a unique key for the segment based on original appt key and segment's own date range\n const mapKey = `${seg.id}-${seg.startDate.format('YYYYMMDDHHmmssSSS')}-${seg.endDate.format('YYYYMMDDHHmmssSSS')}`;\n if (!uniqueSegmentsMap.has(mapKey)) {\n uniqueSegmentsMap.set(mapKey, seg);\n }\n });\n return Array.from(uniqueSegmentsMap.values());\n });\n\n /**\n * Segments that are to be displayed in the timed grid area of the week view.\n * These are segments from processedAppointmentsForLayout where segment.allDay is false.\n */\n timedGridSegments = computed<AXSchedulerAppointmentSegment[]>(() => {\n return this.processedAppointmentsForLayout()?.filter((segment) => !segment.allDay) ?? [];\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentSegment: AXSchedulerInternalAppointment) {\n // 'appointmentSegment' here is the segment that was interacted with\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegment);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSingleSlotEvent(mouseEvent: MouseEvent, hour: AXDateTime, day: AXDateTime, minuteIndex: number) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleAllDaySlotEvent(mouseEvent: MouseEvent, day: AXDateTime) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' as const };\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleAllDayDrop(e: AXDropZoneDropEvent, day: AXDateTime) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' as const };\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n handleSingleDayDrop(e: AXDropZoneDropEvent, hour: AXDateTime, day: AXDateTime, minuteIndex: number) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n daysArray = computed(\n (): { date: AXDateTime; holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } }[] => {\n const time = this.date();\n if (!time) return [];\n const days = [{ date: time, holiday: this.isHoliday(time) }];\n for (let index = 1; index <= 6; index++) {\n const date = time.add('day', index);\n days.push({ date, holiday: this.isHoliday(date) });\n }\n return days;\n },\n );\n\n totalBlocksPerViewDay = computed(() => {\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (typeof startH !== 'number' || typeof endH !== 'number') return 0;\n return Math.max(0, (endH - startH) * (60 / 30));\n });\n\n appointmentsByStartBlock = computed(() => {\n const viewDate = this.date(); // This should be the start date of the week\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number') return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateWeekViewAppointmentsByStartBlock(\n this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate,\n startH,\n endH,\n );\n });\n\n activeAppointmentsInBlock = computed((): AXSchedulerActiveAppointmentsInBlock => {\n const viewDate = this.date(); // Start date of the week\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number') return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateActiveAppointmentsInBlock(\n this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate,\n startH,\n endH,\n 7, // Explicitly 7 days for week view\n );\n });\n\n visibleAppointmentsLayout = computed((): AXSchedulerAppointmentLayout[] => {\n const layouts: AXSchedulerAppointmentLayout[] = [];\n const startingBlocks = this.appointmentsByStartBlock();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n const occupiedBlocks: Record<number, Record<number, any>> = {};\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n const dayBlocks = startingBlocks[dayIndex] ?? {};\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n if (occupiedBlocks[dayIndex]?.[blockIndex]) continue;\n\n const startingAppointments = dayBlocks[blockIndex] ?? [];\n if (startingAppointments.length > 0) {\n const appointmentToShow = orderBy(startingAppointments, [(e) => e.endDate.date.getTime()], ['desc'])[0];\n\n const C = dayIndex;\n let layoutLeft = '0px';\n if (C > 0 && N > 1) layoutLeft = `calc(${C * (100 / N)}%)`;\n const layoutTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n let layoutHeight = '0px';\n let appointmentDurationMinutes = 0;\n if (appointmentToShow.endDate && appointmentToShow.startDate) {\n appointmentDurationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentToShow);\n if (appointmentDurationMinutes > 0) {\n const heightBlock = appointmentDurationMinutes / 30;\n layoutHeight = `max(0px, calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px))`;\n }\n }\n\n layouts.push({\n layoutTop,\n layoutLeft,\n layoutHeight,\n appointment: appointmentToShow,\n layoutWidth: 'calc(100% / 7 - 2rem)',\n });\n\n const blocksToOccupy = Math.ceil(appointmentDurationMinutes / 30);\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = blockIndex + i;\n if (occupiedBlockIndex < totalBlocksPerDay) {\n if (!occupiedBlocks[dayIndex]) occupiedBlocks[dayIndex] = {};\n if (!occupiedBlocks[dayIndex][occupiedBlockIndex]) {\n occupiedBlocks[dayIndex][occupiedBlockIndex] = appointmentToShow.id;\n }\n } else {\n break;\n }\n }\n }\n }\n }\n return layouts;\n });\n\n visualOccupancyMap = computed(() => {\n const map = new Map<string, any>();\n const visibleLayouts = this.visibleAppointmentsLayout();\n const viewStartDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n\n if (!viewStartDate || typeof startH !== 'number' || typeof endH !== 'number') return map;\n\n for (const appointmentLayout of visibleLayouts) {\n const startInfo = this.schedulerService.getBlockIdentifier(\n appointmentLayout.appointment.startDate,\n viewStartDate,\n startH,\n endH,\n 7,\n );\n if (!startInfo) continue;\n\n const durationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentLayout.appointment);\n const blocksToOccupy = Math.ceil(durationMinutes / 30);\n\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = startInfo.blockIndex + i;\n if (occupiedBlockIndex >= 0 && occupiedBlockIndex < totalBlocksPerDay) {\n const mapKey = `${startInfo.dayIndex}-${occupiedBlockIndex}`;\n if (!map.has(mapKey)) {\n map.set(mapKey, appointmentLayout.appointment.id);\n }\n } else {\n break;\n }\n }\n }\n return map;\n });\n\n overflowBadges = computed((): AXSchedulerOverflowBadge[] => {\n const badges: AXSchedulerOverflowBadge[] = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0) return badges;\n\n const countedHiddenAppointmentKeysToday = new Map<number, Set<any>>();\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0) continue;\n\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n const hiddenAppointments = activeAppointments.filter((appointment) => appointment.id !== visibleAppointmentKey);\n const newlyHidden = hiddenAppointments.filter(\n (e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.id),\n );\n\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1) baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n\n badges.push({ key: blockMapKey, count: newlyHidden.length, badgeTop, badgeLeft });\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.id));\n }\n }\n }\n return badges;\n });\n\n /**\n * Structures all-day (or \"becomes all-day\") segments for rendering in the all-day slots for each day of the week.\n */\n allDayAppointmentsPerDay = computed((): AXSchedulerAllDaySlotData[] => {\n const daysInWeek = this.daysArray().map((e) => e.date); // AXDateTime objects for each day in the week\n const allSegmentsInView = this.processedAppointmentsForLayout(); // All processed segments\n const result: AXSchedulerAllDaySlotData[] = [];\n\n if (!daysInWeek || daysInWeek.length === 0) return result;\n\n daysInWeek.forEach((dayDate) => {\n const currentDayStart = dayDate.startOf('day'); // For accurate day comparison\n\n // Filter segments that are marked as 'allDay' AND belong to the current 'dayDate'\n const allDaySegmentsForThisDay = allSegmentsInView.filter(\n (segment) => segment.allDay && segment.startDate.startOf('day').equal(currentDayStart, 'day'),\n );\n\n // Sort these segments for consistent display\n // Primarily by original start time, then by duration of original appointment, then title\n const sortedAppointmentsForThisDay = orderBy(\n allDaySegmentsForThisDay,\n [\n (s) => s.originalStartDate.date.getTime(),\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(),\n (s) => s.title?.toLowerCase() ?? '',\n ],\n ['asc', 'desc', 'asc'], // Earlier start, longer duration, then alphabetical title\n );\n\n result.push({\n day: dayDate, // The AXDateTime for this day column\n appointments: sortedAppointmentsForThisDay, // Array of segments for the all-day slot\n });\n });\n return result;\n });\n\n overflowBadgesWithData = computed((): AXSchedulerGridBadgeInfo[] => {\n const badgesInfo: AXSchedulerGridBadgeInfo[] = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0) return badgesInfo;\n\n const countedHiddenAppointmentKeysToday = new Map<number, Set<any>>();\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0) continue;\n\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n // Find all hidden appointments for this specific block\n const hiddenAppointments = activeAppointments.filter((appointment) => appointment.id !== visibleAppointmentKey);\n // Find which of those hidden ones haven't been counted today yet\n const newlyHidden = hiddenAppointments.filter(\n (e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.id),\n );\n\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1) baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n // Keep your positioning logic for the badge itself\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n\n // Store the badge info *and* the list of appointments it represents\n badgesInfo.push({\n key: blockMapKey,\n count: newlyHidden.length,\n badgeTop,\n badgeLeft,\n hiddenAppointments: newlyHidden, // Store the actual hidden appointments\n });\n\n // Mark these as counted for today\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.id));\n }\n }\n }\n // Sort the badges by top then left for consistent rendering order? (Optional)\n // badgesInfo.sort((a, b) => {\n // const topCompare = a.badgeTop.localeCompare(b.badgeTop);\n // if (topCompare !== 0) return topCompare;\n // return a.badgeLeft.localeCompare(b.badgeLeft);\n // });\n return badgesInfo;\n });\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<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 [class.ax-state-holiday]=\"day.holiday.state !== 'none'\"\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\">{{ '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 [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || slotData.appointments[0].readonly || readonly()\"\n [dragData]=\"slotData.appointments[0]\"\n (click)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (dblclick)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n [title]=\"slotData.appointments[0].title\"\n class=\"ax-scheduler-header-week-appointment\"\n [style.color]=\"slotData.appointments[0].textColor\"\n [style.background-color]=\"slotData.appointments[0].backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ slotData.appointments[0].title }}</ax-title>\n </div>\n }\n @if (slotData.appointments.length > 1) {\n <div #moreAppointments class=\"ax-scheduler-appointment-badge\">+{{ slotData.appointments.length - 1 }}</div>\n <ax-popover [target]=\"moreAppointments\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\">\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 [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</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 [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appt.appointment.readonly || readonly()\"\n [dragData]=\"appt.appointment\"\n (click)=\"handleAppointmentEvent($event, appt.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appt.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appt.appointment)\"\n [title]=\"appt.appointment.title\"\n [style.height]=\"appt.layoutHeight\"\n class=\"ax-scheduler-week-appointment\"\n [style.color]=\"appt.appointment.textColor\"\n [style.inset-block-start]=\"appt.layoutTop\"\n [style.inset-inline-start]=\"appt.layoutLeft\"\n [style.background-color]=\"appt.appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appt.appointment.title }}</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 #actionButton class=\"ax-scheduler-appointment-badge\">+{{ badge.count }}</div>\n <!-- The Popover -->\n <ax-popover [target]=\"actionButton\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\">\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n [style.color]=\"appointment.textColor\"\n class=\"ax-scheduler-popover-appointment\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</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 ></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 ></td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n","import { AXComponent, AXValueChangedEvent, NXComponent, NXEvent, NXNativeEvent } from '@acorex/cdk/common';\nimport { AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCalendarComponent } from '@acorex/components/calendar';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXSelectBoxComponent } from '@acorex/components/select-box';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n linkedSignal,\n model,\n OnInit,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n AXDayOfWeekName,\n AXSchedulerAppointment,\n AXSchedulerAppointmentDataSource,\n AXSchedulerAppointmentLoader,\n AXSchedulerInternalAppointment,\n AXSchedulerView,\n} from './scheduler.class';\nimport { AXSchedulerService } from './scheduler.service';\nimport { AXSchedulerAgendaViewComponent } from './views/agenda/scheduler-agenda-view.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerTimelineMonthViewComponent } from './views/timeline-month/scheduler-timeline-month-view.component';\nimport { AXSchedulerTimelineMultiDayViewComponent } from './views/timeline-multi-day/scheduler-timeline-multi-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\n\nexport interface AXSchedulerAppointmentMouseEvent extends NXNativeEvent<AXSchedulerComponent, MouseEvent> {\n appointment: AXSchedulerAppointment;\n}\nexport interface AXSchedulerSlotMouseEvent extends NXNativeEvent<AXSchedulerComponent, MouseEvent> {\n slot: {\n endDate: AXDateTime;\n startDate: AXDateTime;\n view: AXSchedulerView;\n };\n}\nexport interface AXSchedulerSlotDropEvent extends NXEvent<AXSchedulerComponent> {\n dropEvent: AXDropZoneDropEvent;\n appointment: AXSchedulerAppointment;\n slot: {\n endDate: AXDateTime;\n startDate: AXDateTime;\n view: AXSchedulerView;\n };\n}\n\n@Component({\n selector: 'ax-scheduler',\n templateUrl: './scheduler.component.html',\n styleUrls: ['./scheduler.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n FormsModule,\n AXSelectBoxComponent,\n AXDecoratorIconComponent,\n AXButtonComponent,\n NgClass,\n AXPopoverComponent,\n AXCalendarComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n AXSchedulerTimelineMultiDayViewComponent,\n AXSchedulerTimelineMonthViewComponent,\n AXSchedulerAgendaViewComponent,\n ],\n providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }],\n})\nexport class AXSchedulerComponent extends NXComponent implements OnInit {\n private platformId = inject(PLATFORM_ID);\n private unsubscriber = inject(AXUnsubscriber);\n private formatService = inject(AXFormatService);\n private localeService = inject(AXLocaleService);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n private translationService = inject(AXTranslationService);\n\n private viewModeSelectbox = viewChild(AXSelectBoxComponent);\n\n private displayViews: Record<AXSchedulerView, string> = {\n day: 'daily',\n week: 'weekly',\n month: 'monthly',\n 'timeline-day': 'daily-timeline',\n 'timeline-multi-day': 'multi-day-timeline',\n 'timeline-month': 'monthly-timeline',\n agenda: 'agenda',\n };\n\n public calendar = input<'gregorian' | 'solar-hijri' | string>();\n protected calendarType = linkedSignal<'gregorian' | 'solar-hijri' | string>(\n () => this.calendar() ?? this.localeService.activeProfile().calendar.system,\n );\n\n public startingDate = input<Date>(new Date());\n protected currentDate = linkedSignal<AXDateTime>(() =>\n this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'),\n );\n\n private _endRange = signal<Date>(null);\n public endRange = this._endRange.asReadonly();\n private _fromRange = signal<Date>(null);\n public fromRange = this._fromRange.asReadonly();\n private _appointments = signal<AXSchedulerAppointment[]>([]);\n public appointments = this._appointments.asReadonly();\n protected rtl = signal(false);\n protected isFullScreen = signal(false);\n protected viewsDataSource = signal<{ id: string; text: string }[]>([]);\n private prevDate = signal<AXDateTime>(this.calendarService.create(new Date(), this.calendarType()));\n\n public endDayHour = input(24);\n public startDayHour = input(8);\n public hasHeader = input(true);\n public readonly = input(false);\n public draggable = input(true);\n public allowFullScreen = input(true);\n public multiDayViewDaysCount = input(7);\n public dataSource = input<AXSchedulerAppointmentDataSource>([]);\n public firstDayOfWeek = input<AXDayOfWeekName>('sunday');\n public views = input<AXSchedulerView[]>([\n 'day',\n 'week',\n 'month',\n 'timeline-day',\n 'timeline-multi-day',\n 'timeline-month',\n 'agenda',\n ]);\n\n public selectedView = model<AXSchedulerView>(this.views()[0]);\n\n // --- Public Outputs ---\n public onRangeChanged = output<{ from: Date; to: Date }>();\n public onSlotClicked = output<AXSchedulerSlotMouseEvent>();\n public onSlotDblClicked = output<AXSchedulerSlotMouseEvent>();\n public onSlotRightClick = output<AXSchedulerSlotMouseEvent>();\n public onAppointmentDrop = output<AXSchedulerSlotDropEvent>();\n public onAppointmentClicked = output<AXSchedulerAppointmentMouseEvent>();\n public onAppointmentDblClicked = output<AXSchedulerAppointmentMouseEvent>();\n public onAppointmentRightClick = output<AXSchedulerAppointmentMouseEvent>();\n\n // --- Internal Handlers for View Outputs ---\n protected handleSlotClickInternal(eventData: AXSchedulerSlotMouseEvent) {\n this.onSlotClicked.emit(eventData);\n }\n protected handleSlotDblClickInternal(eventData: AXSchedulerSlotMouseEvent) {\n this.onSlotDblClicked.emit(eventData);\n }\n protected handleSlotRightClickInternal(eventData: AXSchedulerSlotMouseEvent) {\n this.onSlotRightClick.emit(eventData);\n }\n protected handleAppointmentClickInternal(eventData: AXSchedulerAppointmentMouseEvent) {\n this.onAppointmentClicked.emit(eventData);\n }\n protected handleAppointmentDblClickInternal(eventData: AXSchedulerAppointmentMouseEvent) {\n this.onAppointmentDblClicked.emit(eventData);\n }\n protected handleAppointmentRightClickInternal(eventData: AXSchedulerAppointmentMouseEvent) {\n this.onAppointmentRightClick.emit(eventData);\n }\n protected handleAppointmentDropInternal(eventData: AXSchedulerSlotDropEvent) {\n this.onAppointmentDrop.emit(eventData);\n }\n\n ngOnInit() {\n this.calendarService.calendarChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {\n this.currentDate.set(this.calendarService.create(this.currentDate().date, this.calendarType()));\n });\n\n this.translationService.langChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {\n await this.fillDataSource();\n this.viewModeSelectbox().selectItems(this.viewsDataSource().find((c) => c.id == this.selectedView()));\n this.currentDate.set(this.calendarService.create(this.currentDate().date, this.calendarType()));\n });\n\n if (isPlatformBrowser(this.platformId)) this.rtl.set(AXHtmlUtil.isRtl(this.nativeElement));\n this.fillDataSource();\n }\n\n #appointmentEffect = effect(async () => {\n if (typeof this.dataSource() === 'function') {\n const func = this.dataSource() as AXSchedulerAppointmentLoader;\n const list = await func({\n range: {\n end: this.endRange(),\n from: this.fromRange(),\n },\n });\n this._appointments.set(list);\n } else {\n const list = this.dataSource() as AXSchedulerAppointment[];\n this._appointments.set(list);\n }\n });\n\n private async fillDataSource() {\n const result = [];\n for await (const c of this.views()) {\n const text = await this.translationService.translateAsync(`dateTime.duration.${this.displayViews[c]}`);\n result.push({ text, id: c });\n }\n this.viewsDataSource.set(result);\n }\n\n private getGridDateRange(dateInMonth: AXDateTime): { gridStartDate: AXDateTime; gridEndDate: AXDateTime } {\n const firstDayOfMonth = dateInMonth.startOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const daysFromPrevMonth = (firstDisplayedDayOfWeek - firstDayGridNum + 7) % 7;\n const gridStartDate = firstDayOfMonth.add('day', -daysFromPrevMonth);\n // Calculate end date based on standard 6 weeks for safety, or calculate dynamically if preferred\n const gridEndDate = gridStartDate.add('day', 6 * 7 - 1);\n return { gridStartDate, gridEndDate };\n }\n\n currentDateText = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n case 'week': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('week', 1).add('day', -1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(\n this.currentDate().add('day', this.multiDayViewDaysCount() - 1),\n 'datetime',\n {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n },\n );\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'month':\n case 'timeline-month':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'MMMM yyyy',\n calendar: this.calendarType(),\n });\n }\n });\n\n calendarDepth = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'week':\n case 'agenda':\n case 'timeline-day':\n case 'timeline-multi-day':\n return 'day';\n case 'month':\n case 'timeline-month':\n return 'month';\n return 'day';\n }\n });\n\n mappedAppointments = computed<AXSchedulerInternalAppointment[]>(() => {\n const items = this._appointments() as AXSchedulerAppointment[];\n\n return items\n .map((item) => {\n const startDate = this.calendarService.create(item.startDate, this.calendarType());\n const endDate = this.calendarService.create(item.endDate, this.calendarType());\n // Basic validation\n if (!startDate?.date || !endDate?.date) {\n console.warn('Scheduler: Skipping item due to invalid date fields:', item);\n return null;\n }\n // Check if dates are valid after creation\n if (isNaN(startDate.date.getTime()) || isNaN(endDate.date.getTime())) {\n console.warn('Scheduler: Skipping item due to invalid parsed date (NaN):', item);\n return null;\n }\n\n // Calculate singleDay based on *calendar day*, not just time\n\n const appointment = {\n endDate,\n startDate,\n id: item.id,\n title: item.title,\n allDay: !!item.allDay,\n readonly: !!item.readonly,\n textColor: item.textColor,\n description: item.description,\n backgroundColor: item.backgroundColor,\n };\n return appointment;\n })\n .filter((appt): appt is AXSchedulerInternalAppointment => appt !== null); // Filter out nulls from invalid dates\n });\n\n viewAppointments = computed<AXSchedulerInternalAppointment[]>(() => {\n const view = this.selectedView();\n const current = this.currentDate();\n const mapped = this.mappedAppointments();\n\n if (!current || mapped.length === 0) return [];\n\n switch (view) {\n case 'day':\n case 'timeline-day': {\n const dayEnd = current.endOf('day');\n const dayStart = current.startOf('day');\n untracked(() => {\n this._endRange.set(dayEnd.date);\n this._fromRange.set(dayStart.date);\n this.onRangeChanged.emit({ from: dayStart.date, to: dayEnd.date });\n });\n return mapped.filter(\n (appt) => appt.endDate.compare(dayStart, 'day') >= 0 && appt.startDate.compare(dayEnd, 'day') <= 0,\n );\n }\n case 'week': {\n const weekStart = current;\n const weekEnd = weekStart.add('day', 7);\n untracked(() => {\n this._endRange.set(weekEnd.date);\n this._fromRange.set(weekStart.date);\n this.onRangeChanged.emit({ from: weekStart.date, to: weekEnd.date });\n });\n return mapped.filter(\n (appt) => appt.startDate.compare(weekEnd, 'day') < 0 && appt.endDate.compare(weekStart, 'day') >= 0,\n );\n }\n case 'month': {\n const { gridStartDate, gridEndDate } = this.getGridDateRange(current);\n const exclusiveGridEndDate = gridEndDate.add('day', 1);\n untracked(() => {\n this._endRange.set(exclusiveGridEndDate.date);\n this._fromRange.set(gridStartDate.date);\n });\n return mapped.filter(\n (appt) =>\n appt.startDate.compare(exclusiveGridEndDate, 'day') < 0 && appt.endDate.compare(gridStartDate, 'day') >= 0,\n );\n }\n case 'timeline-month': {\n const dayStart = current.startOf('month');\n const dayEnd = dayStart.endOf('month');\n untracked(() => {\n this._endRange.set(dayEnd.date);\n this._fromRange.set(dayStart.date);\n this.onRangeChanged.emit({ from: dayStart.date, to: dayEnd.date });\n });\n return mapped.filter(\n (appt) => appt.startDate.compare(dayEnd, 'day') < 0 && appt.endDate.compare(dayStart, 'day') >= 0,\n );\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const dayStart = current;\n const dayEnd = dayStart.add('day', this.multiDayViewDaysCount());\n untracked(() => {\n this._endRange.set(dayEnd.date);\n this._fromRange.set(dayStart.date);\n this.onRangeChanged.emit({ from: dayStart.date, to: dayEnd.date });\n });\n return mapped.filter(\n (appt) => appt.startDate.compare(dayEnd, 'day') < 0 && appt.endDate.compare(dayStart, 'day') >= 0,\n );\n }\n }\n });\n\n viewChanged(e: AXValueChangedEvent<AXSchedulerView>) {\n const newView = e.value;\n const oldView = e.oldValue;\n this.selectedView.set(newView);\n\n if (oldView === 'week') {\n const oldDayOfWeek = this.prevDate().dayOfWeek % 7;\n const date = this.currentDate().add('day', oldDayOfWeek - 1);\n this.currentDate.set(date);\n }\n\n this.prevDate.set(this.currentDate());\n\n if (newView === 'week') {\n const currentDate = this.currentDate();\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n const startOfWeekDate = currentDate.add('day', -daysToSubtract);\n this.currentDate.set(startOfWeekDate);\n }\n }\n\n nextClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', 1));\n break;\n\n case 'week':\n this.currentDate.set(this.currentDate().add('week', 1));\n break;\n\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', this.multiDayViewDaysCount()));\n break;\n\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', 1));\n break;\n }\n }\n\n prevClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', -1));\n break;\n\n case 'week':\n this.currentDate.set(this.currentDate().add('week', -1));\n break;\n\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', -this.multiDayViewDaysCount()));\n break;\n\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', -1));\n break;\n }\n }\n\n calendarDateChanged(e: any) {\n let currentDate = this.calendarService.create(e, this.calendarType());\n if (this.selectedView() === 'week') {\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n currentDate = currentDate.add('day', -daysToSubtract);\n }\n this.currentDate.set(currentDate);\n }\n\n handleFullScreen() {\n if (!this.isFullScreen()) this.nativeElement.classList.add('ax-full-screen-container');\n if (this.isFullScreen()) this.nativeElement.classList.remove('ax-full-screen-container');\n this.isFullScreen.set(!this.isFullScreen());\n }\n}\n","<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\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n (ngModelChange)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </div>\n </ax-popover>\n </div>\n <div class=\"ax-scheduler-actions\">\n <ax-select-box\n [dropdownWidth]=\"200\"\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 [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\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 [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\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 [firstDayOfWeek]=\"firstDayOfWeek()\"\n [appointments]=\"viewAppointments()\"\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 [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\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 [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [daysCount]=\"multiDayViewDaysCount()\"\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 [appointments]=\"viewAppointments()\"\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 [appointments]=\"viewAppointments()\"\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","import { NgModule } from '@angular/core';\nimport { AXSchedulerComponent } from './scheduler.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\n\nconst COMPONENT = [\n AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n];\n\n@NgModule({\n imports: [...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n})\nexport class AXSchedulerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|