@gipisistemas/ng-core 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. package/assets/styles/colors.scss +5 -1
  2. package/bundles/gipisistemas-ng-core.umd.js +8379 -7856
  3. package/bundles/gipisistemas-ng-core.umd.js.map +1 -1
  4. package/bundles/gipisistemas-ng-core.umd.min.js +10 -9
  5. package/bundles/gipisistemas-ng-core.umd.min.js.map +1 -1
  6. package/core/gipi-components/models/sort.model.d.ts +3 -3
  7. package/core/utils/array.util.d.ts +2 -2
  8. package/core/utils/object.util.d.ts +3 -5
  9. package/esm2015/core/gipi-components/models/sort.model.js +1 -1
  10. package/esm2015/core/gipi-components/services/abstract-crud.service.js +18 -24
  11. package/esm2015/core/utils/array.util.js +4 -2
  12. package/esm2015/core/utils/object.util.js +5 -9
  13. package/esm2015/gipi-components.js +10 -1
  14. package/esm2015/shared/components/input/input.component.js +46 -23
  15. package/esm2015/shared/components/table/table.component.js +1 -1
  16. package/esm2015/shared/gipi-components/abstract-form/abstract-form.component.js +1 -1
  17. package/esm2015/shared/gipi-components/button/button.component.js +2 -2
  18. package/esm2015/shared/gipi-components/card/card.component.js +113 -0
  19. package/esm2015/shared/gipi-components/datepicker/datepicker/datepicker.component.js +8 -3
  20. package/esm2015/shared/gipi-components/empty-state/empty-state.component.js +30 -0
  21. package/esm2015/shared/gipi-components/layout-grid/col.directive.js +4 -4
  22. package/esm2015/shared/gipi-components/month-year-picker/month-year-picker.component.js +2 -2
  23. package/esm2015/shared/gipi-components/notification/notification.component.js +8 -3
  24. package/esm2015/shared/gipi-components/sidebar/sidenav/sidenav.component.js +35 -3
  25. package/esm2015/shared/gipi-components/slide-toggle/slide-toggle.component.js +113 -0
  26. package/esm2015/shared/gipi-components/tabs/shared/dynamic-tab.directive.js +18 -0
  27. package/esm2015/shared/gipi-components/tabs/shared/tab.model.js +8 -0
  28. package/esm2015/shared/gipi-components/tabs/tab/tab.component.js +66 -0
  29. package/esm2015/shared/gipi-components/tabs/tab-group/tab-group.component.js +123 -0
  30. package/esm2015/shared/gipi-components/textarea/textarea.component.js +298 -0
  31. package/esm2015/shared/shared.module.js +20 -16
  32. package/esm2015/shared.js +1 -5
  33. package/esm5/core/gipi-components/models/sort.model.js +1 -1
  34. package/esm5/core/gipi-components/services/abstract-crud.service.js +18 -24
  35. package/esm5/core/utils/array.util.js +4 -3
  36. package/esm5/core/utils/object.util.js +5 -9
  37. package/esm5/gipi-components.js +10 -1
  38. package/esm5/shared/components/input/input.component.js +46 -23
  39. package/esm5/shared/components/table/table.component.js +1 -1
  40. package/esm5/shared/gipi-components/abstract-form/abstract-form.component.js +1 -1
  41. package/esm5/shared/gipi-components/button/button.component.js +2 -2
  42. package/esm5/shared/gipi-components/card/card.component.js +135 -0
  43. package/esm5/shared/gipi-components/datepicker/datepicker/datepicker.component.js +8 -3
  44. package/esm5/shared/gipi-components/empty-state/empty-state.component.js +33 -0
  45. package/esm5/shared/gipi-components/layout-grid/col.directive.js +4 -4
  46. package/esm5/shared/gipi-components/month-year-picker/month-year-picker.component.js +2 -2
  47. package/esm5/shared/gipi-components/notification/notification.component.js +8 -3
  48. package/esm5/shared/gipi-components/sidebar/sidenav/sidenav.component.js +35 -3
  49. package/esm5/shared/gipi-components/slide-toggle/slide-toggle.component.js +127 -0
  50. package/esm5/shared/gipi-components/tabs/shared/dynamic-tab.directive.js +19 -0
  51. package/esm5/shared/gipi-components/tabs/shared/tab.model.js +10 -0
  52. package/esm5/shared/gipi-components/tabs/tab/tab.component.js +67 -0
  53. package/esm5/shared/gipi-components/tabs/tab-group/tab-group.component.js +131 -0
  54. package/esm5/shared/gipi-components/textarea/textarea.component.js +352 -0
  55. package/esm5/shared/shared.module.js +20 -16
  56. package/esm5/shared.js +1 -5
  57. package/fesm2015/gipisistemas-ng-core.js +1741 -1303
  58. package/fesm2015/gipisistemas-ng-core.js.map +1 -1
  59. package/fesm5/gipisistemas-ng-core.js +8369 -7851
  60. package/fesm5/gipisistemas-ng-core.js.map +1 -1
  61. package/gipi-components.d.ts +8 -0
  62. package/gipisistemas-ng-core.metadata.json +1 -1
  63. package/package.json +1 -2
  64. package/shared/components/input/input.component.d.ts +13 -11
  65. package/shared/components/table/table.component.d.ts +3 -3
  66. package/shared/gipi-components/card/card.component.d.ts +23 -0
  67. package/shared/gipi-components/empty-state/empty-state.component.d.ts +5 -0
  68. package/shared/gipi-components/notification/notification.component.d.ts +1 -0
  69. package/shared/gipi-components/sidebar/sidenav/sidenav.component.d.ts +7 -0
  70. package/shared/gipi-components/slide-toggle/slide-toggle.component.d.ts +27 -0
  71. package/shared/{directives → gipi-components/tabs/shared}/dynamic-tab.directive.d.ts +1 -1
  72. package/shared/gipi-components/tabs/shared/tab.model.d.ts +12 -0
  73. package/shared/{components → gipi-components/tabs}/tab/tab.component.d.ts +4 -2
  74. package/shared/gipi-components/tabs/tab-group/tab-group.component.d.ts +22 -0
  75. package/shared/gipi-components/textarea/textarea.component.d.ts +68 -0
  76. package/shared.d.ts +0 -4
  77. package/esm2015/shared/components/select-button/select-button.component.js +0 -181
  78. package/esm2015/shared/components/tab/tab.component.js +0 -57
  79. package/esm2015/shared/components/tab-group/tab-group.component.js +0 -117
  80. package/esm2015/shared/directives/dynamic-tab.directive.js +0 -18
  81. package/esm5/shared/components/select-button/select-button.component.js +0 -195
  82. package/esm5/shared/components/tab/tab.component.js +0 -58
  83. package/esm5/shared/components/tab-group/tab-group.component.js +0 -125
  84. package/esm5/shared/directives/dynamic-tab.directive.js +0 -19
  85. package/shared/components/select-button/select-button.component.d.ts +0 -35
  86. package/shared/components/tab-group/tab-group.component.d.ts +0 -22
