coer-elements 0.0.64 → 0.0.66
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +63 -0
- package/components/lib/coer-accordion/coer-accordion.component.d.ts +1 -1
- package/components/lib/coer-datebox/coer-datebox.component.d.ts +49 -0
- package/components/lib/coer-filebox/coer-filebox.component.d.ts +1 -1
- package/components/lib/coer-grid/coer-grid.extension.d.ts +2 -2
- package/components/lib/coer-modal/coer-modal.component.d.ts +1 -1
- package/components/lib/components.module.d.ts +37 -33
- package/components/public-api.d.ts +1 -0
- package/fesm2022/coer-elements-components.mjs +256 -93
- package/fesm2022/coer-elements-components.mjs.map +1 -1
- package/fesm2022/coer-elements-directives.mjs +14 -12
- package/fesm2022/coer-elements-directives.mjs.map +1 -1
- package/fesm2022/coer-elements-pipes.mjs +16 -16
- package/fesm2022/coer-elements-pipes.mjs.map +1 -1
- package/fesm2022/coer-elements-tools.mjs +20 -14
- package/fesm2022/coer-elements-tools.mjs.map +1 -1
- package/fesm2022/coer-elements.mjs +4 -4
- package/fesm2022/coer-elements.mjs.map +1 -1
- package/package.json +3 -17
- package/styles/angular-material.scss +18 -13
- package/styles/bootstrap.scss +1 -6
- package/styles/coer-elements.css +993 -2866
- package/styles/colors.scss +50 -60
- package/styles/index.scss +9 -9
- package/styles/layout.scss +10 -0
- package/styles/scroll-bar.scss +5 -5
- package/tools/lib/date-time.class.d.ts +3 -1
- package/tools/lib/page.class.d.ts +1 -1
- package/tools/lib/section.class.d.ts +1 -1
- package/tools/lib/tools.d.ts +9 -9
- package/esm2022/coer-elements.mjs +0 -5
- package/esm2022/components/coer-elements-components.mjs +0 -5
- package/esm2022/components/lib/coer-accordion/coer-accordion.component.mjs +0 -53
- package/esm2022/components/lib/coer-button/coer-button.component.mjs +0 -138
- package/esm2022/components/lib/coer-checkbox/coer-checkbox.component.mjs +0 -83
- package/esm2022/components/lib/coer-filebox/coer-filebox.component.mjs +0 -102
- package/esm2022/components/lib/coer-form/coer-form.component.mjs +0 -107
- package/esm2022/components/lib/coer-grid/coer-grid.component.mjs +0 -512
- package/esm2022/components/lib/coer-grid/coer-grid.extension.mjs +0 -409
- package/esm2022/components/lib/coer-list/coer-list.component.mjs +0 -130
- package/esm2022/components/lib/coer-modal/coer-modal.component.mjs +0 -107
- package/esm2022/components/lib/coer-numberbox/coer-numberbox.component.mjs +0 -258
- package/esm2022/components/lib/coer-page-title/coer-page-title.component.mjs +0 -44
- package/esm2022/components/lib/coer-selectbox/coer-selectbox.component.mjs +0 -342
- package/esm2022/components/lib/coer-sidenav/coer-menu-option/coer-menu-option.component.mjs +0 -103
- package/esm2022/components/lib/coer-sidenav/coer-sidenav.component.mjs +0 -194
- package/esm2022/components/lib/coer-sidenav/coer-toolbar/coer-toolbar.component.mjs +0 -33
- package/esm2022/components/lib/coer-sidenav/coer-tree-accordion/coer-tree-accordion.component.mjs +0 -116
- package/esm2022/components/lib/coer-switch/coer-switch.component.mjs +0 -93
- package/esm2022/components/lib/coer-tab/coer-tab.component.mjs +0 -120
- package/esm2022/components/lib/coer-textarea/coer-textarea.component.mjs +0 -156
- package/esm2022/components/lib/coer-textbox/coer-textbox.component.mjs +0 -221
- package/esm2022/components/lib/components.module.mjs +0 -188
- package/esm2022/components/public-api.mjs +0 -20
- package/esm2022/directives/coer-elements-directives.mjs +0 -5
- package/esm2022/directives/lib/coer-ref.directive.mjs +0 -23
- package/esm2022/directives/lib/directives.module.mjs +0 -25
- package/esm2022/directives/lib/life-cycle.directive.mjs +0 -33
- package/esm2022/directives/public-api.mjs +0 -4
- package/esm2022/index.mjs +0 -54
- package/esm2022/interfaces/coer-elements-interfaces.mjs +0 -5
- package/esm2022/interfaces/lib/app-source.interface.mjs +0 -2
- package/esm2022/interfaces/lib/box-button.interface.mjs +0 -2
- package/esm2022/interfaces/lib/bulk-load.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-filebox/file-image.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-filebox/file.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-button-by-row.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-checkbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-coer-numberbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-coer-selectbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-coer-switch.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-coer-textbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-column.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-data-source.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-header-button.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-header-export-button.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-header.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-import.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-input-checkbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-input-switch-change.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-input-textbox.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-item.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-keyup-enter.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-length.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-search.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-grid/grid-sort.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-menu/menu-option-selected.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-menu/menu-selected.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-menu/menu.interface.mjs +0 -2
- package/esm2022/interfaces/lib/coer-ref.interface.mjs +0 -2
- package/esm2022/interfaces/lib/image.interface.mjs +0 -2
- package/esm2022/interfaces/lib/page-title/breadcrumb.interface.mjs +0 -2
- package/esm2022/interfaces/lib/page-title/go-back.interface.mjs +0 -2
- package/esm2022/interfaces/lib/screen-size.interface.mjs +0 -2
- package/esm2022/interfaces/lib/service/http-request.interface.mjs +0 -2
- package/esm2022/interfaces/lib/service/http-response.interface.mjs +0 -2
- package/esm2022/interfaces/lib/service/patch.interface.mjs +0 -2
- package/esm2022/interfaces/public-api.mjs +0 -42
- package/esm2022/pipes/coer-elements-pipes.mjs +0 -5
- package/esm2022/pipes/lib/html.pipe.mjs +0 -18
- package/esm2022/pipes/lib/no-image.pipe.mjs +0 -23
- package/esm2022/pipes/lib/numeric-format.pipe.mjs +0 -15
- package/esm2022/pipes/lib/pipes.module.mjs +0 -31
- package/esm2022/pipes/public-api.mjs +0 -5
- package/esm2022/signals/coer-elements-signals.mjs +0 -5
- package/esm2022/signals/lib/breakpoint.signal.mjs +0 -4
- package/esm2022/signals/lib/is-loading.signal.mjs +0 -3
- package/esm2022/signals/lib/is-menu-open.signal.mjs +0 -3
- package/esm2022/signals/lib/is-modal-open.signal.mjs +0 -3
- package/esm2022/signals/lib/navigation.signal.mjs +0 -3
- package/esm2022/signals/public-api.mjs +0 -6
- package/esm2022/tools/coer-elements-tools.mjs +0 -5
- package/esm2022/tools/lib/breadcrumbs.class.mjs +0 -63
- package/esm2022/tools/lib/coer-alert/coer-alert.component.mjs +0 -229
- package/esm2022/tools/lib/coer-grid.templates.mjs +0 -34
- package/esm2022/tools/lib/colors.class.mjs +0 -68
- package/esm2022/tools/lib/control-value.class.mjs +0 -46
- package/esm2022/tools/lib/date-time.class.mjs +0 -29
- package/esm2022/tools/lib/files.class.mjs +0 -91
- package/esm2022/tools/lib/filters.class.mjs +0 -57
- package/esm2022/tools/lib/menu.class.mjs +0 -23
- package/esm2022/tools/lib/page.class.mjs +0 -187
- package/esm2022/tools/lib/screen.class.mjs +0 -51
- package/esm2022/tools/lib/section.class.mjs +0 -60
- package/esm2022/tools/lib/service.class.mjs +0 -408
- package/esm2022/tools/lib/source.class.mjs +0 -80
- package/esm2022/tools/lib/tools.mjs +0 -232
- package/esm2022/tools/public-api.mjs +0 -16
@@ -1,107 +0,0 @@
|
|
1
|
-
import { Component, inject, input } from '@angular/core';
|
2
|
-
import { CoerAlert, Tools } from 'coer-elements/tools';
|
3
|
-
import * as i0 from "@angular/core";
|
4
|
-
import * as i1 from "@angular/forms";
|
5
|
-
export class CoerForm {
|
6
|
-
constructor() {
|
7
|
-
//Injection
|
8
|
-
this.alert = inject(CoerAlert);
|
9
|
-
this.formGroup = input.required();
|
10
|
-
this.isLoading = input(false);
|
11
|
-
this.isDisabled = input(false);
|
12
|
-
/** */
|
13
|
-
this.IsInvalidControl = (formControlName) => {
|
14
|
-
return Tools.IsNotNull(this.formGroup().get(formControlName))
|
15
|
-
? (this.formGroup().get(formControlName).touched && this.formGroup().get(formControlName).invalid)
|
16
|
-
: true;
|
17
|
-
};
|
18
|
-
}
|
19
|
-
get _isDisabled() {
|
20
|
-
return this.isLoading() || this.isDisabled();
|
21
|
-
}
|
22
|
-
/** */
|
23
|
-
TouchForm() {
|
24
|
-
this.formGroup().markAllAsTouched();
|
25
|
-
}
|
26
|
-
/** */
|
27
|
-
SetControlValue(formControlName, value) {
|
28
|
-
if (Tools.IsNotNull(this.formGroup().get(formControlName))) {
|
29
|
-
this.formGroup().get(formControlName).setValue(value);
|
30
|
-
}
|
31
|
-
else {
|
32
|
-
this.alert.Warning(`${formControlName} Control`, 'Not Found');
|
33
|
-
}
|
34
|
-
}
|
35
|
-
/** */
|
36
|
-
GetControlValue(formControlName, alternative = null) {
|
37
|
-
return Tools.IsNotNull(this.formGroup().get(formControlName))
|
38
|
-
? this.formGroup().get(formControlName).value
|
39
|
-
: alternative;
|
40
|
-
}
|
41
|
-
/** */
|
42
|
-
HasControlValue(formControlName) {
|
43
|
-
return Tools.IsNotNull(this.formGroup().get(formControlName))
|
44
|
-
? Tools.IsNotOnlyWhiteSpace(this.formGroup().get(formControlName).value)
|
45
|
-
: false;
|
46
|
-
}
|
47
|
-
/** Get form value */
|
48
|
-
GetValue() {
|
49
|
-
return Tools.BreakReference(this.formGroup().value);
|
50
|
-
}
|
51
|
-
/** */
|
52
|
-
Reset(properties = null) {
|
53
|
-
if (Tools.IsNull(properties))
|
54
|
-
this.formGroup().reset();
|
55
|
-
else
|
56
|
-
this.formGroup().reset(properties);
|
57
|
-
}
|
58
|
-
/**
|
59
|
-
* Mark all controls as touched.
|
60
|
-
* If form is invalid emit a warning and focus first invalid control.
|
61
|
-
*/
|
62
|
-
IsValid() {
|
63
|
-
this.TouchForm();
|
64
|
-
if (this.formGroup().invalid) {
|
65
|
-
this.alert.Warning('Please complete the required fields', 'Instructions', 'fa-solid fa-list-check');
|
66
|
-
this.Focus();
|
67
|
-
}
|
68
|
-
return {
|
69
|
-
isValid: this.formGroup().valid,
|
70
|
-
formValue: this.GetValue()
|
71
|
-
};
|
72
|
-
}
|
73
|
-
/** Focus the especified control or first invalid control */
|
74
|
-
Focus(formControl = null) {
|
75
|
-
const formControlCollection = new Map();
|
76
|
-
const formControlErrorCollection = new Map();
|
77
|
-
for (const property of Tools.GetObjectProperties(this.formGroup().controls)) {
|
78
|
-
formControlErrorCollection.set(property, this.formGroup().controls[property].errors);
|
79
|
-
const htmlElement = document.querySelector(`[formcontrolname='${property}'] input`);
|
80
|
-
if (Tools.IsNotNull(htmlElement))
|
81
|
-
formControlCollection.set(property, htmlElement);
|
82
|
-
}
|
83
|
-
if (formControlCollection.size > 0) {
|
84
|
-
if (Tools.IsNull(formControl)) {
|
85
|
-
for (const [property, error] of formControlErrorCollection) {
|
86
|
-
if (Tools.IsNotNull(error)) {
|
87
|
-
formControl = property;
|
88
|
-
break;
|
89
|
-
}
|
90
|
-
}
|
91
|
-
if (Tools.IsNull(formControl)) {
|
92
|
-
formControl = Array.from(formControlCollection.keys())[0];
|
93
|
-
}
|
94
|
-
}
|
95
|
-
const element = formControlCollection.get(formControl);
|
96
|
-
if (Tools.IsNotNull(element))
|
97
|
-
element.focus();
|
98
|
-
}
|
99
|
-
}
|
100
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerForm, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
101
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: CoerForm, selector: "coer-form", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<form [formGroup]=\"formGroup()\" autocomplete=\"off\" class=\"coer-form\">\r\n <fieldset [disabled]=\"_isDisabled\">\r\n <ng-content></ng-content>\r\n </fieldset>\r\n</form>", styles: [""], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
|
102
|
-
}
|
103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CoerForm, decorators: [{
|
104
|
-
type: Component,
|
105
|
-
args: [{ selector: 'coer-form', template: "<form [formGroup]=\"formGroup()\" autocomplete=\"off\" class=\"coer-form\">\r\n <fieldset [disabled]=\"_isDisabled\">\r\n <ng-content></ng-content>\r\n </fieldset>\r\n</form>" }]
|
106
|
-
}] });
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZXItZWxlbWVudHMvY29tcG9uZW50cy9saWIvY29lci1mb3JtL2NvZXItZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL2NvbXBvbmVudHMvbGliL2NvZXItZm9ybS9jb2VyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQU92RCxNQUFNLE9BQU8sUUFBUTtJQUxyQjtRQU9JLFdBQVc7UUFDSCxVQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNCLGNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFhLENBQUM7UUFDeEMsY0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNsQyxlQUFVLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBYzFDLE1BQU07UUFDQyxxQkFBZ0IsR0FBRyxDQUFDLGVBQXVCLEVBQVcsRUFBRTtZQUMzRCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDekQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3BHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDZixD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QUFRO21HQUFSLFFBQVEsMmNDVHJCLDZMQUlPOzs0RkRLTSxRQUFRO2tCQUxwQixTQUFTOytCQUNJLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb2VyQWxlcnQsIFRvb2xzIH0gZnJvbSAnY29lci1lbGVtZW50cy90b29scyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY29lci1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2VyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL2NvZXItZm9ybS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENvZXJGb3JtIHtcclxuXHJcbiAgICAvL0luamVjdGlvblxyXG4gICAgcHJpdmF0ZSBhbGVydCA9IGluamVjdChDb2VyQWxlcnQpO1xyXG5cclxuICAgIHB1YmxpYyBmb3JtR3JvdXAgPSBpbnB1dC5yZXF1aXJlZDxGb3JtR3JvdXA+KCk7XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHVibGljIGlzRGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgX2lzRGlzYWJsZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nKCkgfHwgdGhpcy5pc0Rpc2FibGVkKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIFRvdWNoRm9ybSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cCgpLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgSXNJbnZhbGlkQ29udHJvbCA9IChmb3JtQ29udHJvbE5hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIHJldHVybiBUb29scy5Jc05vdE51bGwodGhpcy5mb3JtR3JvdXAoKS5nZXQoZm9ybUNvbnRyb2xOYW1lKSlcclxuICAgICAgICAgICAgPyAodGhpcy5mb3JtR3JvdXAoKS5nZXQoZm9ybUNvbnRyb2xOYW1lKSEudG91Y2hlZCAmJiB0aGlzLmZvcm1Hcm91cCgpLmdldChmb3JtQ29udHJvbE5hbWUpIS5pbnZhbGlkKVxyXG4gICAgICAgICAgICA6IHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIFNldENvbnRyb2xWYWx1ZShmb3JtQ29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChUb29scy5Jc05vdE51bGwodGhpcy5mb3JtR3JvdXAoKS5nZXQoZm9ybUNvbnRyb2xOYW1lKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAoKS5nZXQoZm9ybUNvbnRyb2xOYW1lKSEuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnQuV2FybmluZyhgJHtmb3JtQ29udHJvbE5hbWV9IENvbnRyb2xgLCAnTm90IEZvdW5kJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBHZXRDb250cm9sVmFsdWUoZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIGFsdGVybmF0aXZlOiBhbnkgPSBudWxsKTogYW55IHtcclxuICAgICAgICByZXR1cm4gVG9vbHMuSXNOb3ROdWxsKHRoaXMuZm9ybUdyb3VwKCkuZ2V0KGZvcm1Db250cm9sTmFtZSkpXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtR3JvdXAoKS5nZXQoZm9ybUNvbnRyb2xOYW1lKSEudmFsdWVcclxuICAgICAgICAgICAgOiBhbHRlcm5hdGl2ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgSGFzQ29udHJvbFZhbHVlKGZvcm1Db250cm9sTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIFRvb2xzLklzTm90TnVsbCh0aGlzLmZvcm1Hcm91cCgpLmdldChmb3JtQ29udHJvbE5hbWUpKVxyXG4gICAgICAgICAgICA/IFRvb2xzLklzTm90T25seVdoaXRlU3BhY2UodGhpcy5mb3JtR3JvdXAoKS5nZXQoZm9ybUNvbnRyb2xOYW1lKSEudmFsdWUpXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBHZXQgZm9ybSB2YWx1ZSAqL1xyXG4gICAgcHVibGljIEdldFZhbHVlPFQ+KCk6IFQge1xyXG4gICAgICAgIHJldHVybiBUb29scy5CcmVha1JlZmVyZW5jZSh0aGlzLmZvcm1Hcm91cCgpLnZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgUmVzZXQ8VD4ocHJvcGVydGllczogVCB8IG51bGwgPSBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKFRvb2xzLklzTnVsbChwcm9wZXJ0aWVzKSkgdGhpcy5mb3JtR3JvdXAoKS5yZXNldCgpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5mb3JtR3JvdXAoKS5yZXNldChwcm9wZXJ0aWVzKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIGFsbCBjb250cm9scyBhcyB0b3VjaGVkLlxyXG4gICAgICogSWYgZm9ybSBpcyBpbnZhbGlkIGVtaXQgYSB3YXJuaW5nIGFuZCBmb2N1cyBmaXJzdCBpbnZhbGlkIGNvbnRyb2wuXHJcbiAgICAqL1xyXG4gICAgcHVibGljIElzVmFsaWQoKTogeyBpc1ZhbGlkOiBib29sZWFuLCBmb3JtVmFsdWU6IGFueSB9IHtcclxuICAgICAgICB0aGlzLlRvdWNoRm9ybSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAoKS5pbnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnQuV2FybmluZygnUGxlYXNlIGNvbXBsZXRlIHRoZSByZXF1aXJlZCBmaWVsZHMnLCAnSW5zdHJ1Y3Rpb25zJywgJ2ZhLXNvbGlkIGZhLWxpc3QtY2hlY2snKTtcclxuICAgICAgICAgICAgdGhpcy5Gb2N1cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaXNWYWxpZDogdGhpcy5mb3JtR3JvdXAoKS52YWxpZCxcclxuICAgICAgICAgICAgZm9ybVZhbHVlOiB0aGlzLkdldFZhbHVlKClcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogRm9jdXMgdGhlIGVzcGVjaWZpZWQgY29udHJvbCBvciBmaXJzdCBpbnZhbGlkIGNvbnRyb2wgKi9cclxuICAgIHB1YmxpYyBGb2N1cyhmb3JtQ29udHJvbDogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmb3JtQ29udHJvbENvbGxlY3Rpb24gPSBuZXcgTWFwPHN0cmluZywgRWxlbWVudD4oKTtcclxuICAgICAgICBjb25zdCBmb3JtQ29udHJvbEVycm9yQ29sbGVjdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4oKTtcclxuXHJcbiAgICAgICAgZm9yKGNvbnN0IHByb3BlcnR5IG9mIFRvb2xzLkdldE9iamVjdFByb3BlcnRpZXModGhpcy5mb3JtR3JvdXAoKS5jb250cm9scykpIHtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xFcnJvckNvbGxlY3Rpb24uc2V0KHByb3BlcnR5LCB0aGlzLmZvcm1Hcm91cCgpLmNvbnRyb2xzW3Byb3BlcnR5XS5lcnJvcnMpO1xyXG4gICAgICAgICAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtmb3JtY29udHJvbG5hbWU9JyR7cHJvcGVydHl9J10gaW5wdXRgKVxyXG4gICAgICAgICAgICBpZihUb29scy5Jc05vdE51bGwoaHRtbEVsZW1lbnQpKSBmb3JtQ29udHJvbENvbGxlY3Rpb24uc2V0KHByb3BlcnR5LCBodG1sRWxlbWVudCEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoZm9ybUNvbnRyb2xDb2xsZWN0aW9uLnNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmKFRvb2xzLklzTnVsbChmb3JtQ29udHJvbCkpIHtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBbcHJvcGVydHksIGVycm9yXSBvZiBmb3JtQ29udHJvbEVycm9yQ29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChUb29scy5Jc05vdE51bGwoZXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sID0gcHJvcGVydHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZihUb29scy5Jc051bGwoZm9ybUNvbnRyb2wpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2wgPSBBcnJheS5mcm9tKGZvcm1Db250cm9sQ29sbGVjdGlvbi5rZXlzKCkpWzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50OiBhbnkgPSBmb3JtQ29udHJvbENvbGxlY3Rpb24uZ2V0KGZvcm1Db250cm9sISk7XHJcbiAgICAgICAgICAgIGlmKFRvb2xzLklzTm90TnVsbChlbGVtZW50KSkgZWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwKClcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cImNvZXItZm9ybVwiPlxyXG4gICAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJfaXNEaXNhYmxlZFwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvZmllbGRzZXQ+XHJcbjwvZm9ybT4iXX0=
|