@pecb-ui/components 1.1.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +556 -556
- package/fesm2022/pecb-ui-components.mjs +998 -1907
- package/fesm2022/pecb-ui-components.mjs.map +1 -1
- package/index.d.ts +2439 -3
- package/package.json +6 -8
- package/esm2022/lib/components/button/button.component.mjs +0 -171
- package/esm2022/lib/components/card/card.component.mjs +0 -182
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -126
- package/esm2022/lib/components/datepicker/datepicker.component.mjs +0 -349
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -329
- package/esm2022/lib/components/input/input.component.mjs +0 -321
- package/esm2022/lib/components/pagination/pagination.component.mjs +0 -197
- package/esm2022/lib/components/radio/radio.component.mjs +0 -147
- package/esm2022/lib/components/right-modal/right-modal.component.mjs +0 -234
- package/esm2022/lib/components/sidebar/sidebar.component.mjs +0 -155
- package/esm2022/lib/components/status/status.component.mjs +0 -50
- package/esm2022/lib/components/tab/tab.component.mjs +0 -151
- package/esm2022/lib/components/table/table.component.mjs +0 -503
- package/esm2022/lib/components/toggle/toggle.component.mjs +0 -126
- package/esm2022/lib/pecb-components.module.mjs +0 -118
- package/esm2022/lib/services/loading.service.mjs +0 -182
- package/esm2022/lib/services/notification.service.mjs +0 -144
- package/esm2022/lib/services/theme.service.mjs +0 -232
- package/esm2022/lib/shared/interfaces/component.interfaces.mjs +0 -2
- package/esm2022/lib/shared/types/common.types.mjs +0 -6
- package/esm2022/lib/shared/utils/accessibility.utils.mjs +0 -223
- package/esm2022/lib/shared/utils/dom.utils.mjs +0 -240
- package/esm2022/lib/shared/utils/error.utils.mjs +0 -277
- package/esm2022/lib/shared/utils/string.utils.mjs +0 -204
- package/esm2022/pecb-ui-components.mjs +0 -5
- package/esm2022/public-api.mjs +0 -53
- package/lib/components/button/button.component.d.ts +0 -130
- package/lib/components/card/card.component.d.ts +0 -140
- package/lib/components/checkbox/checkbox.component.d.ts +0 -74
- package/lib/components/datepicker/datepicker.component.d.ts +0 -155
- package/lib/components/dropdown/dropdown.component.d.ts +0 -144
- package/lib/components/input/input.component.d.ts +0 -215
- package/lib/components/pagination/pagination.component.d.ts +0 -53
- package/lib/components/radio/radio.component.d.ts +0 -93
- package/lib/components/right-modal/right-modal.component.d.ts +0 -137
- package/lib/components/sidebar/sidebar.component.d.ts +0 -97
- package/lib/components/status/status.component.d.ts +0 -19
- package/lib/components/tab/tab.component.d.ts +0 -102
- package/lib/components/table/table.component.d.ts +0 -403
- package/lib/components/toggle/toggle.component.d.ts +0 -74
- package/lib/pecb-components.module.d.ts +0 -37
- package/lib/services/loading.service.d.ts +0 -129
- package/lib/services/notification.service.d.ts +0 -136
- package/lib/services/theme.service.d.ts +0 -142
- package/lib/shared/interfaces/component.interfaces.d.ts +0 -283
- package/lib/shared/types/common.types.d.ts +0 -86
- package/lib/shared/utils/accessibility.utils.d.ts +0 -167
- package/lib/shared/utils/dom.utils.d.ts +0 -108
- package/lib/shared/utils/error.utils.d.ts +0 -191
- package/lib/shared/utils/string.utils.d.ts +0 -144
- package/public-api.d.ts +0 -24
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, forwardRef } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
-
import { generateUniqueId } from '../../shared/utils/dom.utils';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common";
|
|
7
|
-
/**
|
|
8
|
-
* A professional toggle/switch component with label and description support.
|
|
9
|
-
* Fully accessible with WCAG 2.1 AA compliance and reactive forms support.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```html
|
|
13
|
-
* <pecb-toggle
|
|
14
|
-
* label="Enable notifications"
|
|
15
|
-
* description="Receive email notifications"
|
|
16
|
-
* [(ngModel)]="notificationsEnabled"
|
|
17
|
-
* ></pecb-toggle>
|
|
18
|
-
* ```
|
|
19
|
-
*
|
|
20
|
-
* @publicApi
|
|
21
|
-
*/
|
|
22
|
-
export class ToggleComponent {
|
|
23
|
-
constructor(cdr) {
|
|
24
|
-
this.cdr = cdr;
|
|
25
|
-
/**
|
|
26
|
-
* Unique ID for the toggle element
|
|
27
|
-
*/
|
|
28
|
-
this.id = generateUniqueId('toggle');
|
|
29
|
-
/**
|
|
30
|
-
* Position of the label relative to the toggle control.
|
|
31
|
-
* 'right' (default): [toggle] Title Description
|
|
32
|
-
* 'left': Title Description [toggle]
|
|
33
|
-
*/
|
|
34
|
-
this.labelPosition = 'right';
|
|
35
|
-
/**
|
|
36
|
-
* Whether the toggle is disabled
|
|
37
|
-
*/
|
|
38
|
-
this.disabled = false;
|
|
39
|
-
/**
|
|
40
|
-
* Event emitted when toggle state changes
|
|
41
|
-
*/
|
|
42
|
-
this.toggleChange = new EventEmitter();
|
|
43
|
-
// Internal state
|
|
44
|
-
this.checked = false;
|
|
45
|
-
// ControlValueAccessor
|
|
46
|
-
this.onChange = () => { };
|
|
47
|
-
this.onTouched = () => { };
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Get CSS classes for the toggle wrapper
|
|
51
|
-
*/
|
|
52
|
-
get wrapperClasses() {
|
|
53
|
-
return [
|
|
54
|
-
'pecb-toggle',
|
|
55
|
-
this.disabled ? 'pecb-toggle--disabled' : '',
|
|
56
|
-
this.checked ? 'pecb-toggle--checked' : '',
|
|
57
|
-
this.labelPosition === 'left' ? 'pecb-toggle--label-left' : ''
|
|
58
|
-
].filter(Boolean);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Handle toggle change
|
|
62
|
-
*/
|
|
63
|
-
onToggleChange(event) {
|
|
64
|
-
if (this.disabled)
|
|
65
|
-
return;
|
|
66
|
-
const checked = event.target.checked;
|
|
67
|
-
this.checked = checked;
|
|
68
|
-
this.onChange(this.checked);
|
|
69
|
-
this.toggleChange.emit(this.checked);
|
|
70
|
-
this.cdr.markForCheck();
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Handle blur event
|
|
74
|
-
*/
|
|
75
|
-
onBlur() {
|
|
76
|
-
this.onTouched();
|
|
77
|
-
}
|
|
78
|
-
// ControlValueAccessor implementation
|
|
79
|
-
writeValue(value) {
|
|
80
|
-
this.checked = !!value;
|
|
81
|
-
this.cdr.markForCheck();
|
|
82
|
-
}
|
|
83
|
-
registerOnChange(fn) {
|
|
84
|
-
this.onChange = fn;
|
|
85
|
-
}
|
|
86
|
-
registerOnTouched(fn) {
|
|
87
|
-
this.onTouched = fn;
|
|
88
|
-
}
|
|
89
|
-
setDisabledState(isDisabled) {
|
|
90
|
-
this.disabled = isDisabled;
|
|
91
|
-
this.cdr.markForCheck();
|
|
92
|
-
}
|
|
93
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToggleComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
94
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ToggleComponent, isStandalone: true, selector: "pecb-toggle", inputs: { id: "id", name: "name", label: "label", description: "description", labelPosition: "labelPosition", disabled: "disabled" }, outputs: { toggleChange: "toggleChange" }, providers: [
|
|
95
|
-
{
|
|
96
|
-
provide: NG_VALUE_ACCESSOR,
|
|
97
|
-
useExisting: forwardRef(() => ToggleComponent),
|
|
98
|
-
multi: true
|
|
99
|
-
}
|
|
100
|
-
], ngImport: i0, template: "<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-toggle__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n class=\"pecb-toggle__input\"\r\n [name]=\"name\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-describedby]=\"description ? id + '-description' : null\"\r\n [attr.aria-checked]=\"checked\"\r\n (change)=\"onToggleChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-toggle__content\">\r\n <span *ngIf=\"label\" class=\"pecb-toggle__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-toggle__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-toggle__control\">\r\n <span class=\"pecb-toggle__thumb\"></span>\r\n </span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-toggle__content\">\r\n <span *ngIf=\"label\" class=\"pecb-toggle__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-toggle__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n", styles: [".pecb-toggle{position:relative;display:inline-block}.pecb-toggle__label{display:flex;align-items:flex-start;cursor:pointer;-webkit-user-select:none;user-select:none;gap:12px}.pecb-toggle__input{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;pointer-events:none}.pecb-toggle__control{position:relative;display:inline-flex;align-items:center;flex-shrink:0;width:44px;height:24px;margin-top:0;border-radius:12px;background-color:#c2c2c2;transition-property:background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-toggle__thumb{position:absolute;left:2px;width:20px;height:20px;border-radius:50%;background-color:#fff;box-shadow:0 2px 4px #0003;transition-property:transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-toggle__content{display:flex;flex-direction:column;gap:6px;flex:1}.pecb-toggle__text{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;font-weight:500;color:#313131;line-height:1.5}.pecb-toggle__description{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:12px;font-weight:400;color:#919191;line-height:1.5}.pecb-toggle:not(.pecb-toggle--disabled) .pecb-toggle__label:hover .pecb-toggle__control{background-color:#919191}.pecb-toggle__input:focus-visible+.pecb-toggle__control{outline:2px solid #212427;outline-offset:2px}.pecb-toggle--checked .pecb-toggle__control{background-color:#212427}.pecb-toggle--checked .pecb-toggle__thumb{transform:translate(20px)}.pecb-toggle--checked:not(.pecb-toggle--disabled) .pecb-toggle__label:hover .pecb-toggle__control{background-color:#34383d}.pecb-toggle--disabled .pecb-toggle__label{cursor:not-allowed}.pecb-toggle--disabled .pecb-toggle__control{background-color:#f7f5f5}.pecb-toggle--disabled .pecb-toggle__thumb{background-color:#ececec;box-shadow:none}.pecb-toggle--disabled.pecb-toggle--checked .pecb-toggle__control{background-color:#c2c2c2}.pecb-toggle--disabled .pecb-toggle__text{color:#c2c2c2}.pecb-toggle--disabled .pecb-toggle__description{color:#ececec}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
101
|
-
}
|
|
102
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToggleComponent, decorators: [{
|
|
103
|
-
type: Component,
|
|
104
|
-
args: [{ selector: 'pecb-toggle', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
105
|
-
{
|
|
106
|
-
provide: NG_VALUE_ACCESSOR,
|
|
107
|
-
useExisting: forwardRef(() => ToggleComponent),
|
|
108
|
-
multi: true
|
|
109
|
-
}
|
|
110
|
-
], template: "<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-toggle__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n class=\"pecb-toggle__input\"\r\n [name]=\"name\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-describedby]=\"description ? id + '-description' : null\"\r\n [attr.aria-checked]=\"checked\"\r\n (change)=\"onToggleChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-toggle__content\">\r\n <span *ngIf=\"label\" class=\"pecb-toggle__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-toggle__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-toggle__control\">\r\n <span class=\"pecb-toggle__thumb\"></span>\r\n </span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-toggle__content\">\r\n <span *ngIf=\"label\" class=\"pecb-toggle__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-toggle__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n", styles: [".pecb-toggle{position:relative;display:inline-block}.pecb-toggle__label{display:flex;align-items:flex-start;cursor:pointer;-webkit-user-select:none;user-select:none;gap:12px}.pecb-toggle__input{position:absolute;opacity:0;width:0;height:0;margin:0;padding:0;pointer-events:none}.pecb-toggle__control{position:relative;display:inline-flex;align-items:center;flex-shrink:0;width:44px;height:24px;margin-top:0;border-radius:12px;background-color:#c2c2c2;transition-property:background-color;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-toggle__thumb{position:absolute;left:2px;width:20px;height:20px;border-radius:50%;background-color:#fff;box-shadow:0 2px 4px #0003;transition-property:transform;transition-duration:.25s ease-in-out;transition-timing-function:ease-in-out}.pecb-toggle__content{display:flex;flex-direction:column;gap:6px;flex:1}.pecb-toggle__text{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;font-weight:500;color:#313131;line-height:1.5}.pecb-toggle__description{font-family:Plus Jakarta Sans,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:12px;font-weight:400;color:#919191;line-height:1.5}.pecb-toggle:not(.pecb-toggle--disabled) .pecb-toggle__label:hover .pecb-toggle__control{background-color:#919191}.pecb-toggle__input:focus-visible+.pecb-toggle__control{outline:2px solid #212427;outline-offset:2px}.pecb-toggle--checked .pecb-toggle__control{background-color:#212427}.pecb-toggle--checked .pecb-toggle__thumb{transform:translate(20px)}.pecb-toggle--checked:not(.pecb-toggle--disabled) .pecb-toggle__label:hover .pecb-toggle__control{background-color:#34383d}.pecb-toggle--disabled .pecb-toggle__label{cursor:not-allowed}.pecb-toggle--disabled .pecb-toggle__control{background-color:#f7f5f5}.pecb-toggle--disabled .pecb-toggle__thumb{background-color:#ececec;box-shadow:none}.pecb-toggle--disabled.pecb-toggle--checked .pecb-toggle__control{background-color:#c2c2c2}.pecb-toggle--disabled .pecb-toggle__text{color:#c2c2c2}.pecb-toggle--disabled .pecb-toggle__description{color:#ececec}\n"] }]
|
|
111
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { id: [{
|
|
112
|
-
type: Input
|
|
113
|
-
}], name: [{
|
|
114
|
-
type: Input
|
|
115
|
-
}], label: [{
|
|
116
|
-
type: Input
|
|
117
|
-
}], description: [{
|
|
118
|
-
type: Input
|
|
119
|
-
}], labelPosition: [{
|
|
120
|
-
type: Input
|
|
121
|
-
}], disabled: [{
|
|
122
|
-
type: Input
|
|
123
|
-
}], toggleChange: [{
|
|
124
|
-
type: Output
|
|
125
|
-
}] } });
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3RvZ2dsZS90b2dnbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvdG9nZ2xlL3RvZ2dsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixFQUN2QixVQUFVLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBSWhFOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBZ0JILE1BQU0sT0FBTyxlQUFlO0lBNkMxQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTVDMUM7O1dBRUc7UUFDTSxPQUFFLEdBQVcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFpQmpEOzs7O1dBSUc7UUFDTSxrQkFBYSxHQUF3QixPQUFPLENBQUM7UUFFdEQ7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOztXQUVHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXJELGlCQUFpQjtRQUNqQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLHVCQUF1QjtRQUNmLGFBQVEsR0FBNkIsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzlDLGNBQVMsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFSSxDQUFDO0lBRTlDOztPQUVHO0lBQ0gsSUFBSSxjQUFjO1FBQ2hCLE9BQU87WUFDTCxhQUFhO1lBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQy9ELENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTFCLE1BQU0sT0FBTyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLE9BQU8sQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsVUFBVSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQTRCO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7K0dBaEdVLGVBQWU7bUdBQWYsZUFBZSwyT0FSZjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUM5QyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJDM0NILHEwQ0E2QkEsMG9FRElZLFlBQVk7OzRGQVlYLGVBQWU7a0JBZjNCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDOzRCQUM5QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtzRkFNUSxFQUFFO3NCQUFWLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBmb3J3YXJkUmVmLFxyXG4gIENoYW5nZURldGVjdG9yUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy9kb20udXRpbHMnO1xyXG5cclxuZXhwb3J0IHR5cGUgVG9nZ2xlTGFiZWxQb3NpdGlvbiA9ICdyaWdodCcgfCAnbGVmdCc7XHJcblxyXG4vKipcclxuICogQSBwcm9mZXNzaW9uYWwgdG9nZ2xlL3N3aXRjaCBjb21wb25lbnQgd2l0aCBsYWJlbCBhbmQgZGVzY3JpcHRpb24gc3VwcG9ydC5cclxuICogRnVsbHkgYWNjZXNzaWJsZSB3aXRoIFdDQUcgMi4xIEFBIGNvbXBsaWFuY2UgYW5kIHJlYWN0aXZlIGZvcm1zIHN1cHBvcnQuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHBlY2ItdG9nZ2xlXHJcbiAqICAgbGFiZWw9XCJFbmFibGUgbm90aWZpY2F0aW9uc1wiXHJcbiAqICAgZGVzY3JpcHRpb249XCJSZWNlaXZlIGVtYWlsIG5vdGlmaWNhdGlvbnNcIlxyXG4gKiAgIFsobmdNb2RlbCldPVwibm90aWZpY2F0aW9uc0VuYWJsZWRcIlxyXG4gKiA+PC9wZWNiLXRvZ2dsZT5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBwdWJsaWNBcGlcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncGVjYi10b2dnbGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RvZ2dsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdG9nZ2xlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUb2dnbGVDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRvZ2dsZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAvKipcclxuICAgKiBVbmlxdWUgSUQgZm9yIHRoZSB0b2dnbGUgZWxlbWVudFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSBnZW5lcmF0ZVVuaXF1ZUlkKCd0b2dnbGUnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTmFtZSBhdHRyaWJ1dGUgZm9yIHRoZSB0b2dnbGVcclxuICAgKi9cclxuICBASW5wdXQoKSBuYW1lPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBMYWJlbCB0ZXh0IHRvIGRpc3BsYXlcclxuICAgKi9cclxuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogRGVzY3JpcHRpb24gdGV4dCB0byBkaXNwbGF5IGJlbG93IGxhYmVsXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBvc2l0aW9uIG9mIHRoZSBsYWJlbCByZWxhdGl2ZSB0byB0aGUgdG9nZ2xlIGNvbnRyb2wuXHJcbiAgICogJ3JpZ2h0JyAoZGVmYXVsdCk6IFt0b2dnbGVdIFRpdGxlIERlc2NyaXB0aW9uXHJcbiAgICogJ2xlZnQnOiBUaXRsZSBEZXNjcmlwdGlvbiBbdG9nZ2xlXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsUG9zaXRpb246IFRvZ2dsZUxhYmVsUG9zaXRpb24gPSAncmlnaHQnO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSB0b2dnbGUgaXMgZGlzYWJsZWRcclxuICAgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdG9nZ2xlIHN0YXRlIGNoYW5nZXNcclxuICAgKi9cclxuICBAT3V0cHV0KCkgdG9nZ2xlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAvLyBJbnRlcm5hbCBzdGF0ZVxyXG4gIGNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3JcclxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBDU1MgY2xhc3NlcyBmb3IgdGhlIHRvZ2dsZSB3cmFwcGVyXHJcbiAgICovXHJcbiAgZ2V0IHdyYXBwZXJDbGFzc2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICdwZWNiLXRvZ2dsZScsXHJcbiAgICAgIHRoaXMuZGlzYWJsZWQgPyAncGVjYi10b2dnbGUtLWRpc2FibGVkJyA6ICcnLFxyXG4gICAgICB0aGlzLmNoZWNrZWQgPyAncGVjYi10b2dnbGUtLWNoZWNrZWQnIDogJycsXHJcbiAgICAgIHRoaXMubGFiZWxQb3NpdGlvbiA9PT0gJ2xlZnQnID8gJ3BlY2ItdG9nZ2xlLS1sYWJlbC1sZWZ0JyA6ICcnXHJcbiAgICBdLmZpbHRlcihCb29sZWFuKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0b2dnbGUgY2hhbmdlXHJcbiAgICovXHJcbiAgb25Ub2dnbGVDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XHJcbiAgICB0aGlzLmNoZWNrZWQgPSBjaGVja2VkO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmNoZWNrZWQpO1xyXG4gICAgdGhpcy50b2dnbGVDaGFuZ2UuZW1pdCh0aGlzLmNoZWNrZWQpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgYmx1ciBldmVudFxyXG4gICAqL1xyXG4gIG9uQmx1cigpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbXBsZW1lbnRhdGlvblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuY2hlY2tlZCA9ICEhdmFsdWU7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW2NsYXNzXT1cIndyYXBwZXJDbGFzc2VzLmpvaW4oJyAnKVwiPlxyXG4gIDxsYWJlbCBbYXR0ci5mb3JdPVwiaWRcIiBjbGFzcz1cInBlY2ItdG9nZ2xlX19sYWJlbFwiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIFtpZF09XCJpZFwiXHJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgIHJvbGU9XCJzd2l0Y2hcIlxyXG4gICAgICBjbGFzcz1cInBlY2ItdG9nZ2xlX19pbnB1dFwiXHJcbiAgICAgIFtuYW1lXT1cIm5hbWVcIlxyXG4gICAgICBbY2hlY2tlZF09XCJjaGVja2VkXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZGVzY3JpcHRpb24gPyBpZCArICctZGVzY3JpcHRpb24nIDogbnVsbFwiXHJcbiAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJjaGVja2VkXCJcclxuICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgLz5cclxuICAgIDxzcGFuICpuZ0lmPVwibGFiZWxQb3NpdGlvbiA9PT0gJ2xlZnQnICYmIChsYWJlbCB8fCBkZXNjcmlwdGlvbilcIiBjbGFzcz1cInBlY2ItdG9nZ2xlX19jb250ZW50XCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cInBlY2ItdG9nZ2xlX190ZXh0XCI+e3sgbGFiZWwgfX08L3NwYW4+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBbaWRdPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiIGNsYXNzPVwicGVjYi10b2dnbGVfX2Rlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiBjbGFzcz1cInBlY2ItdG9nZ2xlX19jb250cm9sXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwicGVjYi10b2dnbGVfX3RodW1iXCI+PC9zcGFuPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJsYWJlbFBvc2l0aW9uID09PSAncmlnaHQnICYmIChsYWJlbCB8fCBkZXNjcmlwdGlvbilcIiBjbGFzcz1cInBlY2ItdG9nZ2xlX19jb250ZW50XCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cInBlY2ItdG9nZ2xlX190ZXh0XCI+e3sgbGFiZWwgfX08L3NwYW4+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBbaWRdPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiIGNsYXNzPVwicGVjYi10b2dnbGVfX2Rlc2NyaXB0aW9uXCI+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9sYWJlbD5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { ButtonComponent } from './components/button/button.component';
|
|
4
|
-
import { CardComponent, CardHeaderComponent, CardBodyComponent, CardFooterComponent } from './components/card/card.component';
|
|
5
|
-
import { StatusComponent } from './components/status/status.component';
|
|
6
|
-
import { PaginationComponent } from './components/pagination/pagination.component';
|
|
7
|
-
import { TableComponent } from './components/table/table.component';
|
|
8
|
-
import { TabComponent } from './components/tab/tab.component';
|
|
9
|
-
import { DatepickerComponent } from './components/datepicker/datepicker.component';
|
|
10
|
-
import { InputComponent } from './components/input/input.component';
|
|
11
|
-
import { RadioComponent } from './components/radio/radio.component';
|
|
12
|
-
import { CheckboxComponent } from './components/checkbox/checkbox.component';
|
|
13
|
-
import { ToggleComponent } from './components/toggle/toggle.component';
|
|
14
|
-
import { DropdownComponent } from './components/dropdown/dropdown.component';
|
|
15
|
-
import { RightModalComponent, RightModalHeaderDirective, RightModalContentDirective, RightModalFooterDirective } from './components/right-modal/right-modal.component';
|
|
16
|
-
import { SidebarComponent } from './components/sidebar/sidebar.component';
|
|
17
|
-
import * as i0 from "@angular/core";
|
|
18
|
-
const COMPONENTS = [
|
|
19
|
-
ButtonComponent,
|
|
20
|
-
CardComponent,
|
|
21
|
-
CardHeaderComponent,
|
|
22
|
-
CardBodyComponent,
|
|
23
|
-
CardFooterComponent,
|
|
24
|
-
StatusComponent,
|
|
25
|
-
PaginationComponent,
|
|
26
|
-
TableComponent,
|
|
27
|
-
TabComponent,
|
|
28
|
-
DatepickerComponent,
|
|
29
|
-
InputComponent,
|
|
30
|
-
RadioComponent,
|
|
31
|
-
CheckboxComponent,
|
|
32
|
-
ToggleComponent,
|
|
33
|
-
DropdownComponent,
|
|
34
|
-
RightModalComponent,
|
|
35
|
-
RightModalHeaderDirective,
|
|
36
|
-
RightModalContentDirective,
|
|
37
|
-
RightModalFooterDirective,
|
|
38
|
-
SidebarComponent
|
|
39
|
-
];
|
|
40
|
-
/**
|
|
41
|
-
* PECB UI Components Module
|
|
42
|
-
*
|
|
43
|
-
* A professional Angular components library with TypeScript and SCSS.
|
|
44
|
-
* Import this module to use all PECB UI components in your application.
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* ```typescript
|
|
48
|
-
* import { PecbComponentsModule } from '@pecb-ui/components';
|
|
49
|
-
*
|
|
50
|
-
* @NgModule({
|
|
51
|
-
* imports: [PecbComponentsModule]
|
|
52
|
-
* })
|
|
53
|
-
* export class AppModule { }
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
export class PecbComponentsModule {
|
|
57
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PecbComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
58
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: PecbComponentsModule, imports: [CommonModule, ButtonComponent,
|
|
59
|
-
CardComponent,
|
|
60
|
-
CardHeaderComponent,
|
|
61
|
-
CardBodyComponent,
|
|
62
|
-
CardFooterComponent,
|
|
63
|
-
StatusComponent,
|
|
64
|
-
PaginationComponent,
|
|
65
|
-
TableComponent,
|
|
66
|
-
TabComponent,
|
|
67
|
-
DatepickerComponent,
|
|
68
|
-
InputComponent,
|
|
69
|
-
RadioComponent,
|
|
70
|
-
CheckboxComponent,
|
|
71
|
-
ToggleComponent,
|
|
72
|
-
DropdownComponent,
|
|
73
|
-
RightModalComponent,
|
|
74
|
-
RightModalHeaderDirective,
|
|
75
|
-
RightModalContentDirective,
|
|
76
|
-
RightModalFooterDirective,
|
|
77
|
-
SidebarComponent], exports: [ButtonComponent,
|
|
78
|
-
CardComponent,
|
|
79
|
-
CardHeaderComponent,
|
|
80
|
-
CardBodyComponent,
|
|
81
|
-
CardFooterComponent,
|
|
82
|
-
StatusComponent,
|
|
83
|
-
PaginationComponent,
|
|
84
|
-
TableComponent,
|
|
85
|
-
TabComponent,
|
|
86
|
-
DatepickerComponent,
|
|
87
|
-
InputComponent,
|
|
88
|
-
RadioComponent,
|
|
89
|
-
CheckboxComponent,
|
|
90
|
-
ToggleComponent,
|
|
91
|
-
DropdownComponent,
|
|
92
|
-
RightModalComponent,
|
|
93
|
-
RightModalHeaderDirective,
|
|
94
|
-
RightModalContentDirective,
|
|
95
|
-
RightModalFooterDirective,
|
|
96
|
-
SidebarComponent] }); }
|
|
97
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PecbComponentsModule, imports: [CommonModule, ButtonComponent,
|
|
98
|
-
StatusComponent,
|
|
99
|
-
PaginationComponent,
|
|
100
|
-
TableComponent,
|
|
101
|
-
TabComponent,
|
|
102
|
-
DatepickerComponent,
|
|
103
|
-
InputComponent,
|
|
104
|
-
RadioComponent,
|
|
105
|
-
CheckboxComponent,
|
|
106
|
-
ToggleComponent,
|
|
107
|
-
DropdownComponent,
|
|
108
|
-
RightModalComponent,
|
|
109
|
-
SidebarComponent] }); }
|
|
110
|
-
}
|
|
111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PecbComponentsModule, decorators: [{
|
|
112
|
-
type: NgModule,
|
|
113
|
-
args: [{
|
|
114
|
-
imports: [CommonModule, ...COMPONENTS],
|
|
115
|
-
exports: COMPONENTS
|
|
116
|
-
}]
|
|
117
|
-
}] });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVjYi1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbXBvbmVudHMvc3JjL2xpYi9wZWNiLWNvbXBvbmVudHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ3BCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUNMLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUMxQixNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOztBQUUxRSxNQUFNLFVBQVUsR0FBRztJQUNqQixlQUFlO0lBQ2YsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsY0FBYztJQUNkLFlBQVk7SUFDWixtQkFBbUI7SUFDbkIsY0FBYztJQUNkLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQix5QkFBeUI7SUFDekIsZ0JBQWdCO0NBQ2pCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFLSCxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7Z0hBQXBCLG9CQUFvQixZQUhyQixZQUFZLEVBdkN0QixlQUFlO1lBQ2YsYUFBYTtZQUNiLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFDbkIseUJBQXlCO1lBQ3pCLDBCQUEwQjtZQUMxQix5QkFBeUI7WUFDekIsZ0JBQWdCLGFBbkJoQixlQUFlO1lBQ2YsYUFBYTtZQUNiLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFDbkIseUJBQXlCO1lBQ3pCLDBCQUEwQjtZQUMxQix5QkFBeUI7WUFDekIsZ0JBQWdCO2dIQXVCTCxvQkFBb0IsWUFIckIsWUFBWSxFQXZDdEIsZUFBZTtZQUtmLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFJbkIsZ0JBQWdCOzs0RkF1Qkwsb0JBQW9CO2tCQUpoQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztvQkFDdEMsT0FBTyxFQUFFLFVBQVU7aUJBQ3BCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQ2FyZENvbXBvbmVudCxcclxuICBDYXJkSGVhZGVyQ29tcG9uZW50LFxyXG4gIENhcmRCb2R5Q29tcG9uZW50LFxyXG4gIENhcmRGb290ZXJDb21wb25lbnRcclxufSBmcm9tICcuL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0YXR1c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zdGF0dXMvc3RhdHVzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWIvdGFiLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JhZGlvL3JhZGlvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvZ2dsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b2dnbGUvdG9nZ2xlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgUmlnaHRNb2RhbENvbXBvbmVudCxcclxuICBSaWdodE1vZGFsSGVhZGVyRGlyZWN0aXZlLFxyXG4gIFJpZ2h0TW9kYWxDb250ZW50RGlyZWN0aXZlLFxyXG4gIFJpZ2h0TW9kYWxGb290ZXJEaXJlY3RpdmVcclxufSBmcm9tICcuL2NvbXBvbmVudHMvcmlnaHQtbW9kYWwvcmlnaHQtbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2lkZWJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXIuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IENPTVBPTkVOVFMgPSBbXHJcbiAgQnV0dG9uQ29tcG9uZW50LFxyXG4gIENhcmRDb21wb25lbnQsXHJcbiAgQ2FyZEhlYWRlckNvbXBvbmVudCxcclxuICBDYXJkQm9keUNvbXBvbmVudCxcclxuICBDYXJkRm9vdGVyQ29tcG9uZW50LFxyXG4gIFN0YXR1c0NvbXBvbmVudCxcclxuICBQYWdpbmF0aW9uQ29tcG9uZW50LFxyXG4gIFRhYmxlQ29tcG9uZW50LFxyXG4gIFRhYkNvbXBvbmVudCxcclxuICBEYXRlcGlja2VyQ29tcG9uZW50LFxyXG4gIElucHV0Q29tcG9uZW50LFxyXG4gIFJhZGlvQ29tcG9uZW50LFxyXG4gIENoZWNrYm94Q29tcG9uZW50LFxyXG4gIFRvZ2dsZUNvbXBvbmVudCxcclxuICBEcm9wZG93bkNvbXBvbmVudCxcclxuICBSaWdodE1vZGFsQ29tcG9uZW50LFxyXG4gIFJpZ2h0TW9kYWxIZWFkZXJEaXJlY3RpdmUsXHJcbiAgUmlnaHRNb2RhbENvbnRlbnREaXJlY3RpdmUsXHJcbiAgUmlnaHRNb2RhbEZvb3RlckRpcmVjdGl2ZSxcclxuICBTaWRlYmFyQ29tcG9uZW50XHJcbl07XHJcblxyXG4vKipcclxuICogUEVDQiBVSSBDb21wb25lbnRzIE1vZHVsZVxyXG4gKlxyXG4gKiBBIHByb2Zlc3Npb25hbCBBbmd1bGFyIGNvbXBvbmVudHMgbGlicmFyeSB3aXRoIFR5cGVTY3JpcHQgYW5kIFNDU1MuXHJcbiAqIEltcG9ydCB0aGlzIG1vZHVsZSB0byB1c2UgYWxsIFBFQ0IgVUkgY29tcG9uZW50cyBpbiB5b3VyIGFwcGxpY2F0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IFBlY2JDb21wb25lbnRzTW9kdWxlIH0gZnJvbSAnQHBlY2ItdWkvY29tcG9uZW50cyc7XHJcbiAqXHJcbiAqIEBOZ01vZHVsZSh7XHJcbiAqICAgaW1wb3J0czogW1BlY2JDb21wb25lbnRzTW9kdWxlXVxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHsgfVxyXG4gKiBgYGBcclxuICovXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgLi4uQ09NUE9ORU5UU10sXHJcbiAgZXhwb3J0czogQ09NUE9ORU5UU1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVjYkNvbXBvbmVudHNNb2R1bGUge31cclxuIl19
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { map } from 'rxjs/operators';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
/**
|
|
6
|
-
* A stateless, injectable loading service for managing loading states.
|
|
7
|
-
*
|
|
8
|
-
* This service provides a centralized way to track loading states across
|
|
9
|
-
* the application, supporting multiple concurrent loading operations with
|
|
10
|
-
* individual tracking capabilities.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```typescript
|
|
14
|
-
* import { LoadingService } from '@pecb-ui/components';
|
|
15
|
-
*
|
|
16
|
-
* @Component({...})
|
|
17
|
-
* export class MyComponent {
|
|
18
|
-
* isLoading$ = this.loadingService.isLoading$('my-operation');
|
|
19
|
-
*
|
|
20
|
-
* constructor(private loadingService: LoadingService) {}
|
|
21
|
-
*
|
|
22
|
-
* async loadData(): Promise<void> {
|
|
23
|
-
* this.loadingService.start('my-operation', 'Loading data...');
|
|
24
|
-
* try {
|
|
25
|
-
* await this.fetchData();
|
|
26
|
-
* } finally {
|
|
27
|
-
* this.loadingService.stop('my-operation');
|
|
28
|
-
* }
|
|
29
|
-
* }
|
|
30
|
-
* }
|
|
31
|
-
* ```
|
|
32
|
-
*
|
|
33
|
-
* @publicApi
|
|
34
|
-
*/
|
|
35
|
-
export class LoadingService {
|
|
36
|
-
constructor() {
|
|
37
|
-
this.loadingStates = new Map();
|
|
38
|
-
this.statesSubject = new BehaviorSubject(new Map());
|
|
39
|
-
/** Default loading operation ID */
|
|
40
|
-
this.defaultId = 'global';
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Observable of all loading states
|
|
44
|
-
*/
|
|
45
|
-
get states$() {
|
|
46
|
-
return this.statesSubject.asObservable();
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Observable that emits true when any loading operation is active
|
|
50
|
-
*/
|
|
51
|
-
get isAnyLoading$() {
|
|
52
|
-
return this.statesSubject.pipe(map(states => Array.from(states.values()).some(state => state.isLoading)));
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Get observable for a specific loading operation
|
|
56
|
-
* @param id - The loading operation identifier
|
|
57
|
-
*/
|
|
58
|
-
isLoading$(id = this.defaultId) {
|
|
59
|
-
return this.statesSubject.pipe(map(states => states.get(id)?.isLoading ?? false));
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Get observable for loading state with message
|
|
63
|
-
* @param id - The loading operation identifier
|
|
64
|
-
*/
|
|
65
|
-
getState$(id = this.defaultId) {
|
|
66
|
-
return this.statesSubject.pipe(map(states => states.get(id)));
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Check if a specific operation is currently loading (synchronous)
|
|
70
|
-
* @param id - The loading operation identifier
|
|
71
|
-
*/
|
|
72
|
-
isLoading(id = this.defaultId) {
|
|
73
|
-
return this.loadingStates.get(id)?.isLoading ?? false;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Check if any operation is currently loading (synchronous)
|
|
77
|
-
*/
|
|
78
|
-
isAnyLoading() {
|
|
79
|
-
return Array.from(this.loadingStates.values()).some(state => state.isLoading);
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Start a loading operation
|
|
83
|
-
* @param id - The loading operation identifier
|
|
84
|
-
* @param message - Optional message to display
|
|
85
|
-
*/
|
|
86
|
-
start(id = this.defaultId, message) {
|
|
87
|
-
this.updateState(id, { isLoading: true, message, progress: undefined });
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Stop a loading operation
|
|
91
|
-
* @param id - The loading operation identifier
|
|
92
|
-
*/
|
|
93
|
-
stop(id = this.defaultId) {
|
|
94
|
-
this.updateState(id, { isLoading: false, message: undefined, progress: undefined });
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Update progress for a loading operation
|
|
98
|
-
* @param id - The loading operation identifier
|
|
99
|
-
* @param progress - Progress percentage (0-100)
|
|
100
|
-
* @param message - Optional updated message
|
|
101
|
-
*/
|
|
102
|
-
setProgress(id, progress, message) {
|
|
103
|
-
const currentState = this.loadingStates.get(id);
|
|
104
|
-
if (currentState) {
|
|
105
|
-
this.updateState(id, {
|
|
106
|
-
isLoading: true,
|
|
107
|
-
progress: Math.min(100, Math.max(0, progress)),
|
|
108
|
-
message: message ?? currentState.message
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Update the message for a loading operation
|
|
114
|
-
* @param id - The loading operation identifier
|
|
115
|
-
* @param message - New message to display
|
|
116
|
-
*/
|
|
117
|
-
setMessage(id, message) {
|
|
118
|
-
const currentState = this.loadingStates.get(id);
|
|
119
|
-
if (currentState) {
|
|
120
|
-
this.updateState(id, { ...currentState, id, message });
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Stop all loading operations
|
|
125
|
-
*/
|
|
126
|
-
stopAll() {
|
|
127
|
-
this.loadingStates.clear();
|
|
128
|
-
this.statesSubject.next(new Map());
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Remove a loading state completely
|
|
132
|
-
* @param id - The loading operation identifier
|
|
133
|
-
*/
|
|
134
|
-
remove(id) {
|
|
135
|
-
this.loadingStates.delete(id);
|
|
136
|
-
this.emitStates();
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Execute an async operation with automatic loading state management
|
|
140
|
-
* @param id - The loading operation identifier
|
|
141
|
-
* @param operation - The async operation to execute
|
|
142
|
-
* @param message - Optional loading message
|
|
143
|
-
* @returns The result of the operation
|
|
144
|
-
*/
|
|
145
|
-
async withLoading(id, operation, message) {
|
|
146
|
-
this.start(id, message);
|
|
147
|
-
try {
|
|
148
|
-
return await operation();
|
|
149
|
-
}
|
|
150
|
-
finally {
|
|
151
|
-
this.stop(id);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Update a loading state
|
|
156
|
-
*/
|
|
157
|
-
updateState(id, partialState) {
|
|
158
|
-
const state = {
|
|
159
|
-
id,
|
|
160
|
-
isLoading: partialState.isLoading,
|
|
161
|
-
message: partialState.message,
|
|
162
|
-
progress: partialState.progress
|
|
163
|
-
};
|
|
164
|
-
this.loadingStates.set(id, state);
|
|
165
|
-
this.emitStates();
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Emit current states to subscribers
|
|
169
|
-
*/
|
|
170
|
-
emitStates() {
|
|
171
|
-
this.statesSubject.next(new Map(this.loadingStates));
|
|
172
|
-
}
|
|
173
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
174
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingService, providedIn: 'root' }); }
|
|
175
|
-
}
|
|
176
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingService, decorators: [{
|
|
177
|
-
type: Injectable,
|
|
178
|
-
args: [{
|
|
179
|
-
providedIn: 'root'
|
|
180
|
-
}]
|
|
181
|
-
}] });
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL2xvYWRpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQWdCckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFIM0I7UUFJbUIsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztRQUNoRCxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUE0QixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFM0YsbUNBQW1DO1FBQ2xCLGNBQVMsR0FBRyxRQUFRLENBQUM7S0E2SnZDO0lBM0pDOztPQUVHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzVCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLEtBQWEsSUFBSSxDQUFDLFNBQVM7UUFDcEMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDNUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDLENBQ2xELENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLEtBQWEsSUFBSSxDQUFDLFNBQVM7UUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDNUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxLQUFhLElBQUksQ0FBQyxTQUFTO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQztJQUN4RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsS0FBYSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQWdCO1FBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksQ0FBQyxLQUFhLElBQUksQ0FBQyxTQUFTO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxFQUFVLEVBQUUsUUFBZ0IsRUFBRSxPQUFnQjtRQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFO2dCQUNuQixTQUFTLEVBQUUsSUFBSTtnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLE9BQU8sRUFBRSxPQUFPLElBQUksWUFBWSxDQUFDLE9BQU87YUFDekMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEVBQVUsRUFBRSxPQUFlO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFlBQVksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsRUFBVTtRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FDZixFQUFVLEVBQ1YsU0FBMkIsRUFDM0IsT0FBZ0I7UUFFaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLFNBQVMsRUFBRSxDQUFDO1FBQzNCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVcsQ0FBQyxFQUFVLEVBQUUsWUFBNEQ7UUFDMUYsTUFBTSxLQUFLLEdBQWlCO1lBQzFCLEVBQUU7WUFDRixTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVM7WUFDakMsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1lBQzdCLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUTtTQUNoQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7K0dBaktVLGNBQWM7bUhBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqXHJcbiAqIExvYWRpbmcgc3RhdGUgZm9yIGEgc3BlY2lmaWMgb3BlcmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdTdGF0ZSB7XHJcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbG9hZGluZyBvcGVyYXRpb24gKi9cclxuICBpZDogc3RyaW5nO1xyXG4gIC8qKiBXaGV0aGVyIHRoaXMgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBsb2FkaW5nICovXHJcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xyXG4gIC8qKiBPcHRpb25hbCBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG4gIC8qKiBPcHRpb25hbCBwcm9ncmVzcyBwZXJjZW50YWdlICgwLTEwMCkgKi9cclxuICBwcm9ncmVzcz86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgc3RhdGVsZXNzLCBpbmplY3RhYmxlIGxvYWRpbmcgc2VydmljZSBmb3IgbWFuYWdpbmcgbG9hZGluZyBzdGF0ZXMuXHJcbiAqXHJcbiAqIFRoaXMgc2VydmljZSBwcm92aWRlcyBhIGNlbnRyYWxpemVkIHdheSB0byB0cmFjayBsb2FkaW5nIHN0YXRlcyBhY3Jvc3NcclxuICogdGhlIGFwcGxpY2F0aW9uLCBzdXBwb3J0aW5nIG11bHRpcGxlIGNvbmN1cnJlbnQgbG9hZGluZyBvcGVyYXRpb25zIHdpdGhcclxuICogaW5kaXZpZHVhbCB0cmFja2luZyBjYXBhYmlsaXRpZXMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgTG9hZGluZ1NlcnZpY2UgfSBmcm9tICdAcGVjYi11aS9jb21wb25lbnRzJztcclxuICpcclxuICogQENvbXBvbmVudCh7Li4ufSlcclxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcclxuICogICBpc0xvYWRpbmckID0gdGhpcy5sb2FkaW5nU2VydmljZS5pc0xvYWRpbmckKCdteS1vcGVyYXRpb24nKTtcclxuICpcclxuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSkge31cclxuICpcclxuICogICBhc3luYyBsb2FkRGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICogICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoJ215LW9wZXJhdGlvbicsICdMb2FkaW5nIGRhdGEuLi4nKTtcclxuICogICAgIHRyeSB7XHJcbiAqICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hEYXRhKCk7XHJcbiAqICAgICB9IGZpbmFsbHkge1xyXG4gKiAgICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3AoJ215LW9wZXJhdGlvbicpO1xyXG4gKiAgICAgfVxyXG4gKiAgIH1cclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQHB1YmxpY0FwaVxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9hZGluZ1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZ1N0YXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBMb2FkaW5nU3RhdGU+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXA8c3RyaW5nLCBMb2FkaW5nU3RhdGU+PihuZXcgTWFwKCkpO1xyXG5cclxuICAvKiogRGVmYXVsdCBsb2FkaW5nIG9wZXJhdGlvbiBJRCAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdElkID0gJ2dsb2JhbCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgb2YgYWxsIGxvYWRpbmcgc3RhdGVzXHJcbiAgICovXHJcbiAgZ2V0IHN0YXRlcyQoKTogT2JzZXJ2YWJsZTxNYXA8c3RyaW5nLCBMb2FkaW5nU3RhdGU+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRydWUgd2hlbiBhbnkgbG9hZGluZyBvcGVyYXRpb24gaXMgYWN0aXZlXHJcbiAgICovXHJcbiAgZ2V0IGlzQW55TG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXNTdWJqZWN0LnBpcGUoXHJcbiAgICAgIG1hcChzdGF0ZXMgPT4gQXJyYXkuZnJvbShzdGF0ZXMudmFsdWVzKCkpLnNvbWUoc3RhdGUgPT4gc3RhdGUuaXNMb2FkaW5nKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgb2JzZXJ2YWJsZSBmb3IgYSBzcGVjaWZpYyBsb2FkaW5nIG9wZXJhdGlvblxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICovXHJcbiAgaXNMb2FkaW5nJChpZDogc3RyaW5nID0gdGhpcy5kZWZhdWx0SWQpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlc1N1YmplY3QucGlwZShcclxuICAgICAgbWFwKHN0YXRlcyA9PiBzdGF0ZXMuZ2V0KGlkKT8uaXNMb2FkaW5nID8/IGZhbHNlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBvYnNlcnZhYmxlIGZvciBsb2FkaW5nIHN0YXRlIHdpdGggbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICovXHJcbiAgZ2V0U3RhdGUkKGlkOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRJZCk6IE9ic2VydmFibGU8TG9hZGluZ1N0YXRlIHwgdW5kZWZpbmVkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXNTdWJqZWN0LnBpcGUoXHJcbiAgICAgIG1hcChzdGF0ZXMgPT4gc3RhdGVzLmdldChpZCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgYSBzcGVjaWZpYyBvcGVyYXRpb24gaXMgY3VycmVudGx5IGxvYWRpbmcgKHN5bmNocm9ub3VzKVxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICovXHJcbiAgaXNMb2FkaW5nKGlkOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRJZCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N0YXRlcy5nZXQoaWQpPy5pc0xvYWRpbmcgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBhbnkgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBsb2FkaW5nIChzeW5jaHJvbm91cylcclxuICAgKi9cclxuICBpc0FueUxvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmxvYWRpbmdTdGF0ZXMudmFsdWVzKCkpLnNvbWUoc3RhdGUgPT4gc3RhdGUuaXNMb2FkaW5nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGEgbG9hZGluZyBvcGVyYXRpb25cclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgbG9hZGluZyBvcGVyYXRpb24gaWRlbnRpZmllclxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgbWVzc2FnZSB0byBkaXNwbGF5XHJcbiAgICovXHJcbiAgc3RhcnQoaWQ6IHN0cmluZyA9IHRoaXMuZGVmYXVsdElkLCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKGlkLCB7IGlzTG9hZGluZzogdHJ1ZSwgbWVzc2FnZSwgcHJvZ3Jlc3M6IHVuZGVmaW5lZCB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgYSBsb2FkaW5nIG9wZXJhdGlvblxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICovXHJcbiAgc3RvcChpZDogc3RyaW5nID0gdGhpcy5kZWZhdWx0SWQpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoaWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgbWVzc2FnZTogdW5kZWZpbmVkLCBwcm9ncmVzczogdW5kZWZpbmVkIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHByb2dyZXNzIGZvciBhIGxvYWRpbmcgb3BlcmF0aW9uXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIGxvYWRpbmcgb3BlcmF0aW9uIGlkZW50aWZpZXJcclxuICAgKiBAcGFyYW0gcHJvZ3Jlc3MgLSBQcm9ncmVzcyBwZXJjZW50YWdlICgwLTEwMClcclxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIHVwZGF0ZWQgbWVzc2FnZVxyXG4gICAqL1xyXG4gIHNldFByb2dyZXNzKGlkOiBzdHJpbmcsIHByb2dyZXNzOiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMubG9hZGluZ1N0YXRlcy5nZXQoaWQpO1xyXG4gICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKGlkLCB7XHJcbiAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgIHByb2dyZXNzOiBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIHByb2dyZXNzKSksXHJcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSA/PyBjdXJyZW50U3RhdGUubWVzc2FnZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbWVzc2FnZSBmb3IgYSBsb2FkaW5nIG9wZXJhdGlvblxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBOZXcgbWVzc2FnZSB0byBkaXNwbGF5XHJcbiAgICovXHJcbiAgc2V0TWVzc2FnZShpZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMubG9hZGluZ1N0YXRlcy5nZXQoaWQpO1xyXG4gICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKGlkLCB7IC4uLmN1cnJlbnRTdGF0ZSwgaWQsIG1lc3NhZ2UgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGFsbCBsb2FkaW5nIG9wZXJhdGlvbnNcclxuICAgKi9cclxuICBzdG9wQWxsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGVzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnN0YXRlc1N1YmplY3QubmV4dChuZXcgTWFwKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgbG9hZGluZyBzdGF0ZSBjb21wbGV0ZWx5XHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIGxvYWRpbmcgb3BlcmF0aW9uIGlkZW50aWZpZXJcclxuICAgKi9cclxuICByZW1vdmUoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGVzLmRlbGV0ZShpZCk7XHJcbiAgICB0aGlzLmVtaXRTdGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGUgYW4gYXN5bmMgb3BlcmF0aW9uIHdpdGggYXV0b21hdGljIGxvYWRpbmcgc3RhdGUgbWFuYWdlbWVudFxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBsb2FkaW5nIG9wZXJhdGlvbiBpZGVudGlmaWVyXHJcbiAgICogQHBhcmFtIG9wZXJhdGlvbiAtIFRoZSBhc3luYyBvcGVyYXRpb24gdG8gZXhlY3V0ZVxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgbG9hZGluZyBtZXNzYWdlXHJcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uXHJcbiAgICovXHJcbiAgYXN5bmMgd2l0aExvYWRpbmc8VD4oXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgb3BlcmF0aW9uOiAoKSA9PiBQcm9taXNlPFQ+LFxyXG4gICAgbWVzc2FnZT86IHN0cmluZ1xyXG4gICk6IFByb21pc2U8VD4ge1xyXG4gICAgdGhpcy5zdGFydChpZCwgbWVzc2FnZSk7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgb3BlcmF0aW9uKCk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLnN0b3AoaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGEgbG9hZGluZyBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlU3RhdGUoaWQ6IHN0cmluZywgcGFydGlhbFN0YXRlOiBQYXJ0aWFsPExvYWRpbmdTdGF0ZT4gJiB7IGlzTG9hZGluZzogYm9vbGVhbiB9KTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGF0ZTogTG9hZGluZ1N0YXRlID0ge1xyXG4gICAgICBpZCxcclxuICAgICAgaXNMb2FkaW5nOiBwYXJ0aWFsU3RhdGUuaXNMb2FkaW5nLFxyXG4gICAgICBtZXNzYWdlOiBwYXJ0aWFsU3RhdGUubWVzc2FnZSxcclxuICAgICAgcHJvZ3Jlc3M6IHBhcnRpYWxTdGF0ZS5wcm9ncmVzc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZXMuc2V0KGlkLCBzdGF0ZSk7XHJcbiAgICB0aGlzLmVtaXRTdGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgY3VycmVudCBzdGF0ZXMgdG8gc3Vic2NyaWJlcnNcclxuICAgKi9cclxuICBwcml2YXRlIGVtaXRTdGF0ZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXRlc1N1YmplY3QubmV4dChuZXcgTWFwKHRoaXMubG9hZGluZ1N0YXRlcykpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* A stateless, injectable notification service for displaying toast notifications.
|
|
6
|
-
*
|
|
7
|
-
* This service provides a reactive way to manage notifications across the application.
|
|
8
|
-
* It uses RxJS Subjects to emit notification events that can be consumed by notification
|
|
9
|
-
* display components.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* import { NotificationService } from '@pecb-ui/components';
|
|
14
|
-
*
|
|
15
|
-
* @Component({...})
|
|
16
|
-
* export class MyComponent {
|
|
17
|
-
* constructor(private notificationService: NotificationService) {}
|
|
18
|
-
*
|
|
19
|
-
* showSuccess(): void {
|
|
20
|
-
* this.notificationService.success('Operation completed successfully!');
|
|
21
|
-
* }
|
|
22
|
-
*
|
|
23
|
-
* showError(): void {
|
|
24
|
-
* this.notificationService.error('An error occurred', 'Error Title');
|
|
25
|
-
* }
|
|
26
|
-
* }
|
|
27
|
-
* ```
|
|
28
|
-
*
|
|
29
|
-
* @publicApi
|
|
30
|
-
*/
|
|
31
|
-
export class NotificationService {
|
|
32
|
-
constructor() {
|
|
33
|
-
this.notificationSubject = new Subject();
|
|
34
|
-
this.dismissSubject = new Subject();
|
|
35
|
-
this.clearSubject = new Subject();
|
|
36
|
-
/** Default duration for notifications in milliseconds */
|
|
37
|
-
this.defaultDuration = 5000;
|
|
38
|
-
/** Default position for notifications */
|
|
39
|
-
this.defaultPosition = 'top-right';
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Observable stream of notifications
|
|
43
|
-
*/
|
|
44
|
-
get notifications$() {
|
|
45
|
-
return this.notificationSubject.asObservable();
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Observable stream of dismissed notification IDs
|
|
49
|
-
*/
|
|
50
|
-
get dismiss$() {
|
|
51
|
-
return this.dismissSubject.asObservable();
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Observable stream for clear all events
|
|
55
|
-
*/
|
|
56
|
-
get clear$() {
|
|
57
|
-
return this.clearSubject.asObservable();
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Show a success notification
|
|
61
|
-
* @param message - The notification message
|
|
62
|
-
* @param title - Optional title
|
|
63
|
-
* @param config - Optional additional configuration
|
|
64
|
-
*/
|
|
65
|
-
success(message, title, config) {
|
|
66
|
-
return this.show({ ...config, message, title, type: 'success' });
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Show an error notification
|
|
70
|
-
* @param message - The notification message
|
|
71
|
-
* @param title - Optional title
|
|
72
|
-
* @param config - Optional additional configuration
|
|
73
|
-
*/
|
|
74
|
-
error(message, title, config) {
|
|
75
|
-
return this.show({ ...config, message, title, type: 'error' });
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Show a warning notification
|
|
79
|
-
* @param message - The notification message
|
|
80
|
-
* @param title - Optional title
|
|
81
|
-
* @param config - Optional additional configuration
|
|
82
|
-
*/
|
|
83
|
-
warning(message, title, config) {
|
|
84
|
-
return this.show({ ...config, message, title, type: 'warning' });
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Show an info notification
|
|
88
|
-
* @param message - The notification message
|
|
89
|
-
* @param title - Optional title
|
|
90
|
-
* @param config - Optional additional configuration
|
|
91
|
-
*/
|
|
92
|
-
info(message, title, config) {
|
|
93
|
-
return this.show({ ...config, message, title, type: 'info' });
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Show a notification with custom configuration
|
|
97
|
-
* @param config - Full notification configuration
|
|
98
|
-
* @returns The notification ID
|
|
99
|
-
*/
|
|
100
|
-
show(config) {
|
|
101
|
-
const id = config.id || this.generateId();
|
|
102
|
-
const notification = {
|
|
103
|
-
id,
|
|
104
|
-
message: config.message,
|
|
105
|
-
title: config.title,
|
|
106
|
-
type: config.type,
|
|
107
|
-
duration: config.duration ?? this.defaultDuration,
|
|
108
|
-
dismissible: config.dismissible ?? true,
|
|
109
|
-
position: config.position ?? this.defaultPosition,
|
|
110
|
-
customClass: config.customClass,
|
|
111
|
-
timestamp: new Date()
|
|
112
|
-
};
|
|
113
|
-
this.notificationSubject.next(notification);
|
|
114
|
-
return id;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Dismiss a specific notification by ID
|
|
118
|
-
* @param id - The notification ID to dismiss
|
|
119
|
-
*/
|
|
120
|
-
dismiss(id) {
|
|
121
|
-
this.dismissSubject.next(id);
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Clear all notifications
|
|
125
|
-
*/
|
|
126
|
-
clearAll() {
|
|
127
|
-
this.clearSubject.next();
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Generate a unique notification ID
|
|
131
|
-
*/
|
|
132
|
-
generateId() {
|
|
133
|
-
return `notification-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
|
|
134
|
-
}
|
|
135
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
136
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
|
|
137
|
-
}
|
|
138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NotificationService, decorators: [{
|
|
139
|
-
type: Injectable,
|
|
140
|
-
args: [{
|
|
141
|
-
providedIn: 'root'
|
|
142
|
-
}]
|
|
143
|
-
}] });
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQTJDM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQUhoQztRQUltQix3QkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBZ0IsQ0FBQztRQUNsRCxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDdkMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRXBELHlEQUF5RDtRQUN4QyxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN4Qyx5Q0FBeUM7UUFDeEIsb0JBQWUsR0FBeUIsV0FBVyxDQUFDO0tBNEd0RTtJQTFHQzs7T0FFRztJQUNILElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxPQUFlLEVBQUUsS0FBYyxFQUFFLE1BQW9DO1FBQzNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBb0M7UUFDekUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsT0FBZSxFQUFFLEtBQWMsRUFBRSxNQUFvQztRQUMzRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxPQUFlLEVBQUUsS0FBYyxFQUFFLE1BQW9DO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLENBQUMsTUFBMEI7UUFDN0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFMUMsTUFBTSxZQUFZLEdBQWlCO1lBQ2pDLEVBQUU7WUFDRixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUNqRCxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJO1lBQ3ZDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQ2pELFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztZQUMvQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDdEIsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLEVBQVU7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVTtRQUNoQixPQUFPLGdCQUFnQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEYsQ0FBQzsrR0FuSFUsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIE5vdGlmaWNhdGlvbiB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZpY2VcclxuICovXHJcbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvblR5cGUgPSAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm8nO1xyXG5cclxuLyoqXHJcbiAqIE5vdGlmaWNhdGlvbiBwb3NpdGlvbiBvbiBzY3JlZW5cclxuICovXHJcbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvblBvc2l0aW9uID0gJ3RvcC1yaWdodCcgfCAndG9wLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ3RvcC1jZW50ZXInIHwgJ2JvdHRvbS1jZW50ZXInO1xyXG5cclxuLyoqXHJcbiAqIE5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbnNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQ29uZmlnIHtcclxuICAvKiogTm90aWZpY2F0aW9uIG1lc3NhZ2UgKi9cclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgLyoqIE5vdGlmaWNhdGlvbiB0aXRsZSAob3B0aW9uYWwpICovXHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgLyoqIFR5cGUgb2Ygbm90aWZpY2F0aW9uICovXHJcbiAgdHlwZTogTm90aWZpY2F0aW9uVHlwZTtcclxuICAvKiogRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzICgwIGZvciBwZXJzaXN0ZW50KSAqL1xyXG4gIGR1cmF0aW9uPzogbnVtYmVyO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBub3RpZmljYXRpb24gY2FuIGJlIGRpc21pc3NlZCAqL1xyXG4gIGRpc21pc3NpYmxlPzogYm9vbGVhbjtcclxuICAvKiogUG9zaXRpb24gb24gc2NyZWVuICovXHJcbiAgcG9zaXRpb24/OiBOb3RpZmljYXRpb25Qb3NpdGlvbjtcclxuICAvKiogQ3VzdG9tIENTUyBjbGFzcyAqL1xyXG4gIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciAqL1xyXG4gIGlkPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogTm90aWZpY2F0aW9uIG9iamVjdCB3aXRoIGFsbCBwcm9wZXJ0aWVzXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbiBleHRlbmRzIFJlcXVpcmVkPE9taXQ8Tm90aWZpY2F0aW9uQ29uZmlnLCAndGl0bGUnIHwgJ2N1c3RvbUNsYXNzJz4+IHtcclxuICB0aXRsZT86IHN0cmluZztcclxuICBjdXN0b21DbGFzcz86IHN0cmluZztcclxuICB0aW1lc3RhbXA6IERhdGU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHN0YXRlbGVzcywgaW5qZWN0YWJsZSBub3RpZmljYXRpb24gc2VydmljZSBmb3IgZGlzcGxheWluZyB0b2FzdCBub3RpZmljYXRpb25zLlxyXG4gKlxyXG4gKiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgYSByZWFjdGl2ZSB3YXkgdG8gbWFuYWdlIG5vdGlmaWNhdGlvbnMgYWNyb3NzIHRoZSBhcHBsaWNhdGlvbi5cclxuICogSXQgdXNlcyBSeEpTIFN1YmplY3RzIHRvIGVtaXQgbm90aWZpY2F0aW9uIGV2ZW50cyB0aGF0IGNhbiBiZSBjb25zdW1lZCBieSBub3RpZmljYXRpb25cclxuICogZGlzcGxheSBjb21wb25lbnRzLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAcGVjYi11aS9jb21wb25lbnRzJztcclxuICpcclxuICogQENvbXBvbmVudCh7Li4ufSlcclxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcclxuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHt9XHJcbiAqXHJcbiAqICAgc2hvd1N1Y2Nlc3MoKTogdm9pZCB7XHJcbiAqICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcygnT3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XHJcbiAqICAgfVxyXG4gKlxyXG4gKiAgIHNob3dFcnJvcigpOiB2b2lkIHtcclxuICogICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQnLCAnRXJyb3IgVGl0bGUnKTtcclxuICogICB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIEBwdWJsaWNBcGlcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aWZpY2F0aW9uU3ViamVjdCA9IG5ldyBTdWJqZWN0PE5vdGlmaWNhdGlvbj4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRpc21pc3NTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xlYXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgLyoqIERlZmF1bHQgZHVyYXRpb24gZm9yIG5vdGlmaWNhdGlvbnMgaW4gbWlsbGlzZWNvbmRzICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0RHVyYXRpb24gPSA1MDAwO1xyXG4gIC8qKiBEZWZhdWx0IHBvc2l0aW9uIGZvciBub3RpZmljYXRpb25zICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UG9zaXRpb246IE5vdGlmaWNhdGlvblBvc2l0aW9uID0gJ3RvcC1yaWdodCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIG5vdGlmaWNhdGlvbnNcclxuICAgKi9cclxuICBnZXQgbm90aWZpY2F0aW9ucyQoKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb24+IHtcclxuICAgIHJldHVybiB0aGlzLm5vdGlmaWNhdGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiBkaXNtaXNzZWQgbm90aWZpY2F0aW9uIElEc1xyXG4gICAqL1xyXG4gIGdldCBkaXNtaXNzJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzbWlzc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBmb3IgY2xlYXIgYWxsIGV2ZW50c1xyXG4gICAqL1xyXG4gIGdldCBjbGVhciQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGEgc3VjY2VzcyBub3RpZmljYXRpb25cclxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBub3RpZmljYXRpb24gbWVzc2FnZVxyXG4gICAqIEBwYXJhbSB0aXRsZSAtIE9wdGlvbmFsIHRpdGxlXHJcbiAgICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHN1Y2Nlc3MobWVzc2FnZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZywgY29uZmlnPzogUGFydGlhbDxOb3RpZmljYXRpb25Db25maWc+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNob3coeyAuLi5jb25maWcsIG1lc3NhZ2UsIHRpdGxlLCB0eXBlOiAnc3VjY2VzcycgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGFuIGVycm9yIG5vdGlmaWNhdGlvblxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHRpdGxlIC0gT3B0aW9uYWwgdGl0bGVcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZywgY29uZmlnPzogUGFydGlhbDxOb3RpZmljYXRpb25Db25maWc+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNob3coeyAuLi5jb25maWcsIG1lc3NhZ2UsIHRpdGxlLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhIHdhcm5pbmcgbm90aWZpY2F0aW9uXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbm90aWZpY2F0aW9uIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0gdGl0bGUgLSBPcHRpb25hbCB0aXRsZVxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICB3YXJuaW5nKG1lc3NhZ2U6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcsIGNvbmZpZz86IFBhcnRpYWw8Tm90aWZpY2F0aW9uQ29uZmlnPik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5zaG93KHsgLi4uY29uZmlnLCBtZXNzYWdlLCB0aXRsZSwgdHlwZTogJ3dhcm5pbmcnIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhbiBpbmZvIG5vdGlmaWNhdGlvblxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHRpdGxlIC0gT3B0aW9uYWwgdGl0bGVcclxuICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nLCBjb25maWc/OiBQYXJ0aWFsPE5vdGlmaWNhdGlvbkNvbmZpZz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvdyh7IC4uLmNvbmZpZywgbWVzc2FnZSwgdGl0bGUsIHR5cGU6ICdpbmZvJyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYSBub3RpZmljYXRpb24gd2l0aCBjdXN0b20gY29uZmlndXJhdGlvblxyXG4gICAqIEBwYXJhbSBjb25maWcgLSBGdWxsIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uXHJcbiAgICogQHJldHVybnMgVGhlIG5vdGlmaWNhdGlvbiBJRFxyXG4gICAqL1xyXG4gIHNob3coY29uZmlnOiBOb3RpZmljYXRpb25Db25maWcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaWQgPSBjb25maWcuaWQgfHwgdGhpcy5nZW5lcmF0ZUlkKCk7XHJcblxyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24gPSB7XHJcbiAgICAgIGlkLFxyXG4gICAgICBtZXNzYWdlOiBjb25maWcubWVzc2FnZSxcclxuICAgICAgdGl0bGU6IGNvbmZpZy50aXRsZSxcclxuICAgICAgdHlwZTogY29uZmlnLnR5cGUsXHJcbiAgICAgIGR1cmF0aW9uOiBjb25maWcuZHVyYXRpb24gPz8gdGhpcy5kZWZhdWx0RHVyYXRpb24sXHJcbiAgICAgIGRpc21pc3NpYmxlOiBjb25maWcuZGlzbWlzc2libGUgPz8gdHJ1ZSxcclxuICAgICAgcG9zaXRpb246IGNvbmZpZy5wb3NpdGlvbiA/PyB0aGlzLmRlZmF1bHRQb3NpdGlvbixcclxuICAgICAgY3VzdG9tQ2xhc3M6IGNvbmZpZy5jdXN0b21DbGFzcyxcclxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMubm90aWZpY2F0aW9uU3ViamVjdC5uZXh0KG5vdGlmaWNhdGlvbik7XHJcbiAgICByZXR1cm4gaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNtaXNzIGEgc3BlY2lmaWMgbm90aWZpY2F0aW9uIGJ5IElEXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIG5vdGlmaWNhdGlvbiBJRCB0byBkaXNtaXNzXHJcbiAgICovXHJcbiAgZGlzbWlzcyhpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc21pc3NTdWJqZWN0Lm5leHQoaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIG5vdGlmaWNhdGlvbnNcclxuICAgKi9cclxuICBjbGVhckFsbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJTdWJqZWN0Lm5leHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGEgdW5pcXVlIG5vdGlmaWNhdGlvbiBJRFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBub3RpZmljYXRpb24tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gO1xyXG4gIH1cclxufVxyXG4iXX0=
|