mmhglobal-dynamicform 2.36.5 → 2.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +29 -2
  2. package/esm2020/lib/components/buttonfieldbase.component.mjs +10 -1
  3. package/esm2020/lib/components/datalistingfieldbase.component.mjs +111 -2
  4. package/esm2020/lib/dropdown_buttons/dropdown_buttons.component.mjs +109 -0
  5. package/esm2020/lib/kcard/kcard.component.mjs +2 -2
  6. package/esm2020/lib/ksplitter/ksplitter.component.mjs +19 -2
  7. package/esm2020/lib/mmhglobal-dynamicform.module.mjs +10 -5
  8. package/esm2020/lib/services/main.service.mjs +7 -3
  9. package/esm2020/lib/services/zcomponent.debug.service.mjs +7 -3
  10. package/esm2020/lib/sfdatetimepicker/sfdatetimepicker.component.mjs +60 -6
  11. package/esm2020/lib/zbuttons/zbuttons.component.mjs +14 -25
  12. package/esm2020/lib/zgrid/container/zgrid-container.component.mjs +7 -7
  13. package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +10 -10
  14. package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +18 -12
  15. package/esm2020/lib/zgrid/zgrid.component.mjs +155 -180
  16. package/esm2020/lib/ztreelist/ztreelist.component.mjs +92 -123
  17. package/esm2020/lib/zudf/zudf.component.mjs +2 -2
  18. package/esm2020/public-api.mjs +2 -1
  19. package/fesm2015/mmhglobal-dynamicform.mjs +566 -330
  20. package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
  21. package/fesm2020/mmhglobal-dynamicform.mjs +565 -331
  22. package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
  23. package/lib/components/buttonfieldbase.component.d.ts +3 -0
  24. package/lib/components/datalistingfieldbase.component.d.ts +9 -0
  25. package/lib/dropdown_buttons/dropdown_buttons.component.d.ts +21 -0
  26. package/lib/ksplitter/ksplitter.component.d.ts +2 -0
  27. package/lib/mmhglobal-dynamicform.module.d.ts +42 -41
  28. package/lib/sfdatetimepicker/sfdatetimepicker.component.d.ts +10 -2
  29. package/lib/zbuttons/zbuttons.component.d.ts +1 -3
  30. package/lib/zgrid/container/zgrid-container.component.d.ts +5 -5
  31. package/lib/zgrid/date-range-cell-filter.component.d.ts +2 -2
  32. package/lib/zgrid/zgrid.component.d.ts +15 -18
  33. package/lib/ztreelist/ztreelist.component.d.ts +5 -7
  34. package/package.json +1 -1
  35. package/public-api.d.ts +1 -0
package/README.md CHANGED
@@ -3,8 +3,35 @@
3
3
  This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.13.
4
4
 
5
5
  ## Changelog
6
-
7
- ### 2.36.5
6
+ ### Upcoming
7
+ -
8
+
9
+ ### 2.38.0
10
+ - [date-range-cell-filter, ztreelist, zgrid] Enhancement: Replace string concatenation (+) with string interpolation ($) for better readability and performance. Replace double quotes to single quotes for consistency and readability.
11
+ - [zgrid.component.ts] - Bug Fix: Fix the tooltip for nowrap cell text misalignment issue by attaching it to the correct `<td>`, not the overflowing `<span>`, ensuring proper alignment and visibility.
12
+ - [ztreelist, zgrid, datalistingfieldbase] - Enhancement: Moved `showTooltip` from zgrid and ztreelist to `DataListingFieldBase`, allowing inheritance for the `listingfield` component type.
13
+ - [zudf] - Bug Fix: Fix the issue where a null zmodel value in the zudf component causes an error, preventing users from saving or submitting the record.
14
+ - [sfdatetimepicker] - Enhancement: Implement the "ReadOnly" property within the field element.
15
+ - [sfdatetimepicker] - Enhancement:Implement validation checking for sfdatetimepicker. Ensure that error messages are displayed consistently and clearly across various input fields.
16
+ - [sfdatetimepicker] - Enhancement: Added styling (ngClass = 'updateElementClasses') to control the "ReadOnly" property.
17
+
18
+ ### 2.37.2 ~~2.37.1~~ ~~2.37.0~~
19
+ - [ksplitter] - Enhancement: Added `resizePanelByIndex()` to allow users to programmatically resize panels.
20
+ - [zbuttons] - Enhancement: Added support to render component types "a" and "zbuttons_container". #CR2412-009848.
21
+ - [dropdown_buttons] - Added new component `dropdown_buttons`. #CR2501-010011.
22
+ - [main.service] - Bug Fix: If a button uses `DisableTriggerTimer`, the spinner won't be hidden automatically when the form is invalid or not dirty.
23
+ - [kcard] - Bug Fix: Corrected improper usage of the CSS custom property for `padding-top`.
24
+ - [zgrid] - Enhancement: Implemented the `EnableHiding` property from the field element, determining the `includeInChooser` setting in `zgrid.component.html` to control column visibility in the column chooser.
25
+ - [zgrid] - Enhancement: Introduced a truncate function to limit tooltip text to 200 characters, preventing overflow issues.
26
+ - [zgrid] - Enhancement: Renamed the "Restore Settings" button to "Reset to Default".
27
+ - [zgrid] - Enhancement: Reduced the "Select All" column width from 60px to 40px for better layout optimization.
28
+ - [zgrid] - Enhancement: Added a confirmation prompt when clicking "Save Settings" for the second time or when selecting "Reset to Default". A toast message confirms the successful update after saving.
29
+ - [zgrid] - Enhancement: Moved `setCellStyleCondition` and `cellStyleCondition` to the `DataListingFieldBase` class, allowing inheritance for the `listingfield` component type.
30
+ - [zgrid.html] - Bug Fix: Moved unknown character "-l".
31
+ - [ztreelist] - Enhancement: Added support for `CellStyle` configuration from the Field Element property, similar to `zgrid`.
32
+ - [ztreelist] - Added: Implemented a PopOver feature in `ztreelist.component.html`, similar to `zgrid`.
33
+
34
+ ### 2.36.5 ~~2.36.4~~ ~~2.36.3~~
8
35
  - [textarea] - Bug Fix: Fix the character count to include all characters including white space. #CR2501-010006.
9
36
  - [fieldbase, zgrid, zudf] - Changed: Renamed Validator names in ZComponentHelper.
10
37
  - [uiappmenucontent] - Enhanced: Introduced a badge loading feature and relocated the menuOnClick event to main.service for shared use with the side menu.
@@ -59,6 +59,15 @@ export class ButtonFieldBase extends FieldBase {
59
59
  btn.text = newText;
60
60
  }
61
61
  }
62
+ getButtonDisableTriggerValue(data, button) {
63
+ return button.DisableTrigger != undefined ? button.DisableTrigger : (data.DisableTrigger != undefined ? data.DisableTrigger : false);
64
+ }
65
+ disableButton(buttonName, isDisabled = true) {
66
+ const selectedButton = this.items.find(x => x.name == buttonName);
67
+ if (selectedButton) {
68
+ selectedButton.disabled = isDisabled;
69
+ }
70
+ }
62
71
  }
63
72
  ButtonFieldBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ButtonFieldBase, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
64
73
  ButtonFieldBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ButtonFieldBase, selector: "ng-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true });
@@ -68,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
68
77
  template: ``,
69
78
  }]
70
79
  }], ctorParameters: function () { return [{ type: i1.ZComponentService }]; } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uZmllbGRiYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9uZmllbGRiYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU8xQywyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWxELE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBTzFFLHdDQUF3QztBQUN4QyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxTQUFTO0lBTTVDLFlBQ1MsZ0JBQW1DO1FBRTFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRmpCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFONUMsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUMxQixjQUFTLEdBQWUsRUFBRSxDQUFDO1FBQzNCLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsY0FBUyxHQUFHLEtBQUssQ0FBQztJQU1sQixDQUFDO0lBRU0sYUFBYTtRQUNsQixPQUFPLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU0sWUFBWSxDQUFDLFNBQVM7UUFDM0IsSUFBSSxTQUFTLEtBQUssS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBVztRQUMvQixJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXBELElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxTQUFTLEVBQUU7WUFDYixTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckU7UUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakQsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFO2dCQUNwQixXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNoQztTQUNGO1FBRUQsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2RTtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFTSxXQUFXLENBQUMsTUFBVztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDdEIsSUFBSSxFQUFFLGFBQWE7WUFDbkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQ3pCLElBQUksRUFBRSxJQUFJO1NBQ2MsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxLQUFpQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxZQUFZLENBQUMsT0FBZSxFQUFFLElBQWE7UUFDaEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7U0FDcEI7SUFDSCxDQUFDOzs0R0FoRVUsZUFBZTtnR0FBZixlQUFlLDJFQUpoQixFQUFFOzJGQUlELGVBQWU7a0JBTDNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBGaWVsZEJhc2UgfSBmcm9tIFwiLi9maWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGU6IGBgLFxyXG59KVxyXG5cclxuLy8gRm9yOiB6YnV0dG9ucywgem1mYiwgendvcmtmbG93YnV0dG9uc1xyXG5leHBvcnQgY2xhc3MgQnV0dG9uRmllbGRCYXNlIGV4dGVuZHMgRmllbGRCYXNlIHtcclxuICBsZWZ0QnRuczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHJpZ2h0QnRuczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgRmlyc3RaYnRuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0Q29tcG9uZW50KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gc3VwZXIuaW5pdENvbXBvbmVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzQnRuVmlzaWJsZShmaWVsZEV4cHIpIHtcclxuICAgIGlmIChmaWVsZEV4cHIgIT09IGZhbHNlICYmICFmaWVsZEV4cHIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpc1Zpc2libGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgZmllbGRFeHByKTtcclxuICAgIHJldHVybiBpc1Zpc2libGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QnV0dG9uTGFiZWwoYnV0dG9uOiBhbnkpIHtcclxuICAgIGxldCBsYWJlbFJlc3VsdCA9IGJ1dHRvbi5MYWJlbCB8fCBidXR0b24uTmFtZSB8fCAnJztcclxuXHJcbiAgICBsZXQgbGFiZWxFeHByID0gbGFiZWxSZXN1bHQubWF0Y2goL157ey4qfX0kL2dpKTtcclxuICAgIGlmIChsYWJlbEV4cHIpIHtcclxuICAgICAgbGFiZWxFeHByID0gbGFiZWxFeHByWzBdLnNsaWNlKDIsIC0yKTtcclxuICAgICAgbGFiZWxSZXN1bHQgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUobGFiZWxFeHByLCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYnV0dG9uLkF0dHJpYnV0ZXMpIHtcclxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IEpTT04ucGFyc2UoYnV0dG9uLkF0dHJpYnV0ZXMpO1xyXG4gICAgICBpZiAoYXR0cmlidXRlcy5MYWJlbCkge1xyXG4gICAgICAgIGxhYmVsUmVzdWx0ID0gYXR0cmlidXRlcy5MYWJlbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChsYWJlbFJlc3VsdC5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICBsYWJlbFJlc3VsdCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShsYWJlbFJlc3VsdCwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhYmVsUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1dHRvbkNsaWNrKGJ1dHRvbjogYW55KSB7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwiYnV0dG9uQ2xpY2tcIixcclxuICAgICAgdGFyZ2V0OiBidXR0b24uQ2xpY2tFdmVudCxcclxuICAgICAgZGF0YTogbnVsbFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYW5zbGF0ZUJ1dHRvbnNMYWJlbChpdGVtczogQXJyYXk8YW55Pik6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTZXJ2aWNlLnRyYW5zbGF0ZUJ1dHRvbkNvbXBvbmVudChpdGVtcywgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TGFiZWxUZXh0KG5ld1RleHQ6IHN0cmluZywgbmFtZT86IHN0cmluZykge1xyXG4gICAgY29uc3QgYnRuID0gdGhpcy5pdGVtcy5maW5kKHggPT4geC5uYW1lID09PSBuYW1lKTtcclxuICAgIGlmIChidG4pIHtcclxuICAgICAgYnRuLnRleHQgPSBuZXdUZXh0O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uZmllbGRiYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9uZmllbGRiYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU8xQywyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWxELE9BQU8sRUFBRSxnQkFBZ0IsRUFBaUMsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBT2xGLHdDQUF3QztBQUN4QyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxTQUFTO0lBTTVDLFlBQ1MsZ0JBQW1DO1FBRTFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRmpCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFONUMsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUMxQixjQUFTLEdBQWUsRUFBRSxDQUFDO1FBQzNCLFVBQUssR0FBZSxFQUFFLENBQUM7UUFDdkIsY0FBUyxHQUFHLEtBQUssQ0FBQztJQU1sQixDQUFDO0lBRU0sYUFBYTtRQUNsQixPQUFPLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU0sWUFBWSxDQUFDLFNBQVM7UUFDM0IsSUFBSSxTQUFTLEtBQUssS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBVztRQUMvQixJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXBELElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxTQUFTLEVBQUU7WUFDYixTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckU7UUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakQsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFO2dCQUNwQixXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNoQztTQUNGO1FBRUQsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2RTtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFTSxXQUFXLENBQUMsTUFBVztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDdEIsSUFBSSxFQUFFLGFBQWE7WUFDbkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQ3pCLElBQUksRUFBRSxJQUFJO1NBQ2MsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxLQUFpQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxZQUFZLENBQUMsT0FBZSxFQUFFLElBQWE7UUFDaEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRVMsNEJBQTRCLENBQUMsSUFBWSxFQUFFLE1BQVc7UUFDOUQsT0FBTyxNQUFNLENBQUMsY0FBYyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkksQ0FBQztJQUVNLGFBQWEsQ0FBQyxVQUFrQixFQUFFLGFBQXNCLElBQUk7UUFDakUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksY0FBYyxFQUFFO1lBQ2xCLGNBQWMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQzs7NEdBM0VVLGVBQWU7Z0dBQWYsZUFBZSwyRUFKaEIsRUFBRTsyRkFJRCxlQUFlO2tCQUwzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxFQUFFO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgRmllbGRCYXNlIH0gZnJvbSBcIi4vZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBaRmllbGQgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGU6IGBgLFxyXG59KVxyXG5cclxuLy8gRm9yOiB6YnV0dG9ucywgem1mYiwgendvcmtmbG93YnV0dG9uc1xyXG5leHBvcnQgY2xhc3MgQnV0dG9uRmllbGRCYXNlIGV4dGVuZHMgRmllbGRCYXNlIHtcclxuICBsZWZ0QnRuczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHJpZ2h0QnRuczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgRmlyc3RaYnRuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0Q29tcG9uZW50KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gc3VwZXIuaW5pdENvbXBvbmVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzQnRuVmlzaWJsZShmaWVsZEV4cHIpIHtcclxuICAgIGlmIChmaWVsZEV4cHIgIT09IGZhbHNlICYmICFmaWVsZEV4cHIpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpc1Zpc2libGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgZmllbGRFeHByKTtcclxuICAgIHJldHVybiBpc1Zpc2libGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QnV0dG9uTGFiZWwoYnV0dG9uOiBhbnkpIHtcclxuICAgIGxldCBsYWJlbFJlc3VsdCA9IGJ1dHRvbi5MYWJlbCB8fCBidXR0b24uTmFtZSB8fCAnJztcclxuXHJcbiAgICBsZXQgbGFiZWxFeHByID0gbGFiZWxSZXN1bHQubWF0Y2goL157ey4qfX0kL2dpKTtcclxuICAgIGlmIChsYWJlbEV4cHIpIHtcclxuICAgICAgbGFiZWxFeHByID0gbGFiZWxFeHByWzBdLnNsaWNlKDIsIC0yKTtcclxuICAgICAgbGFiZWxSZXN1bHQgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUobGFiZWxFeHByLCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYnV0dG9uLkF0dHJpYnV0ZXMpIHtcclxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IEpTT04ucGFyc2UoYnV0dG9uLkF0dHJpYnV0ZXMpO1xyXG4gICAgICBpZiAoYXR0cmlidXRlcy5MYWJlbCkge1xyXG4gICAgICAgIGxhYmVsUmVzdWx0ID0gYXR0cmlidXRlcy5MYWJlbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChsYWJlbFJlc3VsdC5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICBsYWJlbFJlc3VsdCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShsYWJlbFJlc3VsdCwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhYmVsUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1dHRvbkNsaWNrKGJ1dHRvbjogYW55KSB7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwiYnV0dG9uQ2xpY2tcIixcclxuICAgICAgdGFyZ2V0OiBidXR0b24uQ2xpY2tFdmVudCxcclxuICAgICAgZGF0YTogbnVsbFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYW5zbGF0ZUJ1dHRvbnNMYWJlbChpdGVtczogQXJyYXk8YW55Pik6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTZXJ2aWNlLnRyYW5zbGF0ZUJ1dHRvbkNvbXBvbmVudChpdGVtcywgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TGFiZWxUZXh0KG5ld1RleHQ6IHN0cmluZywgbmFtZT86IHN0cmluZykge1xyXG4gICAgY29uc3QgYnRuID0gdGhpcy5pdGVtcy5maW5kKHggPT4geC5uYW1lID09PSBuYW1lKTtcclxuICAgIGlmIChidG4pIHtcclxuICAgICAgYnRuLnRleHQgPSBuZXdUZXh0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEJ1dHRvbkRpc2FibGVUcmlnZ2VyVmFsdWUoZGF0YTogWkZpZWxkLCBidXR0b246IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGJ1dHRvbi5EaXNhYmxlVHJpZ2dlciAhPSB1bmRlZmluZWQgPyBidXR0b24uRGlzYWJsZVRyaWdnZXIgOiAoZGF0YS5EaXNhYmxlVHJpZ2dlciAhPSB1bmRlZmluZWQgPyBkYXRhLkRpc2FibGVUcmlnZ2VyIDogZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRpc2FibGVCdXR0b24oYnV0dG9uTmFtZTogc3RyaW5nLCBpc0Rpc2FibGVkOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRCdXR0b24gPSB0aGlzLml0ZW1zLmZpbmQoeCA9PiB4Lm5hbWUgPT0gYnV0dG9uTmFtZSk7XHJcbiAgICBpZiAoc2VsZWN0ZWRCdXR0b24pIHtcclxuICAgICAgc2VsZWN0ZWRCdXR0b24uZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -3,6 +3,7 @@ import { Component, EventEmitter, Output, ViewChild } from "@angular/core";
