@skyux/datetime 5.9.1 → 5.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"datepicker.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker.component.ts","../../../../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport {\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyCoreAdapterService,\n SkyOverlayInstance,\n SkyOverlayService,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { Subject, Subscription, fromEvent } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\n\nimport { SkyDatepickerCalendarChange } from './datepicker-calendar-change';\nimport { SkyDatepickerCalendarComponent } from './datepicker-calendar.component';\nimport { SkyDatepickerCustomDate } from './datepicker-custom-date';\n\nlet nextId = 0;\n\n/**\n * Creates the datepicker button and calendar.\n * You must wrap this component around an input with the `skyDatepickerInput` directive.\n */\n@Component({\n selector: 'sky-datepicker',\n templateUrl: './datepicker.component.html',\n styleUrls: ['./datepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyDatepickerComponent implements OnDestroy, OnInit {\n /**\n * Adds a class to the datepicker.\n * @default \"\"\n */\n @Input()\n public pickerClass = '';\n\n /**\n * @internal\n * Indicates if the calendar button element or any of its children have focus.\n * @deprecated This property will be removed in the next major version release.\n */\n public get buttonIsFocused(): boolean {\n /* sanity check */\n /* istanbul ignore if */\n if (!this.triggerButtonRef) {\n return false;\n }\n const activeEl = document.activeElement;\n return this.triggerButtonRef.nativeElement === activeEl;\n }\n\n /**\n * @internal\n * Indicates if the calendar element or any of its children have focus.\n * @deprecated This property will be removed in the next major version release.\n */\n public get calendarIsFocused(): boolean {\n if (!this.calendarRef) {\n return false;\n }\n\n const focusedEl = document.activeElement;\n return this.calendarRef.nativeElement.contains(focusedEl);\n }\n\n /**\n * @internal\n * Indicates if the calendar element's visiblity property is 'visible'.\n * @deprecated This property will be removed in the next major version release.\n */\n public get calendarIsVisible(): boolean {\n return this.calendar ? this.calendar.isVisible : false;\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(value: boolean) {\n this._disabled = value;\n this.changeDetector.markForCheck();\n }\n\n public set selectedDate(value: Date) {\n this._selectedDate = value;\n if (this.calendar) {\n this.calendar.writeValue(this._selectedDate);\n }\n }\n\n /**\n * Fires when the range of displayed dates in the calendar changes. Provides the\n * current range of displayed dates and a mutable `customDate` property consumers can use\n * to modify individual dates on the calendar.\n */\n @Output()\n public calendarDateRangeChange = new EventEmitter<SkyDatepickerCalendarChange>();\n\n public calendarId: string;\n\n public customDates: SkyDatepickerCustomDate[] | undefined;\n\n public dateChange = new EventEmitter<Date>();\n\n public isDaypickerWaiting = false;\n\n public isOpen = false;\n\n public isVisible = false;\n\n public maxDate: Date;\n\n public minDate: Date;\n\n public startingDay: number;\n\n public triggerButtonId: string;\n\n @ViewChild(SkyDatepickerCalendarComponent)\n private calendar: SkyDatepickerCalendarComponent;\n\n @ViewChild('calendarRef', {\n read: ElementRef,\n })\n private set calendarRef(value: ElementRef) {\n if (value) {\n this._calendarRef = value;\n\n // Wait for the calendar component to render before gauging dimensions.\n setTimeout(() => {\n this.calendar.writeValue(this._selectedDate);\n\n this.destroyAffixer();\n this.createAffixer();\n\n setTimeout(() => {\n this.coreAdapter.getFocusableChildrenAndApplyFocus(\n this.calendarRef,\n '.sky-datepicker-calendar-inner',\n false\n );\n\n this.isVisible = true;\n this.changeDetector.markForCheck();\n });\n });\n }\n }\n\n private get calendarRef(): ElementRef {\n return this._calendarRef;\n }\n\n @ViewChild('calendarTemplateRef', {\n read: TemplateRef,\n })\n private calendarTemplateRef: TemplateRef<any>;\n\n @ViewChild('triggerButtonRef', {\n read: ElementRef,\n })\n private triggerButtonRef: ElementRef;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private inputTemplateRef: TemplateRef<any>;\n\n @ViewChild('triggerButtonTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private triggerButtonTemplateRef: TemplateRef<any>;\n\n private affixer: SkyAffixer;\n\n private calendarUnsubscribe: Subject<void>;\n\n private customDatesSubscription: Subscription;\n\n private ngUnsubscribe = new Subject();\n\n private overlay: SkyOverlayInstance;\n\n private overlayKeydownListner: Subscription;\n\n private _calendarRef: ElementRef;\n\n private _disabled = false;\n\n private _selectedDate: Date;\n\n constructor(\n private affixService: SkyAffixService,\n private changeDetector: ChangeDetectorRef,\n private coreAdapter: SkyCoreAdapterService,\n private overlayService: SkyOverlayService,\n @Optional() public inputBoxHostService?: SkyInputBoxHostService,\n @Optional() themeSvc?: SkyThemeService\n ) {\n const uniqueId = nextId++;\n this.calendarId = `sky-datepicker-calendar-${uniqueId}`;\n this.triggerButtonId = `sky-datepicker-button-${uniqueId}`;\n\n // Update icons when theme changes.\n themeSvc?.settingsChange\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.changeDetector.markForCheck();\n });\n }\n\n public ngOnInit(): void {\n if (this.inputBoxHostService) {\n this.inputBoxHostService.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.triggerButtonTemplateRef,\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.dateChange.complete();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.removePickerEventListeners();\n this.destroyAffixer();\n this.destroyOverlay();\n }\n\n public onCalendarModeChange(): void {\n // Let the calendar populate in the DOM before recalculating placement.\n setTimeout(() => {\n this.affixer.reaffix();\n });\n }\n\n public onSelectedDateChange(value: Date): void {\n this.dateChange.emit(value);\n this.closePicker();\n }\n\n public onTriggerButtonClick(): void {\n if (this.isOpen) {\n this.closePicker();\n } else {\n this.openPicker();\n }\n }\n\n public onCalendarDateRangeChange(event: SkyDatepickerCalendarChange): void {\n /* istanbul ignore else */\n if (event) {\n this.cancelCustomDatesSubscription();\n\n const args: SkyDatepickerCalendarChange = {\n startDate: event.startDate,\n endDate: event.endDate,\n customDates: undefined,\n };\n this.calendarDateRangeChange.emit(args);\n // If consumer has added an observable to the args, watch for incoming custom dates.\n /* istanbul ignore else */\n if (args.customDates) {\n this.isDaypickerWaiting = true;\n // Avoid an ExpressionChangedAfterItHasBeenCheckedError.\n this.changeDetector.detectChanges();\n\n this.customDatesSubscription = args.customDates\n .pipe(debounceTime(250))\n .subscribe((result) => {\n this.customDates = result;\n this.isDaypickerWaiting = false;\n\n // Trigger change detection in child components to show changes in the calendar.\n this.changeDetector.markForCheck();\n });\n } else {\n // If consumer returns an undefined value after custom dates have\n // already ben established, remove custom dates.\n if (this.customDates) {\n this.customDates = undefined;\n // Avoid an ExpressionChangedAfterItHasBeenCheckedError.\n this.changeDetector.detectChanges();\n }\n }\n }\n }\n\n private closePicker() {\n this.destroyAffixer();\n this.destroyOverlay();\n this.removePickerEventListeners();\n this.triggerButtonRef.nativeElement.focus();\n this.isOpen = false;\n }\n\n private openPicker(): void {\n this.isVisible = false;\n this.changeDetector.markForCheck();\n\n this.removePickerEventListeners();\n this.calendarUnsubscribe = new Subject<void>();\n this.destroyOverlay();\n this.createOverlay();\n\n this.isOpen = true;\n this.changeDetector.markForCheck();\n }\n\n private createAffixer(): void {\n const affixer = this.affixService.createAffixer(this.calendarRef);\n\n // Hide calendar when trigger button is scrolled off screen.\n affixer.placementChange\n .pipe(takeUntil(this.calendarUnsubscribe))\n .subscribe((change) => {\n this.isVisible = change.placement !== null;\n this.changeDetector.markForCheck();\n });\n\n affixer.affixTo(this.triggerButtonRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n horizontalAlignment: 'right',\n isSticky: true,\n placement: 'below',\n });\n\n this.affixer = affixer;\n }\n\n private destroyAffixer(): void {\n /*istanbul ignore else*/\n if (this.affixer) {\n this.affixer.destroy();\n this.affixer = undefined;\n }\n }\n\n private createOverlay(): void {\n const overlay = this.overlayService.create({\n wrapperClass: this.pickerClass,\n enableClose: false,\n enablePointerEvents: false,\n });\n\n overlay.backdropClick\n .pipe(takeUntil(this.calendarUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.closePicker();\n }\n });\n\n this.addKeydownListner();\n\n overlay.attachTemplate(this.calendarTemplateRef);\n\n this.overlay = overlay;\n }\n\n private destroyOverlay(): void {\n /*istanbul ignore else*/\n if (this.overlay) {\n this.overlayService.close(this.overlay);\n this.overlay = undefined;\n }\n }\n\n private addKeydownListner(): void {\n this.overlayKeydownListner = fromEvent(window.document, 'keydown')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((event: KeyboardEvent) => {\n const key = event.key?.toLowerCase();\n if (key === 'escape' && this.isOpen) {\n this.closePicker();\n }\n });\n }\n\n private removePickerEventListeners(): void {\n /* istanbul ignore else */\n if (this.calendarUnsubscribe) {\n this.calendarUnsubscribe.next();\n this.calendarUnsubscribe.complete();\n this.calendarUnsubscribe = undefined;\n }\n this.overlayKeydownListner?.unsubscribe();\n }\n\n private cancelCustomDatesSubscription(): void {\n if (this.customDatesSubscription) {\n this.customDatesSubscription.unsubscribe();\n this.customDatesSubscription = undefined;\n }\n }\n}\n","<div class=\"sky-datepicker\">\n <ng-container *ngIf=\"!inputBoxHostService\">\n <div class=\"sky-input-group\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\"></ng-container>\n <ng-container *ngTemplateOutlet=\"triggerButtonTemplateRef\"></ng-container>\n </div>\n </ng-container>\n</div>\n\n<ng-template #inputTemplateRef>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-template #triggerButtonTemplateRef>\n <div class=\"sky-input-group-btn\">\n <button\n aria-haspopup=\"dialog\"\n class=\"sky-btn sky-btn-default sky-input-group-datepicker-btn\"\n type=\"button\"\n [attr.aria-controls]=\"isOpen ? calendarId : null\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-label]=\"\n 'skyux_datepicker_trigger_button_label' | skyLibResources\n \"\n [attr.id]=\"triggerButtonId\"\n [attr.title]=\"'skyux_datepicker_trigger_button_label' | skyLibResources\"\n [disabled]=\"disabled\"\n (click)=\"onTriggerButtonClick()\"\n #triggerButtonRef\n >\n <sky-icon *skyThemeIf=\"'default'\" icon=\"calendar\" size=\"lg\"></sky-icon>\n <sky-icon\n *skyThemeIf=\"'modern'\"\n icon=\"calendar\"\n size=\"lg\"\n iconType=\"skyux\"\n ></sky-icon>\n </button>\n </div>\n</ng-template>\n\n<ng-template #calendarTemplateRef>\n <div\n class=\"sky-datepicker-calendar-container sky-shadow sky-elevation-4\"\n role=\"dialog\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n [attr.id]=\"calendarId\"\n [class.sky-datepicker-hidden]=\"!isVisible\"\n #calendarRef\n >\n <sky-datepicker-calendar\n [customDates]=\"customDates\"\n [isDaypickerWaiting]=\"isDaypickerWaiting\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [startingDay]=\"startingDay\"\n (calendarDateRangeChange)=\"onCalendarDateRangeChange($event)\"\n (calendarModeChange)=\"onCalendarModeChange()\"\n (selectedDateChange)=\"onSelectedDateChange($event)\"\n >\n </sky-datepicker-calendar>\n </div>\n</ng-template>\n"]}
1
+ {"version":3,"file":"datepicker.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker.component.ts","../../../../../../../../libs/components/datetime/src/lib/modules/datepicker/datepicker.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport {\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyCoreAdapterService,\n SkyOverlayInstance,\n SkyOverlayService,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { Subject, Subscription, fromEvent } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\n\nimport { SkyDatepickerCalendarChange } from './datepicker-calendar-change';\nimport { SkyDatepickerCalendarComponent } from './datepicker-calendar.component';\nimport { SkyDatepickerCustomDate } from './datepicker-custom-date';\n\nlet nextId = 0;\n\n/**\n * Creates the datepicker button and calendar.\n * You must wrap this component around an input with the `skyDatepickerInput` directive.\n */\n@Component({\n selector: 'sky-datepicker',\n templateUrl: './datepicker.component.html',\n styleUrls: ['./datepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyDatepickerComponent implements OnDestroy, OnInit {\n /**\n * Adds a class to the datepicker.\n * @default \"\"\n */\n @Input()\n public pickerClass = '';\n\n /**\n * @internal\n * Indicates if the calendar button element or any of its children have focus.\n * @deprecated This property will be removed in the next major version release.\n */\n public get buttonIsFocused(): boolean {\n /* sanity check */\n /* istanbul ignore if */\n if (!this.triggerButtonRef) {\n return false;\n }\n const activeEl = document.activeElement;\n return this.triggerButtonRef.nativeElement === activeEl;\n }\n\n /**\n * @internal\n * Indicates if the calendar element or any of its children have focus.\n * @deprecated This property will be removed in the next major version release.\n */\n public get calendarIsFocused(): boolean {\n if (!this.calendarRef) {\n return false;\n }\n\n const focusedEl = document.activeElement;\n return this.calendarRef.nativeElement.contains(focusedEl);\n }\n\n /**\n * @internal\n * Indicates if the calendar element's visiblity property is 'visible'.\n * @deprecated This property will be removed in the next major version release.\n */\n public get calendarIsVisible(): boolean {\n return this.calendar ? this.calendar.isVisible : false;\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(value: boolean) {\n this._disabled = value;\n this.changeDetector.markForCheck();\n }\n\n public set selectedDate(value: Date) {\n this._selectedDate = value;\n if (this.calendar) {\n this.calendar.writeValue(this._selectedDate);\n }\n }\n\n /**\n * Fires when the range of displayed dates in the calendar changes. Provides the\n * current range of displayed dates and a mutable `customDate` property consumers can use\n * to modify individual dates on the calendar.\n */\n @Output()\n public calendarDateRangeChange = new EventEmitter<SkyDatepickerCalendarChange>();\n\n public calendarId: string;\n\n public customDates: SkyDatepickerCustomDate[] | undefined;\n\n public dateChange = new EventEmitter<Date>();\n\n public isDaypickerWaiting = false;\n\n public isOpen = false;\n\n public isVisible = false;\n\n public maxDate: Date;\n\n public minDate: Date;\n\n public startingDay: number;\n\n public triggerButtonId: string;\n\n @ViewChild(SkyDatepickerCalendarComponent)\n private calendar: SkyDatepickerCalendarComponent;\n\n @ViewChild('calendarRef', {\n read: ElementRef,\n })\n private set calendarRef(value: ElementRef) {\n if (value) {\n this._calendarRef = value;\n\n // Wait for the calendar component to render before gauging dimensions.\n setTimeout(() => {\n this.calendar.writeValue(this._selectedDate);\n\n this.destroyAffixer();\n this.createAffixer();\n\n setTimeout(() => {\n this.coreAdapter.getFocusableChildrenAndApplyFocus(\n this.calendarRef,\n '.sky-datepicker-calendar-inner',\n false\n );\n\n this.isVisible = true;\n this.changeDetector.markForCheck();\n });\n });\n }\n }\n\n private get calendarRef(): ElementRef {\n return this._calendarRef;\n }\n\n @ViewChild('calendarTemplateRef', {\n read: TemplateRef,\n })\n private calendarTemplateRef: TemplateRef<unknown>;\n\n @ViewChild('triggerButtonRef', {\n read: ElementRef,\n })\n private triggerButtonRef: ElementRef;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private inputTemplateRef: TemplateRef<unknown>;\n\n @ViewChild('triggerButtonTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private triggerButtonTemplateRef: TemplateRef<unknown>;\n\n private affixer: SkyAffixer;\n\n private calendarUnsubscribe: Subject<void>;\n\n private customDatesSubscription: Subscription;\n\n private ngUnsubscribe = new Subject();\n\n private overlay: SkyOverlayInstance;\n\n private overlayKeydownListner: Subscription;\n\n private _calendarRef: ElementRef;\n\n private _disabled = false;\n\n private _selectedDate: Date;\n\n constructor(\n private affixService: SkyAffixService,\n private changeDetector: ChangeDetectorRef,\n private coreAdapter: SkyCoreAdapterService,\n private overlayService: SkyOverlayService,\n @Optional() public inputBoxHostService?: SkyInputBoxHostService,\n @Optional() themeSvc?: SkyThemeService\n ) {\n const uniqueId = nextId++;\n this.calendarId = `sky-datepicker-calendar-${uniqueId}`;\n this.triggerButtonId = `sky-datepicker-button-${uniqueId}`;\n\n // Update icons when theme changes.\n themeSvc?.settingsChange\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.changeDetector.markForCheck();\n });\n }\n\n public ngOnInit(): void {\n if (this.inputBoxHostService) {\n this.inputBoxHostService.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.triggerButtonTemplateRef,\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.dateChange.complete();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.removePickerEventListeners();\n this.destroyAffixer();\n this.destroyOverlay();\n }\n\n public onCalendarModeChange(): void {\n // Let the calendar populate in the DOM before recalculating placement.\n setTimeout(() => {\n this.affixer.reaffix();\n });\n }\n\n public onSelectedDateChange(value: Date): void {\n this.dateChange.emit(value);\n this.closePicker();\n }\n\n public onTriggerButtonClick(): void {\n if (this.isOpen) {\n this.closePicker();\n } else {\n this.openPicker();\n }\n }\n\n public onCalendarDateRangeChange(event: SkyDatepickerCalendarChange): void {\n /* istanbul ignore else */\n if (event) {\n this.cancelCustomDatesSubscription();\n\n const args: SkyDatepickerCalendarChange = {\n startDate: event.startDate,\n endDate: event.endDate,\n customDates: undefined,\n };\n this.calendarDateRangeChange.emit(args);\n // If consumer has added an observable to the args, watch for incoming custom dates.\n /* istanbul ignore else */\n if (args.customDates) {\n this.isDaypickerWaiting = true;\n // Avoid an ExpressionChangedAfterItHasBeenCheckedError.\n this.changeDetector.detectChanges();\n\n this.customDatesSubscription = args.customDates\n .pipe(debounceTime(250))\n .subscribe((result) => {\n this.customDates = result;\n this.isDaypickerWaiting = false;\n\n // Trigger change detection in child components to show changes in the calendar.\n this.changeDetector.markForCheck();\n });\n } else {\n // If consumer returns an undefined value after custom dates have\n // already ben established, remove custom dates.\n if (this.customDates) {\n this.customDates = undefined;\n // Avoid an ExpressionChangedAfterItHasBeenCheckedError.\n this.changeDetector.detectChanges();\n }\n }\n }\n }\n\n private closePicker() {\n this.destroyAffixer();\n this.destroyOverlay();\n this.removePickerEventListeners();\n this.triggerButtonRef.nativeElement.focus();\n this.isOpen = false;\n }\n\n private openPicker(): void {\n this.isVisible = false;\n this.changeDetector.markForCheck();\n\n this.removePickerEventListeners();\n this.calendarUnsubscribe = new Subject<void>();\n this.destroyOverlay();\n this.createOverlay();\n\n this.isOpen = true;\n this.changeDetector.markForCheck();\n }\n\n private createAffixer(): void {\n const affixer = this.affixService.createAffixer(this.calendarRef);\n\n // Hide calendar when trigger button is scrolled off screen.\n affixer.placementChange\n .pipe(takeUntil(this.calendarUnsubscribe))\n .subscribe((change) => {\n this.isVisible = change.placement !== null;\n this.changeDetector.markForCheck();\n });\n\n affixer.affixTo(this.triggerButtonRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n horizontalAlignment: 'right',\n isSticky: true,\n placement: 'below',\n });\n\n this.affixer = affixer;\n }\n\n private destroyAffixer(): void {\n /*istanbul ignore else*/\n if (this.affixer) {\n this.affixer.destroy();\n this.affixer = undefined;\n }\n }\n\n private createOverlay(): void {\n const overlay = this.overlayService.create({\n wrapperClass: this.pickerClass,\n enableClose: false,\n enablePointerEvents: false,\n });\n\n overlay.backdropClick\n .pipe(takeUntil(this.calendarUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.closePicker();\n }\n });\n\n this.addKeydownListner();\n\n overlay.attachTemplate(this.calendarTemplateRef);\n\n this.overlay = overlay;\n }\n\n private destroyOverlay(): void {\n /*istanbul ignore else*/\n if (this.overlay) {\n this.overlayService.close(this.overlay);\n this.overlay = undefined;\n }\n }\n\n private addKeydownListner(): void {\n this.overlayKeydownListner = fromEvent(window.document, 'keydown')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((event: KeyboardEvent) => {\n const key = event.key?.toLowerCase();\n if (key === 'escape' && this.isOpen) {\n this.closePicker();\n }\n });\n }\n\n private removePickerEventListeners(): void {\n /* istanbul ignore else */\n if (this.calendarUnsubscribe) {\n this.calendarUnsubscribe.next();\n this.calendarUnsubscribe.complete();\n this.calendarUnsubscribe = undefined;\n }\n this.overlayKeydownListner?.unsubscribe();\n }\n\n private cancelCustomDatesSubscription(): void {\n if (this.customDatesSubscription) {\n this.customDatesSubscription.unsubscribe();\n this.customDatesSubscription = undefined;\n }\n }\n}\n","<div class=\"sky-datepicker\">\n <ng-container *ngIf=\"!inputBoxHostService\">\n <div class=\"sky-input-group\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\"></ng-container>\n <ng-container *ngTemplateOutlet=\"triggerButtonTemplateRef\"></ng-container>\n </div>\n </ng-container>\n</div>\n\n<ng-template #inputTemplateRef>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-template #triggerButtonTemplateRef>\n <div class=\"sky-input-group-btn\">\n <button\n aria-haspopup=\"dialog\"\n class=\"sky-btn sky-btn-default sky-input-group-datepicker-btn\"\n type=\"button\"\n [attr.aria-controls]=\"isOpen ? calendarId : null\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-label]=\"\n 'skyux_datepicker_trigger_button_label' | skyLibResources\n \"\n [attr.id]=\"triggerButtonId\"\n [attr.title]=\"'skyux_datepicker_trigger_button_label' | skyLibResources\"\n [disabled]=\"disabled\"\n (click)=\"onTriggerButtonClick()\"\n #triggerButtonRef\n >\n <sky-icon *skyThemeIf=\"'default'\" icon=\"calendar\" size=\"lg\"></sky-icon>\n <sky-icon\n *skyThemeIf=\"'modern'\"\n icon=\"calendar\"\n size=\"lg\"\n iconType=\"skyux\"\n ></sky-icon>\n </button>\n </div>\n</ng-template>\n\n<ng-template #calendarTemplateRef>\n <div\n class=\"sky-datepicker-calendar-container sky-shadow sky-elevation-4\"\n role=\"dialog\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n [attr.id]=\"calendarId\"\n [class.sky-datepicker-hidden]=\"!isVisible\"\n #calendarRef\n >\n <sky-datepicker-calendar\n [customDates]=\"customDates\"\n [isDaypickerWaiting]=\"isDaypickerWaiting\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [startingDay]=\"startingDay\"\n (calendarDateRangeChange)=\"onCalendarDateRangeChange($event)\"\n (calendarModeChange)=\"onCalendarModeChange()\"\n (selectedDateChange)=\"onSelectedDateChange($event)\"\n >\n </sky-datepicker-calendar>\n </div>\n</ng-template>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.component.ts","../../../../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,YAAY,EAGZ,QAAQ,EACR,MAAM,EACN,WAAW,EACX,SAAS,EACT,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,eAAe,EAEf,qBAAqB,EAErB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAgB,SAAS,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;;;;;;;;AAI3C,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf;;;;;GAKG;AAQH,MAAM,OAAO,sBAAsB;IAkMjC,YACU,YAA6B,EAC7B,cAAiC,EACjC,WAAkC,EAClC,cAAiC,EACtB,mBAA4C,EACnD,QAA0B;QAL9B,iBAAY,GAAZ,YAAY,CAAiB;QAC7B,mBAAc,GAAd,cAAc,CAAmB;QACjC,gBAAW,GAAX,WAAW,CAAuB;QAClC,mBAAc,GAAd,cAAc,CAAmB;QACtB,wBAAmB,GAAnB,mBAAmB,CAAyB;QAtMjE;;WAEG;QAEI,wBAAmB,GAA0C,IAAI,YAAY,EAA2B,CAAC;QAuGzG,WAAM,GAAG,KAAK,CAAC;QAcf,eAAU,GAAG,IAAI,CAAC;QA8DjB,kBAAa,GAAG,IAAI,OAAO,EAAE,CAAC;QAkBpC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,kBAAkB,QAAQ,EAAE,CAAC;QACjD,IAAI,CAAC,eAAe,GAAG,yBAAyB,QAAQ,EAAE,CAAC;QAE3D,mCAAmC;QACnC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,cAAc,CACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAClC,SAAS,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IA7MD,IAAW,QAAQ,CAAC,KAAc;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAW,YAAY,CAAC,OAAe;QACrC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,OAAO,KAAK,EAAE,EAAE;YACpD,UAAU,GAAG,CAAC,EAAE,CAAC;SAClB;QACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,IAAI,OAAO,KAAK,EAAE,EAAE;YACpD,UAAU,GAAG,EAAE,CAAC;SACjB;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,UAAU,GAAG,CAAC,CAAC;SAChB;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAEvE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACvB,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;SAClD,CAAC,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,IAAW,YAAY;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,0BAA0B;YAC1B,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SAC9D;QACD,0BAA0B;QAC1B,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,IAAW,gBAAgB,CAAC,QAAgB;QAC1C,0BAA0B;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,gBAAgB,EAAE;gBAC7C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;gBACpE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAClD;SACF;IACH,CAAC;IAED,IAAW,gBAAgB;QACzB,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC5C;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAW,cAAc,CAAC,MAAc;QACtC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7C,MAAM,EAAE,MAAM;SACf,CAAC,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,IAAW,YAAY,CAAC,OAAgC;QACtD,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;YAClC,kBAAkB;YAClB,0BAA0B;YAC1B,IAAI,OAAO,CAAC,KAAK,KAAK,cAAc,EAAE;gBACpC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;gBAClC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;aACpC;SACF;IACH,CAAC;IAED,IAAW,YAAY;QACrB,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;YACpC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;YACxC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC5C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YAC3D,OAAO,EAAE,IAAI,CAAC,UAAU;YACxB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;YACxD,YAAY,EACV,OAAO,IAAI,CAAC,YAAY,KAAK,WAAW;gBACtC,CAAC,CAAC,IAAI,CAAC,YAAY;gBACnB,CAAC,CAAC,IAAI,CAAC,YAAY;SACxB,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IA0BD,IAGY,aAAa,CAAC,KAAiB;QACzC,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAE5B,yEAAyE;YACzE,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,aAAa,EAAE,CAAC;gBAErB,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAChD,IAAI,CAAC,aAAa,EAClB,yBAAyB,EACzB,KAAK,CACN,CAAC;oBAEF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;gBACrC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IA0DM,QAAQ;QACb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAChC,aAAa,EAAE,IAAI,CAAC,gBAAgB;gBACpC,eAAe,EAAE,IAAI,CAAC,wBAAwB;aAC/C,CAAC,CAAC;SACJ;IACH,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEM,SAAS,CAAC,MAAc;QAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,YAAY,GAAG,QAAQ,CAAC;QAC5B,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,CAAC,GAAG,EAAE,CAAC;YACP,CAAC,GAAG,EAAE,CAAC;YACP,gBAAgB,GAAG,CAAC,CAAC;YACrB,YAAY,GAAG,QAAQ,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACrB;QACD,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,CAAC,GAAG,EAAE,CAAC;YACP,CAAC,GAAG,CAAC,CAAC;YACN,gBAAgB,GAAG,EAAE,CAAC;YACtB,YAAY,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;QAED,MAAM,IAAI,GAKN;YACF,yDAAyD;YACzD,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAI,MAAM,KAAK,IAAI,EAAE;oBACnB,OAAO,EAAE,CAAC,CAAC;iBACZ;gBACD,0BAA0B;gBAC1B,IAAI,MAAM,KAAK,IAAI,EAAE;oBACnB,OAAO,CAAC,CAAC;iBACV;gBACD,0BAA0B;gBAC1B,kBAAkB;gBAClB,OAAO,CAAC,CAAC;YACX,CAAC,CAAC;YACF,2DAA2D;YAC3D,OAAO,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,gBAAgB,CAAC;YAC9B,CAAC,CAAC;YACF,YAAY,EAAE,YAAY;YAC1B,gBAAgB,EAAE,gBAAgB;SACnC,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAChD,CAAC;IAEM,iBAAiB;QACtB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEM,OAAO,CAAC,KAAU;QACvB,0BAA0B;QAC1B,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;YAChC,0BAA0B;YAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC1B,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;oBAChC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;iBACzD;gBACD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;oBAClC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;iBAC3D;gBACD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;oBACnC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;iBAChD;aACF;SACF;IACH,CAAC;IAEM,oBAAoB;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QAEnC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,qBAAqB,GAAG,IAAI,OAAO,EAAQ,CAAC;QACjD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAEO,aAAa;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpE,8DAA8D;QAC9D,OAAO,CAAC,eAAe;aACpB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;aAC3C,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;YACpB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC;YAC3C,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;QAEL,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE;YACnD,cAAc,EAAE,sBAAsB,CAAC,QAAQ;YAC/C,aAAa,EAAE,IAAI;YACnB,mBAAmB,EAAE,OAAO;YAC5B,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,OAAO;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEO,cAAc;QACpB,wBAAwB;QACxB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;SAC1B;IACH,CAAC;IAEO,aAAa;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YACzC,WAAW,EAAE,KAAK;YAClB,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CAAC;QAEH,OAAO,CAAC,aAAa;aAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;aAC3C,SAAS,CAAC,GAAG,EAAE;YACd,0BAA0B;YAC1B,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;QACH,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEO,cAAc;QACpB,wBAAwB;QACxB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;SAC1B;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;aAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACnC,SAAS,CAAC,CAAC,KAAoB,EAAE,EAAE;;YAClC,MAAM,GAAG,GAAG,MAAA,KAAK,CAAC,GAAG,0CAAE,WAAW,EAAE,CAAC;YACrC,0BAA0B;YAC1B,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;gBACnC,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;QACH,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,0BAA0B;;QAChC,0BAA0B;QAC1B,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;SACxC;QACD,0BAA0B;QAC1B,MAAA,IAAI,CAAC,qBAAqB,0CAAE,WAAW,EAAE,CAAC;IAC5C,CAAC;;oHAhaU,sBAAsB;wGAAtB,sBAAsB,0MAiIzB,UAAU,yHA8BV,WAAW,+GAKX,UAAU,+GAKV,WAAW,6IAMX,WAAW,2CC7NrB,smHAsHA;4FDxEa,sBAAsB;kBAPlC,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,WAAW,EAAE,6BAA6B;oBAC1C,SAAS,EAAE,CAAC,6BAA6B,CAAC;oBAC1C,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;;0BAwMI,QAAQ;;0BACR,QAAQ;4CAnMJ,mBAAmB;sBADzB,MAAM;gBA+HK,aAAa;sBAHxB,SAAS;uBAAC,eAAe,EAAE;wBAC1B,IAAI,EAAE,UAAU;qBACjB;gBA+BO,qBAAqB;sBAH5B,SAAS;uBAAC,uBAAuB,EAAE;wBAClC,IAAI,EAAE,WAAW;qBAClB;gBAMO,gBAAgB;sBAHvB,SAAS;uBAAC,kBAAkB,EAAE;wBAC7B,IAAI,EAAE,UAAU;qBACjB;gBAOO,gBAAgB;sBAJvB,SAAS;uBAAC,kBAAkB,EAAE;wBAC7B,IAAI,EAAE,WAAW;wBACjB,MAAM,EAAE,IAAI;qBACb;gBAOO,wBAAwB;sBAJ/B,SAAS;uBAAC,0BAA0B,EAAE;wBACrC,IAAI,EAAE,WAAW;wBACjB,MAAM,EAAE,IAAI;qBACb","sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyCoreAdapterService,\n SkyOverlayInstance,\n SkyOverlayService,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport moment from 'moment';\nimport { Subject, Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyTimepickerTimeOutput } from './timepicker.interface';\n\nlet nextId = 0;\n\n/**\n * Creates a SKY UX-themed replacement for the HTML `input` element with `type=\"time\"`.\n * The value that users select is driven through the `ngModel` attribute\n * specified on the `input` element. You must wrap this component around an `input`\n * with the `skyTimepickerInput` directive.\n */\n@Component({\n selector: 'sky-timepicker',\n templateUrl: './timepicker.component.html',\n styleUrls: ['./timepicker.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyTimepickerComponent implements OnInit, OnDestroy {\n /**\n * Fires when the value in the timepicker input changes.\n */\n @Output()\n public selectedTimeChanged: EventEmitter<SkyTimepickerTimeOutput> = new EventEmitter<SkyTimepickerTimeOutput>();\n\n public set disabled(value: boolean) {\n this._disabled = value;\n this.changeDetector.markForCheck();\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set selectedHour(setHour: number) {\n let hourOffset = 0;\n if (this.selectedMeridies === 'AM' && setHour === 12) {\n hourOffset = -12;\n }\n if (this.selectedMeridies === 'PM' && setHour !== 12) {\n hourOffset = 12;\n }\n if (this.is8601) {\n hourOffset = 0;\n }\n const hour = moment({ hour: setHour }).add(hourOffset, 'hours').hour();\n\n this.activeTime = moment({\n hour: hour,\n minute: moment(this.activeTime).get('minute') + 0,\n }).toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n\n public get selectedHour(): number {\n if (!this.is8601) {\n /* istanbul ignore next */\n return parseInt(moment(this.activeTime).format('h'), 0) || 1;\n }\n /* istanbul ignore else */\n if (this.is8601) {\n return moment(this.activeTime).hour() + 0;\n }\n }\n\n public set selectedMeridies(meridies: string) {\n /* istanbul ignore else */\n if (!this.is8601) {\n if (meridies.trim() !== this.selectedMeridies) {\n this.activeTime = moment(this.activeTime).add(12, 'hours').toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n }\n }\n\n public get selectedMeridies(): string {\n if (this.activeTime) {\n return moment(this.activeTime).format('A');\n }\n return '';\n }\n\n public set selectedMinute(minute: number) {\n this.activeTime = moment({\n hour: moment(this.activeTime).get('hour') + 0,\n minute: minute,\n }).toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n\n public get selectedMinute(): number {\n return moment(this.activeTime).minute() + 0;\n }\n\n public set selectedTime(newTime: SkyTimepickerTimeOutput) {\n if (typeof newTime !== 'undefined') {\n /* sanity check */\n /* istanbul ignore else */\n if (newTime.local !== 'Invalid date') {\n this.activeTime = newTime.iso8601;\n this.changeDetector.markForCheck();\n }\n }\n }\n\n public get selectedTime(): SkyTimepickerTimeOutput {\n const time: SkyTimepickerTimeOutput = {\n hour: moment(this.activeTime).hour(),\n minute: moment(this.activeTime).minute(),\n meridie: moment(this.activeTime).format('A'),\n timezone: parseInt(moment(this.activeTime).format('Z'), 10),\n iso8601: this.activeTime,\n local: moment(this.activeTime).format(this.localeFormat),\n customFormat:\n typeof this.returnFormat !== 'undefined'\n ? this.returnFormat\n : this.localeFormat,\n };\n\n return time;\n }\n\n public activeTime: Date;\n\n public hours: Array<number>;\n\n public is8601 = false;\n\n public isOpen: boolean;\n\n public isVisible: boolean;\n\n public localeFormat: string;\n\n public minutes: Array<number>;\n\n public minuteMultiplier: number;\n\n public returnFormat: string;\n\n public timeFormat = 'hh';\n\n public timepickerId: string;\n\n public triggerButtonId: string;\n\n @ViewChild('timepickerRef', {\n read: ElementRef,\n })\n private set timepickerRef(value: ElementRef) {\n if (value) {\n this._timepickerRef = value;\n\n // Wait for the timepicker component to render before guaging dimensions.\n setTimeout(() => {\n this.destroyAffixer();\n this.createAffixer();\n\n setTimeout(() => {\n this.coreAdapter.getFocusableChildrenAndApplyFocus(\n this.timepickerRef,\n '.sky-timepicker-content',\n false\n );\n\n this.isVisible = true;\n this.changeDetector.markForCheck();\n });\n });\n }\n }\n\n private get timepickerRef(): ElementRef {\n return this._timepickerRef;\n }\n\n @ViewChild('timepickerTemplateRef', {\n read: TemplateRef,\n })\n private timepickerTemplateRef: TemplateRef<any>;\n\n @ViewChild('triggerButtonRef', {\n read: ElementRef,\n })\n private triggerButtonRef: ElementRef;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private inputTemplateRef: TemplateRef<any>;\n\n @ViewChild('triggerButtonTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private triggerButtonTemplateRef: TemplateRef<any>;\n\n private affixer: SkyAffixer;\n\n private timepickerUnsubscribe: Subject<void>;\n\n private ngUnsubscribe = new Subject();\n\n private overlay: SkyOverlayInstance;\n\n private overlayKeydownListner: Subscription;\n\n private _disabled: boolean;\n\n private _timepickerRef: ElementRef;\n\n constructor(\n private affixService: SkyAffixService,\n private changeDetector: ChangeDetectorRef,\n private coreAdapter: SkyCoreAdapterService,\n private overlayService: SkyOverlayService,\n @Optional() public inputBoxHostService?: SkyInputBoxHostService,\n @Optional() themeSvc?: SkyThemeService\n ) {\n const uniqueId = nextId++;\n this.timepickerId = `sky-timepicker-${uniqueId}`;\n this.triggerButtonId = `sky-timepicker-button-${uniqueId}`;\n\n // Update icons when theme changes.\n themeSvc?.settingsChange\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.changeDetector.markForCheck();\n });\n }\n\n public ngOnInit(): void {\n this.setFormat(this.timeFormat);\n this.addKeydownListner();\n\n if (this.inputBoxHostService) {\n this.inputBoxHostService.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.triggerButtonTemplateRef,\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.removePickerEventListeners();\n this.destroyAffixer();\n this.destroyOverlay();\n }\n\n public setFormat(format: string): void {\n let h = 12;\n let m = 12;\n let minuteMultiplier = 5;\n let localeFormat = 'h:mm A';\n if (format === 'hh') {\n h = 12;\n m = 12;\n minuteMultiplier = 5;\n localeFormat = 'h:mm A';\n this.is8601 = false;\n }\n if (format === 'HH') {\n h = 24;\n m = 4;\n minuteMultiplier = 15;\n localeFormat = 'HH:mm';\n this.is8601 = true;\n }\n\n const data: {\n hours: number[];\n minutes: number[];\n localeFormat: string;\n minuteMultiplier: number;\n } = {\n // Create a sparse array with a length equal to the hour.\n hours: Array(...Array(h)).map((_, i) => {\n if (format === 'hh') {\n return ++i;\n }\n /* istanbul ignore else */\n if (format === 'HH') {\n return i;\n }\n /* istanbul ignore next */\n /* sanity check */\n return 0;\n }),\n // Create a sparse array with a length equal to the minute.\n minutes: Array(...Array(m)).map(function (_, i) {\n return i * minuteMultiplier;\n }),\n localeFormat: localeFormat,\n minuteMultiplier: minuteMultiplier,\n };\n\n this.hours = data.hours;\n this.minutes = data.minutes;\n this.localeFormat = data.localeFormat;\n this.minuteMultiplier = data.minuteMultiplier;\n }\n\n public onCloseButtonCick(): void {\n this.closePicker();\n }\n\n public setTime(event: any): void {\n /* istanbul ignore else */\n if (typeof event !== 'undefined') {\n /* istanbul ignore else */\n if (event.type === 'click') {\n event.stopPropagation();\n if (event.target.name === 'hour') {\n this.selectedHour = parseInt(event.target.innerHTML, 0);\n }\n if (event.target.name === 'minute') {\n this.selectedMinute = parseInt(event.target.innerHTML, 0);\n }\n if (event.target.name === 'meridie') {\n this.selectedMeridies = event.target.innerHTML;\n }\n }\n }\n }\n\n public onTriggerButtonClick(): void {\n this.openPicker();\n }\n\n private closePicker() {\n this.destroyAffixer();\n this.destroyOverlay();\n this.removePickerEventListeners();\n this.triggerButtonRef.nativeElement.focus();\n this.isOpen = false;\n }\n\n private openPicker(): void {\n this.isVisible = false;\n this.changeDetector.markForCheck();\n\n this.removePickerEventListeners();\n this.timepickerUnsubscribe = new Subject<void>();\n this.destroyOverlay();\n this.createOverlay();\n\n this.isOpen = true;\n this.changeDetector.markForCheck();\n }\n\n private createAffixer(): void {\n const affixer = this.affixService.createAffixer(this.timepickerRef);\n\n // Hide timepicker when trigger button is scrolled off screen.\n affixer.placementChange\n .pipe(takeUntil(this.timepickerUnsubscribe))\n .subscribe((change) => {\n this.isVisible = change.placement !== null;\n this.changeDetector.markForCheck();\n });\n\n affixer.affixTo(this.triggerButtonRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n horizontalAlignment: 'right',\n isSticky: true,\n placement: 'below',\n });\n\n this.affixer = affixer;\n }\n\n private destroyAffixer(): void {\n /*istanbul ignore else*/\n if (this.affixer) {\n this.affixer.destroy();\n this.affixer = undefined;\n }\n }\n\n private createOverlay(): void {\n const overlay = this.overlayService.create({\n enableClose: false,\n enablePointerEvents: false,\n });\n\n overlay.backdropClick\n .pipe(takeUntil(this.timepickerUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.closePicker();\n }\n });\n\n this.addKeydownListner();\n\n overlay.attachTemplate(this.timepickerTemplateRef);\n\n this.overlay = overlay;\n }\n\n private destroyOverlay(): void {\n /*istanbul ignore else*/\n if (this.overlay) {\n this.overlayService.close(this.overlay);\n this.overlay = undefined;\n }\n }\n\n private addKeydownListner(): void {\n this.overlayKeydownListner = fromEvent(window.document, 'keydown')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((event: KeyboardEvent) => {\n const key = event.key?.toLowerCase();\n /* istanbul ignore else */\n if (key === 'escape' && this.isOpen) {\n this.closePicker();\n }\n });\n }\n\n private removePickerEventListeners(): void {\n /* istanbul ignore else */\n if (this.timepickerUnsubscribe) {\n this.timepickerUnsubscribe.next();\n this.timepickerUnsubscribe.complete();\n this.timepickerUnsubscribe = undefined;\n }\n /* istanbul ignore next */\n this.overlayKeydownListner?.unsubscribe();\n }\n}\n","<div class=\"sky-timepicker\">\n <ng-container *ngIf=\"!inputBoxHostService\">\n <div class=\"sky-input-group\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\"></ng-container>\n <ng-container *ngTemplateOutlet=\"triggerButtonTemplateRef\"></ng-container>\n </div>\n </ng-container>\n</div>\n\n<ng-template #inputTemplateRef>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-template #triggerButtonTemplateRef>\n <div class=\"sky-input-group-btn\">\n <button\n aria-haspopup=\"dialog\"\n class=\"sky-btn sky-btn-default sky-input-group-timepicker-btn\"\n type=\"button\"\n [attr.aria-controls]=\"isOpen ? timepickerId : null\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-label]=\"'skyux_timepicker_button_label' | skyLibResources\"\n [attr.id]=\"triggerButtonId\"\n [attr.title]=\"'skyux_timepicker_button_label' | skyLibResources\"\n [disabled]=\"disabled\"\n (click)=\"onTriggerButtonClick()\"\n #triggerButtonRef\n >\n <sky-icon *skyThemeIf=\"'default'\" icon=\"clock-o\" size=\"lg\"></sky-icon>\n <sky-icon\n *skyThemeIf=\"'modern'\"\n icon=\"clock\"\n size=\"lg\"\n iconType=\"skyux\"\n ></sky-icon>\n </button>\n </div>\n</ng-template>\n\n<ng-template #timepickerTemplateRef>\n <div\n class=\"sky-timepicker-container sky-shadow sky-box sky-elevation-4\"\n role=\"dialog\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n [attr.id]=\"timepickerId\"\n [class.sky-timepicker-hidden]=\"!isVisible\"\n #timepickerRef\n >\n <div class=\"sky-timepicker-content\">\n <section\n class=\"sky-timepicker-column\"\n [ngClass]=\"{ 'sky-timepicker-24hour': is8601 }\"\n >\n <ol>\n <li *ngFor=\"let hour of hours\">\n <button\n name=\"hour\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedHour === hour }\"\n (click)=\"setTime($event)\"\n >\n {{ hour }}\n </button>\n </li>\n </ol>\n </section>\n <section class=\"sky-timepicker-column\">\n <ol>\n <li *ngFor=\"let minute of minutes\">\n <button\n name=\"minute\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedMinute === minute }\"\n (click)=\"setTime($event)\"\n >\n {{ '00'.substring(0, 2 - minute.toString().length) + minute }}\n </button>\n </li>\n </ol>\n </section>\n <section *ngIf=\"!is8601\" class=\"sky-timepicker-column\">\n <ol>\n <li>\n <button\n name=\"meridie\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedMeridies === 'AM' }\"\n (click)=\"setTime($event)\"\n >\n AM\n </button>\n </li>\n <li>\n <button\n name=\"meridie\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedMeridies === 'PM' }\"\n (click)=\"setTime($event)\"\n >\n PM\n </button>\n </li>\n </ol>\n </section>\n </div>\n <div class=\"sky-timepicker-footer\">\n <section class=\"sky-timepicker-column\">\n <button\n class=\"sky-btn sky-btn-primary\"\n type=\"button\"\n (click)=\"onCloseButtonCick()\"\n >\n {{ 'skyux_timepicker_close' | skyLibResources }}\n </button>\n </section>\n </div>\n </div>\n</ng-template>\n"]}
1
+ {"version":3,"file":"timepicker.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.component.ts","../../../../../../../../libs/components/datetime/src/lib/modules/timepicker/timepicker.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyCoreAdapterService,\n SkyOverlayInstance,\n SkyOverlayService,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport moment from 'moment';\nimport { Subject, Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyTimepickerTimeOutput } from './timepicker.interface';\n\nlet nextId = 0;\n\n/**\n * Creates a SKY UX-themed replacement for the HTML `input` element with `type=\"time\"`.\n * The value that users select is driven through the `ngModel` attribute\n * specified on the `input` element. You must wrap this component around an `input`\n * with the `skyTimepickerInput` directive.\n */\n@Component({\n selector: 'sky-timepicker',\n templateUrl: './timepicker.component.html',\n styleUrls: ['./timepicker.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyTimepickerComponent implements OnInit, OnDestroy {\n /**\n * Fires when the value in the timepicker input changes.\n */\n @Output()\n public selectedTimeChanged: EventEmitter<SkyTimepickerTimeOutput> = new EventEmitter<SkyTimepickerTimeOutput>();\n\n public set disabled(value: boolean) {\n this._disabled = value;\n this.changeDetector.markForCheck();\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set selectedHour(setHour: number) {\n let hourOffset = 0;\n if (this.selectedMeridies === 'AM' && setHour === 12) {\n hourOffset = -12;\n }\n if (this.selectedMeridies === 'PM' && setHour !== 12) {\n hourOffset = 12;\n }\n if (this.is8601) {\n hourOffset = 0;\n }\n const hour = moment({ hour: setHour }).add(hourOffset, 'hours').hour();\n\n this.activeTime = moment({\n hour: hour,\n minute: moment(this.activeTime).get('minute') + 0,\n }).toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n\n public get selectedHour(): number {\n if (!this.is8601) {\n /* istanbul ignore next */\n return parseInt(moment(this.activeTime).format('h'), 0) || 1;\n }\n /* istanbul ignore else */\n if (this.is8601) {\n return moment(this.activeTime).hour() + 0;\n }\n }\n\n public set selectedMeridies(meridies: string) {\n /* istanbul ignore else */\n if (!this.is8601) {\n if (meridies.trim() !== this.selectedMeridies) {\n this.activeTime = moment(this.activeTime).add(12, 'hours').toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n }\n }\n\n public get selectedMeridies(): string {\n if (this.activeTime) {\n return moment(this.activeTime).format('A');\n }\n return '';\n }\n\n public set selectedMinute(minute: number) {\n this.activeTime = moment({\n hour: moment(this.activeTime).get('hour') + 0,\n minute: minute,\n }).toDate();\n this.selectedTimeChanged.emit(this.selectedTime);\n }\n\n public get selectedMinute(): number {\n return moment(this.activeTime).minute() + 0;\n }\n\n public set selectedTime(newTime: SkyTimepickerTimeOutput) {\n if (typeof newTime !== 'undefined') {\n /* sanity check */\n /* istanbul ignore else */\n if (newTime.local !== 'Invalid date') {\n this.activeTime = newTime.iso8601;\n this.changeDetector.markForCheck();\n }\n }\n }\n\n public get selectedTime(): SkyTimepickerTimeOutput {\n const time: SkyTimepickerTimeOutput = {\n hour: moment(this.activeTime).hour(),\n minute: moment(this.activeTime).minute(),\n meridie: moment(this.activeTime).format('A'),\n timezone: parseInt(moment(this.activeTime).format('Z'), 10),\n iso8601: this.activeTime,\n local: moment(this.activeTime).format(this.localeFormat),\n customFormat:\n typeof this.returnFormat !== 'undefined'\n ? this.returnFormat\n : this.localeFormat,\n };\n\n return time;\n }\n\n public activeTime: Date;\n\n public hours: Array<number>;\n\n public is8601 = false;\n\n public isOpen: boolean;\n\n public isVisible: boolean;\n\n public localeFormat: string;\n\n public minutes: Array<number>;\n\n public minuteMultiplier: number;\n\n public returnFormat: string;\n\n public timeFormat = 'hh';\n\n public timepickerId: string;\n\n public triggerButtonId: string;\n\n @ViewChild('timepickerRef', {\n read: ElementRef,\n })\n private set timepickerRef(value: ElementRef) {\n if (value) {\n this._timepickerRef = value;\n\n // Wait for the timepicker component to render before guaging dimensions.\n setTimeout(() => {\n this.destroyAffixer();\n this.createAffixer();\n\n setTimeout(() => {\n this.coreAdapter.getFocusableChildrenAndApplyFocus(\n this.timepickerRef,\n '.sky-timepicker-content',\n false\n );\n\n this.isVisible = true;\n this.changeDetector.markForCheck();\n });\n });\n }\n }\n\n private get timepickerRef(): ElementRef {\n return this._timepickerRef;\n }\n\n @ViewChild('timepickerTemplateRef', {\n read: TemplateRef,\n })\n private timepickerTemplateRef: TemplateRef<unknown>;\n\n @ViewChild('triggerButtonRef', {\n read: ElementRef,\n })\n private triggerButtonRef: ElementRef;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private inputTemplateRef: TemplateRef<unknown>;\n\n @ViewChild('triggerButtonTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private triggerButtonTemplateRef: TemplateRef<unknown>;\n\n private affixer: SkyAffixer;\n\n private timepickerUnsubscribe: Subject<void>;\n\n private ngUnsubscribe = new Subject();\n\n private overlay: SkyOverlayInstance;\n\n private overlayKeydownListner: Subscription;\n\n private _disabled: boolean;\n\n private _timepickerRef: ElementRef;\n\n constructor(\n private affixService: SkyAffixService,\n private changeDetector: ChangeDetectorRef,\n private coreAdapter: SkyCoreAdapterService,\n private overlayService: SkyOverlayService,\n @Optional() public inputBoxHostService?: SkyInputBoxHostService,\n @Optional() themeSvc?: SkyThemeService\n ) {\n const uniqueId = nextId++;\n this.timepickerId = `sky-timepicker-${uniqueId}`;\n this.triggerButtonId = `sky-timepicker-button-${uniqueId}`;\n\n // Update icons when theme changes.\n themeSvc?.settingsChange\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.changeDetector.markForCheck();\n });\n }\n\n public ngOnInit(): void {\n this.setFormat(this.timeFormat);\n this.addKeydownListner();\n\n if (this.inputBoxHostService) {\n this.inputBoxHostService.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsTemplate: this.triggerButtonTemplateRef,\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.removePickerEventListeners();\n this.destroyAffixer();\n this.destroyOverlay();\n }\n\n public setFormat(format: string): void {\n let h = 12;\n let m = 12;\n let minuteMultiplier = 5;\n let localeFormat = 'h:mm A';\n if (format === 'hh') {\n h = 12;\n m = 12;\n minuteMultiplier = 5;\n localeFormat = 'h:mm A';\n this.is8601 = false;\n }\n if (format === 'HH') {\n h = 24;\n m = 4;\n minuteMultiplier = 15;\n localeFormat = 'HH:mm';\n this.is8601 = true;\n }\n\n const data: {\n hours: number[];\n minutes: number[];\n localeFormat: string;\n minuteMultiplier: number;\n } = {\n // Create a sparse array with a length equal to the hour.\n hours: Array(...Array(h)).map((_, i) => {\n if (format === 'hh') {\n return ++i;\n }\n /* istanbul ignore else */\n if (format === 'HH') {\n return i;\n }\n /* istanbul ignore next */\n /* sanity check */\n return 0;\n }),\n // Create a sparse array with a length equal to the minute.\n minutes: Array(...Array(m)).map(function (_, i) {\n return i * minuteMultiplier;\n }),\n localeFormat: localeFormat,\n minuteMultiplier: minuteMultiplier,\n };\n\n this.hours = data.hours;\n this.minutes = data.minutes;\n this.localeFormat = data.localeFormat;\n this.minuteMultiplier = data.minuteMultiplier;\n }\n\n public onCloseButtonCick(): void {\n this.closePicker();\n }\n\n public setTime(event: any): void {\n /* istanbul ignore else */\n if (typeof event !== 'undefined') {\n /* istanbul ignore else */\n if (event.type === 'click') {\n event.stopPropagation();\n if (event.target.name === 'hour') {\n this.selectedHour = parseInt(event.target.innerHTML, 0);\n }\n if (event.target.name === 'minute') {\n this.selectedMinute = parseInt(event.target.innerHTML, 0);\n }\n if (event.target.name === 'meridie') {\n this.selectedMeridies = event.target.innerHTML;\n }\n }\n }\n }\n\n public onTriggerButtonClick(): void {\n this.openPicker();\n }\n\n private closePicker() {\n this.destroyAffixer();\n this.destroyOverlay();\n this.removePickerEventListeners();\n this.triggerButtonRef.nativeElement.focus();\n this.isOpen = false;\n }\n\n private openPicker(): void {\n this.isVisible = false;\n this.changeDetector.markForCheck();\n\n this.removePickerEventListeners();\n this.timepickerUnsubscribe = new Subject<void>();\n this.destroyOverlay();\n this.createOverlay();\n\n this.isOpen = true;\n this.changeDetector.markForCheck();\n }\n\n private createAffixer(): void {\n const affixer = this.affixService.createAffixer(this.timepickerRef);\n\n // Hide timepicker when trigger button is scrolled off screen.\n affixer.placementChange\n .pipe(takeUntil(this.timepickerUnsubscribe))\n .subscribe((change) => {\n this.isVisible = change.placement !== null;\n this.changeDetector.markForCheck();\n });\n\n affixer.affixTo(this.triggerButtonRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n horizontalAlignment: 'right',\n isSticky: true,\n placement: 'below',\n });\n\n this.affixer = affixer;\n }\n\n private destroyAffixer(): void {\n /*istanbul ignore else*/\n if (this.affixer) {\n this.affixer.destroy();\n this.affixer = undefined;\n }\n }\n\n private createOverlay(): void {\n const overlay = this.overlayService.create({\n enableClose: false,\n enablePointerEvents: false,\n });\n\n overlay.backdropClick\n .pipe(takeUntil(this.timepickerUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.closePicker();\n }\n });\n\n this.addKeydownListner();\n\n overlay.attachTemplate(this.timepickerTemplateRef);\n\n this.overlay = overlay;\n }\n\n private destroyOverlay(): void {\n /*istanbul ignore else*/\n if (this.overlay) {\n this.overlayService.close(this.overlay);\n this.overlay = undefined;\n }\n }\n\n private addKeydownListner(): void {\n this.overlayKeydownListner = fromEvent(window.document, 'keydown')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((event: KeyboardEvent) => {\n const key = event.key?.toLowerCase();\n /* istanbul ignore else */\n if (key === 'escape' && this.isOpen) {\n this.closePicker();\n }\n });\n }\n\n private removePickerEventListeners(): void {\n /* istanbul ignore else */\n if (this.timepickerUnsubscribe) {\n this.timepickerUnsubscribe.next();\n this.timepickerUnsubscribe.complete();\n this.timepickerUnsubscribe = undefined;\n }\n /* istanbul ignore next */\n this.overlayKeydownListner?.unsubscribe();\n }\n}\n","<div class=\"sky-timepicker\">\n <ng-container *ngIf=\"!inputBoxHostService\">\n <div class=\"sky-input-group\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\"></ng-container>\n <ng-container *ngTemplateOutlet=\"triggerButtonTemplateRef\"></ng-container>\n </div>\n </ng-container>\n</div>\n\n<ng-template #inputTemplateRef>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-template #triggerButtonTemplateRef>\n <div class=\"sky-input-group-btn\">\n <button\n aria-haspopup=\"dialog\"\n class=\"sky-btn sky-btn-default sky-input-group-timepicker-btn\"\n type=\"button\"\n [attr.aria-controls]=\"isOpen ? timepickerId : null\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-label]=\"'skyux_timepicker_button_label' | skyLibResources\"\n [attr.id]=\"triggerButtonId\"\n [attr.title]=\"'skyux_timepicker_button_label' | skyLibResources\"\n [disabled]=\"disabled\"\n (click)=\"onTriggerButtonClick()\"\n #triggerButtonRef\n >\n <sky-icon *skyThemeIf=\"'default'\" icon=\"clock-o\" size=\"lg\"></sky-icon>\n <sky-icon\n *skyThemeIf=\"'modern'\"\n icon=\"clock\"\n size=\"lg\"\n iconType=\"skyux\"\n ></sky-icon>\n </button>\n </div>\n</ng-template>\n\n<ng-template #timepickerTemplateRef>\n <div\n class=\"sky-timepicker-container sky-shadow sky-box sky-elevation-4\"\n role=\"dialog\"\n [attr.aria-labelledby]=\"triggerButtonId\"\n [attr.id]=\"timepickerId\"\n [class.sky-timepicker-hidden]=\"!isVisible\"\n #timepickerRef\n >\n <div class=\"sky-timepicker-content\">\n <section\n class=\"sky-timepicker-column\"\n [ngClass]=\"{ 'sky-timepicker-24hour': is8601 }\"\n >\n <ol>\n <li *ngFor=\"let hour of hours\">\n <button\n name=\"hour\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedHour === hour }\"\n (click)=\"setTime($event)\"\n >\n {{ hour }}\n </button>\n </li>\n </ol>\n </section>\n <section class=\"sky-timepicker-column\">\n <ol>\n <li *ngFor=\"let minute of minutes\">\n <button\n name=\"minute\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedMinute === minute }\"\n (click)=\"setTime($event)\"\n >\n {{ '00'.substring(0, 2 - minute.toString().length) + minute }}\n </button>\n </li>\n </ol>\n </section>\n <section *ngIf=\"!is8601\" class=\"sky-timepicker-column\">\n <ol>\n <li>\n <button\n name=\"meridie\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedMeridies === 'AM' }\"\n (click)=\"setTime($event)\"\n >\n AM\n </button>\n </li>\n <li>\n <button\n name=\"meridie\"\n type=\"button\"\n [ngClass]=\"{ 'sky-btn-active': selectedMeridies === 'PM' }\"\n (click)=\"setTime($event)\"\n >\n PM\n </button>\n </li>\n </ol>\n </section>\n </div>\n <div class=\"sky-timepicker-footer\">\n <section class=\"sky-timepicker-column\">\n <button\n class=\"sky-btn sky-btn-primary\"\n type=\"button\"\n (click)=\"onCloseButtonCick()\"\n >\n {{ 'skyux_timepicker_close' | skyLibResources }}\n </button>\n </section>\n </div>\n </div>\n</ng-template>\n"]}