@patter/ngx-components 0.5.1 → 0.5.3
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/esm2022/lib/forms/form/form.component.mjs +52 -53
- package/esm2022/lib/forms/interfaces.mjs +1 -1
- package/esm2022/lib/loading-spinner/loading-spinner.component.mjs +12 -0
- package/esm2022/lib/loading-spinner/loading-spinner.directive.mjs +83 -0
- package/esm2022/lib/menu/menu.component.mjs +3 -3
- package/esm2022/lib/ptr-title/ptr-title.component.mjs +3 -3
- package/esm2022/lib/services/loading.service.mjs +83 -0
- package/esm2022/public-api.mjs +4 -2
- package/fesm2022/patter-ngx-components.mjs +228 -61
- package/fesm2022/patter-ngx-components.mjs.map +1 -1
- package/lib/forms/form/form.component.d.ts +18 -10
- package/lib/forms/interfaces.d.ts +18 -18
- package/lib/loading-spinner/loading-spinner.component.d.ts +5 -0
- package/lib/loading-spinner/loading-spinner.directive.d.ts +20 -0
- package/lib/services/loading.service.d.ts +36 -0
- package/package.json +1 -1
- package/patter-ngx-components-0.5.3.tgz +0 -0
- package/public-api.d.ts +3 -0
- package/patter-ngx-components-0.5.1.tgz +0 -0
|
@@ -1,87 +1,86 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
3
|
-
import { FormBuilder, ReactiveFormsModule
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
3
|
+
import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
|
+
import { Observable } from 'rxjs';
|
|
4
6
|
import * as i0 from "@angular/core";
|
|
5
7
|
import * as i1 from "@angular/common";
|
|
6
8
|
import * as i2 from "@angular/forms";
|
|
7
9
|
export class PtrFormComponent {
|
|
8
10
|
config;
|
|
9
11
|
loading = false;
|
|
10
|
-
|
|
12
|
+
error = null;
|
|
11
13
|
formSubmit = new EventEmitter();
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
formGroupCreated = new EventEmitter();
|
|
15
|
+
formGroup;
|
|
16
|
+
flatOptions = {};
|
|
17
|
+
groupedOptions = {};
|
|
14
18
|
fb = inject(FormBuilder);
|
|
15
19
|
cdr = inject(ChangeDetectorRef);
|
|
20
|
+
destroyRef = inject(DestroyRef);
|
|
16
21
|
ngOnInit() {
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
if (field.type === 'select') {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
this.
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
this.form.addControl(field.id, this.fb.control(field.value || '', field.required ? Validators.required : null));
|
|
29
|
-
}
|
|
22
|
+
this.buildForm();
|
|
23
|
+
this.formGroupCreated.emit(this.formGroup);
|
|
24
|
+
this.config.fields.forEach(field => {
|
|
25
|
+
if (field.type === 'select' && field.options instanceof Observable) {
|
|
26
|
+
field.options
|
|
27
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
28
|
+
.subscribe(options => {
|
|
29
|
+
this.processOptions(field.name, options);
|
|
30
|
+
this.cdr.markForCheck(); // Trigger change detection after options are loaded
|
|
31
|
+
});
|
|
30
32
|
}
|
|
31
|
-
else {
|
|
32
|
-
this.
|
|
33
|
+
else if (field.type === 'select' && Array.isArray(field.options)) {
|
|
34
|
+
this.processOptions(field.name, field.options);
|
|
33
35
|
}
|
|
34
36
|
});
|
|
35
|
-
this.form.valueChanges.subscribe(values => {
|
|
36
|
-
this.formChanges.emit(values);
|
|
37
|
-
});
|
|
38
37
|
}
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (field.class)
|
|
46
|
-
classes.push(field.class);
|
|
47
|
-
return {
|
|
48
|
-
...field,
|
|
49
|
-
class: classes.join(' ')
|
|
50
|
-
};
|
|
38
|
+
buildForm() {
|
|
39
|
+
const group = {};
|
|
40
|
+
this.config.fields.forEach(field => {
|
|
41
|
+
group[field.name] = [field.value || '', field.validators || []];
|
|
42
|
+
});
|
|
43
|
+
this.formGroup = this.fb.group(group);
|
|
51
44
|
}
|
|
52
45
|
onSubmit() {
|
|
53
|
-
if (this.
|
|
54
|
-
this.formSubmit.emit(this.
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
console.log('Form is invalid');
|
|
46
|
+
if (this.formGroup.valid) {
|
|
47
|
+
this.formSubmit.emit(this.formGroup.value);
|
|
58
48
|
}
|
|
59
49
|
}
|
|
60
50
|
resetForm() {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
51
|
+
this.formGroup.reset();
|
|
52
|
+
this.config.fields.forEach(field => {
|
|
53
|
+
const control = this.formGroup.get(field.name);
|
|
54
|
+
control?.setValue(field.value || '', { emitEvent: false });
|
|
55
|
+
});
|
|
56
|
+
this.cdr.markForCheck();
|
|
57
|
+
}
|
|
58
|
+
processOptions(fieldName, options) {
|
|
59
|
+
if (options.length > 0 && 'options' in options[0]) {
|
|
60
|
+
this.groupedOptions[fieldName] = options;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.flatOptions[fieldName] = options;
|
|
67
64
|
}
|
|
68
65
|
}
|
|
69
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.
|
|
70
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.
|
|
66
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
67
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: PtrFormComponent, isStandalone: true, selector: "ptr-form", inputs: { config: "config", loading: "loading", error: "error" }, outputs: { formSubmit: "formSubmit", formGroupCreated: "formGroupCreated" }, ngImport: i0, template: "<div [class]=\"'gform_wrapper ' + config.formClass\">\r\n\r\n <div class=\"gform_validation_errors\" *ngIf=\"error\">\r\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\r\n </div>\r\n\r\n <div *ngIf=\"config.title\" class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n\r\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <div class=\"gform_fields\">\r\n\r\n <ng-container *ngFor=\"let field of config.fields\">\r\n\r\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\r\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\">\r\n\r\n <label class=\"gfield_label gform-field-label\" [for]=\"field.name\">{{ field.label }}</label>\r\n\r\n <ng-container [ngSwitch]=\"field.type\">\r\n\r\n <input *ngSwitchCase=\"'text'\" [formControlName]=\"field.name\" type=\"text\" [id]=\"field.name\" />\r\n\r\n <textarea *ngSwitchCase=\"'textarea'\" [id]=\"field.name\" [formControlName]=\"field.name\"></textarea>\r\n\r\n <input *ngSwitchCase=\"'date'\" [formControlName]=\"field.name\" type=\"date\" [id]=\"field.name\" />\r\n\r\n <input *ngSwitchCase=\"'number'\" [formControlName]=\"field.name\" type=\"number\" [id]=\"field.name\" />\r\n\r\n <input *ngSwitchCase=\"'email'\" [formControlName]=\"field.name\" type=\"email\" [id]=\"field.name\" />\r\n\r\n <input *ngSwitchCase=\"'password'\" [formControlName]=\"field.name\" type=\"password\" [id]=\"field.name\" />\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <select [formControlName]=\"field.name\" [id]=\"field.name\">\r\n <!-- Render grouped options -->\r\n <optgroup *ngFor=\"let group of groupedOptions[field.name]\" [label]=\"group.groupLabel\">\r\n <option *ngFor=\"let option of group.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </optgroup>\r\n <!-- Render flat options -->\r\n <option *ngFor=\"let option of flatOptions[field.name]\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </select>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <div class=\"gfield_description validation_message gfield_validation_message\"\r\n *ngIf=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\">\r\n <ng-container *ngIf=\"formGroup.get(field.name)?.errors?.['required']\">This field is required.</ng-container>\r\n <ng-container *ngIf=\"formGroup.get(field.name)?.errors?.['email']\">Please enter a valid email\r\n address.</ng-container>\r\n <ng-container *ngIf=\"formGroup.get(field.name)?.errors?.['minlength']\">\r\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\r\n </ng-container>\r\n <ng-container *ngIf=\"formGroup.get(field.name)?.errors?.['maxlength']\">\r\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\r\n </ng-container>\r\n <ng-container *ngIf=\"formGroup.get(field.name)?.errors?.['pattern']\">\r\n Please match the required format.\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"gform_footer\">\r\n <button type=\"submit\" [disabled]=\"loading || !formGroup.valid\">{{config.submitText}}</button>\r\n </div>\r\n\r\n </form>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
71
68
|
}
|
|
72
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrFormComponent, decorators: [{
|
|
73
70
|
type: Component,
|
|
74
71
|
args: [{ selector: 'ptr-form', standalone: true, imports: [
|
|
75
72
|
CommonModule,
|
|
76
73
|
ReactiveFormsModule
|
|
77
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'gform_wrapper ' +
|
|
74
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'gform_wrapper ' + config.formClass\">\r\n\r\n <div class=\"gform_validation_errors\" *ngIf=\"error\">\r\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\r\n </div>\r\n\r\n <div *ngIf=\"config.title\" class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n\r\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <div class=\"gform_fields\">\r\n\r\n <ng-container *ngFor=\"let field of config.fields\">\r\n\r\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\r\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\">\r\n\r\n <label class=\"gfield_label gform-field-label\" [for]=\"field.name\">{{ field.label }}</label>\r\n\r\n <ng-container [ngSwitch]=\"field.type\">\r\n\r\n <input *ngSwitchCase=\"'text'\" [formControlName]=\"field.name\" type=\"text\" [id]=\"field.name\" />\r\n\r\n <textarea *ngSwitchCase=\"'textarea'\" [id]=\"field.name\" [formControlName]=\"field.name\"></textarea>\r\n\r\n <input *ngSwitchCase=\"'date'\" [formControlName]=\"field.name\" type=\"date\" [id]=\"field.name\" />\r\n\r\n <input *ngSwitchCase=\"'number'\" [formControlName]=\"field.name\" type=\"number\" [id]=\"field.name\" />\r\n\r\n <input *ngSwitchCase=\"'email'\" [formControlName]=\"field.name\" type=\"email\" [id]=\"field.name\" />\r\n\r\n <input *ngSwitchCase=\"'password'\" [formControlName]=\"field.name\" type=\"password\" [id]=\"field.name\" />\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <select [formControlName]=\"field.name\" [id]=\"field.name\">\r\n <!-- Render grouped options -->\r\n <optgroup *ngFor=\"let group of groupedOptions[field.name]\" [label]=\"group.groupLabel\">\r\n <option *ngFor=\"let option of group.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </optgroup>\r\n <!-- Render flat options -->\r\n <option *ngFor=\"let option of flatOptions[field.name]\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </select>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <div class=\"gfield_description validation_message gfield_validation_message\"\r\n *ngIf=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\">\r\n <ng-container *ngIf=\"formGroup.get(field.name)?.errors?.['required']\">This field is required.</ng-container>\r\n <ng-container *ngIf=\"formGroup.get(field.name)?.errors?.['email']\">Please enter a valid email\r\n address.</ng-container>\r\n <ng-container *ngIf=\"formGroup.get(field.name)?.errors?.['minlength']\">\r\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\r\n </ng-container>\r\n <ng-container *ngIf=\"formGroup.get(field.name)?.errors?.['maxlength']\">\r\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\r\n </ng-container>\r\n <ng-container *ngIf=\"formGroup.get(field.name)?.errors?.['pattern']\">\r\n Please match the required format.\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"gform_footer\">\r\n <button type=\"submit\" [disabled]=\"loading || !formGroup.valid\">{{config.submitText}}</button>\r\n </div>\r\n\r\n </form>\r\n</div>\r\n" }]
|
|
78
75
|
}], propDecorators: { config: [{
|
|
79
76
|
type: Input
|
|
80
77
|
}], loading: [{
|
|
81
78
|
type: Input
|
|
82
|
-
}],
|
|
83
|
-
type:
|
|
79
|
+
}], error: [{
|
|
80
|
+
type: Input
|
|
84
81
|
}], formSubmit: [{
|
|
85
82
|
type: Output
|
|
83
|
+
}], formGroupCreated: [{
|
|
84
|
+
type: Output
|
|
86
85
|
}] } });
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQW1CLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWExRyxNQUFNLE9BQU8sZ0JBQWdCO0lBRWxCLE1BQU0sQ0FBaUI7SUFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVmLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztJQUN2RCxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7SUFFaEUsSUFBSSxDQUFhO0lBQ2pCLGVBQWUsR0FBeUIsRUFBRSxDQUFDO0lBRTNDLEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWhDLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxD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S0FBSyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO3VHQWhFVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQix5TENmN0IsbWhFQW1ETSwyQ0QxQ0YsWUFBWSwyZ0JBQ1osbUJBQW1COzsyRkFLVixnQkFBZ0I7a0JBVjVCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjtxQkFDcEIsbUJBRWdCLHVCQUF1QixDQUFDLE1BQU07OEJBSXRDLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUHRyRm9ybUNvbmZpZywgUHRyRm9ybUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3B0ci1mb3JtJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRyRm9ybUNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFB0ckZvcm1Db25maWc7XHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgZm9ybUNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyPEFic3RyYWN0Q29udHJvbDxhbnk+PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxBYnN0cmFjdENvbnRyb2w8YW55Pj4oKTtcclxuXHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuICBwcm9jZXNzZWRGaWVsZHM6IFB0ckZvcm1GaWVsZENvbmZpZ1tdID0gW107XHJcblxyXG4gIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcclxuICBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgdGhpcy5wcm9jZXNzZWRGaWVsZHMgPSB0aGlzLmNvbmZpZy5maWVsZHMubWFwKGZpZWxkID0+IHRoaXMucHJvY2Vzc0ZpZWxkKGZpZWxkKSk7XHJcbiAgICB0aGlzLnByb2Nlc3NlZEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkLnNpbXBsZU9wdGlvbnMpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkLmlkLCB0aGlzLmZiLmNvbnRyb2woZmllbGQudmFsdWUgPz8gZmllbGQuc2ltcGxlT3B0aW9ucyFbMF0udmFsdWUgPz8gbnVsbCwgZmllbGQucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQuZ3JvdXBlZE9wdGlvbnMpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkLmlkLCB0aGlzLmZiLmNvbnRyb2woZmllbGQudmFsdWUgfHwgZmllbGQuZ3JvdXBlZE9wdGlvbnNbMF0ub3B0aW9uc1swXS52YWx1ZSwgZmllbGQucmVxdWlyZWQgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChmaWVsZC5pZCwgdGhpcy5mYi5jb250cm9sKGZpZWxkLnZhbHVlIHx8ICcnLCBmaWVsZC5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkLmlkLCB0aGlzLmZiLmNvbnRyb2woZmllbGQudmFsdWUgfHwgJycsIGZpZWxkLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGwpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWVzID0+IHtcclxuICAgICAgdGhpcy5mb3JtQ2hhbmdlcy5lbWl0KHZhbHVlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc0ZpZWxkKGZpZWxkOiBQdHJGb3JtRmllbGRDb25maWcpOiBQdHJGb3JtRmllbGRDb25maWcge1xyXG4gICAgY29uc3QgY2xhc3NlcyA9IFsnZ2ZpZWxkJ107XHJcbiAgICBpZiAoZmllbGQuc2l6ZSkgY2xhc3Nlcy5wdXNoKGBnZmllbGQtLXdpZHRoLSR7ZmllbGQuc2l6ZX1gKTtcclxuICAgIGlmIChmaWVsZC50eXBlID09PSAnaGlkZGVuJykgY2xhc3Nlcy5wdXNoKCdnZm9ybV9oaWRkZW4nKTtcclxuICAgIGlmIChmaWVsZC5jbGFzcykgY2xhc3Nlcy5wdXNoKGZpZWxkLmNsYXNzKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5maWVsZCxcclxuICAgICAgY2xhc3M6IGNsYXNzZXMuam9pbignICcpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KHRoaXMuZm9ybS52YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnRm9ybSBpcyBpbnZhbGlkJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldEZvcm0oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICB0aGlzLmNvbmZpZy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldChmaWVsZC5pZCk/LnNldFZhbHVlKGZpZWxkLnZhbHVlIHx8IG51bGwpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IFtjbGFzc109XCInZ2Zvcm1fd3JhcHBlciAnICsgKGNvbmZpZy5mb3JtQ2xhc3MgfHwgJ3NtYWxsLXNlY3Rpb24nKVwiPlxyXG4gIDxkaXYgKm5nSWY9XCJjb25maWcudGl0bGVcIiBjbGFzcz1cImdmb3JtX2hlYWRpbmdcIj5cclxuICAgIDxoMiBjbGFzcz1cImdmb3JtX3RpdGxlXCI+e3sgY29uZmlnLnRpdGxlIH19PC9oMj5cclxuICA8L2Rpdj5cclxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImdmb3JtX2ZpZWxkc1wiPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgcHJvY2Vzc2VkRmllbGRzXCI+XHJcblxyXG4gICAgICAgIDxkaXYgW2NsYXNzXT1cImZpZWxkLmNsYXNzXCI+XHJcbiAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJmaWVsZC50eXBlICE9PSAnaGlkZGVuJ1wiIFtmb3JdPVwiZmllbGQuaWRcIiBjbGFzcz1cImdmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbFwiPlxyXG4gICAgICAgICAgICB7eyBmaWVsZC5uYW1lIH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpZWxkLnR5cGVcIj5cclxuXHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiIFtpZF09XCJmaWVsZC5pZFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuaWRcIj48L3RleHRhcmVhPlxyXG5cclxuICAgICAgICAgICAgPHNlbGVjdCAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIiBbaWRdPVwiZmllbGQuaWRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmlkXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLnNpbXBsZU9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWVsZC5zaW1wbGVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC5ncm91cGVkT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGdyb3VwICpuZ0Zvcj1cImxldCBncm91cCBvZiBmaWVsZC5ncm91cGVkT3B0aW9uc1wiIFtsYWJlbF09XCJncm91cC5sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ3JvdXAub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hEZWZhdWx0IFt0eXBlXT1cImZpZWxkLnR5cGVcIiBbaWRdPVwiZmllbGQuaWRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmlkXCJcclxuICAgICAgICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwiZmllbGQubWF4bGVuZ3RoXCI+XHJcblxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2Zvcm1fZm9vdGVyXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIFtuYW1lXT1cImNvbmZpZy5zdWJtaXROYW1lXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCAhZm9ybS52YWxpZFwiPnt7Y29uZmlnLnN1Ym1pdFZhbHVlfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZm9ybT5cclxuXHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG5cclxuPC9kaXY+Il19
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXR0ZXIvbmd4LWNvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFKLE9BQU8sRUFBRSxXQUFXLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBWWxDLE1BQU0sT0FBTyxnQkFBZ0I7SUFFbEIsTUFBTSxDQUFpQjtJQUN2QixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLEtBQUssR0FBa0IsSUFBSSxDQUFDO0lBRTNCLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3JDLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7SUFFM0QsU0FBUyxDQUFhO0lBQ3RCLFdBQVcsR0FBbUMsRUFBRSxDQUFDO0lBQ2pELGNBQWMsR0FBd0MsRUFBRSxDQUFDO0lBRXpELEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lB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Q0gsQ0FBQzt1R0FsRVUsZ0JBQWdCOzJGQUFoQixnQkFBZ0IsbU5DakI3Qiwwd0hBK0VBLDJDRHBFSSxZQUFZLDJiQUNaLG1CQUFtQjs7MkZBS1YsZ0JBQWdCO2tCQVY1QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7cUJBQ3BCLG1CQUVnQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUHRyRm9ybUNvbmZpZywgUHRyT3B0aW9uLCBQdHJPcHRpb25Hcm91cCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncHRyLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQdHJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlnITogUHRyRm9ybUNvbmZpZztcclxuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBAT3V0cHV0KCkgZm9ybVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtR3JvdXBDcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXA+KCk7XHJcblxyXG4gIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICBmbGF0T3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBQdHJPcHRpb25bXSB9ID0ge307XHJcbiAgZ3JvdXBlZE9wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogUHRyT3B0aW9uR3JvdXBbXSB9ID0ge307XHJcblxyXG4gIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcclxuICBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZilcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xyXG4gICAgdGhpcy5mb3JtR3JvdXBDcmVhdGVkLmVtaXQodGhpcy5mb3JtR3JvdXApO1xyXG5cclxuICAgIHRoaXMuY29uZmlnLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmIGZpZWxkLm9wdGlvbnMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XHJcbiAgICAgICAgZmllbGQub3B0aW9uc1xyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NPcHRpb25zKGZpZWxkLm5hbWUsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTsgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGFmdGVyIG9wdGlvbnMgYXJlIGxvYWRlZFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3NlbGVjdCcgJiYgQXJyYXkuaXNBcnJheShmaWVsZC5vcHRpb25zKSkge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc09wdGlvbnMoZmllbGQubmFtZSwgZmllbGQub3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRGb3JtKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xyXG4gICAgdGhpcy5jb25maWcuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBncm91cFtmaWVsZC5uYW1lXSA9IFtmaWVsZC52YWx1ZSB8fCAnJywgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cChncm91cCk7XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdCh0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRGb3JtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoKTtcclxuICAgIHRoaXMuY29uZmlnLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKTtcclxuICAgICAgY29udHJvbD8uc2V0VmFsdWUoZmllbGQudmFsdWUgfHwgJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc09wdGlvbnMoZmllbGROYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFB0ck9wdGlvbltdIHwgUHRyT3B0aW9uR3JvdXBbXSk6IHZvaWQge1xyXG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID4gMCAmJiAnb3B0aW9ucycgaW4gb3B0aW9uc1swXSkge1xyXG4gICAgICB0aGlzLmdyb3VwZWRPcHRpb25zW2ZpZWxkTmFtZV0gPSBvcHRpb25zIGFzIFB0ck9wdGlvbkdyb3VwW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZsYXRPcHRpb25zW2ZpZWxkTmFtZV0gPSBvcHRpb25zIGFzIFB0ck9wdGlvbltdO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtjbGFzc109XCInZ2Zvcm1fd3JhcHBlciAnICsgY29uZmlnLmZvcm1DbGFzc1wiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcnNcIiAqbmdJZj1cImVycm9yXCI+XHJcbiAgICA8aDIgY2xhc3M9XCJnZm9ybV9zdWJtaXNzaW9uX2Vycm9yIGhpZGVfc3VtbWFyeVwiPnt7ZXJyb3J9fTwvaDI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJjb25maWcudGl0bGVcIiBjbGFzcz1cImdmb3JtX2hlYWRpbmdcIj5cclxuICAgIDxoMiBjbGFzcz1cImdmb3JtX3RpdGxlXCI+e3sgY29uZmlnLnRpdGxlIH19PC9oMj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJnZm9ybV9maWVsZHNcIj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGNvbmZpZy5maWVsZHNcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdmaWVsZCBnZmllbGQtLXdpZHRoLXt7ZmllbGQuc2l6ZX19XCIgW2NsYXNzLmdmb3JtX2hpZGRlbl09XCJmaWVsZC50eXBlID09PSAnaGlkZGVuJ1wiXHJcbiAgICAgICAgICBbY2xhc3MuZ2ZpZWxkX2Vycm9yXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmludmFsaWQgJiYgZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8udG91Y2hlZFwiPlxyXG5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbFwiIFtmb3JdPVwiZmllbGQubmFtZVwiPnt7IGZpZWxkLmxhYmVsIH19PC9sYWJlbD5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZC50eXBlXCI+XHJcblxyXG4gICAgICAgICAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQubmFtZVwiIHR5cGU9XCJ0ZXh0XCIgW2lkXT1cImZpZWxkLm5hbWVcIiAvPlxyXG5cclxuICAgICAgICAgICAgPHRleHRhcmVhICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCIgW2lkXT1cImZpZWxkLm5hbWVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIj48L3RleHRhcmVhPlxyXG5cclxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIiB0eXBlPVwiZGF0ZVwiIFtpZF09XCJmaWVsZC5uYW1lXCIgLz5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIiB0eXBlPVwibnVtYmVyXCIgW2lkXT1cImZpZWxkLm5hbWVcIiAvPlxyXG5cclxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCInZW1haWwnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCIgdHlwZT1cImVtYWlsXCIgW2lkXT1cImZpZWxkLm5hbWVcIiAvPlxyXG5cclxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCIncGFzc3dvcmQnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCIgdHlwZT1cInBhc3N3b3JkXCIgW2lkXT1cImZpZWxkLm5hbWVcIiAvPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cclxuICAgICAgICAgICAgICA8c2VsZWN0IFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQubmFtZVwiIFtpZF09XCJmaWVsZC5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFJlbmRlciBncm91cGVkIG9wdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICA8b3B0Z3JvdXAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwZWRPcHRpb25zW2ZpZWxkLm5hbWVdXCIgW2xhYmVsXT1cImdyb3VwLmdyb3VwTGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdyb3VwLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9vcHRncm91cD5cclxuICAgICAgICAgICAgICAgIDwhLS0gUmVuZGVyIGZsYXQgb3B0aW9ucyAtLT5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmbGF0T3B0aW9uc1tmaWVsZC5uYW1lXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdmaWVsZF9kZXNjcmlwdGlvbiB2YWxpZGF0aW9uX21lc3NhZ2UgZ2ZpZWxkX3ZhbGlkYXRpb25fbWVzc2FnZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8uaW52YWxpZCAmJiBmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy5lcnJvcnM/LlsnZW1haWwnXVwiPlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsXHJcbiAgICAgICAgICAgICAgYWRkcmVzcy48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydtaW5sZW5ndGgnXVwiPlxyXG4gICAgICAgICAgICAgIE1pbmltdW0gbGVuZ3RoIGlzIHt7IGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydtaW5sZW5ndGgnXS5yZXF1aXJlZExlbmd0aCB9fSBjaGFyYWN0ZXJzLlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydtYXhsZW5ndGgnXVwiPlxyXG4gICAgICAgICAgICAgIE1heGltdW0gbGVuZ3RoIGlzIHt7IGZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydtYXhsZW5ndGgnXS5yZXF1aXJlZExlbmd0aCB9fSBjaGFyYWN0ZXJzLlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICBQbGVhc2UgbWF0Y2ggdGhlIHJlcXVpcmVkIGZvcm1hdC5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJnZm9ybV9mb290ZXJcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgIWZvcm1Hcm91cC52YWxpZFwiPnt7Y29uZmlnLnN1Ym1pdFRleHR9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jVmFsaWRhdG9yRm4sIFZhbGlkYXRvckZuIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQdHJPcHRpb24ge1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdmFsdWU6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQdHJPcHRpb25Hcm91cCB7XHJcbiAgZ3JvdXBMYWJlbDogc3RyaW5nO1xyXG4gIG9wdGlvbnM6IFB0ck9wdGlvbltdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFB0ckZvcm1GaWVsZCB7XHJcbiAgdHlwZTogJ3RleHQnIHwgJ3RleHRhcmVhJyB8ICdudW1iZXInIHwgJ2VtYWlsJyB8ICdwYXNzd29yZCcgfCAnc2VsZWN0JyB8ICdkYXRlJyB8ICdoaWRkZW4nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHZhbHVlPzogYW55O1xyXG4gIG9wdGlvbnM/OiBQdHJPcHRpb25bXSB8IFB0ck9wdGlvbkdyb3VwW10gfCBPYnNlcnZhYmxlPFB0ck9wdGlvbltdIHwgUHRyT3B0aW9uR3JvdXBbXT47XHJcbiAgc2l6ZT86ICdmdWxsJyB8ICdoYWxmJyB8ICd0aGlyZCc7XHJcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgdmFsaWRhdG9ycz86IFZhbGlkYXRvckZuW107XHJcbiAgYXN5bmNWYWxpZGF0b3JzPzogQXN5bmNWYWxpZGF0b3JGbltdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFB0ckZvcm1Db25maWcge1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIGZpZWxkczogUHRyRm9ybUZpZWxkW107XHJcbiAgZm9ybUNsYXNzPzogc3RyaW5nO1xyXG4gIHN1Ym1pdFRleHQ6IHN0cmluZztcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class PtrLoadingSpinnerComponent {
|
|
5
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrLoadingSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: PtrLoadingSpinnerComponent, isStandalone: true, selector: "ptr-loading-spinner", ngImport: i0, template: `<div class="vdx-progress-spinner"></div>`, isInline: true, styles: [":host{display:inline-block;line-height:0}.vdx-progress-spinner{display:inline-block;width:25px;height:25px;transform:scaleZ(1)}.vdx-progress-spinner:before{position:absolute;content:\"\";background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 40 40' style='enable-background:new 0 0 40 40;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23272e3e;%7D%0A%3C/style%3E%3Ccircle class='st0' cx='34' cy='6' r='6'/%3E%3Ccircle class='st0' cx='6' cy='6' r='6'/%3E%3Ccircle class='st0' cx='6' cy='34' r='6'/%3E%3Ccircle class='st0' cx='34' cy='34' r='6'/%3E%3C/svg%3E\");height:40px;width:40px;left:-8px;top:-8px;border:none;display:block;animation:loader-anim 1.5s 0s ease-in-out infinite}.vdx-progress-spinner:after{content:\"\";position:absolute;height:12px;width:12px;border:none;border-radius:12px;display:block;left:6px;top:6px;background-color:#272e3e;animation:loader-anim-dot 1.5s 0s ease-in-out infinite}@keyframes loader-anim{0%{transform:rotate(0) scale(0);opacity:.5}50%{transform:rotate(180deg) scale(1);opacity:1}to{transform:rotate(360deg) scale(0);opacity:.2}}@keyframes loader-anim-dot{0%{opacity:1}50%{opacity:0}to{opacity:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7
|
+
}
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrLoadingSpinnerComponent, decorators: [{
|
|
9
|
+
type: Component,
|
|
10
|
+
args: [{ selector: 'ptr-loading-spinner', standalone: true, imports: [CommonModule], template: `<div class="vdx-progress-spinner"></div>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block;line-height:0}.vdx-progress-spinner{display:inline-block;width:25px;height:25px;transform:scaleZ(1)}.vdx-progress-spinner:before{position:absolute;content:\"\";background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 40 40' style='enable-background:new 0 0 40 40;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23272e3e;%7D%0A%3C/style%3E%3Ccircle class='st0' cx='34' cy='6' r='6'/%3E%3Ccircle class='st0' cx='6' cy='6' r='6'/%3E%3Ccircle class='st0' cx='6' cy='34' r='6'/%3E%3Ccircle class='st0' cx='34' cy='34' r='6'/%3E%3C/svg%3E\");height:40px;width:40px;left:-8px;top:-8px;border:none;display:block;animation:loader-anim 1.5s 0s ease-in-out infinite}.vdx-progress-spinner:after{content:\"\";position:absolute;height:12px;width:12px;border:none;border-radius:12px;display:block;left:6px;top:6px;background-color:#272e3e;animation:loader-anim-dot 1.5s 0s ease-in-out infinite}@keyframes loader-anim{0%{transform:rotate(0) scale(0);opacity:.5}50%{transform:rotate(180deg) scale(1);opacity:1}to{transform:rotate(360deg) scale(0);opacity:.2}}@keyframes loader-anim-dot{0%{opacity:1}50%{opacity:0}to{opacity:1}}\n"] }]
|
|
11
|
+
}] });
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1zcGlubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2xvYWRpbmctc3Bpbm5lci9sb2FkaW5nLXNwaW5uZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVVuRSxNQUFNLE9BQU8sMEJBQTBCO3VHQUExQiwwQkFBMEI7MkZBQTFCLDBCQUEwQiwrRUFKM0IsMENBQTBDLDQwQ0FEMUMsWUFBWTs7MkZBS1gsMEJBQTBCO2tCQVJ0QyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYiwwQ0FBMEMsbUJBRW5DLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3B0ci1sb2FkaW5nLXNwaW5uZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwidmR4LXByb2dyZXNzLXNwaW5uZXJcIj48L2Rpdj5gLFxyXG4gIHN0eWxlVXJsczogW1wiLi9sb2FkaW5nLXNwaW5uZXIuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFB0ckxvYWRpbmdTcGlubmVyQ29tcG9uZW50IHsgfVxyXG4iXX0=
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Directive, ElementRef, HostBinding, inject, Input, Renderer2, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { PtrLoadingSpinnerComponent } from './loading-spinner.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class PtrLoadingSpinnerDirective {
|
|
5
|
+
targetEl = inject(ElementRef);
|
|
6
|
+
viewContainerRef = inject(ViewContainerRef);
|
|
7
|
+
renderer = inject(Renderer2);
|
|
8
|
+
spinnerInstance;
|
|
9
|
+
overlay;
|
|
10
|
+
hostPosition = 'relative';
|
|
11
|
+
set ptrLoadingSpinner(loading) {
|
|
12
|
+
if (loading) {
|
|
13
|
+
this.addBlurEffect();
|
|
14
|
+
this.addOverlay();
|
|
15
|
+
this.addProgressSpinnerComponent();
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
this.removeBlurEffect();
|
|
19
|
+
this.removeOverlay();
|
|
20
|
+
this.removeProgressSpinnerComponent();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
ngOnDestroy() {
|
|
24
|
+
this.spinnerInstance?.destroy();
|
|
25
|
+
this.removeBlurEffect();
|
|
26
|
+
}
|
|
27
|
+
addProgressSpinnerComponent() {
|
|
28
|
+
this.spinnerInstance = this.viewContainerRef.createComponent(PtrLoadingSpinnerComponent);
|
|
29
|
+
this.overlay?.appendChild(this.spinnerInstance.location.nativeElement);
|
|
30
|
+
}
|
|
31
|
+
removeProgressSpinnerComponent() {
|
|
32
|
+
this.spinnerInstance?.destroy();
|
|
33
|
+
}
|
|
34
|
+
addOverlay() {
|
|
35
|
+
this.overlay = this.renderer.createElement('div');
|
|
36
|
+
this.renderer.setStyle(this.overlay, 'display', 'flex');
|
|
37
|
+
this.renderer.setStyle(this.overlay, 'justify-content', 'center');
|
|
38
|
+
this.renderer.setStyle(this.overlay, 'align-items', 'center');
|
|
39
|
+
this.renderer.setStyle(this.overlay, 'position', 'absolute');
|
|
40
|
+
this.renderer.setStyle(this.overlay, 'top', '0');
|
|
41
|
+
this.renderer.setStyle(this.overlay, 'left', '0');
|
|
42
|
+
this.renderer.setStyle(this.overlay, 'width', '100%');
|
|
43
|
+
this.renderer.setStyle(this.overlay, 'height', '100%');
|
|
44
|
+
this.renderer.appendChild(this.targetEl.nativeElement, this.overlay);
|
|
45
|
+
}
|
|
46
|
+
removeOverlay() {
|
|
47
|
+
if (this.overlay) {
|
|
48
|
+
this.renderer.removeChild(this.targetEl.nativeElement, this.overlay);
|
|
49
|
+
this.overlay = undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
addBlurEffect() {
|
|
53
|
+
const style = this.renderer.createElement('style');
|
|
54
|
+
const blurRule = `
|
|
55
|
+
.ptr-loading-blur > *:not(:last-child) {
|
|
56
|
+
filter: blur(2px);
|
|
57
|
+
transition: filter 0.3s ease;
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
60
|
+
this.renderer.appendChild(style, this.renderer.createText(blurRule));
|
|
61
|
+
this.renderer.appendChild(document.head, style);
|
|
62
|
+
this.renderer.addClass(this.targetEl.nativeElement, 'ptr-loading-blur');
|
|
63
|
+
}
|
|
64
|
+
removeBlurEffect() {
|
|
65
|
+
this.renderer.removeClass(this.targetEl.nativeElement, 'ptr-loading-blur');
|
|
66
|
+
}
|
|
67
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrLoadingSpinnerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
68
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.4", type: PtrLoadingSpinnerDirective, isStandalone: true, selector: "[ptrLoadingSpinner]", inputs: { ptrLoadingSpinner: "ptrLoadingSpinner" }, host: { properties: { "style.position": "this.hostPosition" } }, ngImport: i0 });
|
|
69
|
+
}
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrLoadingSpinnerDirective, decorators: [{
|
|
71
|
+
type: Directive,
|
|
72
|
+
args: [{
|
|
73
|
+
selector: '[ptrLoadingSpinner]',
|
|
74
|
+
standalone: true
|
|
75
|
+
}]
|
|
76
|
+
}], propDecorators: { hostPosition: [{
|
|
77
|
+
type: HostBinding,
|
|
78
|
+
args: ['style.position']
|
|
79
|
+
}], ptrLoadingSpinner: [{
|
|
80
|
+
type: Input,
|
|
81
|
+
args: [{ required: true }]
|
|
82
|
+
}] } });
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1zcGlubmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvbGliL2xvYWRpbmctc3Bpbm5lci9sb2FkaW5nLXNwaW5uZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBTXpFLE1BQU0sT0FBTywwQkFBMEI7SUFFN0IsUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QixnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTdCLGVBQWUsQ0FBNEM7SUFDM0QsT0FBTyxDQUFlO0lBRUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztJQUV6RCxJQUErQixpQkFBaUIsQ0FBQyxPQUFnQjtRQUMvRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFD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MEJBQTBCOzJGQUExQiwwQkFBMEI7OzJGQUExQiwwQkFBMEI7a0JBSnRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQVVnQyxZQUFZO3NCQUExQyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFFRSxpQkFBaUI7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIFJlbmRlcmVyMiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQdHJMb2FkaW5nU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJy4vbG9hZGluZy1zcGlubmVyLmNvbXBvbmVudCc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1twdHJMb2FkaW5nU3Bpbm5lcl0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIFB0ckxvYWRpbmdTcGlubmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSB0YXJnZXRFbCA9IGluamVjdChFbGVtZW50UmVmKTtcclxuICBwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XHJcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG5cclxuICBwcml2YXRlIHNwaW5uZXJJbnN0YW5jZT86IENvbXBvbmVudFJlZjxQdHJMb2FkaW5nU3Bpbm5lckNvbXBvbmVudD47XHJcbiAgcHJpdmF0ZSBvdmVybGF5PzogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUucG9zaXRpb24nKSBob3N0UG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzZXQgcHRyTG9hZGluZ1NwaW5uZXIobG9hZGluZzogYm9vbGVhbikge1xyXG4gICAgaWYgKGxvYWRpbmcpIHtcclxuICAgICAgdGhpcy5hZGRCbHVyRWZmZWN0KCk7XHJcbiAgICAgIHRoaXMuYWRkT3ZlcmxheSgpO1xyXG4gICAgICB0aGlzLmFkZFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW1vdmVCbHVyRWZmZWN0KCk7XHJcbiAgICAgIHRoaXMucmVtb3ZlT3ZlcmxheSgpO1xyXG4gICAgICB0aGlzLnJlbW92ZVByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnNwaW5uZXJJbnN0YW5jZT8uZGVzdHJveSgpO1xyXG4gICAgdGhpcy5yZW1vdmVCbHVyRWZmZWN0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Bpbm5lckluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChQdHJMb2FkaW5nU3Bpbm5lckNvbXBvbmVudCk7XHJcbiAgICB0aGlzLm92ZXJsYXk/LmFwcGVuZENoaWxkKHRoaXMuc3Bpbm5lckluc3RhbmNlLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVQcm9ncmVzc1NwaW5uZXJDb21wb25lbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNwaW5uZXJJbnN0YW5jZT8uZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRPdmVybGF5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vdmVybGF5ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5vdmVybGF5LCAnZGlzcGxheScsICdmbGV4Jyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMub3ZlcmxheSwgJ2p1c3RpZnktY29udGVudCcsICdjZW50ZXInKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5vdmVybGF5LCAnYWxpZ24taXRlbXMnLCAnY2VudGVyJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMub3ZlcmxheSwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMub3ZlcmxheSwgJ3RvcCcsICcwJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMub3ZlcmxheSwgJ2xlZnQnLCAnMCcpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXksICd3aWR0aCcsICcxMDAlJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMub3ZlcmxheSwgJ2hlaWdodCcsICcxMDAlJyk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLnRhcmdldEVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMub3ZlcmxheSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZU92ZXJsYXkoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy50YXJnZXRFbC5uYXRpdmVFbGVtZW50LCB0aGlzLm92ZXJsYXkpO1xyXG4gICAgICB0aGlzLm92ZXJsYXkgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEJsdXJFZmZlY3QoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcclxuICAgIGNvbnN0IGJsdXJSdWxlID0gYFxyXG4gICAgICAucHRyLWxvYWRpbmctYmx1ciA+ICo6bm90KDpsYXN0LWNoaWxkKSB7XHJcbiAgICAgICAgZmlsdGVyOiBibHVyKDJweCk7XHJcbiAgICAgICAgdHJhbnNpdGlvbjogZmlsdGVyIDAuM3MgZWFzZTtcclxuICAgICAgfVxyXG4gICAgYDtcclxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoc3R5bGUsIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dChibHVyUnVsZSkpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCBzdHlsZSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudGFyZ2V0RWwubmF0aXZlRWxlbWVudCwgJ3B0ci1sb2FkaW5nLWJsdXInKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQmx1ckVmZmVjdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy50YXJnZXRFbC5uYXRpdmVFbGVtZW50LCAncHRyLWxvYWRpbmctYmx1cicpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -6,10 +6,10 @@ import * as i1 from "@angular/common";
|
|
|
6
6
|
import * as i2 from "@angular/router";
|
|
7
7
|
export class PtrMenuComponent {
|
|
8
8
|
menuItems = [];
|
|
9
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.
|
|
10
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: PtrMenuComponent, isStandalone: true, selector: "ptr-menu", inputs: { menuItems: "menuItems" }, ngImport: i0, template: "<nav class=\"ptr-menu\">\r\n <ul class=\"menu\">\r\n <li class=\"menu-item\" *ngFor=\"let item of menuItems\" routerLinkActive=\"current_page_item\"\r\n [routerLinkActiveOptions]=\"{exact: true}\">\r\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\r\n </li>\r\n </ul>\r\n</nav>\r\n", styles: [".menu{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu>ul{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu--vertical{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu--vertical>ul{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu li.current-menu-item>a,.menu li.current_page_item>a,.menu li.current-menu-parent>a{opacity:1;font-weight:700}.menu a{transition:color .33s}.menu a:hover,.menu a:focus{text-decoration:none}.menu a{position:relative;text-decoration:none;padding:8px 0;font-family:var(--wp--preset--font-family--heading-font);letter-spacing:-.72px;color:var(--ptr-menu-color, var(--wp--preset--color--black))}.menu a:before,.menu a:after{content:\"\";position:absolute;bottom:2px;left:0;right:0;height:2px;background-color:var(--wp--preset--color--primary)}.menu a:before{opacity:0;transform:translateY(-8px);transition:transform 0s cubic-bezier(.175,.885,.32,1.275),opacity 0s}.menu a:after{opacity:0;transform:translateY(4px);transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:before,.menu a:hover:after,.menu a:focus:before,.menu a:focus:after{opacity:1;transform:translateY(0)}.menu a:hover:before,.menu a:focus:before{transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:after,.menu a:focus:after{transition:transform 0s .2s cubic-bezier(.175,.885,.32,1.275),opacity 0s .2s}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
11
11
|
}
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrMenuComponent, decorators: [{
|
|
13
13
|
type: Component,
|
|
14
14
|
args: [{ selector: 'ptr-menu', standalone: true, imports: [CommonModule, RouterModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav class=\"ptr-menu\">\r\n <ul class=\"menu\">\r\n <li class=\"menu-item\" *ngFor=\"let item of menuItems\" routerLinkActive=\"current_page_item\"\r\n [routerLinkActiveOptions]=\"{exact: true}\">\r\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\r\n </li>\r\n </ul>\r\n</nav>\r\n", styles: [".menu{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu>ul{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu--vertical{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu--vertical>ul{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu li.current-menu-item>a,.menu li.current_page_item>a,.menu li.current-menu-parent>a{opacity:1;font-weight:700}.menu a{transition:color .33s}.menu a:hover,.menu a:focus{text-decoration:none}.menu a{position:relative;text-decoration:none;padding:8px 0;font-family:var(--wp--preset--font-family--heading-font);letter-spacing:-.72px;color:var(--ptr-menu-color, var(--wp--preset--color--black))}.menu a:before,.menu a:after{content:\"\";position:absolute;bottom:2px;left:0;right:0;height:2px;background-color:var(--wp--preset--color--primary)}.menu a:before{opacity:0;transform:translateY(-8px);transition:transform 0s cubic-bezier(.175,.885,.32,1.275),opacity 0s}.menu a:after{opacity:0;transform:translateY(4px);transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:before,.menu a:hover:after,.menu a:focus:before,.menu a:focus:after{opacity:1;transform:translateY(0)}.menu a:hover:before,.menu a:focus:before{transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:after,.menu a:focus:after{transition:transform 0s .2s cubic-bezier(.175,.885,.32,1.275),opacity 0s .2s}\n"] }]
|
|
15
15
|
}], propDecorators: { menuItems: [{
|
|
@@ -26,10 +26,10 @@ export class PtrTitleComponent {
|
|
|
26
26
|
}
|
|
27
27
|
return route;
|
|
28
28
|
}
|
|
29
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.
|
|
30
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.
|
|
29
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: PtrTitleComponent, isStandalone: true, selector: "ptr-title", ngImport: i0, template: '<header class="entry-header is-layout-constrained my-3" *ngIf="!(hideTitle$ | async)"><h1 class="entry-title">{{ title$ | async }}</h1></header>', isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
31
31
|
}
|
|
32
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrTitleComponent, decorators: [{
|
|
33
33
|
type: Component,
|
|
34
34
|
args: [{
|
|
35
35
|
selector: 'ptr-title',
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { computed, Injectable, signal } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Optimized Async Loading Service using Angular Signals
|
|
5
|
+
* Supports global loading state and named loading areas with auto-cleanup
|
|
6
|
+
*
|
|
7
|
+
* To use as a non-singleton service, add to providers array in @Component decorator:
|
|
8
|
+
* @Component({
|
|
9
|
+
* selector: 'app-example',
|
|
10
|
+
* templateUrl: './example.component.html',
|
|
11
|
+
* providers: [PtrLoadingService]
|
|
12
|
+
* })
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* Set loading: this.loadingService.setLoading(true)
|
|
16
|
+
* - Set loading: this.loadingService.setLoading(true, 'areaName')
|
|
17
|
+
*
|
|
18
|
+
* - Get loading (template): {{ loadingService.isLoading()() }}
|
|
19
|
+
* - Get loading (template): {{ loadingService.isLoading('areaName')() }}
|
|
20
|
+
*
|
|
21
|
+
* - Get loading (component): this.loadingService.isLoading()()
|
|
22
|
+
* - Get loading (component): this.loadingService.isLoading('areaName')()
|
|
23
|
+
*
|
|
24
|
+
* - React to loading changes: effect(() => console.log('Loading:', this.loadingService.isLoading('areaName')()))
|
|
25
|
+
*/
|
|
26
|
+
export class PtrLoadingService {
|
|
27
|
+
globalTaskCount = signal(0);
|
|
28
|
+
loadingAreas = new Map();
|
|
29
|
+
isLoading(area) {
|
|
30
|
+
if (!area) {
|
|
31
|
+
return computed(() => this.globalTaskCount() > 0);
|
|
32
|
+
}
|
|
33
|
+
return computed(() => {
|
|
34
|
+
const areaSignal = this.loadingAreas.get(area);
|
|
35
|
+
return areaSignal ? areaSignal() > 0 : false;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
setLoading(value, area) {
|
|
39
|
+
if (!area) {
|
|
40
|
+
this.updateTaskCount(this.globalTaskCount, value);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this.updateNamedAreaLoading(area, value);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
resetLoading(area) {
|
|
47
|
+
if (!area) {
|
|
48
|
+
this.globalTaskCount.set(0);
|
|
49
|
+
}
|
|
50
|
+
else if (this.loadingAreas.has(area)) {
|
|
51
|
+
this.loadingAreas.get(area).set(0);
|
|
52
|
+
this.loadingAreas.delete(area);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
updateNamedAreaLoading(area, increment) {
|
|
56
|
+
let areaSignal = this.loadingAreas.get(area);
|
|
57
|
+
if (!areaSignal && increment) {
|
|
58
|
+
areaSignal = signal(0);
|
|
59
|
+
this.loadingAreas.set(area, areaSignal);
|
|
60
|
+
}
|
|
61
|
+
if (areaSignal) {
|
|
62
|
+
areaSignal.update(count => {
|
|
63
|
+
const newCount = increment ? count + 1 : Math.max(0, count - 1);
|
|
64
|
+
if (newCount === 0) {
|
|
65
|
+
this.loadingAreas.delete(area);
|
|
66
|
+
}
|
|
67
|
+
return newCount;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
updateTaskCount(taskCount, increment) {
|
|
72
|
+
taskCount.update(count => increment ? count + 1 : Math.max(0, count - 1));
|
|
73
|
+
}
|
|
74
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrLoadingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
75
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrLoadingService, providedIn: 'root' });
|
|
76
|
+
}
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: PtrLoadingService, decorators: [{
|
|
78
|
+
type: Injectable,
|
|
79
|
+
args: [{
|
|
80
|
+
providedIn: 'root'
|
|
81
|
+
}]
|
|
82
|
+
}] });
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF0dGVyL25neC1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvbG9hZGluZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQzs7QUFFckU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBRXBCLGVBQWUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUE2QyxDQUFDO0lBRTVFLFNBQVMsQ0FBQyxJQUFhO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYyxFQUFFLElBQWE7UUFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFhO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBWSxFQUFFLFNBQWtCO1FBQzdELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxFQUFFLENBQUM7WUFDN0IsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO2dCQUNELE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsU0FBNEMsRUFBRSxTQUFrQjtRQUN0RixTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO3VHQXJEVSxpQkFBaUI7MkdBQWpCLGlCQUFpQixjQUZoQixNQUFNOzsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIEluamVjdGFibGUsIHNpZ25hbCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogT3B0aW1pemVkIEFzeW5jIExvYWRpbmcgU2VydmljZSB1c2luZyBBbmd1bGFyIFNpZ25hbHNcclxuICogU3VwcG9ydHMgZ2xvYmFsIGxvYWRpbmcgc3RhdGUgYW5kIG5hbWVkIGxvYWRpbmcgYXJlYXMgd2l0aCBhdXRvLWNsZWFudXBcclxuICpcclxuICogVG8gdXNlIGFzIGEgbm9uLXNpbmdsZXRvbiBzZXJ2aWNlLCBhZGQgdG8gcHJvdmlkZXJzIGFycmF5IGluIEBDb21wb25lbnQgZGVjb3JhdG9yOlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogICBzZWxlY3RvcjogJ2FwcC1leGFtcGxlJyxcclxuICogICB0ZW1wbGF0ZVVybDogJy4vZXhhbXBsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAqICAgcHJvdmlkZXJzOiBbUHRyTG9hZGluZ1NlcnZpY2VdXHJcbiAqIH0pXHJcbiAqXHJcbiAqIFVzYWdlOlxyXG4gKiBTZXQgbG9hZGluZzogdGhpcy5sb2FkaW5nU2VydmljZS5zZXRMb2FkaW5nKHRydWUpXHJcbiAqIC0gU2V0IGxvYWRpbmc6IHRoaXMubG9hZGluZ1NlcnZpY2Uuc2V0TG9hZGluZyh0cnVlLCAnYXJlYU5hbWUnKVxyXG4gKiBcclxuICogLSBHZXQgbG9hZGluZyAodGVtcGxhdGUpOiB7eyBsb2FkaW5nU2VydmljZS5pc0xvYWRpbmcoKSgpIH19XHJcbiAqIC0gR2V0IGxvYWRpbmcgKHRlbXBsYXRlKToge3sgbG9hZGluZ1NlcnZpY2UuaXNMb2FkaW5nKCdhcmVhTmFtZScpKCkgfX1cclxuICogXHJcbiAqIC0gR2V0IGxvYWRpbmcgKGNvbXBvbmVudCk6IHRoaXMubG9hZGluZ1NlcnZpY2UuaXNMb2FkaW5nKCkoKVxyXG4gKiAtIEdldCBsb2FkaW5nIChjb21wb25lbnQpOiB0aGlzLmxvYWRpbmdTZXJ2aWNlLmlzTG9hZGluZygnYXJlYU5hbWUnKSgpXHJcbiAqIFxyXG4gKiAtIFJlYWN0IHRvIGxvYWRpbmcgY2hhbmdlczogZWZmZWN0KCgpID0+IGNvbnNvbGUubG9nKCdMb2FkaW5nOicsIHRoaXMubG9hZGluZ1NlcnZpY2UuaXNMb2FkaW5nKCdhcmVhTmFtZScpKCkpKVxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUHRyTG9hZGluZ1NlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIGdsb2JhbFRhc2tDb3VudCA9IHNpZ25hbCgwKTtcclxuICBwcml2YXRlIGxvYWRpbmdBcmVhcyA9IG5ldyBNYXA8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8bnVtYmVyPj4+KCk7XHJcblxyXG4gIGlzTG9hZGluZyhhcmVhPzogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcclxuICAgIGlmICghYXJlYSkge1xyXG4gICAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gdGhpcy5nbG9iYWxUYXNrQ291bnQoKSA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFyZWFTaWduYWwgPSB0aGlzLmxvYWRpbmdBcmVhcy5nZXQoYXJlYSk7XHJcbiAgICAgIHJldHVybiBhcmVhU2lnbmFsID8gYXJlYVNpZ25hbCgpID4gMCA6IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nKHZhbHVlOiBib29sZWFuLCBhcmVhPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWFyZWEpIHtcclxuICAgICAgdGhpcy51cGRhdGVUYXNrQ291bnQodGhpcy5nbG9iYWxUYXNrQ291bnQsIHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRlTmFtZWRBcmVhTG9hZGluZyhhcmVhLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldExvYWRpbmcoYXJlYT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCFhcmVhKSB7XHJcbiAgICAgIHRoaXMuZ2xvYmFsVGFza0NvdW50LnNldCgwKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkaW5nQXJlYXMuaGFzKGFyZWEpKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ0FyZWFzLmdldChhcmVhKSEuc2V0KDApO1xyXG4gICAgICB0aGlzLmxvYWRpbmdBcmVhcy5kZWxldGUoYXJlYSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU5hbWVkQXJlYUxvYWRpbmcoYXJlYTogc3RyaW5nLCBpbmNyZW1lbnQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCBhcmVhU2lnbmFsID0gdGhpcy5sb2FkaW5nQXJlYXMuZ2V0KGFyZWEpO1xyXG4gICAgaWYgKCFhcmVhU2lnbmFsICYmIGluY3JlbWVudCkge1xyXG4gICAgICBhcmVhU2lnbmFsID0gc2lnbmFsKDApO1xyXG4gICAgICB0aGlzLmxvYWRpbmdBcmVhcy5zZXQoYXJlYSwgYXJlYVNpZ25hbCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFyZWFTaWduYWwpIHtcclxuICAgICAgYXJlYVNpZ25hbC51cGRhdGUoY291bnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0NvdW50ID0gaW5jcmVtZW50ID8gY291bnQgKyAxIDogTWF0aC5tYXgoMCwgY291bnQgLSAxKTtcclxuICAgICAgICBpZiAobmV3Q291bnQgPT09IDApIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ0FyZWFzLmRlbGV0ZShhcmVhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0NvdW50O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVGFza0NvdW50KHRhc2tDb3VudDogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPG51bWJlcj4+LCBpbmNyZW1lbnQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRhc2tDb3VudC51cGRhdGUoY291bnQgPT4gaW5jcmVtZW50ID8gY291bnQgKyAxIDogTWF0aC5tYXgoMCwgY291bnQgLSAxKSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -5,5 +5,7 @@ export * from './lib/menu/menu.component';
|
|
|
5
5
|
export * from './lib/forms/interfaces';
|
|
6
6
|
export { PtrFormComponent } from './lib/forms/form/form.component';
|
|
7
7
|
export { PtrTitleComponent } from './lib/ptr-title/ptr-title.component';
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
export { PtrLoadingSpinnerComponent } from './lib/loading-spinner/loading-spinner.component';
|
|
9
|
+
export { PtrLoadingSpinnerDirective } from './lib/loading-spinner/loading-spinner.directive';
|
|
10
|
+
export { PtrLoadingService } from './lib/services/loading.service';
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3BhdHRlci9uZ3gtY29tcG9uZW50cy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM3RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUU3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtY29tcG9uZW50c1xyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lbnUvbWVudS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZm9ybXMvaW50ZXJmYWNlcyc7XHJcbmV4cG9ydCB7IFB0ckZvcm1Db21wb25lbnQgfSBmcm9tICcuL2xpYi9mb3Jtcy9mb3JtL2Zvcm0uY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB7IFB0clRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvcHRyLXRpdGxlL3B0ci10aXRsZS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHsgUHRyTG9hZGluZ1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2xpYi9sb2FkaW5nLXNwaW5uZXIvbG9hZGluZy1zcGlubmVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IFB0ckxvYWRpbmdTcGlubmVyRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvbG9hZGluZy1zcGlubmVyL2xvYWRpbmctc3Bpbm5lci5kaXJlY3RpdmUnO1xyXG5cclxuZXhwb3J0IHsgUHRyTG9hZGluZ1NlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9sb2FkaW5nLnNlcnZpY2UnOyJdfQ==
|