@apexara/ng-components 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1867 -0
- package/fesm2022/apexara-ng-components-button.mjs +66 -0
- package/fesm2022/apexara-ng-components-button.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-carousel.mjs +161 -0
- package/fesm2022/apexara-ng-components-carousel.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-checkbox.mjs +64 -0
- package/fesm2022/apexara-ng-components-checkbox.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-chip.mjs +26 -0
- package/fesm2022/apexara-ng-components-chip.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-datepicker.mjs +2175 -0
- package/fesm2022/apexara-ng-components-datepicker.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-dialog.mjs +65 -0
- package/fesm2022/apexara-ng-components-dialog.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-drawer.mjs +69 -0
- package/fesm2022/apexara-ng-components-drawer.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-expander.mjs +41 -0
- package/fesm2022/apexara-ng-components-expander.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-image.mjs +201 -0
- package/fesm2022/apexara-ng-components-image.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-input.mjs +129 -0
- package/fesm2022/apexara-ng-components-input.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-listbox.mjs +308 -0
- package/fesm2022/apexara-ng-components-listbox.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-radiobutton.mjs +40 -0
- package/fesm2022/apexara-ng-components-radiobutton.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-select.mjs +620 -0
- package/fesm2022/apexara-ng-components-select.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-services.mjs +290 -0
- package/fesm2022/apexara-ng-components-services.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-snackbar.mjs +279 -0
- package/fesm2022/apexara-ng-components-snackbar.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-table.mjs +686 -0
- package/fesm2022/apexara-ng-components-table.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-textarea.mjs +82 -0
- package/fesm2022/apexara-ng-components-textarea.mjs.map +1 -0
- package/fesm2022/apexara-ng-components-tooltip.mjs +319 -0
- package/fesm2022/apexara-ng-components-tooltip.mjs.map +1 -0
- package/fesm2022/apexara-ng-components.mjs +8 -0
- package/fesm2022/apexara-ng-components.mjs.map +1 -0
- package/package.json +146 -0
- package/types/apexara-ng-components-button.d.ts +27 -0
- package/types/apexara-ng-components-carousel.d.ts +31 -0
- package/types/apexara-ng-components-checkbox.d.ts +29 -0
- package/types/apexara-ng-components-chip.d.ts +11 -0
- package/types/apexara-ng-components-datepicker.d.ts +172 -0
- package/types/apexara-ng-components-dialog.d.ts +24 -0
- package/types/apexara-ng-components-drawer.d.ts +22 -0
- package/types/apexara-ng-components-expander.d.ts +10 -0
- package/types/apexara-ng-components-image.d.ts +46 -0
- package/types/apexara-ng-components-input.d.ts +51 -0
- package/types/apexara-ng-components-listbox.d.ts +70 -0
- package/types/apexara-ng-components-radiobutton.d.ts +30 -0
- package/types/apexara-ng-components-select.d.ts +111 -0
- package/types/apexara-ng-components-services.d.ts +96 -0
- package/types/apexara-ng-components-snackbar.d.ts +73 -0
- package/types/apexara-ng-components-table.d.ts +157 -0
- package/types/apexara-ng-components-textarea.d.ts +34 -0
- package/types/apexara-ng-components-tooltip.d.ts +54 -0
- package/types/apexara-ng-components.d.ts +3 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apexara-ng-components-datepicker.mjs","sources":["../../../../projects/apexara/ng-components/datepicker/src/components/calendar-body/calendar-body.component.ts","../../../../projects/apexara/ng-components/datepicker/src/components/calendar-body/calendar-body.component.html","../../../../projects/apexara/ng-components/datepicker/src/datepicker-service.ts","../../../../projects/apexara/ng-components/datepicker/src/components/year-view/year-view.component.ts","../../../../projects/apexara/ng-components/datepicker/src/components/year-view/year-view.component.html","../../../../projects/apexara/ng-components/datepicker/src/datepicker-selection-strategy.component.ts","../../../../projects/apexara/ng-components/datepicker/src/components/month-view/month-view-calendar.component.ts","../../../../projects/apexara/ng-components/datepicker/src/components/month-view/month-view-calendar.component.html","../../../../projects/apexara/ng-components/datepicker/src/components/multi-year-view/multi-year-view.component.ts","../../../../projects/apexara/ng-components/datepicker/src/components/multi-year-view/multi-year-view.component.html","../../../../projects/apexara/ng-components/datepicker/src/components/calendar/calendar.component.ts","../../../../projects/apexara/ng-components/datepicker/src/components/calendar/calendar.component.html","../../../../projects/apexara/ng-components/datepicker/src/datepicker.component.ts","../../../../projects/apexara/ng-components/datepicker/src/datepicker.component.html","../../../../projects/apexara/ng-components/datepicker/apexara-ng-components-datepicker.ts"],"sourcesContent":["import { Component, ElementRef, SimpleChanges, ChangeDetectionStrategy, EventEmitter, Input, Output, NgZone } from '@angular/core';\n\nimport { Platform, normalizePassiveListenerOptions } from '@angular/cdk/platform';\n\nimport { DateSelectionEvent } from '../../datepicker.component';\n\nexport class CalendarCell<D = any> {\n\n constructor(\n public value: number,\n public displayValue: string,\n public ariaLabel: string,\n public enabled: boolean,\n public compareValue = value,\n public rawValue?: D,\n ) {}\n}\n\nlet calendarBodyId = 1;\n\n@Component({\n selector: '[calendar-body]',\n host: {\n 'class': 'calendar-body',\n },\n templateUrl: 'calendar-body.component.html',\n styleUrl: 'calendar-body.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n\nexport class CalendarBody {\n\n constructor(\n private ngZone: NgZone,\n private platform: Platform,\n private elementRef: ElementRef,\n ) {\n this.ngZone.runOutsideAngular(() => {\n const element = this.elementRef.nativeElement;\n\n element.addEventListener('touchmove', this.touchmoveHandler, this.activeCapturingEventOptions);\n\n element.addEventListener('mouseenter', this.enterHandler, this.passiveCapturingEventOptions);\n element.addEventListener('focus', this.enterHandler, this.passiveCapturingEventOptions);\n element.addEventListener('mouseleave', this.leaveHandler, this.passiveCapturingEventOptions);\n\n element.addEventListener('mousedown', this.mousedownHandler, this.passiveEventOptions);\n element.addEventListener('touchstart', this.mousedownHandler, this.passiveEventOptions);\n\n if (this.platform.isBrowser) {\n window.addEventListener('mouseup', this.mouseupHandler);\n window.addEventListener('touchend', this.touchendHandler);\n }\n });\n }\n\n /** The label for the table. (e.g. \"Jan 2017\"). */\n @Input() label!: string;\n\n /** The cells to display in the table. */\n @Input() rows!: CalendarCell[][];\n\n /** The value in the table that corresponds to today. */\n @Input() todayValue!: number;\n\n /** Start value of the selected date range. */\n @Input() startValue!: number;\n\n /** End value of the selected date range. */\n @Input() endValue!: number;\n\n /** The minimum number of free cells needed to fit the label in the first row. */\n @Input() labelMinRequiredCells!: number;\n\n /** The number of columns in the table. */\n @Input() numCols: number = 7;\n\n /** The cell number of the active cell in the table. */\n @Input() activeCell: number = 0;\n\n /** Whether a range is being selected. */\n @Input() isRange: boolean = false;\n\n /**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\n @Input() cellAspectRatio: number = 1;\n\n /** Start of the comparison range. */\n @Input() comparisonStart!: number | null;\n\n /** End of the comparison range. */\n @Input() comparisonEnd!: number | null;\n\n /** Start of the preview range. */\n @Input() previewStart: number | null = null;\n\n /** End of the preview range. */\n @Input() previewEnd: number | null = null;\n\n /** ARIA Accessible name of the StartDate */\n @Input() startDateAccessibleName!: string | null;\n\n /** ARIA Accessible name of the EndDate */\n @Input() endDateAccessibleName!: string | null;\n\n /** Emits when a new value is selected. */\n @Output() selectedValueChange = new EventEmitter<DateSelectionEvent<number>>();\n\n /** Emits when the preview has changed as a result of a user action. */\n @Output() previewChange = new EventEmitter<DateSelectionEvent<CalendarCell | null>>();\n\n @Output() activeDateChange = new EventEmitter<DateSelectionEvent<number>>();\n\n /** Emits the date at the possible start of a drag event. */\n @Output() dragStarted = new EventEmitter<DateSelectionEvent<Date>>();\n\n /** Emits the date at the conclusion of a drag, or null if mouse was not released on a date. */\n @Output() dragEnded = new EventEmitter<DateSelectionEvent<Date | null>>();\n\n /** The number of blank cells to put at the beginning for the first row. */\n public firstRowOffset!: number;\n\n /** Padding for the individual date cells. */\n public cellPadding!: string;\n\n private id = `calendar-body-${calendarBodyId++}`;\n public startDateLabelId = `${this.id}-start-date`;\n public endDateLabelId = `${this.id}-end-date`;\n\n /** Width of an individual cell. */\n public cellWidth!: string;\n\n /**\n * Used to skip the next focus event when rendering the preview range.\n * We need a flag like this, because some browsers fire focus events asynchronously.\n */\n private skipNextFocus!: boolean;\n\n /**\n * Used to focus the active cell after change detection has run.\n */\n private focusActiveCellAfterViewChecked = true;\n\n private didDragSinceMouseDown = false;\n\n private activeCapturingEventOptions = normalizePassiveListenerOptions({\n passive: false,\n capture: true,\n });\n\n private passiveCapturingEventOptions = normalizePassiveListenerOptions({\n passive: true,\n capture: true,\n });\n\n private passiveEventOptions = normalizePassiveListenerOptions({ passive: true });\n\n public ngOnChanges(changes: SimpleChanges): void {\n const columnChanges = changes['numCols'];\n const {rows, numCols} = this;\n\n if (changes['rows'] || columnChanges) {\n this.firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n }\n\n if (changes['cellAspectRatio'] || columnChanges || !this.cellPadding) {\n this.cellPadding = `${(50 * this.cellAspectRatio) / numCols}%`;\n }\n\n if (columnChanges || !this.cellWidth) {\n this.cellWidth = `${100 / numCols}%`;\n }\n }\n\n public ngAfterViewChecked(): void {\n if (this.focusActiveCellAfterViewChecked) {\n this.focusActiveCell();\n this.focusActiveCellAfterViewChecked = false;\n }\n }\n\n public ngOnDestroy(): void {\n const element = this.elementRef.nativeElement;\n\n element.removeEventListener('touchmove', this.touchmoveHandler, this.activeCapturingEventOptions);\n\n element.removeEventListener('mouseenter', this.enterHandler, this.passiveCapturingEventOptions);\n element.removeEventListener('focus', this.enterHandler, this.passiveCapturingEventOptions);\n element.removeEventListener('mouseleave', this.leaveHandler, this.passiveCapturingEventOptions);\n\n element.removeEventListener('mousedown', this.mousedownHandler, this.passiveEventOptions);\n element.removeEventListener('touchstart', this.mousedownHandler, this.passiveEventOptions);\n\n if (this.platform.isBrowser) {\n window.removeEventListener('mouseup', this.mouseupHandler);\n window.removeEventListener('touchend', this.touchendHandler);\n }\n }\n\n public trackRow = (row: CalendarCell[]) => row;\n\n /** Called when a cell is clicked. */\n public cellClicked(cell: CalendarCell, event: MouseEvent): void {\n // Ignore \"clicks\" that are actually canceled drags (eg the user dragged\n // off and then went back to this cell to undo).\n if (this.didDragSinceMouseDown) {\n return;\n }\n\n if (cell.enabled) {\n this.selectedValueChange.emit({ value: cell.value, event });\n }\n }\n\n public emitActiveDateChange(cell: CalendarCell, event: FocusEvent): void {\n if (cell.enabled) {\n this.activeDateChange.emit({ value: cell.value, event });\n }\n }\n\n /** Returns whether a cell should be marked as selected. */\n public isSelected(value: number): boolean {\n return this.startValue === value || this.endValue === value;\n }\n\n /** Returns whether a cell is active. */\n public isActiveCell(rowIndex: number, colIndex: number): boolean {\n let cellNumber = rowIndex * this.numCols + colIndex;\n\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this.firstRowOffset;\n }\n\n return cellNumber == this.activeCell;\n }\n\n public focusActiveCell(movePreview = true): void {\n const activeCell: HTMLElement | null = this.elementRef.nativeElement.querySelector(\n '.active',\n );\n\n if (activeCell) {\n if (!movePreview) {\n this.skipNextFocus = true;\n }\n\n activeCell.focus();\n }\n }\n\n /** Focuses the active cell after change detection has run and the microtask queue is empty. */\n public scheduleFocusActiveCellAfterViewChecked(): void {\n this.focusActiveCellAfterViewChecked = true;\n }\n\n /** Gets whether a value is the start of the main range. */\n public isRangeStart(value: number): boolean {\n return this.isStart(value, this.startValue, this.endValue);\n }\n\n /** Gets whether a value is the end of the main range. */\n public isRangeEnd(value: number): boolean {\n return this.isEnd(value, this.startValue, this.endValue);\n }\n\n /** Gets whether a value is within the currently-selected range. */\n public isCellInRange(value: number): boolean {\n return this.isInRange(value, this.startValue, this.endValue, this.isRange);\n }\n\n /** Gets whether a value is the start of the preview range. */\n public isPreviewStart(value: number): boolean {\n return this.isStart(value, this.previewStart, this.previewEnd);\n }\n\n /** Gets whether a value is the end of the preview range. */\n public isPreviewEnd(value: number): boolean {\n return this.isEnd(value, this.previewStart, this.previewEnd);\n }\n\n /** Gets whether a value is inside the preview range. */\n public isInPreview(value: number): boolean {\n return this.isInRange(value, this.previewStart, this.previewEnd, this.isRange);\n }\n\n /** Gets ids of aria descriptions for the start and end of a date range. */\n public getDescribedby(value: number): string | null {\n if (!this.isRange) {\n return null;\n }\n\n if (this.startValue === value && this.endValue === value) {\n return `${this.startDateLabelId} ${this.endDateLabelId}`;\n } else if (this.startValue === value) {\n return this.startDateLabelId;\n } else if (this.endValue === value) {\n return this.endDateLabelId;\n }\n\n return null;\n }\n\n /**\n * Event handler for when the user enters an element\n * inside the calendar body (e.g. by hovering in or focus).\n */\n private enterHandler = (event: Event) => {\n if (this.skipNextFocus && event.type === 'focus') {\n this.skipNextFocus = false;\n return;\n }\n\n // We only need to hit the zone when we're selecting a range.\n if (event.target && this.isRange) {\n const cell = this.getCellFromElement(event.target as HTMLElement);\n\n if (!cell?.enabled) {\n return;\n }\n \n if (cell) {\n this.ngZone.run(() => this.previewChange.emit({ value: cell.enabled ? cell : null, event }));\n }\n }\n };\n\n private touchmoveHandler = (event: TouchEvent) => {\n if (!this.isRange) return;\n\n const target = this.getActualTouchTarget(event);\n const cell = target ? this.getCellFromElement(target as HTMLElement) : null;\n\n if (!cell?.enabled) {\n return;\n }\n\n if (target !== event.target) {\n this.didDragSinceMouseDown = true;\n }\n\n // If the initial target of the touch is a date cell, prevent default so\n // that the move is not handled as a scroll.\n if (this.getCellElement(event.target as HTMLElement)) {\n event.preventDefault();\n }\n\n this.ngZone.run(() => this.previewChange.emit({value: cell?.enabled ? cell : null, event}));\n };\n\n /**\n * Event handler for when the user's pointer leaves an element\n * inside the calendar body (e.g. by hovering out or blurring).\n */\n private leaveHandler = (event: Event) => {\n // We only need to hit the zone when we're selecting a range.\n if (this.previewEnd !== null && this.isRange) {\n if (event.type !== 'blur') {\n this.didDragSinceMouseDown = true;\n }\n\n const cell = this.getCellFromElement(event.target as HTMLElement);\n\n if (!cell?.enabled) {\n return;\n }\n\n // Only reset the preview end value when leaving cells. This looks better, because\n // we have a gap between the cells and the rows and we don't want to remove the\n // range just for it to show up again when the user moves a few pixels to the side.\n if (\n event.target &&\n cell &&\n !(\n (event as MouseEvent).relatedTarget &&\n this.getCellFromElement((event as MouseEvent).relatedTarget as HTMLElement)\n )\n ) {\n this.ngZone.run(() => this.previewChange.emit({ value: null, event }));\n }\n }\n };\n\n /**\n * Triggered on mousedown or touchstart on a date cell.\n * Respsonsible for starting a drag sequence.\n */\n private mousedownHandler = (event: Event) => {\n if (!this.isRange) return;\n\n this.didDragSinceMouseDown = false;\n // Begin a drag if a cell within the current range was targeted.\n const cell = event.target && this.getCellFromElement(event.target as HTMLElement);\n\n if (!cell || !this.isCellInRange(cell.compareValue)) {\n return;\n }\n\n this.ngZone.run(() => {\n this.dragStarted.emit({\n value: cell.rawValue,\n event,\n });\n });\n };\n\n /** Triggered on mouseup anywhere. Respsonsible for ending a drag sequence. */\n private mouseupHandler = (event: Event) => {\n if (!this.isRange) return;\n\n const cellElement = this.getCellElement(event.target as HTMLElement);\n if (!cellElement) {\n // Mouseup happened outside of datepicker. Cancel drag.\n this.ngZone.run(() => {\n this.dragEnded.emit({value: null, event});\n });\n return;\n }\n\n // if (cellElement.closest('.calendar-body') !== this.elementRef.nativeElement) {\n // // Mouseup happened inside a different month instance.\n // // Allow it to handle the event.\n // return;\n // }\n\n this.ngZone.run(() => {\n const cell = this.getCellFromElement(cellElement);\n\n this.dragEnded.emit({value: cell?.rawValue ?? null, event});\n });\n };\n\n /** Triggered on touchend anywhere. Respsonsible for ending a drag sequence. */\n private touchendHandler = (event: TouchEvent) => {\n const target = this.getActualTouchTarget(event);\n\n if (target) {\n this.mouseupHandler({ target } as unknown as Event);\n }\n };\n\n /** Finds the CalendarCell that corresponds to a DOM node. */\n private getCellFromElement(element: HTMLElement): CalendarCell | null {\n const cell = this.getCellElement(element);\n\n if (cell) {\n const row = cell.getAttribute('data-row');\n const col = cell.getAttribute('data-col');\n\n if (row && col) {\n return this.rows[parseInt(row)][parseInt(col)];\n }\n }\n\n return null;\n }\n\n /**\n * Gets the date table cell element that is or contains the specified element.\n * Or returns null if element is not part of a date cell.\n */\n private getCellElement(element: HTMLElement): HTMLElement | null {\n let cell: HTMLElement | undefined;\n if (this.isTableCell(element)) {\n cell = element;\n } else if (this.isTableCell(element.parentNode)) {\n cell = element.parentNode as HTMLElement;\n } else if (this.isTableCell(element.parentNode?.parentNode)) {\n cell = element.parentNode!.parentNode as HTMLElement;\n }\n\n return cell?.getAttribute('data-row') != null ? cell : null;\n }\n\n /** Checks whether a node is a table cell element. */\n private isTableCell(node: Node | undefined | null): node is HTMLTableCellElement {\n return node?.nodeName === 'TD';\n }\n\n /** Checks whether a value is the start of a range. */\n private isStart(value: number, start: number | null, end: number | null): boolean {\n return end !== null && start !== end && value < end && value === start;\n }\n\n /** Checks whether a value is the end of a range. */\n private isEnd(value: number, start: number | null, end: number | null): boolean {\n return start !== null && start !== end && value >= start && value === end;\n }\n\n private isInRange(\n value: number,\n start: number | null,\n end: number | null,\n rangeEnabled: boolean,\n ): boolean {\n return (\n rangeEnabled &&\n start !== null &&\n end !== null &&\n start !== end &&\n value >= start &&\n value <= end\n );\n }\n\n\n /**\n * Extracts the element that actually corresponds to a touch event's location\n * (rather than the element that initiated the sequence of touch events).\n */\n private getActualTouchTarget(event: TouchEvent): Element | null {\n const touchLocation = event.changedTouches[0];\n return document.elementFromPoint(touchLocation.clientX, touchLocation.clientY);\n }\n\n}\n","@if (firstRowOffset < labelMinRequiredCells) {\n <tr aria-hidden=\"true\">\n <td class=\"calendar-body-label\"\n [attr.colspan]=\"numCols\"\n [style.paddingTop]=\"cellPadding\"\n [style.paddingBottom]=\"cellPadding\">\n {{ label }}\n </td>\n </tr>\n}\n\n@for (row of rows; track trackRow(row); let rowIndex = $index) {\n <tr role=\"row\">\n @if (rowIndex === 0 && firstRowOffset) {\n <td\n class=\"calendar-body-label\"\n [attr.colspan]=\"firstRowOffset\"\n [style.paddingTop]=\"cellPadding\"\n [style.paddingBottom]=\"cellPadding\">\n {{ firstRowOffset >= labelMinRequiredCells ? label : ''}}\n </td>\n }\n\n @for (item of row; track item; let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"calendar-body-cell-container\"\n [style.width]=\"cellWidth\"\n [style.paddingTop]=\"cellPadding\"\n [style.paddingBottom]=\"cellPadding\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-col]=\"colIndex\"\n >\n <button\n type=\"button\"\n class=\"calendar-body-cell\"\n [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.disabled]=\"!item.enabled\"\n [class.selected]=\"isSelected(item.compareValue)\"\n [class.active]=\"isActiveCell(rowIndex, colIndex)\"\n [class.today]=\"todayValue === item.compareValue\"\n [class.range-start]=\"isRangeStart(item.compareValue)\"\n [class.range-end]=\"isRangeEnd(item.compareValue)\"\n [class.in-range]=\"isCellInRange(item.compareValue)\"\n [class.in-preview]=\"isInPreview(item.compareValue)\"\n [class.preview-start]=\"isPreviewStart(item.compareValue)\"\n [class.preview-end]=\"isPreviewEnd(item.compareValue)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [attr.aria-pressed]=\"isSelected(item.compareValue)\"\n [attr.aria-current]=\"todayValue === item.compareValue ? 'date' : null\"\n [attr.aria-describedby]=\"getDescribedby(item.compareValue)\"\n (click)=\"cellClicked(item, $event)\"\n (focus)=\"emitActiveDateChange(item, $event)\">\n <span class=\"calendar-body-cell-content focus-indicator\">\n {{ item.displayValue }}\n </span>\n\n <span class=\"calendar-body-cell-preview\" aria-hidden=\"true\"></span>\n </button>\n </td>\n }\n </tr>\n}\n\n<span [id]=\"startDateLabelId\" class=\"calendar-body-hidden-label\">{{ startDateAccessibleName }}</span>\n\n<span [id]=\"endDateLabelId\" class=\"calendar-body-hidden-label\">{{ endDateAccessibleName }}</span>\n","import { Injectable } from '@angular/core';\n\nimport { ValidatorFn, AbstractControl, ValidationErrors } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class IpiDatepickerService {\n\n public DAYS_PER_WEEK = 7;\n\n public yearsPerRow = 4;\n public yearsPerPage = 24;\n\n private dateLocale = 'en-US';\n\n public formatter = new Intl.DateTimeFormat(this.dateLocale, {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n });\n\n public dateFormats = { \n display: {\n dateInput: { year: 'numeric', month: 'numeric', day: 'numeric' },\n monthLabel: { month: 'short' },\n monthYearLabel: { year: 'numeric', month: 'short' },\n dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\n monthYearA11yLabel: { year: 'numeric', month: 'long' },\n },\n }\n\n public today(): Date {\n return new Date();\n }\n\n public getDate(date: Date): number {\n return date.getDate();\n }\n\n public getMonth(date: Date): number {\n return date.getMonth();\n }\n\n public getYear(date: Date): number {\n return date.getFullYear();\n }\n\n public getDayOfWeek(date: Date): number {\n return date.getDay();\n }\n\n public getDateLocale(): string {\n return this.dateLocale;\n }\n\n public setDateLocale(value: string): void {\n this.formatter = new Intl.DateTimeFormat(value, {\n month: '2-digit',\n day: '2-digit',\n year: 'numeric',\n })\n\n this.dateLocale = value;\n }\n\n public getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n const dtf = new Intl.DateTimeFormat(this.dateLocale, { month: style, timeZone: 'utc' });\n\n return this.range(12, i => this.format(dtf, new Date(2017, i, 1)));\n }\n\n public getFirstDayOfWeek(): number {\n if (typeof Intl !== 'undefined' && Intl.Locale) {\n const locale = new Intl.Locale(this.dateLocale) as {\n getWeekInfo?: () => {firstDay: number};\n weekInfo?: {firstDay: number};\n };\n\n // Some browsers implement a `getWeekInfo` method while others have a `weekInfo` getter.\n // Note that this isn't supported in all browsers so we need to null check it.\n const firstDay = (locale.getWeekInfo?.() || locale.weekInfo)?.firstDay ?? 0;\n\n // `weekInfo.firstDay` is a number between 1 and 7 where, starting from Monday,\n // whereas our representation is 0 to 6 where 0 is Sunday so we need to normalize it.\n return firstDay === 7 ? 0 : firstDay;\n }\n\n // Default to Sunday if the browser doesn't provide the week information.\n return 0;\n }\n\n public getValidDateOrNull(obj: unknown): Date | null {\n return this.isDateInstance(obj) && this.isValid(obj as Date) ? (obj as Date) : null;\n }\n\n public getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n const dtf = new Intl.DateTimeFormat(this.dateLocale, { weekday: style, timeZone: 'utc'});\n\n return this.range(7, i => this.format(dtf, new Date(2017, 0, i + 1)));\n }\n\n public getDateNames(): string[] {\n const dtf = new Intl.DateTimeFormat(this.dateLocale, {day: 'numeric', timeZone: 'utc'});\n\n return this.range(31, i => this.format(dtf, new Date(2017, 0, i + 1)));\n }\n\n public getYearName(date: Date): string {\n const dtf = new Intl.DateTimeFormat(this.dateLocale, {year: 'numeric', timeZone: 'utc'});\n\n return this.format(dtf, date);\n }\n\n public getNumDaysInMonth(date: Date): number {\n return this.getDate(\n this.createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0),\n );\n }\n\n public createDate(year: number, month: number, date: number): Date {\n // Check for invalid month and date (except upper bound on date which we have to check after\n // creating the Date).\n if (month < 0 || month > 11) {\n throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n }\n\n if (date < 1) {\n throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n }\n\n let result = this.createDateWithOverflow(year, month, date);\n // Check that the date wasn't above the upper bound for the month, causing the month to overflow\n if (result.getMonth() != month) {\n throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n }\n\n return result;\n }\n\n public addCalendarDays(date: Date, days: number): Date {\n return this.createDateWithOverflow(\n this.getYear(date),\n this.getMonth(date),\n this.getDate(date) + days,\n );\n }\n\n public addCalendarMonths(date: Date, months: number): Date {\n let newDate = this.createDateWithOverflow(\n this.getYear(date),\n this.getMonth(date) + months,\n this.getDate(date),\n );\n\n // It's possible to wind up in the wrong month if the original month has more days than the new\n // month. In this case we want to go to the last day of the desired month.\n // Note: the additional + 12 % 12 ensures we end up with a positive number, since JS % doesn't\n // guarantee this.\n if (this.getMonth(newDate) != (((this.getMonth(date) + months) % 12) + 12) % 12) {\n newDate = this.createDateWithOverflow(this.getYear(newDate), this.getMonth(newDate), 0);\n }\n\n return newDate;\n }\n\n public addCalendarYears(date: Date, years: number): Date {\n return this.addCalendarMonths(date, years * 12);\n }\n\n public setTime(date: Date, hours: number, minutes: number): Date {\n if (!this.isValid(date)) {\n throw new Error(\"Invalid date provided\");\n }\n\n if (hours < 0 || hours > 23) {\n throw new Error(\"Invalid hours provided, must be between 0 and 23\");\n }\n\n if (minutes < 0 || minutes > 59) {\n throw new Error(\"Invalid minutes provided, must be between 0 and 59\");\n }\n\n const updatedDate = new Date(date);\n\n updatedDate.setHours(hours);\n updatedDate.setMinutes(minutes);\n\n return updatedDate;\n }\n\n public sameDate(first: Date | null, second: Date | null): boolean {\n if (first && second) {\n let firstValid = this.isValid(first);\n let secondValid = this.isValid(second);\n\n if (firstValid && secondValid) {\n return !this.compareDate(first, second);\n }\n\n return firstValid == secondValid;\n }\n\n return first == second;\n }\n\n /**\n * Compares two dates.\n * @param first The first date to compare.\n * @param second The second date to compare.\n * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n * a number greater than 0 if the first date is later.\n */\n public compareDate(first: Date, second: Date): number {\n return (\n this.getYear(first) - this.getYear(second) ||\n this.getMonth(first) - this.getMonth(second) ||\n this.getDate(first) - this.getDate(second)\n );\n }\n\n public deserialize(value: any): Date | null {\n if (value == null || (this.isDateInstance(value) && this.isValid(value))) {\n return value;\n }\n return this.invalid();\n }\n\n public clampDate(date: Date, min?: Date | null, max?: Date | null): Date {\n if (min && this.compareDate(date, min) < 0) {\n return min;\n }\n\n if (max && this.compareDate(date, max) > 0) {\n return max;\n }\n\n return date;\n }\n\n public formatDate(date: Date, displayFormat: Object): string {\n if (!this.isValid(date)) {\n throw Error('DatepickerService: Cannot format invalid date.');\n }\n\n const dtf = new Intl.DateTimeFormat(this.dateLocale, {...displayFormat, timeZone: 'utc'});\n return this.format(dtf, date);\n }\n\n public minValidator(minDate: Date): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const controlValue = control.value;\n \n const min = this.getValidDateOrNull(minDate);\n\n return !min || !controlValue || this.compareDate(min, controlValue) <= 0\n ? null\n : { 'datepickerMin': { min, actual: controlValue } };\n };\n }\n\n public maxValidator(maxDate: Date): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const controlValue = control.value;\n\n const max = this.getValidDateOrNull(maxDate);\n\n return !max || !controlValue || this.compareDate(max, controlValue) >= 0\n ? null\n : { 'datepickerMax': { max, actual: controlValue } };\n };\n }\n\n /** Creates a date but allows the month and date to overflow. */\n private createDateWithOverflow(year: number, month: number, date: number) {\n // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n // To work around this we use `setFullYear` and `setHours` instead.\n const d = new Date();\n\n d.setFullYear(year, month, date);\n d.setHours(0, 0, 0, 0);\n\n return d;\n }\n\n private format(dtf: Intl.DateTimeFormat, date: Date) {\n // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\n // To work around this we use `setUTCFullYear` and `setUTCHours` instead.\n const d = new Date();\n\n d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\n return dtf.format(d);\n }\n\n private isDateInstance(obj: any) {\n return obj instanceof Date;\n }\n\n private isValid(date: Date) {\n return !isNaN(date.getTime());\n }\n\n private invalid(): Date {\n return new Date(NaN);\n }\n\n public getActiveOffset<D>(\n activeDate: Date,\n minDate: Date | null,\n maxDate: Date | null,\n ): number {\n const activeYear = this.getYear(activeDate);\n\n return this.positiveModulo(activeYear - this.getStartingYear(minDate, maxDate), this.yearsPerPage);\n }\n\n private getStartingYear<D>(\n minDate: Date| null,\n maxDate: Date | null,\n ): number {\n let startingYear = 0;\n\n if (maxDate) {\n const maxYear = this.getYear(maxDate);\n \n startingYear = maxYear - this.yearsPerPage + 1;\n } else if (minDate) {\n startingYear = this.getYear(minDate);\n }\n\n return startingYear;\n }\n \n public positiveModulo(a: number, b: number): number {\n return ((a % b) + b) % b;\n }\n\n public isSameMultiYearView<D>(\n date1: Date,\n date2: Date,\n minDate: Date | null,\n maxDate: Date | null,\n ): boolean {\n const year1 = this.getYear(date1);\n const year2 = this.getYear(date2);\n\n const startingYear = this.getStartingYear(minDate, maxDate);\n\n return (Math.floor((year1 - startingYear) / this.yearsPerPage) === Math.floor((year2 - startingYear) / this.yearsPerPage));\n }\n\n private range<T>(length: number, valueFunction: (index: number) => T): T[] {\n const valuesArray = Array(length);\n \n for (let i = 0; i < length; i++) {\n valuesArray[i] = valueFunction(i);\n }\n\n return valuesArray;\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { Subscription } from 'rxjs';\n\nimport { DateRange } from '../../datepicker.component';\n\nimport { CalendarBody, CalendarCell } from '../calendar-body/calendar-body.component';\n\nimport { IpiDatepickerService } from '../../datepicker-service';\n\n@Component({\n selector: 'ipi-calendar-year-view',\n templateUrl: './year-view.component.html',\n styleUrls: ['./year-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n CalendarBody,\n ReactiveFormsModule,\n ],\n})\n\nexport class IpiCalendarYearView {\n\n constructor(\n public datePickerService: IpiDatepickerService,\n private changeDetectorRef: ChangeDetectorRef) {\n this._activeDate = this.datePickerService.today();\n }\n\n /** The body of calendar table */\n @ViewChild(CalendarBody) CalendarBody!: CalendarBody;\n\n @Input()\n public get activeDate(): Date {\n return this._activeDate;\n }\n public set activeDate(value: Date) {\n let oldActiveDate = this._activeDate;\n\n const validDate =\n this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value)) ||\n this.datePickerService.today();\n\n this._activeDate = this.datePickerService.clampDate(validDate, this.minDate, this.maxDate);\n\n if (this.datePickerService.getYear(oldActiveDate) !== this.datePickerService.getYear(this._activeDate)) {\n this.init();\n }\n }\n\n @Input()\n public get selected(): DateRange| Date | null {\n return this._selected;\n }\n public set selected(value: DateRange | Date | null) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value));\n }\n\n this.setSelectedMonth(value);\n }\n\n @Input()\n public get minDate(): Date | null {\n return this._minDate;\n }\n public set minDate(value: Date | null) {\n this._minDate = this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value));\n }\n\n @Input()\n public get maxDate(): Date | null {\n return this._maxDate;\n }\n public set maxDate(value: Date | null) {\n this._maxDate = this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value));\n }\n\n /** Emits when a new month is selected. */\n @Output() selectedChange: EventEmitter<Date> = new EventEmitter<Date>();\n\n /** Emits the selected month. This doesn't imply a change on the selected date */\n @Output() monthSelected: EventEmitter<Date> = new EventEmitter<Date>();\n\n /** Emits when any date is activated. */\n @Output() activeDateChange: EventEmitter<Date> = new EventEmitter<Date>();\n\n /** Grid of calendar cells representing the months of the year. */\n public months!: CalendarCell[][];\n\n /**\n * The month in this year that the selected Date falls on.\n * Null if the selected Date is in a different year.\n */\n public selectedMonth!: number | null;\n\n /** The label for this year (e.g. \"2017\"). */\n public yearLabel!: string;\n\n /** The month in this year that today falls on. Null if today is in a different year. */\n public todayMonth!: number | null;\n\n private _activeDate: Date;\n private _minDate!: Date | null;\n private _maxDate!: Date | null;\n private _selected!: DateRange | Date | null;\n\n /** Flag used to filter out space/enter keyup events that originated outside of the view. */\n private selectionKeyPressed!: boolean;\n\n private dateFormats = {\n dateInput: null,\n display: {\n dateInput: { year: 'numeric', month: 'numeric', day: 'numeric' },\n monthLabel: { month: 'short' },\n monthYearLabel: { year: 'numeric', month: 'short' },\n dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\n monthYearA11yLabel: { year: 'numeric', month: 'long' },\n },\n }\n\n public ngAfterContentInit(): void {\n this.init();\n }\n\n /** Initializes this year view. */\n public init(): void {\n this.setSelectedMonth(this.selected);\n\n this.todayMonth = this.getMonthInCurrentYear(this.datePickerService.today());\n\n this.yearLabel = this.datePickerService.getYearName(this.activeDate);\n\n let monthNames = this.datePickerService.getMonthNames('short');\n\n // First row of months only contains 5 elements so we can fit the year label on the same row.\n this.months = [ [0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]\n .map(row => row.map(month => this.createCellForMonth(month, monthNames[month])));\n this.changeDetectorRef.markForCheck();\n }\n\n /** Handles when a new month is selected. */\n public onMonthSelected(event: any): void {\n const month = event.value;\n\n const selectedMonth = this.datePickerService.createDate(\n this.datePickerService.getYear(this.activeDate),\n month,\n 1,\n );\n\n this.monthSelected.emit(selectedMonth);\n\n const selectedDate = this.getDateFromMonth(month);\n this.selectedChange.emit(selectedDate);\n }\n\n /**\n * Takes the index of a calendar body cell wrapped in an event as argument. For the date that\n * corresponds to the given cell, set `activeDate` to that date and fire `activeDateChange` with\n * that date.\n *\n * This function is used to match each component's model of the active date with the calendar\n * body cell that was focused. It updates its value of `activeDate` synchronously and updates the\n * parent's value asynchronously via the `activeDateChange` event. The child component receives an\n * updated value asynchronously via the `activeCell` Input.\n */\n public updateActiveDate(event: any): void {\n const month = event.value;\n const oldActiveDate = this._activeDate;\n\n this.activeDate = this.getDateFromMonth(month);\n\n if (this.datePickerService.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n }\n\n /** Handles keydown events on the calendar body when calendar is in year view. */\n public handleCalendarBodyKeydown(event: KeyboardEvent): void {\n const oldActiveDate = this._activeDate;\n\n switch (event.code) {\n case 'ArrowLeft':\n this.activeDate = this.datePickerService.addCalendarMonths(this._activeDate, -1);\n break;\n case 'ArrowRight':\n this.activeDate = this.datePickerService.addCalendarMonths(this._activeDate, 1);\n break;\n case 'ArrowUp':\n this.activeDate = this.datePickerService.addCalendarMonths(this._activeDate, -4);\n break;\n case 'ArrowDown':\n this.activeDate = this.datePickerService.addCalendarMonths(this._activeDate, 4);\n break;\n case 'Home':\n this.activeDate = this.datePickerService.addCalendarMonths(\n this._activeDate,\n -this.datePickerService.getMonth(this._activeDate),\n );\n break;\n case 'End':\n this.activeDate = this.datePickerService.addCalendarMonths(\n this._activeDate,\n 11 - this.datePickerService.getMonth(this._activeDate),\n );\n break;\n case 'PageUp':\n this.activeDate = this.datePickerService.addCalendarYears(\n this._activeDate,\n event.altKey ? -10 : -1,\n );\n break;\n case 'PageDown':\n this.activeDate = this.datePickerService.addCalendarYears(\n this._activeDate,\n event.altKey ? 10 : 1,\n );\n break;\n case 'Enter':\n case 'Space':\n // Note that we only prevent the default action here while the selection happens in\n // `keyup` below. We can't do the selection here, because it can cause the calendar to\n // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n // because it's too late (see #23305).\n this.selectionKeyPressed = true;\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this.datePickerService.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n this.focusActiveCellAfterViewChecked();\n }\n\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Handles keyup events on the calendar body when calendar is in year view. */\n public handleCalendarBodyKeyup(event: KeyboardEvent): void {\n if (event.code === 'Space' || event.code === 'Enter') {\n if (this.selectionKeyPressed) {\n this.onMonthSelected({ value: this.datePickerService.getMonth(this._activeDate), event });\n }\n\n this.selectionKeyPressed = false;\n }\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n public focusActiveCell(): void {\n this.CalendarBody.focusActiveCell();\n }\n\n /** Schedules the matCalendarBody to focus the active cell after change detection has run */\n public focusActiveCellAfterViewChecked(): void {\n this.CalendarBody.scheduleFocusActiveCellAfterViewChecked();\n }\n\n /**\n * Gets the month in this year that the given Date falls on.\n * Returns null if the given Date is in another year.\n */\n private getMonthInCurrentYear(date: Date | null): number | null {\n return date && this.datePickerService.getYear(date) == this.datePickerService.getYear(this.activeDate)\n ? this.datePickerService.getMonth(date)\n : null;\n }\n\n /**\n * Takes a month and returns a new date in the same day and year as the currently active date.\n * The returned date will have the same month as the argument date.\n */\n private getDateFromMonth(month: number): Date {\n const normalizedDate = this.datePickerService.createDate(\n this.datePickerService.getYear(this.activeDate),\n month,\n 1,\n );\n\n const daysInMonth = this.datePickerService.getNumDaysInMonth(normalizedDate);\n\n return this.datePickerService.createDate(\n this.datePickerService.getYear(this.activeDate),\n month,\n Math.min(this.datePickerService.getDate(this.activeDate), daysInMonth),\n );\n }\n\n /** Creates an MatCalendarCell for the given month. */\n private createCellForMonth(month: number, monthName: string) {\n const date = this.datePickerService.createDate(this.datePickerService.getYear(this.activeDate), month, 1);\n const ariaLabel = this.datePickerService.formatDate(date, this.dateFormats.display.monthYearA11yLabel);\n\n return new CalendarCell(\n month,\n monthName.toLocaleUpperCase(),\n ariaLabel,\n this.shouldEnableMonth(month),\n );\n }\n\n /** Whether the given month is enabled. */\n private shouldEnableMonth(month: number) {\n const activeYear = this.datePickerService.getYear(this.activeDate);\n\n if (month === undefined || month === null || this.isYearAndMonthAfterMaxDate(activeYear, month) || this.isYearAndMonthBeforeMinDate(activeYear, month)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Tests whether the combination month/year is after this.maxDate, considering\n * just the month and year of this.maxDate\n */\n private isYearAndMonthAfterMaxDate(year: number, month: number) {\n if (this.maxDate) {\n const maxYear = this.datePickerService.getYear(this.maxDate);\n const maxMonth = this.datePickerService.getMonth(this.maxDate);\n\n return year > maxYear || (year === maxYear && month > maxMonth);\n }\n\n return false;\n }\n\n /**\n * Tests whether the combination month/year is before this.minDate, considering\n * just the month and year of this.minDate\n */\n private isYearAndMonthBeforeMinDate(year: number, month: number) {\n if (this.minDate) {\n const minYear = this.datePickerService.getYear(this.minDate);\n const minMonth = this.datePickerService.getMonth(this.minDate);\n\n return year < minYear || (year === minYear && month < minMonth);\n }\n\n return false;\n }\n\n /** Sets the currently-selected month based on a model value. */\n private setSelectedMonth(value: DateRange | Date | null): void {\n if (value instanceof DateRange) {\n this.selectedMonth = \n this.getMonthInCurrentYear(value.start) || this.getMonthInCurrentYear(value.end);\n } else {\n this.selectedMonth = this.getMonthInCurrentYear(value);\n }\n }\n\n}\n","<table class=\"calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"calendar-table-header\">\n <tr>\n <th class=\"calendar-table-header-divider\" colspan=\"4\"></th>\n </tr>\n </thead>\n\n <tbody calendar-body\n [label]=\"yearLabel\"\n [rows]=\"months\"\n [todayValue]=\"todayMonth!\"\n [startValue]=\"selectedMonth!\"\n [endValue]=\"selectedMonth!\"\n [labelMinRequiredCells]=\"2\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"datePickerService.getMonth(activeDate)\"\n (selectedValueChange)=\"onMonthSelected($event)\"\n (activeDateChange)=\"updateActiveDate($event)\"\n (keyup)=\"handleCalendarBodyKeyup($event)\"\n (keydown)=\"handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n","import { Injectable } from \"@angular/core\";\n\nimport { IpiDatepickerService } from './datepicker-service';\n\nimport { DateRange } from './datepicker.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DefaultCalendarRangeStrategy {\n constructor(private datepickerService: IpiDatepickerService) {}\n\n public selectionFinished(date: Date, currentRange: DateRange): DateRange {\n let { start, end } = currentRange;\n\n if (start == null) {\n start = date;\n } else if (end == null && date && this.datepickerService.compareDate(date, start) >= 0) {\n end = date;\n } else {\n start = date;\n end = null;\n }\n\n return new DateRange(start, end);\n }\n\n public createPreview(activeDate: Date | null, currentRange: DateRange): DateRange {\n let start: Date | null = null;\n let end: Date | null = null;\n\n if (currentRange.start && !currentRange.end && activeDate) {\n start = currentRange.start;\n end = activeDate;\n }\n\n return new DateRange(start, end);\n }\n\n public createDrag(dragOrigin: Date, originalRange: DateRange, newDate: Date): DateRange | null {\n let start = originalRange.start;\n let end = originalRange.end;\n\n if (!start || !end) {\n // Can't drag from an incomplete range.\n return null;\n }\n\n const service = this.datepickerService;\n\n const isRange = service.compareDate(start, end) !== 0;\n const diffYears = service.getYear(newDate) - service.getYear(dragOrigin);\n const diffMonths = service.getMonth(newDate) - service.getMonth(dragOrigin);\n const diffDays = service.getDate(newDate) - service.getDate(dragOrigin);\n\n if (isRange && service.sameDate(dragOrigin, originalRange.start)) {\n start = newDate;\n // when selecting start date of range move only start date\n if (service.compareDate(newDate, end) > 0) {\n // if start date becomes after end date, move whole range\n end = service.addCalendarYears(end, diffYears);\n end = service.addCalendarMonths(end, diffMonths);\n end = service.addCalendarDays(end, diffDays);\n }\n } else if (isRange && service.sameDate(dragOrigin, originalRange.end)) {\n // when selecting end date of range move only end date\n end = newDate;\n if (service.compareDate(newDate, start) < 0) {\n // if end date becomes before start date, move whole range\n start = service.addCalendarYears(start, diffYears);\n start = service.addCalendarMonths(start, diffMonths);\n start = service.addCalendarDays(start, diffDays);\n }\n } else { \n // moving whole range if dragged from a middle date\n start = service.addCalendarYears(start, diffYears);\n start = service.addCalendarMonths(start, diffMonths);\n start = service.addCalendarDays(start, diffDays);\n end = service.addCalendarYears(end, diffYears);\n end = service.addCalendarMonths(end, diffMonths);\n end = service.addCalendarDays(end, diffDays);\n }\n\n return new DateRange(start, end);\n }\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, SimpleChanges, ViewChild } from '@angular/core';\n\nimport { hasModifierKey } from '@angular/cdk/keycodes';\n\nimport { IpiDatepickerService } from '../../datepicker-service';\n\nimport { CalendarBody, CalendarCell } from '../calendar-body/calendar-body.component';\n\nimport { DateRange, DateSelectionEvent } from '../../datepicker.component';\n\nimport { DefaultCalendarRangeStrategy } from '../../datepicker-selection-strategy.component';\n\n@Component({\n selector: 'ipi-calendar-month-view',\n templateUrl: './month-view-calendar.component.html',\n styleUrls: ['./month-view-calendar.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CalendarBody,\n ],\n})\n\nexport class IpiCalendarMonthView {\n\n constructor(\n public datepickerService: IpiDatepickerService,\n private changeDetectorRef: ChangeDetectorRef,\n private rangeSelectionStartegy: DefaultCalendarRangeStrategy) { \n this._activeDate = this.datepickerService.today();\n }\n\n @ViewChild(CalendarBody) calendarBody!: CalendarBody;\n\n @Input()\n public get activeDate(): Date {\n return this._activeDate;\n }\n public set activeDate(value: Date | null) {\n const oldActiveDate = this._activeDate;\n \n const validDate =\n this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value)) ||\n this.datepickerService.today();\n \n this._activeDate = this.datepickerService.clampDate(validDate, validDate, validDate);\n\n if (!this.hasSameMonthAndYear(oldActiveDate, this._activeDate)) {\n this.init();\n }\n }\n\n @Input()\n public get selected(): DateRange| Date | null {\n return this._selected;\n }\n public set selected(value: DateRange | Date | null) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value));\n }\n\n this.setRanges(this._selected);\n }\n\n @Input()\n public get minDate(): Date | null {\n return this._minDate;\n }\n public set minDate(value: Date | null) {\n this._minDate = this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value));\n }\n\n @Input()\n public get maxDate(): Date | null {\n return this._maxDate;\n }\n public set maxDate(value: Date | null) {\n this._maxDate = this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value));\n }\n\n @Input() activeDrag: DateSelectionEvent<Date> | null = null;\n\n @Output() dragStarted = new EventEmitter<DateSelectionEvent<Date>>();\n @Output() dragEnded = new EventEmitter<DateSelectionEvent<DateRange | null>>();\n\n @Output() activeDateChange: EventEmitter<Date> = new EventEmitter<Date>();\n\n @Output() userSelection: EventEmitter<DateSelectionEvent<Date | null>> =\n new EventEmitter<DateSelectionEvent<Date | null>>();\n\n @Output() selectedChange: EventEmitter<Date | null> = new EventEmitter<Date | null>();\n\n public monthLabel!: string;\n\n /** Grid of calendar cells representing the dates of the month. */\n public weeks!: CalendarCell[][];\n\n /** The number of blank cells in the first row before the 1st of the month. */\n public firstWeekOffset!: number;\n\n /** Start value of the currently-shown date range. */\n public rangeStart!: number | null;\n\n /** End value of the currently-shown date range. */\n public rangeEnd!: number | null;\n\n /** Start of the preview range. */\n public previewStart!: number | null;\n\n /** End of the preview range. */\n public previewEnd!: number | null;\n\n /** Whether the user is currently selecting a range of dates. */\n public isRange!: boolean;\n\n /** The date of the month that today falls on. Null if today is in another month. */\n public todayDate!: number | null;\n\n public weekdays!: { long: string; narrow: string; id: number }[];\n\n private selectionKeyPressed!: boolean;\n\n private _minDate!: Date | null;\n\n private _maxDate!: Date | null;\n\n private _selected!: DateRange | Date | null;\n\n private _activeDate!: Date;\n\n private uniqueIdCounter = 0;\n\n public ngOnChanges(changes: SimpleChanges): void {\n const comparisonChange = changes['comparisonStart'] || changes['comparisonEnd'];\n\n if (comparisonChange && !comparisonChange.firstChange) {\n this.setRanges(this.selected);\n }\n\n if (changes['activeDrag']) {\n this.clearPreview();\n }\n }\n\n public ngAfterContentInit(): void {\n this.init();\n }\n\n public getActiveCell(): number {\n return this.datepickerService.getDate(this.activeDate) - 1;\n }\n\n public updateActiveDate(event: DateSelectionEvent<number>): void {\n const month = event.value;\n const oldActiveDate = this._activeDate;\n this.activeDate = this.getDateFromDayOfMonth(month);\n\n if (this.datepickerService.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this._activeDate);\n }\n }\n\n /** Handles when a new date is selected. */\n public dateSelected(event: DateSelectionEvent<number>): void {\n const date = event.value;\n const selectedDate = this.getDateFromDayOfMonth(date);\n\n let rangeStartDate: number | null;\n let rangeEndDate: number | null;\n\n if (this._selected instanceof DateRange) {\n rangeStartDate = this.getDateInCurrentMonth(this._selected.start);\n rangeEndDate = this.getDateInCurrentMonth(this._selected.end);\n } else {\n rangeStartDate = rangeEndDate = this.getDateInCurrentMonth(this._selected);\n }\n\n if (rangeStartDate !== date || rangeEndDate !== date) {\n this.selectedChange.emit(selectedDate);\n }\n\n this.userSelection.emit({ value: selectedDate, event: event.event });\n\n this.clearPreview();\n }\n\n public handleCalendarBodyKeydown(event: KeyboardEvent): void {\n const oldActiveDate = this._activeDate;\n\n switch (event.code) {\n case 'ArrowLeft':\n this.activeDate = this.datepickerService.addCalendarDays(this._activeDate, -1);\n break;\n case 'ArrowRight':\n this.activeDate = this.datepickerService.addCalendarDays(this._activeDate, 1);\n break;\n case 'ArrowUp':\n this.activeDate = this.datepickerService.addCalendarDays(this._activeDate, -7);\n break;\n case 'ArrowDown':\n this.activeDate = this.datepickerService.addCalendarDays(this._activeDate, 7);\n break;\n case 'Home':\n this.activeDate = this.datepickerService.addCalendarDays(\n this._activeDate,\n 1 - this.datepickerService.getDate(this._activeDate),\n );\n break;\n case 'End':\n this.activeDate = this.datepickerService.addCalendarDays(\n this._activeDate,\n this.datepickerService.getNumDaysInMonth(this._activeDate) -\n this.datepickerService.getDate(this._activeDate),\n );\n break;\n case 'PageUp':\n this.activeDate = event.altKey\n ? this.datepickerService.addCalendarYears(this._activeDate, -1)\n : this.datepickerService.addCalendarMonths(this._activeDate, -1);\n break;\n case 'PageDown':\n this.activeDate = event.altKey\n ? this.datepickerService.addCalendarYears(this._activeDate, 1)\n : this.datepickerService.addCalendarMonths(this._activeDate, 1);\n break;\n case 'Enter':\n case 'Space':\n this.selectionKeyPressed = true;\n\n // Prevent unexpected default actions such as form submission.\n // Note that we only prevent the default action here while the selection happens in\n // `keyup` below. We can't do the selection here, because it can cause the calendar to\n // reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`\n // because it's too late (see #23305).\n event.preventDefault();\n \n return;\n case 'Escape':\n // Abort the current range selection if the user presses escape mid-selection.\n if (this.previewEnd != null && !hasModifierKey(event)) {\n this.clearPreview();\n // If a drag is in progress, cancel the drag without changing the\n // current selection.\n if (this.activeDrag) {\n this.dragEnded.emit({ value: null, event });\n } else {\n this.selectedChange.emit(null);\n this.userSelection.emit({ value: null, event });\n }\n event.preventDefault();\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this.datepickerService.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n\n this.focusActiveCellAfterViewChecked();\n }\n\n event.preventDefault();\n }\n\n public previewChanged({ value: cell }: DateSelectionEvent<CalendarCell<Date> | null>) {\n if (this.rangeSelectionStartegy) {\n if (!this.selected) {\n return; \n }\n\n // We can assume that this will be a range, because preview\n // events aren't fired for single date selections.\n const value = (cell ? cell.rawValue! : null) as Date | null;\n\n const previewRange = this.rangeSelectionStartegy.createPreview(\n value,\n this.selected as DateRange,\n );\n\n this.previewStart = this.getCellCompareValue(previewRange.start);\n this.previewEnd = this.getCellCompareValue(previewRange.end);\n\n if (this.activeDrag && value) {\n const dragRange = this.rangeSelectionStartegy.createDrag?.(\n this.activeDrag.value,\n this.selected as DateRange,\n value,\n );\n\n if (dragRange) {\n this.previewStart = this.getCellCompareValue(dragRange.start);\n this.previewEnd = this.getCellCompareValue(dragRange.end);\n }\n }\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n public handleCalendarBodyKeyup(event: KeyboardEvent): void {\n if (event.code === 'Space' || event.code === 'Enter') {\n if (this.selectionKeyPressed && this.shouldEnableDate(this._activeDate)) {\n this.dateSelected({ value: this.datepickerService.getDate(this._activeDate), event });\n }\n\n this.selectionKeyPressed = false;\n }\n }\n\n public focusActiveCellAfterViewChecked(): void {\n this.calendarBody.scheduleFocusActiveCellAfterViewChecked();\n }\n\n private clearPreview() {\n this.previewStart = this.previewEnd = null;\n }\n\n /**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n */\n private getDateInCurrentMonth(date: Date | null): number | null {\n return date && this.hasSameMonthAndYear(date, this.activeDate)\n ? this.datepickerService.getDate(date)\n : null;\n }\n\n private init(): void {\n this.setRanges(this.selected);\n IpiDatepickerService\n this.todayDate = this.getCellCompareValue(this.datepickerService.today());\n\n this.monthLabel = this.datepickerService.dateFormats.display.monthLabel\n ? this.datepickerService.formatDate(this.activeDate, this.datepickerService.dateFormats.display.monthLabel)\n : this.datepickerService\n .getMonthNames('short')\n [this.datepickerService.getMonth(this.activeDate)].toLocaleUpperCase();\n\n let firstOfMonth = this.datepickerService.createDate(\n this.datepickerService.getYear(this.activeDate),\n this.datepickerService.getMonth(this.activeDate),\n 1,\n );\n\n this.firstWeekOffset =\n (this.datepickerService.DAYS_PER_WEEK +\n this.datepickerService.getDayOfWeek(firstOfMonth) -\n this.datepickerService.getFirstDayOfWeek()) %\n this.datepickerService.DAYS_PER_WEEK;\n\n this.initWeekdays();\n this.createWeekCells();\n }\n\n private setRanges(selectedValue: DateRange | Date | null) {\n if (selectedValue instanceof DateRange) {\n\n this.rangeStart = this.getCellCompareValue(selectedValue.start);\n this.rangeEnd = this.getCellCompareValue(selectedValue.end);\n\n this.isRange = true;\n } else if (selectedValue instanceof Date) {\n this.rangeStart = this.rangeEnd = this.getCellCompareValue(selectedValue);\n this.isRange = false;\n }\n }\n\n private getCellCompareValue(date: Date | null): number | null {\n if (date) {\n // We use the time since the Unix epoch to compare dates in this view, rather than the\n // cell values, because we need to support ranges that span across multiple months/years.\n const year = this.datepickerService.getYear(date);\n const month = this.datepickerService.getMonth(date);\n const day = this.datepickerService.getDate(date);\n return new Date(year, month, day).getTime();\n }\n\n return null;\n }\n\n private initWeekdays(): void {\n const firstDayOfWeek = this.datepickerService.getFirstDayOfWeek();\n\n const narrowWeekdays = this.datepickerService.getDayOfWeekNames('narrow');\n const longWeekdays = this.datepickerService.getDayOfWeekNames('long');\n\n // Rotate the labels for days of the week based on the configured first day of the week.\n let weekdays = longWeekdays.map((long, i) => {\n return { long, narrow: narrowWeekdays[i], id: this.uniqueIdCounter++ };\n });\n\n this.weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n }\n\n private createWeekCells(): void {\n const daysInMonth = this.datepickerService.getNumDaysInMonth(this.activeDate);\n const dateNames = this.datepickerService.getDateNames();\n\n this.weeks = [[]];\n\n for (let i = 0, cell = this.firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell == this.datepickerService.DAYS_PER_WEEK) {\n this.weeks.push([]);\n cell = 0;\n }\n\n const date = this.datepickerService.createDate(\n this.datepickerService.getYear(this.activeDate),\n this.datepickerService.getMonth(this.activeDate),\n i + 1,\n );\n\n const enabled = this.shouldEnableDate(date);\n const ariaLabel = this.datepickerService.formatDate(date, this.datepickerService.dateFormats.display.dateA11yLabel);\n\n this.weeks[this.weeks.length - 1].push(\n new CalendarCell<Date>(\n i + 1,\n dateNames[i],\n ariaLabel,\n enabled,\n this.getCellCompareValue(date)!,\n date,\n ),\n );\n }\n }\n\n private hasSameMonthAndYear(firstDate: Date | null, secondDate: Date | null): boolean {\n return !!(\n firstDate &&\n secondDate &&\n this.datepickerService.getMonth(firstDate) == this.datepickerService.getMonth(secondDate) &&\n this.datepickerService.getYear(firstDate) == this.datepickerService.getYear(secondDate)\n );\n }\n\n protected onDragEnded(event: DateSelectionEvent<Date | null>): void {\n if (!this.activeDrag) return;\n\n if (event.value) {\n // Propagate drag effect\n const dragDropResult = this.rangeSelectionStartegy?.createDrag?.(\n this.activeDrag.value,\n this.selected as DateRange,\n event.value,\n );\n \n if ((!dragDropResult?.end || !this.shouldEnableDate(dragDropResult.end)) || (!dragDropResult?.start || !this.shouldEnableDate(dragDropResult.start))) {\n return;\n }\n\n this.dragEnded.emit({value: dragDropResult, event: event.event});\n } else {\n this.dragEnded.emit({value: null, event: event.event});\n }\n }\n\n private shouldEnableDate(date: Date): boolean {\n return (\n !!date &&\n (!this.minDate || this.datepickerService.compareDate(date as any, this.minDate) >= 0) &&\n (!this.maxDate || this.datepickerService.compareDate(date as any, this.maxDate) <= 0)\n );\n }\n\n private getDateFromDayOfMonth(dayOfMonth: number): Date {\n return this.datepickerService.createDate(\n this.datepickerService.getYear(this.activeDate),\n this.datepickerService.getMonth(this.activeDate),\n dayOfMonth,\n );\n }\n\n}\n","<table class=\"calendar-table\" role=\"grid\">\n <thead class=\"calendar-table-header\">\n <tr>\n @for (day of weekdays; track day.id) {\n <th scope=\"col\">\n <span class=\"cdk-visually-hidden\">{{ day.long }}</span>\n\n <span aria-hidden=\"true\">{{ day.narrow }}</span>\n </th>\n }\n </tr>\n\n <tr aria-hidden=\"true\">\n <th class=\"calendar-table-header-divider\" colspan=\"7\"></th>\n </tr>\n </thead>\n\n <tbody calendar-body\n [label]=\"monthLabel\"\n [rows]=\"weeks\"\n [todayValue]=\"todayDate!\"\n [startValue]=\"rangeStart!\"\n [endValue]=\"rangeEnd!\"\n [previewStart]=\"previewStart\"\n [previewEnd]=\"previewEnd\"\n [isRange]=\"isRange\"\n [activeCell]=\"getActiveCell()\"\n [labelMinRequiredCells]=\"2\"\n (dragStarted)=\"dragStarted.emit($event)\"\n (dragEnded)=\"onDragEnded($event)\"\n (activeDateChange)=\"updateActiveDate($event)\"\n (selectedValueChange)=\"dateSelected($event)\"\n (previewChange)=\"previewChanged($event)\"\n (keyup)=\"handleCalendarBodyKeyup($event)\"\n (keydown)=\"handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { DateSelectionEvent } from '../../datepicker.component';\n\nimport { IpiDatepickerService } from '../../datepicker-service';\n\nimport { DateRange } from '../../datepicker.component';\n\nimport { CalendarCell, CalendarBody } from '../calendar-body/calendar-body.component';\n\n@Component({\n selector: 'ipi-calendar-multi-year-view',\n templateUrl: './multi-year-view.component.html',\n styleUrls: ['./multi-year-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n CalendarBody,\n ReactiveFormsModule,\n ],\n})\n\nexport class IpiCalendarMultiYearView {\n\n constructor(\n private changeDetectorRef: ChangeDetectorRef,\n private datePickerService: IpiDatepickerService)\n {\n this._activeDate = this.datePickerService.today();\n }\n\n /** Flag used to filter out space/enter keyup events that originated outside of the view. */\n private selectionKeyPressed!: boolean;\n\n /** The date to display in this multi-year view (everything other than the year is ignored). */\n @Input()\n public get activeDate(): Date {\n return this._activeDate;\n }\n public set activeDate(value: Date) {\n let oldActiveDate = this._activeDate;\n\n const validDate =\n this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value)) ||\n this.datePickerService.today();\n this._activeDate = this.datePickerService.clampDate(validDate, this.minDate, this.maxDate);\n\n if (!this.isSameMultiYearView(oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {\n this.init();\n }\n }\n\n @Input()\n public get selected(): DateRange | Date | null {\n return this._selected;\n }\n public set selected(value: DateRange | Date | null) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value));\n }\n\n this.setSelectedYear(value);\n }\n private _selected!: DateRange | Date | null;\n\n /** The minimum selectable date. */\n @Input()\n public get minDate(): Date | null {\n return this._minDate;\n }\n public set minDate(value: Date | null) {\n this._minDate = this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value));\n }\n\n /** The maximum selectable date. */\n @Input()\n public get maxDate(): Date | null {\n return this._maxDate;\n }\n public set maxDate(value: Date | null) {\n this._maxDate = this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value));\n }\n\n /** Emits when a new year is selected. */\n @Output() selectedChange: EventEmitter<Date> = new EventEmitter<Date>();\n\n /** Emits the selected year. This doesn't imply a change on the selected date */\n @Output() yearSelected: EventEmitter<Date> = new EventEmitter<Date>();\n\n /** Emits when any date is activated. */\n @Output() activeDateChange: EventEmitter<Date> = new EventEmitter<Date>();\n\n /** The body of calendar table */\n @ViewChild(CalendarBody) calendarBody!: CalendarBody;\n\n /** Grid of calendar cells representing the currently displayed years. */\n _years!: CalendarCell[][];\n\n /** The year that today falls on. */\n _todayYear!: number;\n\n /** The year of the selected date. Null if the selected date is null. */\n public selectedYear!: number | null;\n\n private _activeDate: Date;\n private _maxDate!: Date | null;\n private _minDate!: Date | null;\n\n public ngAfterContentInit(): void {\n this.init();\n }\n\n public init(): void {\n this._todayYear = this.datePickerService.getYear(this.datePickerService.today());\n\n // We want a range years such that we maximize the number of\n // enabled dates visible at once. This prevents issues where the minimum year\n // is the last item of a page OR the maximum year is the first item of a page.\n\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view.\n const activeYear = this.datePickerService.getYear(this._activeDate);\n const minYearOfPage = activeYear - this.datePickerService.getActiveOffset(this.activeDate, this.minDate, this.maxDate);\n\n this._years = [];\n \n for (let i = 0, row: number[] = []; i < this.datePickerService.yearsPerPage; i++) {\n row.push(minYearOfPage + i);\n \n if (row.length == this.datePickerService.yearsPerRow) {\n this._years.push(row.map(year => this.createCellForYear(year)));\n\n row = [];\n }\n }\n\n this.changeDetectorRef.markForCheck();\n }\n\n /** Handles when a new year is selected. */\n public onYearSelected(event: DateSelectionEvent<number>): void {\n const year = event.value;\n const selectedYear = this.datePickerService.createDate(year, 0, 1);\n const selectedDate = this.getDateFromYear(year);\n\n this.yearSelected.emit(selectedYear);\n this.selectedChange.emit(selectedDate);\n }\n\n /**\n * Takes the index of a calendar body cell wrapped in an event as argument. For the date that\n * corresponds to the given cell, set `activeDate` to that date and fire `activeDateChange` with\n * that date.\n *\n * This function is used to match each component's model of the active date with the calendar\n * body cell that was focused. It updates its value of `activeDate` synchronously and updates the\n * parent's value asynchronously via the `activeDateChange` event. The child component receives an\n * updated value asynchronously via the `activeCell` Input.\n */\n public updateActiveDate(event: DateSelectionEvent<number>): void {\n const year = event.value;\n const oldActiveDate = this._activeDate;\n\n this.activeDate = this.getDateFromYear(year);\n if (this.datePickerService.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n }\n\n /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n public handleCalendarBodyKeydown(event: KeyboardEvent): void {\n const oldActiveDate = this._activeDate;\n\n switch (event.code) {\n case 'ArrowLeft':\n this.activeDate = this.datePickerService.addCalendarYears(this._activeDate, -1);\n break;\n case 'ArrowRight':\n this.activeDate = this.datePickerService.addCalendarYears(this._activeDate, 1);\n break;\n case 'ArrowUp':\n this.activeDate = this.datePickerService.addCalendarYears(this._activeDate, - this.datePickerService.yearsPerRow);\n break;\n case 'ArrowDown':\n this.activeDate = this.datePickerService.addCalendarYears(this._activeDate, this.datePickerService.yearsPerRow);\n break;\n case 'Home':\n this.activeDate = this.datePickerService.addCalendarYears(\n this._activeDate,\n - this.datePickerService.getActiveOffset(this.activeDate, this.minDate, this.maxDate),\n );\n break;\n case 'End':\n this.activeDate = this.datePickerService.addCalendarYears(\n this._activeDate,\n this.datePickerService.yearsPerPage -\n this.datePickerService.getActiveOffset(this.activeDate, this.minDate, this.maxDate) -\n 1,\n );\n break;\n case 'PageUp':\n this.activeDate = this.datePickerService.addCalendarYears(\n this._activeDate,\n event.altKey ? - this.datePickerService.yearsPerPage * 10 : - this.datePickerService.yearsPerPage,\n );\n break;\n case 'PageDown':\n this.activeDate = this.datePickerService.addCalendarYears(\n this._activeDate,\n event.altKey ? this.datePickerService.yearsPerPage * 10 : this.datePickerService.yearsPerPage,\n );\n break;\n case 'Enter':\n case 'Space':\n this.selectionKeyPressed = true;\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n \n if (this.datePickerService.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this.focusActiveCellAfterViewChecked();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Handles keyup events on the calendar body when calendar is in multi-year view. */\n public handleCalendarBodyKeyup(event: KeyboardEvent): void {\n if (event.code === 'Space' || event.code === 'Enter') {\n if (this.selectionKeyPressed) {\n this.onYearSelected({ value: this.datePickerService.getYear(this._activeDate), event });\n }\n\n this.selectionKeyPressed = false;\n }\n }\n\n public getActiveCell(): number {\n return this.datePickerService.getActiveOffset(this.activeDate, this.minDate, this.maxDate);\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n public focusActiveCell(): void {\n this.calendarBody.focusActiveCell();\n }\n\n /** Focuses the active cell after change detection has run and the microtask queue is empty. */\n public focusActiveCellAfterViewChecked() {\n this.calendarBody.scheduleFocusActiveCellAfterViewChecked();\n }\n\n /**\n * Takes a year and returns a new date on the same day and month as the currently active date\n * The returned date will have the same year as the argument date.\n */\n private getDateFromYear(year: number) {\n const activeMonth = this.datePickerService.getMonth(this.activeDate);\n const daysInMonth = this.datePickerService.getNumDaysInMonth(this.datePickerService.createDate(year, activeMonth, 1));\n\n const normalizedDate = this.datePickerService.createDate(\n year,\n activeMonth,\n Math.min(this.datePickerService.getDate(this.activeDate), daysInMonth),\n );\n \n return normalizedDate;\n }\n\n /** Creates an CalendarCell for the given year. */\n private createCellForYear(year: number) {\n const date = this.datePickerService.createDate(year, 0, 1);\n const yearName = this.datePickerService.getYearName(date);\n\n return new CalendarCell(year, yearName, yearName, this.shouldEnableYear(year));\n }\n\n /** Whether the given year is enabled. */\n private shouldEnableYear(year: number): boolean {\n // disable if the year is greater than maxDate lower than minDate\n if (\n year === undefined ||\n year === null ||\n (this.maxDate && year > this.datePickerService.getYear(this.maxDate)) ||\n (this.minDate && year < this.datePickerService.getYear(this.minDate))\n ) {\n return false;\n }\n\n return true;\n }\n\n /** Sets the currently-highlighted year based on a model value. */\n private setSelectedYear(value: DateRange | Date | null) {\n this.selectedYear = null;\n\n if (value instanceof DateRange) {\n const displayValue = value.start || value.end;\n\n if (displayValue) {\n this.selectedYear = this.datePickerService.getYear(displayValue);\n }\n } else if (value) {\n this.selectedYear = this.datePickerService.getYear(value);\n }\n }\n\n private isSameMultiYearView(\n date1: Date,\n date2: Date,\n minDate: Date | null,\n maxDate: Date | null,\n ): boolean {\n const year1 = this.datePickerService.getYear(date1);\n const year2 = this.datePickerService.getYear(date2);\n const startingYear = this.getStartingYear(minDate, maxDate);\n return (\n Math.floor((year1 - startingYear) / this.datePickerService.yearsPerPage) ===\n Math.floor((year2 - startingYear) / this.datePickerService.yearsPerPage)\n );\n }\n \n private getStartingYear(\n minDate: Date | null,\n maxDate: Date | null,\n ): number {\n let startingYear = 0;\n if (maxDate) {\n const maxYear = this.datePickerService.getYear(maxDate);\n startingYear = maxYear - this.datePickerService.yearsPerPage + 1;\n } else if (minDate) {\n startingYear = this.datePickerService.getYear(minDate);\n }\n return startingYear;\n }\n\n}\n","<table class=\"calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"calendar-table-header\">\n <tr>\n <th class=\"calendar-table-header-divider\" colspan=\"4\"></th>\n </tr>\n </thead>\n\n <tbody calendar-body\n [rows]=\"_years\"\n [todayValue]=\"_todayYear\"\n [startValue]=\"selectedYear!\"\n [endValue]=\"selectedYear!\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"getActiveCell()\"\n (selectedValueChange)=\"onYearSelected($event)\"\n (activeDateChange)=\"updateActiveDate($event)\"\n (keyup)=\"handleCalendarBodyKeyup($event)\"\n (keydown)=\"handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { IpiButtonComponent } from '@apexara/ng-components/button';\n\nimport { IpiCalendarYearView } from '../year-view/year-view.component';\nimport { IpiCalendarMonthView } from '../month-view/month-view-calendar.component';\nimport { IpiCalendarMultiYearView } from '../multi-year-view/multi-year-view.component';\n\nimport { IpiDatepickerService } from '../../datepicker-service';\n\nimport { DateRange, DateSelectionEvent } from '../../datepicker.component';\n\nexport const months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'Jun',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nexport type activeDateView = 'month' | 'year' | 'multi-year';\n\n@Component({\n selector: 'ipi-calendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.css'],\n imports: [\n IpiButtonComponent,\n IpiCalendarYearView,\n IpiCalendarMonthView,\n IpiCalendarMultiYearView,\n ],\n})\n\nexport class IpiCalendarComponent {\n\n constructor(private datePickerService: IpiDatepickerService) {}\n\n @Input()\n public get activeDate(): any {\n return this._activeDate;\n }\n public set activeDate(value: Date | null) {\n const validDate =\n this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value)) ||\n this.datePickerService.today();\n \n this._activeDate = this.datePickerService.clampDate(validDate, validDate, validDate);\n }\n\n @Input()\n public get minDate(): Date | null {\n return this._minDate;\n }\n public set minDate(value: Date | null) {\n this._minDate = this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value));\n }\n\n @Input()\n public get selected(): DateRange | Date | null {\n return this._selected;\n }\n public set selected(value: DateRange | Date | null) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value));\n }\n }\n\n @Input()\n public get maxDate(): Date | null {\n return this._maxDate;\n }\n public set maxDate(value: Date | null) {\n this._maxDate = this.datePickerService.getValidDateOrNull(this.datePickerService.deserialize(value));\n }\n\n @Input() comparisonStart!: Date | null;\n\n /** End of the comparison range. */\n @Input() comparisonEnd!: Date | null;\n\n /** ARIA Accessible name of the `<input StartDate/>` */\n @Input() startDateAccessibleName!: string | null;\n\n /** ARIA Accessible name of the `<input EndDate/>` */\n @Input() endDateAccessibleName!: string | null;\n\n @Output() monthSelected: EventEmitter<Date> = new EventEmitter<Date>();\n @Output() yearSelected: EventEmitter<Date> = new EventEmitter<Date>();\n @Output() activeDateChange = new EventEmitter<DateSelectionEvent<number>>();\n @Output() userDragDrop = new EventEmitter<DateSelectionEvent<DateRange>>();\n @Output() selectedChange: EventEmitter<Date | null> = new EventEmitter<Date | null>();\n @Output() userSelection: EventEmitter<DateSelectionEvent<Date | null>> = new EventEmitter<DateSelectionEvent<Date | null>>();\n @Output() calendarClose: EventEmitter<any> = new EventEmitter<any>();\n\n public isButtonHidden = true;\n\n public activeDateView: activeDateView = 'month';\n\n public activeDrag: DateSelectionEvent<Date> | null = null;\n\n private _activeDate!: Date;\n private _minDate!: Date | null;\n private _maxDate!: Date | null;\n private _selected!: DateRange | Date | null;\n\n public calendarDateViewChange(): void {\n this.activeDateView = this.activeDateView == 'month' ? 'multi-year' : 'month';\n }\n\n public onCalendarDateViewKeydown(event: KeyboardEvent): void {\n if (event.code.startsWith('Arrow')) {\n event.preventDefault();\n }\n\n if (event.code === 'Enter' || event.code === 'Space') {\n this.calendarDateViewChange();\n }\n }\n\n public goToPreviousView(): void {\n this.activeDate =\n this.activeDateView == 'month'\n ? this.datePickerService.addCalendarMonths(this.activeDate, -1)\n : this.datePickerService.addCalendarYears(\n this.activeDate,\n this.activeDateView == 'year' ? -1 : - this.datePickerService.yearsPerPage,\n );\n }\n\n public goToNextView(): void {\n this.activeDate =\n this.activeDateView == 'month'\n ? this.datePickerService.addCalendarMonths(this.activeDate, 1)\n : this.datePickerService.addCalendarYears(\n this.activeDate,\n this.activeDateView == 'year' ? 1 : this.datePickerService.yearsPerPage,\n );\n }\n\n public onArrowKeydown(event: KeyboardEvent, direction: 'next' | 'previous'): void {\n if (event.code.startsWith('Arrow')) {\n event.preventDefault();\n }\n\n if (event.code === 'Enter' || event.code === 'Space') {\n if (direction === 'next') {\n this.goToNextView();\n } else {\n this.goToPreviousView();\n }\n }\n }\n\n public previousEnabled(): boolean {\n if (!this.minDate) {\n return true;\n }\n return (\n !this.minDate || !this.isSameView(this.activeDate, this.minDate)\n );\n }\n\n public nextEnabled(): boolean {\n return (\n !this.maxDate || !this.isSameView(this.activeDate, this.maxDate)\n );\n }\n\n public dragStarted(event: any): void {\n this.activeDrag = event;\n }\n\n /**\n * Called when a drag completes. It may end in cancelation or in the selection\n * of a new range.\n */\n public dragEnded(event: any): void {\n if (!this.activeDrag) return;\n\n if (event.value) {\n this.userDragDrop.emit(event as DateSelectionEvent<DateRange>);\n }\n\n this.activeDrag = null;\n }\n\n public get viewButtonText(): string {\n if (this.activeDateView === 'month') {\n return this.getCurrentMonthAndYear(this.activeDate);\n }\n\n if (this.activeDateView === 'year') {\n return this.getCurrentYear(this.activeDate);\n }\n\n return this.formatYearRange(...this.formatMinAndMaxYearLabels());\n }\n\n public goToDateInView(date: Date, view: 'month' | 'year' | 'multi-year'): void {\n this.activeDate = date;\n this.activeDateView = view;\n }\n\n public monthSelectedInYearView(normalizedMonth: Date): void {\n this.monthSelected.emit(normalizedMonth);\n }\n\n public yearSelectedInMultiYearView(normalizedYear: Date): void {\n this.yearSelected.emit(normalizedYear);\n }\n\n public dateSelected(event: any): void {\n const date = event.value;\n\n if (this.selected instanceof DateRange ||\n (date && !this.datePickerService.sameDate(date, this.selected))) {\n this.selectedChange.emit(date);\n }\n\n this.userSelection.emit({value: date, event });\n }\n\n public toggleButtonVisibility(event: FocusEvent) {\n if (event.type === 'focusout') {\n this.isButtonHidden = true;\n } else if (event.type === 'focusin') {\n this.isButtonHidden = false;\n }\n }\n\n private getCurrentMonthAndYear(date: Date): string { \n const month = months[date.getMonth()];\n const year = date.getFullYear();\n \n return `${month} ${year}`;\n }\n\n private getCurrentYear(date: Date): string {\n return date.getFullYear().toString();\n }\n\n private formatYearRange(start: string, end: string): string {\n return `${start} \\u2013 ${end}`;\n }\n\n private formatMinAndMaxYearLabels(): [minYearLabel: string, maxYearLabel: string] {\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view, and the last year is\n // just yearsPerPage - 1 away.\n const activeYear = this.datePickerService.getYear(this.activeDate);\n const minYearOfPage =\n activeYear -\n this.datePickerService.getActiveOffset(\n this.activeDate,\n this.minDate,\n this.maxDate,\n );\n const maxYearOfPage = minYearOfPage + this.datePickerService.yearsPerPage - 1;\n const minYearLabel = this.datePickerService.getYearName(\n this.datePickerService.createDate(minYearOfPage, 0, 1),\n );\n const maxYearLabel = this.datePickerService.getYearName(\n this.datePickerService.createDate(maxYearOfPage, 0, 1),\n );\n\n return [minYearLabel, maxYearLabel];\n }\n\n private isSameView(date1: Date, date2: Date): boolean {\n if (this.activeDateView == 'month') {\n return (\n this.datePickerService.getYear(date1) == this.datePickerService.getYear(date2) &&\n this.datePickerService.getMonth(date1) == this.datePickerService.getMonth(date2)\n );\n }\n if (this.activeDateView == 'year') {\n return this.datePickerService.getYear(date1) == this.datePickerService.getYear(date2);\n }\n\n // Otherwise we are in 'multi-year' view.\n return this.datePickerService.isSameMultiYearView(\n date1,\n date2,\n this.minDate,\n this.maxDate,\n );\n }\n\n}\n","<div class=\"container\">\n <div class=\"header\">\n <span \n tabindex=\"0\"\n class=\"active-date-view\"\n (click)=\"calendarDateViewChange()\"\n (keydown)=\"onCalendarDateViewKeydown($event)\">\n {{ viewButtonText }}\n </span>\n\n <div class=\"header-navigation\">\n <div class=\"chevron-wrapper\"\n tabindex=\"0\"\n [class.disabled]=\"!previousEnabled()\"\n (click)=\"goToPreviousView()\"\n (keydown)=\"onArrowKeydown($event, 'previous')\">\n <span class=\"chevron left\"></span>\n </div>\n\n <div class=\"chevron-wrapper\" \n tabindex=\"0\"\n [class.disabled]=\"!nextEnabled()\" \n (click)=\"goToNextView()\"\n (keydown)=\"onArrowKeydown($event, 'next')\">\n <span class=\"chevron right\"></span>\n </div>\n </div>\n </div>\n\n <div class=\"calendar\">\n @switch (activeDateView) {\n @case ('month') {\n <ipi-calendar-month-view\n [(activeDate)]=\"activeDate\"\n [(selected)]=\"selected\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n (userSelection)=\"dateSelected($event)\"\n (dragStarted)=\"dragStarted($event)\"\n (dragEnded)=\"dragEnded($event)\"\n [activeDrag]=\"activeDrag\">\n </ipi-calendar-month-view>\n }\n\n @case ('year') {\n <ipi-calendar-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n (monthSelected)=\"monthSelectedInYearView($event)\"\n (selectedChange)=\"goToDateInView($event, 'month')\">\n </ipi-calendar-year-view>\n }\n\n @case ('multi-year') {\n <ipi-calendar-multi-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n (yearSelected)=\"yearSelectedInMultiYearView($event)\"\n (selectedChange)=\"goToDateInView($event, 'year')\">\n </ipi-calendar-multi-year-view>\n }\n }\n </div>\n</div>\n\n<ipi-button\n [ariaLabel]=\"'Button for closing the calendar.'\" \n (clickChange)=\"calendarClose.emit($event)\" \n (focusChange)=\"toggleButtonVisibility($event)\"\n [class.cdk-visually-hidden]=\"isButtonHidden\">\n Close Calendar\n</ipi-button>\n","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, ElementRef, Input, NgZone, ViewChild, HostListener } from '@angular/core';\nimport { FormGroup, FormsModule } from '@angular/forms';\n\nimport { Subscription } from 'rxjs';\n\nimport { ControlErrors } from '@apexara/ng-components/select';\n\nimport { OSService, MobileOS, OverlayService } from '@apexara/ng-components/services';\n\nimport { IpiCalendarComponent } from './components/calendar/calendar.component';\nimport { DefaultCalendarRangeStrategy } from './datepicker-selection-strategy.component';\n\nimport { IpiDatepickerService } from './datepicker-service';\n\nexport interface DateSelectionEvent<D> {\n value: D;\n event: Event;\n}\n\n/** A class representing a range of dates. */\nexport class DateRange {\n constructor(\n readonly start: Date | null,\n readonly end: Date | null,\n ) {}\n}\n\nexport class DateRangeFormControls {\n constructor(\n readonly start: string,\n readonly end: string,\n ) {}\n}\n\nexport interface IpiDatepickerOptions {\n label: string,\n formGroup: FormGroup,\n formControlName: string | DateRangeFormControls,\n min?: Date;\n max?: Date;\n errors?: ControlErrors;\n}\n\n@Component({\n selector: 'ipi-datepicker',\n templateUrl: './datepicker.component.html',\n styleUrls: ['./datepicker.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n IpiCalendarComponent,\n ],\n})\n\nexport class IpiDatepickerComponent {\n\n constructor(\n private ngZone: NgZone,\n private osService: OSService,\n private elementRef: ElementRef,\n private overlayService: OverlayService,\n private changeDetectorRef: ChangeDetectorRef,\n private datepickerService: IpiDatepickerService,\n private rangeSelectionStrategy: DefaultCalendarRangeStrategy,\n ) {}\n\n @ViewChild('datepicker') datepicker!: ElementRef<HTMLElement> | null;\n @ViewChild('calendar') calendar!: ElementRef<HTMLElement> | null;\n\n @Input() options!: IpiDatepickerOptions;\n\n public get activeDate(): Date | null {\n return this._activeDate;\n }\n public set activeDate(value: Date) {\n const validDate =\n this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value)) ||\n this.datepickerService.today();\n\n this._activeDate = this.datepickerService.clampDate(validDate, this.minDate, this.maxDate);\n\n this._activeDate = value;\n this.shouldShowCalendar = false;\n }\n\n public get minDate(): Date | null {\n return this._minDate;\n }\n public set minDate(value: Date | null) {\n this._minDate = this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value));\n }\n\n public get maxDate(): Date | null {\n return this._maxDate;\n }\n public set maxDate(value: Date | null) {\n this._maxDate = this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value));\n }\n\n public get selectedDate(): DateRange | Date | null {\n return this._selected;\n }\n public set selectedDate(value: DateRange | Date | null) {\n if (this.options.formControlName instanceof DateRangeFormControls) {\n if (value instanceof DateRange) {\n this._selected = value;\n } else {\n this._selected = new DateRange(this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value)), null);\n }\n\n this.options.formGroup.controls[this.options.formControlName.start].setValue(this._selected.start, { emitEvent: false });\n this.options.formGroup.controls[this.options.formControlName.end].setValue(this._selected.end, { emitEvent: false });\n } else {\n this._selected = this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value));\n\n this.options.formGroup.controls[this.options.formControlName].setValue(this._selected, { emitEvent: false });\n }\n }\n\n public shouldShowCalendar!: boolean;\n\n public closeButtonFocused = false;\n\n public formErrorMessage: string | null = null; \n\n private errors!: ControlErrors;\n\n private _activeDate!: Date | null;\n private _selected!: DateRange | Date | null;\n private _minDate: Date | null = this.options?.min ? this.options.min : null;\n private _maxDate: Date | null = this.options?.max ? this.options.max : null;\n\n private formControlSubscriptions: Subscription[] = [];\n\n public ngOnInit(): void {\n this._selected = \n this.options.formControlName instanceof DateRangeFormControls \n ? new DateRange(this.options.formGroup.value[this.options.formControlName.start], this.options.formGroup.value[this.options.formControlName.end])\n : this.options.formGroup.value[this.options.formControlName];\n\n this.maxDate = this.options.max ? this.options.max : null;\n this.minDate = this.options.min ? this.options.min : null;\n\n this.initDefaultErrors();\n\n this.changeDetectorRef.detectChanges();\n\n this.ngZone.runOutsideAngular(() => {\n if (this.datepicker) {\n this.datepicker.nativeElement.addEventListener('focus', () => this.activateControl());\n }\n });\n }\n\n public ngAfterViewInit(): void {\n this.setFormSubscriptions();\n }\n\n public ngOnDestroy(): void {\n if (this.datepicker) {\n this.datepicker.nativeElement.removeEventListener('focusin', () => this.activateControl());\n }\n\n this.formControlSubscriptions.forEach((subscription) => subscription.unsubscribe());\n }\n\n public activateControl(): void {\n if (this.calendar) {\n return;\n }\n\n this.ngZone.run(() => {\n this.shouldShowCalendar = true;\n })\n\n this.changeDetectorRef.markForCheck();\n \n setTimeout(() => { \n this.generateCalendarPosition(this.calendar!);\n\n this.overlayService.appendToOverlay(this.calendar!.nativeElement, true);\n\n this.changeDetectorRef.detectChanges();\n })\n }\n\n @HostListener('document:click', ['$event'])\n onClick(event: PointerEvent): void {\n if (!this.shouldShowCalendar) {\n return;\n }\n\n if (this.datepicker) {\n const isIputClicked = this.checkPosition(event, this.elementRef.nativeElement.getBoundingClientRect());\n\n if (isIputClicked) {\n this.shouldShowCalendar = isIputClicked;\n\n if (!this.shouldShowCalendar) {\n this.overlayService.removeFromOverlay(this.calendar!.nativeElement);\n }\n\n return;\n }\n }\n\n if (this.calendar) {\n const isCalendarClicked = this.checkPosition(event, this.calendar.nativeElement.getBoundingClientRect());\n\n if (isCalendarClicked) {\n this.ngZone.run(() => {\n this.shouldShowCalendar = isCalendarClicked;\n })\n \n if (!this.shouldShowCalendar) {\n this.overlayService.removeFromOverlay(this.calendar!.nativeElement);\n }\n \n return;\n }\n }\n\n this.closeCalendar();\n\n if (!this.shouldShowCalendar) {\n this.overlayService.removeFromOverlay(this.calendar!.nativeElement);\n }\n }\n\n public getDisplayValue(): string {\n if (!this.selectedDate) {\n return 'No date selected.';\n }\n\n if (this.selectedDate instanceof Date) {\n return this.datepickerService.formatter.format(this.selectedDate);\n }\n \n if (this.selectedDate instanceof DateRange) {\n if (this.selectedDate.start && this.selectedDate.end) {\n return `${this.datepickerService.formatter.format(this.selectedDate.start)} - ${this.datepickerService.formatter.format(this.selectedDate.end)}`;\n }\n\n if (this.selectedDate.start) {\n return `${this.datepickerService.formatter.format(this.selectedDate.start)} - `;\n }\n }\n \n return 'No date selected.';\n }\n\n public getformErrorMessage(): string | null {\n this.formErrorMessage = this.getErrorIfControlInvalid();\n\n return this.formErrorMessage ? this.formErrorMessage : null;\n }\n\n public onCloseClick(): void {\n this.closeCalendar();\n\n if (this.datepicker) {\n this.datepicker.nativeElement.focus();\n }\n }\n\n public onCloseKeyDown(event: KeyboardEvent): void {\n if (event.code.startsWith('Arrow') || event.code === 'Space') {\n event.preventDefault();\n }\n\n if (event.code === 'Enter' || event.code === 'Space') {\n this.closeCalendar();\n\n if (this.datepicker) {\n this.datepicker.nativeElement.focus();\n }\n\n }\n }\n\n public handleDragAndDropEnd(event: any): void {\n this.selectedDate = new DateRange(event.value.start, event.value.end);\n }\n\n public handleUserSelection(event: DateSelectionEvent<Date | null>): void {\n const selection = this.selectedDate;\n\n const value = event.value;\n const isRange = selection instanceof DateRange;\n\n if (!value) {\n this.selectedDate = null;\n\n return;\n }\n\n if (isRange && this.rangeSelectionStrategy) {\n const newSelection = this.rangeSelectionStrategy.selectionFinished(\n value,\n selection,\n );\n\n this.selectedDate = newSelection;\n } else if (value && (isRange || !this.datepickerService.sameDate(value, selection))) {\n this.selectedDate = value;\n }\n }\n\n private closeCalendar(): void {\n this.shouldShowCalendar = false;\n\n if (this.options.formControlName instanceof DateRangeFormControls) {\n this.options.formGroup.controls[this.options.formControlName.start].markAsTouched();\n this.options.formGroup.controls[this.options.formControlName.end].markAsTouched();\n } else {\n this.options.formGroup.controls[this.options.formControlName].markAsTouched();\n }\n\n this.overlayService.removeFromOverlay(this.calendar!.nativeElement);\n }\n\n private generateCalendarPosition(calendar: ElementRef): void {\n const calendarEl = calendar.nativeElement;\n const elementRefRect = this.elementRef.nativeElement.getBoundingClientRect();\n\n if (this.osService.mobileOS === MobileOS.iOS) {\n elementRefRect.y += window.visualViewport!.offsetTop;\n elementRefRect.x += window.visualViewport!.offsetLeft;\n }\n\n calendarEl.style.left = elementRefRect.x + 'px';\n calendarEl.style.top = elementRefRect.y + elementRefRect.height + 10 + 'px';\n\n if (window.innerHeight < calendarEl.getBoundingClientRect().bottom) {\n calendarEl.style.top = 'unset';\n calendarEl.style.left = elementRefRect.x + 'px';\n calendarEl.style.bottom = window.innerHeight - elementRefRect.y + 10 + 'px';\n }\n }\n\n private setFormSubscriptions(): void { \n if (this.options.formControlName instanceof DateRangeFormControls) {\n const startControl = this.options.formGroup.controls[this.options.formControlName.start];\n const endControl = this.options.formGroup.controls[this.options.formControlName.end];\n\n this.formControlSubscriptions.push(\n startControl.valueChanges.subscribe((value) => {\n if (value && this.selectedDate instanceof DateRange) {\n this.selectedDate = new DateRange(\n this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value)),\n this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(this.selectedDate.end))\n )\n }\n\n this.changeDetectorRef.detectChanges();\n }),\n\n endControl.valueChanges.subscribe((value) => {\n if (value && this.selectedDate instanceof DateRange) {\n this.selectedDate = new DateRange(\n this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(this.selectedDate.start)),\n this.datepickerService.getValidDateOrNull(this.datepickerService.deserialize(value))\n )\n\n this.changeDetectorRef.detectChanges();\n }\n }),\n );\n\n return;\n } else {\n const control = this.options.formGroup.controls[this.options.formControlName];\n\n this.formControlSubscriptions.push(\n control.valueChanges.subscribe(() => {\n this.selectedDate = control.value;\n\n this.changeDetectorRef.detectChanges();\n })\n );\n }\n } \n\n // Unified position checker for both input and calendar\n private checkPosition(event: PointerEvent, rect: DOMRect): boolean {\n const x = event.clientX;\n const y = event.clientY;\n \n if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) {\n return true;\n }\n\n return false; \n }\n\n private initDefaultErrors(): void {\n let defaultErrors: ControlErrors = {\n required: 'This is a required field',\n }\n\n if (this.options.min) {\n this.setMinValidator();\n \n defaultErrors['datepickerMin'] = `Start date should be before ${this.datepickerService.formatter.format(this.minDate!)}`;\n }\n\n if (this.options.max) {\n this.setMaxValidator();\n\n defaultErrors['datepickerMax'] = `End date should be before ${this.datepickerService.formatter.format(this.maxDate!)}`;\n }\n\n if (!this.options.errors) {\n this.errors = defaultErrors;\n\n return;\n }\n\n this.errors = {\n ...defaultErrors,\n ...this.options.errors\n }\n }\n\n private getErrorIfControlInvalid(): string | null {\n if (this.options.formControlName instanceof DateRangeFormControls) {\n const startControl = this.options.formGroup.controls[this.options.formControlName.start];\n const endControl = this.options.formGroup.controls[this.options.formControlName.end];\n\n if (startControl.touched && startControl.invalid || endControl.touched && endControl.invalid) {\n for (const error in this.errors) {\n if (this.options.formGroup.controls[this.options.formControlName.start].hasError(error)) {\n\n return this.errors[error];\n }\n\n if (this.options.formGroup.controls[this.options.formControlName.end].hasError(error)) {\n return this.errors[error];\n }\n }\n }\n } else {\n const control = this.options.formGroup.controls[this.options.formControlName];\n\n if (control.touched && control.invalid) {\n for (const error in this.errors) {\n if (this.options.formGroup.controls[this.options.formControlName].hasError(error)) {\n return this.errors[error];\n }\n }\n }\n }\n\n return null;\n }\n\n private setMinValidator(): void {\n const minValidator = this.datepickerService.minValidator(this.options.min!);\n\n if (this.options.formControlName instanceof DateRangeFormControls) {\n this.options.formGroup.controls[this.options.formControlName.start].addValidators(minValidator);\n } else {\n this.options.formGroup.controls[this.options.formControlName].addValidators(minValidator);\n }\n }\n\n private setMaxValidator(): void {\n const maxValidator = this.datepickerService.maxValidator(this.options.max!);\n \n if (this.options.formControlName instanceof DateRangeFormControls) {\n this.options.formGroup.controls[this.options.formControlName.end].addValidators(maxValidator);\n } else {\n this.options.formGroup.controls[this.options.formControlName].addValidators(maxValidator);\n }\n }\n\n}\n","@if (options) {\n @if (options.formControlName && options.formGroup) {\n <div class=\"label-wrapper\">\n @if (options.label !== '') {\n <label>{{ options.label }}</label>\n }\n </div>\n\n <div tabindex=\"0\" \n #datepicker \n class=\"datepicker\"\n [class.datepicker-error]=\"formErrorMessage\"\n (click)=\"this.activateControl()\">\n <span\n class=\"datepicker-value\"\n role=\"textbox\" \n aria-readonly=\"true\" \n aria-label=\"Selected date\"\n aria-live=\"polite\">\n {{ getDisplayValue() }}\n </span>\n\n <div class=\"svg-wrapper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"#f1f1f1\" \n viewBox=\"0 0 256 256\"><path d=\"M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM72,48v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24V80H48V48ZM208,208H48V96H208V208Zm-68-76a12,12,0,1,1-12-12A12,12,0,0,1,140,132Zm44,0a12,12,0,1,1-12-12A12,12,0,0,1,184,132ZM96,172a12,12,0,1,1-12-12A12,12,0,0,1,96,172Zm44,0a12,12,0,1,1-12-12A12,12,0,0,1,140,172Zm44,0a12,12,0,1,1-12-12A12,12,0,0,1,184,172Z\"></path>\n </svg>\n </div>\n </div>\n\n <div class=\"footer\">\n <div>{{ getformErrorMessage() }}</div>\n </div>\n\n @if (shouldShowCalendar) {\n <div #calendar class=\"calendar\">\n <ipi-calendar\n [(activeDate)]=\"activeDate\"\n [(selected)]=\"selectedDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (calendarClose)=\"onCloseKeyDown($event)\"\n (userSelection)=\"handleUserSelection($event)\"\n (userDragDrop)=\"handleDragAndDropEnd($event)\">\n </ipi-calendar>\n </div>\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.IpiDatepickerService","i2.DefaultCalendarRangeStrategy","i1","i2.IpiDatepickerService","i3.DefaultCalendarRangeStrategy"],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, Output, Input, ViewChild, ContentChild, Component } from '@angular/core';
|
|
3
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
4
|
+
import * as i1 from '@apexara/ng-components/services';
|
|
5
|
+
|
|
6
|
+
class IpiDialogComponent {
|
|
7
|
+
constructor(elementRef, overlayService) {
|
|
8
|
+
this.elementRef = elementRef;
|
|
9
|
+
this.overlayService = overlayService;
|
|
10
|
+
this.closeIcon = false;
|
|
11
|
+
this.closeIconClick = new EventEmitter();
|
|
12
|
+
}
|
|
13
|
+
ngAfterViewInit() {
|
|
14
|
+
this.overlayService.appendToOverlay(this.elementRef.nativeElement, true);
|
|
15
|
+
}
|
|
16
|
+
ngOnDestroy() {
|
|
17
|
+
this.overlayService.removeFromOverlay(this.elementRef.nativeElement);
|
|
18
|
+
}
|
|
19
|
+
onCloseIconClick() {
|
|
20
|
+
this.closeIconClick.emit();
|
|
21
|
+
}
|
|
22
|
+
handleKeydown(event) {
|
|
23
|
+
if (!(document.activeElement === this.closeIconTemplate?.nativeElement)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
27
|
+
event.preventDefault();
|
|
28
|
+
this.closeIconClick.emit();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: IpiDialogComponent, deps: [{ token: i0.ElementRef }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: IpiDialogComponent, isStandalone: true, selector: "ipi-dialog", inputs: { closeIcon: "closeIcon" }, outputs: { closeIconClick: "closeIconClick" }, queries: [{ propertyName: "title", first: true, predicate: ["title"], descendants: true }, { propertyName: "description", first: true, predicate: ["description"], descendants: true }, { propertyName: "content", first: true, predicate: ["content"], descendants: true }, { propertyName: "actions", first: true, predicate: ["actions"], descendants: true }], viewQueries: [{ propertyName: "closeIconTemplate", first: true, predicate: ["closeIcon"], descendants: true }], ngImport: i0, template: "<div class=\"backdrop\"></div>\n\n<div class=\"container\">\n <div class=\"dialog\">\n @if (closeIcon) {\n <div #closeIcon tabindex=\"0\" class=\"close-icon\" (keydown)=\"handleKeydown($event)\" (click)=\"onCloseIconClick()\">\n <svg width=\"20\" height=\"20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15 5 5 15M15 15 5 5\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n @if (title) {\n <span class=\"title\">\n <ng-container [ngTemplateOutlet]=\"title\"></ng-container>\n </span>\n }\n \n @if (description) {\n <span class=\"description\">\n <ng-container [ngTemplateOutlet]=\"description\"></ng-container>\n </span>\n }\n \n @if (content) {\n <div class=\"content\">\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </div>\n }\n \n @if (actions) {\n <div class=\"actions\">\n <ng-container [ngTemplateOutlet]=\"actions\"></ng-container>\n </div>\n }\n </div>\n</div>\n", styles: [".backdrop{width:100%;height:100%;position:fixed;top:0;left:0;background-color:var(--ipi-dialog-backdrop-background, #0B1222);opacity:.5}.container{width:100%;height:100%;position:fixed;top:0;left:0;display:flex;pointer-events:all;align-items:center;justify-content:center}.dialog{width:calc(100% - 48px);max-width:var(--ipi-dialog-max-width, 432px);max-height:calc(100% - 48px);position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;border-radius:8px;background-color:var(--ipi-dialog-background, #FFFFFF);padding:40px}.close-icon{width:20px;height:20px;position:absolute;top:20px;right:20px;cursor:pointer}.close-icon svg path{stroke:var(--ipi-dialog-close-icon-color, #000000)}.close-icon:hover svg path{stroke:var(--ipi-dialog-close-icon-hover-color, #000000)}.title{color:var(--ipi-dialog-title-color, #0B1222);text-align:center;font-size:28px;font-weight:600;margin-bottom:12px}.description{color:var(--ipi-dialog-description-color, #5D6068);text-align:center}.content{width:100%;overflow-y:auto}.description:not(:empty),.content:not(:empty){margin-bottom:24px}:host-context(.mobile) .dialog>.actions{width:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
33
|
+
}
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: IpiDialogComponent, decorators: [{
|
|
35
|
+
type: Component,
|
|
36
|
+
args: [{ selector: 'ipi-dialog', imports: [
|
|
37
|
+
NgTemplateOutlet,
|
|
38
|
+
], template: "<div class=\"backdrop\"></div>\n\n<div class=\"container\">\n <div class=\"dialog\">\n @if (closeIcon) {\n <div #closeIcon tabindex=\"0\" class=\"close-icon\" (keydown)=\"handleKeydown($event)\" (click)=\"onCloseIconClick()\">\n <svg width=\"20\" height=\"20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15 5 5 15M15 15 5 5\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n @if (title) {\n <span class=\"title\">\n <ng-container [ngTemplateOutlet]=\"title\"></ng-container>\n </span>\n }\n \n @if (description) {\n <span class=\"description\">\n <ng-container [ngTemplateOutlet]=\"description\"></ng-container>\n </span>\n }\n \n @if (content) {\n <div class=\"content\">\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </div>\n }\n \n @if (actions) {\n <div class=\"actions\">\n <ng-container [ngTemplateOutlet]=\"actions\"></ng-container>\n </div>\n }\n </div>\n</div>\n", styles: [".backdrop{width:100%;height:100%;position:fixed;top:0;left:0;background-color:var(--ipi-dialog-backdrop-background, #0B1222);opacity:.5}.container{width:100%;height:100%;position:fixed;top:0;left:0;display:flex;pointer-events:all;align-items:center;justify-content:center}.dialog{width:calc(100% - 48px);max-width:var(--ipi-dialog-max-width, 432px);max-height:calc(100% - 48px);position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;border-radius:8px;background-color:var(--ipi-dialog-background, #FFFFFF);padding:40px}.close-icon{width:20px;height:20px;position:absolute;top:20px;right:20px;cursor:pointer}.close-icon svg path{stroke:var(--ipi-dialog-close-icon-color, #000000)}.close-icon:hover svg path{stroke:var(--ipi-dialog-close-icon-hover-color, #000000)}.title{color:var(--ipi-dialog-title-color, #0B1222);text-align:center;font-size:28px;font-weight:600;margin-bottom:12px}.description{color:var(--ipi-dialog-description-color, #5D6068);text-align:center}.content{width:100%;overflow-y:auto}.description:not(:empty),.content:not(:empty){margin-bottom:24px}:host-context(.mobile) .dialog>.actions{width:100%}\n"] }]
|
|
39
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.OverlayService }], propDecorators: { title: [{
|
|
40
|
+
type: ContentChild,
|
|
41
|
+
args: ['title']
|
|
42
|
+
}], description: [{
|
|
43
|
+
type: ContentChild,
|
|
44
|
+
args: ['description']
|
|
45
|
+
}], content: [{
|
|
46
|
+
type: ContentChild,
|
|
47
|
+
args: ['content']
|
|
48
|
+
}], actions: [{
|
|
49
|
+
type: ContentChild,
|
|
50
|
+
args: ['actions']
|
|
51
|
+
}], closeIconTemplate: [{
|
|
52
|
+
type: ViewChild,
|
|
53
|
+
args: ['closeIcon']
|
|
54
|
+
}], closeIcon: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}], closeIconClick: [{
|
|
57
|
+
type: Output
|
|
58
|
+
}] } });
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Generated bundle index. Do not edit.
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
export { IpiDialogComponent };
|
|
65
|
+
//# sourceMappingURL=apexara-ng-components-dialog.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apexara-ng-components-dialog.mjs","sources":["../../../../projects/apexara/ng-components/dialog/src/dialog.component.ts","../../../../projects/apexara/ng-components/dialog/src/dialog.component.html","../../../../projects/apexara/ng-components/dialog/apexara-ng-components-dialog.ts"],"sourcesContent":["import { Component, OnDestroy, ContentChild, TemplateRef, Input, Output, EventEmitter, ElementRef, ViewChild } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { OverlayService } from '@apexara/ng-components/services';\n\n@Component({\n selector: 'ipi-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: ['./dialog.component.css'],\n imports: [\n NgTemplateOutlet,\n ],\n})\n\nexport class IpiDialogComponent implements OnDestroy {\n\n constructor(\n private elementRef: ElementRef,\n private overlayService: OverlayService) {\n }\n\n @ContentChild('title') title?: TemplateRef<any>;\n @ContentChild('description') description?: TemplateRef<any>;\n @ContentChild('content') content?: TemplateRef<any>;\n @ContentChild('actions') actions?: TemplateRef<any>;\n\n @ViewChild('closeIcon') closeIconTemplate?: ElementRef;\n\n @Input() closeIcon: boolean = false;\n\n @Output() closeIconClick = new EventEmitter<void>();\n\n public ngAfterViewInit(): void {\n this.overlayService.appendToOverlay(this.elementRef.nativeElement, true);\n }\n\n public ngOnDestroy(): void {\n this.overlayService.removeFromOverlay(this.elementRef.nativeElement);\n }\n\n public onCloseIconClick(): void {\n this.closeIconClick.emit();\n }\n\n public handleKeydown(event: KeyboardEvent): void {\n if (!(document.activeElement === this.closeIconTemplate?.nativeElement)) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.closeIconClick.emit();\n }\n }\n\n}\n","<div class=\"backdrop\"></div>\n\n<div class=\"container\">\n <div class=\"dialog\">\n @if (closeIcon) {\n <div #closeIcon tabindex=\"0\" class=\"close-icon\" (keydown)=\"handleKeydown($event)\" (click)=\"onCloseIconClick()\">\n <svg width=\"20\" height=\"20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15 5 5 15M15 15 5 5\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n @if (title) {\n <span class=\"title\">\n <ng-container [ngTemplateOutlet]=\"title\"></ng-container>\n </span>\n }\n \n @if (description) {\n <span class=\"description\">\n <ng-container [ngTemplateOutlet]=\"description\"></ng-container>\n </span>\n }\n \n @if (content) {\n <div class=\"content\">\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </div>\n }\n \n @if (actions) {\n <div class=\"actions\">\n <ng-container [ngTemplateOutlet]=\"actions\"></ng-container>\n </div>\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|