coer-elements 0.0.64 → 0.0.65

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. package/components/lib/coer-accordion/coer-accordion.component.d.ts +1 -1
  2. package/components/lib/coer-datebox/coer-datebox.component.d.ts +49 -0
  3. package/components/lib/coer-filebox/coer-filebox.component.d.ts +1 -1
  4. package/components/lib/coer-grid/coer-grid.extension.d.ts +2 -2
  5. package/components/lib/coer-modal/coer-modal.component.d.ts +1 -1
  6. package/components/lib/components.module.d.ts +37 -33
  7. package/components/public-api.d.ts +1 -0
  8. package/fesm2022/coer-elements-components.mjs +256 -93
  9. package/fesm2022/coer-elements-components.mjs.map +1 -1
  10. package/fesm2022/coer-elements-directives.mjs +14 -12
  11. package/fesm2022/coer-elements-directives.mjs.map +1 -1
  12. package/fesm2022/coer-elements-pipes.mjs +16 -16
  13. package/fesm2022/coer-elements-pipes.mjs.map +1 -1
  14. package/fesm2022/coer-elements-tools.mjs +20 -14
  15. package/fesm2022/coer-elements-tools.mjs.map +1 -1
  16. package/fesm2022/coer-elements.mjs +4 -4
  17. package/fesm2022/coer-elements.mjs.map +1 -1
  18. package/package.json +1 -15
  19. package/styles/angular-material.scss +18 -13
  20. package/styles/bootstrap.scss +1 -6
  21. package/styles/coer-elements.css +993 -2866
  22. package/styles/colors.scss +50 -60
  23. package/styles/index.scss +9 -9
  24. package/styles/layout.scss +10 -0
  25. package/styles/scroll-bar.scss +5 -5
  26. package/tools/lib/date-time.class.d.ts +3 -1
  27. package/tools/lib/page.class.d.ts +1 -1
  28. package/tools/lib/section.class.d.ts +1 -1
  29. package/tools/lib/tools.d.ts +9 -9
  30. package/esm2022/coer-elements.mjs +0 -5
  31. package/esm2022/components/coer-elements-components.mjs +0 -5
  32. package/esm2022/components/lib/coer-accordion/coer-accordion.component.mjs +0 -53
  33. package/esm2022/components/lib/coer-button/coer-button.component.mjs +0 -138
  34. package/esm2022/components/lib/coer-checkbox/coer-checkbox.component.mjs +0 -83
  35. package/esm2022/components/lib/coer-filebox/coer-filebox.component.mjs +0 -102
  36. package/esm2022/components/lib/coer-form/coer-form.component.mjs +0 -107
  37. package/esm2022/components/lib/coer-grid/coer-grid.component.mjs +0 -512
  38. package/esm2022/components/lib/coer-grid/coer-grid.extension.mjs +0 -409
  39. package/esm2022/components/lib/coer-list/coer-list.component.mjs +0 -130
  40. package/esm2022/components/lib/coer-modal/coer-modal.component.mjs +0 -107
  41. package/esm2022/components/lib/coer-numberbox/coer-numberbox.component.mjs +0 -258
  42. package/esm2022/components/lib/coer-page-title/coer-page-title.component.mjs +0 -44
  43. package/esm2022/components/lib/coer-selectbox/coer-selectbox.component.mjs +0 -342
  44. package/esm2022/components/lib/coer-sidenav/coer-menu-option/coer-menu-option.component.mjs +0 -103
  45. package/esm2022/components/lib/coer-sidenav/coer-sidenav.component.mjs +0 -194
  46. package/esm2022/components/lib/coer-sidenav/coer-toolbar/coer-toolbar.component.mjs +0 -33
  47. package/esm2022/components/lib/coer-sidenav/coer-tree-accordion/coer-tree-accordion.component.mjs +0 -116
  48. package/esm2022/components/lib/coer-switch/coer-switch.component.mjs +0 -93
  49. package/esm2022/components/lib/coer-tab/coer-tab.component.mjs +0 -120
  50. package/esm2022/components/lib/coer-textarea/coer-textarea.component.mjs +0 -156
  51. package/esm2022/components/lib/coer-textbox/coer-textbox.component.mjs +0 -221
  52. package/esm2022/components/lib/components.module.mjs +0 -188
  53. package/esm2022/components/public-api.mjs +0 -20
  54. package/esm2022/directives/coer-elements-directives.mjs +0 -5
  55. package/esm2022/directives/lib/coer-ref.directive.mjs +0 -23
  56. package/esm2022/directives/lib/directives.module.mjs +0 -25
  57. package/esm2022/directives/lib/life-cycle.directive.mjs +0 -33
  58. package/esm2022/directives/public-api.mjs +0 -4
  59. package/esm2022/index.mjs +0 -54
  60. package/esm2022/interfaces/coer-elements-interfaces.mjs +0 -5
  61. package/esm2022/interfaces/lib/app-source.interface.mjs +0 -2
  62. package/esm2022/interfaces/lib/box-button.interface.mjs +0 -2
  63. package/esm2022/interfaces/lib/bulk-load.interface.mjs +0 -2
  64. package/esm2022/interfaces/lib/coer-filebox/file-image.interface.mjs +0 -2
  65. package/esm2022/interfaces/lib/coer-filebox/file.interface.mjs +0 -2
  66. package/esm2022/interfaces/lib/coer-grid/grid-button-by-row.interface.mjs +0 -2
  67. package/esm2022/interfaces/lib/coer-grid/grid-checkbox.interface.mjs +0 -2
  68. package/esm2022/interfaces/lib/coer-grid/grid-coer-numberbox.interface.mjs +0 -2
  69. package/esm2022/interfaces/lib/coer-grid/grid-coer-selectbox.interface.mjs +0 -2
  70. package/esm2022/interfaces/lib/coer-grid/grid-coer-switch.interface.mjs +0 -2
  71. package/esm2022/interfaces/lib/coer-grid/grid-coer-textbox.interface.mjs +0 -2
  72. package/esm2022/interfaces/lib/coer-grid/grid-column.interface.mjs +0 -2
  73. package/esm2022/interfaces/lib/coer-grid/grid-data-source.interface.mjs +0 -2
  74. package/esm2022/interfaces/lib/coer-grid/grid-header-button.interface.mjs +0 -2
  75. package/esm2022/interfaces/lib/coer-grid/grid-header-export-button.interface.mjs +0 -2
  76. package/esm2022/interfaces/lib/coer-grid/grid-header.interface.mjs +0 -2
  77. package/esm2022/interfaces/lib/coer-grid/grid-import.interface.mjs +0 -2
  78. package/esm2022/interfaces/lib/coer-grid/grid-input-checkbox.interface.mjs +0 -2
  79. package/esm2022/interfaces/lib/coer-grid/grid-input-switch-change.interface.mjs +0 -2
  80. package/esm2022/interfaces/lib/coer-grid/grid-input-textbox.interface.mjs +0 -2
  81. package/esm2022/interfaces/lib/coer-grid/grid-item.interface.mjs +0 -2
  82. package/esm2022/interfaces/lib/coer-grid/grid-keyup-enter.interface.mjs +0 -2
  83. package/esm2022/interfaces/lib/coer-grid/grid-length.interface.mjs +0 -2
  84. package/esm2022/interfaces/lib/coer-grid/grid-search.interface.mjs +0 -2
  85. package/esm2022/interfaces/lib/coer-grid/grid-sort.interface.mjs +0 -2
  86. package/esm2022/interfaces/lib/coer-menu/menu-option-selected.interface.mjs +0 -2
  87. package/esm2022/interfaces/lib/coer-menu/menu-selected.interface.mjs +0 -2
  88. package/esm2022/interfaces/lib/coer-menu/menu.interface.mjs +0 -2
  89. package/esm2022/interfaces/lib/coer-ref.interface.mjs +0 -2
  90. package/esm2022/interfaces/lib/image.interface.mjs +0 -2
  91. package/esm2022/interfaces/lib/page-title/breadcrumb.interface.mjs +0 -2
  92. package/esm2022/interfaces/lib/page-title/go-back.interface.mjs +0 -2
  93. package/esm2022/interfaces/lib/screen-size.interface.mjs +0 -2
  94. package/esm2022/interfaces/lib/service/http-request.interface.mjs +0 -2
  95. package/esm2022/interfaces/lib/service/http-response.interface.mjs +0 -2
  96. package/esm2022/interfaces/lib/service/patch.interface.mjs +0 -2
  97. package/esm2022/interfaces/public-api.mjs +0 -42
  98. package/esm2022/pipes/coer-elements-pipes.mjs +0 -5
  99. package/esm2022/pipes/lib/html.pipe.mjs +0 -18
  100. package/esm2022/pipes/lib/no-image.pipe.mjs +0 -23
  101. package/esm2022/pipes/lib/numeric-format.pipe.mjs +0 -15
  102. package/esm2022/pipes/lib/pipes.module.mjs +0 -31
  103. package/esm2022/pipes/public-api.mjs +0 -5
  104. package/esm2022/signals/coer-elements-signals.mjs +0 -5
  105. package/esm2022/signals/lib/breakpoint.signal.mjs +0 -4
  106. package/esm2022/signals/lib/is-loading.signal.mjs +0 -3
  107. package/esm2022/signals/lib/is-menu-open.signal.mjs +0 -3
  108. package/esm2022/signals/lib/is-modal-open.signal.mjs +0 -3
  109. package/esm2022/signals/lib/navigation.signal.mjs +0 -3
  110. package/esm2022/signals/public-api.mjs +0 -6
  111. package/esm2022/tools/coer-elements-tools.mjs +0 -5
  112. package/esm2022/tools/lib/breadcrumbs.class.mjs +0 -63
  113. package/esm2022/tools/lib/coer-alert/coer-alert.component.mjs +0 -229
  114. package/esm2022/tools/lib/coer-grid.templates.mjs +0 -34
  115. package/esm2022/tools/lib/colors.class.mjs +0 -68
  116. package/esm2022/tools/lib/control-value.class.mjs +0 -46
  117. package/esm2022/tools/lib/date-time.class.mjs +0 -29
  118. package/esm2022/tools/lib/files.class.mjs +0 -91
  119. package/esm2022/tools/lib/filters.class.mjs +0 -57
  120. package/esm2022/tools/lib/menu.class.mjs +0 -23
  121. package/esm2022/tools/lib/page.class.mjs +0 -187
  122. package/esm2022/tools/lib/screen.class.mjs +0 -51
  123. package/esm2022/tools/lib/section.class.mjs +0 -60
  124. package/esm2022/tools/lib/service.class.mjs +0 -408
  125. package/esm2022/tools/lib/source.class.mjs +0 -80
  126. package/esm2022/tools/lib/tools.mjs +0 -232
  127. 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=