@@ -0,0 +1,131 @@
1
+ import { __decorate, __metadata, __read, __spread } from "tslib";
2
+ import { AfterContentInit, Component, ComponentFactory, ComponentFactoryResolver, ComponentRef, ContentChildren, ElementRef, OnInit, QueryList, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';
3
+ import { GIPIDynamicTabDirective } from '../shared/dynamic-tab.directive';
4
+ import { TabModel } from '../shared/tab.model';
5
+ import { GIPITabComponent } from '../tab/tab.component';
6
+ var GIPITabGroupComponent = /** @class */ (function () {
7
+ function GIPITabGroupComponent(elementRef, _componentFactoryResolver) {
8
+ this.elementRef = elementRef;
9
+ this._componentFactoryResolver = _componentFactoryResolver;
10
+ this.dynamicTabs = [];
11
+ }
12
+ GIPITabGroupComponent.prototype.ngOnInit = function () { };
13
+ GIPITabGroupComponent.prototype.ngAfterContentInit = function () {
14
+ var activeTabs = this.tabQueryList.filter(function (tab) { return tab.active; });
15
+ if (activeTabs.length === 0 && this.tabQueryList.length > 0) {
16
+ this.selectTab(this.tabQueryList.first);
17
+ }
18
+ };
19
+ GIPITabGroupComponent.prototype.openTab = function (label, template, data, closeable, disabled, action) {
20
+ if (closeable === void 0) { closeable = false; }
21
+ if (disabled === void 0) { disabled = false; }
22
+ var tab = new TabModel();
23
+ tab.label = label;
24
+ tab.template = template;
25
+ tab.data = data;
26
+ tab.closeable = closeable;
27
+ tab.disabled = disabled;
28
+ tab.action = action;
29
+ this._openTabs(Array(tab));
30
+ };
31
+ GIPITabGroupComponent.prototype._openTabs = function (tabList) {
32
+ var _a;
33
+ var _this = this;
34
+ var tabsComponent = tabList.map(function (tab) { return _this._getTabComponent(tab.label, tab.template, tab.data, tab.closeable, tab.disabled, tab.action); });
35
+ (_a = this.dynamicTabs).push.apply(_a, __spread(tabsComponent));
36
+ this.selectTab(this.dynamicTabs[0]);
37
+ };
38
+ GIPITabGroupComponent.prototype._getTabComponent = function (label, template, data, closeable, disabled, action) {
39
+ if (closeable === void 0) { closeable = false; }
40
+ if (disabled === void 0) { disabled = false; }
41
+ var componentFactory = this._componentFactoryResolver.resolveComponentFactory(GIPITabComponent);
42
+ var componentRef = this.dynamicTabPlaceholder.viewContainer.createComponent(componentFactory);
43
+ var instance = componentRef.instance;
44
+ instance.label = label;
45
+ instance.template = template;
46
+ instance.data = data;
47
+ instance.closeable = closeable;
48
+ instance.disabled = disabled;
49
+ instance.action = action;
50
+ return componentRef.instance;
51
+ };
52
+ GIPITabGroupComponent.prototype.selectTab = function (tab) {
53
+ this.tabQueryList.toArray().forEach(function (t) { return (t.active = false); });
54
+ this.dynamicTabs.forEach(function (t) { return (t.active = false); });
55
+ tab.active = true;
56
+ tab.selectionChange.emit();
57
+ if (tab.action) {
58
+ tab.action(tab.data);
59
+ }
60
+ };
61
+ GIPITabGroupComponent.prototype.closeTab = function (tab) {
62
+ var index = this.dynamicTabs.indexOf(tab);
63
+ this.dynamicTabs.splice(index, 1);
64
+ var viewContainerRef = this.dynamicTabPlaceholder.viewContainer;
65
+ viewContainerRef.remove(index);
66
+ if (this.tabQueryList.length > 0) {
67
+ this.selectTab(this.tabQueryList.first);
68
+ }
69
+ };
70
+ GIPITabGroupComponent.prototype.closeActiveTab = function () {
71
+ var activeTabs = this.dynamicTabs.filter(function (tab) { return tab.active; });
72
+ if (activeTabs.length > 0) {
73
+ this.closeTab(activeTabs[0]);
74
+ }
75
+ };
76
+ GIPITabGroupComponent.prototype.closeAllTabs = function () {
77
+ var _this = this;
78
+ var tabs = Object.assign([], this.dynamicTabs);
79
+ if (tabs.length > 0) {
80
+ tabs.forEach(function (tab) { return _this.closeTab(tab); });
81
+ }
82
+ };
83
+ GIPITabGroupComponent.prototype.nextTab = function () {
84
+ var currentTab = this.tabQueryList.toArray().find(function (tab) { return tab.active; });
85
+ var nextTab = this.tabQueryList.toArray()[this.tabQueryList.toArray().indexOf(currentTab) + 1];
86
+ if (nextTab != null) {
87
+ this.tabQueryList.toArray().forEach(function (t) { return (t.active = false); });
88
+ this.dynamicTabs.forEach(function (t) { return (t.active = false); });
89
+ nextTab.active = true;
90
+ nextTab.selectionChange.emit();
91
+ }
92
+ };
93
+ GIPITabGroupComponent.prototype.previousTab = function () {
94
+ var currentTab = this.tabQueryList.toArray().find(function (tab) { return tab.active; });
95
+ var previousTab = this.tabQueryList.toArray()[this.tabQueryList.toArray().indexOf(currentTab) - 1];
96
+ if (previousTab != null) {
97
+ this.tabQueryList.toArray().forEach(function (t) { return (t.active = false); });
98
+ this.dynamicTabs.forEach(function (t) { return (t.active = false); });
99
+ previousTab.active = true;
100
+ previousTab.selectionChange.emit();
101
+ }
102
+ };
103
+ GIPITabGroupComponent.ctorParameters = function () { return [
104
+ { type: ElementRef },
105
+ { type: ComponentFactoryResolver }
106
+ ]; };
107
+ __decorate([
108
+ ContentChildren(GIPITabComponent),
109
+ __metadata("design:type", QueryList)
110
+ ], GIPITabGroupComponent.prototype, "tabQueryList", void 0);
111
+ __decorate([
112
+ ViewChild(GIPIDynamicTabDirective, { static: false }),
113
+ __metadata("design:type", GIPIDynamicTabDirective)
114
+ ], GIPITabGroupComponent.prototype, "dynamicTabPlaceholder", void 0);
115
+ GIPITabGroupComponent = __decorate([
116
+ Component({
117
+ selector: 'gipi-tab-group',
118
+ exportAs: 'gipiTabGroup',
119
+ template: "<nav mat-tab-nav-bar>\n <a mat-tab-link\n *ngFor=\"let tab of tabQueryList\"\n (click)=\"selectTab(tab)\"\n [class.active]=\"tab.active\"\n [disabled]=\"tab.disabled\">\n <mat-icon *ngIf=\"tab.icon || tab.svgIcon\"\n [svgIcon]=\"tab.svgIcon ? tab.svgIcon : ''\">\n {{ !tab.svgIcon && tab.icon ? tab.icon : '' }}\n </mat-icon>\n\n {{ tab.label }}\n </a>\n\n <a mat-tab-link\n *ngFor=\"let tab of dynamicTabs\"\n (click)=\"selectTab(tab)\"\n [class.active]=\"tab.active\"\n [disabled]=\"tab.disabled\">\n <mat-icon *ngIf=\"tab.icon || tab.svgIcon\"\n [svgIcon]=\"tab.svgIcon ? tab.svgIcon : ''\">\n {{ !tab.svgIcon && tab.icon ? tab.icon : '' }}\n </mat-icon>\n\n {{ tab.label }}\n </a>\n</nav>\n\n<ng-content> </ng-content>\n<ng-template dynamicTab\n #container>\n</ng-template>",
120
+ host: {
121
+ 'class': 'gipi-tab-group',
122
+ },
123
+ styles: [":host{display:block;flex:1;width:100%;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1)}:host ::ng-deep .mat-tab-nav-bar{background:#f5f5f6;border:none;border-radius:.4rem;padding:.4rem;box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1)}:host ::ng-deep .mat-tab-links{display:flex;gap:1rem}:host ::ng-deep .mat-tab-link{height:auto!important;padding:1rem!important;opacity:1!important;border:none!important;border-radius:4px!important;transition:.2s!important;color:#595959!important;gap:1rem}:host ::ng-deep .mat-tab-link>mat-icon{width:2rem!important;height:2rem!important;font-size:2rem!important;color:#595959!important}:host ::ng-deep .mat-tab-link>mat-icon svg,:host ::ng-deep .mat-tab-link>mat-icon svg g path,:host ::ng-deep .mat-tab-link>mat-icon svg path{color:#595959!important;fill:#595959!important}:host ::ng-deep .mat-tab-link:not(.active):hover{background:#e0e1e2!important}:host ::ng-deep .mat-tab-link.active{background:#e0313e!important;color:#fff!important}:host ::ng-deep .mat-tab-link.active>mat-icon{color:#fff!important}:host ::ng-deep .mat-tab-link.active>mat-icon svg,:host ::ng-deep .mat-tab-link.active>mat-icon svg g path,:host ::ng-deep .mat-tab-link.active>mat-icon svg path{color:#fff!important;fill:#fff!important}:host ::ng-deep .mat-tab-link:disabled,:host ::ng-deep .mat-tab-link:disabled>mat-icon{color:#9a9da2!important;fill:#9a9da2!important}:host ::ng-deep .mat-tab-link:disabled svg,:host ::ng-deep .mat-tab-link:disabled svg g path,:host ::ng-deep .mat-tab-link:disabled svg path,:host ::ng-deep .mat-tab-link:disabled>mat-icon svg,:host ::ng-deep .mat-tab-link:disabled>mat-icon svg g path,:host ::ng-deep .mat-tab-link:disabled>mat-icon svg path{color:#9a9da2!important;fill:#9a9da2!important}:host ::ng-deep .mat-ink-bar{display:none!important}"]
124
+ }),
125
+ __metadata("design:paramtypes", [ElementRef,
126
+ ComponentFactoryResolver])
127
+ ], GIPITabGroupComponent);
128
+ return GIPITabGroupComponent;
129
+ }());
130
+ export { GIPITabGroupComponent };
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BnaXBpc2lzdGVtYXMvbmctY29yZS8iLCJzb3VyY2VzIjpbInNoYXJlZC9naXBpLWNvbXBvbmVudHMvdGFicy90YWItZ3JvdXAvdGFiLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaE4sT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBV3hEO0lBT0ksK0JBQ1csVUFBc0IsRUFDckIseUJBQW1EO1FBRHBELGVBQVUsR0FBVixVQUFVLENBQVk7UUFDckIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEwQjtRQUp4RCxnQkFBVyxHQUF1QixFQUFFLENBQUM7SUFLeEMsQ0FBQztJQUVMLHdDQUFRLEdBQVIsY0FBbUIsQ0FBQztJQUVwQixrREFBa0IsR0FBbEI7UUFDSSxJQUFNLFVBQVUsR0FBdUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsTUFBTSxFQUFWLENBQVUsQ0FBQyxDQUFDO1FBQ25GLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMs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Q29tcG9uZW50RmFjdG9yeSwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgT25Jbml0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgR0lQSUR5bmFtaWNUYWJEaXJlY3RpdmUgfSBmcm9tICcuLi9zaGFyZWQvZHluYW1pYy10YWIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRhYk1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL3RhYi5tb2RlbCc7XG5pbXBvcnQgeyBHSVBJVGFiQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFiL3RhYi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2dpcGktdGFiLWdyb3VwJyxcbiAgICBleHBvcnRBczogJ2dpcGlUYWJHcm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYi1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFiLWdyb3VwLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAnZ2lwaS10YWItZ3JvdXAnLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdJUElUYWJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uSW5pdCB7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKEdJUElUYWJDb21wb25lbnQpIHRhYlF1ZXJ5TGlzdDogUXVlcnlMaXN0PEdJUElUYWJDb21wb25lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoR0lQSUR5bmFtaWNUYWJEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSB9KSBkeW5hbWljVGFiUGxhY2Vob2xkZXI6IEdJUElEeW5hbWljVGFiRGlyZWN0aXZlO1xuXG4gICAgcHVibGljIGR5bmFtaWNUYWJzOiBHSVBJVGFiQ29tcG9uZW50W10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICApIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlVGFiczogR0lQSVRhYkNvbXBvbmVudFtdID0gdGhpcy50YWJRdWVyeUxpc3QuZmlsdGVyKHRhYiA9PiB0YWIuYWN0aXZlKTtcbiAgICAgICAgaWYgKGFjdGl2ZVRhYnMubGVuZ3RoID09PSAwICYmIHRoaXMudGFiUXVlcnlMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VGFiKHRoaXMudGFiUXVlcnlMaXN0LmZpcnN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuVGFiKGxhYmVsOiBzdHJpbmcsIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PiwgZGF0YT86IGFueSwgY2xvc2VhYmxlOiBib29sZWFuID0gZmFsc2UsIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2UsIGFjdGlvbj86IChvYmo6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWI6IFRhYk1vZGVsID0gbmV3IFRhYk1vZGVsKCk7XG4gICAgICAgIHRhYi5sYWJlbCA9IGxhYmVsO1xuICAgICAgICB0YWIudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICAgICAgdGFiLmRhdGEgPSBkYXRhO1xuICAgICAgICB0YWIuY2xvc2VhYmxlID0gY2xvc2VhYmxlO1xuICAgICAgICB0YWIuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgdGFiLmFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgdGhpcy5fb3BlblRhYnMoQXJyYXkodGFiKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfb3BlblRhYnModGFiTGlzdDogVGFiTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJzQ29tcG9uZW50OiBHSVBJVGFiQ29tcG9uZW50W10gPSB0YWJMaXN0Lm1hcCh0YWIgPT4gdGhpcy5fZ2V0VGFiQ29tcG9uZW50KHRhYi5sYWJlbCwgdGFiLnRlbXBsYXRlLCB0YWIuZGF0YSwgdGFiLmNsb3NlYWJsZSwgdGFiLmRpc2FibGVkLCB0YWIuYWN0aW9uKSk7XG4gICAgICAgIHRoaXMuZHluYW1pY1RhYnMucHVzaCguLi50YWJzQ29tcG9uZW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIodGhpcy5keW5hbWljVGFic1swXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VGFiQ29tcG9uZW50KGxhYmVsOiBzdHJpbmcsIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PiwgZGF0YT86IGFueSwgY2xvc2VhYmxlOiBib29sZWFuID0gZmFsc2UsIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2UsIGFjdGlvbj86IChvYmo6IGFueSkgPT4gdm9pZCk6IEdJUElUYWJDb21wb25lbnQge1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PEdJUElUYWJDb21wb25lbnQ+ID0gdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEdJUElUYWJDb21wb25lbnQpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxHSVBJVGFiQ29tcG9uZW50PiA9IHRoaXMuZHluYW1pY1RhYlBsYWNlaG9sZGVyLnZpZXdDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5sYWJlbCA9IGxhYmVsO1xuICAgICAgICBpbnN0YW5jZS50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICBpbnN0YW5jZS5kYXRhID0gZGF0YTtcbiAgICAgICAgaW5zdGFuY2UuY2xvc2VhYmxlID0gY2xvc2VhYmxlO1xuICAgICAgICBpbnN0YW5jZS5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICBpbnN0YW5jZS5hY3Rpb24gPSBhY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0VGFiKHRhYjogR0lQSVRhYkNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYlF1ZXJ5TGlzdC50b0FycmF5KCkuZm9yRWFjaCh0ID0+ICh0LmFjdGl2ZSA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMuZHluYW1pY1RhYnMuZm9yRWFjaCh0ID0+ICh0LmFjdGl2ZSA9IGZhbHNlKSk7XG4gICAgICAgIHRhYi5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0YWIuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoKTtcblxuICAgICAgICBpZiAodGFiLmFjdGlvbikge1xuICAgICAgICAgICAgdGFiLmFjdGlvbih0YWIuZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2VUYWIodGFiOiBHSVBJVGFiQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLmR5bmFtaWNUYWJzLmluZGV4T2YodGFiKTtcbiAgICAgICAgdGhpcy5keW5hbWljVGFicy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYgPSB0aGlzLmR5bmFtaWNUYWJQbGFjZWhvbGRlci52aWV3Q29udGFpbmVyO1xuICAgICAgICB2aWV3Q29udGFpbmVyUmVmLnJlbW92ZShpbmRleCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGFiUXVlcnlMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0VGFiKHRoaXMudGFiUXVlcnlMaXN0LmZpcnN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZUFjdGl2ZVRhYigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWN0aXZlVGFicyA9IHRoaXMuZHluYW1pY1RhYnMuZmlsdGVyKHRhYiA9PiB0YWIuYWN0aXZlKTtcbiAgICAgICAgaWYgKGFjdGl2ZVRhYnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVRhYihhY3RpdmVUYWJzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZUFsbFRhYnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLmR5bmFtaWNUYWJzKTtcbiAgICAgICAgaWYgKHRhYnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGFicy5mb3JFYWNoKHRhYiA9PiB0aGlzLmNsb3NlVGFiKHRhYikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5leHRUYWIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYWI6IEdJUElUYWJDb21wb25lbnQgPSB0aGlzLnRhYlF1ZXJ5TGlzdC50b0FycmF5KCkuZmluZCh0YWIgPT4gdGFiLmFjdGl2ZSk7XG4gICAgICAgIGNvbnN0IG5leHRUYWI6IEdJUElUYWJDb21wb25lbnQgPSB0aGlzLnRhYlF1ZXJ5TGlzdC50b0FycmF5KClbdGhpcy50YWJRdWVyeUxpc3QudG9BcnJheSgpLmluZGV4T2YoY3VycmVudFRhYikgKyAxXTtcbiAgICAgICAgaWYgKG5leHRUYWIgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy50YWJRdWVyeUxpc3QudG9BcnJheSgpLmZvckVhY2godCA9PiAodC5hY3RpdmUgPSBmYWxzZSkpO1xuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFicy5mb3JFYWNoKHQgPT4gKHQuYWN0aXZlID0gZmFsc2UpKTtcbiAgICAgICAgICAgIG5leHRUYWIuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRUYWIuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwcmV2aW91c1RhYigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRhYjogR0lQSVRhYkNvbXBvbmVudCA9IHRoaXMudGFiUXVlcnlMaXN0LnRvQXJyYXkoKS5maW5kKHRhYiA9PiB0YWIuYWN0aXZlKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNUYWI6IEdJUElUYWJDb21wb25lbnQgPSB0aGlzLnRhYlF1ZXJ5TGlzdC50b0FycmF5KClbdGhpcy50YWJRdWVyeUxpc3QudG9BcnJheSgpLmluZGV4T2YoY3VycmVudFRhYikgLSAxXTtcbiAgICAgICAgaWYgKHByZXZpb3VzVGFiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudGFiUXVlcnlMaXN0LnRvQXJyYXkoKS5mb3JFYWNoKHQgPT4gKHQuYWN0aXZlID0gZmFsc2UpKTtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1RhYnMuZm9yRWFjaCh0ID0+ICh0LmFjdGl2ZSA9IGZhbHNlKSk7XG4gICAgICAgICAgICBwcmV2aW91c1RhYi5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgcHJldmlvdXNUYWIuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4iXX0=
@@ -0,0 +1,352 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { coerceBooleanProperty, coerceCssPixelValue } from '@angular/cdk/coercion';
3
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, Input, OnInit } from '@angular/core';
4
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ var nextUniqueId = 0;
6
+ var GIPITextareaComponent = /** @class */ (function () {
7
+ function GIPITextareaComponent(elementRef, _changeDetectorRef) {
8
+ this.elementRef = elementRef;
9
+ this._changeDetectorRef = _changeDetectorRef;
10
+ this._name = "gipi-textarea-" + nextUniqueId++;
11
+ this.id = this._name;
12
+ this.name = this._name;
13
+ this.label = '';
14
+ this.placeholder = '';
15
+ this.cols = 20;
16
+ this.rows = 4;
17
+ this.help = '';
18
+ this.maxlength = 254;
19
+ this.minlength = 0;
20
+ this._resize = 'horizontal';
21
+ this._minHeight = '60px';
22
+ this._height = '60px';
23
+ this._maxHeight = 'auto';
24
+ this._autocomplete = 'off';
25
+ this._autofocus = false;
26
+ this._readOnly = false;
27
+ this._required = false;
28
+ this._disabled = false;
29
+ this._lowerCase = false;
30
+ this._upperCase = false;
31
+ this._spaceDrop = false;
32
+ this.onChange = function () { };
33
+ this.onTouched = function () { };
34
+ }
35
+ GIPITextareaComponent_1 = GIPITextareaComponent;
36
+ Object.defineProperty(GIPITextareaComponent.prototype, "resize", {
37
+ get: function () {
38
+ return this._resize;
39
+ },
40
+ set: function (value) {
41
+ if (value !== this.resize) {
42
+ this._resize = value.toLowerCase();
43
+ this._changeDetectorRef.detectChanges();
44
+ }
45
+ },
46
+ enumerable: false,
47
+ configurable: true
48
+ });
49
+ Object.defineProperty(GIPITextareaComponent.prototype, "minHeight", {
50
+ get: function () {
51
+ return this._minHeight;
52
+ },
53
+ set: function (value) {
54
+ if (value.trim().toUpperCase() === 'AUTO') {
55
+ this._minHeight = 'auto';
56
+ }
57
+ else {
58
+ this._minHeight = coerceCssPixelValue(value);
59
+ }
60
+ },
61
+ enumerable: false,
62
+ configurable: true
63
+ });
64
+ Object.defineProperty(GIPITextareaComponent.prototype, "height", {
65
+ get: function () {
66
+ return this._height;
67
+ },
68
+ set: function (value) {
69
+ if (value.trim().toUpperCase() === 'AUTO') {
70
+ this._height = 'auto';
71
+ }
72
+ else {
73
+ this._height = coerceCssPixelValue(value);
74
+ }
75
+ },
76
+ enumerable: false,
77
+ configurable: true
78
+ });
79
+ Object.defineProperty(GIPITextareaComponent.prototype, "maxHeight", {
80
+ get: function () {
81
+ return this._maxHeight;
82
+ },
83
+ set: function (value) {
84
+ if (value.trim().toUpperCase() === 'AUTO') {
85
+ this._maxHeight = 'auto';
86
+ }
87
+ else {
88
+ this._maxHeight = coerceCssPixelValue(value);
89
+ }
90
+ },
91
+ enumerable: false,
92
+ configurable: true
93
+ });
94
+ Object.defineProperty(GIPITextareaComponent.prototype, "autocomplete", {
95
+ get: function () {
96
+ return this._autocomplete;
97
+ },
98
+ set: function (value) {
99
+ this._autocomplete = value;
100
+ },
101
+ enumerable: false,
102
+ configurable: true
103
+ });
104
+ Object.defineProperty(GIPITextareaComponent.prototype, "autofocus", {
105
+ get: function () {
106
+ return this._autofocus;
107
+ },
108
+ set: function (value) {
109
+ this._autofocus = coerceBooleanProperty(value);
110
+ },
111
+ enumerable: false,
112
+ configurable: true
113
+ });
114
+ Object.defineProperty(GIPITextareaComponent.prototype, "readOnly", {
115
+ get: function () {
116
+ return this._readOnly;
117
+ },
118
+ set: function (value) {
119
+ this._readOnly = coerceBooleanProperty(value);
120
+ },
121
+ enumerable: false,
122
+ configurable: true
123
+ });
124
+ Object.defineProperty(GIPITextareaComponent.prototype, "required", {
125
+ get: function () {
126
+ return this._required;
127
+ },
128
+ set: function (value) {
129
+ this._required = coerceBooleanProperty(value);
130
+ },
131
+ enumerable: false,
132
+ configurable: true
133
+ });
134
+ Object.defineProperty(GIPITextareaComponent.prototype, "disabled", {
135
+ get: function () {
136
+ return this._disabled;
137
+ },
138
+ set: function (value) {
139
+ this._disabled = coerceBooleanProperty(value);
140
+ },
141
+ enumerable: false,
142
+ configurable: true
143
+ });
144
+ Object.defineProperty(GIPITextareaComponent.prototype, "lowerCase", {
145
+ get: function () {
146
+ return this._lowerCase;
147
+ },
148
+ set: function (value) {
149
+ this._lowerCase = coerceBooleanProperty(value);
150
+ },
151
+ enumerable: false,
152
+ configurable: true
153
+ });
154
+ Object.defineProperty(GIPITextareaComponent.prototype, "upperCase", {
155
+ get: function () {
156
+ return this._upperCase;
157
+ },
158
+ set: function (value) {
159
+ this._upperCase = coerceBooleanProperty(value);
160
+ },
161
+ enumerable: false,
162
+ configurable: true
163
+ });
164
+ Object.defineProperty(GIPITextareaComponent.prototype, "spaceDrop", {
165
+ get: function () {
166
+ return this._spaceDrop;
167
+ },
168
+ set: function (value) {
169
+ this._spaceDrop = coerceBooleanProperty(value);
170
+ },
171
+ enumerable: false,
172
+ configurable: true
173
+ });
174
+ Object.defineProperty(GIPITextareaComponent.prototype, "value", {
175
+ get: function () {
176
+ return this._value;
177
+ },
178
+ set: function (value) {
179
+ var valueAux = value;
180
+ valueAux = this._checkSpaceDrop(valueAux);
181
+ valueAux = this._checkLowercase(valueAux);
182
+ valueAux = this._checkUppercase(valueAux);
183
+ this._value = valueAux;
184
+ this.onChange(this._value);
185
+ this.onTouched(this._value);
186
+ },
187
+ enumerable: false,
188
+ configurable: true
189
+ });
190
+ GIPITextareaComponent.prototype.ngOnInit = function () { };
191
+ GIPITextareaComponent.prototype.writeValue = function (value) {
192
+ this._value = value;
193
+ };
194
+ GIPITextareaComponent.prototype.registerOnChange = function (fn) {
195
+ this.onChange = fn;
196
+ };
197
+ GIPITextareaComponent.prototype.registerOnTouched = function (fn) {
198
+ this.onTouched = fn;
199
+ };
200
+ GIPITextareaComponent.prototype.setDisabledState = function (isDisabled) {
201
+ this.disabled = isDisabled;
202
+ this._changeDetectorRef.markForCheck();
203
+ };
204
+ GIPITextareaComponent.prototype._checkSpaceDrop = function (value) {
205
+ if (this.spaceDrop && value) {
206
+ return value.replace(/\s/g, '');
207
+ }
208
+ return value;
209
+ };
210
+ GIPITextareaComponent.prototype._checkUppercase = function (value) {
211
+ if (this.upperCase && value) {
212
+ return value.toUpperCase();
213
+ }
214
+ return value;
215
+ };
216
+ GIPITextareaComponent.prototype._checkLowercase = function (value) {
217
+ if (this.lowerCase && value) {
218
+ return value.toLowerCase();
219
+ }
220
+ return value;
221
+ };
222
+ var GIPITextareaComponent_1;
223
+ GIPITextareaComponent.ctorParameters = function () { return [
224
+ { type: ElementRef },
225
+ { type: ChangeDetectorRef }
226
+ ]; };
227
+ __decorate([
228
+ Input(),
229
+ __metadata("design:type", String)
230
+ ], GIPITextareaComponent.prototype, "id", void 0);
231
+ __decorate([
232
+ Input(),
233
+ __metadata("design:type", String)
234
+ ], GIPITextareaComponent.prototype, "name", void 0);
235
+ __decorate([
236
+ Input(),
237
+ __metadata("design:type", String)
238
+ ], GIPITextareaComponent.prototype, "label", void 0);
239
+ __decorate([
240
+ Input(),
241
+ __metadata("design:type", String)
242
+ ], GIPITextareaComponent.prototype, "placeholder", void 0);
243
+ __decorate([
244
+ Input(),
245
+ __metadata("design:type", Number)
246
+ ], GIPITextareaComponent.prototype, "cols", void 0);
247
+ __decorate([
248
+ Input(),
249
+ __metadata("design:type", Number)
250
+ ], GIPITextareaComponent.prototype, "rows", void 0);
251
+ __decorate([
252
+ Input(),
253
+ __metadata("design:type", String)
254
+ ], GIPITextareaComponent.prototype, "help", void 0);
255
+ __decorate([
256
+ Input(),
257
+ __metadata("design:type", Number)
258
+ ], GIPITextareaComponent.prototype, "maxlength", void 0);
259
+ __decorate([
260
+ Input(),
261
+ __metadata("design:type", Number)
262
+ ], GIPITextareaComponent.prototype, "minlength", void 0);
263
+ __decorate([
264
+ Input(),
265
+ __metadata("design:type", String),
266
+ __metadata("design:paramtypes", [String])
267
+ ], GIPITextareaComponent.prototype, "resize", null);
268
+ __decorate([
269
+ Input(),
270
+ __metadata("design:type", String),
271
+ __metadata("design:paramtypes", [String])
272
+ ], GIPITextareaComponent.prototype, "minHeight", null);
273
+ __decorate([
274
+ Input(),
275
+ __metadata("design:type", String),
276
+ __metadata("design:paramtypes", [String])
277
+ ], GIPITextareaComponent.prototype, "height", null);
278
+ __decorate([
279
+ Input(),
280
+ __metadata("design:type", String),
281
+ __metadata("design:paramtypes", [String])
282
+ ], GIPITextareaComponent.prototype, "maxHeight", null);
283
+ __decorate([
284
+ Input(),
285
+ __metadata("design:type", String),
286
+ __metadata("design:paramtypes", [String])
287
+ ], GIPITextareaComponent.prototype, "autocomplete", null);
288
+ __decorate([
289
+ Input(),
290
+ __metadata("design:type", Boolean),
291
+ __metadata("design:paramtypes", [Boolean])
292
+ ], GIPITextareaComponent.prototype, "autofocus", null);
293
+ __decorate([
294
+ Input(),
295
+ __metadata("design:type", Boolean),
296
+ __metadata("design:paramtypes", [Boolean])
297
+ ], GIPITextareaComponent.prototype, "readOnly", null);
298
+ __decorate([
299
+ Input(),
300
+ __metadata("design:type", Boolean),
301
+ __metadata("design:paramtypes", [Boolean])
302
+ ], GIPITextareaComponent.prototype, "required", null);
303
+ __decorate([
304
+ Input(),
305
+ __metadata("design:type", Boolean),
306
+ __metadata("design:paramtypes", [Boolean])
307
+ ], GIPITextareaComponent.prototype, "disabled", null);
308
+ __decorate([
309
+ Input(),
310
+ __metadata("design:type", Boolean),
311
+ __metadata("design:paramtypes", [Boolean])
312
+ ], GIPITextareaComponent.prototype, "lowerCase", null);
313
+ __decorate([
314
+ Input(),
315
+ __metadata("design:type", Boolean),
316
+ __metadata("design:paramtypes", [Boolean])
317
+ ], GIPITextareaComponent.prototype, "upperCase", null);
318
+ __decorate([
319
+ Input(),
320
+ __metadata("design:type", Boolean),
321
+ __metadata("design:paramtypes", [Boolean])
322
+ ], GIPITextareaComponent.prototype, "spaceDrop", null);
323
+ __decorate([
324
+ Input(),
325
+ __metadata("design:type", Object),
326
+ __metadata("design:paramtypes", [Object])
327
+ ], GIPITextareaComponent.prototype, "value", null);
328
+ GIPITextareaComponent = GIPITextareaComponent_1 = __decorate([
329
+ Component({
330
+ selector: 'gipi-textarea',
331
+ exportAs: 'gipiTextarea',
332
+ template: "<label class=\"textarea-label\"\n *ngIf=\"label\"\n [attr.for]=\"id\">\n {{ label }}\n <span *ngIf=\"required\"> * </span>\n</label>\n\n<textarea class=\"textarea-element\"\n [attr.id]=\"id\"\n [attr.name]=\"name\"\n [placeholder]=\"placeholder\"\n [cols]=\"cols\"\n [rows]=\"rows\"\n [class.resize-none]=\"resize === 'none'\"\n [class.resize-both]=\"resize === 'both'\"\n [class.resize-horizontal]=\"resize === 'horizontal'\"\n [class.resize-vertical]=\"resize === 'vertical'\"\n [style.min-height.px]=\"minHeight\"\n [style.height.px]=\"height\"\n [style.max-height.px]=\"maxHeight\"\n [minlength]=\"minlength\"\n [maxlength]=\"maxlength\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readOnly]=\"readOnly\"\n [attr.autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [(ngModel)]=\"value\"\n [value]=\"value\">\n </textarea>\n\n<small *ngIf=\"help\"\n class=\"textarea-help\">\n {{ help }}\n</small>",
333
+ providers: [
334
+ {
335
+ provide: NG_VALUE_ACCESSOR,
336
+ useExisting: forwardRef(function () { return GIPITextareaComponent_1; }),
337
+ multi: true
338
+ }
339
+ ],
340
+ host: {
341
+ 'class': 'gipi-textarea',
342
+ },
343
+ changeDetection: ChangeDetectionStrategy.OnPush,
344
+ styles: [":host{display:flex;flex-direction:column;gap:.8rem;font-size:1.4rem;color:#696969}:host .textarea-label{display:flex;align-items:center;gap:.4rem;color:#131313;line-height:1.6rem}:host .textarea-label>span{font-size:1.6rem;line-height:1.6rem;color:#d14014}:host .textarea-element{display:flex;font-family:inherit;font-size:inherit;color:inherit;padding:.75rem .8rem;background:#fff;border:1px solid rgba(0,0,0,.12);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:6px;caret-color:#696969;max-height:12rem;min-height:6rem;resize:vertical;outline:0;overflow:auto}:host .textarea-element:not(:disabled):hover{border-color:#6d6f73}:host .textarea-element:not(:disabled).ng-dirty.ng-invalid:enabled:hover,:host .textarea-element:not(:disabled):invalid:enabled:hover{border-color:#e07f62}:host .textarea-element:not(:disabled):enabled:focus{outline:0;outline-offset:0;box-shadow:0 0 0 .2rem #e0e1e2;border-color:#6d6f73}:host .textarea-element:not(:disabled).ng-dirty.ng-invalid:enabled,:host .textarea-element:not(:disabled):invalid:enabled{border-color:#d14014}:host .textarea-element:not(:disabled).ng-dirty.ng-invalid:enabled:focus,:host .textarea-element:not(:disabled):invalid:enabled:focus{outline:0;outline-offset:0;box-shadow:0 0 0 .2rem #f1c4b6;border-color:#d14014}:host .textarea-element:disabled{color:#bbbdc1!important;border-color:#e0e1e2!important;background-color:#f5f5f6!important;cursor:not-allowed}:host .textarea-element.resize-none{resize:none}:host .textarea-element.resize-both{resize:both}:host .textarea-element.resize-horizontal{resize:horizontal}:host .textarea-element.resize-vertical{resize:vertical}:host .textarea-help{flex:1;font-size:1rem;font-weight:500;margin-top:-.4rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::-webkit-input-placeholder{color:#bbbdc1}:-moz-placeholder{color:#bbbdc1}::-moz-placeholder{color:#bbbdc1}:-ms-input-placeholder{color:#bbbdc1}"]
345
+ }),
346
+ __metadata("design:paramtypes", [ElementRef,
347
+ ChangeDetectorRef])
348
+ ], GIPITextareaComponent);
349
+ return GIPITextareaComponent;
350
+ }());
351
+ export { GIPITextareaComponent };
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2dpcGktY29tcG9uZW50cy90ZXh0YXJlYS90ZXh0YXJlYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25GLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdILE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFxQnJCO0lBeUpJLCtCQUNXLFVBQW1DLEVBQ2xDLGtCQUFxQztRQUR0QyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBekp6QyxVQUFLLEdBQVcsbUJBQWlCLFlBQVksRUFBSSxDQUFDO1FBRWpELE9BQUUsR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRXhCLFNBQUksR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRTFCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFFbkIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFekIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUVsQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBRWpCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFFbEIsY0FBUyxHQUFXLEdBQUcsQ0FBQztRQUV4QixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBRXZCLFlBQU8sR0FBbUIsWUFBWSxDQUFDO1FBV3ZDLGVBQVUsR0FBVyxNQUFNLENBQUM7UUFZNUIsWUFBTyxHQUFXLE1BQU0sQ0FBQztRQVl6QixlQUFVLEdB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QztZQUV4QyxTQUFTLEVBQUU7Z0JBQ1A7b0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsdUJBQXFCLEVBQXJCLENBQXFCLENBQUM7b0JBQ3BELEtBQUssRUFBRSxJQUFJO2lCQUNkO2FBQ0o7WUFDRCxJQUFJLEVBQUU7Z0JBQ0YsT0FBTyxFQUFFLGVBQWU7YUFDM0I7WUFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7U0FDbEQsQ0FBQzt5Q0EySnlCLFVBQVU7WUFDRCxpQkFBaUI7T0EzSnhDLHFCQUFxQixDQXNNakM7SUFBRCw0QkFBQztDQUFBLEFBdE1ELElBc01DO1NBdE1ZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlQ3NzUGl4ZWxWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5sZXQgbmV4dFVuaXF1ZUlkID0gMDtcblxudHlwZSBUZXh0YXJlYVJlc2l6ZSA9ICdib3RoJyB8ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgfCAnbm9uZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ2lwaS10ZXh0YXJlYScsXG4gICAgZXhwb3J0QXM6ICdnaXBpVGV4dGFyZWEnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90ZXh0YXJlYS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGV4dGFyZWEuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHSVBJVGV4dGFyZWFDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnY2xhc3MnOiAnZ2lwaS10ZXh0YXJlYScsXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBHSVBJVGV4dGFyZWFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICAgIHByaXZhdGUgX25hbWU6IHN0cmluZyA9IGBnaXBpLXRleHRhcmVhLSR7bmV4dFVuaXF1ZUlkKyt9YDtcblxuICAgIEBJbnB1dCgpIGlkOiBzdHJpbmcgPSB0aGlzLl9uYW1lO1xuXG4gICAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gdGhpcy5fbmFtZTtcblxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcblxuICAgIEBJbnB1dCgpIGNvbHM6IG51bWJlciA9IDIwO1xuXG4gICAgQElucHV0KCkgcm93czogbnVtYmVyID0gNDtcblxuICAgIEBJbnB1dCgpIGhlbHA6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgbWF4bGVuZ3RoOiBudW1iZXIgPSAyNTQ7XG5cbiAgICBASW5wdXQoKSBtaW5sZW5ndGg6IG51bWJlciA9IDA7XG5cbiAgICBwcml2YXRlIF9yZXNpemU6IFRleHRhcmVhUmVzaXplID0gJ2hvcml6b250YWwnO1xuICAgIEBJbnB1dCgpIGdldCByZXNpemUoKTogVGV4dGFyZWFSZXNpemUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzaXplO1xuICAgIH1cbiAgICBzZXQgcmVzaXplKHZhbHVlOiBUZXh0YXJlYVJlc2l6ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMucmVzaXplKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNpemUgPSAodmFsdWUudG9Mb3dlckNhc2UoKSBhcyBUZXh0YXJlYVJlc2l6ZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9taW5IZWlnaHQ6IHN0cmluZyA9ICc2MHB4JztcbiAgICBASW5wdXQoKSBnZXQgbWluSGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5IZWlnaHQ7XG4gICAgfVxuICAgIHNldCBtaW5IZWlnaHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUudHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09ICdBVVRPJykge1xuICAgICAgICAgICAgdGhpcy5fbWluSGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWluSGVpZ2h0ID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9oZWlnaHQ6IHN0cmluZyA9ICc2MHB4JztcbiAgICBASW5wdXQoKSBnZXQgaGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfVxuICAgIHNldCBoZWlnaHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUudHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09ICdBVVRPJykge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYXhIZWlnaHQ6IHN0cmluZyA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBnZXQgbWF4SGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhIZWlnaHQ7XG4gICAgfVxuICAgIHNldCBtYXhIZWlnaHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUudHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09ICdBVVRPJykge1xuICAgICAgICAgICAgdGhpcy5fbWF4SGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWF4SGVpZ2h0ID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hdXRvY29tcGxldGU6ICdvbicgfCAnb2ZmJyA9ICdvZmYnO1xuICAgIEBJbnB1dCgpIGdldCBhdXRvY29tcGxldGUoKTogJ29uJyB8ICdvZmYnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZTtcbiAgICB9XG4gICAgc2V0IGF1dG9jb21wbGV0ZSh2YWx1ZTogJ29uJyB8ICdvZmYnKSB7XG4gICAgICAgIHRoaXMuX2F1dG9jb21wbGV0ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2F1dG9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGdldCBhdXRvZm9jdXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvZm9jdXM7XG4gICAgfVxuICAgIHNldCBhdXRvZm9jdXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fYXV0b2ZvY3VzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5O1xuICAgIH1cbiAgICBzZXQgcmVhZE9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcmVhZE9ubHkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuICAgIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9sb3dlckNhc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBnZXQgbG93ZXJDYXNlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG93ZXJDYXNlO1xuICAgIH1cbiAgICBzZXQgbG93ZXJDYXNlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2xvd2VyQ2FzZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBwZXJDYXNlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgZ2V0IHVwcGVyQ2FzZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwcGVyQ2FzZTtcbiAgICB9XG4gICAgc2V0IHVwcGVyQ2FzZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl91cHBlckNhc2UgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NwYWNlRHJvcDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGdldCBzcGFjZURyb3AoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zcGFjZURyb3A7XG4gICAgfVxuICAgIHNldCBzcGFjZURyb3AodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc3BhY2VEcm9wID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWx1ZSE6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGxldCB2YWx1ZUF1eDogYW55ID0gdmFsdWU7XG4gICAgICAgIHZhbHVlQXV4ID0gdGhpcy5fY2hlY2tTcGFjZURyb3AodmFsdWVBdXgpO1xuICAgICAgICB2YWx1ZUF1eCA9IHRoaXMuX2NoZWNrTG93ZXJjYXNlKHZhbHVlQXV4KTtcbiAgICAgICAgdmFsdWVBdXggPSB0aGlzLl9jaGVja1VwcGVyY2FzZSh2YWx1ZUF1eCk7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWVBdXg7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKHRoaXMuX3ZhbHVlKTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZTogRnVuY3Rpb24gPSAoKSA9PiB7IH07XG5cbiAgICBvblRvdWNoZWQ6IEZ1bmN0aW9uID0gKCkgPT4geyB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrU3BhY2VEcm9wKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5zcGFjZURyb3AgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja1VwcGVyY2FzZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMudXBwZXJDYXNlICYmIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tMb3dlcmNhc2UodmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmxvd2VyQ2FzZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxufVxuIl19