@fundamental-ngx/core 0.35.5-rc.6 → 0.35.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/action-bar/package.json +1 -1
- package/action-sheet/package.json +1 -1
- package/alert/package.json +1 -1
- package/avatar/package.json +1 -1
- package/avatar-group/package.json +1 -1
- package/bar/package.json +1 -1
- package/breadcrumb/esm2020/breadcrumb.component.mjs +1 -1
- package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs +1 -1
- package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs +1 -1
- package/breadcrumb/package.json +1 -1
- package/busy-indicator/package.json +1 -1
- package/button/package.json +1 -1
- package/calendar/package.json +1 -1
- package/card/package.json +1 -1
- package/carousel/package.json +1 -1
- package/checkbox/package.json +1 -1
- package/combobox/package.json +1 -1
- package/content-density/package.json +4 -4
- package/date-picker/date-picker.component.d.ts +1 -10
- package/date-picker/date-picker.module.d.ts +2 -3
- package/date-picker/esm2020/date-picker.component.mjs +6 -30
- package/date-picker/esm2020/date-picker.module.mjs +1 -5
- package/date-picker/fesm2015/fundamental-ngx-core-date-picker.mjs +5 -33
- package/date-picker/fesm2015/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/date-picker/fesm2020/fundamental-ngx-core-date-picker.mjs +5 -33
- package/date-picker/fesm2020/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/date-picker/package.json +1 -1
- package/datetime/package.json +1 -1
- package/datetime-picker/package.json +1 -1
- package/dialog/package.json +1 -1
- package/dynamic-page/package.json +1 -1
- package/dynamic-side-content/package.json +1 -1
- package/esm2020/breadcrumb/breadcrumb.component.mjs +1 -1
- package/esm2020/date-picker/date-picker.component.mjs +6 -30
- package/esm2020/date-picker/date-picker.module.mjs +1 -5
- package/esm2020/menu/menu-item/menu-item.component.mjs +43 -7
- package/esm2020/menu/menu.component.mjs +37 -34
- package/esm2020/menu/services/menu.service.mjs +14 -13
- package/esm2020/shellbar/product-menu/product-menu.component.mjs +1 -1
- package/esm2020/shellbar/user-menu/shellbar-user-menu.component.mjs +1 -1
- package/esm2020/split-button/split-button.component.mjs +6 -6
- package/esm2020/tabs/tab-list.component.mjs +1 -1
- package/esm2020/time/time-column/time-column.component.mjs +2 -12
- package/esm2020/tree/tree-child.component.mjs +2 -2
- package/facets/package.json +1 -1
- package/feed-input/package.json +1 -1
- package/feed-list-item/package.json +1 -1
- package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +1 -1
- package/fesm2015/fundamental-ngx-core-date-picker.mjs +5 -33
- package/fesm2015/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-menu.mjs +90 -50
- package/fesm2015/fundamental-ngx-core-menu.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-shellbar.mjs +2 -2
- package/fesm2015/fundamental-ngx-core-split-button.mjs +5 -5
- package/fesm2015/fundamental-ngx-core-split-button.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-tabs.mjs +1 -1
- package/fesm2015/fundamental-ngx-core-time.mjs +1 -11
- package/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-tree.mjs +1 -1
- package/fesm2015/fundamental-ngx-core-tree.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +1 -1
- package/fesm2020/fundamental-ngx-core-date-picker.mjs +5 -33
- package/fesm2020/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-menu.mjs +90 -50
- package/fesm2020/fundamental-ngx-core-menu.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-shellbar.mjs +2 -2
- package/fesm2020/fundamental-ngx-core-split-button.mjs +5 -5
- package/fesm2020/fundamental-ngx-core-split-button.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-tabs.mjs +1 -1
- package/fesm2020/fundamental-ngx-core-time.mjs +1 -11
- package/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-tree.mjs +1 -1
- package/fesm2020/fundamental-ngx-core-tree.mjs.map +1 -1
- package/file-uploader/package.json +1 -1
- package/fixed-card-layout/package.json +1 -1
- package/flexible-column-layout/package.json +1 -1
- package/form/package.json +1 -1
- package/formatted-text/package.json +1 -1
- package/grid-list/package.json +1 -1
- package/icon/package.json +1 -1
- package/illustrated-message/package.json +1 -1
- package/infinite-scroll/package.json +1 -1
- package/info-label/package.json +1 -1
- package/inline-help/package.json +1 -1
- package/input-group/package.json +1 -1
- package/layout-grid/package.json +1 -1
- package/layout-panel/package.json +1 -1
- package/link/package.json +1 -1
- package/list/package.json +1 -1
- package/menu/esm2020/menu-item/menu-item.component.mjs +43 -7
- package/menu/esm2020/menu.component.mjs +37 -34
- package/menu/esm2020/services/menu.service.mjs +14 -13
- package/menu/fesm2015/fundamental-ngx-core-menu.mjs +90 -50
- package/menu/fesm2015/fundamental-ngx-core-menu.mjs.map +1 -1
- package/menu/fesm2020/fundamental-ngx-core-menu.mjs +90 -50
- package/menu/fesm2020/fundamental-ngx-core-menu.mjs.map +1 -1
- package/menu/menu-item/menu-item.component.d.ts +27 -7
- package/menu/menu.component.d.ts +10 -10
- package/menu/package.json +1 -1
- package/menu/services/menu.service.d.ts +3 -3
- package/message-box/package.json +1 -1
- package/message-strip/package.json +1 -1
- package/message-toast/package.json +1 -1
- package/micro-process-flow/package.json +1 -1
- package/mobile-mode/package.json +1 -1
- package/multi-input/package.json +1 -1
- package/nested-list/package.json +1 -1
- package/notification/package.json +1 -1
- package/object-identifier/package.json +1 -1
- package/object-marker/package.json +1 -1
- package/object-number/package.json +1 -1
- package/object-status/package.json +1 -1
- package/overflow-layout/package.json +14 -14
- package/package.json +2 -2
- package/pagination/package.json +1 -1
- package/panel/package.json +1 -1
- package/popover/package.json +1 -1
- package/product-switch/package.json +1 -1
- package/progress-indicator/package.json +1 -1
- package/quick-view/package.json +1 -1
- package/radio/package.json +1 -1
- package/rating-indicator/package.json +1 -1
- package/resizable-card-layout/package.json +1 -1
- package/scroll-spy/package.json +1 -1
- package/scrollbar/package.json +1 -1
- package/segmented-button/package.json +1 -1
- package/select/package.json +1 -1
- package/shared/package.json +1 -1
- package/shellbar/esm2020/product-menu/product-menu.component.mjs +1 -1
- package/shellbar/esm2020/user-menu/shellbar-user-menu.component.mjs +1 -1
- package/shellbar/fesm2015/fundamental-ngx-core-shellbar.mjs +2 -2
- package/shellbar/fesm2020/fundamental-ngx-core-shellbar.mjs +2 -2
- package/shellbar/package.json +1 -1
- package/side-navigation/package.json +1 -1
- package/slider/package.json +1 -1
- package/split-button/esm2020/split-button.component.mjs +6 -6
- package/split-button/fesm2015/fundamental-ngx-core-split-button.mjs +5 -5
- package/split-button/fesm2015/fundamental-ngx-core-split-button.mjs.map +1 -1
- package/split-button/fesm2020/fundamental-ngx-core-split-button.mjs +5 -5
- package/split-button/fesm2020/fundamental-ngx-core-split-button.mjs.map +1 -1
- package/split-button/package.json +1 -1
- package/splitter/package.json +1 -1
- package/status-indicator/package.json +1 -1
- package/step-input/package.json +1 -1
- package/switch/package.json +1 -1
- package/table/package.json +1 -1
- package/tabs/esm2020/tab-list.component.mjs +1 -1
- package/tabs/fesm2015/fundamental-ngx-core-tabs.mjs +1 -1
- package/tabs/fesm2020/fundamental-ngx-core-tabs.mjs +1 -1
- package/tabs/package.json +1 -1
- package/text/package.json +1 -1
- package/theming/package.json +1 -1
- package/tile/package.json +1 -1
- package/time/esm2020/time-column/time-column.component.mjs +2 -12
- package/time/fesm2015/fundamental-ngx-core-time.mjs +1 -11
- package/time/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
- package/time/fesm2020/fundamental-ngx-core-time.mjs +1 -11
- package/time/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
- package/time/package.json +1 -1
- package/time/time-column/time-column.component.d.ts +0 -2
- package/time-picker/package.json +1 -1
- package/timeline/package.json +1 -1
- package/title/package.json +1 -1
- package/token/package.json +1 -1
- package/toolbar/package.json +1 -1
- package/tree/esm2020/tree-child.component.mjs +2 -2
- package/tree/fesm2015/fundamental-ngx-core-tree.mjs +1 -1
- package/tree/fesm2015/fundamental-ngx-core-tree.mjs.map +1 -1
- package/tree/fesm2020/fundamental-ngx-core-tree.mjs +1 -1
- package/tree/fesm2020/fundamental-ngx-core-tree.mjs.map +1 -1
- package/tree/package.json +1 -1
- package/upload-collection/package.json +1 -1
- package/utils/package.json +2 -2
- package/vertical-navigation/package.json +1 -1
- package/wizard/package.json +1 -1
|
@@ -151,13 +151,6 @@ export class TimeColumnComponent {
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
/** @hidden */
|
|
154
|
-
mouseScrollHandler(event) {
|
|
155
|
-
event.preventDefault();
|
|
156
|
-
if (this._active) {
|
|
157
|
-
event.deltaY > 0 ? this.scrollDown() : this.scrollUp();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
/** @hidden */
|
|
161
154
|
spinnerButtonKeyupHandle(event, upButton) {
|
|
162
155
|
if (KeyUtil.isKeyCode(event, SPACE)) {
|
|
163
156
|
if (upButton) {
|
|
@@ -335,7 +328,7 @@ export class TimeColumnComponent {
|
|
|
335
328
|
}
|
|
336
329
|
}
|
|
337
330
|
TimeColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TimeColumnComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
338
|
-
TimeColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: TimeColumnComponent, selector: "fd-time-column", inputs: { rows: "rows", spinners: "spinners", activeValue: "activeValue", active: "active", meridian: "meridian", id: "id", timeConfig: "timeConfig", offset: "offset", elementsAtOnce: "elementsAtOnce" }, outputs: { activeValueChange: "activeValueChange", activeStateChange: "activeStateChange" }, host: { listeners: { "click": "onItemClick()", "keydown": "keyDownHandler($event)"
|
|
331
|
+
TimeColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: TimeColumnComponent, selector: "fd-time-column", inputs: { rows: "rows", spinners: "spinners", activeValue: "activeValue", active: "active", meridian: "meridian", id: "id", timeConfig: "timeConfig", offset: "offset", elementsAtOnce: "elementsAtOnce" }, outputs: { activeValueChange: "activeValueChange", activeStateChange: "activeStateChange" }, host: { listeners: { "click": "onItemClick()", "keydown": "keyDownHandler($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 }], ngImport: i0, template: "<label class=\"fd-time__slider-label\">{{ timeConfig?.label }}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"timeConfig?.decreaseLabel\"\n [ariaLabel]=\"timeConfig?.decreaseLabel\"\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]=\"timeConfig?.navigationInstruction\"\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 }} {{ timeConfig?.label }}\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]=\"timeConfig?.increaseLabel\"\n [ariaLabel]=\"timeConfig?.increaseLabel\"\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"], components: [{ type: i1.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CarouselDirective, selector: "[fdCarousel]", inputs: ["config", "active"], outputs: ["activeChange", "dragStateChange"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.CarouselItemDirective, selector: "[fd-carousel-item], [fdCarouselItem]", inputs: ["value", "initialHeight", "initialWidth", "id"], exportAs: ["fdCarouselItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
339
332
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TimeColumnComponent, decorators: [{
|
|
340
333
|
type: Component,
|
|
341
334
|
args: [{ selector: 'fd-time-column', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
@@ -381,8 +374,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
|
|
|
381
374
|
}], keyDownHandler: [{
|
|
382
375
|
type: HostListener,
|
|
383
376
|
args: ['keydown', ['$event']]
|
|
384
|
-
}], mouseScrollHandler: [{
|
|
385
|
-
type: HostListener,
|
|
386
|
-
args: ['wheel', ['$event']]
|
|
387
377
|
}] } });
|
|
388
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdGltZS90aW1lLWNvbHVtbi90aW1lLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90aW1lL3RpbWUtY29sdW1uL3RpbWUtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQWtCLGlCQUFpQixFQUFFLHFCQUFxQixFQUFnQixNQUFNLGdDQUFnQyxDQUFDOzs7OztBQUt4SCxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQWlCM0IsTUFBTSxPQUFPLG1CQUFtQjtJQXVKNUIsY0FBYztJQUNkLFlBQW9CLGFBQWdDLEVBQVUsT0FBbUI7UUFBN0Qsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQVUsWUFBTyxH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QkFWL0IsU0FBUzsrQkFDSSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDRixLQUFLLEVBQUUsY0FBYztxQkFDeEI7aUlBT0QsSUFBSTtzQkFESCxLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFLRixXQUFXO3NCQURkLEtBQUs7Z0JBa0JGLE1BQU07c0JBRFQsS0FBSztnQkFpQk4sUUFBUTtzQkFGUCxLQUFLOztzQkFDTCxXQUFXO3VCQUFDLDRCQUE0QjtnQkFLekMsRUFBRTtzQkFERCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFRRixNQUFNO3NCQURULEtBQUs7Z0JBYUYsY0FBYztzQkFEakIsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLE1BQU07Z0JBS1AsaUJBQWlCO3NCQURoQixNQUFNO2dCQUtQLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSzVCLEtBQUs7c0JBREosWUFBWTt1QkFBQyxxQkFBcUI7Z0JBS25DLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQTRHNUMsV0FBVztzQkFEVixZQUFZO3VCQUFDLE9BQU87Z0JBT3JCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZW5DLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBidWZmZXIsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERPV05fQVJST1csIFNQQUNFLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5cbmltcG9ydCB7IEtleVV0aWwsIHJlc2l6ZU9ic2VydmFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxDb25maWcsIENhcm91c2VsRGlyZWN0aXZlLCBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUsIFBhbkVuZE91dHB1dCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jYXJvdXNlbCc7XG5cbmltcG9ydCB7IFRpbWVDb2x1bW5Db25maWcgfSBmcm9tICcuL3RpbWUtY29sdW1uLWNvbmZpZyc7XG5pbXBvcnQgeyBTZWxlY3RhYmxlVmlld0l0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5sZXQgdGltZUNvbHVtblVuaXF1ZUlkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lQ29sdW1uSXRlbU91dHB1dDxUPiB7XG4gICAgdmFsdWU6IFQ7XG4gICAgYWZ0ZXI/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRpbWUtY29sdW1uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGltZS1jb2x1bW4uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RpbWUtY29sdW1uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtdGltZV9fY29sJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVGltZUNvbHVtbkNvbXBvbmVudDxLLCBUIGV4dGVuZHMgU2VsZWN0YWJsZVZpZXdJdGVtPEs+ID0gU2VsZWN0YWJsZVZpZXdJdGVtPEs+PlxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKiogaXRlbXMgaW4gcm93ICovXG4gICAgQElucHV0KClcbiAgICByb3dzOiBUW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBJbnB1dCBXaGVuIHNldCB0byBmYWxzZSwgaGlkZXMgdGhlIGJ1dHRvbnMgdGhhdCBpbmNyZW1lbnRcbiAgICAgKiBhbmQgZGVjcmVtZW50IHRoZSBjb3JyZXNwb25kaW5nIGNvbHVtbnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzcGlubmVycyA9IHRydWU7XG5cbiAgICAvKiogQ3VycmVudGx5IGNob3NlbiwgY2VudGVyZWQgdGltZSBjb2x1bW4gaXRlbSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGFjdGl2ZVZhbHVlKGFjdGl2ZUl0ZW06IFQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAvLyBvbWl0dGluZyBcIm51bGxcIiBhbmQgXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl92aWV3SW5pdCQudmFsdWUgJiYgdGhpcy5fYWN0aXZlVmFsdWUgIT09IGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0oYWN0aXZlSXRlbSksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hY3RpdmVWYWx1ZSA9IGFjdGl2ZUl0ZW07XG4gICAgfVxuXG4gICAgZ2V0IGFjdGl2ZVZhbHVlKCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIERlZmluZXMgaWYgY29sdW1uIGlzIGFjdGl2ZSwgaXQgaGFzIGltcGFjdCBvbiBiZWhhdmlvciBhbmQgdmlzdWFsICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHRoaXMuX3ZpZXdJbml0JC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0odGhpcy5hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5kaWNhdG9yKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRpbWUgY29sdW1uIGlzIG1lcmlkaWFuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRpbWVfX2NvbC0tcGVyaW9kJylcbiAgICBtZXJpZGlhbiA9IGZhbHNlO1xuXG4gICAgLyoqIElkIG9mIGNvbHVtbiwgaW5pdGlhdGVkIHdpdGggc29tZSBkZWZhdWx0IHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nID0gJ2ZkLXRpbWUtY29sdW1uLScgKyB0aW1lQ29sdW1uVW5pcXVlSWQrKztcblxuICAgIC8qKiBJMThuIGFuZCBsYWJlbHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpbWVDb25maWc6IFRpbWVDb2x1bW5Db25maWc7XG5cbiAgICAvKipcbiAgICAgKiBPZmZzZXQgZm9yIGNhcm91c2VsIGRpcmVjdGl2ZSwgYWN0aXZlIGl0ZW0gaXMgYWx3YXlzIHRoZSBmaXJzdCBvbmUuXG4gICAgICogSW4gY2FzZSBvZiBoYXZpbmcgbW9yZSBpdGVtcyBpbiBjYXJvdXNlbCB0aGFuIDEsIG1pZGRsZSBlbGVtZW50IHNob3VsZCBiZSBhY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBvZmZzZXQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29mZnNldCQudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IG9mZnNldCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX29mZnNldCQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVhbnRpdHkgb2YgdGhlIGVsZW1lbnRzIHRvIGJlIHNob3duIGF0IHRoZSBzYW1lIHRpbWUgaW4gY29sdW1uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZWxlbWVudHNBdE9uY2UodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9lbGVtZW50c0F0T25jZSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQsIHdoZW4gYWN0aXZlIGl0ZW0gaXMgY2hhbmdlZCwgYnkgY2Fyb3VzZWwgKi9cbiAgICBAT3V0cHV0KClcbiAgICBhY3RpdmVWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPFRpbWVDb2x1bW5JdGVtT3V0cHV0PFQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGltZUNvbHVtbkl0ZW1PdXRwdXQ8VD4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCwgd2hlbiBjZXJ0YWluIGNvbHVtbiBpcyBhY3RpdmF0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBhY3RpdmVTdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENhcm91c2VsRGlyZWN0aXZlKVxuICAgIGNhcm91c2VsOiBDYXJvdXNlbERpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihDYXJvdXNlbEl0ZW1EaXJlY3RpdmUpXG4gICAgaXRlbXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbEl0ZW1EaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdpbmRpY2F0b3InLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBpbmRpY2F0b3I6IEVsZW1lbnRSZWY7XG5cbiAgICB3cmFwcGVySGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IGtleWRvd24gYmVmb3JlXG4gICAgICogZm9jdXNpbmcgb3Igc2VsZWN0aW5nIG9wdGlvbiBiYXNlZCBvbiBudW1lcmljL2FscGhhIGtleXMuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwgPSA3NTA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbmZpZzogQ2Fyb3VzZWxDb25maWc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjdXJyZW50SW5kaWNhdG9ySWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnLWN1cnJlbnQtaW5kaWNhdG9yJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjdXJyZW50SW5kaWNhdG9yVmFsdWVJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kaWNhdG9ySWQgKyAnLXZhbHVlJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnRzQXRPbmNlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoNyk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29mZnNldCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDMpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hY3RpdmUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcXVlcnlLZXlEb3duRXZlbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWN0aXZlVmFsdWU6IFQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FjdGl2ZUNhcm91c2VsSXRlbTogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpZXdJbml0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgcHJpdmF0ZSBfcmVzaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5nZURldFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX2VsbVJlZjogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3ZpZXdJbml0JCwgdGhpcy5fZWxlbWVudHNBdE9uY2UkLCB0aGlzLl9vZmZzZXQkLCB0aGlzLl9yZXNpemUkXSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChbdmlld0luaXRdKSA9PiB2aWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoWywgZWxlbWVudHNBdE9uY2UsIG9mZnNldF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF2ZXJhZ2VIZWlnaHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMudG9BcnJheSgpLnJlZHVjZSgoYWNjLCBuZXh0KSA9PiBhY2MgKyBuZXh0LmdldEhlaWdodCgpLCAwKSAvIHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cmFwcGVySGVpZ2h0ID0gYXZlcmFnZUhlaWdodCAqIGVsZW1lbnRzQXRPbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZUJ1dE5vdFNlbGVjdGVkRWxlbWVudHMgPSBNYXRoLmZsb29yKGVsZW1lbnRzQXRPbmNlIC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maXJzdC5lbGVtZW50LnN0eWxlLm1hcmdpblRvcCA9IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQnV0Tm90U2VsZWN0ZWRFbGVtZW50cyAqIGF2ZXJhZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubGFzdC5lbGVtZW50LnN0eWxlLm1hcmdpbkJvdHRvbSA9IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQnV0Tm90U2VsZWN0ZWRFbGVtZW50cyAqIGF2ZXJhZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0odGhpcy5hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fZWxlbWVudHNBdE9uY2UkLnBpcGUodGFwKCgpID0+IHRoaXMuX3NldFVwQ2Fyb3VzZWxDb25maWd1cmF0aW9uKCkpKS5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuX3NldFVwUXVlcnlTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMuX2VsbVJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZSQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZpZXdJbml0JC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgICBvbkl0ZW1DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTdGF0ZUNoYW5nZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBrZXlEb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbERvd24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxVcCgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ251bWVyaWMnKSB8fCBLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ2FscGhhYmV0aWNhbCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9xdWVyeUtleURvd25FdmVudC5uZXh0KGV2ZW50LmtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3doZWVsJywgWyckZXZlbnQnXSlcbiAgICBtb3VzZVNjcm9sbEhhbmRsZXIoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgZXZlbnQuZGVsdGFZID4gMCA/IHRoaXMuc2Nyb2xsRG93bigpIDogdGhpcy5zY3JvbGxVcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzcGlubmVyQnV0dG9uS2V5dXBIYW5kbGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHVwQnV0dG9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgaWYgKHVwQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxVcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbERvd24oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXRWYWx1ZU9mQWN0aXZlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRVcEluaXRpYWxWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEl0IHByZXZlbnRzIGZyb20gYWNjaWRlbnRhbGx5IGNoYW5nZSB0aGUgaXRlbSBieSBjbGljayBldmVudCAqL1xuICAgIGhhbmRsZURyYWcoaXNEcmFnZ2luZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0RyYWdnaW5nID0gaXNEcmFnZ2luZztcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgaGFuZGxlcyBhY3RpdmUgaXRlbSBjaGFuZ2UgKi9cbiAgICBhY3RpdmVDaGFuZ2VkSGFuZGxlKG91dHB1dDogUGFuRW5kT3V0cHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gdGhpcy5pdGVtcy50b0FycmF5KCk7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gYXJyYXkuZmluZEluZGV4KChfX2l0ZW0pID0+IF9faXRlbSA9PT0gb3V0cHV0Lml0ZW0pICsgdGhpcy5vZmZzZXQ7XG5cbiAgICAgICAgaWYgKGluZGV4ID49IGFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleCAtIGFycmF5Lmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IF9pdGVtID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgICAgIHRoaXMuX2FjdGl2ZVZhbHVlID0gX2l0ZW0udmFsdWU7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9hY3RpdmVWYWx1ZSxcbiAgICAgICAgICAgIGFmdGVyOiBvdXRwdXQuYWZ0ZXJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlQ2Fyb3VzZWxJdGVtID0gX2l0ZW07XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IGNoYW5nZXMgYWN0aXZlIGl0ZW0gYW5kIHRyaWdnZXJzIGNhcm91c2VsIHNjcm9sbCAqL1xuICAgIHBpY2soaXRlbTogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleDogbnVtYmVyID0gdGhpcy5pdGVtcy50b0FycmF5KCkuZmluZEluZGV4KChfaXRlbSkgPT4gX2l0ZW0gPT09IHRoaXMuX2FjdGl2ZUNhcm91c2VsSXRlbSk7XG4gICAgICAgIC8qKiBUbyBwcmV2ZW50IGZyb20gc3dpdGNoaW5nIHRpbWUsIHdoZW4gaXQncyBiZWluZyBkcmFnZ2VkICovXG4gICAgICAgIGlmICghdGhpcy5faXNEcmFnZ2luZykge1xuICAgICAgICAgICAgdGhpcy5fcGlja1RpbWUoaXRlbSwgdHJ1ZSwgdHJ1ZSwgY3VycmVudEluZGV4IDwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyZWQgYnkga2V5Ym9hcmQsIG9yIGluY3JlbWVudCBidXR0b24gKi9cbiAgICBzY3JvbGxVcChldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLyoqIEtleWJvYXJkIGV2ZW50cyBpbiByZWFjdGl2ZSBmb3Jtcywgc2hvdWxkbid0IHRyaWdnZXIgdGhpcyBtZXRob2QgKi9cbiAgICAgICAgaWYgKGV2ZW50ICYmICFldmVudC5jbGllbnRYKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gdGhpcy5fYWN0aXZlQ2Fyb3VzZWxJdGVtKTtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5yb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9waWNrVGltZSh0aGlzLml0ZW1zLnRvQXJyYXkoKVtpbmRleF0sIHRydWUsIHRydWUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRyaWdnZXJlZCBieSBrZXlib2FyZCwgb3IgZGVjcmVtZW50IGJ1dHRvbiAqL1xuICAgIHNjcm9sbERvd24oKTogdm9pZCB7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5pdGVtcy50b0FycmF5KCkuZmluZEluZGV4KChfaXRlbSkgPT4gX2l0ZW0gPT09IHRoaXMuX2FjdGl2ZUNhcm91c2VsSXRlbSk7XG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMucm93cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGlja1RpbWUodGhpcy5pdGVtcy50b0FycmF5KClbaW5kZXhdLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXMgb24gY29sdW1uICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5kaWNhdG9yPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGlkIGZvciBjb2x1bW4gaXRlbVxuICAgICAqIEBwYXJhbSBpbmRleCBjb2x1bW4gaXRlbSBpbmRleFxuICAgICAqIEByZXR1cm5zIGNvbHVtbiBpdGVtIGlkXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF9jcmVhdGVDb2x1bW5JdGVtSWRCeUluZGV4KGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCArIGluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGZvY3VzIGNhbGxiYWNrXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF9vbkZvY3VzSW5kaWNhdG9yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVN0YXRlQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdHJpZ2dlcmVkIGJ5IGtleWJvYXJkLCBvciBkZWNyZW1lbnQgYnV0dG9uXG4gICAgICogQXJnczpcbiAgICAgKiBpdGVtID0+IHBpY2tlZCBjYXJvdXNlbCBpdGVtLCB0aGF0IHNob3VsZCBiZSBjZW50ZXJlZFxuICAgICAqIHNtb290aCA9PiBkZWZpbmVzIGlmIHRyYW5zaXRpb24gdGltZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdHJhbnNmb3JtXG4gICAgICogZW1pdEV2ZW50ID0+IGRlZmluZXMgaWYgRXZlbnRFbWl0dGVyIHNob3VsZCBiZSB0cmlnZ2VyZWQgYnkgdGhpcyBjaGFuZ2UsIHNldCB0byBmYWxzZSwgd2hlbiBjaGFuZ2VkIGZyb20gb3V0c2lkZVxuICAgICAqIGFmdGVyID0+IERlZmluZXMgaWYgdmFsdWUgd2FzIGluY3JlbWVudGVkL2RlY3JlbWVudGVkLCBuZWVkZWQgZm9yIGhvdXJzIHRvIHRyaWdnZXIgQU0vUE0gY2hhbmdlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX3BpY2tUaW1lKGl0ZW0/OiBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUsIHNtb290aD86IGJvb2xlYW4sIGVtaXRFdmVudD86IGJvb2xlYW4sIGFmdGVyPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlckNhcm91c2VsKGl0ZW0sIHNtb290aCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hY3RpdmVDYXJvdXNlbEl0ZW0gPSBpdGVtO1xuICAgICAgICB0aGlzLl9hY3RpdmVWYWx1ZSA9IGl0ZW0udmFsdWU7XG5cbiAgICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWYWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICBhZnRlclxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGl0ZW0gd2l0aCBwYXNzZWQgdmFsdWVcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0SXRlbShfaXRlbTogVCk6IENhcm91c2VsSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IF9pdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyaWdnZXJDYXJvdXNlbChpdGVtOiBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUsIHNtb290aD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJyYXkgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBhcnJheS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gaXRlbSkgLSB0aGlzLm9mZnNldDtcblxuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICBpbmRleCA9IGFycmF5Lmxlbmd0aCArIGluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYXJvdXNlbC5nb1RvSXRlbShhcnJheVtpbmRleF0sIHNtb290aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXMgY3VycmVudCBpbmRpY2F0b3IsIHdoaWNoIGFsbG93cyB0byBoYW5kbGUga2V5ZG93biBldmVudHMgaW5zaWRlIGNvbHVtblxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb2N1c0luZGljYXRvcigpOiB2b2lkIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jdXJyZW50SW5kaWNhdG9ySWQpPy5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmICghaXNOYU4oTnVtYmVyKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRVcFF1ZXJ5U3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy5fcXVlcnlLZXlEb3duRXZlbnQucGlwZShkZWJvdW5jZVRpbWUodGhpcy50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9xdWVyeUtleURvd25FdmVudFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBidWZmZXIodHJpZ2dlciksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoa2V5cykgPT4ga2V5cy5qb2luKCcnKSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgodmFsdWUpID0+IHRoaXMuX2dldFZhbHVlKHZhbHVlKSksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgodmFsdWUpID0+IHRoaXMuX2dldEl0ZW0odmFsdWUpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtKSA9PiB0aGlzLl9waWNrVGltZShpdGVtLCBmYWxzZSwgdHJ1ZSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRVcENhcm91c2VsQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlnOiBDYXJvdXNlbENvbmZpZyA9IHtcbiAgICAgICAgICAgIGdlc3R1cmVTdXBwb3J0OiB0cnVlLFxuICAgICAgICAgICAgdmVydGljYWw6IHRydWUsXG4gICAgICAgICAgICBlbGVtZW50c0F0T25jZTogdGhpcy5fZWxlbWVudHNBdE9uY2UkLnZhbHVlLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJzE1MG1zJ1xuICAgICAgICB9O1xuICAgICAgICBpZiAoIXRoaXMubWVyaWRpYW4pIHtcbiAgICAgICAgICAgIGNvbmZpZy5pbmZpbml0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRVcEluaXRpYWxWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmVWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlVmFsdWUgPSB0aGlzLml0ZW1zLmZpcnN0LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0odGhpcy5fYWN0aXZlVmFsdWUpLCBmYWxzZSk7XG4gICAgfVxufVxuIiwiPGxhYmVsIGNsYXNzPVwiZmQtdGltZV9fc2xpZGVyLWxhYmVsXCI+e3sgdGltZUNvbmZpZz8ubGFiZWwgfX08L2xhYmVsPlxuPGJ1dHRvblxuICAgICpuZ0lmPVwiYWN0aXZlICYmIHNwaW5uZXJzXCJcbiAgICBmZC1idXR0b25cbiAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLXVwLWFycm93XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBbdGl0bGVdPVwidGltZUNvbmZpZz8uZGVjcmVhc2VMYWJlbFwiXG4gICAgW2FyaWFMYWJlbF09XCJ0aW1lQ29uZmlnPy5kZWNyZWFzZUxhYmVsXCJcbiAgICAoa2V5dXApPVwic3Bpbm5lckJ1dHRvbktleXVwSGFuZGxlKCRldmVudCwgdHJ1ZSlcIlxuICAgIChjbGljayk9XCJzY3JvbGxVcCgkZXZlbnQpXCJcbj48L2J1dHRvbj5cbjxkaXZcbiAgICBjbGFzcz1cImZkLXRpbWVfX3dyYXBwZXJcIlxuICAgIFtjbGFzcy5mZC10aW1lX193cmFwcGVyLS1hY3RpdmVdPVwiYWN0aXZlXCJcbiAgICBbY2xhc3MuZmQtdGltZV9fd3JhcHBlci0tbWVyaWRpYW5dPVwibWVyaWRpYW5cIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiYWN0aXZlID8gd3JhcHBlckhlaWdodCA6ICcnXCJcbj5cbiAgICA8dWxcbiAgICAgICAgY2xhc3M9XCJmZC10aW1lX19saXN0XCJcbiAgICAgICAgW2NsYXNzLmZkLXRpbWUtY29sdW1uLWN1c3RvbS1oaWRkZW5dPVwiIWFjdGl2ZVwiXG4gICAgICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICAgICAgKGNsaWNrKT1cImluZGljYXRvci5mb2N1cygpXCJcbiAgICAgICAgKGFjdGl2ZUNoYW5nZSk9XCJhY3RpdmVDaGFuZ2VkSGFuZGxlKCRldmVudClcIlxuICAgICAgICAoZHJhZ1N0YXRlQ2hhbmdlKT1cImhhbmRsZURyYWcoJGV2ZW50KVwiXG4gICAgICAgIGZkQ2Fyb3VzZWxcbiAgICA+XG4gICAgICAgIDxsaVxuICAgICAgICAgICAgY2xhc3M9XCJmZC10aW1lX19pdGVtXCJcbiAgICAgICAgICAgIGZkQ2Fyb3VzZWxJdGVtXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3M7IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICNpdGVtPVwiZmRDYXJvdXNlbEl0ZW1cIlxuICAgICAgICAgICAgW2lkXT1cIl9jcmVhdGVDb2x1bW5JdGVtSWRCeUluZGV4KGluZGV4KVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRpc3BsYXllZC12YWx1ZV09XCJyb3cudmFsdWVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInJvd1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmQtdGltZV9fdW5pdFwiIHJvbGU9XCJidXR0b25cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInJvdy5sYWJlbFwiIChjbGljayk9XCJwaWNrKGl0ZW0sIGluZGV4KVwiPlxuICAgICAgICAgICAgICAgIHt7IHJvdy5sYWJlbCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgIDwvdWw+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZkLXRpbWVfX2N1cnJlbnQtaW5kaWNhdG9yXCJcbiAgICAgICAgI2luZGljYXRvclxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIFthdHRyLmlkXT1cImN1cnJlbnRJbmRpY2F0b3JJZFwiXG4gICAgICAgIFtjbGFzcy5mZC10aW1lLWNvbHVtbi1jdXN0b20taGlkZGVuXT1cIiFhY3RpdmVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiY3VycmVudEluZGljYXRvclZhbHVlSWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaXB0aW9uXT1cInRpbWVDb25maWc/Lm5hdmlnYXRpb25JbnN0cnVjdGlvblwiXG4gICAgICAgIChmb2N1cyk9XCJfb25Gb2N1c0luZGljYXRvcigpXCJcbiAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImZkLXRpbWUtY29sdW1uLWN1c3RvbS1oaWRkZW5cIlxuICAgICAgICAgICAgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCJcbiAgICAgICAgICAgIGFyaWEtYXRvbWljPVwidHJ1ZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhYWN0aXZlXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImN1cnJlbnRJbmRpY2F0b3JWYWx1ZUlkXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZC10aW1lLWNvbHVtbi1jdXN0b20taGlkZGVuXT1cImFjdGl2ZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IGFjdGl2ZVZhbHVlPy5sYWJlbCB9fSB7eyB0aW1lQ29uZmlnPy5sYWJlbCB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCIhYWN0aXZlXCIgY2xhc3M9XCJmZC10aW1lX19pdGVtIGZkLXRpbWVfX2l0ZW0tLWNvbGxhcHNlZFwiPlxuICAgICAgICB7eyBhY3RpdmVWYWx1ZT8ubGFiZWwgfX1cbiAgICA8L3NwYW4+XG48L2Rpdj5cbjxidXR0b25cbiAgICAqbmdJZj1cImFjdGl2ZSAmJiBzcGlubmVyc1wiXG4gICAgZmQtYnV0dG9uXG4gICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgIGdseXBoPVwibmF2aWdhdGlvbi1kb3duLWFycm93XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBbdGl0bGVdPVwidGltZUNvbmZpZz8uaW5jcmVhc2VMYWJlbFwiXG4gICAgW2FyaWFMYWJlbF09XCJ0aW1lQ29uZmlnPy5pbmNyZWFzZUxhYmVsXCJcbiAgICAoa2V5dXApPVwic3Bpbm5lckJ1dHRvbktleXVwSGFuZGxlKCRldmVudClcIlxuICAgIChjbGljayk9XCJzY3JvbGxEb3duKClcIlxuPjwvYnV0dG9uPlxuIl19
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdGltZS90aW1lLWNvbHVtbi90aW1lLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90aW1lL3RpbWUtY29sdW1uL3RpbWUtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQWtCLGlCQUFpQixFQUFFLHFCQUFxQixFQUFnQixNQUFNLGdDQUFnQyxDQUFDOzs7OztBQUt4SCxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQWlCM0IsTUFBTSxPQUFPLG1CQUFtQjtJQXVKNUIsY0FBYztJQUNkLFlBQW9CLGFBQWdDLEVBQVUsT0FBbUI7UUFBN0Qsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQVUsWUFBTyxH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OztzQkFDTCxXQUFXO3VCQUFDLDRCQUE0QjtnQkFLekMsRUFBRTtzQkFERCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFRRixNQUFNO3NCQURULEtBQUs7Z0JBYUYsY0FBYztzQkFEakIsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLE1BQU07Z0JBS1AsaUJBQWlCO3NCQURoQixNQUFNO2dCQUtQLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSzVCLEtBQUs7c0JBREosWUFBWTt1QkFBQyxxQkFBcUI7Z0JBS25DLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQTRHNUMsV0FBVztzQkFEVixZQUFZO3VCQUFDLE9BQU87Z0JBT3JCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBidWZmZXIsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERPV05fQVJST1csIFNQQUNFLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5cbmltcG9ydCB7IEtleVV0aWwsIHJlc2l6ZU9ic2VydmFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxDb25maWcsIENhcm91c2VsRGlyZWN0aXZlLCBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUsIFBhbkVuZE91dHB1dCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jYXJvdXNlbCc7XG5cbmltcG9ydCB7IFRpbWVDb2x1bW5Db25maWcgfSBmcm9tICcuL3RpbWUtY29sdW1uLWNvbmZpZyc7XG5pbXBvcnQgeyBTZWxlY3RhYmxlVmlld0l0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5sZXQgdGltZUNvbHVtblVuaXF1ZUlkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lQ29sdW1uSXRlbU91dHB1dDxUPiB7XG4gICAgdmFsdWU6IFQ7XG4gICAgYWZ0ZXI/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRpbWUtY29sdW1uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGltZS1jb2x1bW4uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RpbWUtY29sdW1uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtdGltZV9fY29sJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVGltZUNvbHVtbkNvbXBvbmVudDxLLCBUIGV4dGVuZHMgU2VsZWN0YWJsZVZpZXdJdGVtPEs+ID0gU2VsZWN0YWJsZVZpZXdJdGVtPEs+PlxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKiogaXRlbXMgaW4gcm93ICovXG4gICAgQElucHV0KClcbiAgICByb3dzOiBUW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBJbnB1dCBXaGVuIHNldCB0byBmYWxzZSwgaGlkZXMgdGhlIGJ1dHRvbnMgdGhhdCBpbmNyZW1lbnRcbiAgICAgKiBhbmQgZGVjcmVtZW50IHRoZSBjb3JyZXNwb25kaW5nIGNvbHVtbnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzcGlubmVycyA9IHRydWU7XG5cbiAgICAvKiogQ3VycmVudGx5IGNob3NlbiwgY2VudGVyZWQgdGltZSBjb2x1bW4gaXRlbSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGFjdGl2ZVZhbHVlKGFjdGl2ZUl0ZW06IFQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAvLyBvbWl0dGluZyBcIm51bGxcIiBhbmQgXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl92aWV3SW5pdCQudmFsdWUgJiYgdGhpcy5fYWN0aXZlVmFsdWUgIT09IGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0oYWN0aXZlSXRlbSksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hY3RpdmVWYWx1ZSA9IGFjdGl2ZUl0ZW07XG4gICAgfVxuXG4gICAgZ2V0IGFjdGl2ZVZhbHVlKCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIERlZmluZXMgaWYgY29sdW1uIGlzIGFjdGl2ZSwgaXQgaGFzIGltcGFjdCBvbiBiZWhhdmlvciBhbmQgdmlzdWFsICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHRoaXMuX3ZpZXdJbml0JC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0odGhpcy5hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5kaWNhdG9yKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRpbWUgY29sdW1uIGlzIG1lcmlkaWFuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRpbWVfX2NvbC0tcGVyaW9kJylcbiAgICBtZXJpZGlhbiA9IGZhbHNlO1xuXG4gICAgLyoqIElkIG9mIGNvbHVtbiwgaW5pdGlhdGVkIHdpdGggc29tZSBkZWZhdWx0IHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nID0gJ2ZkLXRpbWUtY29sdW1uLScgKyB0aW1lQ29sdW1uVW5pcXVlSWQrKztcblxuICAgIC8qKiBJMThuIGFuZCBsYWJlbHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpbWVDb25maWc6IFRpbWVDb2x1bW5Db25maWc7XG5cbiAgICAvKipcbiAgICAgKiBPZmZzZXQgZm9yIGNhcm91c2VsIGRpcmVjdGl2ZSwgYWN0aXZlIGl0ZW0gaXMgYWx3YXlzIHRoZSBmaXJzdCBvbmUuXG4gICAgICogSW4gY2FzZSBvZiBoYXZpbmcgbW9yZSBpdGVtcyBpbiBjYXJvdXNlbCB0aGFuIDEsIG1pZGRsZSBlbGVtZW50IHNob3VsZCBiZSBhY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBvZmZzZXQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29mZnNldCQudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IG9mZnNldCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX29mZnNldCQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVhbnRpdHkgb2YgdGhlIGVsZW1lbnRzIHRvIGJlIHNob3duIGF0IHRoZSBzYW1lIHRpbWUgaW4gY29sdW1uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZWxlbWVudHNBdE9uY2UodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9lbGVtZW50c0F0T25jZSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQsIHdoZW4gYWN0aXZlIGl0ZW0gaXMgY2hhbmdlZCwgYnkgY2Fyb3VzZWwgKi9cbiAgICBAT3V0cHV0KClcbiAgICBhY3RpdmVWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPFRpbWVDb2x1bW5JdGVtT3V0cHV0PFQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGltZUNvbHVtbkl0ZW1PdXRwdXQ8VD4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCwgd2hlbiBjZXJ0YWluIGNvbHVtbiBpcyBhY3RpdmF0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBhY3RpdmVTdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENhcm91c2VsRGlyZWN0aXZlKVxuICAgIGNhcm91c2VsOiBDYXJvdXNlbERpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihDYXJvdXNlbEl0ZW1EaXJlY3RpdmUpXG4gICAgaXRlbXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbEl0ZW1EaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdpbmRpY2F0b3InLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBpbmRpY2F0b3I6IEVsZW1lbnRSZWY7XG5cbiAgICB3cmFwcGVySGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IGtleWRvd24gYmVmb3JlXG4gICAgICogZm9jdXNpbmcgb3Igc2VsZWN0aW5nIG9wdGlvbiBiYXNlZCBvbiBudW1lcmljL2FscGhhIGtleXMuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwgPSA3NTA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbmZpZzogQ2Fyb3VzZWxDb25maWc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjdXJyZW50SW5kaWNhdG9ySWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnLWN1cnJlbnQtaW5kaWNhdG9yJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjdXJyZW50SW5kaWNhdG9yVmFsdWVJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kaWNhdG9ySWQgKyAnLXZhbHVlJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnRzQXRPbmNlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoNyk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29mZnNldCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDMpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hY3RpdmUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcXVlcnlLZXlEb3duRXZlbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWN0aXZlVmFsdWU6IFQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FjdGl2ZUNhcm91c2VsSXRlbTogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpZXdJbml0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgcHJpdmF0ZSBfcmVzaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5nZURldFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgX2VsbVJlZjogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX3ZpZXdJbml0JCwgdGhpcy5fZWxlbWVudHNBdE9uY2UkLCB0aGlzLl9vZmZzZXQkLCB0aGlzLl9yZXNpemUkXSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChbdmlld0luaXRdKSA9PiB2aWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoWywgZWxlbWVudHNBdE9uY2UsIG9mZnNldF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF2ZXJhZ2VIZWlnaHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMudG9BcnJheSgpLnJlZHVjZSgoYWNjLCBuZXh0KSA9PiBhY2MgKyBuZXh0LmdldEhlaWdodCgpLCAwKSAvIHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cmFwcGVySGVpZ2h0ID0gYXZlcmFnZUhlaWdodCAqIGVsZW1lbnRzQXRPbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZUJ1dE5vdFNlbGVjdGVkRWxlbWVudHMgPSBNYXRoLmZsb29yKGVsZW1lbnRzQXRPbmNlIC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maXJzdC5lbGVtZW50LnN0eWxlLm1hcmdpblRvcCA9IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQnV0Tm90U2VsZWN0ZWRFbGVtZW50cyAqIGF2ZXJhZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubGFzdC5lbGVtZW50LnN0eWxlLm1hcmdpbkJvdHRvbSA9IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQnV0Tm90U2VsZWN0ZWRFbGVtZW50cyAqIGF2ZXJhZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuX2dldEl0ZW0odGhpcy5hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fZWxlbWVudHNBdE9uY2UkLnBpcGUodGFwKCgpID0+IHRoaXMuX3NldFVwQ2Fyb3VzZWxDb25maWd1cmF0aW9uKCkpKS5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuX3NldFVwUXVlcnlTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMuX2VsbVJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZSQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3ZpZXdJbml0JC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgICBvbkl0ZW1DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTdGF0ZUNoYW5nZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBrZXlEb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbERvd24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxVcCgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ251bWVyaWMnKSB8fCBLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ2FscGhhYmV0aWNhbCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9xdWVyeUtleURvd25FdmVudC5uZXh0KGV2ZW50LmtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNwaW5uZXJCdXR0b25LZXl1cEhhbmRsZShldmVudDogS2V5Ym9hcmRFdmVudCwgdXBCdXR0b24/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpKSB7XG4gICAgICAgICAgICBpZiAodXBCdXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFVwKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsRG93bigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldFZhbHVlT2ZBY3RpdmUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFVwSW5pdGlhbFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSXQgcHJldmVudHMgZnJvbSBhY2NpZGVudGFsbHkgY2hhbmdlIHRoZSBpdGVtIGJ5IGNsaWNrIGV2ZW50ICovXG4gICAgaGFuZGxlRHJhZyhpc0RyYWdnaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzRHJhZ2dpbmcgPSBpc0RyYWdnaW5nO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBoYW5kbGVzIGFjdGl2ZSBpdGVtIGNoYW5nZSAqL1xuICAgIGFjdGl2ZUNoYW5nZWRIYW5kbGUob3V0cHV0OiBQYW5FbmRPdXRwdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJyYXkgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBhcnJheS5maW5kSW5kZXgoKF9faXRlbSkgPT4gX19pdGVtID09PSBvdXRwdXQuaXRlbSkgKyB0aGlzLm9mZnNldDtcblxuICAgICAgICBpZiAoaW5kZXggPj0gYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbmRleCA9IGluZGV4IC0gYXJyYXkubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgX2l0ZW0gPSBhcnJheVtpbmRleF07XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlVmFsdWUgPSBfaXRlbS52YWx1ZTtcblxuICAgICAgICB0aGlzLmFjdGl2ZVZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2FjdGl2ZVZhbHVlLFxuICAgICAgICAgICAgYWZ0ZXI6IG91dHB1dC5hZnRlclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9hY3RpdmVDYXJvdXNlbEl0ZW0gPSBfaXRlbTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgY2hhbmdlcyBhY3RpdmUgaXRlbSBhbmQgdHJpZ2dlcnMgY2Fyb3VzZWwgc2Nyb2xsICovXG4gICAgcGljayhpdGVtOiBDYXJvdXNlbEl0ZW1EaXJlY3RpdmUsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4OiBudW1iZXIgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gdGhpcy5fYWN0aXZlQ2Fyb3VzZWxJdGVtKTtcbiAgICAgICAgLyoqIFRvIHByZXZlbnQgZnJvbSBzd2l0Y2hpbmcgdGltZSwgd2hlbiBpdCdzIGJlaW5nIGRyYWdnZWQgKi9cbiAgICAgICAgaWYgKCF0aGlzLl9pc0RyYWdnaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9waWNrVGltZShpdGVtLCB0cnVlLCB0cnVlLCBjdXJyZW50SW5kZXggPCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRyaWdnZXJlZCBieSBrZXlib2FyZCwgb3IgaW5jcmVtZW50IGJ1dHRvbiAqL1xuICAgIHNjcm9sbFVwKGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICAvKiogS2V5Ym9hcmQgZXZlbnRzIGluIHJlYWN0aXZlIGZvcm1zLCBzaG91bGRuJ3QgdHJpZ2dlciB0aGlzIG1ldGhvZCAqL1xuICAgICAgICBpZiAoZXZlbnQgJiYgIWV2ZW50LmNsaWVudFgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuaXRlbXMudG9BcnJheSgpLmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtID09PSB0aGlzLl9hY3RpdmVDYXJvdXNlbEl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICBpbmRleC0tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLnJvd3MubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BpY2tUaW1lKHRoaXMuaXRlbXMudG9BcnJheSgpW2luZGV4XSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdHJpZ2dlcmVkIGJ5IGtleWJvYXJkLCBvciBkZWNyZW1lbnQgYnV0dG9uICovXG4gICAgc2Nyb2xsRG93bigpOiB2b2lkIHtcbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gdGhpcy5fYWN0aXZlQ2Fyb3VzZWxJdGVtKTtcbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5yb3dzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9waWNrVGltZSh0aGlzLml0ZW1zLnRvQXJyYXkoKVtpbmRleF0sIHRydWUsIHRydWUsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBGb2N1cyBvbiBjb2x1bW4gKi9cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0b3I/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgaWQgZm9yIGNvbHVtbiBpdGVtXG4gICAgICogQHBhcmFtIGluZGV4IGNvbHVtbiBpdGVtIGluZGV4XG4gICAgICogQHJldHVybnMgY29sdW1uIGl0ZW0gaWRcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX2NyZWF0ZUNvbHVtbkl0ZW1JZEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gZm9jdXMgY2FsbGJhY2tcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX29uRm9jdXNJbmRpY2F0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlU3RhdGVDaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0cmlnZ2VyZWQgYnkga2V5Ym9hcmQsIG9yIGRlY3JlbWVudCBidXR0b25cbiAgICAgKiBBcmdzOlxuICAgICAqIGl0ZW0gPT4gcGlja2VkIGNhcm91c2VsIGl0ZW0sIHRoYXQgc2hvdWxkIGJlIGNlbnRlcmVkXG4gICAgICogc21vb3RoID0+IGRlZmluZXMgaWYgdHJhbnNpdGlvbiB0aW1lIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0cmFuc2Zvcm1cbiAgICAgKiBlbWl0RXZlbnQgPT4gZGVmaW5lcyBpZiBFdmVudEVtaXR0ZXIgc2hvdWxkIGJlIHRyaWdnZXJlZCBieSB0aGlzIGNoYW5nZSwgc2V0IHRvIGZhbHNlLCB3aGVuIGNoYW5nZWQgZnJvbSBvdXRzaWRlXG4gICAgICogYWZ0ZXIgPT4gRGVmaW5lcyBpZiB2YWx1ZSB3YXMgaW5jcmVtZW50ZWQvZGVjcmVtZW50ZWQsIG5lZWRlZCBmb3IgaG91cnMgdG8gdHJpZ2dlciBBTS9QTSBjaGFuZ2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcGlja1RpbWUoaXRlbT86IENhcm91c2VsSXRlbURpcmVjdGl2ZSwgc21vb3RoPzogYm9vbGVhbiwgZW1pdEV2ZW50PzogYm9vbGVhbiwgYWZ0ZXI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyQ2Fyb3VzZWwoaXRlbSwgc21vb3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FjdGl2ZUNhcm91c2VsSXRlbSA9IGl0ZW07XG4gICAgICAgIHRoaXMuX2FjdGl2ZVZhbHVlID0gaXRlbS52YWx1ZTtcblxuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgIGFmdGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaXRlbSB3aXRoIHBhc3NlZCB2YWx1ZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRJdGVtKF9pdGVtOiBUKTogQ2Fyb3VzZWxJdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gX2l0ZW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJpZ2dlckNhcm91c2VsKGl0ZW06IENhcm91c2VsSXRlbURpcmVjdGl2ZSwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuaXRlbXMudG9BcnJheSgpO1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IGFycmF5LmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtID09PSBpdGVtKSAtIHRoaXMub2Zmc2V0O1xuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIGluZGV4ID0gYXJyYXkubGVuZ3RoICsgaW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhcm91c2VsLmdvVG9JdGVtKGFycmF5W2luZGV4XSwgc21vb3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1cyBjdXJyZW50IGluZGljYXRvciwgd2hpY2ggYWxsb3dzIHRvIGhhbmRsZSBrZXlkb3duIGV2ZW50cyBpbnNpZGUgY29sdW1uXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZvY3VzSW5kaWNhdG9yKCk6IHZvaWQge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmN1cnJlbnRJbmRpY2F0b3JJZCk/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKCFpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwUXVlcnlTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLl9xdWVyeUtleURvd25FdmVudC5waXBlKGRlYm91bmNlVGltZSh0aGlzLnR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5S2V5RG93bkV2ZW50XG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcih0cmlnZ2VyKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKChrZXlzKSA9PiBrZXlzLmpvaW4oJycpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy5fZ2V0VmFsdWUodmFsdWUpKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy5fZ2V0SXRlbSh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHRoaXMuX3BpY2tUaW1lKGl0ZW0sIGZhbHNlLCB0cnVlKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwQ2Fyb3VzZWxDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWc6IENhcm91c2VsQ29uZmlnID0ge1xuICAgICAgICAgICAgZ2VzdHVyZVN1cHBvcnQ6IHRydWUsXG4gICAgICAgICAgICB2ZXJ0aWNhbDogdHJ1ZSxcbiAgICAgICAgICAgIGVsZW1lbnRzQXRPbmNlOiB0aGlzLl9lbGVtZW50c0F0T25jZSQudmFsdWUsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnMTUwbXMnXG4gICAgICAgIH07XG4gICAgICAgIGlmICghdGhpcy5tZXJpZGlhbikge1xuICAgICAgICAgICAgY29uZmlnLmluZmluaXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwSW5pdGlhbFZhbHVlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVWYWx1ZSA9IHRoaXMuaXRlbXMuZmlyc3QudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGlja1RpbWUodGhpcy5fZ2V0SXRlbSh0aGlzLl9hY3RpdmVWYWx1ZSksIGZhbHNlKTtcbiAgICB9XG59XG4iLCI8bGFiZWwgY2xhc3M9XCJmZC10aW1lX19zbGlkZXItbGFiZWxcIj57eyB0aW1lQ29uZmlnPy5sYWJlbCB9fTwvbGFiZWw+XG48YnV0dG9uXG4gICAgKm5nSWY9XCJhY3RpdmUgJiYgc3Bpbm5lcnNcIlxuICAgIGZkLWJ1dHRvblxuICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICBnbHlwaD1cIm5hdmlnYXRpb24tdXAtYXJyb3dcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIFt0aXRsZV09XCJ0aW1lQ29uZmlnPy5kZWNyZWFzZUxhYmVsXCJcbiAgICBbYXJpYUxhYmVsXT1cInRpbWVDb25maWc/LmRlY3JlYXNlTGFiZWxcIlxuICAgIChrZXl1cCk9XCJzcGlubmVyQnV0dG9uS2V5dXBIYW5kbGUoJGV2ZW50LCB0cnVlKVwiXG4gICAgKGNsaWNrKT1cInNjcm9sbFVwKCRldmVudClcIlxuPjwvYnV0dG9uPlxuPGRpdlxuICAgIGNsYXNzPVwiZmQtdGltZV9fd3JhcHBlclwiXG4gICAgW2NsYXNzLmZkLXRpbWVfX3dyYXBwZXItLWFjdGl2ZV09XCJhY3RpdmVcIlxuICAgIFtjbGFzcy5mZC10aW1lX193cmFwcGVyLS1tZXJpZGlhbl09XCJtZXJpZGlhblwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJhY3RpdmUgPyB3cmFwcGVySGVpZ2h0IDogJydcIlxuPlxuICAgIDx1bFxuICAgICAgICBjbGFzcz1cImZkLXRpbWVfX2xpc3RcIlxuICAgICAgICBbY2xhc3MuZmQtdGltZS1jb2x1bW4tY3VzdG9tLWhpZGRlbl09XCIhYWN0aXZlXCJcbiAgICAgICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICAgICAoY2xpY2spPVwiaW5kaWNhdG9yLmZvY3VzKClcIlxuICAgICAgICAoYWN0aXZlQ2hhbmdlKT1cImFjdGl2ZUNoYW5nZWRIYW5kbGUoJGV2ZW50KVwiXG4gICAgICAgIChkcmFnU3RhdGVDaGFuZ2UpPVwiaGFuZGxlRHJhZygkZXZlbnQpXCJcbiAgICAgICAgZmRDYXJvdXNlbFxuICAgID5cbiAgICAgICAgPGxpXG4gICAgICAgICAgICBjbGFzcz1cImZkLXRpbWVfX2l0ZW1cIlxuICAgICAgICAgICAgZmRDYXJvdXNlbEl0ZW1cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgI2l0ZW09XCJmZENhcm91c2VsSXRlbVwiXG4gICAgICAgICAgICBbaWRdPVwiX2NyZWF0ZUNvbHVtbkl0ZW1JZEJ5SW5kZXgoaW5kZXgpXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZGlzcGxheWVkLXZhbHVlXT1cInJvdy52YWx1ZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwicm93XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmZC10aW1lX191bml0XCIgcm9sZT1cImJ1dHRvblwiIFthdHRyLmFyaWEtbGFiZWxdPVwicm93LmxhYmVsXCIgKGNsaWNrKT1cInBpY2soaXRlbSwgaW5kZXgpXCI+XG4gICAgICAgICAgICAgICAge3sgcm93LmxhYmVsIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtdGltZV9fY3VycmVudC1pbmRpY2F0b3JcIlxuICAgICAgICAjaW5kaWNhdG9yXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgW2F0dHIuaWRdPVwiY3VycmVudEluZGljYXRvcklkXCJcbiAgICAgICAgW2NsYXNzLmZkLXRpbWUtY29sdW1uLWN1c3RvbS1oaWRkZW5dPVwiIWFjdGl2ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJjdXJyZW50SW5kaWNhdG9yVmFsdWVJZFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpcHRpb25dPVwidGltZUNvbmZpZz8ubmF2aWdhdGlvbkluc3RydWN0aW9uXCJcbiAgICAgICAgKGZvY3VzKT1cIl9vbkZvY3VzSW5kaWNhdG9yKClcIlxuICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiZmQtdGltZS1jb2x1bW4tY3VzdG9tLWhpZGRlblwiXG4gICAgICAgICAgICBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIlxuICAgICAgICAgICAgYXJpYS1hdG9taWM9XCJ0cnVlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFhY3RpdmVcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiY3VycmVudEluZGljYXRvclZhbHVlSWRcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLXRpbWUtY29sdW1uLWN1c3RvbS1oaWRkZW5dPVwiYWN0aXZlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aXZlVmFsdWU/LmxhYmVsIH19IHt7IHRpbWVDb25maWc/LmxhYmVsIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiAqbmdJZj1cIiFhY3RpdmVcIiBjbGFzcz1cImZkLXRpbWVfX2l0ZW0gZmQtdGltZV9faXRlbS0tY29sbGFwc2VkXCI+XG4gICAgICAgIHt7IGFjdGl2ZVZhbHVlPy5sYWJlbCB9fVxuICAgIDwvc3Bhbj5cbjwvZGl2PlxuPGJ1dHRvblxuICAgICpuZ0lmPVwiYWN0aXZlICYmIHNwaW5uZXJzXCJcbiAgICBmZC1idXR0b25cbiAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLWRvd24tYXJyb3dcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIFt0aXRsZV09XCJ0aW1lQ29uZmlnPy5pbmNyZWFzZUxhYmVsXCJcbiAgICBbYXJpYUxhYmVsXT1cInRpbWVDb25maWc/LmluY3JlYXNlTGFiZWxcIlxuICAgIChrZXl1cCk9XCJzcGlubmVyQnV0dG9uS2V5dXBIYW5kbGUoJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cInNjcm9sbERvd24oKVwiXG4+PC9idXR0b24+XG4iXX0=
|
|
@@ -166,13 +166,6 @@ class TimeColumnComponent {
|
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
/** @hidden */
|
|
169
|
-
mouseScrollHandler(event) {
|
|
170
|
-
event.preventDefault();
|
|
171
|
-
if (this._active) {
|
|
172
|
-
event.deltaY > 0 ? this.scrollDown() : this.scrollUp();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
/** @hidden */
|
|
176
169
|
spinnerButtonKeyupHandle(event, upButton) {
|
|
177
170
|
if (KeyUtil.isKeyCode(event, SPACE)) {
|
|
178
171
|
if (upButton) {
|
|
@@ -352,7 +345,7 @@ class TimeColumnComponent {
|
|
|
352
345
|
}
|
|
353
346
|
}
|
|
354
347
|
TimeColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TimeColumnComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
355
|
-
TimeColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: TimeColumnComponent, selector: "fd-time-column", inputs: { rows: "rows", spinners: "spinners", activeValue: "activeValue", active: "active", meridian: "meridian", id: "id", timeConfig: "timeConfig", offset: "offset", elementsAtOnce: "elementsAtOnce" }, outputs: { activeValueChange: "activeValueChange", activeStateChange: "activeStateChange" }, host: { listeners: { "click": "onItemClick()", "keydown": "keyDownHandler($event)"
|
|
348
|
+
TimeColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: TimeColumnComponent, selector: "fd-time-column", inputs: { rows: "rows", spinners: "spinners", activeValue: "activeValue", active: "active", meridian: "meridian", id: "id", timeConfig: "timeConfig", offset: "offset", elementsAtOnce: "elementsAtOnce" }, outputs: { activeValueChange: "activeValueChange", activeStateChange: "activeStateChange" }, host: { listeners: { "click": "onItemClick()", "keydown": "keyDownHandler($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 }], ngImport: i0, template: "<label class=\"fd-time__slider-label\">{{ timeConfig?.label }}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"timeConfig?.decreaseLabel\"\n [ariaLabel]=\"timeConfig?.decreaseLabel\"\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]=\"timeConfig?.navigationInstruction\"\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 }} {{ timeConfig?.label }}\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]=\"timeConfig?.increaseLabel\"\n [ariaLabel]=\"timeConfig?.increaseLabel\"\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"], components: [{ type: i1.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CarouselDirective, selector: "[fdCarousel]", inputs: ["config", "active"], outputs: ["activeChange", "dragStateChange"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.CarouselItemDirective, selector: "[fd-carousel-item], [fdCarouselItem]", inputs: ["value", "initialHeight", "initialWidth", "id"], exportAs: ["fdCarouselItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
356
349
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: TimeColumnComponent, decorators: [{
|
|
357
350
|
type: Component,
|
|
358
351
|
args: [{ selector: 'fd-time-column', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
@@ -398,9 +391,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
|
|
|
398
391
|
}], keyDownHandler: [{
|
|
399
392
|
type: HostListener,
|
|
400
393
|
args: ['keydown', ['$event']]
|
|
401
|
-
}], mouseScrollHandler: [{
|
|
402
|
-
type: HostListener,
|
|
403
|
-
args: ['wheel', ['$event']]
|
|
404
394
|
}] } });
|
|
405
395
|
|
|
406
396
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-time.mjs","sources":["../../../../../libs/core/src/lib/time/errors.ts","../../../../../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/i18n/time-i18n.ts","../../../../../libs/core/src/lib/time/time.component.ts","../../../../../libs/core/src/lib/time/time.component.html","../../../../../libs/core/src/lib/time/deprecated-time-content-density.directive.ts","../../../../../libs/core/src/lib/time/time.module.ts","../../../../../libs/core/src/lib/time/fundamental-ngx-core-time.ts"],"sourcesContent":["export 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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, Subject, Subscription } from 'rxjs';\nimport { buffer, debounceTime, filter, map, tap } from 'rxjs/operators';\nimport { DOWN_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\n\nimport { KeyUtil, resizeObservable } from '@fundamental-ngx/core/utils';\nimport { CarouselConfig, CarouselDirective, CarouselItemDirective, PanEndOutput } from '@fundamental-ngx/core/carousel';\n\nimport { TimeColumnConfig } from './time-column-config';\nimport { SelectableViewItem } from '../models';\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})\nexport class TimeColumnComponent<K, T extends SelectableViewItem<K> = SelectableViewItem<K>>\n implements AfterViewInit, OnInit, OnDestroy\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: T | undefined) {\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(): 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: TimeColumnConfig;\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 get offset(): number {\n return this._offset$.value;\n }\n\n set offset(value: number) {\n this._offset$.next(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 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 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: 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 private _resize$ = new BehaviorSubject<boolean>(false);\n\n /** @hidden */\n private _subscriptions: Subscription = new Subscription();\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 /** @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') || KeyUtil.isKeyType(event, 'alphabetical')) {\n this._queryKeyDownEvent.next(event.key);\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 /**\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: 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","<label class=\"fd-time__slider-label\">{{ timeConfig?.label }}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"timeConfig?.decreaseLabel\"\n [ariaLabel]=\"timeConfig?.decreaseLabel\"\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]=\"timeConfig?.navigationInstruction\"\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 }} {{ timeConfig?.label }}\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]=\"timeConfig?.increaseLabel\"\n [ariaLabel]=\"timeConfig?.increaseLabel\"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n","import { Injectable } from '@angular/core';\n\n/**\n * Provides i18n support for labels and meridian naming inside the time component.\n */\n@Injectable({ providedIn: 'root' })\nexport class TimeI18n {\n /** Aria label for entire component */\n componentAriaName = 'Time picker';\n\n /** Aria label for the 'increase hours' button */\n increaseHoursLabel = 'Increase hours';\n\n /** label for the 'hours' column */\n hoursLabel = 'Hrs';\n\n /** Aria label for the 'decrease hours' button */\n decreaseHoursLabel = 'Decrease hours';\n\n /** Aria label for the 'increase minutes' button */\n increaseMinutesLabel = 'Increase minutes';\n\n /** label for the 'minutes' column */\n minutesLabel = 'Min';\n\n /** Aria label for the 'decrease minutes' button */\n decreaseMinutesLabel = 'Decrease minutes';\n\n /** Aria label for the 'increase seconds' button */\n increaseSecondsLabel = 'Increase seconds';\n\n /** label for the 'seconds' column */\n secondsLabel = 'Sec';\n\n /** Aria label for the 'decrease seconds' button */\n decreaseSecondsLabel = 'Decrease seconds';\n\n /** Aria label for the 'increase period' button */\n increasePeriodLabel = 'Increase period';\n\n /** label for the 'period' column */\n periodLabel = 'Period';\n\n /** Aria label for the 'decrease period' button */\n decreasePeriodLabel = 'Decrease period';\n\n /**\n * Instruction how to navigate between options\n * in the time column list and to switch between time columns\n */\n navigationInstruction =\n 'To move between items in this list, press top arrow or bottom arrow. To switch between lists press left arrow or right arrow.';\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n SimpleChanges,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\n\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { KeyUtil, RtlService } from '@fundamental-ngx/core/utils';\n\nimport { Meridian, SelectableViewItem } from './models';\nimport { createMissingDateImplementationError } from './errors';\nimport { TimeI18n } from './i18n/time-i18n';\nimport { TimeColumnConfig } from './time-column/time-column-config';\nimport { TimeColumnComponent } from './time-column/time-column.component';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\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 '(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})\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 /** Component aria-label */\n get _componentAriaLabel(): string {\n return this._timeI18nLabels.componentAriaName;\n }\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 _timeI18nLabels: TimeI18n,\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 /** Configuration for hours column */\n getHoursConfig(): TimeColumnConfig {\n return {\n decreaseLabel: this._timeI18nLabels.decreaseHoursLabel,\n increaseLabel: this._timeI18nLabels.increaseHoursLabel,\n label: this._timeI18nLabels.hoursLabel,\n navigationInstruction: this._timeI18nLabels.navigationInstruction\n };\n }\n\n /** Configuration for minutes column */\n getMinutesConfig(): TimeColumnConfig {\n return {\n decreaseLabel: this._timeI18nLabels.decreaseMinutesLabel,\n increaseLabel: this._timeI18nLabels.increaseMinutesLabel,\n label: this._timeI18nLabels.minutesLabel,\n navigationInstruction: this._timeI18nLabels.navigationInstruction\n };\n }\n\n /** Configuration for seconds column */\n getSecondsConfig(): TimeColumnConfig {\n return {\n decreaseLabel: this._timeI18nLabels.decreaseSecondsLabel,\n increaseLabel: this._timeI18nLabels.increaseSecondsLabel,\n label: this._timeI18nLabels.secondsLabel,\n navigationInstruction: this._timeI18nLabels.navigationInstruction\n };\n }\n\n /** Configuration for period column */\n getPeriodConfig(): TimeColumnConfig {\n return {\n decreaseLabel: this._timeI18nLabels.decreasePeriodLabel,\n increaseLabel: this._timeI18nLabels.increasePeriodLabel,\n label: this._timeI18nLabels.periodLabel,\n navigationInstruction: this._timeI18nLabels.navigationInstruction\n };\n }\n\n /** @hidden */\n focusActiveColumn(): void {\n const column = this.columns.find(({ active }) => active);\n column?.focus();\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 (keydown)=\"handleKeyDownEvent($event)\"\n [class.fd-time--compact]=\"_contentDensityObserver.isCompact$ | async\"\n [class.fd-time--tablet]=\"tablet\"\n [attr.aria-label]=\"_componentAriaLabel\"\n>\n <fd-time-column\n [active]=\"isActive('hour')\"\n [rows]=\"hourViewItems\"\n [offset]=\"offset\"\n [elementsAtOnce]=\"elementsAtOnce\"\n [activeValue]=\"activeHourViewItem\"\n [timeConfig]=\"getHoursConfig()\"\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 [timeConfig]=\"getMinutesConfig()\"\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 [timeConfig]=\"getSecondsConfig()\"\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 [timeConfig]=\"getPeriodConfig()\"\n [meridian]=\"true\"\n [spinners]=\"spinnerButtons\"\n (activeValueChange)=\"handleMeridianChange($event.value.value)\"\n (activeStateChange)=\"changeActive('meridian')\"\n ></fd-time-column>\n</div>\n","import { Directive, forwardRef } from '@angular/core';\nimport { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-time-column[compact], fd-time[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedTimeContentDensityDirective)\n }\n ]\n})\nexport class DeprecatedTimeContentDensityDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-time-column[compact], fd-time');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { TimeComponent } from './time.component';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { FormModule } from '@fundamental-ngx/core/form';\nimport { PipeModule } from '@fundamental-ngx/core/utils';\nimport { TimeColumnComponent } from './time-column/time-column.component';\nimport { CarouselModule } from '@fundamental-ngx/core/carousel';\nimport { DeprecatedTimeContentDensityDirective } from './deprecated-time-content-density.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [TimeComponent, TimeColumnComponent, DeprecatedTimeContentDensityDirective],\n imports: [CommonModule, FormsModule, FormModule, ButtonModule, PipeModule, CarouselModule, ContentDensityModule],\n exports: [TimeComponent, TimeColumnComponent, DeprecatedTimeContentDensityDirective, ContentDensityModule]\n})\nexport class TimeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-time.mjs","sources":["../../../../../libs/core/src/lib/time/errors.ts","../../../../../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/i18n/time-i18n.ts","../../../../../libs/core/src/lib/time/time.component.ts","../../../../../libs/core/src/lib/time/time.component.html","../../../../../libs/core/src/lib/time/deprecated-time-content-density.directive.ts","../../../../../libs/core/src/lib/time/time.module.ts","../../../../../libs/core/src/lib/time/fundamental-ngx-core-time.ts"],"sourcesContent":["export 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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { BehaviorSubject, combineLatest, Subject, Subscription } from 'rxjs';\nimport { buffer, debounceTime, filter, map, tap } from 'rxjs/operators';\nimport { DOWN_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\n\nimport { KeyUtil, resizeObservable } from '@fundamental-ngx/core/utils';\nimport { CarouselConfig, CarouselDirective, CarouselItemDirective, PanEndOutput } from '@fundamental-ngx/core/carousel';\n\nimport { TimeColumnConfig } from './time-column-config';\nimport { SelectableViewItem } from '../models';\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})\nexport class TimeColumnComponent<K, T extends SelectableViewItem<K> = SelectableViewItem<K>>\n implements AfterViewInit, OnInit, OnDestroy\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: T | undefined) {\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(): 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: TimeColumnConfig;\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 get offset(): number {\n return this._offset$.value;\n }\n\n set offset(value: number) {\n this._offset$.next(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 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 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: 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 private _resize$ = new BehaviorSubject<boolean>(false);\n\n /** @hidden */\n private _subscriptions: Subscription = new Subscription();\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 /** @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') || KeyUtil.isKeyType(event, 'alphabetical')) {\n this._queryKeyDownEvent.next(event.key);\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 /**\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: 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","<label class=\"fd-time__slider-label\">{{ timeConfig?.label }}</label>\n<button\n *ngIf=\"active && spinners\"\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-up-arrow\"\n tabindex=\"-1\"\n [title]=\"timeConfig?.decreaseLabel\"\n [ariaLabel]=\"timeConfig?.decreaseLabel\"\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]=\"timeConfig?.navigationInstruction\"\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 }} {{ timeConfig?.label }}\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]=\"timeConfig?.increaseLabel\"\n [ariaLabel]=\"timeConfig?.increaseLabel\"\n (keyup)=\"spinnerButtonKeyupHandle($event)\"\n (click)=\"scrollDown()\"\n></button>\n","import { Injectable } from '@angular/core';\n\n/**\n * Provides i18n support for labels and meridian naming inside the time component.\n */\n@Injectable({ providedIn: 'root' })\nexport class TimeI18n {\n /** Aria label for entire component */\n componentAriaName = 'Time picker';\n\n /** Aria label for the 'increase hours' button */\n increaseHoursLabel = 'Increase hours';\n\n /** label for the 'hours' column */\n hoursLabel = 'Hrs';\n\n /** Aria label for the 'decrease hours' button */\n decreaseHoursLabel = 'Decrease hours';\n\n /** Aria label for the 'increase minutes' button */\n increaseMinutesLabel = 'Increase minutes';\n\n /** label for the 'minutes' column */\n minutesLabel = 'Min';\n\n /** Aria label for the 'decrease minutes' button */\n decreaseMinutesLabel = 'Decrease minutes';\n\n /** Aria label for the 'increase seconds' button */\n increaseSecondsLabel = 'Increase seconds';\n\n /** label for the 'seconds' column */\n secondsLabel = 'Sec';\n\n /** Aria label for the 'decrease seconds' button */\n decreaseSecondsLabel = 'Decrease seconds';\n\n /** Aria label for the 'increase period' button */\n increasePeriodLabel = 'Increase period';\n\n /** label for the 'period' column */\n periodLabel = 'Period';\n\n /** Aria label for the 'decrease period' button */\n decreasePeriodLabel = 'Decrease period';\n\n /**\n * Instruction how to navigate between options\n * in the time column list and to switch between time columns\n */\n navigationInstruction =\n 'To move between items in this list, press top arrow or bottom arrow. To switch between lists press left arrow or right arrow.';\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n SimpleChanges,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\n\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { KeyUtil, RtlService } from '@fundamental-ngx/core/utils';\n\nimport { Meridian, SelectableViewItem } from './models';\nimport { createMissingDateImplementationError } from './errors';\nimport { TimeI18n } from './i18n/time-i18n';\nimport { TimeColumnConfig } from './time-column/time-column-config';\nimport { TimeColumnComponent } from './time-column/time-column.component';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\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 '(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})\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 /** Component aria-label */\n get _componentAriaLabel(): string {\n return this._timeI18nLabels.componentAriaName;\n }\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 _timeI18nLabels: TimeI18n,\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 /** Configuration for hours column */\n getHoursConfig(): TimeColumnConfig {\n return {\n decreaseLabel: this._timeI18nLabels.decreaseHoursLabel,\n increaseLabel: this._timeI18nLabels.increaseHoursLabel,\n label: this._timeI18nLabels.hoursLabel,\n navigationInstruction: this._timeI18nLabels.navigationInstruction\n };\n }\n\n /** Configuration for minutes column */\n getMinutesConfig(): TimeColumnConfig {\n return {\n decreaseLabel: this._timeI18nLabels.decreaseMinutesLabel,\n increaseLabel: this._timeI18nLabels.increaseMinutesLabel,\n label: this._timeI18nLabels.minutesLabel,\n navigationInstruction: this._timeI18nLabels.navigationInstruction\n };\n }\n\n /** Configuration for seconds column */\n getSecondsConfig(): TimeColumnConfig {\n return {\n decreaseLabel: this._timeI18nLabels.decreaseSecondsLabel,\n increaseLabel: this._timeI18nLabels.increaseSecondsLabel,\n label: this._timeI18nLabels.secondsLabel,\n navigationInstruction: this._timeI18nLabels.navigationInstruction\n };\n }\n\n /** Configuration for period column */\n getPeriodConfig(): TimeColumnConfig {\n return {\n decreaseLabel: this._timeI18nLabels.decreasePeriodLabel,\n increaseLabel: this._timeI18nLabels.increasePeriodLabel,\n label: this._timeI18nLabels.periodLabel,\n navigationInstruction: this._timeI18nLabels.navigationInstruction\n };\n }\n\n /** @hidden */\n focusActiveColumn(): void {\n const column = this.columns.find(({ active }) => active);\n column?.focus();\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 (keydown)=\"handleKeyDownEvent($event)\"\n [class.fd-time--compact]=\"_contentDensityObserver.isCompact$ | async\"\n [class.fd-time--tablet]=\"tablet\"\n [attr.aria-label]=\"_componentAriaLabel\"\n>\n <fd-time-column\n [active]=\"isActive('hour')\"\n [rows]=\"hourViewItems\"\n [offset]=\"offset\"\n [elementsAtOnce]=\"elementsAtOnce\"\n [activeValue]=\"activeHourViewItem\"\n [timeConfig]=\"getHoursConfig()\"\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 [timeConfig]=\"getMinutesConfig()\"\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 [timeConfig]=\"getSecondsConfig()\"\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 [timeConfig]=\"getPeriodConfig()\"\n [meridian]=\"true\"\n [spinners]=\"spinnerButtons\"\n (activeValueChange)=\"handleMeridianChange($event.value.value)\"\n (activeStateChange)=\"changeActive('meridian')\"\n ></fd-time-column>\n</div>\n","import { Directive, forwardRef } from '@angular/core';\nimport { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-time-column[compact], fd-time[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedTimeContentDensityDirective)\n }\n ]\n})\nexport class DeprecatedTimeContentDensityDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-time-column[compact], fd-time');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { TimeComponent } from './time.component';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { FormModule } from '@fundamental-ngx/core/form';\nimport { PipeModule } from '@fundamental-ngx/core/utils';\nimport { TimeColumnComponent } from './time-column/time-column.component';\nimport { CarouselModule } from '@fundamental-ngx/core/carousel';\nimport { DeprecatedTimeContentDensityDirective } from './deprecated-time-content-density.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [TimeComponent, TimeColumnComponent, DeprecatedTimeContentDensityDirective],\n imports: [CommonModule, FormsModule, FormModule, ButtonModule, PipeModule, CarouselModule, ContentDensityModule],\n exports: [TimeComponent, TimeColumnComponent, DeprecatedTimeContentDensityDirective, ContentDensityModule]\n})\nexport class TimeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|