3
3
  /********** Ionic **********/
4
4
  /********** Plugin **********/
5
5
  import { isObservable, map, of } from "rxjs";
6
+ import { TooltipDirective } from "@progress/kendo-angular-tooltip";
6
7
  /********** Component & Service **********/
7
8
  import { FieldBase } from "./fieldbase.component";
8
9
  import { ZComponentHelper } from "mmhglobal-zcore";
@@ -47,6 +48,42 @@ export class DataListingFieldBase extends FieldBase {
47
48
  }
48
49
  return style;
49
50
  }
51
+ cellStyleCondition(col, colValue) {
52
+ if (col['CellStyleCondition']) {
53
+ const conditionHighlightcol = col['CellStyleCondition'];
54
+ let conditionResult = false;
55
+ conditionHighlightcol.forEach(data => {
56
+ if (!conditionResult) {
57
+ if (data['Value'] == colValue) {
58
+ conditionResult = true;
59
+ }
60
+ }
61
+ });
62
+ return conditionResult;
63
+ }
64
+ return false;
65
+ }
66
+ setCellStyleCondition(col, colValue) {
67
+ if (col['CellStyleCondition']) {
68
+ const conditionHighlightcol = col['CellStyleCondition'];
69
+ let conditionResult = '';
70
+ conditionHighlightcol.forEach(data => {
71
+ if (data['Value'] == colValue) {
72
+ if (data['BackgroundColor']) {
73
+ conditionResult = 'background-color:' + data['BackgroundColor'] + ';';
74
+ }
75
+ if (data['Color']) {
76
+ conditionResult += 'color:' + data['Color'] + ';';
77
+ }
78
+ if (data['StyleExpression']) {
79
+ conditionResult += data['StyleExpression'];
80
+ }
81
+ }
82
+ });
83
+ return conditionResult;
84
+ }
85
+ return false;
86
+ }
50
87
  translateToolBarItems() {
51
88
  return this.componentService.translateToolBarItems(this.toolbarItemList, this.group);
52
89
  }
@@ -148,9 +185,78 @@ export class DataListingFieldBase extends FieldBase {
148
185
  });
149
186
  }
150
187
  }
188
+ //#endregion
189
+ //#region Tooltip
190
+ showTooltip(e) {
191
+ if (!this.data.IsShowToolTip)
192
+ return; // Exit if tooltips are disabled
193
+ const element = e.target; // Get the element that triggered the event
194
+ if (this.isCommandColumn(element)) {
195
+ this.tooltipDir.hide();
196
+ return;
197
+ }
198
+ const targetCell = this.getTargetCell(element); // Check if it's a command column (buttons, actions, etc.)
199
+ if (!targetCell || !targetCell.textContent?.trim()) {
200
+ this.tooltipDir.hide();
201
+ return;
202
+ }
203
+ const visibleWidth = this.calculateVisibleWidth(targetCell);
204
+ const finalWidth = this.calculateTooltipWidth(targetCell, visibleWidth);
205
+ // Show tooltip only if text is truncated within cell
206
+ if (targetCell.offsetWidth < targetCell.scrollWidth) {
207
+ this.tooltipDir.tooltipWidth = finalWidth;
208
+ this.tooltipDir.toggle(targetCell);
209
+ }
210
+ else {
211
+ this.tooltipDir.hide();
212
+ }
213
+ }
214
+ // Helper function to check if it's a command column
215
+ isCommandColumn(element) {
216
+ return element.classList.contains('k-command-cell');
217
+ }
218
+ // Helper function to determine the target cell
219
+ getTargetCell(element) {
220
+ if (element.nodeName === 'TD' || element.nodeName === 'TH') {
221
+ return element;
222
+ }
223
+ else if (element.nodeName === 'SPAN' && element.classList.contains('grid-cell-data')) {
224
+ return element.parentElement;
225
+ }
226
+ return null;
227
+ }
228
+ // Helper function to calculate the visible width of the cell within the grid container
229
+ calculateVisibleWidth(targetCell) {
230
+ const cellRect = targetCell.getBoundingClientRect();
231
+ const gridContainer = document.querySelector('.k-grid');
232
+ if (!gridContainer) {
233
+ console.warn('Grid container not found.');
234
+ return 0;
235
+ }
236
+ const gridRect = gridContainer.getBoundingClientRect();
237
+ const visibleLeft = Math.max(cellRect.left, gridRect.left);
238
+ const visibleRight = Math.min(cellRect.right, gridRect.right);
239
+ return Math.max(0, visibleRight - visibleLeft);
240
+ }
241
+ // Helper function to calculate the tooltip width based on visible width and column size
242
+ calculateTooltipWidth(targetCell, visibleWidth) {
243
+ const maxWidth = window.innerWidth / 2;
244
+ // Use characters width if the visible width is too small (less than 100px)
245
+ let columnWidth = targetCell.offsetWidth;
246
+ if (columnWidth < 100) {
247
+ const tooltipText = targetCell.innerText || targetCell.textContent || '';
248
+ const charWidth = 9; // Average width of a character
249
+ columnWidth = tooltipText.length * charWidth;
250
+ }
251
+ // If visible width is too small, use the full column width
252
+ if (visibleWidth < 100) {
253
+ visibleWidth = columnWidth;
254
+ }
255
+ return Math.min(maxWidth, visibleWidth);
256
+ }
151
257
  }
