@fundamental-ngx/core 0.46.0-rc.85 → 0.46.0-rc.86

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,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1jb2x1bW4tY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdGltZS90aW1lLWNvbHVtbi90aW1lLWNvbHVtbi1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZkTGFuZ3VhZ2VLZXlJZGVudGlmaWVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lQ29sdW1uQ29uZmlnIHtcbiAgICBkZWNyZWFzZUxhYmVsOiBGZExhbmd1YWdlS2V5SWRlbnRpZmllcjtcbiAgICBpbmNyZWFzZUxhYmVsOiBGZExhbmd1YWdlS2V5SWRlbnRpZmllcjtcbiAgICBsYWJlbDogRmRMYW5ndWFnZUtleUlkZW50aWZpZXI7XG4gICAgbmF2aWdhdGlvbkluc3RydWN0aW9uOiBGZExhbmd1YWdlS2V5SWRlbnRpZmllcjtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1jb2x1bW4tY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdGltZS90aW1lLWNvbHVtbi90aW1lLWNvbHVtbi1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZkTGFuZ3VhZ2VLZXlJZGVudGlmaWVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lQ29sdW1uQ29uZmlnIHtcbiAgICBkZWNyZWFzZUxhYmVsOiBGZExhbmd1YWdlS2V5SWRlbnRpZmllcjtcbiAgICBpbmNyZWFzZUxhYmVsOiBGZExhbmd1YWdlS2V5SWRlbnRpZmllcjtcbiAgICBsYWJlbDogRmRMYW5ndWFnZUtleUlkZW50aWZpZXI7XG4gICAgZnVsbExhYmVsOiBGZExhbmd1YWdlS2V5SWRlbnRpZmllcjtcbiAgICBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb246IEZkTGFuZ3VhZ2VLZXlJZGVudGlmaWVyO1xufVxuIl19
@@ -390,7 +390,8 @@ export class TimeColumnComponent {
390
390
  case 'hours':
391
391
  this.internalTranslationConfig = {
392
392
  increaseLabel: 'coreTime.increaseHoursLabel',
393
- label: 'coreTime.hoursLabel',
393
+ label: 'coreTime.hrsLabel',
394
+ fullLabel: 'coreTime.hoursLabel',
394
395
  decreaseLabel: 'coreTime.decreaseHoursLabel',
395
396
  navigationInstruction: 'coreTime.navigationInstruction'
396
397
  };
@@ -398,7 +399,8 @@ export class TimeColumnComponent {
398
399
  case 'minutes':
399
400
  this.internalTranslationConfig = {
400
401
  increaseLabel: 'coreTime.increaseMinutesLabel',
401
- label: 'coreTime.minutesLabel',
402
+ label: 'coreTime.minLabel',
403
+ fullLabel: 'coreTime.minutesLabel',
402
404
  decreaseLabel: 'coreTime.decreaseMinutesLabel',
403
405
  navigationInstruction: 'coreTime.navigationInstruction'
404
406
  };
@@ -406,7 +408,8 @@ export class TimeColumnComponent {
406
408
  case 'seconds':
407
409
  this.internalTranslationConfig = {
408
410
  increaseLabel: 'coreTime.increaseSecondsLabel',
409
- label: 'coreTime.secondsLabel',
411
+ label: 'coreTime.secLabel',
412
+ fullLabel: 'coreTime.secondsLabel',
410
413
  decreaseLabel: 'coreTime.decreaseSecondsLabel',
411
414
  navigationInstruction: 'coreTime.navigationInstruction'
412
415
  };
@@ -415,6 +418,7 @@ export class TimeColumnComponent {
415
418
  this.internalTranslationConfig = {
416
419
  increaseLabel: 'coreTime.increasePeriodLabel',
417
420
  label: 'coreTime.periodLabel',
421
+ fullLabel: 'coreTime.periodLabel',
418
422
  decreaseLabel: 'coreTime.decreasePeriodLabel',
419
423
  navigationInstruction: 'coreTime.navigationInstruction'
420
424
  };
@@ -426,13 +430,13 @@ export class TimeColumnComponent {
426
430
  this._changeDetRef.markForCheck();
427
431
  }
428
432
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: TimeColumnComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
429
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: TimeColumnComponent, isStandalone: true, selector: "fd-time-column", inputs: { rows: "rows", spinners: "spinners", activeValue: "activeValue", active: "active", meridian: "meridian", id: "id", timeConfig: "timeConfig", columnTranslationsPreset: "columnTranslationsPreset", offset: "offset", elementsAtOnce: "elementsAtOnce" }, outputs: { activeValueChange: "activeValueChange", activeStateChange: "activeStateChange" }, host: { listeners: { "click": "onItemClick()", "keydown": "keyDownHandler($event)", "wheel": "mouseScrollHandler($event)" }, properties: { "class.fd-time__col--period": "this.meridian" }, classAttribute: "fd-time__col" }, viewQueries: [{ propertyName: "carousel", first: true, predicate: CarouselDirective, descendants: true }, { propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, read: ElementRef }, { propertyName: "items", predicate: CarouselItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label class=\"fd-time__slider-label\">{{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate))\n}}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n (click)=\"scrollUp($event)\"\n></button>\n<div\n class=\"fd-time__wrapper\"\n [class.fd-time__wrapper--active]=\"active\"\n [class.fd-time__wrapper--meridian]=\"meridian\"\n [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n <ul\n class=\"fd-time__list\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [config]=\"config\"\n (click)=\"indicator.focus()\"\n (activeChange)=\"activeChangedHandle($event)\"\n (dragStateChange)=\"handleDrag($event)\"\n fdCarousel\n >\n <li\n class=\"fd-time__item\"\n fdCarouselItem\n *ngFor=\"let row of rows; let index = index\"\n #item=\"fdCarouselItem\"\n [id]=\"_createColumnItemIdByIndex(index)\"\n [attr.data-displayed-value]=\"row.value\"\n [value]=\"row\"\n >\n <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n {{ row.label }}\n </span>\n </li>\n </ul>\n <div\n class=\"fd-time__current-indicator\"\n #indicator\n tabindex=\"0\"\n role=\"listbox\"\n [attr.id]=\"currentIndicatorId\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [attr.aria-labelledby]=\"currentIndicatorValueId\"\n [attr.aria-description]=\"\n timeConfig?.navigationInstruction ||\n (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate))\n \"\n (focus)=\"_onFocusIndicator()\"\n >\n <span\n class=\"fd-time-column-custom-hidden\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [attr.aria-hidden]=\"!active\"\n [attr.id]=\"currentIndicatorValueId\"\n [class.fd-time-column-custom-hidden]=\"active\"\n >\n {{ activeValue?.label }}\n {{ timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate)) }}\n </span>\n </div>\n <span *ngIf=\"!active\" class=\"fd-time__item fd-time__item--collapsed\">\n {{ activeValue?.label }}\n </span>\n</div>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-down-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n", styles: [".fd-time__col .fd-carousel{transition:all .2s ease-in}.fd-time__list{overflow:visible}.fd-time-column-custom-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.fd-time__current-indicator{pointer-events:none}.fd-time__current-indicator:focus{outline:none}.fd-time--compact .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed,.fd-time .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed{margin-bottom:0;margin-top:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: CarouselDirective, selector: "[fdCarousel]", inputs: ["config", "active"], outputs: ["activeChange", "dragStateChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: CarouselItemDirective, selector: "[fd-carousel-item], [fdCarouselItem]", inputs: ["value", "initialHeight", "initialWidth", "id"], exportAs: ["fdCarouselItem"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
433
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: TimeColumnComponent, isStandalone: true, selector: "fd-time-column", inputs: { rows: "rows", spinners: "spinners", activeValue: "activeValue", active: "active", meridian: "meridian", id: "id", timeConfig: "timeConfig", columnTranslationsPreset: "columnTranslationsPreset", offset: "offset", elementsAtOnce: "elementsAtOnce" }, outputs: { activeValueChange: "activeValueChange", activeStateChange: "activeStateChange" }, host: { listeners: { "click": "onItemClick()", "keydown": "keyDownHandler($event)", "wheel": "mouseScrollHandler($event)" }, properties: { "class.fd-time__col--period": "this.meridian" }, classAttribute: "fd-time__col" }, viewQueries: [{ propertyName: "carousel", first: true, predicate: CarouselDirective, descendants: true }, { propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, read: ElementRef }, { propertyName: "items", predicate: CarouselItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label class=\"fd-time__slider-label\">{{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate))\n}}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n (click)=\"scrollUp($event)\"\n></button>\n<div\n class=\"fd-time__wrapper\"\n [class.fd-time__wrapper--active]=\"active\"\n [class.fd-time__wrapper--meridian]=\"meridian\"\n [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n <ul\n class=\"fd-time__list\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [config]=\"config\"\n (click)=\"indicator.focus()\"\n (activeChange)=\"activeChangedHandle($event)\"\n (dragStateChange)=\"handleDrag($event)\"\n fdCarousel\n >\n <li\n class=\"fd-time__item\"\n fdCarouselItem\n *ngFor=\"let row of rows; let index = index\"\n #item=\"fdCarouselItem\"\n [id]=\"_createColumnItemIdByIndex(index)\"\n [attr.data-displayed-value]=\"row.value\"\n [value]=\"row\"\n >\n <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n {{ row.label }}\n </span>\n </li>\n </ul>\n <div\n class=\"fd-time__current-indicator\"\n #indicator\n tabindex=\"0\"\n role=\"listbox\"\n [attr.id]=\"currentIndicatorId\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [attr.aria-labelledby]=\"currentIndicatorValueId\"\n [attr.aria-description]=\"\n timeConfig?.navigationInstruction ||\n (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate))\n \"\n (focus)=\"_onFocusIndicator()\"\n >\n <span\n class=\"fd-time-column-custom-hidden\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [attr.aria-hidden]=\"!active\"\n [attr.id]=\"currentIndicatorValueId\"\n [class.fd-time-column-custom-hidden]=\"active\"\n >\n {{ activeValue?.label }}\n {{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.fullLabel | fdTranslate))\n }}\n </span>\n </div>\n <span *ngIf=\"!active\" class=\"fd-time__item fd-time__item--collapsed\">\n {{ activeValue?.label }}\n </span>\n</div>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-down-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n", styles: [".fd-time__col .fd-carousel{transition:all .2s ease-in}.fd-time__list{overflow:visible}.fd-time-column-custom-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.fd-time__current-indicator{pointer-events:none}.fd-time__current-indicator:focus{outline:none}.fd-time--compact .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed,.fd-time .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed{margin-bottom:0;margin-top:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: CarouselDirective, selector: "[fdCarousel]", inputs: ["config", "active"], outputs: ["activeChange", "dragStateChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: CarouselItemDirective, selector: "[fd-carousel-item], [fdCarouselItem]", inputs: ["value", "initialHeight", "initialWidth", "id"], exportAs: ["fdCarouselItem"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
430
434
  }
431
435
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: TimeColumnComponent, decorators: [{
432
436
  type: Component,
433
437
  args: [{ selector: 'fd-time-column', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
434
438
  class: 'fd-time__col'
435
- }, standalone: true, imports: [NgIf, ButtonComponent, CarouselDirective, NgFor, CarouselItemDirective, FdTranslatePipe], template: "<label class=\"fd-time__slider-label\">{{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate))\n}}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n (click)=\"scrollUp($event)\"\n></button>\n<div\n class=\"fd-time__wrapper\"\n [class.fd-time__wrapper--active]=\"active\"\n [class.fd-time__wrapper--meridian]=\"meridian\"\n [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n <ul\n class=\"fd-time__list\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [config]=\"config\"\n (click)=\"indicator.focus()\"\n (activeChange)=\"activeChangedHandle($event)\"\n (dragStateChange)=\"handleDrag($event)\"\n fdCarousel\n >\n <li\n class=\"fd-time__item\"\n fdCarouselItem\n *ngFor=\"let row of rows; let index = index\"\n #item=\"fdCarouselItem\"\n [id]=\"_createColumnItemIdByIndex(index)\"\n [attr.data-displayed-value]=\"row.value\"\n [value]=\"row\"\n >\n <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n {{ row.label }}\n </span>\n </li>\n </ul>\n <div\n class=\"fd-time__current-indicator\"\n #indicator\n tabindex=\"0\"\n role=\"listbox\"\n [attr.id]=\"currentIndicatorId\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [attr.aria-labelledby]=\"currentIndicatorValueId\"\n [attr.aria-description]=\"\n timeConfig?.navigationInstruction ||\n (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate))\n \"\n (focus)=\"_onFocusIndicator()\"\n >\n <span\n class=\"fd-time-column-custom-hidden\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [attr.aria-hidden]=\"!active\"\n [attr.id]=\"currentIndicatorValueId\"\n [class.fd-time-column-custom-hidden]=\"active\"\n >\n {{ activeValue?.label }}\n {{ timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate)) }}\n </span>\n </div>\n <span *ngIf=\"!active\" class=\"fd-time__item fd-time__item--collapsed\">\n {{ activeValue?.label }}\n </span>\n</div>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-down-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n", styles: [".fd-time__col .fd-carousel{transition:all .2s ease-in}.fd-time__list{overflow:visible}.fd-time-column-custom-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.fd-time__current-indicator{pointer-events:none}.fd-time__current-indicator:focus{outline:none}.fd-time--compact .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed,.fd-time .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed{margin-bottom:0;margin-top:0}\n"] }]
439
+ }, standalone: true, imports: [NgIf, ButtonComponent, CarouselDirective, NgFor, CarouselItemDirective, FdTranslatePipe], template: "<label class=\"fd-time__slider-label\">{{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate))\n}}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n (click)=\"scrollUp($event)\"\n></button>\n<div\n class=\"fd-time__wrapper\"\n [class.fd-time__wrapper--active]=\"active\"\n [class.fd-time__wrapper--meridian]=\"meridian\"\n [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n <ul\n class=\"fd-time__list\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [config]=\"config\"\n (click)=\"indicator.focus()\"\n (activeChange)=\"activeChangedHandle($event)\"\n (dragStateChange)=\"handleDrag($event)\"\n fdCarousel\n >\n <li\n class=\"fd-time__item\"\n fdCarouselItem\n *ngFor=\"let row of rows; let index = index\"\n #item=\"fdCarouselItem\"\n [id]=\"_createColumnItemIdByIndex(index)\"\n [attr.data-displayed-value]=\"row.value\"\n [value]=\"row\"\n >\n <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n {{ row.label }}\n </span>\n </li>\n </ul>\n <div\n class=\"fd-time__current-indicator\"\n #indicator\n tabindex=\"0\"\n role=\"listbox\"\n [attr.id]=\"currentIndicatorId\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [attr.aria-labelledby]=\"currentIndicatorValueId\"\n [attr.aria-description]=\"\n timeConfig?.navigationInstruction ||\n (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate))\n \"\n (focus)=\"_onFocusIndicator()\"\n >\n <span\n class=\"fd-time-column-custom-hidden\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [attr.aria-hidden]=\"!active\"\n [attr.id]=\"currentIndicatorValueId\"\n [class.fd-time-column-custom-hidden]=\"active\"\n >\n {{ activeValue?.label }}\n {{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.fullLabel | fdTranslate))\n }}\n </span>\n </div>\n <span *ngIf=\"!active\" class=\"fd-time__item fd-time__item--collapsed\">\n {{ activeValue?.label }}\n </span>\n</div>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-down-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n", styles: [".fd-time__col .fd-carousel{transition:all .2s ease-in}.fd-time__list{overflow:visible}.fd-time-column-custom-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.fd-time__current-indicator{pointer-events:none}.fd-time__current-indicator:focus{outline:none}.fd-time--compact .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed,.fd-time .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed{margin-bottom:0;margin-top:0}\n"] }]
436
440
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { rows: [{
437
441
  type: Input
438
442
  }], spinners: [{
@@ -479,4 +483,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
479
483
  type: HostListener,
480
484
  args: ['wheel', ['$event']]
481
485
  }] } });
482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdGltZS90aW1lLWNvbHVtbi90aW1lLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90aW1lL3RpbWUtY29sdW1uL3RpbWUtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BFLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFDTixTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQWtCLGlCQUFpQixFQUFFLHFCQUFxQixFQUFnQixNQUFNLGdDQUFnQyxDQUFDO0FBRXhILE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7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QkFpQk4sUUFBUTtzQkFGUCxLQUFLOztzQkFDTCxXQUFXO3VCQUFDLDRCQUE0QjtnQkFLekMsRUFBRTtzQkFERCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBUUYsTUFBTTtzQkFEVCxLQUFLO2dCQVlGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixNQUFNO2dCQUtQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFLUCxRQUFRO3NCQURQLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUs1QixLQUFLO3NCQURKLFlBQVk7dUJBQUMscUJBQXFCO2dCQUtuQyxTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFrSTVDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxPQUFPO2dCQU9yQixjQUFjO3NCQURiLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlCbkMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPV05fQVJST1csIFNQQUNFLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBidWZmZXIsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgcmVzaXplT2JzZXJ2YWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENhcm91c2VsQ29uZmlnLCBDYXJvdXNlbERpcmVjdGl2ZSwgQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlLCBQYW5FbmRPdXRwdXQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY2Fyb3VzZWwnO1xuXG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFNlbGVjdGFibGVWaWV3SXRlbSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBUaW1lQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi90aW1lLWNvbHVtbi1jb25maWcnO1xuXG5sZXQgdGltZUNvbHVtblVuaXF1ZUlkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lQ29sdW1uSXRlbU91dHB1dDxUPiB7XG4gICAgdmFsdWU6IFQ7XG4gICAgYWZ0ZXI/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRpbWUtY29sdW1uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGltZS1jb2x1bW4uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RpbWUtY29sdW1uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtdGltZV9fY29sJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgQnV0dG9uQ29tcG9uZW50LCBDYXJvdXNlbERpcmVjdGl2ZSwgTmdGb3IsIENhcm91c2VsSXRlbURpcmVjdGl2ZSwgRmRUcmFuc2xhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lQ29sdW1uQ29tcG9uZW50PEssIFQgZXh0ZW5kcyBTZWxlY3RhYmxlVmlld0l0ZW08Sz4gPSBTZWxlY3RhYmxlVmlld0l0ZW08Sz4+XG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzXG57XG4gICAgLyoqIGl0ZW1zIGluIHJvdyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93czogVFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBASW5wdXQgV2hlbiBzZXQgdG8gZmFsc2UsIGhpZGVzIHRoZSBidXR0b25zIHRoYXQgaW5jcmVtZW50XG4gICAgICogYW5kIGRlY3JlbWVudCB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW5zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3Bpbm5lcnMgPSB0cnVlO1xuXG4gICAgLyoqIEN1cnJlbnRseSBjaG9zZW4sIGNlbnRlcmVkIHRpbWUgY29sdW1uIGl0ZW0gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhY3RpdmVWYWx1ZShhY3RpdmVJdGVtOiBOdWxsYWJsZTxUPikge1xuICAgICAgICBpZiAoIWFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgIC8vIG9taXR0aW5nIFwibnVsbFwiIGFuZCBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdJbml0JC52YWx1ZSAmJiB0aGlzLl9hY3RpdmVWYWx1ZSAhPT0gYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5fcGlja1RpbWUodGhpcy5fZ2V0SXRlbShhY3RpdmVJdGVtKSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FjdGl2ZVZhbHVlID0gYWN0aXZlSXRlbTtcbiAgICB9XG5cbiAgICBnZXQgYWN0aXZlVmFsdWUoKTogTnVsbGFibGU8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIERlZmluZXMgaWYgY29sdW1uIGlzIGFjdGl2ZSwgaXQgaGFzIGltcGFjdCBvbiBiZWhhdmlvciBhbmQgdmlzdWFsICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHRoaXMuX3ZpZXdJbml0JC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0odGhpcy5hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5kaWNhdG9yKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRpbWUgY29sdW1uIGlzIG1lcmlkaWFuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRpbWVfX2NvbC0tcGVyaW9kJylcbiAgICBtZXJpZGlhbiA9IGZhbHNlO1xuXG4gICAgLyoqIElkIG9mIGNvbHVtbiwgaW5pdGlhdGVkIHdpdGggc29tZSBkZWZhdWx0IHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nID0gJ2ZkLXRpbWUtY29sdW1uLScgKyB0aW1lQ29sdW1uVW5pcXVlSWQrKztcblxuICAgIC8qKiBJMThuIGFuZCBsYWJlbHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpbWVDb25maWc6IE51bGxhYmxlPFRpbWVDb2x1bW5Db25maWc+O1xuXG4gICAgLyoqIEkxOG4gYW5kIGxhYmVscyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uVHJhbnNsYXRpb25zUHJlc2V0OiAnc2Vjb25kcycgfCAnbWludXRlcycgfCAnaG91cnMnIHwgJ3BlcmlvZCc7XG5cbiAgICAvKipcbiAgICAgKiBPZmZzZXQgZm9yIGNhcm91c2VsIGRpcmVjdGl2ZSwgYWN0aXZlIGl0ZW0gaXMgYWx3YXlzIHRoZSBmaXJzdCBvbmUuXG4gICAgICogSW4gY2FzZSBvZiBoYXZpbmcgbW9yZSBpdGVtcyBpbiBjYXJvdXNlbCB0aGFuIDEsIG1pZGRsZSBlbGVtZW50IHNob3VsZCBiZSBhY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBvZmZzZXQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9vZmZzZXQkLm5leHQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgb2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vZmZzZXQkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1YW50aXR5IG9mIHRoZSBlbGVtZW50cyB0byBiZSBzaG93biBhdCB0aGUgc2FtZSB0aW1lIGluIGNvbHVtblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGVsZW1lbnRzQXRPbmNlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudHNBdE9uY2UkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBFdmVudCBlbWl0dGVkLCB3aGVuIGFjdGl2ZSBpdGVtIGlzIGNoYW5nZWQsIGJ5IGNhcm91c2VsICovXG4gICAgQE91dHB1dCgpXG4gICAgYWN0aXZlVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaW1lQ29sdW1uSXRlbU91dHB1dDxUPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFRpbWVDb2x1bW5JdGVtT3V0cHV0PFQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQsIHdoZW4gY2VydGFpbiBjb2x1bW4gaXMgYWN0aXZhdGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgYWN0aXZlU3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChDYXJvdXNlbERpcmVjdGl2ZSlcbiAgICBjYXJvdXNlbDogQ2Fyb3VzZWxEaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlKVxuICAgIGl0ZW1zOiBRdWVyeUxpc3Q8Q2Fyb3VzZWxJdGVtRGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5kaWNhdG9yJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaW5kaWNhdG9yOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cmFwcGVySGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IGtleWRvd24gYmVmb3JlXG4gICAgICogZm9jdXNpbmcgb3Igc2VsZWN0aW5nIG9wdGlvbiBiYXNlZCBvbiBudW1lcmljL2FscGhhIGtleXMuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwgPSA3NTA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbmZpZzogQ2Fyb3VzZWxDb25maWc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGludGVybmFsVHJhbnNsYXRpb25Db25maWc6IFRpbWVDb2x1bW5Db25maWcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGN1cnJlbnRJbmRpY2F0b3JJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCArICctY3VycmVudC1pbmRpY2F0b3InO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGN1cnJlbnRJbmRpY2F0b3JWYWx1ZUlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRpY2F0b3JJZCArICctdmFsdWUnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWxlbWVudHNBdE9uY2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdCg3KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb2Zmc2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMyk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9xdWVyeUtleURvd25FdmVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hY3RpdmVWYWx1ZTogTnVsbGFibGU8VD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FjdGl2ZUNhcm91c2VsSXRlbTogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpZXdJbml0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogbG9ncyBudW1lcmljIGtleSBpbnB1dHMgdG8gc2V0IHRpbWUgdXNpbmcga2V5Ym9hcmQgaW5wdXQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfa2V5TG9nOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBUaW1lb3V0IHZhcmlhYmxlIHVzZWQgdG8gc2V0IHRpbWVvdXQgZm9yIHN1YnNlcXVlbnQgbnVtZXJpYyBrZXkgaW5wdXQgdG8gc2V0IHRpbWUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbnVtZXJpY0lucHV0VGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5nZURldFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX2VsbVJlZjogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3ZpZXdJbml0JCwgdGhpcy5fZWxlbWVudHNBdE9uY2UkLCB0aGlzLl9vZmZzZXQkLCB0aGlzLl9yZXNpemUkXSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChbdmlld0luaXRdKSA9PiB2aWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoWywgZWxlbWVudHNBdE9uY2UsIG9mZnNldF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF2ZXJhZ2VIZWlnaHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMudG9BcnJheSgpLnJlZHVjZSgoYWNjLCBuZXh0KSA9PiBhY2MgKyBuZXh0LmdldEhlaWdodCgpLCAwKSAvIHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cmFwcGVySGVpZ2h0ID0gYXZlcmFnZUhlaWdodCAqIGVsZW1lbnRzQXRPbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZUJ1dE5vdFNlbGVjdGVkRWxlbWVudHMgPSBNYXRoLmZsb29yKGVsZW1lbnRzQXRPbmNlIC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maXJzdC5lbGVtZW50LnN0eWxlLm1hcmdpblRvcCA9IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQnV0Tm90U2VsZWN0ZWRFbGVtZW50cyAqIGF2ZXJhZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubGFzdC5lbGVtZW50LnN0eWxlLm1hcmdpbkJvdHRvbSA9IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQnV0Tm90U2VsZWN0ZWRFbGVtZW50cyAqIGF2ZXJhZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0odGhpcy5hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fZWxlbWVudHNBdE9uY2UkLnBpcGUodGFwKCgpID0+IHRoaXMuX3NldFVwQ2Fyb3VzZWxDb25maWd1cmF0aW9uKCkpKS5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuX3NldFVwUXVlcnlTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMuX2VsbVJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZSQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZpZXdJbml0JC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGUgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmNvbHVtblRyYW5zbGF0aW9uc1ByZXNldCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICAgIG9uSXRlbUNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVN0YXRlQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRG93bigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFVwKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnbnVtZXJpYycpKSB7XG4gICAgICAgICAgICB0aGlzLl9udW1lcmljS2V5SW5wdXRIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ2FscGhhYmV0aWNhbCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9hbHBoYUtleUlucHV0SGFuZGxlcihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3doZWVsJywgWyckZXZlbnQnXSlcbiAgICBtb3VzZVNjcm9sbEhhbmRsZXIoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgZXZlbnQuZGVsdGFZID4gMCA/IHRoaXMuc2Nyb2xsRG93bigpIDogdGhpcy5zY3JvbGxVcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzcGlubmVyQnV0dG9uS2V5dXBIYW5kbGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHVwQnV0dG9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgaWYgKHVwQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxVcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbERvd24oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXRWYWx1ZU9mQWN0aXZlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRVcEluaXRpYWxWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEl0IHByZXZlbnRzIGZyb20gYWNjaWRlbnRhbGx5IGNoYW5nZSB0aGUgaXRlbSBieSBjbGljayBldmVudCAqL1xuICAgIGhhbmRsZURyYWcoaXNEcmFnZ2luZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0RyYWdnaW5nID0gaXNEcmFnZ2luZztcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgaGFuZGxlcyBhY3RpdmUgaXRlbSBjaGFuZ2UgKi9cbiAgICBhY3RpdmVDaGFuZ2VkSGFuZGxlKG91dHB1dDogUGFuRW5kT3V0cHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gdGhpcy5pdGVtcy50b0FycmF5KCk7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gYXJyYXkuZmluZEluZGV4KChfX2l0ZW0pID0+IF9faXRlbSA9PT0gb3V0cHV0Lml0ZW0pICsgdGhpcy5vZmZzZXQ7XG5cbiAgICAgICAgaWYgKGluZGV4ID49IGFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleCAtIGFycmF5Lmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IF9pdGVtID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgICAgIHRoaXMuX2FjdGl2ZVZhbHVlID0gX2l0ZW0udmFsdWU7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9hY3RpdmVWYWx1ZSEsXG4gICAgICAgICAgICBhZnRlcjogb3V0cHV0LmFmdGVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2FjdGl2ZUNhcm91c2VsSXRlbSA9IF9pdGVtO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBjaGFuZ2VzIGFjdGl2ZSBpdGVtIGFuZCB0cmlnZ2VycyBjYXJvdXNlbCBzY3JvbGwgKi9cbiAgICBwaWNrKGl0ZW06IENhcm91c2VsSXRlbURpcmVjdGl2ZSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXg6IG51bWJlciA9IHRoaXMuaXRlbXMudG9BcnJheSgpLmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtID09PSB0aGlzLl9hY3RpdmVDYXJvdXNlbEl0ZW0pO1xuICAgICAgICAvKiogVG8gcHJldmVudCBmcm9tIHN3aXRjaGluZyB0aW1lLCB3aGVuIGl0J3MgYmVpbmcgZHJhZ2dlZCAqL1xuICAgICAgICBpZiAoIXRoaXMuX2lzRHJhZ2dpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKGl0ZW0sIHRydWUsIHRydWUsIGN1cnJlbnRJbmRleCA8IGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdHJpZ2dlcmVkIGJ5IGtleWJvYXJkLCBvciBpbmNyZW1lbnQgYnV0dG9uICovXG4gICAgc2Nyb2xsVXAoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8qKiBLZXlib2FyZCBldmVudHMgaW4gcmVhY3RpdmUgZm9ybXMsIHNob3VsZG4ndCB0cmlnZ2VyIHRoaXMgbWV0aG9kICovXG4gICAgICAgIGlmIChldmVudCAmJiAhZXZlbnQuY2xpZW50WCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5pdGVtcy50b0FycmF5KCkuZmluZEluZGV4KChfaXRlbSkgPT4gX2l0ZW0gPT09IHRoaXMuX2FjdGl2ZUNhcm91c2VsSXRlbSk7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMucm93cy5sZW5ndGggLSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGlja1RpbWUodGhpcy5pdGVtcy50b0FycmF5KClbaW5kZXhdLCB0cnVlLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgYnkga2V5Ym9hcmQsIG9yIGRlY3JlbWVudCBidXR0b24gKi9cbiAgICBzY3JvbGxEb3duKCk6IHZvaWQge1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuaXRlbXMudG9BcnJheSgpLmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtID09PSB0aGlzLl9hY3RpdmVDYXJvdXNlbEl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLnJvd3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuaXRlbXMudG9BcnJheSgpW2luZGV4XSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEZvY3VzIG9uIGNvbHVtbiAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluZGljYXRvcj8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBpZCBmb3IgY29sdW1uIGl0ZW1cbiAgICAgKiBAcGFyYW0gaW5kZXggY29sdW1uIGl0ZW0gaW5kZXhcbiAgICAgKiBAcmV0dXJucyBjb2x1bW4gaXRlbSBpZFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfY3JlYXRlQ29sdW1uSXRlbUlkQnlJbmRleChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBmb2N1cyBjYWxsYmFja1xuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfb25Gb2N1c0luZGljYXRvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTdGF0ZUNoYW5nZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBoYW5kbGVzIGFscGhhYmV0aWNhbCBrZXkgaW5wdXRzIHRvIHNldCBwZXJpb2QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWxwaGFLZXlJbnB1dEhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYScpIHtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lT25WYWx1ZSgnQU0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICB0aGlzLl9waWNrVGltZU9uVmFsdWUoJ1BNJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIGhhbmRsZXMgbnVtZXJpYyBrZXkgaW5wdXRzIHRvIHNldCB0aW1lLlxuICAgICAqL1xuICAgIHByaXZhdGUgX251bWVyaWNLZXlJbnB1dEhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW1WYWx1ZSA9IHRoaXMuaXRlbXMubGFzdC52YWx1ZS52YWx1ZTsgLy8gdmFsdWUgb2YgbGFzdCBpdGVtIGluIGNvbHVtblxuXG4gICAgICAgIHRoaXMuX251bWVyaWNJbnB1dFRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHRoaXMuX251bWVyaWNJbnB1dFRpbWVvdXQpO1xuICAgICAgICB0aGlzLl9rZXlMb2cucHVzaChldmVudC5rZXkpO1xuICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gcGFyc2VJbnQodGhpcy5fa2V5TG9nLmpvaW4oJycpLCAxMCk7IC8vIGNvbnZlcnRzIGtleUxvZyBlbGVtZW50cyB0byBhIG51bWJlclxuXG4gICAgICAgIGlmIChpbnB1dFZhbHVlICogMTAgPiBsYXN0SXRlbVZhbHVlIHx8IHRoaXMuX2tleUxvZy5sZW5ndGggPT09IGxhc3RJdGVtVmFsdWUudG9TdHJpbmcoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lT25WYWx1ZShpbnB1dFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX251bWVyaWNJbnB1dFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9waWNrVGltZU9uVmFsdWUoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBzZXQgdGhlIHRpbWUgZm9yIGdpdmVuIGl0ZW0gdmFsdWUuIHVzZWQgYnkgX251bWVyaWNLZXlJbnB1dEhhbmRsZXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcGlja1RpbWVPblZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcGlja1RpbWUoXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUudmFsdWUgPT09IHZhbHVlKSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2tleUxvZyA9IFtdOyAvLyBjbGVhciBrZXkgbG9nXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRyaWdnZXJlZCBieSBrZXlib2FyZCwgb3IgZGVjcmVtZW50IGJ1dHRvblxuICAgICAqIEFyZ3M6XG4gICAgICogaXRlbSA9PiBwaWNrZWQgY2Fyb3VzZWwgaXRlbSwgdGhhdCBzaG91bGQgYmUgY2VudGVyZWRcbiAgICAgKiBzbW9vdGggPT4gZGVmaW5lcyBpZiB0cmFuc2l0aW9uIHRpbWUgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRyYW5zZm9ybVxuICAgICAqIGVtaXRFdmVudCA9PiBkZWZpbmVzIGlmIEV2ZW50RW1pdHRlciBzaG91bGQgYmUgdHJpZ2dlcmVkIGJ5IHRoaXMgY2hhbmdlLCBzZXQgdG8gZmFsc2UsIHdoZW4gY2hhbmdlZCBmcm9tIG91dHNpZGVcbiAgICAgKiBhZnRlciA9PiBEZWZpbmVzIGlmIHZhbHVlIHdhcyBpbmNyZW1lbnRlZC9kZWNyZW1lbnRlZCwgbmVlZGVkIGZvciBob3VycyB0byB0cmlnZ2VyIEFNL1BNIGNoYW5nZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9waWNrVGltZShpdGVtPzogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlLCBzbW9vdGg/OiBib29sZWFuLCBlbWl0RXZlbnQ/OiBib29sZWFuLCBhZnRlcj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJDYXJvdXNlbChpdGVtLCBzbW9vdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlQ2Fyb3VzZWxJdGVtID0gaXRlbTtcbiAgICAgICAgdGhpcy5fYWN0aXZlVmFsdWUgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgYWZ0ZXJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpdGVtIHdpdGggcGFzc2VkIHZhbHVlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEl0ZW0oX2l0ZW06IE51bGxhYmxlPFQ+KTogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gX2l0ZW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJpZ2dlckNhcm91c2VsKGl0ZW06IENhcm91c2VsSXRlbURpcmVjdGl2ZSwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuaXRlbXMudG9BcnJheSgpO1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IGFycmF5LmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtID09PSBpdGVtKSAtIHRoaXMub2Zmc2V0O1xuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIGluZGV4ID0gYXJyYXkubGVuZ3RoICsgaW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhcm91c2VsLmdvVG9JdGVtKGFycmF5W2luZGV4XSwgc21vb3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1cyBjdXJyZW50IGluZGljYXRvciwgd2hpY2ggYWxsb3dzIHRvIGhhbmRsZSBrZXlkb3duIGV2ZW50cyBpbnNpZGUgY29sdW1uXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZvY3VzSW5kaWNhdG9yKCk6IHZvaWQge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmN1cnJlbnRJbmRpY2F0b3JJZCk/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKCFpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwUXVlcnlTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLl9xdWVyeUtleURvd25FdmVudC5waXBlKGRlYm91bmNlVGltZSh0aGlzLnR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5S2V5RG93bkV2ZW50XG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcih0cmlnZ2VyKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKChrZXlzKSA9PiBrZXlzLmpvaW4oJycpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy5fZ2V0VmFsdWUodmFsdWUpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy5fZ2V0SXRlbSh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHRoaXMuX3BpY2tUaW1lKGl0ZW0sIGZhbHNlLCB0cnVlKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwQ2Fyb3VzZWxDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWc6IENhcm91c2VsQ29uZmlnID0ge1xuICAgICAgICAgICAgZ2VzdHVyZVN1cHBvcnQ6IHRydWUsXG4gICAgICAgICAgICB2ZXJ0aWNhbDogdHJ1ZSxcbiAgICAgICAgICAgIGVsZW1lbnRzQXRPbmNlOiB0aGlzLl9lbGVtZW50c0F0T25jZSQudmFsdWUsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnMTUwbXMnXG4gICAgICAgIH07XG4gICAgICAgIGlmICghdGhpcy5tZXJpZGlhbikge1xuICAgICAgICAgICAgY29uZmlnLmluZmluaXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwSW5pdGlhbFZhbHVlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVWYWx1ZSA9IHRoaXMuaXRlbXMuZmlyc3QudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGlja1RpbWUodGhpcy5fZ2V0SXRlbSh0aGlzLl9hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUludGVybmFsVHJhbnNsYXRpb25Db25maWcoKTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jb2x1bW5UcmFuc2xhdGlvbnNQcmVzZXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsVHJhbnNsYXRpb25Db25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGluY3JlYXNlTGFiZWw6ICdjb3JlVGltZS5pbmNyZWFzZUhvdXJzTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2NvcmVUaW1lLmhvdXJzTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBkZWNyZWFzZUxhYmVsOiAnY29yZVRpbWUuZGVjcmVhc2VIb3Vyc0xhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uOiAnY29yZVRpbWUubmF2aWdhdGlvbkluc3RydWN0aW9uJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsVHJhbnNsYXRpb25Db25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGluY3JlYXNlTGFiZWw6ICdjb3JlVGltZS5pbmNyZWFzZU1pbnV0ZXNMYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnY29yZVRpbWUubWludXRlc0xhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgZGVjcmVhc2VMYWJlbDogJ2NvcmVUaW1lLmRlY3JlYXNlTWludXRlc0xhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uOiAnY29yZVRpbWUubmF2aWdhdGlvbkluc3RydWN0aW9uJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsVHJhbnNsYXRpb25Db25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGluY3JlYXNlTGFiZWw6ICdjb3JlVGltZS5pbmNyZWFzZVNlY29uZHNMYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnY29yZVRpbWUuc2Vjb25kc0xhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgZGVjcmVhc2VMYWJlbDogJ2NvcmVUaW1lLmRlY3JlYXNlU2Vjb25kc0xhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uOiAnY29yZVRpbWUubmF2aWdhdGlvbkluc3RydWN0aW9uJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwZXJpb2QnOlxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVhc2VMYWJlbDogJ2NvcmVUaW1lLmluY3JlYXNlUGVyaW9kTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2NvcmVUaW1lLnBlcmlvZExhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgZGVjcmVhc2VMYWJlbDogJ2NvcmVUaW1lLmRlY3JlYXNlUGVyaW9kTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb246ICdjb3JlVGltZS5uYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24nXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsVHJhbnNsYXRpb25Db25maWcgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG4iLCI8bGFiZWwgY2xhc3M9XCJmZC10aW1lX19zbGlkZXItbGFiZWxcIj57e1xuICAgIHRpbWVDb25maWc/LmxhYmVsIHx8IChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnICYmIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnLmxhYmVsIHwgZmRUcmFuc2xhdGUpKVxufX08L2xhYmVsPlxuPGJ1dHRvblxuICAgICpuZ0lmPVwiYWN0aXZlICYmIHNwaW5uZXJzXCJcbiAgICBmZC1idXR0b25cbiAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLXVwLWFycm93XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBbdGl0bGVdPVwiXG4gICAgICAgIHRpbWVDb25maWc/LmRlY3JlYXNlTGFiZWwgfHxcbiAgICAgICAgKGludGVybmFsVHJhbnNsYXRpb25Db25maWcgJiYgKGludGVybmFsVHJhbnNsYXRpb25Db25maWcuZGVjcmVhc2VMYWJlbCB8IGZkVHJhbnNsYXRlKSlcbiAgICBcIlxuICAgIFthcmlhTGFiZWxdPVwiXG4gICAgICAgIHRpbWVDb25maWc/LmRlY3JlYXNlTGFiZWwgfHxcbiAgICAgICAgKGludGVybmFsVHJhbnNsYXRpb25Db25maWcgJiYgKGludGVybmFsVHJhbnNsYXRpb25Db25maWcuZGVjcmVhc2VMYWJlbCB8IGZkVHJhbnNsYXRlKSlcbiAgICBcIlxuICAgIChrZXl1cCk9XCJzcGlubmVyQnV0dG9uS2V5dXBIYW5kbGUoJGV2ZW50LCB0cnVlKVwiXG4gICAgKGNsaWNrKT1cInNjcm9sbFVwKCRldmVudClcIlxuPjwvYnV0dG9uPlxuPGRpdlxuICAgIGNsYXNzPVwiZmQtdGltZV9fd3JhcHBlclwiXG4gICAgW2NsYXNzLmZkLXRpbWVfX3dyYXBwZXItLWFjdGl2ZV09XCJhY3RpdmVcIlxuICAgIFtjbGFzcy5mZC10aW1lX193cmFwcGVyLS1tZXJpZGlhbl09XCJtZXJpZGlhblwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJhY3RpdmUgPyB3cmFwcGVySGVpZ2h0IDogJydcIlxuPlxuICAgIDx1bFxuICAgICAgICBjbGFzcz1cImZkLXRpbWVfX2xpc3RcIlxuICAgICAgICBbY2xhc3MuZmQtdGltZS1jb2x1bW4tY3VzdG9tLWhpZGRlbl09XCIhYWN0aXZlXCJcbiAgICAgICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICAgICAoY2xpY2spPVwiaW5kaWNhdG9yLmZvY3VzKClcIlxuICAgICAgICAoYWN0aXZlQ2hhbmdlKT1cImFjdGl2ZUNoYW5nZWRIYW5kbGUoJGV2ZW50KVwiXG4gICAgICAgIChkcmFnU3RhdGVDaGFuZ2UpPVwiaGFuZGxlRHJhZygkZXZlbnQpXCJcbiAgICAgICAgZmRDYXJvdXNlbFxuICAgID5cbiAgICAgICAgPGxpXG4gICAgICAgICAgICBjbGFzcz1cImZkLXRpbWVfX2l0ZW1cIlxuICAgICAgICAgICAgZmRDYXJvdXNlbEl0ZW1cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgI2l0ZW09XCJmZENhcm91c2VsSXRlbVwiXG4gICAgICAgICAgICBbaWRdPVwiX2NyZWF0ZUNvbHVtbkl0ZW1JZEJ5SW5kZXgoaW5kZXgpXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZGlzcGxheWVkLXZhbHVlXT1cInJvdy52YWx1ZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwicm93XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmZC10aW1lX191bml0XCIgcm9sZT1cImJ1dHRvblwiIFthdHRyLmFyaWEtbGFiZWxdPVwicm93LmxhYmVsXCIgKGNsaWNrKT1cInBpY2soaXRlbSwgaW5kZXgpXCI+XG4gICAgICAgICAgICAgICAge3sgcm93LmxhYmVsIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtdGltZV9fY3VycmVudC1pbmRpY2F0b3JcIlxuICAgICAgICAjaW5kaWNhdG9yXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgW2F0dHIuaWRdPVwiY3VycmVudEluZGljYXRvcklkXCJcbiAgICAgICAgW2NsYXNzLmZkLXRpbWUtY29sdW1uLWN1c3RvbS1oaWRkZW5dPVwiIWFjdGl2ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJjdXJyZW50SW5kaWNhdG9yVmFsdWVJZFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpcHRpb25dPVwiXG4gICAgICAgICAgICB0aW1lQ29uZmlnPy5uYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24gfHxcbiAgICAgICAgICAgIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnICYmIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnLm5hdmlnYXRpb25JbnN0cnVjdGlvbiB8IGZkVHJhbnNsYXRlKSlcbiAgICAgICAgXCJcbiAgICAgICAgKGZvY3VzKT1cIl9vbkZvY3VzSW5kaWNhdG9yKClcIlxuICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiZmQtdGltZS1jb2x1bW4tY3VzdG9tLWhpZGRlblwiXG4gICAgICAgICAgICBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIlxuICAgICAgICAgICAgYXJpYS1hdG9taWM9XCJ0cnVlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFhY3RpdmVcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiY3VycmVudEluZGljYXRvclZhbHVlSWRcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLXRpbWUtY29sdW1uLWN1c3RvbS1oaWRkZW5dPVwiYWN0aXZlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aXZlVmFsdWU/LmxhYmVsIH19XG4gICAgICAgICAgICB7eyB0aW1lQ29uZmlnPy5sYWJlbCB8fCAoaW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZyAmJiAoaW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZy5sYWJlbCB8IGZkVHJhbnNsYXRlKSkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuICpuZ0lmPVwiIWFjdGl2ZVwiIGNsYXNzPVwiZmQtdGltZV9faXRlbSBmZC10aW1lX19pdGVtLS1jb2xsYXBzZWRcIj5cbiAgICAgICAge3sgYWN0aXZlVmFsdWU/LmxhYmVsIH19XG4gICAgPC9zcGFuPlxuPC9kaXY+XG48YnV0dG9uXG4gICAgKm5nSWY9XCJhY3RpdmUgJiYgc3Bpbm5lcnNcIlxuICAgIGZkLWJ1dHRvblxuICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICBnbHlwaD1cIm5hdmlnYXRpb24tZG93bi1hcnJvd1wiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgW3RpdGxlXT1cIlxuICAgICAgICB0aW1lQ29uZmlnPy5pbmNyZWFzZUxhYmVsIHx8XG4gICAgICAgIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnICYmIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnLmluY3JlYXNlTGFiZWwgfCBmZFRyYW5zbGF0ZSkpXG4gICAgXCJcbiAgICBbYXJpYUxhYmVsXT1cIlxuICAgICAgICB0aW1lQ29uZmlnPy5pbmNyZWFzZUxhYmVsIHx8XG4gICAgICAgIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnICYmIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnLmluY3JlYXNlTGFiZWwgfCBmZFRyYW5zbGF0ZSkpXG4gICAgXCJcbiAgICAoa2V5dXApPVwic3Bpbm5lckJ1dHRvbktleXVwSGFuZGxlKCRldmVudClcIlxuICAgIChjbGljayk9XCJzY3JvbGxEb3duKClcIlxuPjwvYnV0dG9uPlxuIl19
486
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdGltZS90aW1lLWNvbHVtbi90aW1lLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90aW1lL3RpbWUtY29sdW1uL3RpbWUtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BFLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFDTixTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQWtCLGlCQUFpQixFQUFFLHFCQUFxQixFQUFnQixNQUFNLGdDQUFnQyxDQUFDO0FBRXhILE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7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Q0FBQztpSUFPbEcsSUFBSTtzQkFESCxLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFLRixXQUFXO3NCQURkLEtBQUs7Z0JBa0JGLE1BQU07c0JBRFQsS0FBSztnQkFpQk4sUUFBUTtzQkFGUCxLQUFLOztzQkFDTCxXQUFXO3VCQUFDLDRCQUE0QjtnQkFLekMsRUFBRTtzQkFERCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBUUYsTUFBTTtzQkFEVCxLQUFLO2dCQVlGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixNQUFNO2dCQUtQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFLUCxRQUFRO3NCQURQLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUs1QixLQUFLO3NCQURKLFlBQVk7dUJBQUMscUJBQXFCO2dCQUtuQyxTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFrSTVDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxPQUFPO2dCQU9yQixjQUFjO3NCQURiLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlCbkMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPV05fQVJST1csIFNQQUNFLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBidWZmZXIsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgcmVzaXplT2JzZXJ2YWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENhcm91c2VsQ29uZmlnLCBDYXJvdXNlbERpcmVjdGl2ZSwgQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlLCBQYW5FbmRPdXRwdXQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY2Fyb3VzZWwnO1xuXG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFNlbGVjdGFibGVWaWV3SXRlbSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBUaW1lQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi90aW1lLWNvbHVtbi1jb25maWcnO1xuXG5sZXQgdGltZUNvbHVtblVuaXF1ZUlkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lQ29sdW1uSXRlbU91dHB1dDxUPiB7XG4gICAgdmFsdWU6IFQ7XG4gICAgYWZ0ZXI/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRpbWUtY29sdW1uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGltZS1jb2x1bW4uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RpbWUtY29sdW1uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtdGltZV9fY29sJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgQnV0dG9uQ29tcG9uZW50LCBDYXJvdXNlbERpcmVjdGl2ZSwgTmdGb3IsIENhcm91c2VsSXRlbURpcmVjdGl2ZSwgRmRUcmFuc2xhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lQ29sdW1uQ29tcG9uZW50PEssIFQgZXh0ZW5kcyBTZWxlY3RhYmxlVmlld0l0ZW08Sz4gPSBTZWxlY3RhYmxlVmlld0l0ZW08Sz4+XG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzXG57XG4gICAgLyoqIGl0ZW1zIGluIHJvdyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93czogVFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBASW5wdXQgV2hlbiBzZXQgdG8gZmFsc2UsIGhpZGVzIHRoZSBidXR0b25zIHRoYXQgaW5jcmVtZW50XG4gICAgICogYW5kIGRlY3JlbWVudCB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW5zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3Bpbm5lcnMgPSB0cnVlO1xuXG4gICAgLyoqIEN1cnJlbnRseSBjaG9zZW4sIGNlbnRlcmVkIHRpbWUgY29sdW1uIGl0ZW0gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhY3RpdmVWYWx1ZShhY3RpdmVJdGVtOiBOdWxsYWJsZTxUPikge1xuICAgICAgICBpZiAoIWFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgIC8vIG9taXR0aW5nIFwibnVsbFwiIGFuZCBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdJbml0JC52YWx1ZSAmJiB0aGlzLl9hY3RpdmVWYWx1ZSAhPT0gYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5fcGlja1RpbWUodGhpcy5fZ2V0SXRlbShhY3RpdmVJdGVtKSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FjdGl2ZVZhbHVlID0gYWN0aXZlSXRlbTtcbiAgICB9XG5cbiAgICBnZXQgYWN0aXZlVmFsdWUoKTogTnVsbGFibGU8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIERlZmluZXMgaWYgY29sdW1uIGlzIGFjdGl2ZSwgaXQgaGFzIGltcGFjdCBvbiBiZWhhdmlvciBhbmQgdmlzdWFsICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHRoaXMuX3ZpZXdJbml0JC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0odGhpcy5hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5kaWNhdG9yKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRpbWUgY29sdW1uIGlzIG1lcmlkaWFuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRpbWVfX2NvbC0tcGVyaW9kJylcbiAgICBtZXJpZGlhbiA9IGZhbHNlO1xuXG4gICAgLyoqIElkIG9mIGNvbHVtbiwgaW5pdGlhdGVkIHdpdGggc29tZSBkZWZhdWx0IHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nID0gJ2ZkLXRpbWUtY29sdW1uLScgKyB0aW1lQ29sdW1uVW5pcXVlSWQrKztcblxuICAgIC8qKiBJMThuIGFuZCBsYWJlbHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpbWVDb25maWc6IE51bGxhYmxlPFRpbWVDb2x1bW5Db25maWc+O1xuXG4gICAgLyoqIEkxOG4gYW5kIGxhYmVscyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uVHJhbnNsYXRpb25zUHJlc2V0OiAnc2Vjb25kcycgfCAnbWludXRlcycgfCAnaG91cnMnIHwgJ3BlcmlvZCc7XG5cbiAgICAvKipcbiAgICAgKiBPZmZzZXQgZm9yIGNhcm91c2VsIGRpcmVjdGl2ZSwgYWN0aXZlIGl0ZW0gaXMgYWx3YXlzIHRoZSBmaXJzdCBvbmUuXG4gICAgICogSW4gY2FzZSBvZiBoYXZpbmcgbW9yZSBpdGVtcyBpbiBjYXJvdXNlbCB0aGFuIDEsIG1pZGRsZSBlbGVtZW50IHNob3VsZCBiZSBhY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBvZmZzZXQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9vZmZzZXQkLm5leHQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgb2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vZmZzZXQkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1YW50aXR5IG9mIHRoZSBlbGVtZW50cyB0byBiZSBzaG93biBhdCB0aGUgc2FtZSB0aW1lIGluIGNvbHVtblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGVsZW1lbnRzQXRPbmNlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudHNBdE9uY2UkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBFdmVudCBlbWl0dGVkLCB3aGVuIGFjdGl2ZSBpdGVtIGlzIGNoYW5nZWQsIGJ5IGNhcm91c2VsICovXG4gICAgQE91dHB1dCgpXG4gICAgYWN0aXZlVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUaW1lQ29sdW1uSXRlbU91dHB1dDxUPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFRpbWVDb2x1bW5JdGVtT3V0cHV0PFQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQsIHdoZW4gY2VydGFpbiBjb2x1bW4gaXMgYWN0aXZhdGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgYWN0aXZlU3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChDYXJvdXNlbERpcmVjdGl2ZSlcbiAgICBjYXJvdXNlbDogQ2Fyb3VzZWxEaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlKVxuICAgIGl0ZW1zOiBRdWVyeUxpc3Q8Q2Fyb3VzZWxJdGVtRGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5kaWNhdG9yJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaW5kaWNhdG9yOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cmFwcGVySGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IGtleWRvd24gYmVmb3JlXG4gICAgICogZm9jdXNpbmcgb3Igc2VsZWN0aW5nIG9wdGlvbiBiYXNlZCBvbiBudW1lcmljL2FscGhhIGtleXMuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwgPSA3NTA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbmZpZzogQ2Fyb3VzZWxDb25maWc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGludGVybmFsVHJhbnNsYXRpb25Db25maWc6IFRpbWVDb2x1bW5Db25maWcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGN1cnJlbnRJbmRpY2F0b3JJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCArICctY3VycmVudC1pbmRpY2F0b3InO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGN1cnJlbnRJbmRpY2F0b3JWYWx1ZUlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRpY2F0b3JJZCArICctdmFsdWUnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWxlbWVudHNBdE9uY2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdCg3KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb2Zmc2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMyk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9xdWVyeUtleURvd25FdmVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hY3RpdmVWYWx1ZTogTnVsbGFibGU8VD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FjdGl2ZUNhcm91c2VsSXRlbTogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpZXdJbml0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogbG9ncyBudW1lcmljIGtleSBpbnB1dHMgdG8gc2V0IHRpbWUgdXNpbmcga2V5Ym9hcmQgaW5wdXQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfa2V5TG9nOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBUaW1lb3V0IHZhcmlhYmxlIHVzZWQgdG8gc2V0IHRpbWVvdXQgZm9yIHN1YnNlcXVlbnQgbnVtZXJpYyBrZXkgaW5wdXQgdG8gc2V0IHRpbWUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbnVtZXJpY0lucHV0VGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5nZURldFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX2VsbVJlZjogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3ZpZXdJbml0JCwgdGhpcy5fZWxlbWVudHNBdE9uY2UkLCB0aGlzLl9vZmZzZXQkLCB0aGlzLl9yZXNpemUkXSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChbdmlld0luaXRdKSA9PiB2aWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoWywgZWxlbWVudHNBdE9uY2UsIG9mZnNldF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF2ZXJhZ2VIZWlnaHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMudG9BcnJheSgpLnJlZHVjZSgoYWNjLCBuZXh0KSA9PiBhY2MgKyBuZXh0LmdldEhlaWdodCgpLCAwKSAvIHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cmFwcGVySGVpZ2h0ID0gYXZlcmFnZUhlaWdodCAqIGVsZW1lbnRzQXRPbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZUJ1dE5vdFNlbGVjdGVkRWxlbWVudHMgPSBNYXRoLmZsb29yKGVsZW1lbnRzQXRPbmNlIC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maXJzdC5lbGVtZW50LnN0eWxlLm1hcmdpblRvcCA9IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQnV0Tm90U2VsZWN0ZWRFbGVtZW50cyAqIGF2ZXJhZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubGFzdC5lbGVtZW50LnN0eWxlLm1hcmdpbkJvdHRvbSA9IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQnV0Tm90U2VsZWN0ZWRFbGVtZW50cyAqIGF2ZXJhZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0odGhpcy5hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fZWxlbWVudHNBdE9uY2UkLnBpcGUodGFwKCgpID0+IHRoaXMuX3NldFVwQ2Fyb3VzZWxDb25maWd1cmF0aW9uKCkpKS5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuX3NldFVwUXVlcnlTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMuX2VsbVJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZSQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZpZXdJbml0JC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGUgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmNvbHVtblRyYW5zbGF0aW9uc1ByZXNldCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICAgIG9uSXRlbUNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVN0YXRlQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRG93bigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFVwKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnbnVtZXJpYycpKSB7XG4gICAgICAgICAgICB0aGlzLl9udW1lcmljS2V5SW5wdXRIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ2FscGhhYmV0aWNhbCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9hbHBoYUtleUlucHV0SGFuZGxlcihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3doZWVsJywgWyckZXZlbnQnXSlcbiAgICBtb3VzZVNjcm9sbEhhbmRsZXIoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgZXZlbnQuZGVsdGFZID4gMCA/IHRoaXMuc2Nyb2xsRG93bigpIDogdGhpcy5zY3JvbGxVcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzcGlubmVyQnV0dG9uS2V5dXBIYW5kbGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHVwQnV0dG9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgaWYgKHVwQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxVcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbERvd24oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXRWYWx1ZU9mQWN0aXZlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRVcEluaXRpYWxWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEl0IHByZXZlbnRzIGZyb20gYWNjaWRlbnRhbGx5IGNoYW5nZSB0aGUgaXRlbSBieSBjbGljayBldmVudCAqL1xuICAgIGhhbmRsZURyYWcoaXNEcmFnZ2luZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0RyYWdnaW5nID0gaXNEcmFnZ2luZztcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgaGFuZGxlcyBhY3RpdmUgaXRlbSBjaGFuZ2UgKi9cbiAgICBhY3RpdmVDaGFuZ2VkSGFuZGxlKG91dHB1dDogUGFuRW5kT3V0cHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gdGhpcy5pdGVtcy50b0FycmF5KCk7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gYXJyYXkuZmluZEluZGV4KChfX2l0ZW0pID0+IF9faXRlbSA9PT0gb3V0cHV0Lml0ZW0pICsgdGhpcy5vZmZzZXQ7XG5cbiAgICAgICAgaWYgKGluZGV4ID49IGFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleCAtIGFycmF5Lmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IF9pdGVtID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgICAgIHRoaXMuX2FjdGl2ZVZhbHVlID0gX2l0ZW0udmFsdWU7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9hY3RpdmVWYWx1ZSEsXG4gICAgICAgICAgICBhZnRlcjogb3V0cHV0LmFmdGVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2FjdGl2ZUNhcm91c2VsSXRlbSA9IF9pdGVtO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBjaGFuZ2VzIGFjdGl2ZSBpdGVtIGFuZCB0cmlnZ2VycyBjYXJvdXNlbCBzY3JvbGwgKi9cbiAgICBwaWNrKGl0ZW06IENhcm91c2VsSXRlbURpcmVjdGl2ZSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXg6IG51bWJlciA9IHRoaXMuaXRlbXMudG9BcnJheSgpLmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtID09PSB0aGlzLl9hY3RpdmVDYXJvdXNlbEl0ZW0pO1xuICAgICAgICAvKiogVG8gcHJldmVudCBmcm9tIHN3aXRjaGluZyB0aW1lLCB3aGVuIGl0J3MgYmVpbmcgZHJhZ2dlZCAqL1xuICAgICAgICBpZiAoIXRoaXMuX2lzRHJhZ2dpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKGl0ZW0sIHRydWUsIHRydWUsIGN1cnJlbnRJbmRleCA8IGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdHJpZ2dlcmVkIGJ5IGtleWJvYXJkLCBvciBpbmNyZW1lbnQgYnV0dG9uICovXG4gICAgc2Nyb2xsVXAoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8qKiBLZXlib2FyZCBldmVudHMgaW4gcmVhY3RpdmUgZm9ybXMsIHNob3VsZG4ndCB0cmlnZ2VyIHRoaXMgbWV0aG9kICovXG4gICAgICAgIGlmIChldmVudCAmJiAhZXZlbnQuY2xpZW50WCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5pdGVtcy50b0FycmF5KCkuZmluZEluZGV4KChfaXRlbSkgPT4gX2l0ZW0gPT09IHRoaXMuX2FjdGl2ZUNhcm91c2VsSXRlbSk7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMucm93cy5sZW5ndGggLSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGlja1RpbWUodGhpcy5pdGVtcy50b0FycmF5KClbaW5kZXhdLCB0cnVlLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgYnkga2V5Ym9hcmQsIG9yIGRlY3JlbWVudCBidXR0b24gKi9cbiAgICBzY3JvbGxEb3duKCk6IHZvaWQge1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuaXRlbXMudG9BcnJheSgpLmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtID09PSB0aGlzLl9hY3RpdmVDYXJvdXNlbEl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLnJvd3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuaXRlbXMudG9BcnJheSgpW2luZGV4XSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEZvY3VzIG9uIGNvbHVtbiAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluZGljYXRvcj8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBpZCBmb3IgY29sdW1uIGl0ZW1cbiAgICAgKiBAcGFyYW0gaW5kZXggY29sdW1uIGl0ZW0gaW5kZXhcbiAgICAgKiBAcmV0dXJucyBjb2x1bW4gaXRlbSBpZFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfY3JlYXRlQ29sdW1uSXRlbUlkQnlJbmRleChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBmb2N1cyBjYWxsYmFja1xuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBfb25Gb2N1c0luZGljYXRvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTdGF0ZUNoYW5nZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBoYW5kbGVzIGFscGhhYmV0aWNhbCBrZXkgaW5wdXRzIHRvIHNldCBwZXJpb2QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWxwaGFLZXlJbnB1dEhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYScpIHtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lT25WYWx1ZSgnQU0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICB0aGlzLl9waWNrVGltZU9uVmFsdWUoJ1BNJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIGhhbmRsZXMgbnVtZXJpYyBrZXkgaW5wdXRzIHRvIHNldCB0aW1lLlxuICAgICAqL1xuICAgIHByaXZhdGUgX251bWVyaWNLZXlJbnB1dEhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW1WYWx1ZSA9IHRoaXMuaXRlbXMubGFzdC52YWx1ZS52YWx1ZTsgLy8gdmFsdWUgb2YgbGFzdCBpdGVtIGluIGNvbHVtblxuXG4gICAgICAgIHRoaXMuX251bWVyaWNJbnB1dFRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHRoaXMuX251bWVyaWNJbnB1dFRpbWVvdXQpO1xuICAgICAgICB0aGlzLl9rZXlMb2cucHVzaChldmVudC5rZXkpO1xuICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gcGFyc2VJbnQodGhpcy5fa2V5TG9nLmpvaW4oJycpLCAxMCk7IC8vIGNvbnZlcnRzIGtleUxvZyBlbGVtZW50cyB0byBhIG51bWJlclxuXG4gICAgICAgIGlmIChpbnB1dFZhbHVlICogMTAgPiBsYXN0SXRlbVZhbHVlIHx8IHRoaXMuX2tleUxvZy5sZW5ndGggPT09IGxhc3RJdGVtVmFsdWUudG9TdHJpbmcoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lT25WYWx1ZShpbnB1dFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX251bWVyaWNJbnB1dFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9waWNrVGltZU9uVmFsdWUoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBzZXQgdGhlIHRpbWUgZm9yIGdpdmVuIGl0ZW0gdmFsdWUuIHVzZWQgYnkgX251bWVyaWNLZXlJbnB1dEhhbmRsZXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcGlja1RpbWVPblZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcGlja1RpbWUoXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUudmFsdWUgPT09IHZhbHVlKSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2tleUxvZyA9IFtdOyAvLyBjbGVhciBrZXkgbG9nXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRyaWdnZXJlZCBieSBrZXlib2FyZCwgb3IgZGVjcmVtZW50IGJ1dHRvblxuICAgICAqIEFyZ3M6XG4gICAgICogaXRlbSA9PiBwaWNrZWQgY2Fyb3VzZWwgaXRlbSwgdGhhdCBzaG91bGQgYmUgY2VudGVyZWRcbiAgICAgKiBzbW9vdGggPT4gZGVmaW5lcyBpZiB0cmFuc2l0aW9uIHRpbWUgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRyYW5zZm9ybVxuICAgICAqIGVtaXRFdmVudCA9PiBkZWZpbmVzIGlmIEV2ZW50RW1pdHRlciBzaG91bGQgYmUgdHJpZ2dlcmVkIGJ5IHRoaXMgY2hhbmdlLCBzZXQgdG8gZmFsc2UsIHdoZW4gY2hhbmdlZCBmcm9tIG91dHNpZGVcbiAgICAgKiBhZnRlciA9PiBEZWZpbmVzIGlmIHZhbHVlIHdhcyBpbmNyZW1lbnRlZC9kZWNyZW1lbnRlZCwgbmVlZGVkIGZvciBob3VycyB0byB0cmlnZ2VyIEFNL1BNIGNoYW5nZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9waWNrVGltZShpdGVtPzogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlLCBzbW9vdGg/OiBib29sZWFuLCBlbWl0RXZlbnQ/OiBib29sZWFuLCBhZnRlcj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJDYXJvdXNlbChpdGVtLCBzbW9vdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlQ2Fyb3VzZWxJdGVtID0gaXRlbTtcbiAgICAgICAgdGhpcy5fYWN0aXZlVmFsdWUgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgYWZ0ZXJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpdGVtIHdpdGggcGFzc2VkIHZhbHVlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEl0ZW0oX2l0ZW06IE51bGxhYmxlPFQ+KTogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gX2l0ZW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJpZ2dlckNhcm91c2VsKGl0ZW06IENhcm91c2VsSXRlbURpcmVjdGl2ZSwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuaXRlbXMudG9BcnJheSgpO1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IGFycmF5LmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtID09PSBpdGVtKSAtIHRoaXMub2Zmc2V0O1xuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIGluZGV4ID0gYXJyYXkubGVuZ3RoICsgaW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhcm91c2VsLmdvVG9JdGVtKGFycmF5W2luZGV4XSwgc21vb3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1cyBjdXJyZW50IGluZGljYXRvciwgd2hpY2ggYWxsb3dzIHRvIGhhbmRsZSBrZXlkb3duIGV2ZW50cyBpbnNpZGUgY29sdW1uXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZvY3VzSW5kaWNhdG9yKCk6IHZvaWQge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmN1cnJlbnRJbmRpY2F0b3JJZCk/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKCFpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwUXVlcnlTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLl9xdWVyeUtleURvd25FdmVudC5waXBlKGRlYm91bmNlVGltZSh0aGlzLnR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5S2V5RG93bkV2ZW50XG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcih0cmlnZ2VyKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKChrZXlzKSA9PiBrZXlzLmpvaW4oJycpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy5fZ2V0VmFsdWUodmFsdWUpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy5fZ2V0SXRlbSh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHRoaXMuX3BpY2tUaW1lKGl0ZW0sIGZhbHNlLCB0cnVlKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwQ2Fyb3VzZWxDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWc6IENhcm91c2VsQ29uZmlnID0ge1xuICAgICAgICAgICAgZ2VzdHVyZVN1cHBvcnQ6IHRydWUsXG4gICAgICAgICAgICB2ZXJ0aWNhbDogdHJ1ZSxcbiAgICAgICAgICAgIGVsZW1lbnRzQXRPbmNlOiB0aGlzLl9lbGVtZW50c0F0T25jZSQudmFsdWUsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnMTUwbXMnXG4gICAgICAgIH07XG4gICAgICAgIGlmICghdGhpcy5tZXJpZGlhbikge1xuICAgICAgICAgICAgY29uZmlnLmluZmluaXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwSW5pdGlhbFZhbHVlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVWYWx1ZSA9IHRoaXMuaXRlbXMuZmlyc3QudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGlja1RpbWUodGhpcy5fZ2V0SXRlbSh0aGlzLl9hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUludGVybmFsVHJhbnNsYXRpb25Db25maWcoKTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jb2x1bW5UcmFuc2xhdGlvbnNQcmVzZXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsVHJhbnNsYXRpb25Db25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGluY3JlYXNlTGFiZWw6ICdjb3JlVGltZS5pbmNyZWFzZUhvdXJzTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2NvcmVUaW1lLmhyc0xhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgZnVsbExhYmVsOiAnY29yZVRpbWUuaG91cnNMYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIGRlY3JlYXNlTGFiZWw6ICdjb3JlVGltZS5kZWNyZWFzZUhvdXJzTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5zdHJ1Y3Rpb246ICdjb3JlVGltZS5uYXZpZ2F0aW9uSW5zdHJ1Y3Rpb24nXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVhc2VMYWJlbDogJ2NvcmVUaW1lLmluY3JlYXNlTWludXRlc0xhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdjb3JlVGltZS5taW5MYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxMYWJlbDogJ2NvcmVUaW1lLm1pbnV0ZXNMYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIGRlY3JlYXNlTGFiZWw6ICdjb3JlVGltZS5kZWNyZWFzZU1pbnV0ZXNMYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25JbnN0cnVjdGlvbjogJ2NvcmVUaW1lLm5hdmlnYXRpb25JbnN0cnVjdGlvbidcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBpbmNyZWFzZUxhYmVsOiAnY29yZVRpbWUuaW5jcmVhc2VTZWNvbmRzTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2NvcmVUaW1lLnNlY0xhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgZnVsbExhYmVsOiAnY29yZVRpbWUuc2Vjb25kc0xhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgZGVjcmVhc2VMYWJlbDogJ2NvcmVUaW1lLmRlY3JlYXNlU2Vjb25kc0xhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbkluc3RydWN0aW9uOiAnY29yZVRpbWUubmF2aWdhdGlvbkluc3RydWN0aW9uJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwZXJpb2QnOlxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVhc2VMYWJlbDogJ2NvcmVUaW1lLmluY3JlYXNlUGVyaW9kTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2NvcmVUaW1lLnBlcmlvZExhYmVsJyxcbiAgICAgICAgICAgICAgICAgICAgZnVsbExhYmVsOiAnY29yZVRpbWUucGVyaW9kTGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICBkZWNyZWFzZUxhYmVsOiAnY29yZVRpbWUuZGVjcmVhc2VQZXJpb2RMYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25JbnN0cnVjdGlvbjogJ2NvcmVUaW1lLm5hdmlnYXRpb25JbnN0cnVjdGlvbidcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cImZkLXRpbWVfX3NsaWRlci1sYWJlbFwiPnt7XG4gICAgdGltZUNvbmZpZz8ubGFiZWwgfHwgKGludGVybmFsVHJhbnNsYXRpb25Db25maWcgJiYgKGludGVybmFsVHJhbnNsYXRpb25Db25maWcubGFiZWwgfCBmZFRyYW5zbGF0ZSkpXG59fTwvbGFiZWw+XG48YnV0dG9uXG4gICAgKm5nSWY9XCJhY3RpdmUgJiYgc3Bpbm5lcnNcIlxuICAgIGZkLWJ1dHRvblxuICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICBnbHlwaD1cIm5hdmlnYXRpb24tdXAtYXJyb3dcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIFt0aXRsZV09XCJcbiAgICAgICAgdGltZUNvbmZpZz8uZGVjcmVhc2VMYWJlbCB8fFxuICAgICAgICAoaW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZyAmJiAoaW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZy5kZWNyZWFzZUxhYmVsIHwgZmRUcmFuc2xhdGUpKVxuICAgIFwiXG4gICAgW2FyaWFMYWJlbF09XCJcbiAgICAgICAgdGltZUNvbmZpZz8uZGVjcmVhc2VMYWJlbCB8fFxuICAgICAgICAoaW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZyAmJiAoaW50ZXJuYWxUcmFuc2xhdGlvbkNvbmZpZy5kZWNyZWFzZUxhYmVsIHwgZmRUcmFuc2xhdGUpKVxuICAgIFwiXG4gICAgKGtleXVwKT1cInNwaW5uZXJCdXR0b25LZXl1cEhhbmRsZSgkZXZlbnQsIHRydWUpXCJcbiAgICAoY2xpY2spPVwic2Nyb2xsVXAoJGV2ZW50KVwiXG4+PC9idXR0b24+XG48ZGl2XG4gICAgY2xhc3M9XCJmZC10aW1lX193cmFwcGVyXCJcbiAgICBbY2xhc3MuZmQtdGltZV9fd3JhcHBlci0tYWN0aXZlXT1cImFjdGl2ZVwiXG4gICAgW2NsYXNzLmZkLXRpbWVfX3dyYXBwZXItLW1lcmlkaWFuXT1cIm1lcmlkaWFuXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImFjdGl2ZSA/IHdyYXBwZXJIZWlnaHQgOiAnJ1wiXG4+XG4gICAgPHVsXG4gICAgICAgIGNsYXNzPVwiZmQtdGltZV9fbGlzdFwiXG4gICAgICAgIFtjbGFzcy5mZC10aW1lLWNvbHVtbi1jdXN0b20taGlkZGVuXT1cIiFhY3RpdmVcIlxuICAgICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICAgIChjbGljayk9XCJpbmRpY2F0b3IuZm9jdXMoKVwiXG4gICAgICAgIChhY3RpdmVDaGFuZ2UpPVwiYWN0aXZlQ2hhbmdlZEhhbmRsZSgkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdTdGF0ZUNoYW5nZSk9XCJoYW5kbGVEcmFnKCRldmVudClcIlxuICAgICAgICBmZENhcm91c2VsXG4gICAgPlxuICAgICAgICA8bGlcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtdGltZV9faXRlbVwiXG4gICAgICAgICAgICBmZENhcm91c2VsSXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAjaXRlbT1cImZkQ2Fyb3VzZWxJdGVtXCJcbiAgICAgICAgICAgIFtpZF09XCJfY3JlYXRlQ29sdW1uSXRlbUlkQnlJbmRleChpbmRleClcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kaXNwbGF5ZWQtdmFsdWVdPVwicm93LnZhbHVlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJyb3dcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZkLXRpbWVfX3VuaXRcIiByb2xlPVwiYnV0dG9uXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJyb3cubGFiZWxcIiAoY2xpY2spPVwicGljayhpdGVtLCBpbmRleClcIj5cbiAgICAgICAgICAgICAgICB7eyByb3cubGFiZWwgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC10aW1lX19jdXJyZW50LWluZGljYXRvclwiXG4gICAgICAgICNpbmRpY2F0b3JcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgICBbYXR0ci5pZF09XCJjdXJyZW50SW5kaWNhdG9ySWRcIlxuICAgICAgICBbY2xhc3MuZmQtdGltZS1jb2x1bW4tY3VzdG9tLWhpZGRlbl09XCIhYWN0aXZlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImN1cnJlbnRJbmRpY2F0b3JWYWx1ZUlkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmlwdGlvbl09XCJcbiAgICAgICAgICAgIHRpbWVDb25maWc/Lm5hdmlnYXRpb25JbnN0cnVjdGlvbiB8fFxuICAgICAgICAgICAgKGludGVybmFsVHJhbnNsYXRpb25Db25maWcgJiYgKGludGVybmFsVHJhbnNsYXRpb25Db25maWcubmF2aWdhdGlvbkluc3RydWN0aW9uIHwgZmRUcmFuc2xhdGUpKVxuICAgICAgICBcIlxuICAgICAgICAoZm9jdXMpPVwiX29uRm9jdXNJbmRpY2F0b3IoKVwiXG4gICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJmZC10aW1lLWNvbHVtbi1jdXN0b20taGlkZGVuXCJcbiAgICAgICAgICAgIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiXG4gICAgICAgICAgICBhcmlhLWF0b21pYz1cInRydWVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWFjdGl2ZVwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJjdXJyZW50SW5kaWNhdG9yVmFsdWVJZFwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtdGltZS1jb2x1bW4tY3VzdG9tLWhpZGRlbl09XCJhY3RpdmVcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBhY3RpdmVWYWx1ZT8ubGFiZWwgfX1cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgdGltZUNvbmZpZz8ubGFiZWwgfHwgKGludGVybmFsVHJhbnNsYXRpb25Db25maWcgJiYgKGludGVybmFsVHJhbnNsYXRpb25Db25maWcuZnVsbExhYmVsIHwgZmRUcmFuc2xhdGUpKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuICpuZ0lmPVwiIWFjdGl2ZVwiIGNsYXNzPVwiZmQtdGltZV9faXRlbSBmZC10aW1lX19pdGVtLS1jb2xsYXBzZWRcIj5cbiAgICAgICAge3sgYWN0aXZlVmFsdWU/LmxhYmVsIH19XG4gICAgPC9zcGFuPlxuPC9kaXY+XG48YnV0dG9uXG4gICAgKm5nSWY9XCJhY3RpdmUgJiYgc3Bpbm5lcnNcIlxuICAgIGZkLWJ1dHRvblxuICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICBnbHlwaD1cIm5hdmlnYXRpb24tZG93bi1hcnJvd1wiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgW3RpdGxlXT1cIlxuICAgICAgICB0aW1lQ29uZmlnPy5pbmNyZWFzZUxhYmVsIHx8XG4gICAgICAgIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnICYmIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnLmluY3JlYXNlTGFiZWwgfCBmZFRyYW5zbGF0ZSkpXG4gICAgXCJcbiAgICBbYXJpYUxhYmVsXT1cIlxuICAgICAgICB0aW1lQ29uZmlnPy5pbmNyZWFzZUxhYmVsIHx8XG4gICAgICAgIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnICYmIChpbnRlcm5hbFRyYW5zbGF0aW9uQ29uZmlnLmluY3JlYXNlTGFiZWwgfCBmZFRyYW5zbGF0ZSkpXG4gICAgXCJcbiAgICAoa2V5dXApPVwic3Bpbm5lckJ1dHRvbktleXVwSGFuZGxlKCRldmVudClcIlxuICAgIChjbGljayk9XCJzY3JvbGxEb3duKClcIlxuPjwvYnV0dG9uPlxuIl19
@@ -396,7 +396,8 @@ class TimeColumnComponent {
396
396
  case 'hours':
397
397
  this.internalTranslationConfig = {
398
398
  increaseLabel: 'coreTime.increaseHoursLabel',
399
- label: 'coreTime.hoursLabel',
399
+ label: 'coreTime.hrsLabel',
400
+ fullLabel: 'coreTime.hoursLabel',
400
401
  decreaseLabel: 'coreTime.decreaseHoursLabel',
401
402
  navigationInstruction: 'coreTime.navigationInstruction'
402
403
  };
@@ -404,7 +405,8 @@ class TimeColumnComponent {
404
405
  case 'minutes':
405
406
  this.internalTranslationConfig = {
406
407
  increaseLabel: 'coreTime.increaseMinutesLabel',
407
- label: 'coreTime.minutesLabel',
408
+ label: 'coreTime.minLabel',
409
+ fullLabel: 'coreTime.minutesLabel',
408
410
  decreaseLabel: 'coreTime.decreaseMinutesLabel',
409
411
  navigationInstruction: 'coreTime.navigationInstruction'
410
412
  };
@@ -412,7 +414,8 @@ class TimeColumnComponent {
412
414
  case 'seconds':
413
415
  this.internalTranslationConfig = {
414
416
  increaseLabel: 'coreTime.increaseSecondsLabel',
415
- label: 'coreTime.secondsLabel',
417
+ label: 'coreTime.secLabel',
418
+ fullLabel: 'coreTime.secondsLabel',
416
419
  decreaseLabel: 'coreTime.decreaseSecondsLabel',
417
420
  navigationInstruction: 'coreTime.navigationInstruction'
418
421
  };
@@ -421,6 +424,7 @@ class TimeColumnComponent {
421
424
  this.internalTranslationConfig = {
422
425
  increaseLabel: 'coreTime.increasePeriodLabel',
423
426
  label: 'coreTime.periodLabel',
427
+ fullLabel: 'coreTime.periodLabel',
424
428
  decreaseLabel: 'coreTime.decreasePeriodLabel',
425
429
  navigationInstruction: 'coreTime.navigationInstruction'
426
430
  };
@@ -432,13 +436,13 @@ class TimeColumnComponent {
432
436
  this._changeDetRef.markForCheck();
433
437
  }
434
438
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: TimeColumnComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
435
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: TimeColumnComponent, isStandalone: true, selector: "fd-time-column", inputs: { rows: "rows", spinners: "spinners", activeValue: "activeValue", active: "active", meridian: "meridian", id: "id", timeConfig: "timeConfig", columnTranslationsPreset: "columnTranslationsPreset", offset: "offset", elementsAtOnce: "elementsAtOnce" }, outputs: { activeValueChange: "activeValueChange", activeStateChange: "activeStateChange" }, host: { listeners: { "click": "onItemClick()", "keydown": "keyDownHandler($event)", "wheel": "mouseScrollHandler($event)" }, properties: { "class.fd-time__col--period": "this.meridian" }, classAttribute: "fd-time__col" }, viewQueries: [{ propertyName: "carousel", first: true, predicate: CarouselDirective, descendants: true }, { propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, read: ElementRef }, { propertyName: "items", predicate: CarouselItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label class=\"fd-time__slider-label\">{{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate))\n}}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n (click)=\"scrollUp($event)\"\n></button>\n<div\n class=\"fd-time__wrapper\"\n [class.fd-time__wrapper--active]=\"active\"\n [class.fd-time__wrapper--meridian]=\"meridian\"\n [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n <ul\n class=\"fd-time__list\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [config]=\"config\"\n (click)=\"indicator.focus()\"\n (activeChange)=\"activeChangedHandle($event)\"\n (dragStateChange)=\"handleDrag($event)\"\n fdCarousel\n >\n <li\n class=\"fd-time__item\"\n fdCarouselItem\n *ngFor=\"let row of rows; let index = index\"\n #item=\"fdCarouselItem\"\n [id]=\"_createColumnItemIdByIndex(index)\"\n [attr.data-displayed-value]=\"row.value\"\n [value]=\"row\"\n >\n <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n {{ row.label }}\n </span>\n </li>\n </ul>\n <div\n class=\"fd-time__current-indicator\"\n #indicator\n tabindex=\"0\"\n role=\"listbox\"\n [attr.id]=\"currentIndicatorId\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [attr.aria-labelledby]=\"currentIndicatorValueId\"\n [attr.aria-description]=\"\n timeConfig?.navigationInstruction ||\n (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate))\n \"\n (focus)=\"_onFocusIndicator()\"\n >\n <span\n class=\"fd-time-column-custom-hidden\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [attr.aria-hidden]=\"!active\"\n [attr.id]=\"currentIndicatorValueId\"\n [class.fd-time-column-custom-hidden]=\"active\"\n >\n {{ activeValue?.label }}\n {{ timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate)) }}\n </span>\n </div>\n <span *ngIf=\"!active\" class=\"fd-time__item fd-time__item--collapsed\">\n {{ activeValue?.label }}\n </span>\n</div>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-down-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n", styles: [".fd-time__col .fd-carousel{transition:all .2s ease-in}.fd-time__list{overflow:visible}.fd-time-column-custom-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.fd-time__current-indicator{pointer-events:none}.fd-time__current-indicator:focus{outline:none}.fd-time--compact .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed,.fd-time .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed{margin-bottom:0;margin-top:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: CarouselDirective, selector: "[fdCarousel]", inputs: ["config", "active"], outputs: ["activeChange", "dragStateChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: CarouselItemDirective, selector: "[fd-carousel-item], [fdCarouselItem]", inputs: ["value", "initialHeight", "initialWidth", "id"], exportAs: ["fdCarouselItem"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
439
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: TimeColumnComponent, isStandalone: true, selector: "fd-time-column", inputs: { rows: "rows", spinners: "spinners", activeValue: "activeValue", active: "active", meridian: "meridian", id: "id", timeConfig: "timeConfig", columnTranslationsPreset: "columnTranslationsPreset", offset: "offset", elementsAtOnce: "elementsAtOnce" }, outputs: { activeValueChange: "activeValueChange", activeStateChange: "activeStateChange" }, host: { listeners: { "click": "onItemClick()", "keydown": "keyDownHandler($event)", "wheel": "mouseScrollHandler($event)" }, properties: { "class.fd-time__col--period": "this.meridian" }, classAttribute: "fd-time__col" }, viewQueries: [{ propertyName: "carousel", first: true, predicate: CarouselDirective, descendants: true }, { propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, read: ElementRef }, { propertyName: "items", predicate: CarouselItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<label class=\"fd-time__slider-label\">{{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate))\n}}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n (click)=\"scrollUp($event)\"\n></button>\n<div\n class=\"fd-time__wrapper\"\n [class.fd-time__wrapper--active]=\"active\"\n [class.fd-time__wrapper--meridian]=\"meridian\"\n [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n <ul\n class=\"fd-time__list\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [config]=\"config\"\n (click)=\"indicator.focus()\"\n (activeChange)=\"activeChangedHandle($event)\"\n (dragStateChange)=\"handleDrag($event)\"\n fdCarousel\n >\n <li\n class=\"fd-time__item\"\n fdCarouselItem\n *ngFor=\"let row of rows; let index = index\"\n #item=\"fdCarouselItem\"\n [id]=\"_createColumnItemIdByIndex(index)\"\n [attr.data-displayed-value]=\"row.value\"\n [value]=\"row\"\n >\n <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n {{ row.label }}\n </span>\n </li>\n </ul>\n <div\n class=\"fd-time__current-indicator\"\n #indicator\n tabindex=\"0\"\n role=\"listbox\"\n [attr.id]=\"currentIndicatorId\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [attr.aria-labelledby]=\"currentIndicatorValueId\"\n [attr.aria-description]=\"\n timeConfig?.navigationInstruction ||\n (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate))\n \"\n (focus)=\"_onFocusIndicator()\"\n >\n <span\n class=\"fd-time-column-custom-hidden\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [attr.aria-hidden]=\"!active\"\n [attr.id]=\"currentIndicatorValueId\"\n [class.fd-time-column-custom-hidden]=\"active\"\n >\n {{ activeValue?.label }}\n {{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.fullLabel | fdTranslate))\n }}\n </span>\n </div>\n <span *ngIf=\"!active\" class=\"fd-time__item fd-time__item--collapsed\">\n {{ activeValue?.label }}\n </span>\n</div>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-down-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n", styles: [".fd-time__col .fd-carousel{transition:all .2s ease-in}.fd-time__list{overflow:visible}.fd-time-column-custom-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.fd-time__current-indicator{pointer-events:none}.fd-time__current-indicator:focus{outline:none}.fd-time--compact .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed,.fd-time .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed{margin-bottom:0;margin-top:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: CarouselDirective, selector: "[fdCarousel]", inputs: ["config", "active"], outputs: ["activeChange", "dragStateChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: CarouselItemDirective, selector: "[fd-carousel-item], [fdCarouselItem]", inputs: ["value", "initialHeight", "initialWidth", "id"], exportAs: ["fdCarouselItem"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
436
440
  }
437
441
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: TimeColumnComponent, decorators: [{
438
442
  type: Component,
439
443
  args: [{ selector: 'fd-time-column', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
440
444
  class: 'fd-time__col'
441
- }, standalone: true, imports: [NgIf, ButtonComponent, CarouselDirective, NgFor, CarouselItemDirective, FdTranslatePipe], template: "<label class=\"fd-time__slider-label\">{{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate))\n}}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n (click)=\"scrollUp($event)\"\n></button>\n<div\n class=\"fd-time__wrapper\"\n [class.fd-time__wrapper--active]=\"active\"\n [class.fd-time__wrapper--meridian]=\"meridian\"\n [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n <ul\n class=\"fd-time__list\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [config]=\"config\"\n (click)=\"indicator.focus()\"\n (activeChange)=\"activeChangedHandle($event)\"\n (dragStateChange)=\"handleDrag($event)\"\n fdCarousel\n >\n <li\n class=\"fd-time__item\"\n fdCarouselItem\n *ngFor=\"let row of rows; let index = index\"\n #item=\"fdCarouselItem\"\n [id]=\"_createColumnItemIdByIndex(index)\"\n [attr.data-displayed-value]=\"row.value\"\n [value]=\"row\"\n >\n <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n {{ row.label }}\n </span>\n </li>\n </ul>\n <div\n class=\"fd-time__current-indicator\"\n #indicator\n tabindex=\"0\"\n role=\"listbox\"\n [attr.id]=\"currentIndicatorId\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [attr.aria-labelledby]=\"currentIndicatorValueId\"\n [attr.aria-description]=\"\n timeConfig?.navigationInstruction ||\n (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate))\n \"\n (focus)=\"_onFocusIndicator()\"\n >\n <span\n class=\"fd-time-column-custom-hidden\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [attr.aria-hidden]=\"!active\"\n [attr.id]=\"currentIndicatorValueId\"\n [class.fd-time-column-custom-hidden]=\"active\"\n >\n {{ activeValue?.label }}\n {{ timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate)) }}\n </span>\n </div>\n <span *ngIf=\"!active\" class=\"fd-time__item fd-time__item--collapsed\">\n {{ activeValue?.label }}\n </span>\n</div>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-down-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n", styles: [".fd-time__col .fd-carousel{transition:all .2s ease-in}.fd-time__list{overflow:visible}.fd-time-column-custom-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.fd-time__current-indicator{pointer-events:none}.fd-time__current-indicator:focus{outline:none}.fd-time--compact .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed,.fd-time .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed{margin-bottom:0;margin-top:0}\n"] }]
445
+ }, standalone: true, imports: [NgIf, ButtonComponent, CarouselDirective, NgFor, CarouselItemDirective, FdTranslatePipe], template: "<label class=\"fd-time__slider-label\">{{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate))\n}}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n (click)=\"scrollUp($event)\"\n></button>\n<div\n class=\"fd-time__wrapper\"\n [class.fd-time__wrapper--active]=\"active\"\n [class.fd-time__wrapper--meridian]=\"meridian\"\n [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n <ul\n class=\"fd-time__list\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [config]=\"config\"\n (click)=\"indicator.focus()\"\n (activeChange)=\"activeChangedHandle($event)\"\n (dragStateChange)=\"handleDrag($event)\"\n fdCarousel\n >\n <li\n class=\"fd-time__item\"\n fdCarouselItem\n *ngFor=\"let row of rows; let index = index\"\n #item=\"fdCarouselItem\"\n [id]=\"_createColumnItemIdByIndex(index)\"\n [attr.data-displayed-value]=\"row.value\"\n [value]=\"row\"\n >\n <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n {{ row.label }}\n </span>\n </li>\n </ul>\n <div\n class=\"fd-time__current-indicator\"\n #indicator\n tabindex=\"0\"\n role=\"listbox\"\n [attr.id]=\"currentIndicatorId\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [attr.aria-labelledby]=\"currentIndicatorValueId\"\n [attr.aria-description]=\"\n timeConfig?.navigationInstruction ||\n (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate))\n \"\n (focus)=\"_onFocusIndicator()\"\n >\n <span\n class=\"fd-time-column-custom-hidden\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [attr.aria-hidden]=\"!active\"\n [attr.id]=\"currentIndicatorValueId\"\n [class.fd-time-column-custom-hidden]=\"active\"\n >\n {{ activeValue?.label }}\n {{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.fullLabel | fdTranslate))\n }}\n </span>\n </div>\n <span *ngIf=\"!active\" class=\"fd-time__item fd-time__item--collapsed\">\n {{ activeValue?.label }}\n </span>\n</div>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-down-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n", styles: [".fd-time__col .fd-carousel{transition:all .2s ease-in}.fd-time__list{overflow:visible}.fd-time-column-custom-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.fd-time__current-indicator{pointer-events:none}.fd-time__current-indicator:focus{outline:none}.fd-time--compact .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed,.fd-time .fd-time__wrapper--meridian .fd-time__item:last-child.fd-time__item--collapsed{margin-bottom:0;margin-top:0}\n"] }]
442
446
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { rows: [{
443
447
  type: Input
444
448
  }], spinners: [{
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-time.mjs","sources":["../../../../libs/core/src/lib/time/time-column/time-column.component.ts","../../../../libs/core/src/lib/time/time-column/time-column.component.html","../../../../libs/core/src/lib/time/errors.ts","../../../../libs/core/src/lib/time/time.component.ts","../../../../libs/core/src/lib/time/time.component.html","../../../../libs/core/src/lib/time/time.module.ts","../../../../libs/core/src/lib/time/fundamental-ngx-core-time.ts"],"sourcesContent":["import { DOWN_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { BehaviorSubject, Subject, Subscription, combineLatest } from 'rxjs';\nimport { buffer, debounceTime, filter, map, tap } from 'rxjs/operators';\n\nimport { KeyUtil, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { CarouselConfig, CarouselDirective, CarouselItemDirective, PanEndOutput } from '@fundamental-ngx/core/carousel';\n\nimport { NgFor, NgIf } from '@angular/common';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SelectableViewItem } from '../models';\nimport { TimeColumnConfig } from './time-column-config';\n\nlet timeColumnUniqueId = 0;\n\nexport interface TimeColumnItemOutput<T> {\n value: T;\n after?: boolean;\n}\n\n@Component({\n selector: 'fd-time-column',\n templateUrl: './time-column.component.html',\n styleUrls: ['./time-column.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fd-time__col'\n },\n standalone: true,\n imports: [NgIf, ButtonComponent, CarouselDirective, NgFor, CarouselItemDirective, FdTranslatePipe]\n})\nexport class TimeColumnComponent<K, T extends SelectableViewItem<K> = SelectableViewItem<K>>\n implements AfterViewInit, OnInit, OnDestroy, OnChanges\n{\n /** items in row */\n @Input()\n rows: T[] = [];\n\n /**\n * @Input When set to false, hides the buttons that increment\n * and decrement the corresponding columns.\n */\n @Input()\n spinners = true;\n\n /** Currently chosen, centered time column item */\n @Input()\n set activeValue(activeItem: Nullable<T>) {\n if (!activeItem) {\n // omitting \"null\" and \"undefined\"\n return;\n }\n if (this._viewInit$.value && this._activeValue !== activeItem) {\n this._pickTime(this._getItem(activeItem), false);\n }\n this._activeValue = activeItem;\n }\n\n get activeValue(): Nullable<T> {\n return this._activeValue;\n }\n\n /** Defines if column is active, it has impact on behavior and visual */\n @Input()\n set active(value: boolean) {\n this._active = value;\n if (value && this._viewInit$.value) {\n this._changeDetRef.detectChanges();\n this._pickTime(this._getItem(this.activeValue), false);\n this._focusIndicator();\n }\n }\n\n get active(): boolean {\n return this._active;\n }\n\n /** Whether time column is meridian */\n @Input()\n @HostBinding('class.fd-time__col--period')\n meridian = false;\n\n /** Id of column, initiated with some default value */\n @Input()\n id: string = 'fd-time-column-' + timeColumnUniqueId++;\n\n /** I18n and labels */\n @Input()\n timeConfig: Nullable<TimeColumnConfig>;\n\n /** I18n and labels */\n @Input()\n columnTranslationsPreset: 'seconds' | 'minutes' | 'hours' | 'period';\n\n /**\n * Offset for carousel directive, active item is always the first one.\n * In case of having more items in carousel than 1, middle element should be active\n */\n @Input()\n set offset(value: number) {\n this._offset$.next(value);\n }\n get offset(): number {\n return this._offset$.value;\n }\n\n /**\n * Quantity of the elements to be shown at the same time in column\n */\n @Input()\n set elementsAtOnce(value: number) {\n this._elementsAtOnce$.next(value);\n }\n\n /** Event emitted, when active item is changed, by carousel */\n @Output()\n activeValueChange: EventEmitter<TimeColumnItemOutput<T>> = new EventEmitter<TimeColumnItemOutput<T>>();\n\n /** Event emitted, when certain column is activated */\n @Output()\n activeStateChange: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild(CarouselDirective)\n carousel: CarouselDirective;\n\n /** @hidden */\n @ViewChildren(CarouselItemDirective)\n items: QueryList<CarouselItemDirective>;\n\n /** @hidden */\n @ViewChild('indicator', { read: ElementRef })\n indicator: ElementRef;\n\n /** @hidden */\n wrapperHeight: number;\n\n /**\n * Time to wait in milliseconds after the last keydown before\n * focusing or selecting option based on numeric/alpha keys.\n * @hidden\n */\n typeaheadDebounceInterval = 750;\n\n /** @hidden */\n config: CarouselConfig;\n\n /** @hidden */\n internalTranslationConfig: TimeColumnConfig | null = null;\n\n /** @hidden */\n get currentIndicatorId(): string {\n return this.id + '-current-indicator';\n }\n\n /** @hidden */\n get currentIndicatorValueId(): string {\n return this.currentIndicatorId + '-value';\n }\n\n /** @hidden */\n private _elementsAtOnce$ = new BehaviorSubject(7);\n\n /** @hidden */\n private _offset$ = new BehaviorSubject(3);\n\n /** @hidden */\n private _active = false;\n\n /** @hidden */\n private _queryKeyDownEvent: Subject<string> = new Subject<string>();\n\n /** @hidden */\n private _activeValue: Nullable<T>;\n\n /** @hidden */\n private _activeCarouselItem: CarouselItemDirective;\n\n /** @hidden */\n private _isDragging = false;\n\n /** @hidden */\n private _viewInit$ = new BehaviorSubject<boolean>(false);\n\n /** @hidden */\n private _resize$ = new BehaviorSubject<boolean>(false);\n\n /** @hidden */\n private _subscriptions: Subscription = new Subscription();\n\n /** @hidden\n * logs numeric key inputs to set time using keyboard input.\n */\n private _keyLog: string[] = [];\n\n /** @hidden\n * Timeout variable used to set timeout for subsequent numeric key input to set time.\n */\n private _numericInputTimeout: ReturnType<typeof setTimeout>;\n\n /** @hidden */\n constructor(private _changeDetRef: ChangeDetectorRef, private _elmRef: ElementRef) {\n this._subscriptions.add(\n combineLatest([this._viewInit$, this._elementsAtOnce$, this._offset$, this._resize$])\n .pipe(\n filter(([viewInit]) => viewInit),\n tap(([, elementsAtOnce, offset]) => {\n const averageHeight =\n this.items.toArray().reduce((acc, next) => acc + next.getHeight(), 0) / this.items.length;\n this.wrapperHeight = averageHeight * elementsAtOnce;\n const visibleButNotSelectedElements = Math.floor(elementsAtOnce / 2);\n if (offset === 0) {\n this.items.first.element.style.marginTop = `${\n visibleButNotSelectedElements * averageHeight\n }px`;\n this.items.last.element.style.marginBottom = `${\n visibleButNotSelectedElements * averageHeight\n }px`;\n }\n\n if (this.activeValue) {\n this._pickTime(this._getItem(this.activeValue), false);\n }\n\n this._changeDetRef.detectChanges();\n })\n )\n .subscribe()\n );\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._subscriptions.add(this._elementsAtOnce$.pipe(tap(() => this._setUpCarouselConfiguration())).subscribe());\n this._setUpQuerySubscription();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._subscriptions.add(\n resizeObservable(this._elmRef.nativeElement).subscribe(() => {\n this._resize$.next(true);\n })\n );\n this._viewInit$.next(true);\n }\n\n /** @hidde */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.columnTranslationsPreset) {\n this._updateInternalTranslationConfig();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n @HostListener('click')\n onItemClick(): void {\n this.activeStateChange.emit();\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n keyDownHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n this.scrollDown();\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this.scrollUp();\n event.preventDefault();\n } else if (KeyUtil.isKeyType(event, 'numeric')) {\n this._numericKeyInputHandler(event);\n } else if (KeyUtil.isKeyType(event, 'alphabetical')) {\n this._alphaKeyInputHandler(event);\n }\n }\n\n /** @hidden */\n @HostListener('wheel', ['$event'])\n mouseScrollHandler(event: WheelEvent): void {\n event.preventDefault();\n if (this._active) {\n event.deltaY > 0 ? this.scrollDown() : this.scrollUp();\n }\n }\n\n /** @hidden */\n spinnerButtonKeyupHandle(event: KeyboardEvent, upButton?: boolean): void {\n if (KeyUtil.isKeyCode(event, SPACE)) {\n if (upButton) {\n this.scrollUp();\n } else {\n this.scrollDown();\n }\n\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /** @hidden */\n setValueOfActive(): void {\n if (this._active) {\n this._setUpInitialValue();\n }\n }\n\n /** It prevents from accidentally change the item by click event */\n handleDrag(isDragging: boolean): void {\n this._isDragging = isDragging;\n }\n\n /** Method that handles active item change */\n activeChangedHandle(output: PanEndOutput): void {\n const array = this.items.toArray();\n let index: number = array.findIndex((__item) => __item === output.item) + this.offset;\n\n if (index >= array.length) {\n index = index - array.length;\n }\n\n const _item = array[index];\n\n this._activeValue = _item.value;\n\n this.activeValueChange.emit({\n value: this._activeValue!,\n after: output.after\n });\n\n this._activeCarouselItem = _item;\n }\n\n /** Method that changes active item and triggers carousel scroll */\n pick(item: CarouselItemDirective, index: number): void {\n const currentIndex: number = this.items.toArray().findIndex((_item) => _item === this._activeCarouselItem);\n /** To prevent from switching time, when it's being dragged */\n if (!this._isDragging) {\n this._pickTime(item, true, true, currentIndex < index);\n }\n }\n\n /** Method triggered by keyboard, or increment button */\n scrollUp(event?: MouseEvent): void {\n /** Keyboard events in reactive forms, shouldn't trigger this method */\n if (event && !event.clientX) {\n return;\n }\n let index: number = this.items.toArray().findIndex((_item) => _item === this._activeCarouselItem);\n if (index > 0) {\n index--;\n } else {\n index = this.rows.length - 1;\n }\n\n this._pickTime(this.items.toArray()[index], true, true, false);\n }\n\n /** Method triggered by keyboard, or decrement button */\n scrollDown(): void {\n let index: number = this.items.toArray().findIndex((_item) => _item === this._activeCarouselItem);\n if (index < this.rows.length - 1) {\n index++;\n } else {\n index = 0;\n }\n\n this._pickTime(this.items.toArray()[index], true, true, true);\n }\n\n /** Focus on column */\n focus(): void {\n this.indicator?.nativeElement.focus();\n }\n\n /**\n * Create id for column item\n * @param index column item index\n * @returns column item id\n * @hidden\n */\n _createColumnItemIdByIndex(index: number): string {\n return this.id + index;\n }\n\n /**\n * On focus callback\n * @hidden\n */\n _onFocusIndicator(): void {\n this.activeStateChange.emit();\n }\n\n /** @hidden\n * handles alphabetical key inputs to set period.\n */\n private _alphaKeyInputHandler(event: KeyboardEvent): void {\n if (event.key.toLowerCase() === 'a') {\n this._pickTimeOnValue('AM');\n } else if (event.key.toLowerCase() === 'p') {\n this._pickTimeOnValue('PM');\n }\n }\n\n /** @hidden\n * handles numeric key inputs to set time.\n */\n private _numericKeyInputHandler(event: KeyboardEvent): void {\n const lastItemValue = this.items.last.value.value; // value of last item in column\n\n this._numericInputTimeout && clearTimeout(this._numericInputTimeout);\n this._keyLog.push(event.key);\n const inputValue = parseInt(this._keyLog.join(''), 10); // converts keyLog elements to a number\n\n if (inputValue * 10 > lastItemValue || this._keyLog.length === lastItemValue.toString().length) {\n this._pickTimeOnValue(inputValue);\n } else {\n this._numericInputTimeout = setTimeout(() => {\n this._pickTimeOnValue(inputValue);\n }, 500);\n }\n }\n\n /** @hidden\n * set the time for given item value. used by _numericKeyInputHandler.\n */\n private _pickTimeOnValue(value: string | number): void {\n this._pickTime(\n this.items.find((item) => item.value.value === value),\n false,\n true,\n false\n );\n this._keyLog = []; // clear key log\n }\n\n /**\n * Method triggered by keyboard, or decrement button\n * Args:\n * item => picked carousel item, that should be centered\n * smooth => defines if transition time should be included in transform\n * emitEvent => defines if EventEmitter should be triggered by this change, set to false, when changed from outside\n * after => Defines if value was incremented/decremented, needed for hours to trigger AM/PM change\n * @hidden\n */\n private _pickTime(item?: CarouselItemDirective, smooth?: boolean, emitEvent?: boolean, after?: boolean): void {\n if (!item) {\n return;\n }\n\n if (this.active) {\n this._triggerCarousel(item, smooth);\n }\n\n this._activeCarouselItem = item;\n this._activeValue = item.value;\n\n if (emitEvent) {\n this.activeValueChange.emit({\n value: item.value,\n after\n });\n }\n }\n\n /**\n * Returns item with passed value\n * @hidden\n */\n private _getItem(_item: Nullable<T>): CarouselItemDirective | undefined {\n return this.items.find((item) => item.value === _item);\n }\n\n /** @hidden */\n private _triggerCarousel(item: CarouselItemDirective, smooth?: boolean): void {\n const array = this.items.toArray();\n let index: number = array.findIndex((_item) => _item === item) - this.offset;\n\n if (index < 0) {\n index = array.length + index;\n }\n\n this.carousel.goToItem(array[index], smooth);\n }\n\n /**\n * Focus current indicator, which allows to handle keydown events inside column\n * @hidden\n */\n private _focusIndicator(): void {\n document.getElementById(this.currentIndicatorId)?.focus();\n }\n\n /** @hidden */\n private _getValue(value: string): any {\n if (!isNaN(Number(value))) {\n return Number(value);\n } else {\n return value;\n }\n }\n\n /** @hidden */\n private _setUpQuerySubscription(): void {\n const trigger = this._queryKeyDownEvent.pipe(debounceTime(this.typeaheadDebounceInterval));\n\n this._subscriptions.add(\n this._queryKeyDownEvent\n .pipe(\n buffer(trigger),\n map((keys) => keys.join('')),\n map((value) => this._getValue(value)),\n map((value) => this._getItem(value))\n )\n .subscribe((item) => this._pickTime(item, false, true))\n );\n }\n\n /** @hidden */\n private _setUpCarouselConfiguration(): void {\n const config: CarouselConfig = {\n gestureSupport: true,\n vertical: true,\n elementsAtOnce: this._elementsAtOnce$.value,\n transition: '150ms'\n };\n if (!this.meridian) {\n config.infinite = true;\n }\n this.config = config;\n }\n\n /** @hidden */\n private _setUpInitialValue(): void {\n if (!this._activeValue) {\n this._activeValue = this.items.first.value;\n }\n this._pickTime(this._getItem(this._activeValue), false);\n }\n\n /** @hidden */\n private _updateInternalTranslationConfig(): void {\n switch (this.columnTranslationsPreset) {\n case 'hours':\n this.internalTranslationConfig = {\n increaseLabel: 'coreTime.increaseHoursLabel',\n label: 'coreTime.hoursLabel',\n decreaseLabel: 'coreTime.decreaseHoursLabel',\n navigationInstruction: 'coreTime.navigationInstruction'\n };\n break;\n case 'minutes':\n this.internalTranslationConfig = {\n increaseLabel: 'coreTime.increaseMinutesLabel',\n label: 'coreTime.minutesLabel',\n decreaseLabel: 'coreTime.decreaseMinutesLabel',\n navigationInstruction: 'coreTime.navigationInstruction'\n };\n break;\n case 'seconds':\n this.internalTranslationConfig = {\n increaseLabel: 'coreTime.increaseSecondsLabel',\n label: 'coreTime.secondsLabel',\n decreaseLabel: 'coreTime.decreaseSecondsLabel',\n navigationInstruction: 'coreTime.navigationInstruction'\n };\n break;\n case 'period':\n this.internalTranslationConfig = {\n increaseLabel: 'coreTime.increasePeriodLabel',\n label: 'coreTime.periodLabel',\n decreaseLabel: 'coreTime.decreasePeriodLabel',\n navigationInstruction: 'coreTime.navigationInstruction'\n };\n break;\n\n default:\n this.internalTranslationConfig = null;\n break;\n }\n this._changeDetRef.markForCheck();\n }\n}\n","<label class=\"fd-time__slider-label\">{{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate))\n}}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n (click)=\"scrollUp($event)\"\n></button>\n<div\n class=\"fd-time__wrapper\"\n [class.fd-time__wrapper--active]=\"active\"\n [class.fd-time__wrapper--meridian]=\"meridian\"\n [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n <ul\n class=\"fd-time__list\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [config]=\"config\"\n (click)=\"indicator.focus()\"\n (activeChange)=\"activeChangedHandle($event)\"\n (dragStateChange)=\"handleDrag($event)\"\n fdCarousel\n >\n <li\n class=\"fd-time__item\"\n fdCarouselItem\n *ngFor=\"let row of rows; let index = index\"\n #item=\"fdCarouselItem\"\n [id]=\"_createColumnItemIdByIndex(index)\"\n [attr.data-displayed-value]=\"row.value\"\n [value]=\"row\"\n >\n <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n {{ row.label }}\n </span>\n </li>\n </ul>\n <div\n class=\"fd-time__current-indicator\"\n #indicator\n tabindex=\"0\"\n role=\"listbox\"\n [attr.id]=\"currentIndicatorId\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [attr.aria-labelledby]=\"currentIndicatorValueId\"\n [attr.aria-description]=\"\n timeConfig?.navigationInstruction ||\n (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate))\n \"\n (focus)=\"_onFocusIndicator()\"\n >\n <span\n class=\"fd-time-column-custom-hidden\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [attr.aria-hidden]=\"!active\"\n [attr.id]=\"currentIndicatorValueId\"\n [class.fd-time-column-custom-hidden]=\"active\"\n >\n {{ activeValue?.label }}\n {{ timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate)) }}\n </span>\n </div>\n <span *ngIf=\"!active\" class=\"fd-time__item fd-time__item--collapsed\">\n {{ activeValue?.label }}\n </span>\n</div>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-down-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n","/** Creates an error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `FdTime: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`\n );\n}\n","import { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n SimpleChanges,\n ViewChildren,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { AsyncPipe, NgIf } from '@angular/common';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { createMissingDateImplementationError } from './errors';\nimport { Meridian, SelectableViewItem } from './models';\nimport { TimeColumnComponent } from './time-column/time-column.component';\n\nexport type FdTimeActiveView = 'hour' | 'minute' | 'second' | 'meridian';\n\ntype HourViewItem = SelectableViewItem<number>;\ntype MinuteViewItem = SelectableViewItem<number>;\ntype SecondViewItem = SelectableViewItem<number>;\ntype MeridianViewItem = SelectableViewItem<Meridian>;\n\n@Component({\n selector: 'fd-time',\n templateUrl: './time.component.html',\n styleUrls: ['./time.component.scss'],\n host: {\n '(focusout)': '_focusOut($event)',\n '(blur)': 'onTouched()'\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeComponent),\n multi: true\n },\n contentDensityObserverProviders()\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [TimeColumnComponent, NgIf, AsyncPipe, FdTranslatePipe]\n})\nexport class TimeComponent<D> implements OnInit, OnChanges, OnDestroy, AfterViewInit, ControlValueAccessor {\n /**\n * @Input When set to false, uses the 24 hour clock (hours ranging from 0 to 23)\n * and does not display a period control.\n */\n @Input()\n meridian = false;\n\n /**\n * @Input When set to false, does not set the input field to invalid state on invalid entry.\n */\n @Input()\n validate = true;\n\n /**\n * @Input when set to true, time inputs won't allow to have 1 digit\n * for example 9 will become 09\n * but 12 will be kept as 12.\n */\n @Input()\n keepTwoDigits = false;\n\n /**\n * @Input Disables the component.\n */\n @Input()\n disabled: boolean;\n\n /**\n * @Input When set to false, hides the input for seconds.\n */\n @Input()\n displaySeconds = true;\n\n /** @Input When set to false, hides the input for minutes. */\n @Input()\n displayMinutes = true;\n\n /**\n * When set to false, hides the input for hours\n */\n @Input()\n displayHours = true;\n\n /** @Input Defines if time component should be used in tablet mode */\n @Input()\n tablet = false;\n\n /** @Input Defines quantity of the elements, that are visible at the same time. Should be odd number */\n @Input()\n elementsAtOnce = 7;\n\n /**\n * @Input An object that contains datetime representation\n */\n @Input()\n time: D;\n\n /** @Input Whether to show spinner buttons */\n @Input()\n spinnerButtons = true;\n\n /** @hidden */\n @ViewChildren(TimeColumnComponent)\n columns: QueryList<TimeColumnComponent<unknown, SelectableViewItem<unknown>>>;\n\n /** Active column view to iterate with */\n activeView: FdTimeActiveView = 'hour';\n\n /** Offset */\n get offset(): number {\n return Math.floor(this.elementsAtOnce / 2);\n }\n\n /**\n * @hidden\n * container for [0 - 23] hours\n */\n hourViewItems: HourViewItem[] = [];\n /**\n * @hidden\n * reference to currently selected hourViewItems element\n */\n activeHourViewItem?: HourViewItem;\n\n /**\n * @hidden\n * container for [0 - 59] minutes\n */\n minuteViewItems: MinuteViewItem[] = [];\n /**\n * @hidden\n * reference to currently selected minuteViewItems element\n */\n activeMinuteViewItem?: MinuteViewItem;\n\n /**\n * @hidden\n * container for [0 - 59] seconds\n */\n secondViewItems: SecondViewItem[] = [];\n /**\n * @hidden\n * reference to currently selected secondViewItems element\n */\n activeSecondViewItem?: SecondViewItem;\n\n /**\n * @hidden\n * container for [am, pm] meridian values\n */\n meridianViewItems: MeridianViewItem[] = [];\n /**\n * @hidden\n * reference to currently selected meridianViewItems element\n */\n activeMeridianViewItem?: MeridianViewItem;\n\n /** @hidden */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _elementRef: ElementRef,\n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n @Optional() private _dateTimeAdapter: DatetimeAdapter<D>,\n readonly _contentDensityObserver: ContentDensityObserver,\n @Optional() private _rtlService: RtlService\n ) {\n if (!_dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n\n this.time = this._getDefaultValue();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._dateTimeAdapter.localeChanges.pipe(takeUntil(this._onDestroy$)).subscribe(() => {\n this._setUpViewGrid();\n this._changeDetectorRef.detectChanges();\n });\n\n this._setUpViewGrid();\n }\n\n /** @hidden\n * Reacts only when there is meridian or time input change\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.meridian || changes.time) {\n this._setUpViewGrid();\n }\n if (changes.elementsAtOnce && changes.elementsAtOnce.currentValue % 2 === 0) {\n throw new Error('[elementsAtOnce] should be odd number');\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this.refreshColumns();\n }\n\n /** @hidden */\n onChange: (value: D) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** @hidden */\n registerOnChange(fn: (time: D) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.detectChanges();\n }\n\n /** @hidden */\n refreshColumns(): void {\n this.columns.forEach((column) => column.setValueOfActive());\n }\n\n /**\n * @hidden\n * Handles meridian change.\n * This implicitly changes hours by +/- 12\n */\n handleMeridianChange(meridian: Meridian): void {\n let hourOffset: number = meridian === Meridian.AM ? -12 : 12;\n let currentHour = this._getModelHour();\n\n if (currentHour > 12 && meridian === Meridian.PM) {\n currentHour -= 12;\n } else if (currentHour === 12) {\n currentHour = 0;\n } else if (currentHour < 12 && meridian === Meridian.AM) {\n hourOffset = 0;\n }\n\n const newHour = Math.max(0, Math.min(23, currentHour + hourOffset));\n\n this.handleHourChange(newHour);\n }\n\n /** @hidden */\n handleSecondChange(second: number): void {\n this.time = this._dateTimeAdapter.setSeconds(this.time, second);\n this._calculateActiveSecondViewItem();\n this.onChange(this.time);\n }\n\n /** @hidden */\n handleMinuteChange(minute: number): void {\n this.time = this._dateTimeAdapter.setMinutes(this.time, minute);\n this._calculateActiveMinuteViewItem();\n this.onChange(this.time);\n }\n\n /**\n * @hidden\n * Handles changes of displayed hour value from template.\n */\n handleHourChange(hour: number): void {\n this.time = this._dateTimeAdapter.setHours(this.time, hour);\n this._calculateActiveHourViewItem();\n\n if (this.meridian) {\n this._calculateActiveMeridianViewItem();\n }\n\n this.onChange(this.time);\n }\n\n /** @hidden */\n handleNextColumnFocus(column: FdTimeActiveView): void {\n const columns = this._getVisibleColumnsWithRtl();\n let nextIndex = columns.indexOf(column) + 1;\n if (nextIndex >= columns.length) {\n nextIndex = 0;\n }\n this.changeActive(columns[nextIndex]);\n }\n\n /** @hidden */\n handlePreviousColumnFocus(column: FdTimeActiveView): void {\n const columns = this._getVisibleColumnsWithRtl();\n let nextIndex = columns.indexOf(column) - 1;\n if (nextIndex < 0) {\n nextIndex = columns.length - 1;\n }\n this.changeActive(columns[nextIndex]);\n }\n\n /** @hidden */\n handleKeyDownEvent(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n this.handlePreviousColumnFocus(this.activeView);\n event.preventDefault();\n this.focusActiveColumn();\n } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n this.handleNextColumnFocus(this.activeView);\n event.preventDefault();\n this.focusActiveColumn();\n }\n }\n\n /** @hidden */\n writeValue(time: D): void {\n if (!time || !this._dateTimeAdapter.isValid(time)) {\n time = this._getDefaultValue();\n }\n this.time = time;\n\n this._setUpActiveViewItems();\n\n this._changeDetectorRef.detectChanges();\n }\n\n /** @hidden */\n changeActive(view: FdTimeActiveView): void {\n this.activeView = view;\n this._changeDetectorRef.detectChanges();\n }\n\n /** @hidden */\n isActive(view: FdTimeActiveView): boolean {\n return this.activeView === view;\n }\n\n /** @hidden */\n focusActiveColumn(): void {\n const column = this.columns.find(({ active }) => active);\n column?.focus();\n }\n\n /** @hidden */\n private _focusOut(event: FocusEvent): void {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n\n /**\n * Get visible time columns\n * @returns visible columns list @see {FdTimeActiveView[]}\n */\n private _getVisibleColumns(): FdTimeActiveView[] {\n const allOptions: Array<[boolean, FdTimeActiveView]> = [\n [this.displayHours, 'hour'],\n [this.displayMinutes, 'minute'],\n [this.displaySeconds, 'second'],\n [this.meridian, 'meridian']\n ];\n return allOptions.filter(([enabled]) => enabled).map(([, view]) => view);\n }\n\n /**\n * Get visible columns taking into account RTL\n * @returns visible columns list @see {FdTimeActiveView[]}\n */\n private _getVisibleColumnsWithRtl(): FdTimeActiveView[] {\n const columns = this._getVisibleColumns();\n return this._rtlService?.rtl.value ? columns.reverse() : columns;\n }\n\n /** @hidden */\n private _setUpViewGrid(): void {\n this._constructHourViewItems();\n this._constructMinuteViewItems();\n this._constructSecondViewItems();\n this._constructMeridianViewItems();\n // update reference to active view items\n this._setUpActiveViewItems();\n }\n\n /** @hidden */\n private _setUpActiveViewItems(): void {\n this._calculateActiveHourViewItem();\n this._calculateActiveMinuteViewItem();\n this._calculateActiveSecondViewItem();\n this._calculateActiveMeridianViewItem();\n }\n\n /** @hidden */\n private _constructHourViewItems(): void {\n this.hourViewItems = this._dateTimeAdapter\n .getHourNames({ meridian: this.meridian, twoDigit: this.keepTwoDigits })\n .map((name, hour) => ({\n value: hour,\n label: name\n }));\n }\n\n /** @hidden */\n private _constructMinuteViewItems(): void {\n this.minuteViewItems = this._dateTimeAdapter\n .getMinuteNames({ twoDigit: this.keepTwoDigits })\n .map((name, minute) => ({\n value: minute,\n label: name\n }));\n }\n\n /** @hidden */\n private _constructSecondViewItems(): void {\n this.secondViewItems = this._dateTimeAdapter\n .getSecondNames({ twoDigit: this.keepTwoDigits })\n .map((name, second) => ({\n value: second,\n label: name\n }));\n }\n\n /** @hidden */\n private _constructMeridianViewItems(): void {\n const [amLabel, pmLabel] = this._dateTimeAdapter.getDayPeriodNames();\n this.meridianViewItems = [\n { value: Meridian.AM, label: amLabel },\n { value: Meridian.PM, label: pmLabel }\n ];\n }\n\n /** @hidden */\n private _calculateActiveHourViewItem(): void {\n const hour = this._getModelHour();\n this.activeHourViewItem = this.hourViewItems.find(({ value }) => value === hour);\n }\n\n /** @hidden */\n private _calculateActiveMinuteViewItem(): void {\n const minute = this._getModelMinute();\n this.activeMinuteViewItem = this.minuteViewItems.find(({ value }) => value === minute);\n }\n\n /** @hidden */\n private _calculateActiveSecondViewItem(): void {\n const second = this._getModelSecond();\n this.activeSecondViewItem = this.secondViewItems.find(({ value }) => value === second);\n }\n\n /** @hidden */\n private _calculateActiveMeridianViewItem(): void {\n const meridian = this._getDayPeriodByHour();\n this.activeMeridianViewItem = this.meridianViewItems.find(({ value }) => value === meridian);\n }\n\n /**\n * @hidden\n * Model hours (0 - 23)\n */\n private _getModelHour(): number {\n return this._dateTimeAdapter.getHours(this.time);\n }\n\n /**\n * @hidden\n * Model minutes (0 - 59)\n */\n private _getModelMinute(): number {\n return this._dateTimeAdapter.getMinutes(this.time);\n }\n\n /**\n * @hidden\n * Model seconds (0 - 59)\n */\n private _getModelSecond(): number {\n return this._dateTimeAdapter.getSeconds(this.time);\n }\n\n /**\n * @hidden\n * Get meridian period based on a given hours\n */\n private _getDayPeriodByHour(hour = this._getModelHour()): Meridian {\n return this._isPm(hour) ? Meridian.PM : Meridian.AM;\n }\n\n /** @hidden */\n private _isPm(hours: number = this._getModelHour()): boolean {\n return hours >= 12;\n }\n\n /**\n * @hidden\n * @returns default time 00:00:00\n */\n private _getDefaultValue(): D {\n return this._dateTimeAdapter.today();\n }\n}\n","<div\n class=\"fd-time\"\n [class.is-compact]=\"_contentDensityObserver.isCompact$ | async\"\n (keydown)=\"handleKeyDownEvent($event)\"\n [class.fd-time--tablet]=\"tablet\"\n [attr.aria-label]=\"'coreTime.componentAriaName' | fdTranslate\"\n>\n <fd-time-column\n [active]=\"isActive('hour')\"\n [rows]=\"hourViewItems\"\n [offset]=\"offset\"\n [elementsAtOnce]=\"elementsAtOnce\"\n [activeValue]=\"activeHourViewItem\"\n columnTranslationsPreset=\"hours\"\n [spinners]=\"spinnerButtons\"\n (activeValueChange)=\"handleHourChange($event.value.value)\"\n (activeStateChange)=\"changeActive('hour')\"\n ></fd-time-column>\n <fd-time-column\n *ngIf=\"displayMinutes\"\n [active]=\"isActive('minute')\"\n [rows]=\"minuteViewItems\"\n [offset]=\"offset\"\n [elementsAtOnce]=\"elementsAtOnce\"\n [activeValue]=\"activeMinuteViewItem\"\n columnTranslationsPreset=\"minutes\"\n [spinners]=\"spinnerButtons\"\n (activeValueChange)=\"handleMinuteChange($event.value.value)\"\n (activeStateChange)=\"changeActive('minute')\"\n ></fd-time-column>\n <fd-time-column\n *ngIf=\"displaySeconds\"\n [active]=\"isActive('second')\"\n [rows]=\"secondViewItems\"\n [offset]=\"offset\"\n [elementsAtOnce]=\"elementsAtOnce\"\n [activeValue]=\"activeSecondViewItem\"\n columnTranslationsPreset=\"seconds\"\n [spinners]=\"spinnerButtons\"\n (activeValueChange)=\"handleSecondChange($event.value.value)\"\n (activeStateChange)=\"changeActive('second')\"\n ></fd-time-column>\n <fd-time-column\n *ngIf=\"meridian\"\n [active]=\"isActive('meridian')\"\n [rows]=\"meridianViewItems\"\n [activeValue]=\"activeMeridianViewItem\"\n [offset]=\"0\"\n [elementsAtOnce]=\"elementsAtOnce\"\n columnTranslationsPreset=\"period\"\n [meridian]=\"true\"\n [spinners]=\"spinnerButtons\"\n (activeValueChange)=\"handleMeridianChange($event.value.value)\"\n (activeStateChange)=\"changeActive('meridian')\"\n ></fd-time-column>\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { TimeColumnComponent } from './time-column/time-column.component';\nimport { TimeComponent } from './time.component';\n\n/**\n * @deprecated\n * Use direct imports of `TimeComponent`, `TimeColumnComponent`\n */\n@NgModule({\n imports: [TimeComponent, TimeColumnComponent],\n exports: [TimeComponent, TimeColumnComponent]\n})\nexport class TimeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-time.mjs","sources":["../../../../libs/core/src/lib/time/time-column/time-column.component.ts","../../../../libs/core/src/lib/time/time-column/time-column.component.html","../../../../libs/core/src/lib/time/errors.ts","../../../../libs/core/src/lib/time/time.component.ts","../../../../libs/core/src/lib/time/time.component.html","../../../../libs/core/src/lib/time/time.module.ts","../../../../libs/core/src/lib/time/fundamental-ngx-core-time.ts"],"sourcesContent":["import { DOWN_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { BehaviorSubject, Subject, Subscription, combineLatest } from 'rxjs';\nimport { buffer, debounceTime, filter, map, tap } from 'rxjs/operators';\n\nimport { KeyUtil, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { CarouselConfig, CarouselDirective, CarouselItemDirective, PanEndOutput } from '@fundamental-ngx/core/carousel';\n\nimport { NgFor, NgIf } from '@angular/common';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SelectableViewItem } from '../models';\nimport { TimeColumnConfig } from './time-column-config';\n\nlet timeColumnUniqueId = 0;\n\nexport interface TimeColumnItemOutput<T> {\n value: T;\n after?: boolean;\n}\n\n@Component({\n selector: 'fd-time-column',\n templateUrl: './time-column.component.html',\n styleUrls: ['./time-column.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fd-time__col'\n },\n standalone: true,\n imports: [NgIf, ButtonComponent, CarouselDirective, NgFor, CarouselItemDirective, FdTranslatePipe]\n})\nexport class TimeColumnComponent<K, T extends SelectableViewItem<K> = SelectableViewItem<K>>\n implements AfterViewInit, OnInit, OnDestroy, OnChanges\n{\n /** items in row */\n @Input()\n rows: T[] = [];\n\n /**\n * @Input When set to false, hides the buttons that increment\n * and decrement the corresponding columns.\n */\n @Input()\n spinners = true;\n\n /** Currently chosen, centered time column item */\n @Input()\n set activeValue(activeItem: Nullable<T>) {\n if (!activeItem) {\n // omitting \"null\" and \"undefined\"\n return;\n }\n if (this._viewInit$.value && this._activeValue !== activeItem) {\n this._pickTime(this._getItem(activeItem), false);\n }\n this._activeValue = activeItem;\n }\n\n get activeValue(): Nullable<T> {\n return this._activeValue;\n }\n\n /** Defines if column is active, it has impact on behavior and visual */\n @Input()\n set active(value: boolean) {\n this._active = value;\n if (value && this._viewInit$.value) {\n this._changeDetRef.detectChanges();\n this._pickTime(this._getItem(this.activeValue), false);\n this._focusIndicator();\n }\n }\n\n get active(): boolean {\n return this._active;\n }\n\n /** Whether time column is meridian */\n @Input()\n @HostBinding('class.fd-time__col--period')\n meridian = false;\n\n /** Id of column, initiated with some default value */\n @Input()\n id: string = 'fd-time-column-' + timeColumnUniqueId++;\n\n /** I18n and labels */\n @Input()\n timeConfig: Nullable<TimeColumnConfig>;\n\n /** I18n and labels */\n @Input()\n columnTranslationsPreset: 'seconds' | 'minutes' | 'hours' | 'period';\n\n /**\n * Offset for carousel directive, active item is always the first one.\n * In case of having more items in carousel than 1, middle element should be active\n */\n @Input()\n set offset(value: number) {\n this._offset$.next(value);\n }\n get offset(): number {\n return this._offset$.value;\n }\n\n /**\n * Quantity of the elements to be shown at the same time in column\n */\n @Input()\n set elementsAtOnce(value: number) {\n this._elementsAtOnce$.next(value);\n }\n\n /** Event emitted, when active item is changed, by carousel */\n @Output()\n activeValueChange: EventEmitter<TimeColumnItemOutput<T>> = new EventEmitter<TimeColumnItemOutput<T>>();\n\n /** Event emitted, when certain column is activated */\n @Output()\n activeStateChange: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild(CarouselDirective)\n carousel: CarouselDirective;\n\n /** @hidden */\n @ViewChildren(CarouselItemDirective)\n items: QueryList<CarouselItemDirective>;\n\n /** @hidden */\n @ViewChild('indicator', { read: ElementRef })\n indicator: ElementRef;\n\n /** @hidden */\n wrapperHeight: number;\n\n /**\n * Time to wait in milliseconds after the last keydown before\n * focusing or selecting option based on numeric/alpha keys.\n * @hidden\n */\n typeaheadDebounceInterval = 750;\n\n /** @hidden */\n config: CarouselConfig;\n\n /** @hidden */\n internalTranslationConfig: TimeColumnConfig | null = null;\n\n /** @hidden */\n get currentIndicatorId(): string {\n return this.id + '-current-indicator';\n }\n\n /** @hidden */\n get currentIndicatorValueId(): string {\n return this.currentIndicatorId + '-value';\n }\n\n /** @hidden */\n private _elementsAtOnce$ = new BehaviorSubject(7);\n\n /** @hidden */\n private _offset$ = new BehaviorSubject(3);\n\n /** @hidden */\n private _active = false;\n\n /** @hidden */\n private _queryKeyDownEvent: Subject<string> = new Subject<string>();\n\n /** @hidden */\n private _activeValue: Nullable<T>;\n\n /** @hidden */\n private _activeCarouselItem: CarouselItemDirective;\n\n /** @hidden */\n private _isDragging = false;\n\n /** @hidden */\n private _viewInit$ = new BehaviorSubject<boolean>(false);\n\n /** @hidden */\n private _resize$ = new BehaviorSubject<boolean>(false);\n\n /** @hidden */\n private _subscriptions: Subscription = new Subscription();\n\n /** @hidden\n * logs numeric key inputs to set time using keyboard input.\n */\n private _keyLog: string[] = [];\n\n /** @hidden\n * Timeout variable used to set timeout for subsequent numeric key input to set time.\n */\n private _numericInputTimeout: ReturnType<typeof setTimeout>;\n\n /** @hidden */\n constructor(private _changeDetRef: ChangeDetectorRef, private _elmRef: ElementRef) {\n this._subscriptions.add(\n combineLatest([this._viewInit$, this._elementsAtOnce$, this._offset$, this._resize$])\n .pipe(\n filter(([viewInit]) => viewInit),\n tap(([, elementsAtOnce, offset]) => {\n const averageHeight =\n this.items.toArray().reduce((acc, next) => acc + next.getHeight(), 0) / this.items.length;\n this.wrapperHeight = averageHeight * elementsAtOnce;\n const visibleButNotSelectedElements = Math.floor(elementsAtOnce / 2);\n if (offset === 0) {\n this.items.first.element.style.marginTop = `${\n visibleButNotSelectedElements * averageHeight\n }px`;\n this.items.last.element.style.marginBottom = `${\n visibleButNotSelectedElements * averageHeight\n }px`;\n }\n\n if (this.activeValue) {\n this._pickTime(this._getItem(this.activeValue), false);\n }\n\n this._changeDetRef.detectChanges();\n })\n )\n .subscribe()\n );\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._subscriptions.add(this._elementsAtOnce$.pipe(tap(() => this._setUpCarouselConfiguration())).subscribe());\n this._setUpQuerySubscription();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._subscriptions.add(\n resizeObservable(this._elmRef.nativeElement).subscribe(() => {\n this._resize$.next(true);\n })\n );\n this._viewInit$.next(true);\n }\n\n /** @hidde */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.columnTranslationsPreset) {\n this._updateInternalTranslationConfig();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n @HostListener('click')\n onItemClick(): void {\n this.activeStateChange.emit();\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n keyDownHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n this.scrollDown();\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this.scrollUp();\n event.preventDefault();\n } else if (KeyUtil.isKeyType(event, 'numeric')) {\n this._numericKeyInputHandler(event);\n } else if (KeyUtil.isKeyType(event, 'alphabetical')) {\n this._alphaKeyInputHandler(event);\n }\n }\n\n /** @hidden */\n @HostListener('wheel', ['$event'])\n mouseScrollHandler(event: WheelEvent): void {\n event.preventDefault();\n if (this._active) {\n event.deltaY > 0 ? this.scrollDown() : this.scrollUp();\n }\n }\n\n /** @hidden */\n spinnerButtonKeyupHandle(event: KeyboardEvent, upButton?: boolean): void {\n if (KeyUtil.isKeyCode(event, SPACE)) {\n if (upButton) {\n this.scrollUp();\n } else {\n this.scrollDown();\n }\n\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /** @hidden */\n setValueOfActive(): void {\n if (this._active) {\n this._setUpInitialValue();\n }\n }\n\n /** It prevents from accidentally change the item by click event */\n handleDrag(isDragging: boolean): void {\n this._isDragging = isDragging;\n }\n\n /** Method that handles active item change */\n activeChangedHandle(output: PanEndOutput): void {\n const array = this.items.toArray();\n let index: number = array.findIndex((__item) => __item === output.item) + this.offset;\n\n if (index >= array.length) {\n index = index - array.length;\n }\n\n const _item = array[index];\n\n this._activeValue = _item.value;\n\n this.activeValueChange.emit({\n value: this._activeValue!,\n after: output.after\n });\n\n this._activeCarouselItem = _item;\n }\n\n /** Method that changes active item and triggers carousel scroll */\n pick(item: CarouselItemDirective, index: number): void {\n const currentIndex: number = this.items.toArray().findIndex((_item) => _item === this._activeCarouselItem);\n /** To prevent from switching time, when it's being dragged */\n if (!this._isDragging) {\n this._pickTime(item, true, true, currentIndex < index);\n }\n }\n\n /** Method triggered by keyboard, or increment button */\n scrollUp(event?: MouseEvent): void {\n /** Keyboard events in reactive forms, shouldn't trigger this method */\n if (event && !event.clientX) {\n return;\n }\n let index: number = this.items.toArray().findIndex((_item) => _item === this._activeCarouselItem);\n if (index > 0) {\n index--;\n } else {\n index = this.rows.length - 1;\n }\n\n this._pickTime(this.items.toArray()[index], true, true, false);\n }\n\n /** Method triggered by keyboard, or decrement button */\n scrollDown(): void {\n let index: number = this.items.toArray().findIndex((_item) => _item === this._activeCarouselItem);\n if (index < this.rows.length - 1) {\n index++;\n } else {\n index = 0;\n }\n\n this._pickTime(this.items.toArray()[index], true, true, true);\n }\n\n /** Focus on column */\n focus(): void {\n this.indicator?.nativeElement.focus();\n }\n\n /**\n * Create id for column item\n * @param index column item index\n * @returns column item id\n * @hidden\n */\n _createColumnItemIdByIndex(index: number): string {\n return this.id + index;\n }\n\n /**\n * On focus callback\n * @hidden\n */\n _onFocusIndicator(): void {\n this.activeStateChange.emit();\n }\n\n /** @hidden\n * handles alphabetical key inputs to set period.\n */\n private _alphaKeyInputHandler(event: KeyboardEvent): void {\n if (event.key.toLowerCase() === 'a') {\n this._pickTimeOnValue('AM');\n } else if (event.key.toLowerCase() === 'p') {\n this._pickTimeOnValue('PM');\n }\n }\n\n /** @hidden\n * handles numeric key inputs to set time.\n */\n private _numericKeyInputHandler(event: KeyboardEvent): void {\n const lastItemValue = this.items.last.value.value; // value of last item in column\n\n this._numericInputTimeout && clearTimeout(this._numericInputTimeout);\n this._keyLog.push(event.key);\n const inputValue = parseInt(this._keyLog.join(''), 10); // converts keyLog elements to a number\n\n if (inputValue * 10 > lastItemValue || this._keyLog.length === lastItemValue.toString().length) {\n this._pickTimeOnValue(inputValue);\n } else {\n this._numericInputTimeout = setTimeout(() => {\n this._pickTimeOnValue(inputValue);\n }, 500);\n }\n }\n\n /** @hidden\n * set the time for given item value. used by _numericKeyInputHandler.\n */\n private _pickTimeOnValue(value: string | number): void {\n this._pickTime(\n this.items.find((item) => item.value.value === value),\n false,\n true,\n false\n );\n this._keyLog = []; // clear key log\n }\n\n /**\n * Method triggered by keyboard, or decrement button\n * Args:\n * item => picked carousel item, that should be centered\n * smooth => defines if transition time should be included in transform\n * emitEvent => defines if EventEmitter should be triggered by this change, set to false, when changed from outside\n * after => Defines if value was incremented/decremented, needed for hours to trigger AM/PM change\n * @hidden\n */\n private _pickTime(item?: CarouselItemDirective, smooth?: boolean, emitEvent?: boolean, after?: boolean): void {\n if (!item) {\n return;\n }\n\n if (this.active) {\n this._triggerCarousel(item, smooth);\n }\n\n this._activeCarouselItem = item;\n this._activeValue = item.value;\n\n if (emitEvent) {\n this.activeValueChange.emit({\n value: item.value,\n after\n });\n }\n }\n\n /**\n * Returns item with passed value\n * @hidden\n */\n private _getItem(_item: Nullable<T>): CarouselItemDirective | undefined {\n return this.items.find((item) => item.value === _item);\n }\n\n /** @hidden */\n private _triggerCarousel(item: CarouselItemDirective, smooth?: boolean): void {\n const array = this.items.toArray();\n let index: number = array.findIndex((_item) => _item === item) - this.offset;\n\n if (index < 0) {\n index = array.length + index;\n }\n\n this.carousel.goToItem(array[index], smooth);\n }\n\n /**\n * Focus current indicator, which allows to handle keydown events inside column\n * @hidden\n */\n private _focusIndicator(): void {\n document.getElementById(this.currentIndicatorId)?.focus();\n }\n\n /** @hidden */\n private _getValue(value: string): any {\n if (!isNaN(Number(value))) {\n return Number(value);\n } else {\n return value;\n }\n }\n\n /** @hidden */\n private _setUpQuerySubscription(): void {\n const trigger = this._queryKeyDownEvent.pipe(debounceTime(this.typeaheadDebounceInterval));\n\n this._subscriptions.add(\n this._queryKeyDownEvent\n .pipe(\n buffer(trigger),\n map((keys) => keys.join('')),\n map((value) => this._getValue(value)),\n map((value) => this._getItem(value))\n )\n .subscribe((item) => this._pickTime(item, false, true))\n );\n }\n\n /** @hidden */\n private _setUpCarouselConfiguration(): void {\n const config: CarouselConfig = {\n gestureSupport: true,\n vertical: true,\n elementsAtOnce: this._elementsAtOnce$.value,\n transition: '150ms'\n };\n if (!this.meridian) {\n config.infinite = true;\n }\n this.config = config;\n }\n\n /** @hidden */\n private _setUpInitialValue(): void {\n if (!this._activeValue) {\n this._activeValue = this.items.first.value;\n }\n this._pickTime(this._getItem(this._activeValue), false);\n }\n\n /** @hidden */\n private _updateInternalTranslationConfig(): void {\n switch (this.columnTranslationsPreset) {\n case 'hours':\n this.internalTranslationConfig = {\n increaseLabel: 'coreTime.increaseHoursLabel',\n label: 'coreTime.hrsLabel',\n fullLabel: 'coreTime.hoursLabel',\n decreaseLabel: 'coreTime.decreaseHoursLabel',\n navigationInstruction: 'coreTime.navigationInstruction'\n };\n break;\n case 'minutes':\n this.internalTranslationConfig = {\n increaseLabel: 'coreTime.increaseMinutesLabel',\n label: 'coreTime.minLabel',\n fullLabel: 'coreTime.minutesLabel',\n decreaseLabel: 'coreTime.decreaseMinutesLabel',\n navigationInstruction: 'coreTime.navigationInstruction'\n };\n break;\n case 'seconds':\n this.internalTranslationConfig = {\n increaseLabel: 'coreTime.increaseSecondsLabel',\n label: 'coreTime.secLabel',\n fullLabel: 'coreTime.secondsLabel',\n decreaseLabel: 'coreTime.decreaseSecondsLabel',\n navigationInstruction: 'coreTime.navigationInstruction'\n };\n break;\n case 'period':\n this.internalTranslationConfig = {\n increaseLabel: 'coreTime.increasePeriodLabel',\n label: 'coreTime.periodLabel',\n fullLabel: 'coreTime.periodLabel',\n decreaseLabel: 'coreTime.decreasePeriodLabel',\n navigationInstruction: 'coreTime.navigationInstruction'\n };\n break;\n\n default:\n this.internalTranslationConfig = null;\n break;\n }\n this._changeDetRef.markForCheck();\n }\n}\n","<label class=\"fd-time__slider-label\">{{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate))\n}}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.decreaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n (click)=\"scrollUp($event)\"\n></button>\n<div\n class=\"fd-time__wrapper\"\n [class.fd-time__wrapper--active]=\"active\"\n [class.fd-time__wrapper--meridian]=\"meridian\"\n [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n <ul\n class=\"fd-time__list\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [config]=\"config\"\n (click)=\"indicator.focus()\"\n (activeChange)=\"activeChangedHandle($event)\"\n (dragStateChange)=\"handleDrag($event)\"\n fdCarousel\n >\n <li\n class=\"fd-time__item\"\n fdCarouselItem\n *ngFor=\"let row of rows; let index = index\"\n #item=\"fdCarouselItem\"\n [id]=\"_createColumnItemIdByIndex(index)\"\n [attr.data-displayed-value]=\"row.value\"\n [value]=\"row\"\n >\n <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n {{ row.label }}\n </span>\n </li>\n </ul>\n <div\n class=\"fd-time__current-indicator\"\n #indicator\n tabindex=\"0\"\n role=\"listbox\"\n [attr.id]=\"currentIndicatorId\"\n [class.fd-time-column-custom-hidden]=\"!active\"\n [attr.aria-labelledby]=\"currentIndicatorValueId\"\n [attr.aria-description]=\"\n timeConfig?.navigationInstruction ||\n (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate))\n \"\n (focus)=\"_onFocusIndicator()\"\n >\n <span\n class=\"fd-time-column-custom-hidden\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [attr.aria-hidden]=\"!active\"\n [attr.id]=\"currentIndicatorValueId\"\n [class.fd-time-column-custom-hidden]=\"active\"\n >\n {{ activeValue?.label }}\n {{\n timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.fullLabel | fdTranslate))\n }}\n </span>\n </div>\n <span *ngIf=\"!active\" class=\"fd-time__item fd-time__item--collapsed\">\n {{ activeValue?.label }}\n </span>\n</div>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-down-arrow\"\n tabindex=\"-1\"\n [title]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n [ariaLabel]=\"\n timeConfig?.increaseLabel ||\n (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate))\n \"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n","/** Creates an error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `FdTime: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`\n );\n}\n","import { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n SimpleChanges,\n ViewChildren,\n ViewEncapsulation,\n forwardRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { AsyncPipe, NgIf } from '@angular/common';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { createMissingDateImplementationError } from './errors';\nimport { Meridian, SelectableViewItem } from './models';\nimport { TimeColumnComponent } from './time-column/time-column.component';\n\nexport type FdTimeActiveView = 'hour' | 'minute' | 'second' | 'meridian';\n\ntype HourViewItem = SelectableViewItem<number>;\ntype MinuteViewItem = SelectableViewItem<number>;\ntype SecondViewItem = SelectableViewItem<number>;\ntype MeridianViewItem = SelectableViewItem<Meridian>;\n\n@Component({\n selector: 'fd-time',\n templateUrl: './time.component.html',\n styleUrls: ['./time.component.scss'],\n host: {\n '(focusout)': '_focusOut($event)',\n '(blur)': 'onTouched()'\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeComponent),\n multi: true\n },\n contentDensityObserverProviders()\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [TimeColumnComponent, NgIf, AsyncPipe, FdTranslatePipe]\n})\nexport class TimeComponent<D> implements OnInit, OnChanges, OnDestroy, AfterViewInit, ControlValueAccessor {\n /**\n * @Input When set to false, uses the 24 hour clock (hours ranging from 0 to 23)\n * and does not display a period control.\n */\n @Input()\n meridian = false;\n\n /**\n * @Input When set to false, does not set the input field to invalid state on invalid entry.\n */\n @Input()\n validate = true;\n\n /**\n * @Input when set to true, time inputs won't allow to have 1 digit\n * for example 9 will become 09\n * but 12 will be kept as 12.\n */\n @Input()\n keepTwoDigits = false;\n\n /**\n * @Input Disables the component.\n */\n @Input()\n disabled: boolean;\n\n /**\n * @Input When set to false, hides the input for seconds.\n */\n @Input()\n displaySeconds = true;\n\n /** @Input When set to false, hides the input for minutes. */\n @Input()\n displayMinutes = true;\n\n /**\n * When set to false, hides the input for hours\n */\n @Input()\n displayHours = true;\n\n /** @Input Defines if time component should be used in tablet mode */\n @Input()\n tablet = false;\n\n /** @Input Defines quantity of the elements, that are visible at the same time. Should be odd number */\n @Input()\n elementsAtOnce = 7;\n\n /**\n * @Input An object that contains datetime representation\n */\n @Input()\n time: D;\n\n /** @Input Whether to show spinner buttons */\n @Input()\n spinnerButtons = true;\n\n /** @hidden */\n @ViewChildren(TimeColumnComponent)\n columns: QueryList<TimeColumnComponent<unknown, SelectableViewItem<unknown>>>;\n\n /** Active column view to iterate with */\n activeView: FdTimeActiveView = 'hour';\n\n /** Offset */\n get offset(): number {\n return Math.floor(this.elementsAtOnce / 2);\n }\n\n /**\n * @hidden\n * container for [0 - 23] hours\n */\n hourViewItems: HourViewItem[] = [];\n /**\n * @hidden\n * reference to currently selected hourViewItems element\n */\n activeHourViewItem?: HourViewItem;\n\n /**\n * @hidden\n * container for [0 - 59] minutes\n */\n minuteViewItems: MinuteViewItem[] = [];\n /**\n * @hidden\n * reference to currently selected minuteViewItems element\n */\n activeMinuteViewItem?: MinuteViewItem;\n\n /**\n * @hidden\n * container for [0 - 59] seconds\n */\n secondViewItems: SecondViewItem[] = [];\n /**\n * @hidden\n * reference to currently selected secondViewItems element\n */\n activeSecondViewItem?: SecondViewItem;\n\n /**\n * @hidden\n * container for [am, pm] meridian values\n */\n meridianViewItems: MeridianViewItem[] = [];\n /**\n * @hidden\n * reference to currently selected meridianViewItems element\n */\n activeMeridianViewItem?: MeridianViewItem;\n\n /** @hidden */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _elementRef: ElementRef,\n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n @Optional() private _dateTimeAdapter: DatetimeAdapter<D>,\n readonly _contentDensityObserver: ContentDensityObserver,\n @Optional() private _rtlService: RtlService\n ) {\n if (!_dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n\n this.time = this._getDefaultValue();\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._dateTimeAdapter.localeChanges.pipe(takeUntil(this._onDestroy$)).subscribe(() => {\n this._setUpViewGrid();\n this._changeDetectorRef.detectChanges();\n });\n\n this._setUpViewGrid();\n }\n\n /** @hidden\n * Reacts only when there is meridian or time input change\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.meridian || changes.time) {\n this._setUpViewGrid();\n }\n if (changes.elementsAtOnce && changes.elementsAtOnce.currentValue % 2 === 0) {\n throw new Error('[elementsAtOnce] should be odd number');\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this.refreshColumns();\n }\n\n /** @hidden */\n onChange: (value: D) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** @hidden */\n registerOnChange(fn: (time: D) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.detectChanges();\n }\n\n /** @hidden */\n refreshColumns(): void {\n this.columns.forEach((column) => column.setValueOfActive());\n }\n\n /**\n * @hidden\n * Handles meridian change.\n * This implicitly changes hours by +/- 12\n */\n handleMeridianChange(meridian: Meridian): void {\n let hourOffset: number = meridian === Meridian.AM ? -12 : 12;\n let currentHour = this._getModelHour();\n\n if (currentHour > 12 && meridian === Meridian.PM) {\n currentHour -= 12;\n } else if (currentHour === 12) {\n currentHour = 0;\n } else if (currentHour < 12 && meridian === Meridian.AM) {\n hourOffset = 0;\n }\n\n const newHour = Math.max(0, Math.min(23, currentHour + hourOffset));\n\n this.handleHourChange(newHour);\n }\n\n /** @hidden */\n handleSecondChange(second: number): void {\n this.time = this._dateTimeAdapter.setSeconds(this.time, second);\n this._calculateActiveSecondViewItem();\n this.onChange(this.time);\n }\n\n /** @hidden */\n handleMinuteChange(minute: number): void {\n this.time = this._dateTimeAdapter.setMinutes(this.time, minute);\n this._calculateActiveMinuteViewItem();\n this.onChange(this.time);\n }\n\n /**\n * @hidden\n * Handles changes of displayed hour value from template.\n */\n handleHourChange(hour: number): void {\n this.time = this._dateTimeAdapter.setHours(this.time, hour);\n this._calculateActiveHourViewItem();\n\n if (this.meridian) {\n this._calculateActiveMeridianViewItem();\n }\n\n this.onChange(this.time);\n }\n\n /** @hidden */\n handleNextColumnFocus(column: FdTimeActiveView): void {\n const columns = this._getVisibleColumnsWithRtl();\n let nextIndex = columns.indexOf(column) + 1;\n if (nextIndex >= columns.length) {\n nextIndex = 0;\n }\n this.changeActive(columns[nextIndex]);\n }\n\n /** @hidden */\n handlePreviousColumnFocus(column: FdTimeActiveView): void {\n const columns = this._getVisibleColumnsWithRtl();\n let nextIndex = columns.indexOf(column) - 1;\n if (nextIndex < 0) {\n nextIndex = columns.length - 1;\n }\n this.changeActive(columns[nextIndex]);\n }\n\n /** @hidden */\n handleKeyDownEvent(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n this.handlePreviousColumnFocus(this.activeView);\n event.preventDefault();\n this.focusActiveColumn();\n } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n this.handleNextColumnFocus(this.activeView);\n event.preventDefault();\n this.focusActiveColumn();\n }\n }\n\n /** @hidden */\n writeValue(time: D): void {\n if (!time || !this._dateTimeAdapter.isValid(time)) {\n time = this._getDefaultValue();\n }\n this.time = time;\n\n this._setUpActiveViewItems();\n\n this._changeDetectorRef.detectChanges();\n }\n\n /** @hidden */\n changeActive(view: FdTimeActiveView): void {\n this.activeView = view;\n this._changeDetectorRef.detectChanges();\n }\n\n /** @hidden */\n isActive(view: FdTimeActiveView): boolean {\n return this.activeView === view;\n }\n\n /** @hidden */\n focusActiveColumn(): void {\n const column = this.columns.find(({ active }) => active);\n column?.focus();\n }\n\n /** @hidden */\n private _focusOut(event: FocusEvent): void {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n\n /**\n * Get visible time columns\n * @returns visible columns list @see {FdTimeActiveView[]}\n */\n private _getVisibleColumns(): FdTimeActiveView[] {\n const allOptions: Array<[boolean, FdTimeActiveView]> = [\n [this.displayHours, 'hour'],\n [this.displayMinutes, 'minute'],\n [this.displaySeconds, 'second'],\n [this.meridian, 'meridian']\n ];\n return allOptions.filter(([enabled]) => enabled).map(([, view]) => view);\n }\n\n /**\n * Get visible columns taking into account RTL\n * @returns visible columns list @see {FdTimeActiveView[]}\n */\n private _getVisibleColumnsWithRtl(): FdTimeActiveView[] {\n const columns = this._getVisibleColumns();\n return this._rtlService?.rtl.value ? columns.reverse() : columns;\n }\n\n /** @hidden */\n private _setUpViewGrid(): void {\n this._constructHourViewItems();\n this._constructMinuteViewItems();\n this._constructSecondViewItems();\n this._constructMeridianViewItems();\n // update reference to active view items\n this._setUpActiveViewItems();\n }\n\n /** @hidden */\n private _setUpActiveViewItems(): void {\n this._calculateActiveHourViewItem();\n this._calculateActiveMinuteViewItem();\n this._calculateActiveSecondViewItem();\n this._calculateActiveMeridianViewItem();\n }\n\n /** @hidden */\n private _constructHourViewItems(): void {\n this.hourViewItems = this._dateTimeAdapter\n .getHourNames({ meridian: this.meridian, twoDigit: this.keepTwoDigits })\n .map((name, hour) => ({\n value: hour,\n label: name\n }));\n }\n\n /** @hidden */\n private _constructMinuteViewItems(): void {\n this.minuteViewItems = this._dateTimeAdapter\n .getMinuteNames({ twoDigit: this.keepTwoDigits })\n .map((name, minute) => ({\n value: minute,\n label: name\n }));\n }\n\n /** @hidden */\n private _constructSecondViewItems(): void {\n this.secondViewItems = this._dateTimeAdapter\n .getSecondNames({ twoDigit: this.keepTwoDigits })\n .map((name, second) => ({\n value: second,\n label: name\n }));\n }\n\n /** @hidden */\n private _constructMeridianViewItems(): void {\n const [amLabel, pmLabel] = this._dateTimeAdapter.getDayPeriodNames();\n this.meridianViewItems = [\n { value: Meridian.AM, label: amLabel },\n { value: Meridian.PM, label: pmLabel }\n ];\n }\n\n /** @hidden */\n private _calculateActiveHourViewItem(): void {\n const hour = this._getModelHour();\n this.activeHourViewItem = this.hourViewItems.find(({ value }) => value === hour);\n }\n\n /** @hidden */\n private _calculateActiveMinuteViewItem(): void {\n const minute = this._getModelMinute();\n this.activeMinuteViewItem = this.minuteViewItems.find(({ value }) => value === minute);\n }\n\n /** @hidden */\n private _calculateActiveSecondViewItem(): void {\n const second = this._getModelSecond();\n this.activeSecondViewItem = this.secondViewItems.find(({ value }) => value === second);\n }\n\n /** @hidden */\n private _calculateActiveMeridianViewItem(): void {\n const meridian = this._getDayPeriodByHour();\n this.activeMeridianViewItem = this.meridianViewItems.find(({ value }) => value === meridian);\n }\n\n /**\n * @hidden\n * Model hours (0 - 23)\n */\n private _getModelHour(): number {\n return this._dateTimeAdapter.getHours(this.time);\n }\n\n /**\n * @hidden\n * Model minutes (0 - 59)\n */\n private _getModelMinute(): number {\n return this._dateTimeAdapter.getMinutes(this.time);\n }\n\n /**\n * @hidden\n * Model seconds (0 - 59)\n */\n private _getModelSecond(): number {\n return this._dateTimeAdapter.getSeconds(this.time);\n }\n\n /**\n * @hidden\n * Get meridian period based on a given hours\n */\n private _getDayPeriodByHour(hour = this._getModelHour()): Meridian {\n return this._isPm(hour) ? Meridian.PM : Meridian.AM;\n }\n\n /** @hidden */\n private _isPm(hours: number = this._getModelHour()): boolean {\n return hours >= 12;\n }\n\n /**\n * @hidden\n * @returns default time 00:00:00\n */\n private _getDefaultValue(): D {\n return this._dateTimeAdapter.today();\n }\n}\n","<div\n class=\"fd-time\"\n [class.is-compact]=\"_contentDensityObserver.isCompact$ | async\"\n (keydown)=\"handleKeyDownEvent($event)\"\n [class.fd-time--tablet]=\"tablet\"\n [attr.aria-label]=\"'coreTime.componentAriaName' | fdTranslate\"\n>\n <fd-time-column\n [active]=\"isActive('hour')\"\n [rows]=\"hourViewItems\"\n [offset]=\"offset\"\n [elementsAtOnce]=\"elementsAtOnce\"\n [activeValue]=\"activeHourViewItem\"\n columnTranslationsPreset=\"hours\"\n [spinners]=\"spinnerButtons\"\n (activeValueChange)=\"handleHourChange($event.value.value)\"\n (activeStateChange)=\"changeActive('hour')\"\n ></fd-time-column>\n <fd-time-column\n *ngIf=\"displayMinutes\"\n [active]=\"isActive('minute')\"\n [rows]=\"minuteViewItems\"\n [offset]=\"offset\"\n [elementsAtOnce]=\"elementsAtOnce\"\n [activeValue]=\"activeMinuteViewItem\"\n columnTranslationsPreset=\"minutes\"\n [spinners]=\"spinnerButtons\"\n (activeValueChange)=\"handleMinuteChange($event.value.value)\"\n (activeStateChange)=\"changeActive('minute')\"\n ></fd-time-column>\n <fd-time-column\n *ngIf=\"displaySeconds\"\n [active]=\"isActive('second')\"\n [rows]=\"secondViewItems\"\n [offset]=\"offset\"\n [elementsAtOnce]=\"elementsAtOnce\"\n [activeValue]=\"activeSecondViewItem\"\n columnTranslationsPreset=\"seconds\"\n [spinners]=\"spinnerButtons\"\n (activeValueChange)=\"handleSecondChange($event.value.value)\"\n (activeStateChange)=\"changeActive('second')\"\n ></fd-time-column>\n <fd-time-column\n *ngIf=\"meridian\"\n [active]=\"isActive('meridian')\"\n [rows]=\"meridianViewItems\"\n [activeValue]=\"activeMeridianViewItem\"\n [offset]=\"0\"\n [elementsAtOnce]=\"elementsAtOnce\"\n columnTranslationsPreset=\"period\"\n [meridian]=\"true\"\n [spinners]=\"spinnerButtons\"\n (activeValueChange)=\"handleMeridianChange($event.value.value)\"\n (activeStateChange)=\"changeActive('meridian')\"\n ></fd-time-column>\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { TimeColumnComponent } from './time-column/time-column.component';\nimport { TimeComponent } from './time.component';\n\n/**\n * @deprecated\n * Use direct imports of `TimeComponent`, `TimeColumnComponent`\n */\n@NgModule({\n imports: [TimeComponent, TimeColumnComponent],\n exports: [TimeComponent, TimeColumnComponent]\n})\nexport class TimeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core",
3
- "version": "0.46.0-rc.85",
3
+ "version": "0.46.0-rc.86",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "ng-update": {
6
6
  "migrations": "./schematics/migrations.json"
@@ -23,8 +23,8 @@
23
23
  "@angular/forms": "^16.2.0",
24
24
  "@angular/platform-browser": "^16.2.0",
25
25
  "@angular/router": "^16.2.0",
26
- "@fundamental-ngx/cdk": "0.46.0-rc.85",
27
- "@fundamental-ngx/i18n": "0.46.0-rc.85",
26
+ "@fundamental-ngx/cdk": "0.46.0-rc.86",
27
+ "@fundamental-ngx/i18n": "0.46.0-rc.86",
28
28
  "@sap-theming/theming-base-content": "^11.6.0",
29
29
  "fundamental-styles": "0.30.2-rc.37",
30
30
  "rxjs": "^7.8.0"
@@ -54,21 +54,21 @@ function addExternalLibraries(options) {
54
54
  });
55
55
  }
56
56
  if (!(0, package_utils_1.hasPackage)(tree, '@fundamental-ngx/i18n') ||
57
- (0, package_utils_1.checkPackageVersion)(tree, '@fundamental-ngx/i18n', '0.46.0-rc.85', '<')) {
57
+ (0, package_utils_1.checkPackageVersion)(tree, '@fundamental-ngx/i18n', '0.46.0-rc.86', '<')) {
58
58
  dependencies.push({
59
59
  type: dependencies_1.NodeDependencyType.Default,
60
60
  // Will be replaced with the real version during sync-version script run
61
- version: `0.46.0-rc.85`,
61
+ version: `0.46.0-rc.86`,
62
62
  name: '@fundamental-ngx/i18n',
63
63
  overwrite: true
64
64
  });
65
65
  }
66
66
  if (!(0, package_utils_1.hasPackage)(tree, '@fundamental-ngx/cdk') ||
67
- (0, package_utils_1.checkPackageVersion)(tree, '@fundamental-ngx/cdk', '0.46.0-rc.85', '<')) {
67
+ (0, package_utils_1.checkPackageVersion)(tree, '@fundamental-ngx/cdk', '0.46.0-rc.86', '<')) {
68
68
  dependencies.push({
69
69
  type: dependencies_1.NodeDependencyType.Default,
70
70
  // Will be replaced with the real version during sync-version script run
71
- version: `0.46.0-rc.85`,
71
+ version: `0.46.0-rc.86`,
72
72
  name: '@fundamental-ngx/cdk',
73
73
  overwrite: true
74
74
  });
@@ -3,5 +3,6 @@ export interface TimeColumnConfig {
3
3
  decreaseLabel: FdLanguageKeyIdentifier;
4
4
  increaseLabel: FdLanguageKeyIdentifier;
5
5
  label: FdLanguageKeyIdentifier;
6
+ fullLabel: FdLanguageKeyIdentifier;
6
7
  navigationInstruction: FdLanguageKeyIdentifier;
7
8
  }