UNPKG

@ux-aspects/ux-aspects

Version:

Open source user interface framework for building modern, responsive, mobile big data applications

103 lines 14.8 kB
import { inject, Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { ColorService } from '../../services/color/index'; import * as i0 from "@angular/core"; export class NotificationService { constructor() { this._colorService = inject(ColorService); /** * Sets the order in which notifications are displayed: `above` - newer notifications will appear above older ones. `below` - newer notifications will appear below older ones. */ this.direction = 'above'; /** * The list of notifications including notifications that have been dismissed */ this.notifications$ = new BehaviorSubject([]); /** * Define the default set of notification options */ this.options = { duration: 4, backgroundColor: this._colorService.getColor('accent').toHex(), iconColor: this._colorService.getColor('accent').toHex() }; } /** * Access the list of notifications as an array */ get notifications() { return this.notifications$.value; } /** * This function should be called to show a notification. * It should be given a TemplateRef containing the content to be displayed. * @param templateRef - A TemplateRef containing the content to be displayed * @param options - The properties to configure the notification. * @param context - The context passed to the notification TemplateRef. This can be accessed by adding a let-data="data" to the ng-template element. */ show(templateRef, options = this.options, context = {}) { // populate the specified options with the default values for any missing properties options = { ...this.options, ...options }; // create the notificationRef based on the options and context specified const notificationRef = { templateRef, duration: options.duration, date: new Date(), visible: true, height: options.height, spacing: options.spacing, backgroundColor: options.backgroundColor, iconColor: options.iconColor, data: context }; // add the new notification to the list (either above or below based on direction) this.direction === 'above' ? this.notifications.unshift(notificationRef) : this.notifications.push(notificationRef); // update the notifications list this.notifications$.next(this.notifications); // remove notification after delay if (options.duration !== 0) { setTimeout(() => this.dismiss(notificationRef), options.duration * 1000); } return notificationRef; } /** * This function will return a list of all the notifications that have been shown. */ getHistory() { return this.notifications; } /** * This function can be called to dismiss a notification. It should be passed the object to dismiss. * @param notificationRef - The notification that should be dismissed */ dismiss(notificationRef) { notificationRef.visible = false; this.notifications$.next(this.notifications); } /** * This function will dismiss any currently visible notifications. */ dismissAll() { this.notifications.forEach(notificationRef => notificationRef.visible = false); this.notifications$.next(this.notifications); } /** Remove the notification from the screen and from the notification history */ remove(notificationRef) { this.notifications$.next(this.notifications.filter(_notificationRef => _notificationRef !== notificationRef)); } /** Remove all notifications from the screen and from the notification history */ removeAll() { this.notifications$.next([]); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NotificationService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NotificationService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBSzFELE1BQU0sT0FBTyxtQkFBbUI7SUFIaEM7UUFJcUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdEQ7Ozs7V0FJRztRQUNILGNBQVMsR0FBOEIsT0FBTyxDQUFDO1FBRS9DOztXQUVHO1FBQ0gsbUJBQWMsR0FBdUMsSUFBSSxlQUFlLENBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBU2hHOztXQUVHO1FBQ0gsWUFBTyxHQUF3QjtZQUMzQixRQUFRLEVBQUUsQ0FBQztZQUNYLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDOUQsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRTtTQUMzRCxDQUFDO0tBMEVMO0lBeEZHOztPQUVHO0lBQ0gsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBV0Q7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLFdBQThCLEVBQUUsVUFBK0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFzQyxFQUFFO1FBRXRILG9GQUFvRjtRQUNwRixPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUUxQyx3RUFBd0U7UUFDeEUsTUFBTSxlQUFlLEdBQW9CO1lBQ3JDLFdBQVc7WUFDWCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7WUFDMUIsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ2hCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7WUFDeEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzVCLElBQUksRUFBRSxPQUFPO1NBQ2hCLENBQUM7UUFFRixrRkFBa0Y7UUFDbEYsSUFBSSxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVwSCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTdDLGtDQUFrQztRQUNsQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNOLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLGVBQWdDO1FBQ3BDLGVBQWUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLE1BQU0sQ0FBQyxlQUFnQztRQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLFNBQVM7UUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDOytHQXRHUSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUZoQixNQUFNOzs0RkFFVCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb2xvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xvci9pbmRleCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29sb3JTZXJ2aWNlID0gaW5qZWN0KENvbG9yU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiAgU2V0cyB0aGUgb3JkZXIgaW4gd2hpY2ggbm90aWZpY2F0aW9ucyBhcmUgZGlzcGxheWVkOlxuICAgICAgICBgYWJvdmVgIC0gbmV3ZXIgbm90aWZpY2F0aW9ucyB3aWxsIGFwcGVhciBhYm92ZSBvbGRlciBvbmVzLlxuICAgICAgICBgYmVsb3dgIC0gbmV3ZXIgbm90aWZpY2F0aW9ucyB3aWxsIGFwcGVhciBiZWxvdyBvbGRlciBvbmVzLlxuICAgICAqL1xuICAgIGRpcmVjdGlvbjogTm90aWZpY2F0aW9uTGlzdERpcmVjdGlvbiA9ICdhYm92ZSc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdCBvZiBub3RpZmljYXRpb25zIGluY2x1ZGluZyBub3RpZmljYXRpb25zIHRoYXQgaGF2ZSBiZWVuIGRpc21pc3NlZFxuICAgICAqL1xuICAgIG5vdGlmaWNhdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8Tm90aWZpY2F0aW9uUmVmW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOb3RpZmljYXRpb25SZWZbXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICogQWNjZXNzIHRoZSBsaXN0IG9mIG5vdGlmaWNhdGlvbnMgYXMgYW4gYXJyYXlcbiAgICAgKi9cbiAgICBnZXQgbm90aWZpY2F0aW9ucygpOiBOb3RpZmljYXRpb25SZWZbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvbnMkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZSB0aGUgZGVmYXVsdCBzZXQgb2Ygbm90aWZpY2F0aW9uIG9wdGlvbnNcbiAgICAgKi9cbiAgICBvcHRpb25zOiBOb3RpZmljYXRpb25PcHRpb25zID0ge1xuICAgICAgICBkdXJhdGlvbjogNCxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLl9jb2xvclNlcnZpY2UuZ2V0Q29sb3IoJ2FjY2VudCcpLnRvSGV4KCksXG4gICAgICAgIGljb25Db2xvcjogdGhpcy5fY29sb3JTZXJ2aWNlLmdldENvbG9yKCdhY2NlbnQnKS50b0hleCgpXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB0byBzaG93IGEgbm90aWZpY2F0aW9uLlxuICAgICAqIEl0IHNob3VsZCBiZSBnaXZlbiBhIFRlbXBsYXRlUmVmIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkLlxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZVJlZiAtIEEgVGVtcGxhdGVSZWYgY29udGFpbmluZyB0aGUgY29udGVudCB0byBiZSBkaXNwbGF5ZWRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwcm9wZXJ0aWVzIHRvIGNvbmZpZ3VyZSB0aGUgbm90aWZpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNvbnRleHQgcGFzc2VkIHRvIHRoZSBub3RpZmljYXRpb24gVGVtcGxhdGVSZWYuIFRoaXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGFkZGluZyBhIGxldC1kYXRhPVwiZGF0YVwiIHRvIHRoZSBuZy10ZW1wbGF0ZSBlbGVtZW50LlxuICAgICAqL1xuICAgIHNob3codGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHZvaWQ+LCBvcHRpb25zOiBOb3RpZmljYXRpb25PcHRpb25zID0gdGhpcy5vcHRpb25zLCBjb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHt9KTogTm90aWZpY2F0aW9uUmVmIHtcblxuICAgICAgICAvLyBwb3B1bGF0ZSB0aGUgc3BlY2lmaWVkIG9wdGlvbnMgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFueSBtaXNzaW5nIHByb3BlcnRpZXNcbiAgICAgICAgb3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zLCAuLi5vcHRpb25zIH07XG5cbiAgICAgICAgLy8gY3JlYXRlIHRoZSBub3RpZmljYXRpb25SZWYgYmFzZWQgb24gdGhlIG9wdGlvbnMgYW5kIGNvbnRleHQgc3BlY2lmaWVkXG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblJlZjogTm90aWZpY2F0aW9uUmVmID0ge1xuICAgICAgICAgICAgdGVtcGxhdGVSZWYsXG4gICAgICAgICAgICBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcbiAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCxcbiAgICAgICAgICAgIHNwYWNpbmc6IG9wdGlvbnMuc3BhY2luZyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogb3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICBpY29uQ29sb3I6IG9wdGlvbnMuaWNvbkNvbG9yLFxuICAgICAgICAgICAgZGF0YTogY29udGV4dFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFkZCB0aGUgbmV3IG5vdGlmaWNhdGlvbiB0byB0aGUgbGlzdCAoZWl0aGVyIGFib3ZlIG9yIGJlbG93IGJhc2VkIG9uIGRpcmVjdGlvbilcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPT09ICdhYm92ZScgPyB0aGlzLm5vdGlmaWNhdGlvbnMudW5zaGlmdChub3RpZmljYXRpb25SZWYpIDogdGhpcy5ub3RpZmljYXRpb25zLnB1c2gobm90aWZpY2F0aW9uUmVmKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdFxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMkLm5leHQodGhpcy5ub3RpZmljYXRpb25zKTtcblxuICAgICAgICAvLyByZW1vdmUgbm90aWZpY2F0aW9uIGFmdGVyIGRlbGF5XG4gICAgICAgIGlmIChvcHRpb25zLmR1cmF0aW9uICE9PSAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGlzbWlzcyhub3RpZmljYXRpb25SZWYpLCBvcHRpb25zLmR1cmF0aW9uICogMTAwMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm90aWZpY2F0aW9uUmVmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBsaXN0IG9mIGFsbCB0aGUgbm90aWZpY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiBzaG93bi5cbiAgICAgKi9cbiAgICBnZXRIaXN0b3J5KCk6IE5vdGlmaWNhdGlvblJlZltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gZGlzbWlzcyBhIG5vdGlmaWNhdGlvbi4gSXQgc2hvdWxkIGJlIHBhc3NlZCB0aGUgb2JqZWN0IHRvIGRpc21pc3MuXG4gICAgICogQHBhcmFtIG5vdGlmaWNhdGlvblJlZiAtIFRoZSBub3RpZmljYXRpb24gdGhhdCBzaG91bGQgYmUgZGlzbWlzc2VkXG4gICAgICovXG4gICAgZGlzbWlzcyhub3RpZmljYXRpb25SZWY6IE5vdGlmaWNhdGlvblJlZik6IHZvaWQge1xuICAgICAgICBub3RpZmljYXRpb25SZWYudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMkLm5leHQodGhpcy5ub3RpZmljYXRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGlzbWlzcyBhbnkgY3VycmVudGx5IHZpc2libGUgbm90aWZpY2F0aW9ucy5cbiAgICAgKi9cbiAgICBkaXNtaXNzQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZm9yRWFjaChub3RpZmljYXRpb25SZWYgPT4gbm90aWZpY2F0aW9uUmVmLnZpc2libGUgPSBmYWxzZSk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucyQubmV4dCh0aGlzLm5vdGlmaWNhdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgdGhlIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBzY3JlZW4gYW5kIGZyb20gdGhlIG5vdGlmaWNhdGlvbiBoaXN0b3J5ICovXG4gICAgcmVtb3ZlKG5vdGlmaWNhdGlvblJlZjogTm90aWZpY2F0aW9uUmVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucyQubmV4dCh0aGlzLm5vdGlmaWNhdGlvbnMuZmlsdGVyKF9ub3RpZmljYXRpb25SZWYgPT4gX25vdGlmaWNhdGlvblJlZiAhPT0gbm90aWZpY2F0aW9uUmVmKSk7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZSBhbGwgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBzY3JlZW4gYW5kIGZyb20gdGhlIG5vdGlmaWNhdGlvbiBoaXN0b3J5ICovXG4gICAgcmVtb3ZlQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMkLm5leHQoW10pO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25SZWYgZXh0ZW5kcyBOb3RpZmljYXRpb25PcHRpb25zIHtcbiAgICAvKiogVGhlIGNvbnRlbnQgdG8gZGlzcGxheSBpbiB0aGUgbm90aWZpY2F0aW9uICovXG4gICAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuICAgIC8qKiBUaGUgZGF0ZXN0YW1wIHRvIGRpc3BsYXkgaW4gdGhlIG5vdGlmaWNhdGlvbiAqL1xuICAgIGRhdGU6IERhdGU7XG4gICAgLyoqIEluZGljYXRlZCB3aGV0aGVyIG9yIG5vdCB0aGUgbm90aWZpY2F0aW9uIGhhcyBiZWVuIGRpc21pc3NlZCBvciBub3QgKi9cbiAgICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgICAvKiogQWRkaXRpb25hbCBkYXRhIHBhc3NlZCBhcyB0ZW1wbGF0ZSBjb250ZXh0IHRvIHRoZSBub3RpZmljYXRpb24gKi9cbiAgICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25PcHRpb25zIHtcbiAgICAvKiogVGhlIGR1cmF0aW9uIHRoZSBub3RpZmljYXRpb24gc2hvdWxkIGRpc3BsYXkgZm9yIGJlZm9yZSBpdCBpcyBhdXRvbWF0aWNhbGx5IGRpc21pc3NlZCAqL1xuICAgIGR1cmF0aW9uOiBudW1iZXI7XG4gICAgLyoqIFRoZSBoZWlnaHQgb2YgdGhlIG5vdGlmaWNhdGlvbiAqL1xuICAgIGhlaWdodD86IG51bWJlcjtcbiAgICAvKiogVGhlIHNwYWNpbmcgYmV0d2VlbiBlYWNoIG5vdGlmaWNhdGlvbiAqL1xuICAgIHNwYWNpbmc/OiBudW1iZXI7XG4gICAgLyoqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBub3RpZmljYXRpb24gKi9cbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb2xvciBvZiB0aGUgbm90aWZpY2F0aW9uIGljb24gKi9cbiAgICBpY29uQ29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvbkxpc3REaXJlY3Rpb24gPSAnYWJvdmUnIHwgJ2JlbG93JztcbiJdfQ==