152
258
  DataListingFieldBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: DataListingFieldBase, deps: [{ token: i1.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
153
- DataListingFieldBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: DataListingFieldBase, selector: "ng-component", outputs: { showFormPage: "showFormPage" }, viewQueries: [{ propertyName: "popovercontainer", first: true, predicate: ["popovercontainer"], descendants: true }, { propertyName: "dataItemContextMenu", first: true, predicate: ["dataitemcontextmenu"], descendants: true }], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
259
+ DataListingFieldBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: DataListingFieldBase, selector: "ng-component", outputs: { showFormPage: "showFormPage" }, viewQueries: [{ propertyName: "popovercontainer", first: true, predicate: ["popovercontainer"], descendants: true }, { propertyName: "dataItemContextMenu", first: true, predicate: ["dataitemcontextmenu"], descendants: true }, { propertyName: "tooltipDir", first: true, predicate: TooltipDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
154
260
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: DataListingFieldBase, decorators: [{
155
261
  type: Component,
156
262
  args: [{
@@ -164,5 +270,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
164
270
  }], dataItemContextMenu: [{
165
271
  type: ViewChild,
166
272
  args: ['dataitemcontextmenu']
273
+ }], tooltipDir: [{
274
+ type: ViewChild,
275
+ args: [TooltipDirective]
167
276
  }] } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWxpc3RpbmdmaWVsZGJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvY29tcG9uZW50cy9kYXRhbGlzdGluZ2ZpZWxkYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0UsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHekQsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBUzNELDRDQUE0QztBQUM1QyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsU0FBUztJQWNqRCxZQUNTLGdCQUFtQztRQUUxQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUZqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBZGxDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUkzQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNwQixvQkFBZSxHQUFHO1lBQ3ZCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2xDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ2hELEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUN0RCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtZ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a0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hFO2lCQUNJO2dCQUNILE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQzVDO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBTTtRQUMvQixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0I7YUFDSTtZQUNILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FDbkI7Z0JBQ0UsSUFBSSxFQUFFLE1BQU0sSUFBSSxFQUFFO2FBQ25CLENBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQzs7aUhBMUtVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLHlWQUpyQixFQUFFOzJGQUlELG9CQUFvQjtrQkFMaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsRUFBRTtpQkFDYjt3R0FJVyxZQUFZO3NCQUFyQixNQUFNO2dCQUNtRCxnQkFBZ0I7c0JBQXpFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNkLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgbWFwLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFBvcG92ZXJDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdG9vbHRpcFwiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBGaWVsZEJhc2UgfSBmcm9tIFwiLi9maWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50SGVscGVyLCBaRmllbGQgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IFJvd0NsYXNzQXJncyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkXCI7XHJcbmltcG9ydCB7IENvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4uL2VtYmVkLWNvbXBvbmVudHMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5jb21wb25lbnRcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogYGAsXHJcbn0pXHJcblxyXG4vLyBGb3I6IHpncmlkLCB6dHJlZSwgenRyZWVsaXN0LCB6Z2FudHRjaGFydFxyXG5leHBvcnQgY2xhc3MgRGF0YUxpc3RpbmdGaWVsZEJhc2UgZXh0ZW5kcyBGaWVsZEJhc2Uge1xyXG4gIEBPdXRwdXQoKSBzaG93Rm9ybVBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQFZpZXdDaGlsZChcInBvcG92ZXJjb250YWluZXJcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHByaXZhdGUgcG9wb3ZlcmNvbnRhaW5lcjogUG9wb3ZlckNvbnRhaW5lckRpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKCdkYXRhaXRlbWNvbnRleHRtZW51JykgZGF0YUl0ZW1Db250ZXh0TWVudTogQ29udGV4dE1lbnVDb21wb25lbnQ7XHJcblxyXG4gIHByb3RlY3RlZCBwb3BvdmVyRGF0YSA9IFtdO1xyXG4gIHB1YmxpYyB0b29sYmFySXRlbUxpc3QgPSBbXHJcbiAgICB7IG5hbWU6IFwiU2VhcmNoXCIsIHRleHQ6IFwiU2VhcmNoXCIgfSxcclxuICAgIHsgbmFtZTogXCJTYXZlIFNldHRpbmdzXCIsIHRleHQ6IFwiU2F2ZSBTZXR0aW5nc1wiIH0sXHJcbiAgICB7IG5hbWU6IFwiUmVzdG9yZSBTZXR0aW5nc1wiLCB0ZXh0OiBcIlJlc3RvcmUgU2V0dGluZ3NcIiB9LFxyXG4gICAgeyBuYW1lOiBcIkFkZCBOZXdcIiwgdGV4dDogXCJBZGQgTmV3XCIgfSxcclxuICAgIHsgbmFtZTogXCJBZHZhbmNlZCBTZWFyY2hcIiwgdGV4dDogXCJBZHZhbmNlZCBTZWFyY2hcIiB9LFxyXG4gIF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0Q29tcG9uZW50KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gc3VwZXIuaW5pdENvbXBvbmVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEdyaWRDb2x1bW5TdHlsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUzID8gdGhpcy5jb21wb25lbnRTZXJ2aWNlLmNvbnZlcnRTdHlsZVN0cmluZ1RvT2JqZWN0KHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTMpIDoge31cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHcmlkSGVhZGVyU3R5bGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNCA/IHRoaXMuY29tcG9uZW50U2VydmljZS5jb252ZXJ0U3R5bGVTdHJpbmdUb09iamVjdCh0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU0KSA6IHt9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0R3JpZEZvb3RlclN0eWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTkgPyB0aGlzLmNvbXBvbmVudFNlcnZpY2UuY29udmVydFN0eWxlU3RyaW5nVG9PYmplY3QodGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlOSkgOiB7fVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxTdHlsZShjb2x1bW5GaWVsZDogWkZpZWxkLCBkYXRhSXRlbTogYW55KTogYW55IHtcclxuICAgIGNvbnN0IHN0eWxlID0gY29sdW1uRmllbGRbYFN0eWxlMTBgXTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgc3R5bGUpO1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKGRhdGFJdGVtLCBjb2x1bW5GaWVsZCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZnVuYyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhbnNsYXRlVG9vbEJhckl0ZW1zKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTZXJ2aWNlLnRyYW5zbGF0ZVRvb2xCYXJJdGVtcyh0aGlzLnRvb2xiYXJJdGVtTGlzdCwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b29sYmFySXRlbUxpc3QuZmluZCh0ID0+IHQubmFtZSA9PT0gbmFtZSk/LnRleHQgfHwgbmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cmFuc2xhdGVDb2x1bW5IZWFkZXIoY29sdW1uczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U2VydmljZS50cmFuc2xhdGVHcmlkQ29sdW1uSGVhZGVyKGNvbHVtbnMsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd0NhbGxiYWNrKGNvbnRleHQ6IFJvd0NsYXNzQXJncyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkRhdGFSb3dDbGFzcyAmJiB0eXBlb2YgdGhpcy5kYXRhLkRhdGFSb3dDbGFzcyA9PSAnc3RyaW5nJyAmJiB0aGlzLmRhdGEuRGF0YVJvd0NsYXNzLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLkRhdGFSb3dDbGFzcywgdGhpcy5ncm91cCk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gZnVuYyhjb250ZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBQb3BvdmVyXHJcbiAgcHVibGljIHNldHVwUG9wb3ZlckZlYXR1cmUoY29sdW1uczogQXJyYXk8YW55PiwgZ3JpZERhdGE6IEFycmF5PGFueT4pIHtcclxuICAgIGNvbnN0IHBvcG92ZXJDb2xzID0gY29sdW1ucy5maWx0ZXIoYyA9PiBjLlBvcE92ZXJDb250ZW50KTtcclxuICAgIGlmIChwb3BvdmVyQ29scy5sZW5ndGggPiAwICYmIGdyaWREYXRhLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgZGF0YSBvZiBncmlkRGF0YSkge1xyXG4gICAgICAgIHRoaXMucG9wb3ZlckRhdGEucHVzaChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWQ6IGRhdGEuSWQsXHJcbiAgICAgICAgICAgIHBvcG92ZXJDb250ZW50OiB0aGlzLmdldFBvcE92ZXJDb250ZW50QnlDb2wocG9wb3ZlckNvbHMsIGRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dQb3BPdmVyKGNvbHVtbkZpZWxkOiBaRmllbGQsIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghY29sdW1uRmllbGQuUG9wT3ZlckNvbnRlbnQgfHwgIXRoaXMucG9wb3ZlcmNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnBvcG92ZXJjb250YWluZXIuaGlkZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHRoaXMucG9wb3ZlcmNvbnRhaW5lci5oaWRlKCk7XHJcbiAgICBpZiAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0RJVicgfHwgZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1NQQU4nKSB7XHJcbiAgICAgIHRoaXMucG9wb3ZlcmNvbnRhaW5lci5zaG93KGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlUG9wT3ZlcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudG9FbGVtZW50ICYmIGV2ZW50LnRvRWxlbWVudC5ub2RlTmFtZSA9PSBcIkRJVlwiICYmIChldmVudC50b0VsZW1lbnQucGFyZW50RWxlbWVudC5ub2RlTmFtZSA9PSBcIlREXCIgfHwgKGV2ZW50LnRvRWxlbWVudC5wYXJlbnRFbGVtZW50Lm5vZGVOYW1lID09IFwiRElWXCIgJiYgZXZlbnQudG9FbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKFwiay1wb3BvdmVyLWJvZHlcIikpKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvcG92ZXJjb250YWluZXIuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbnRleHREYXRhKGFuY2hvcjogSFRNTEVsZW1lbnQpIHtcclxuICAgIGlmIChhbmNob3IuYXR0cmlidXRlc1tcImRhdGEtaWRcIl0gJiYgYW5jaG9yLmF0dHJpYnV0ZXNbXCJkYXRhLWlkXCJdLnZhbHVlICYmIGFuY2hvci5hdHRyaWJ1dGVzW1wiY29sdW1uLW5hbWVcIl0gJiYgYW5jaG9yLmF0dHJpYnV0ZXNbXCJjb2x1bW4tbmFtZVwiXS52YWx1ZSkge1xyXG4gICAgICBjb25zdCByZWNvcmRJZCA9IGFuY2hvci5hdHRyaWJ1dGVzW1wiZGF0YS1pZFwiXS52YWx1ZTtcclxuICAgICAgY29uc3QgY29sdW1uTmFtZSA9IGFuY2hvci5hdHRyaWJ1dGVzW1wiY29sdW1uLW5hbWVcIl0udmFsdWU7XHJcbiAgICAgIGNvbnN0IHBvcG92ZXJBbGxDb2xEYXRhID0gdGhpcy5wb3BvdmVyRGF0YS5maW5kKGQgPT4gZC5pZCA9PSByZWNvcmRJZCk7XHJcbiAgICAgIGNvbnN0IHBvcG92ZXJDb2xEYXRhID0gcG9wb3ZlckFsbENvbERhdGEucG9wb3ZlckNvbnRlbnQuZmluZChkID0+IGQuY29sdW1uTmFtZSA9PSBjb2x1bW5OYW1lKTtcclxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocG9wb3ZlckNvbERhdGEuY29udGVudClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UG9wT3ZlckNvbnRlbnRCeUNvbChjb2x1bW5zOiBBcnJheTxhbnk+LCBkYXRhOiBhbnkpOiBBcnJheTxhbnk+IHtcclxuICAgIGNvbnN0IHBvcE92ZXJDb250ZW50ID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuZ2V0UG9wT3ZlckNvbnRlbnQoY29sLCBkYXRhKS5zdWJzY3JpYmUoY29udGVudCA9PiB7XHJcbiAgICAgICAgcG9wT3ZlckNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgICBjb2x1bW5OYW1lOiBjb2wuZmllbGQsXHJcbiAgICAgICAgICBjb250ZW50OiBjb250ZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBvcE92ZXJDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQb3BPdmVyQ29udGVudChjb2x1bW5GaWVsZDogWkZpZWxkLCBkYXRhSXRlbTogYW55KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBjb2x1bW5GaWVsZC5Qb3BPdmVyQ29udGVudDtcclxuICAgIGlmICghY29udGVudCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIHJldHVybiB7XHJcbiAgICAvLyAgIEJvZHk6IGA8Yj4yPC9iPiBtb3JlIGdvYWxzIGFuZCA8Yj41PC9iPiBtb3JlIGNvbXBldGVuY2llcyB0byBncmFkZS4gPGJyLz5cclxuICAgIC8vICAgR29hbCAxOiA8YiBzdHlsZT0nY29sb3I6dmFyKC0taW9uLWNvbG9yLXByaW1hcnkpOyc+MTwvYj4gPGJyLz5gLFxyXG4gICAgLy8gICBCb2R5Q2xhc3M6J2FwcHJhaXNhbC1wb3BvdmVyJ1xyXG4gICAgLy8gfTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY29udGVudCk7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IGZ1bmM7XHJcbiAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICByZXN1bHQgPSBjYWxsRnVuYyhjb2x1bW5GaWVsZCwgZGF0YUl0ZW0pO1xyXG5cclxuICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5waXBlKG1hcChkYXRhID0+IHRoaXMucGFyc2VQb3BvdmVyT2JqZWN0KGRhdGEpKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMucGFyc2VQb3BvdmVyT2JqZWN0KHJlc3VsdCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlUG9wb3Zlck9iamVjdChyZXN1bHQpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIEJvZHk6IHJlc3VsdCB8fCAnJyxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiJdfQ==
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWxpc3RpbmdmaWVsZGJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvY29tcG9uZW50cy9kYXRhbGlzdGluZ2ZpZWxkYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0UsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUE2QixnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlGLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFVLE1BQU0saUJBQWlCLENBQUM7OztBQVMzRCw0Q0FBNEM7QUFDNUMsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFNBQVM7SUFlakQsWUFDUyxnQkFBbUM7UUFFMUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFGakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQWZsQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFLM0MsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDcEIsb0JBQWUsR0FBRztZQUN2QixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNsQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUNoRCxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDdEQs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Q0FBQztJQUMxQyxDQUFDOztpSEF0U1Usb0JBQW9CO3FHQUFwQixvQkFBb0IsK1ZBSXBCLGdCQUFnQix1RUFSakIsRUFBRTsyRkFJRCxvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7d0dBSVcsWUFBWTtzQkFBckIsTUFBTTtnQkFDbUQsZ0JBQWdCO3NCQUF6RSxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDZCxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCO2dCQUNJLFVBQVU7c0JBQTdDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIG1hcCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBQb3BvdmVyQ29udGFpbmVyRGlyZWN0aXZlLCBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRvb2x0aXBcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgRmllbGRCYXNlIH0gZnJvbSBcIi4vZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudEhlbHBlciwgWkZpZWxkIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5pbXBvcnQgeyBSb3dDbGFzc0FyZ3MgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZFwiO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudUNvbXBvbmVudCB9IGZyb20gXCIuLi9lbWJlZC1jb21wb25lbnRzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuY29tcG9uZW50XCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGU6IGBgLFxyXG59KVxyXG5cclxuLy8gRm9yOiB6Z3JpZCwgenRyZWUsIHp0cmVlbGlzdCwgemdhbnR0Y2hhcnRcclxuZXhwb3J0IGNsYXNzIERhdGFMaXN0aW5nRmllbGRCYXNlIGV4dGVuZHMgRmllbGRCYXNlIHtcclxuICBAT3V0cHV0KCkgc2hvd0Zvcm1QYWdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBWaWV3Q2hpbGQoXCJwb3BvdmVyY29udGFpbmVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIHBvcG92ZXJjb250YWluZXI6IFBvcG92ZXJDb250YWluZXJEaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZCgnZGF0YWl0ZW1jb250ZXh0bWVudScpIGRhdGFJdGVtQ29udGV4dE1lbnU6IENvbnRleHRNZW51Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoVG9vbHRpcERpcmVjdGl2ZSkgcHVibGljIHRvb2x0aXBEaXI6IFRvb2x0aXBEaXJlY3RpdmU7XHJcblxyXG4gIHByb3RlY3RlZCBwb3BvdmVyRGF0YSA9IFtdO1xyXG4gIHB1YmxpYyB0b29sYmFySXRlbUxpc3QgPSBbXHJcbiAgICB7IG5hbWU6IFwiU2VhcmNoXCIsIHRleHQ6IFwiU2VhcmNoXCIgfSxcclxuICAgIHsgbmFtZTogXCJTYXZlIFNldHRpbmdzXCIsIHRleHQ6IFwiU2F2ZSBTZXR0aW5nc1wiIH0sXHJcbiAgICB7IG5hbWU6IFwiUmVzdG9yZSBTZXR0aW5nc1wiLCB0ZXh0OiBcIlJlc3RvcmUgU2V0dGluZ3NcIiB9LFxyXG4gICAgeyBuYW1lOiBcIkFkZCBOZXdcIiwgdGV4dDogXCJBZGQgTmV3XCIgfSxcclxuICAgIHsgbmFtZTogXCJBZHZhbmNlZCBTZWFyY2hcIiwgdGV4dDogXCJBZHZhbmNlZCBTZWFyY2hcIiB9LFxyXG4gIF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0Q29tcG9uZW50KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gc3VwZXIuaW5pdENvbXBvbmVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEdyaWRDb2x1bW5TdHlsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUzID8gdGhpcy5jb21wb25lbnRTZXJ2aWNlLmNvbnZlcnRTdHlsZVN0cmluZ1RvT2JqZWN0KHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTMpIDoge31cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHcmlkSGVhZGVyU3R5bGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNCA/IHRoaXMuY29tcG9uZW50U2VydmljZS5jb252ZXJ0U3R5bGVTdHJpbmdUb09iamVjdCh0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU0KSA6IHt9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0R3JpZEZvb3RlclN0eWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTkgPyB0aGlzLmNvbXBvbmVudFNlcnZpY2UuY29udmVydFN0eWxlU3RyaW5nVG9PYmplY3QodGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlOSkgOiB7fVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxTdHlsZShjb2x1bW5GaWVsZDogWkZpZWxkLCBkYXRhSXRlbTogYW55KTogYW55IHtcclxuICAgIGNvbnN0IHN0eWxlID0gY29sdW1uRmllbGRbYFN0eWxlMTBgXTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgc3R5bGUpO1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKGRhdGFJdGVtLCBjb2x1bW5GaWVsZCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZnVuYyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgY29sVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ10pIHtcclxuICAgICAgY29uc3QgY29uZGl0aW9uSGlnaGxpZ2h0Y29sOiBbXSA9IGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ107XHJcbiAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGNvbmRpdGlvbkhpZ2hsaWdodGNvbC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmICghY29uZGl0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAoZGF0YVsnVmFsdWUnXSA9PSBjb2xWYWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29uZGl0aW9uUmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGNvbFZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddKSB7XHJcbiAgICAgIGNvbnN0IGNvbmRpdGlvbkhpZ2hsaWdodGNvbDogW10gPSBjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddO1xyXG4gICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICBjb25kaXRpb25IaWdobGlnaHRjb2wuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YVsnVmFsdWUnXSA9PSBjb2xWYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKGRhdGFbJ0JhY2tncm91bmRDb2xvciddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9ICdiYWNrZ3JvdW5kLWNvbG9yOicgKyBkYXRhWydCYWNrZ3JvdW5kQ29sb3InXSArICc7JztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZGF0YVsnQ29sb3InXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgKz0gJ2NvbG9yOicgKyBkYXRhWydDb2xvciddICsgJzsnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkYXRhWydTdHlsZUV4cHJlc3Npb24nXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgKz0gZGF0YVsnU3R5bGVFeHByZXNzaW9uJ107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb25kaXRpb25SZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhbnNsYXRlVG9vbEJhckl0ZW1zKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTZXJ2aWNlLnRyYW5zbGF0ZVRvb2xCYXJJdGVtcyh0aGlzLnRvb2xiYXJJdGVtTGlzdCwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b29sYmFySXRlbUxpc3QuZmluZCh0ID0+IHQubmFtZSA9PT0gbmFtZSk/LnRleHQgfHwgbmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cmFuc2xhdGVDb2x1bW5IZWFkZXIoY29sdW1uczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U2VydmljZS50cmFuc2xhdGVHcmlkQ29sdW1uSGVhZGVyKGNvbHVtbnMsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd0NhbGxiYWNrKGNvbnRleHQ6IFJvd0NsYXNzQXJncyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkRhdGFSb3dDbGFzcyAmJiB0eXBlb2YgdGhpcy5kYXRhLkRhdGFSb3dDbGFzcyA9PSAnc3RyaW5nJyAmJiB0aGlzLmRhdGEuRGF0YVJvd0NsYXNzLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLkRhdGFSb3dDbGFzcywgdGhpcy5ncm91cCk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gZnVuYyhjb250ZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBQb3BvdmVyXHJcbiAgcHVibGljIHNldHVwUG9wb3ZlckZlYXR1cmUoY29sdW1uczogQXJyYXk8YW55PiwgZ3JpZERhdGE6IEFycmF5PGFueT4pIHtcclxuICAgIGNvbnN0IHBvcG92ZXJDb2xzID0gY29sdW1ucy5maWx0ZXIoYyA9PiBjLlBvcE92ZXJDb250ZW50KTtcclxuICAgIGlmIChwb3BvdmVyQ29scy5sZW5ndGggPiAwICYmIGdyaWREYXRhLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgZGF0YSBvZiBncmlkRGF0YSkge1xyXG4gICAgICAgIHRoaXMucG9wb3ZlckRhdGEucHVzaChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWQ6IGRhdGEuSWQsXHJcbiAgICAgICAgICAgIHBvcG92ZXJDb250ZW50OiB0aGlzLmdldFBvcE92ZXJDb250ZW50QnlDb2wocG9wb3ZlckNvbHMsIGRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dQb3BPdmVyKGNvbHVtbkZpZWxkOiBaRmllbGQsIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghY29sdW1uRmllbGQuUG9wT3ZlckNvbnRlbnQgfHwgIXRoaXMucG9wb3ZlcmNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnBvcG92ZXJjb250YWluZXIuaGlkZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHRoaXMucG9wb3ZlcmNvbnRhaW5lci5oaWRlKCk7XHJcbiAgICBpZiAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ0RJVicgfHwgZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1NQQU4nKSB7XHJcbiAgICAgIHRoaXMucG9wb3ZlcmNvbnRhaW5lci5zaG93KGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlUG9wT3ZlcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudG9FbGVtZW50ICYmIGV2ZW50LnRvRWxlbWVudC5ub2RlTmFtZSA9PSBcIkRJVlwiICYmIChldmVudC50b0VsZW1lbnQucGFyZW50RWxlbWVudC5ub2RlTmFtZSA9PSBcIlREXCIgfHwgKGV2ZW50LnRvRWxlbWVudC5wYXJlbnRFbGVtZW50Lm5vZGVOYW1lID09IFwiRElWXCIgJiYgZXZlbnQudG9FbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKFwiay1wb3BvdmVyLWJvZHlcIikpKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvcG92ZXJjb250YWluZXIuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbnRleHREYXRhKGFuY2hvcjogSFRNTEVsZW1lbnQpIHtcclxuICAgIGlmIChhbmNob3IuYXR0cmlidXRlc1tcImRhdGEtaWRcIl0gJiYgYW5jaG9yLmF0dHJpYnV0ZXNbXCJkYXRhLWlkXCJdLnZhbHVlICYmIGFuY2hvci5hdHRyaWJ1dGVzW1wiY29sdW1uLW5hbWVcIl0gJiYgYW5jaG9yLmF0dHJpYnV0ZXNbXCJjb2x1bW4tbmFtZVwiXS52YWx1ZSkge1xyXG4gICAgICBjb25zdCByZWNvcmRJZCA9IGFuY2hvci5hdHRyaWJ1dGVzW1wiZGF0YS1pZFwiXS52YWx1ZTtcclxuICAgICAgY29uc3QgY29sdW1uTmFtZSA9IGFuY2hvci5hdHRyaWJ1dGVzW1wiY29sdW1uLW5hbWVcIl0udmFsdWU7XHJcbiAgICAgIGNvbnN0IHBvcG92ZXJBbGxDb2xEYXRhID0gdGhpcy5wb3BvdmVyRGF0YS5maW5kKGQgPT4gZC5pZCA9PSByZWNvcmRJZCk7XHJcbiAgICAgIGNvbnN0IHBvcG92ZXJDb2xEYXRhID0gcG9wb3ZlckFsbENvbERhdGEucG9wb3ZlckNvbnRlbnQuZmluZChkID0+IGQuY29sdW1uTmFtZSA9PSBjb2x1bW5OYW1lKTtcclxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocG9wb3ZlckNvbERhdGEuY29udGVudClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UG9wT3ZlckNvbnRlbnRCeUNvbChjb2x1bW5zOiBBcnJheTxhbnk+LCBkYXRhOiBhbnkpOiBBcnJheTxhbnk+IHtcclxuICAgIGNvbnN0IHBvcE92ZXJDb250ZW50ID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuZ2V0UG9wT3ZlckNvbnRlbnQoY29sLCBkYXRhKS5zdWJzY3JpYmUoY29udGVudCA9PiB7XHJcbiAgICAgICAgcG9wT3ZlckNvbnRlbnQucHVzaCh7XHJcbiAgICAgICAgICBjb2x1bW5OYW1lOiBjb2wuZmllbGQsXHJcbiAgICAgICAgICBjb250ZW50OiBjb250ZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBvcE92ZXJDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQb3BPdmVyQ29udGVudChjb2x1bW5GaWVsZDogWkZpZWxkLCBkYXRhSXRlbTogYW55KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBjb2x1bW5GaWVsZC5Qb3BPdmVyQ29udGVudDtcclxuICAgIGlmICghY29udGVudCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIHJldHVybiB7XHJcbiAgICAvLyAgIEJvZHk6IGA8Yj4yPC9iPiBtb3JlIGdvYWxzIGFuZCA8Yj41PC9iPiBtb3JlIGNvbXBldGVuY2llcyB0byBncmFkZS4gPGJyLz5cclxuICAgIC8vICAgR29hbCAxOiA8YiBzdHlsZT0nY29sb3I6dmFyKC0taW9uLWNvbG9yLXByaW1hcnkpOyc+MTwvYj4gPGJyLz5gLFxyXG4gICAgLy8gICBCb2R5Q2xhc3M6J2FwcHJhaXNhbC1wb3BvdmVyJ1xyXG4gICAgLy8gfTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY29udGVudCk7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IGZ1bmM7XHJcbiAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICByZXN1bHQgPSBjYWxsRnVuYyhjb2x1bW5GaWVsZCwgZGF0YUl0ZW0pO1xyXG5cclxuICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5waXBlKG1hcChkYXRhID0+IHRoaXMucGFyc2VQb3BvdmVyT2JqZWN0KGRhdGEpKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMucGFyc2VQb3BvdmVyT2JqZWN0KHJlc3VsdCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlUG9wb3Zlck9iamVjdChyZXN1bHQpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIEJvZHk6IHJlc3VsdCB8fCAnJyxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gVG9vbHRpcFxyXG4gIHB1YmxpYyBzaG93VG9vbHRpcChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YS5Jc1Nob3dUb29sVGlwKSByZXR1cm47IC8vIEV4aXQgaWYgdG9vbHRpcHMgYXJlIGRpc2FibGVkXHJcblxyXG4gICAgY29uc3QgZWxlbWVudCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50OyAvLyBHZXQgdGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50XHJcbiAgICBpZiAodGhpcy5pc0NvbW1hbmRDb2x1bW4oZWxlbWVudCkpIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhcmdldENlbGwgPSB0aGlzLmdldFRhcmdldENlbGwoZWxlbWVudCk7ICAgLy8gQ2hlY2sgaWYgaXQncyBhIGNvbW1hbmQgY29sdW1uIChidXR0b25zLCBhY3Rpb25zLCBldGMuKVxyXG4gICAgaWYgKCF0YXJnZXRDZWxsIHx8ICF0YXJnZXRDZWxsLnRleHRDb250ZW50Py50cmltKCkpIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZpc2libGVXaWR0aCA9IHRoaXMuY2FsY3VsYXRlVmlzaWJsZVdpZHRoKHRhcmdldENlbGwpO1xyXG4gICAgY29uc3QgZmluYWxXaWR0aCA9IHRoaXMuY2FsY3VsYXRlVG9vbHRpcFdpZHRoKHRhcmdldENlbGwsIHZpc2libGVXaWR0aCk7XHJcblxyXG4gICAgLy8gU2hvdyB0b29sdGlwIG9ubHkgaWYgdGV4dCBpcyB0cnVuY2F0ZWQgd2l0aGluIGNlbGxcclxuICAgIGlmICh0YXJnZXRDZWxsLm9mZnNldFdpZHRoIDwgdGFyZ2V0Q2VsbC5zY3JvbGxXaWR0aCkge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIudG9vbHRpcFdpZHRoID0gZmluYWxXaWR0aDtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLnRvZ2dsZSh0YXJnZXRDZWxsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci5oaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgaXQncyBhIGNvbW1hbmQgY29sdW1uXHJcbiAgcHJpdmF0ZSBpc0NvbW1hbmRDb2x1bW4oZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnay1jb21tYW5kLWNlbGwnKTtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHRhcmdldCBjZWxsXHJcbiAgcHJpdmF0ZSBnZXRUYXJnZXRDZWxsKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcclxuICAgIGlmIChlbGVtZW50Lm5vZGVOYW1lID09PSAnVEQnIHx8IGVsZW1lbnQubm9kZU5hbWUgPT09ICdUSCcpIHtcclxuICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdTUEFOJyAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZ3JpZC1jZWxsLWRhdGEnKSkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSB2aXNpYmxlIHdpZHRoIG9mIHRoZSBjZWxsIHdpdGhpbiB0aGUgZ3JpZCBjb250YWluZXJcclxuICBwcml2YXRlIGNhbGN1bGF0ZVZpc2libGVXaWR0aCh0YXJnZXRDZWxsOiBIVE1MRWxlbWVudCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBjZWxsUmVjdCA9IHRhcmdldENlbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBncmlkQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmstZ3JpZCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCFncmlkQ29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignR3JpZCBjb250YWluZXIgbm90IGZvdW5kLicpO1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGNvbnN0IGdyaWRSZWN0ID0gZ3JpZENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICBjb25zdCB2aXNpYmxlTGVmdCA9IE1hdGgubWF4KGNlbGxSZWN0LmxlZnQsIGdyaWRSZWN0LmxlZnQpO1xyXG4gICAgY29uc3QgdmlzaWJsZVJpZ2h0ID0gTWF0aC5taW4oY2VsbFJlY3QucmlnaHQsIGdyaWRSZWN0LnJpZ2h0KTtcclxuICAgIHJldHVybiBNYXRoLm1heCgwLCB2aXNpYmxlUmlnaHQgLSB2aXNpYmxlTGVmdCk7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSB0b29sdGlwIHdpZHRoIGJhc2VkIG9uIHZpc2libGUgd2lkdGggYW5kIGNvbHVtbiBzaXplXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sdGlwV2lkdGgodGFyZ2V0Q2VsbDogSFRNTEVsZW1lbnQsIHZpc2libGVXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG1heFdpZHRoID0gd2luZG93LmlubmVyV2lkdGggLyAyO1xyXG5cclxuICAgIC8vIFVzZSBjaGFyYWN0ZXJzIHdpZHRoIGlmIHRoZSB2aXNpYmxlIHdpZHRoIGlzIHRvbyBzbWFsbCAobGVzcyB0aGFuIDEwMHB4KVxyXG4gICAgbGV0IGNvbHVtbldpZHRoID0gdGFyZ2V0Q2VsbC5vZmZzZXRXaWR0aDtcclxuICAgIGlmIChjb2x1bW5XaWR0aCA8IDEwMCkge1xyXG4gICAgICBjb25zdCB0b29sdGlwVGV4dCA9IHRhcmdldENlbGwuaW5uZXJUZXh0IHx8IHRhcmdldENlbGwudGV4dENvbnRlbnQgfHwgJyc7XHJcbiAgICAgIGNvbnN0IGNoYXJXaWR0aCA9IDk7IC8vIEF2ZXJhZ2Ugd2lkdGggb2YgYSBjaGFyYWN0ZXJcclxuICAgICAgY29sdW1uV2lkdGggPSB0b29sdGlwVGV4dC5sZW5ndGggKiBjaGFyV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdmlzaWJsZSB3aWR0aCBpcyB0b28gc21hbGwsIHVzZSB0aGUgZnVsbCBjb2x1bW4gd2lkdGhcclxuICAgIGlmICh2aXNpYmxlV2lkdGggPCAxMDApIHtcclxuICAgICAgdmlzaWJsZVdpZHRoID0gY29sdW1uV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE1hdGgubWluKG1heFdpZHRoLCB2aXNpYmxlV2lkdGgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,109 @@
1
+ /********** Angular **********/
2
+ import { Component } from '@angular/core';
3
+ /********** Ionic **********/
4
+ /********** Plugin **********/
5
+ /********** Component & Service **********/
6
+ import { ButtonFieldBase } from '../components/buttonfieldbase.component';
7
+ import { TriggerFromType, ZComponentHelper, } from 'mmhglobal-zcore';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../services/zcomponent.service";
10
+ import * as i2 from "mmhglobal-zcore";
11
+ import * as i3 from "@progress/kendo-angular-buttons";
12
+ import * as i4 from "@fortawesome/angular-fontawesome";
13
+ import * as i5 from "@ionic/angular";
14
+ import * as i6 from "@angular/common";
15
+ import * as i7 from "@angular/flex-layout/extended";
16
+ export class DropDownButtonsComponent extends ButtonFieldBase {
17
+ constructor(componentService, fontAweSomeService) {
18
+ super(componentService);
19
+ this.componentService = componentService;
20
+ this.fontAweSomeService = fontAweSomeService;
21
+ }
22
+ ngOnInit() {
23
+ super.initComponent().subscribe(() => {
24
+ this.loadButton();
25
+ });
26
+ }
27
+ ngAfterViewInit() {
28
+ this.componentService.decrementComponentCounterForField(this.data);
29
+ }
30
+ loadButton() {
31
+ if (!this.data.Value || !Array.isArray(this.data.Value)) {
32
+ console.warn('[DropDown Button] Button value is empty');
33
+ return;
34
+ }
35
+ try {
36
+ this.data.Value.forEach((button) => {
37
+ this.setupButtonAttributes(button);
38
+ });
39
+ super.translateButtonsLabel(this.items).subscribe();
40
+ }
41
+ catch (error) {
42
+ console.error("error: ", error);
43
+ }
44
+ }
45
+ setupButtonAttributes(button) {
46
+ let buttonDisabled = false;
47
+ if (button['Disabled'] && typeof button['Disabled'] == 'string') {
48
+ buttonDisabled = ZComponentHelper.getGroupEvalValue.call(this, button['Disabled']);
49
+ }
50
+ this.items.push({
51
+ name: button.Name,
52
+ text: this.getButtonLabel(button),
53
+ showLabel: button.ShowLabel ?? true,
54
+ style: button.Style,
55
+ icon: ZComponentHelper.getIcon(button.Icon),
56
+ disabled: buttonDisabled,
57
+ clickEvent: button.ClickEvent,
58
+ iconName: button.Icon,
59
+ dismissType: button.DismissType,
60
+ buttonData: button,
61
+ disableTriggerTimer: button.DisableTriggerTimer,
62
+ disableTrigger: this.getButtonDisableTriggerValue(this.data, button),
63
+ });
64
+ }
65
+ buttonClick(item) {
66
+ if (item.disabled) {
67
+ return;
68
+ }
69
+ // Sets the isTriggered property based on the disableTrigger property of the item
70
+ this.group.isTriggered = item.disableTrigger != undefined ? !item.disableTrigger : true;
71
+ // If the isTriggered property is true, proceed with the following actions
72
+ if (this.group.isTriggered) {
73
+ const me = this.group;
74
+ // If the disableTriggerTimer property is not present, set a timeout to reset isTriggered to false after 500ms
75
+ if (!item['disableTriggerTimer']) {
76
+ setTimeout(function () {
77
+ me['isTriggered'] = false;
78
+ }, 500);
79
+ }
80
+ }
81
+ // Create a deep clone of the item object
82
+ const clonedButton = ZComponentHelper.deepClone(item);
83
+ // Call a method to update the event ID (implementation not provided)
84
+ item.eventId = ZComponentHelper.generateTimeStampId();
85
+ // Set the DismissType property of the group to the dismissType property of the item
86
+ this.group['DismissType'] = item.dismissType;
87
+ // Create an output event object with details about the button click
88
+ const outputEvent = {
89
+ type: "buttonClick",
90
+ target: clonedButton.clickEvent,
91
+ data: clonedButton,
92
+ triggerFrom: TriggerFromType.button
93
+ };
94
+ // Update the buttonEventDetail property of the group with the output event details
95
+ this.group['buttonEventDetail'] = {
96
+ buttonDetail: outputEvent,
97
+ triggerFrom: TriggerFromType.button
98
+ };
99
+ // Notify subscribers with the output event
100
+ this.group.subject.next(outputEvent);
101
+ }
102
+ }
103
+ DropDownButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: DropDownButtonsComponent, deps: [{ token: i1.ZComponentService }, { token: i2.FontAweSomeService }], target: i0.ɵɵFactoryTarget.Component });
104
+ DropDownButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: DropDownButtonsComponent, selector: "app-dropdown_buttons", usesInheritance: true, ngImport: i0, template: "<div\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible) && items.length > 0\"\r\n [style]=\"componentProperties.style.style\" class=\"e1tag-style\" [ngClass]=\"data.Class\">\r\n <div class=\"dropdown-button-container e1tag-style1\" [style]=\"componentProperties.style.style1\">\r\n <kendo-dropdownbutton [data]=\"items\" [size]=\"data.Size ?? 'medium'\" [fillMode]=\"data['Fill'] ?? 'solid'\" [ngClass]=\"data.Class\"\r\n (itemClick)=\"buttonClick($event)\"\r\n class=\"e1tag-style2\" [style]=\"componentProperties.style.style2\">\r\n <div class=\"button-label-container e1tag-style3\" [style]=\"componentProperties.style.style3\">\r\n <fa-icon class=\"btn-icon e1tag-style4\" [style]=\"componentProperties.style.style4\" *ngIf=\"data.Icon\"\r\n [icon]=\"getFontAwesome(data.Icon, fontAweSomeService)\"></fa-icon>\r\n <span class=\"ion-text-capitalize e1tag-style5\" [style]=\"componentProperties.style.style5\"\r\n *ngIf=\"data.Label && data.ShowLabel\">{{data.Label}}</span>\r\n </div>\r\n <ng-template kendoDropDownButtonItemTemplate let-dataItem>\r\n <div class=\"button-content-container e1tag-style6\" [style]=\"componentProperties.style.style6 + ' ' + dataItem.style\">\r\n <fa-icon class=\"btn-icon e1tag-style7\" [style]=\"componentProperties.style.style7\" *ngIf=\"dataItem.icon\" [icon]=\"dataItem.icon\"></fa-icon>\r\n <span class=\"ion-text-capitalize e1tag-style8\" [style]=\"componentProperties.style.style8\"\r\n *ngIf=\"dataItem.text && dataItem.showLabel\">{{dataItem.text}}</span>\r\n </div>\r\n </ng-template>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </kendo-dropdownbutton>\r\n </div>\r\n</div>\r\n", styles: [".button-content-container{display:flex;gap:5px}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button>.k-button.k-button-solid{background:var(--ion-color-primary);color:var(--ion-color-primary-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-primary);border-color:var(--ion-color-primary)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.secondary>.k-button.k-button-solid{background:var(--ion-color-secondary);color:var(--ion-color-secondary-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.secondary>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-secondary);border-color:var(--ion-color-secondary)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.tertiary>.k-button.k-button-solid{background:var(--ion-color-tertiary);color:var(--ion-color-tertiary-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.tertiary>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-tertiary);border-color:var(--ion-color-tertiary)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.success>.k-button.k-button-solid{background:var(--ion-color-success);color:var(--ion-color-success-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.success>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-success);border-color:var(--ion-color-success)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.warning>.k-button.k-button-solid{background:var(--ion-color-warning);color:var(--ion-color-warning-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.warning>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-warning);border-color:var(--ion-color-warning)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.danger>.k-button.k-button-solid{background:var(--ion-color-danger);color:var(--ion-color-danger-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.danger>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-danger);border-color:var(--ion-color-danger)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.dark>.k-button.k-button-solid{background:var(--ion-color-dark);color:var(--ion-color-dark-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.dark>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-dark);border-color:var(--ion-color-dark)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.medium>.k-button.k-button-solid{background:var(--ion-color-medium);color:var(--ion-color-medium-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.medium>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-medium);border-color:var(--ion-color-medium)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.light>.k-button.k-button-solid{background:var(--ion-color-light);color:var(--ion-color-light-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.light>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-light);border-color:var(--ion-color-light)}\n"], components: [{ type: i3.DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["icon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i5.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i3.ButtonItemTemplateDirective, selector: "[kendoDropDownButtonItemTemplate],[kendoSplitButtonItemTemplate]" }] });
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: DropDownButtonsComponent, decorators: [{
106
+ type: Component,
107
+ args: [{ selector: "app-dropdown_buttons", template: "<div\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible) && items.length > 0\"\r\n [style]=\"componentProperties.style.style\" class=\"e1tag-style\" [ngClass]=\"data.Class\">\r\n <div class=\"dropdown-button-container e1tag-style1\" [style]=\"componentProperties.style.style1\">\r\n <kendo-dropdownbutton [data]=\"items\" [size]=\"data.Size ?? 'medium'\" [fillMode]=\"data['Fill'] ?? 'solid'\" [ngClass]=\"data.Class\"\r\n (itemClick)=\"buttonClick($event)\"\r\n class=\"e1tag-style2\" [style]=\"componentProperties.style.style2\">\r\n <div class=\"button-label-container e1tag-style3\" [style]=\"componentProperties.style.style3\">\r\n <fa-icon class=\"btn-icon e1tag-style4\" [style]=\"componentProperties.style.style4\" *ngIf=\"data.Icon\"\r\n [icon]=\"getFontAwesome(data.Icon, fontAweSomeService)\"></fa-icon>\r\n <span class=\"ion-text-capitalize e1tag-style5\" [style]=\"componentProperties.style.style5\"\r\n *ngIf=\"data.Label && data.ShowLabel\">{{data.Label}}</span>\r\n </div>\r\n <ng-template kendoDropDownButtonItemTemplate let-dataItem>\r\n <div class=\"button-content-container e1tag-style6\" [style]=\"componentProperties.style.style6 + ' ' + dataItem.style\">\r\n <fa-icon class=\"btn-icon e1tag-style7\" [style]=\"componentProperties.style.style7\" *ngIf=\"dataItem.icon\" [icon]=\"dataItem.icon\"></fa-icon>\r\n <span class=\"ion-text-capitalize e1tag-style8\" [style]=\"componentProperties.style.style8\"\r\n *ngIf=\"dataItem.text && dataItem.showLabel\">{{dataItem.text}}</span>\r\n </div>\r\n </ng-template>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </kendo-dropdownbutton>\r\n </div>\r\n</div>\r\n", styles: [".button-content-container{display:flex;gap:5px}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button>.k-button.k-button-solid{background:var(--ion-color-primary);color:var(--ion-color-primary-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-primary);border-color:var(--ion-color-primary)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.secondary>.k-button.k-button-solid{background:var(--ion-color-secondary);color:var(--ion-color-secondary-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.secondary>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-secondary);border-color:var(--ion-color-secondary)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.tertiary>.k-button.k-button-solid{background:var(--ion-color-tertiary);color:var(--ion-color-tertiary-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.tertiary>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-tertiary);border-color:var(--ion-color-tertiary)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.success>.k-button.k-button-solid{background:var(--ion-color-success);color:var(--ion-color-success-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.success>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-success);border-color:var(--ion-color-success)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.warning>.k-button.k-button-solid{background:var(--ion-color-warning);color:var(--ion-color-warning-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.warning>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-warning);border-color:var(--ion-color-warning)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.danger>.k-button.k-button-solid{background:var(--ion-color-danger);color:var(--ion-color-danger-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.danger>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-danger);border-color:var(--ion-color-danger)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.dark>.k-button.k-button-solid{background:var(--ion-color-dark);color:var(--ion-color-dark-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.dark>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-dark);border-color:var(--ion-color-dark)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.medium>.k-button.k-button-solid{background:var(--ion-color-medium);color:var(--ion-color-medium-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.medium>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-medium);border-color:var(--ion-color-medium)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.light>.k-button.k-button-solid{background:var(--ion-color-light);color:var(--ion-color-light-contrast)}:host ::ng-deep kendo-dropdownbutton.k-dropdown-button.light>.k-button.k-button-outline{background:#ffffff;color:var(--ion-color-light);border-color:var(--ion-color-light)}\n"] }]
108
+ }], ctorParameters: function () { return [{ type: i1.ZComponentService }, { type: i2.FontAweSomeService }]; } });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd25fYnV0dG9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi9kcm9wZG93bl9idXR0b25zL2Ryb3Bkb3duX2J1dHRvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvZHJvcGRvd25fYnV0dG9ucy9kcm9wZG93bl9idXR0b25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFFOUIsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUUxRSxPQUFPLEVBQ2UsZUFBZSxFQUN2QixnQkFBZ0IsR0FDN0IsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBUXpCLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxlQUFlO0lBQzNELFlBQ1MsZ0JBQW1DLEVBQ25DLGtCQUFzQztRQUU3QyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUhqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ25DLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7SUFHL0MsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNuQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLFVBQVU7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RixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFN0Msb0VBQW9FO1FBQ3BFLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLElBQUksRUFBRSxhQUFhO1lBQ25CLE1BQU0sRUFBRSxZQUFZLENBQUMsVUFBVTtZQUMvQixJQUFJLEVBQUUsWUFBWTtZQUNsQixXQUFXLEVBQUUsZUFBZSxDQUFDLE1BQU07U0FDWCxDQUFDO1FBRTNCLG1GQUFtRjtRQUNuRixJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQUc7WUFDaEMsWUFBWSxFQUFFLFdBQVc7WUFDekIsV0FBVyxFQUFFLGVBQWUsQ0FBQyxNQUFNO1NBQ3BDLENBQUM7UUFFRiwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7O3FIQXRHVSx3QkFBd0I7eUdBQXhCLHdCQUF3QixtRkNyQnJDLGd5REF3QkE7MkZESGEsd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNFLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQnV0dG9uRmllbGRCYXNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9idXR0b25maWVsZGJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIEZvbnRBd2VTb21lU2VydmljZSwgVHJpZ2dlckZyb21UeXBlLFxyXG4gIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkZpZWxkLFxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtZHJvcGRvd25fYnV0dG9uc1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZHJvcGRvd25fYnV0dG9ucy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9kcm9wZG93bl9idXR0b25zLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHJvcERvd25CdXR0b25zQ29tcG9uZW50IGV4dGVuZHMgQnV0dG9uRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSxcclxuICAgIHB1YmxpYyBmb250QXdlU29tZVNlcnZpY2U6IEZvbnRBd2VTb21lU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLmluaXRDb21wb25lbnQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRCdXR0b24oKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQnV0dG9uKCkge1xyXG4gICAgaWYgKCF0aGlzLmRhdGEuVmFsdWUgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5kYXRhLlZhbHVlKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1tEcm9wRG93biBCdXR0b25dIEJ1dHRvbiB2YWx1ZSBpcyBlbXB0eScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5kYXRhLlZhbHVlLmZvckVhY2goKGJ1dHRvbjogWkZpZWxkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR1cEJ1dHRvbkF0dHJpYnV0ZXMoYnV0dG9uKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzdXBlci50cmFuc2xhdGVCdXR0b25zTGFiZWwodGhpcy5pdGVtcykuc3Vic2NyaWJlKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3I6IFwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwQnV0dG9uQXR0cmlidXRlcyhidXR0b246IFpGaWVsZCkge1xyXG4gICAgbGV0IGJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBpZiAoYnV0dG9uWydEaXNhYmxlZCddICYmIHR5cGVvZiBidXR0b25bJ0Rpc2FibGVkJ10gPT0gJ3N0cmluZycpIHtcclxuICAgICAgYnV0dG9uRGlzYWJsZWQgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgYnV0dG9uWydEaXNhYmxlZCddKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLml0ZW1zLnB1c2goe1xyXG4gICAgICBuYW1lOiBidXR0b24uTmFtZSxcclxuICAgICAgdGV4dDogdGhpcy5nZXRCdXR0b25MYWJlbChidXR0b24pLFxyXG4gICAgICBzaG93TGFiZWw6IGJ1dHRvbi5TaG93TGFiZWwgPz8gdHJ1ZSxcclxuICAgICAgc3R5bGU6IGJ1dHRvbi5TdHlsZSxcclxuICAgICAgaWNvbjogWkNvbXBvbmVudEhlbHBlci5nZXRJY29uKGJ1dHRvbi5JY29uIGFzIHN0cmluZyksXHJcbiAgICAgIGRpc2FibGVkOiBidXR0b25EaXNhYmxlZCxcclxuICAgICAgY2xpY2tFdmVudDogYnV0dG9uLkNsaWNrRXZlbnQsXHJcbiAgICAgIGljb25OYW1lOiBidXR0b24uSWNvbixcclxuICAgICAgZGlzbWlzc1R5cGU6IGJ1dHRvbi5EaXNtaXNzVHlwZSxcclxuICAgICAgYnV0dG9uRGF0YTogYnV0dG9uLFxyXG4gICAgICBkaXNhYmxlVHJpZ2dlclRpbWVyOiBidXR0b24uRGlzYWJsZVRyaWdnZXJUaW1lcixcclxuICAgICAgZGlzYWJsZVRyaWdnZXI6IHRoaXMuZ2V0QnV0dG9uRGlzYWJsZVRyaWdnZXJWYWx1ZSh0aGlzLmRhdGEsIGJ1dHRvbiksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBidXR0b25DbGljayhpdGVtOiBhbnkpIHtcclxuICAgIGlmIChpdGVtLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXRzIHRoZSBpc1RyaWdnZXJlZCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgZGlzYWJsZVRyaWdnZXIgcHJvcGVydHkgb2YgdGhlIGl0ZW1cclxuICAgIHRoaXMuZ3JvdXAuaXNUcmlnZ2VyZWQgPSBpdGVtLmRpc2FibGVUcmlnZ2VyICE9IHVuZGVmaW5lZCA/ICFpdGVtLmRpc2FibGVUcmlnZ2VyIDogdHJ1ZTtcclxuXHJcbiAgICAvLyBJZiB0aGUgaXNUcmlnZ2VyZWQgcHJvcGVydHkgaXMgdHJ1ZSwgcHJvY2VlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYWN0aW9uc1xyXG4gICAgaWYgKHRoaXMuZ3JvdXAuaXNUcmlnZ2VyZWQpIHtcclxuICAgICAgY29uc3QgbWUgPSB0aGlzLmdyb3VwO1xyXG5cclxuICAgICAgLy8gSWYgdGhlIGRpc2FibGVUcmlnZ2VyVGltZXIgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIHNldCBhIHRpbWVvdXQgdG8gcmVzZXQgaXNUcmlnZ2VyZWQgdG8gZmFsc2UgYWZ0ZXIgNTAwbXNcclxuICAgICAgaWYgKCFpdGVtWydkaXNhYmxlVHJpZ2dlclRpbWVyJ10pIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIG1lWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIGRlZXAgY2xvbmUgb2YgdGhlIGl0ZW0gb2JqZWN0XHJcbiAgICBjb25zdCBjbG9uZWRCdXR0b24gPSBaQ29tcG9uZW50SGVscGVyLmRlZXBDbG9uZShpdGVtKTtcclxuXHJcbiAgICAvLyBDYWxsIGEgbWV0aG9kIHRvIHVwZGF0ZSB0aGUgZXZlbnQgSUQgKGltcGxlbWVudGF0aW9uIG5vdCBwcm92aWRlZClcclxuICAgIGl0ZW0uZXZlbnRJZCA9IFpDb21wb25lbnRIZWxwZXIuZ2VuZXJhdGVUaW1lU3RhbXBJZCgpO1xyXG5cclxuICAgIC8vIFNldCB0aGUgRGlzbWlzc1R5cGUgcHJvcGVydHkgb2YgdGhlIGdyb3VwIHRvIHRoZSBkaXNtaXNzVHlwZSBwcm9wZXJ0eSBvZiB0aGUgaXRlbVxyXG4gICAgdGhpcy5ncm91cFsnRGlzbWlzc1R5cGUnXSA9IGl0ZW0uZGlzbWlzc1R5cGU7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGFuIG91dHB1dCBldmVudCBvYmplY3Qgd2l0aCBkZXRhaWxzIGFib3V0IHRoZSBidXR0b24gY2xpY2tcclxuICAgIGNvbnN0IG91dHB1dEV2ZW50ID0ge1xyXG4gICAgICB0eXBlOiBcImJ1dHRvbkNsaWNrXCIsXHJcbiAgICAgIHRhcmdldDogY2xvbmVkQnV0dG9uLmNsaWNrRXZlbnQsXHJcbiAgICAgIGRhdGE6IGNsb25lZEJ1dHRvbixcclxuICAgICAgdHJpZ2dlckZyb206IFRyaWdnZXJGcm9tVHlwZS5idXR0b25cclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50O1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgYnV0dG9uRXZlbnREZXRhaWwgcHJvcGVydHkgb2YgdGhlIGdyb3VwIHdpdGggdGhlIG91dHB1dCBldmVudCBkZXRhaWxzXHJcbiAgICB0aGlzLmdyb3VwWydidXR0b25FdmVudERldGFpbCddID0ge1xyXG4gICAgICBidXR0b25EZXRhaWw6IG91dHB1dEV2ZW50LFxyXG4gICAgICB0cmlnZ2VyRnJvbTogVHJpZ2dlckZyb21UeXBlLmJ1dHRvblxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBOb3RpZnkgc3Vic2NyaWJlcnMgd2l0aCB0aGUgb3V0cHV0IGV2ZW50XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dChvdXRwdXRFdmVudCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICAqbmdJZj1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKSAmJiBpdGVtcy5sZW5ndGggPiAwXCJcclxuICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiIGNsYXNzPVwiZTF0YWctc3R5bGVcIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCI+XHJcbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWJ1dHRvbi1jb250YWluZXIgZTF0YWctc3R5bGUxXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCI+XHJcbiAgICA8a2VuZG8tZHJvcGRvd25idXR0b24gW2RhdGFdPVwiaXRlbXNcIiBbc2l6ZV09XCJkYXRhLlNpemUgPz8gJ21lZGl1bSdcIiBbZmlsbE1vZGVdPVwiZGF0YVsnRmlsbCddID8/ICdzb2xpZCdcIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCJcclxuICAgICAgKGl0ZW1DbGljayk9XCJidXR0b25DbGljaygkZXZlbnQpXCJcclxuICAgICAgY2xhc3M9XCJlMXRhZy1zdHlsZTJcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1sYWJlbC1jb250YWluZXIgZTF0YWctc3R5bGUzXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUzXCI+XHJcbiAgICAgICAgPGZhLWljb24gY2xhc3M9XCJidG4taWNvbiBlMXRhZy1zdHlsZTRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTRcIiAqbmdJZj1cImRhdGEuSWNvblwiXHJcbiAgICAgICAgICBbaWNvbl09XCJnZXRGb250QXdlc29tZShkYXRhLkljb24sIGZvbnRBd2VTb21lU2VydmljZSlcIj48L2ZhLWljb24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpb24tdGV4dC1jYXBpdGFsaXplIGUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiXHJcbiAgICAgICAgICAqbmdJZj1cImRhdGEuTGFiZWwgJiYgZGF0YS5TaG93TGFiZWxcIj57e2RhdGEuTGFiZWx9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0Ryb3BEb3duQnV0dG9uSXRlbVRlbXBsYXRlIGxldC1kYXRhSXRlbT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWNvbnRlbnQtY29udGFpbmVyIGUxdGFnLXN0eWxlNlwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNiArICcgJyArIGRhdGFJdGVtLnN0eWxlXCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cImJ0bi1pY29uIGUxdGFnLXN0eWxlN1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlN1wiICpuZ0lmPVwiZGF0YUl0ZW0uaWNvblwiIFtpY29uXT1cImRhdGFJdGVtLmljb25cIj48L2ZhLWljb24+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemUgZTF0YWctc3R5bGU4XCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU4XCJcclxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhSXRlbS50ZXh0ICYmIGRhdGFJdGVtLnNob3dMYWJlbFwiPnt7ZGF0YUl0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8aW9uLXJpcHBsZS1lZmZlY3Q+PC9pb24tcmlwcGxlLWVmZmVjdD5cclxuICAgIDwva2VuZG8tZHJvcGRvd25idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -82,9 +82,9 @@ export class KcardComponent extends ContainerFieldBase {
82
82
  }
83
83
  }
84
84
  KcardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: KcardComponent, deps: [{ token: i1.ZComponentService }, { token: i2.MainService }, { token: i3.FontAweSomeService }], target: i0.ɵɵFactoryTarget.Component });
85
- KcardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: KcardComponent, selector: "app-kcard", usesInheritance: true, ngImport: i0, template: "<div class=\"kcard-container e1tag-container-style\"\r\n *ngIf=\"!isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"data.Class\" [style]=\"componentProperties.containerStyle.style\" [class]=\"data.ComponentStyleType\">\r\n <kendo-card [ngClass]=\"getClass(null, data)\" [style]=\"componentProperties.containerStyle.style1\"\r\n [class]=\"data.ComponentStyleType\" class=\"e1tag-container-style1\">\r\n <kendo-card-header class=\"k-hstack card-header e1tag-container-style2\" *ngIf=\"data.Icon || data.Title\"\r\n [style]=\"componentProperties.containerStyle.style2\">\r\n <div kendoCardTitle class=\"card-header-content e1tag-container-style3\" [style]=\"componentProperties.containerStyle.style3\">\r\n <div class=\"left-panel e1tag-container-style4\" [style]=\"componentProperties.containerStyle.style4\">\r\n <fa-icon *ngIf=\"componentProperties.icon\" class=\"card-icon e1tag-container-style6\"\r\n [icon]=\"getFontAwesome(componentProperties.icon.toString(), fontAweSomeService)\"\r\n [style]=\"componentProperties.containerStyle.style6\"></fa-icon>\r\n <ion-label *ngIf=\"componentProperties.title\" class=\"card-title e1tag-container-style7\"\r\n [style]=\"componentProperties.containerStyle.style7\">{{componentProperties.title}}</ion-label>\r\n </div>\r\n <div class=\"right-panel e1tag-container-style5\" *ngIf=\"data.EditButtonVisible\" [style]=\"componentProperties.containerStyle.style5\">\r\n <div class=\"read-mode-btns\" *ngIf=\"!data['_EditMode'].value\">\r\n <ion-button fill=\"outline\" size=\"default\" strong=\"true\" (click)=\"toggleEditMode()\">\r\n <fa-icon icon=\"edit\"></fa-icon>\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Edit')}}</span>\r\n </ion-button>\r\n </div>\r\n <div class=\"edit-mode-btns\" *ngIf=\"data['_EditMode'].value\">\r\n <ion-button fill=\"solid\" size=\"default\" strong=\"true\" (click)=\"saveData()\">\r\n <fa-icon icon=\"check\"></fa-icon>\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Save')}}</span>\r\n </ion-button>\r\n <ion-button fill=\"clear\" size=\"small\" strong=\"false\" (click)=\"cancelEdit()\">\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Cancel')}}</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <app-zdiv class=\"e1tag-container-style8\" [style]=\"componentProperties.containerStyle.style8\" [data]=\"data\"\r\n [form]=\"myFormGroup ? myFormGroup : form\" [group]=\"group\">\r\n </app-zdiv>\r\n\r\n <!-- <app-zformcontrol [ngClass]=\"group[field.isVisibleField] ? field.DivClass :\r\n ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n *ngFor=\"let field of data.Value | divzlayout: data.zlayout\" [field]=\"field\" [group]=\"group\" [form]=\"form\"\r\n id=\"{{field.Type}}-{{field.Name}}\">\r\n </app-zformcontrol> -->\r\n </kendo-card-body>\r\n </kendo-card>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-card{width:100%!important;margin:auto auto 10px;border-radius:var(--ion-container-border-radius);margin-top:var(--container-margin-top)}:host ::ng-deep kendo-card.left-border-primary{border-left:5px solid var(--ion-color-primary)}:host ::ng-deep kendo-card>.card-header{color:var(--ion-color-primary-shade);padding:0;padding-top:--container-title-padding-top-and-bottom;padding-bottom:--container-title-padding-top-and-bottom}:host ::ng-deep kendo-card>.card-header>.card-header-content{display:flex;width:100%;font-size:var(--content-title-font-size)}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel{padding:12px 16px;flex-grow:1}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel>.card-icon{margin-right:15px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel>.card-title{font-weight:600}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel{margin:auto 5px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel ion-button{height:30px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel ion-button .btn-label{padding-left:5px}:host ::ng-deep kendo-card .k-card-body{padding:5px 10px var(--container-padding-bottom) 5px}:host ::ng-deep kendo-card.body-padding-0 .k-card-body{padding:0}:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.left-panel,:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.right-panel{padding:2px 10px}:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.left-panel>.card-title,:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.right-panel>.card-title{font-size:.8em}.kcard-container{margin-left:5px}\n"], components: [{ type: i4.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { type: i4.CardHeaderComponent, selector: "kendo-card-header" }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i6.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i6.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.CardBodyComponent, selector: "kendo-card-body" }, { type: i7.ZdivComponent, selector: "app-zdiv" }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i4.CardTitleDirective, selector: "[kendoCardTitle]" }] });
85
+ KcardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: KcardComponent, selector: "app-kcard", usesInheritance: true, ngImport: i0, template: "<div class=\"kcard-container e1tag-container-style\"\r\n *ngIf=\"!isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"data.Class\" [style]=\"componentProperties.containerStyle.style\" [class]=\"data.ComponentStyleType\">\r\n <kendo-card [ngClass]=\"getClass(null, data)\" [style]=\"componentProperties.containerStyle.style1\"\r\n [class]=\"data.ComponentStyleType\" class=\"e1tag-container-style1\">\r\n <kendo-card-header class=\"k-hstack card-header e1tag-container-style2\" *ngIf=\"data.Icon || data.Title\"\r\n [style]=\"componentProperties.containerStyle.style2\">\r\n <div kendoCardTitle class=\"card-header-content e1tag-container-style3\" [style]=\"componentProperties.containerStyle.style3\">\r\n <div class=\"left-panel e1tag-container-style4\" [style]=\"componentProperties.containerStyle.style4\">\r\n <fa-icon *ngIf=\"componentProperties.icon\" class=\"card-icon e1tag-container-style6\"\r\n [icon]=\"getFontAwesome(componentProperties.icon.toString(), fontAweSomeService)\"\r\n [style]=\"componentProperties.containerStyle.style6\"></fa-icon>\r\n <ion-label *ngIf=\"componentProperties.title\" class=\"card-title e1tag-container-style7\"\r\n [style]=\"componentProperties.containerStyle.style7\">{{componentProperties.title}}</ion-label>\r\n </div>\r\n <div class=\"right-panel e1tag-container-style5\" *ngIf=\"data.EditButtonVisible\" [style]=\"componentProperties.containerStyle.style5\">\r\n <div class=\"read-mode-btns\" *ngIf=\"!data['_EditMode'].value\">\r\n <ion-button fill=\"outline\" size=\"default\" strong=\"true\" (click)=\"toggleEditMode()\">\r\n <fa-icon icon=\"edit\"></fa-icon>\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Edit')}}</span>\r\n </ion-button>\r\n </div>\r\n <div class=\"edit-mode-btns\" *ngIf=\"data['_EditMode'].value\">\r\n <ion-button fill=\"solid\" size=\"default\" strong=\"true\" (click)=\"saveData()\">\r\n <fa-icon icon=\"check\"></fa-icon>\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Save')}}</span>\r\n </ion-button>\r\n <ion-button fill=\"clear\" size=\"small\" strong=\"false\" (click)=\"cancelEdit()\">\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Cancel')}}</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <app-zdiv class=\"e1tag-container-style8\" [style]=\"componentProperties.containerStyle.style8\" [data]=\"data\"\r\n [form]=\"myFormGroup ? myFormGroup : form\" [group]=\"group\">\r\n </app-zdiv>\r\n\r\n <!-- <app-zformcontrol [ngClass]=\"group[field.isVisibleField] ? field.DivClass :\r\n ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n *ngFor=\"let field of data.Value | divzlayout: data.zlayout\" [field]=\"field\" [group]=\"group\" [form]=\"form\"\r\n id=\"{{field.Type}}-{{field.Name}}\">\r\n </app-zformcontrol> -->\r\n </kendo-card-body>\r\n </kendo-card>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-card{width:100%!important;margin:auto auto 10px;border-radius:var(--ion-container-border-radius);margin-top:var(--container-margin-top)}:host ::ng-deep kendo-card.left-border-primary{border-left:5px solid var(--ion-color-primary)}:host ::ng-deep kendo-card>.card-header{color:var(--ion-color-primary-shade);padding:0;padding-top:var(--container-title-padding-top-and-bottom);padding-bottom:var(--container-title-padding-top-and-bottom)}:host ::ng-deep kendo-card>.card-header>.card-header-content{display:flex;width:100%;font-size:var(--content-title-font-size)}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel{padding:12px 16px;flex-grow:1}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel>.card-icon{margin-right:15px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel>.card-title{font-weight:600}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel{margin:auto 5px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel ion-button{height:30px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel ion-button .btn-label{padding-left:5px}:host ::ng-deep kendo-card .k-card-body{padding:5px 10px var(--container-padding-bottom) 5px}:host ::ng-deep kendo-card.body-padding-0 .k-card-body{padding:0}:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.left-panel,:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.right-panel{padding:2px 10px}:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.left-panel>.card-title,:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.right-panel>.card-title{font-size:.8em}.kcard-container{margin-left:5px}\n"], components: [{ type: i4.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { type: i4.CardHeaderComponent, selector: "kendo-card-header" }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i6.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i6.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.CardBodyComponent, selector: "kendo-card-body" }, { type: i7.ZdivComponent, selector: "app-zdiv" }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i4.CardTitleDirective, selector: "[kendoCardTitle]" }] });
86
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: KcardComponent, decorators: [{
87
87
  type: Component,
88
- args: [{ selector: "app-kcard", template: "<div class=\"kcard-container e1tag-container-style\"\r\n *ngIf=\"!isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"data.Class\" [style]=\"componentProperties.containerStyle.style\" [class]=\"data.ComponentStyleType\">\r\n <kendo-card [ngClass]=\"getClass(null, data)\" [style]=\"componentProperties.containerStyle.style1\"\r\n [class]=\"data.ComponentStyleType\" class=\"e1tag-container-style1\">\r\n <kendo-card-header class=\"k-hstack card-header e1tag-container-style2\" *ngIf=\"data.Icon || data.Title\"\r\n [style]=\"componentProperties.containerStyle.style2\">\r\n <div kendoCardTitle class=\"card-header-content e1tag-container-style3\" [style]=\"componentProperties.containerStyle.style3\">\r\n <div class=\"left-panel e1tag-container-style4\" [style]=\"componentProperties.containerStyle.style4\">\r\n <fa-icon *ngIf=\"componentProperties.icon\" class=\"card-icon e1tag-container-style6\"\r\n [icon]=\"getFontAwesome(componentProperties.icon.toString(), fontAweSomeService)\"\r\n [style]=\"componentProperties.containerStyle.style6\"></fa-icon>\r\n <ion-label *ngIf=\"componentProperties.title\" class=\"card-title e1tag-container-style7\"\r\n [style]=\"componentProperties.containerStyle.style7\">{{componentProperties.title}}</ion-label>\r\n </div>\r\n <div class=\"right-panel e1tag-container-style5\" *ngIf=\"data.EditButtonVisible\" [style]=\"componentProperties.containerStyle.style5\">\r\n <div class=\"read-mode-btns\" *ngIf=\"!data['_EditMode'].value\">\r\n <ion-button fill=\"outline\" size=\"default\" strong=\"true\" (click)=\"toggleEditMode()\">\r\n <fa-icon icon=\"edit\"></fa-icon>\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Edit')}}</span>\r\n </ion-button>\r\n </div>\r\n <div class=\"edit-mode-btns\" *ngIf=\"data['_EditMode'].value\">\r\n <ion-button fill=\"solid\" size=\"default\" strong=\"true\" (click)=\"saveData()\">\r\n <fa-icon icon=\"check\"></fa-icon>\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Save')}}</span>\r\n </ion-button>\r\n <ion-button fill=\"clear\" size=\"small\" strong=\"false\" (click)=\"cancelEdit()\">\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Cancel')}}</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <app-zdiv class=\"e1tag-container-style8\" [style]=\"componentProperties.containerStyle.style8\" [data]=\"data\"\r\n [form]=\"myFormGroup ? myFormGroup : form\" [group]=\"group\">\r\n </app-zdiv>\r\n\r\n <!-- <app-zformcontrol [ngClass]=\"group[field.isVisibleField] ? field.DivClass :\r\n ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n *ngFor=\"let field of data.Value | divzlayout: data.zlayout\" [field]=\"field\" [group]=\"group\" [form]=\"form\"\r\n id=\"{{field.Type}}-{{field.Name}}\">\r\n </app-zformcontrol> -->\r\n </kendo-card-body>\r\n </kendo-card>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-card{width:100%!important;margin:auto auto 10px;border-radius:var(--ion-container-border-radius);margin-top:var(--container-margin-top)}:host ::ng-deep kendo-card.left-border-primary{border-left:5px solid var(--ion-color-primary)}:host ::ng-deep kendo-card>.card-header{color:var(--ion-color-primary-shade);padding:0;padding-top:--container-title-padding-top-and-bottom;padding-bottom:--container-title-padding-top-and-bottom}:host ::ng-deep kendo-card>.card-header>.card-header-content{display:flex;width:100%;font-size:var(--content-title-font-size)}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel{padding:12px 16px;flex-grow:1}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel>.card-icon{margin-right:15px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel>.card-title{font-weight:600}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel{margin:auto 5px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel ion-button{height:30px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel ion-button .btn-label{padding-left:5px}:host ::ng-deep kendo-card .k-card-body{padding:5px 10px var(--container-padding-bottom) 5px}:host ::ng-deep kendo-card.body-padding-0 .k-card-body{padding:0}:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.left-panel,:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.right-panel{padding:2px 10px}:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.left-panel>.card-title,:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.right-panel>.card-title{font-size:.8em}.kcard-container{margin-left:5px}\n"] }]
88
+ args: [{ selector: "app-kcard", template: "<div class=\"kcard-container e1tag-container-style\"\r\n *ngIf=\"!isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"data.Class\" [style]=\"componentProperties.containerStyle.style\" [class]=\"data.ComponentStyleType\">\r\n <kendo-card [ngClass]=\"getClass(null, data)\" [style]=\"componentProperties.containerStyle.style1\"\r\n [class]=\"data.ComponentStyleType\" class=\"e1tag-container-style1\">\r\n <kendo-card-header class=\"k-hstack card-header e1tag-container-style2\" *ngIf=\"data.Icon || data.Title\"\r\n [style]=\"componentProperties.containerStyle.style2\">\r\n <div kendoCardTitle class=\"card-header-content e1tag-container-style3\" [style]=\"componentProperties.containerStyle.style3\">\r\n <div class=\"left-panel e1tag-container-style4\" [style]=\"componentProperties.containerStyle.style4\">\r\n <fa-icon *ngIf=\"componentProperties.icon\" class=\"card-icon e1tag-container-style6\"\r\n [icon]=\"getFontAwesome(componentProperties.icon.toString(), fontAweSomeService)\"\r\n [style]=\"componentProperties.containerStyle.style6\"></fa-icon>\r\n <ion-label *ngIf=\"componentProperties.title\" class=\"card-title e1tag-container-style7\"\r\n [style]=\"componentProperties.containerStyle.style7\">{{componentProperties.title}}</ion-label>\r\n </div>\r\n <div class=\"right-panel e1tag-container-style5\" *ngIf=\"data.EditButtonVisible\" [style]=\"componentProperties.containerStyle.style5\">\r\n <div class=\"read-mode-btns\" *ngIf=\"!data['_EditMode'].value\">\r\n <ion-button fill=\"outline\" size=\"default\" strong=\"true\" (click)=\"toggleEditMode()\">\r\n <fa-icon icon=\"edit\"></fa-icon>\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Edit')}}</span>\r\n </ion-button>\r\n </div>\r\n <div class=\"edit-mode-btns\" *ngIf=\"data['_EditMode'].value\">\r\n <ion-button fill=\"solid\" size=\"default\" strong=\"true\" (click)=\"saveData()\">\r\n <fa-icon icon=\"check\"></fa-icon>\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Save')}}</span>\r\n </ion-button>\r\n <ion-button fill=\"clear\" size=\"small\" strong=\"false\" (click)=\"cancelEdit()\">\r\n <span class=\"btn-label ion-text-capitalize\">{{getToolBarItemLabelName('Cancel')}}</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <app-zdiv class=\"e1tag-container-style8\" [style]=\"componentProperties.containerStyle.style8\" [data]=\"data\"\r\n [form]=\"myFormGroup ? myFormGroup : form\" [group]=\"group\">\r\n </app-zdiv>\r\n\r\n <!-- <app-zformcontrol [ngClass]=\"group[field.isVisibleField] ? field.DivClass :\r\n ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n *ngFor=\"let field of data.Value | divzlayout: data.zlayout\" [field]=\"field\" [group]=\"group\" [form]=\"form\"\r\n id=\"{{field.Type}}-{{field.Name}}\">\r\n </app-zformcontrol> -->\r\n </kendo-card-body>\r\n </kendo-card>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-card{width:100%!important;margin:auto auto 10px;border-radius:var(--ion-container-border-radius);margin-top:var(--container-margin-top)}:host ::ng-deep kendo-card.left-border-primary{border-left:5px solid var(--ion-color-primary)}:host ::ng-deep kendo-card>.card-header{color:var(--ion-color-primary-shade);padding:0;padding-top:var(--container-title-padding-top-and-bottom);padding-bottom:var(--container-title-padding-top-and-bottom)}:host ::ng-deep kendo-card>.card-header>.card-header-content{display:flex;width:100%;font-size:var(--content-title-font-size)}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel{padding:12px 16px;flex-grow:1}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel>.card-icon{margin-right:15px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.left-panel>.card-title{font-weight:600}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel{margin:auto 5px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel ion-button{height:30px}:host ::ng-deep kendo-card>.card-header>.card-header-content>.right-panel ion-button .btn-label{padding-left:5px}:host ::ng-deep kendo-card .k-card-body{padding:5px 10px var(--container-padding-bottom) 5px}:host ::ng-deep kendo-card.body-padding-0 .k-card-body{padding:0}:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.left-panel,:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.right-panel{padding:2px 10px}:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.left-panel>.card-title,:host ::ng-deep kendo-card.small-header>.card-header>.card-header-content>.right-panel>.card-title{font-size:.8em}.kcard-container{margin-left:5px}\n"] }]
89
89
  }], ctorParameters: function () { return [{ type: i1.ZComponentService }, { type: i2.MainService }, { type: i3.FontAweSomeService }]; } });
90
90
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2NhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIva2NhcmQva2NhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIva2NhcmQva2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFlLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUdoRixPQUFPLEVBRUwsY0FBYyxFQUFjLGdCQUFnQixFQUM3QyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7OztBQVN6QixNQUFNLE9BQU8sY0FBZSxTQUFRLGtCQUFrQjtJQUtwRCxZQUNTLGdCQUFtQyxFQUNsQyxXQUF3QixFQUN6QixrQkFBc0M7UUFFN0MsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFKakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN6Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBRy9DLENBQUM7SUFFRCxRQUFRO1FBQ04sS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FDeEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMvQixPQUFPLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2FBQ3RDO1lBQ0QsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sUUFBUTtRQUNiLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQy9FO1lBQ0UsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztvQkFDeEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN2QjtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7U0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRU0sVUFBVTtRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzVFO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakUsTUFBTSxZQUFZLEdBQW1DLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUV4QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsVUFBeUIsRUFBRSxZQUE0QztRQUM3RixVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUNqRDtxQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDMUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFRLENBQUM7aUJBQ3BFO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzJHQTlFVSxjQUFjOytGQUFkLGNBQWMsd0VDekIzQiw2MEdBK0NBOzJGRHRCYSxjQUFjO2tCQU4xQixTQUFTOytCQUNFLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyB0YXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb250YWluZXJGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9jb250YWluZXJmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE1haW5TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL21haW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuICBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgRGVmYXVsdE1lc3NhZ2UsIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpGaWVsZFxyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAta2NhcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2tjYXJkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2tjYXJkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEtjYXJkQ29tcG9uZW50IGV4dGVuZHMgQ29udGFpbmVyRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBwdWJsaWMgbXlGb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxuICBwcml2YXRlIGluaXRWYWx1ZTogYW55O1xyXG4gIHByaXZhdGUgbXlNb2RlbDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgbWFpblNlcnZpY2U6IE1haW5TZXJ2aWNlLFxyXG4gICAgcHVibGljIGZvbnRBd2VTb21lU2VydmljZTogRm9udEF3ZVNvbWVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuaW5pdENvbXBvbmVudCgpLnBpcGUoXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLnNldEVkaXRNb2RlKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZ2V0RmllbGRWYWx1ZXMoKTtcclxuICAgICAgICB0aGlzLm15TW9kZWwgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwLnpNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5FZGl0QnV0dG9uVmlzaWJsZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZVRvb2xCYXJJdGVtcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlRGF0YSgpIHtcclxuICAgIGNvbnN0IG15R3JvdXAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdyb3VwKTtcclxuICAgIG15R3JvdXAuek1vZGVsID0gdGhpcy5teU1vZGVsO1xyXG5cclxuICAgIHRoaXMubWFpblNlcnZpY2UudXBkYXRlTW9kZWxPYnNlcnZhYmxlKG51bGwsIG15R3JvdXAsIHRoaXMubXlGb3JtR3JvdXApLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6IChyZXNwKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRWYWx1ZSA9IHRoaXMubXlGb3JtR3JvdXAudmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRWRpdE1vZGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1haW5TZXJ2aWNlLmhhbmRsZUVycm9yKERlZmF1bHRNZXNzYWdlLnVwZGF0ZUZhaWxDb250YWN0QWRtaW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxFZGl0KCkge1xyXG4gICAgdGhpcy5teUZvcm1Hcm91cC5yZXNldCh0aGlzLmluaXRWYWx1ZSk7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmluaXRWYWx1ZSkpIHtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKGtleSwgdGhpcy5pbml0VmFsdWVba2V5XSwgdGhpcy5ncm91cCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvZ2dsZUVkaXRNb2RlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpZWxkVmFsdWVzKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0QnV0dG9uVmlzaWJsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5WYWx1ZSkpIHtcclxuICAgICAgY29uc3QgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcclxuICAgICAgdGhpcy5nZXRGb3JtQ29udHJvbHModGhpcy5kYXRhLlZhbHVlLCBmb3JtQ29udHJvbHMpO1xyXG4gICAgICB0aGlzLm15Rm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChmb3JtQ29udHJvbHMpO1xyXG4gICAgICB0aGlzLmluaXRWYWx1ZSA9IHRoaXMubXlGb3JtR3JvdXAudmFsdWU7XHJcblxyXG4gICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGb3JtQ29udHJvbHMoZmllbGRBcnJheTogQXJyYXk8WkZpZWxkPiwgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0pIHtcclxuICAgIGZpZWxkQXJyYXkuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGlmICghKHR5cGVvZiBmaWVsZC5WYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBmaWVsZC5WYWx1ZS5pbmRleE9mKFwiLlwiKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQuVmFsdWUpKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9scyhmaWVsZC5WYWx1ZSwgZm9ybUNvbnRyb2xzKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybS5jb250cm9sc1tmaWVsZC5WYWx1ZV0pIHtcclxuICAgICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5WYWx1ZV0gPSB0aGlzLmZvcm0uY29udHJvbHNbZmllbGQuVmFsdWVdIGFzIGFueTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwia2NhcmQtY29udGFpbmVyIGUxdGFnLWNvbnRhaW5lci1zdHlsZVwiXHJcbiAgICAgKm5nSWY9XCIhaXNMb2FkaW5nICYmICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgICAgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlXCIgW2NsYXNzXT1cImRhdGEuQ29tcG9uZW50U3R5bGVUeXBlXCI+XHJcbiAgPGtlbmRvLWNhcmQgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MobnVsbCwgZGF0YSlcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5jb250YWluZXJTdHlsZS5zdHlsZTFcIlxyXG4gICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhLkNvbXBvbmVudFN0eWxlVHlwZVwiIGNsYXNzPVwiZTF0YWctY29udGFpbmVyLXN0eWxlMVwiPlxyXG4gICAgPGtlbmRvLWNhcmQtaGVhZGVyIGNsYXNzPVwiay1oc3RhY2sgY2FyZC1oZWFkZXIgZTF0YWctY29udGFpbmVyLXN0eWxlMlwiICpuZ0lmPVwiZGF0YS5JY29uIHx8IGRhdGEuVGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlMlwiPlxyXG4gICAgICA8ZGl2IGtlbmRvQ2FyZFRpdGxlIGNsYXNzPVwiY2FyZC1oZWFkZXItY29udGVudCBlMXRhZy1jb250YWluZXItc3R5bGUzXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGUuc3R5bGUzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZnQtcGFuZWwgZTF0YWctY29udGFpbmVyLXN0eWxlNFwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlNFwiPlxyXG4gICAgICAgICAgPGZhLWljb24gKm5nSWY9XCJjb21wb25lbnRQcm9wZXJ0aWVzLmljb25cIiBjbGFzcz1cImNhcmQtaWNvbiBlMXRhZy1jb250YWluZXItc3R5bGU2XCJcclxuICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImdldEZvbnRBd2Vzb21lKGNvbXBvbmVudFByb3BlcnRpZXMuaWNvbi50b1N0cmluZygpLCBmb250QXdlU29tZVNlcnZpY2UpXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlNlwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgIDxpb24tbGFiZWwgKm5nSWY9XCJjb21wb25lbnRQcm9wZXJ0aWVzLnRpdGxlXCIgY2xhc3M9XCJjYXJkLXRpdGxlIGUxdGFnLWNvbnRhaW5lci1zdHlsZTdcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5jb250YWluZXJTdHlsZS5zdHlsZTdcIj57e2NvbXBvbmVudFByb3BlcnRpZXMudGl0bGV9fTwvaW9uLWxhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1wYW5lbCBlMXRhZy1jb250YWluZXItc3R5bGU1XCIgKm5nSWY9XCJkYXRhLkVkaXRCdXR0b25WaXNpYmxlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGUuc3R5bGU1XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVhZC1tb2RlLWJ0bnNcIiAqbmdJZj1cIiFkYXRhWydfRWRpdE1vZGUnXS52YWx1ZVwiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIChjbGljayk9XCJ0b2dnbGVFZGl0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImVkaXRcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tbGFiZWwgaW9uLXRleHQtY2FwaXRhbGl6ZVwiPnt7Z2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ0VkaXQnKX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0LW1vZGUtYnRuc1wiICpuZ0lmPVwiZGF0YVsnX0VkaXRNb2RlJ10udmFsdWVcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgKGNsaWNrKT1cInNhdmVEYXRhKClcIj5cclxuICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiY2hlY2tcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tbGFiZWwgaW9uLXRleHQtY2FwaXRhbGl6ZVwiPnt7Z2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1NhdmUnKX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIHNpemU9XCJzbWFsbFwiIHN0cm9uZz1cImZhbHNlXCIgKGNsaWNrKT1cImNhbmNlbEVkaXQoKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWxhYmVsIGlvbi10ZXh0LWNhcGl0YWxpemVcIj57e2dldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdDYW5jZWwnKX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2tlbmRvLWNhcmQtaGVhZGVyPlxyXG4gICAgPGtlbmRvLWNhcmQtYm9keT5cclxuICAgICAgPGFwcC16ZGl2IGNsYXNzPVwiZTF0YWctY29udGFpbmVyLXN0eWxlOFwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlOFwiIFtkYXRhXT1cImRhdGFcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwibXlGb3JtR3JvdXAgPyBteUZvcm1Hcm91cCA6IGZvcm1cIiBbZ3JvdXBdPVwiZ3JvdXBcIj5cclxuICAgICAgPC9hcHAtemRpdj5cclxuXHJcbiAgICAgIDwhLS0gPGFwcC16Zm9ybWNvbnRyb2wgW25nQ2xhc3NdPVwiZ3JvdXBbZmllbGQuaXNWaXNpYmxlRmllbGRdID8gZmllbGQuRGl2Q2xhc3MgOlxyXG4gICAgICAgICgoZmllbGQuVmlzaWJsZSA9PT0gdHJ1ZSkgPyAgZmllbGQuRGl2Q2xhc3MgOiAnZmxleC1oaWRlJylcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBkYXRhLlZhbHVlIHwgZGl2emxheW91dDogZGF0YS56bGF5b3V0XCIgW2ZpZWxkXT1cImZpZWxkXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgaWQ9XCJ7e2ZpZWxkLlR5cGV9fS17e2ZpZWxkLk5hbWV9fVwiPlxyXG4gICAgICA8L2FwcC16Zm9ybWNvbnRyb2w+IC0tPlxyXG4gICAgPC9rZW5kby1jYXJkLWJvZHk+XHJcbiAgPC9rZW5kby1jYXJkPlxyXG48L2Rpdj5cclxuIl19