cps-ui-kit 0.165.0 → 17.0.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 (166) hide show
  1. package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +824 -0
  2. package/esm2022/lib/components/cps-button/cps-button.component.mjs +190 -0
  3. package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +235 -0
  4. package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +149 -0
  5. package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +94 -0
  6. package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +382 -0
  7. package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +209 -0
  8. package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +138 -0
  9. package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +193 -0
  10. package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +61 -0
  11. package/esm2022/lib/components/cps-input/cps-input.component.mjs +386 -0
  12. package/{esm2020 → esm2022}/lib/components/cps-loader/cps-loader.component.mjs +5 -5
  13. package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +552 -0
  14. package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +114 -0
  15. package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +30 -0
  16. package/{esm2020 → esm2022}/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +4 -4
  18. package/{esm2020 → esm2022}/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +7 -7
  19. package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +55 -0
  20. package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +158 -0
  21. package/esm2022/lib/components/cps-select/cps-select.component.mjs +615 -0
  22. package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +110 -0
  23. package/{esm2020 → esm2022}/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +4 -4
  24. package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +303 -0
  25. package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +79 -0
  26. package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +408 -0
  27. package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +149 -0
  28. package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +88 -0
  29. package/esm2022/lib/components/cps-table/cps-table.component.mjs +941 -0
  30. package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +181 -0
  31. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +5 -5
  32. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +5 -5
  33. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +5 -5
  34. package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +220 -0
  35. package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +136 -0
  36. package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +291 -0
  37. package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +351 -0
  38. package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +251 -0
  39. package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +87 -0
  40. package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +1196 -0
  41. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +5 -5
  42. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +5 -5
  43. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +5 -5
  44. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +5 -5
  45. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +43 -0
  46. package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +354 -0
  47. package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +619 -0
  48. package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +257 -0
  49. package/{esm2020 → esm2022}/lib/pipes/internal/check-option-selected.pipe.mjs +4 -4
  50. package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +25 -0
  51. package/{esm2020 → esm2022}/lib/pipes/internal/label-by-value.pipe.mjs +4 -4
  52. package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +99 -0
  53. package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +5 -5
  54. package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +470 -0
  55. package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +5 -5
  56. package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +3 -0
  57. package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +126 -0
  58. package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +91 -0
  59. package/{esm2020 → esm2022}/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +23 -23
  60. package/esm2022/lib/utils/colors-utils.mjs +57 -0
  61. package/esm2022/lib/utils/internal/size-utils.mjs +24 -0
  62. package/{esm2020 → esm2022}/public-api.mjs +2 -2
  63. package/{fesm2020 → fesm2022}/cps-ui-kit.mjs +481 -391
  64. package/fesm2022/cps-ui-kit.mjs.map +1 -0
  65. package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
  66. package/lib/components/cps-button/cps-button.component.d.ts +1 -1
  67. package/lib/components/cps-button-toggle/cps-button-toggle.component.d.ts +2 -2
  68. package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +2 -2
  69. package/lib/components/cps-chip/cps-chip.component.d.ts +1 -1
  70. package/lib/components/cps-datepicker/cps-datepicker.component.d.ts +2 -2
  71. package/lib/components/cps-expansion-panel/cps-expansion-panel.component.d.ts +1 -1
  72. package/lib/components/cps-file-upload/cps-file-upload.component.d.ts +1 -1
  73. package/lib/components/cps-icon/cps-icon.component.d.ts +1 -1
  74. package/lib/components/cps-info-circle/cps-info-circle.component.d.ts +2 -2
  75. package/lib/components/cps-input/cps-input.component.d.ts +2 -2
  76. package/lib/components/cps-loader/cps-loader.component.d.ts +1 -1
  77. package/lib/components/cps-menu/cps-menu.component.d.ts +1 -1
  78. package/lib/components/cps-paginator/cps-paginator.component.d.ts +1 -1
  79. package/lib/components/cps-progress-circular/cps-progress-circular.component.d.ts +1 -1
  80. package/lib/components/cps-progress-linear/cps-progress-linear.component.d.ts +1 -1
  81. package/lib/components/cps-radio-group/cps-radio/cps-radio.component.d.ts +1 -1
  82. package/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.d.ts +1 -1
  83. package/lib/components/cps-radio-group/cps-radio-group.component.d.ts +2 -2
  84. package/lib/components/cps-select/cps-select.component.d.ts +2 -2
  85. package/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.d.ts +1 -1
  86. package/lib/components/cps-tab-group/cps-tab/cps-tab.component.d.ts +1 -1
  87. package/lib/components/cps-tab-group/cps-tab-group.component.d.ts +1 -1
  88. package/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.d.ts +1 -1
  89. package/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.d.ts +1 -1
  90. package/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.d.ts +1 -1
  91. package/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.d.ts +1 -1
  92. package/lib/components/cps-table/cps-table.component.d.ts +1 -1
  93. package/lib/components/cps-table/directives/cps-table-column-filter.directive.d.ts +1 -1
  94. package/lib/components/cps-table/directives/cps-table-column-sortable.directive.d.ts +1 -1
  95. package/lib/components/cps-table/directives/cps-table-row-selectable.directive.d.ts +1 -1
  96. package/lib/components/cps-tag/cps-tag.component.d.ts +1 -1
  97. package/lib/components/cps-textarea/cps-textarea.component.d.ts +2 -2
  98. package/lib/components/cps-timepicker/cps-timepicker.component.d.ts +2 -2
  99. package/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.d.ts +1 -1
  100. package/lib/components/cps-tree-select/cps-tree-select.component.d.ts +1 -1
  101. package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +4 -4
  102. package/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.d.ts +1 -1
  103. package/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.d.ts +1 -1
  104. package/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.d.ts +1 -1
  105. package/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.d.ts +1 -1
  106. package/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.d.ts +2 -2
  107. package/lib/directives/{cps-tooltip.directive.d.ts → cps-tooltip/cps-tooltip.directive.d.ts} +2 -2
  108. package/lib/services/cps-dialog/cps-dialog.service.d.ts +13 -0
  109. package/lib/services/cps-dialog/utils/cps-dialog-config.d.ts +1 -1
  110. package/lib/services/cps-notification/cps-notification.service.d.ts +32 -0
  111. package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +1 -1
  112. package/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.d.ts +1 -1
  113. package/package.json +12 -18
  114. package/public-api.d.ts +1 -1
  115. package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -824
  116. package/esm2020/lib/components/cps-button/cps-button.component.mjs +0 -190
  117. package/esm2020/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -235
  118. package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -149
  119. package/esm2020/lib/components/cps-chip/cps-chip.component.mjs +0 -94
  120. package/esm2020/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
  121. package/esm2020/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -209
  122. package/esm2020/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -138
  123. package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +0 -193
  124. package/esm2020/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
  125. package/esm2020/lib/components/cps-input/cps-input.component.mjs +0 -386
  126. package/esm2020/lib/components/cps-menu/cps-menu.component.mjs +0 -552
  127. package/esm2020/lib/components/cps-paginator/cps-paginator.component.mjs +0 -113
  128. package/esm2020/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
  129. package/esm2020/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -55
  130. package/esm2020/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -158
  131. package/esm2020/lib/components/cps-select/cps-select.component.mjs +0 -615
  132. package/esm2020/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
  133. package/esm2020/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -299
  134. package/esm2020/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
  135. package/esm2020/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -408
  136. package/esm2020/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -148
  137. package/esm2020/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -88
  138. package/esm2020/lib/components/cps-table/cps-table.component.mjs +0 -940
  139. package/esm2020/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
  140. package/esm2020/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -210
  141. package/esm2020/lib/components/cps-tag/cps-tag.component.mjs +0 -136
  142. package/esm2020/lib/components/cps-textarea/cps-textarea.component.mjs +0 -291
  143. package/esm2020/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -351
  144. package/esm2020/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -250
  145. package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
  146. package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1192
  147. package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -43
  148. package/esm2020/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -334
  149. package/esm2020/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -616
  150. package/esm2020/lib/directives/cps-tooltip.directive.mjs +0 -257
  151. package/esm2020/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
  152. package/esm2020/lib/services/cps-dialog/cps-dialog.service.mjs +0 -86
  153. package/esm2020/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
  154. package/esm2020/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
  155. package/esm2020/lib/services/cps-notification/cps-notification.service.mjs +0 -94
  156. package/esm2020/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -91
  157. package/esm2020/lib/utils/colors-utils.mjs +0 -57
  158. package/esm2020/lib/utils/internal/size-utils.mjs +0 -24
  159. package/fesm2015/cps-ui-kit.mjs +0 -12086
  160. package/fesm2015/cps-ui-kit.mjs.map +0 -1
  161. package/fesm2020/cps-ui-kit.mjs.map +0 -1
  162. /package/{esm2020 → esm2022}/cps-ui-kit.mjs +0 -0
  163. /package/{esm2020 → esm2022}/lib/components/cps-table/cps-column-filter-types.mjs +0 -0
  164. /package/{esm2020 → esm2022}/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -0
  165. /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -0
  166. /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -0
@@ -0,0 +1,136 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Optional, Output, Self } from '@angular/core';
3
+ import { getCSSColor } from '../../utils/colors-utils';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ import * as i2 from "@angular/common";
7
+ /**
8
+ * CpsTagComponent is used to categorize content.
9
+ * @group Components
10
+ */
11
+ export class CpsTagComponent {
12
+ /**
13
+ * Tag value.
14
+ * @group Props
15
+ */
16
+ set value(value) {
17
+ this._value = value;
18
+ this.onChange(value);
19
+ }
20
+ get value() {
21
+ return this._value;
22
+ }
23
+ constructor(_control) {
24
+ this._control = _control;
25
+ /**
26
+ * Type of the tag. It can be security, classification or custom, has higher precedence over color.
27
+ * @group Props
28
+ */
29
+ this.type = 'custom';
30
+ /**
31
+ * Label of the tag.
32
+ * @group Props
33
+ */
34
+ this.label = '';
35
+ /**
36
+ * Color of the tag.
37
+ * @group Props
38
+ */
39
+ this.color = '';
40
+ /**
41
+ * Determines whether the tag should be disabled.
42
+ * @group Props
43
+ */
44
+ this.disabled = false;
45
+ /**
46
+ * Determines whether the tag should be selectable.
47
+ * @group Props
48
+ */
49
+ this.selectable = false;
50
+ /**
51
+ * Callback to invoke on value change.
52
+ * @param {boolean} boolean - value change.
53
+ * @group Emits
54
+ */
55
+ this.valueChanged = new EventEmitter();
56
+ this.classesList = [];
57
+ this.tagColor = '';
58
+ this._value = false;
59
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
60
+ this.onChange = (event) => { };
61
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
62
+ this.onTouched = () => { };
63
+ if (this._control) {
64
+ this._control.valueAccessor = this;
65
+ }
66
+ }
67
+ ngOnChanges() {
68
+ this.setClasses();
69
+ }
70
+ setClasses() {
71
+ this.classesList = ['cps-tag'];
72
+ if (this.selectable) {
73
+ this.classesList.push('cps-tag--selectable');
74
+ }
75
+ if (this.disabled) {
76
+ this.classesList.push('cps-tag--disabled');
77
+ }
78
+ switch (this.type) {
79
+ case 'security': {
80
+ this.classesList.push('cps-tag--security');
81
+ break;
82
+ }
83
+ case 'classification': {
84
+ this.classesList.push('cps-tag--classification');
85
+ break;
86
+ }
87
+ default:
88
+ if (this.color)
89
+ this.tagColor = getCSSColor(this.color);
90
+ }
91
+ }
92
+ registerOnChange(fn) {
93
+ this.onChange = fn;
94
+ }
95
+ registerOnTouched(fn) {
96
+ this.onTouched = fn;
97
+ }
98
+ writeValue(value) {
99
+ this.value = value;
100
+ }
101
+ toggleSelected() {
102
+ if (this.disabled || !this.selectable)
103
+ return;
104
+ this._updateValue(!this.value);
105
+ }
106
+ _updateValue(value) {
107
+ this.writeValue(value);
108
+ this.onChange(value);
109
+ this.valueChanged.emit(value);
110
+ }
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsTagComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
112
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: CpsTagComponent, isStandalone: true, selector: "cps-tag", inputs: { type: "type", label: "label", color: "color", disabled: "disabled", selectable: "selectable", value: "value" }, outputs: { valueChanged: "valueChanged" }, usesOnChanges: true, ngImport: i0, template: "<div\n [ngClass]=\"classesList\"\n [class.unselected]=\"!value && selectable\"\n [ngStyle]=\"{ 'border-color': tagColor || 'none' }\"\n (click)=\"toggleSelected()\">\n <p>{{ label }}</p>\n</div>\n", styles: [":host{width:fit-content;display:inline-block;-webkit-user-select:none;-ms-user-select:none;user-select:none}:host .cps-tag{font-family:Source Sans Pro,sans-serif;min-height:25px;align-items:center;padding:0 10px;background-color:#fff;display:inline-flex;cursor:default;border:solid 1px;border-left:solid 4px}:host .cps-tag.cps-tag--security{border-color:var(--cps-color-warn)}:host .cps-tag.cps-tag--classification{border-color:var(--cps-color-info)}:host .cps-tag.cps-tag--selectable{cursor:pointer}:host .cps-tag.cps-tag--selectable:not(:active):not(:disabled){box-shadow:1px 3px 4px #0000001a}:host .cps-tag.cps-tag--disabled{pointer-events:none;border-color:var(--cps-color-line-dark)!important}:host .cps-tag.cps-tag--disabled p{color:var(--cps-color-text-light)}:host .cps-tag.unselected{border-color:var(--cps-color-text-light)!important}:host .cps-tag p{margin:0;font-size:11px;color:var(--cps-color-text-dark)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
113
+ }
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsTagComponent, decorators: [{
115
+ type: Component,
116
+ args: [{ standalone: true, imports: [CommonModule], selector: 'cps-tag', template: "<div\n [ngClass]=\"classesList\"\n [class.unselected]=\"!value && selectable\"\n [ngStyle]=\"{ 'border-color': tagColor || 'none' }\"\n (click)=\"toggleSelected()\">\n <p>{{ label }}</p>\n</div>\n", styles: [":host{width:fit-content;display:inline-block;-webkit-user-select:none;-ms-user-select:none;user-select:none}:host .cps-tag{font-family:Source Sans Pro,sans-serif;min-height:25px;align-items:center;padding:0 10px;background-color:#fff;display:inline-flex;cursor:default;border:solid 1px;border-left:solid 4px}:host .cps-tag.cps-tag--security{border-color:var(--cps-color-warn)}:host .cps-tag.cps-tag--classification{border-color:var(--cps-color-info)}:host .cps-tag.cps-tag--selectable{cursor:pointer}:host .cps-tag.cps-tag--selectable:not(:active):not(:disabled){box-shadow:1px 3px 4px #0000001a}:host .cps-tag.cps-tag--disabled{pointer-events:none;border-color:var(--cps-color-line-dark)!important}:host .cps-tag.cps-tag--disabled p{color:var(--cps-color-text-light)}:host .cps-tag.unselected{border-color:var(--cps-color-text-light)!important}:host .cps-tag p{margin:0;font-size:11px;color:var(--cps-color-text-dark)}\n"] }]
117
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
118
+ type: Self
119
+ }, {
120
+ type: Optional
121
+ }] }], propDecorators: { type: [{
122
+ type: Input
123
+ }], label: [{
124
+ type: Input
125
+ }], color: [{
126
+ type: Input
127
+ }], disabled: [{
128
+ type: Input
129
+ }], selectable: [{
130
+ type: Input
131
+ }], value: [{
132
+ type: Input
133
+ }], valueChanged: [{
134
+ type: Output
135
+ }] } });
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRhZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9jcHMtdGFnL2Nwcy10YWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRhZy9jcHMtdGFnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBR3ZEOzs7R0FHRztBQVFILE1BQU0sT0FBTyxlQUFlO0lBK0IxQjs7O09BR0c7SUFDSCxJQUFhLEtBQUssQ0FBQyxLQUFjO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBY0QsWUFBd0MsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQXZEM0Q7OztXQUdHO1FBQ00sU0FBSSxHQUE2QyxRQUFRLENBQUM7UUFFbkU7OztXQUdHO1FBQ00sVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVwQjs7O1dBR0c7UUFDTSxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRXBCOzs7V0FHRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7OztXQUdHO1FBQ00sZUFBVSxHQUFHLEtBQUssQ0FB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QUs7Z0JBY0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldENTU0NvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sb3JzLXV0aWxzJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKlxuICogQ3BzVGFnQ29tcG9uZW50IGlzIHVzZWQgdG8gY2F0ZWdvcml6ZSBjb250ZW50LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBzZWxlY3RvcjogJ2Nwcy10YWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3BzLXRhZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nwcy10YWcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDcHNUYWdDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIHRhZy4gSXQgY2FuIGJlIHNlY3VyaXR5LCBjbGFzc2lmaWNhdGlvbiBvciBjdXN0b20sIGhhcyBoaWdoZXIgcHJlY2VkZW5jZSBvdmVyIGNvbG9yLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHR5cGU6ICdzZWN1cml0eScgfCAnY2xhc3NpZmljYXRpb24nIHwgJ2N1c3RvbScgPSAnY3VzdG9tJztcblxuICAvKipcbiAgICogTGFiZWwgb2YgdGhlIHRhZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuXG4gIC8qKlxuICAgKiBDb2xvciBvZiB0aGUgdGFnLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNvbG9yID0gJyc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGFnIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRhZyBzaG91bGQgYmUgc2VsZWN0YWJsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRhZyB2YWx1ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gdmFsdWUgY2hhbmdlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGJvb2xlYW4gLSB2YWx1ZSBjaGFuZ2UuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBjbGFzc2VzTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgdGFnQ29sb3IgPSAnJztcblxuICBwcml2YXRlIF92YWx1ZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29udHJvbDogTmdDb250cm9sKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuX2NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDbGFzc2VzKCk7XG4gIH1cblxuICBzZXRDbGFzc2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2xhc3Nlc0xpc3QgPSBbJ2Nwcy10YWcnXTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIHRoaXMuY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRhZy0tc2VsZWN0YWJsZScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5jbGFzc2VzTGlzdC5wdXNoKCdjcHMtdGFnLS1kaXNhYmxlZCcpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSAnc2VjdXJpdHknOiB7XG4gICAgICAgIHRoaXMuY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRhZy0tc2VjdXJpdHknKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjbGFzc2lmaWNhdGlvbic6IHtcbiAgICAgICAgdGhpcy5jbGFzc2VzTGlzdC5wdXNoKCdjcHMtdGFnLS1jbGFzc2lmaWNhdGlvbicpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmNvbG9yKSB0aGlzLnRhZ0NvbG9yID0gZ2V0Q1NTQ29sb3IodGhpcy5jb2xvcik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7fTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdGVkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLnNlbGVjdGFibGUpIHJldHVybjtcbiAgICB0aGlzLl91cGRhdGVWYWx1ZSghdGhpcy52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQuZW1pdCh2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgW25nQ2xhc3NdPVwiY2xhc3Nlc0xpc3RcIlxuICBbY2xhc3MudW5zZWxlY3RlZF09XCIhdmFsdWUgJiYgc2VsZWN0YWJsZVwiXG4gIFtuZ1N0eWxlXT1cInsgJ2JvcmRlci1jb2xvcic6IHRhZ0NvbG9yIHx8ICdub25lJyB9XCJcbiAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGVkKClcIj5cbiAgPHA+e3sgbGFiZWwgfX08L3A+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,291 @@
1
+ import { Component, EventEmitter, Input, Optional, Output, Self } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { Subscription } from 'rxjs';
4
+ import { convertSize } from '../../utils/internal/size-utils';
5
+ import { CpsIconComponent } from '../cps-icon/cps-icon.component';
6
+ import { CpsInfoCircleComponent } from '../cps-info-circle/cps-info-circle.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/forms";
9
+ import * as i2 from "@angular/common";
10
+ /**
11
+ * CpsTextareaComponent is a textarea component.
12
+ * @group Components
13
+ */
14
+ export class CpsTextareaComponent {
15
+ /**
16
+ * Value of the textarea.
17
+ * @group Props
18
+ */
19
+ set value(value) {
20
+ if (!value)
21
+ value = '';
22
+ this._value = value;
23
+ this.onChange(value);
24
+ }
25
+ get value() {
26
+ return this._value;
27
+ }
28
+ constructor(_control, _elementRef) {
29
+ this._control = _control;
30
+ this._elementRef = _elementRef;
31
+ /**
32
+ * Label of the textarea.
33
+ * @group Props
34
+ */
35
+ this.label = '';
36
+ /**
37
+ * Placeholder text for the textarea.
38
+ * @group Props
39
+ */
40
+ this.placeholder = 'Please enter';
41
+ /**
42
+ * Number of rows in the textarea.
43
+ * @group Props
44
+ */
45
+ this.rows = 5;
46
+ /**
47
+ * The cols attribute specifies the visible width of a textarea.
48
+ * @group Props
49
+ */
50
+ this.cols = 20;
51
+ /**
52
+ * Determines whether the textarea can auto focus.
53
+ * @group Props
54
+ */
55
+ this.autofocus = false;
56
+ /**
57
+ * Bottom hint text for the textarea.
58
+ * @group Props
59
+ */
60
+ this.hint = '';
61
+ /**
62
+ * Determines whether the textarea is disabled.
63
+ * @group Props
64
+ */
65
+ this.disabled = false;
66
+ /**
67
+ * Width of the textarea, it can be of type number denoting pixels or string.
68
+ * @group Props
69
+ */
70
+ this.width = '100%';
71
+ /**
72
+ * When enabled, a clear icon is displayed to clear the value.
73
+ * @group Props
74
+ */
75
+ this.clearable = false;
76
+ /**
77
+ * Hides hint and validation errors.
78
+ * @group Props
79
+ */
80
+ this.hideDetails = false;
81
+ /**
82
+ * Determines whether the textarea should have persistent clear icon.
83
+ * @group Props
84
+ */
85
+ this.persistentClear = false;
86
+ /**
87
+ * Error message.
88
+ * @group Props
89
+ */
90
+ this.error = '';
91
+ /**
92
+ * Determines whether the component can be resized vertically or not.
93
+ * @group Props
94
+ */
95
+ this.resizable = 'vertical';
96
+ /**
97
+ * When it is not an empty string, an info icon is displayed to show text for more info.
98
+ * @group Props
99
+ */
100
+ this.infoTooltip = '';
101
+ /**
102
+ * Info tooltip class for styling.
103
+ * @group Props
104
+ */
105
+ this.infoTooltipClass = 'cps-tooltip-content';
106
+ /**
107
+ * Max width of infoTooltip, of type number denoting pixels or string.
108
+ * @group Props
109
+ */
110
+ this.infoTooltipMaxWidth = '100%';
111
+ /**
112
+ * Determines whether the infoTooltip is persistent.
113
+ * @group Props
114
+ */
115
+ this.infoTooltipPersistent = false;
116
+ /**
117
+ * Position of infoTooltip, it can be 'top', 'bottom', 'left' or 'right'.
118
+ * @group Props
119
+ */
120
+ this.infoTooltipPosition = 'top';
121
+ /**
122
+ * Callback to invoke on value change.
123
+ * @param {string} string - value changed.
124
+ * @group Emits
125
+ */
126
+ this.valueChanged = new EventEmitter();
127
+ /**
128
+ * Callback to invoke when the component receives focus.
129
+ * @param {any}
130
+ * @group Emits
131
+ */
132
+ this.focused = new EventEmitter();
133
+ /**
134
+ * Callback to invoke when the prefixIcon is clicked.
135
+ * @param {any}
136
+ * @group Emits
137
+ */
138
+ this.prefixIconClicked = new EventEmitter();
139
+ /**
140
+ * Callback to invoke when the component loses focus.
141
+ * @param {any}
142
+ * @group Emits
143
+ */
144
+ this.blurred = new EventEmitter();
145
+ this._statusChangesSubscription = new Subscription();
146
+ this._value = '';
147
+ this.cvtWidth = '';
148
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
149
+ this.onChange = (event) => { };
150
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
151
+ this.onTouched = () => { };
152
+ if (this._control) {
153
+ this._control.valueAccessor = this;
154
+ }
155
+ }
156
+ ngOnInit() {
157
+ this.cvtWidth = convertSize(this.width);
158
+ this._statusChangesSubscription = this._control?.statusChanges?.subscribe(() => {
159
+ this._checkErrors();
160
+ });
161
+ }
162
+ ngOnDestroy() {
163
+ this._statusChangesSubscription?.unsubscribe();
164
+ }
165
+ _checkErrors() {
166
+ if (!this._control)
167
+ return;
168
+ const errors = this._control?.errors;
169
+ if (!this._control?.control?.touched || !errors) {
170
+ this.error = '';
171
+ return;
172
+ }
173
+ if ('required' in errors) {
174
+ this.error = 'Field is required';
175
+ return;
176
+ }
177
+ if ('pattern' in errors) {
178
+ this.error = 'Value is invalid';
179
+ return;
180
+ }
181
+ if ('minlength' in errors) {
182
+ // eslint-disable-next-line dot-notation
183
+ this.error = `Field must contain at least ${errors['minlength'].requiredLength} characters`;
184
+ return;
185
+ }
186
+ if ('maxlength' in errors) {
187
+ // eslint-disable-next-line dot-notation
188
+ this.error = `Field must contain ${errors['maxlength'].requiredLength} characters maximum`;
189
+ return;
190
+ }
191
+ const errArr = Object.values(errors);
192
+ if (errArr.length < 1) {
193
+ this.error = '';
194
+ return;
195
+ }
196
+ const message = errArr.find((msg) => typeof msg === 'string');
197
+ this.error = message || 'Unknown error';
198
+ }
199
+ registerOnChange(fn) {
200
+ this.onChange = fn;
201
+ }
202
+ registerOnTouched(fn) {
203
+ this.onTouched = fn;
204
+ }
205
+ writeValue(value) {
206
+ this.value = value;
207
+ }
208
+ updateValueEvent(event) {
209
+ const value = event?.target?.value || '';
210
+ this._updateValue(value);
211
+ }
212
+ _updateValue(value) {
213
+ this.writeValue(value);
214
+ this.onChange(value);
215
+ this.valueChanged.emit(value);
216
+ }
217
+ clear() {
218
+ if (this.value !== '')
219
+ this._updateValue('');
220
+ }
221
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
222
+ setDisabledState(disabled) { }
223
+ onBlur() {
224
+ this._control?.control?.markAsTouched();
225
+ this._checkErrors();
226
+ this.blurred.emit();
227
+ }
228
+ onFocus() {
229
+ this.focused.emit();
230
+ }
231
+ focus() {
232
+ this._elementRef?.nativeElement?.querySelector('textarea')?.focus();
233
+ }
234
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsTextareaComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
235
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: CpsTextareaComponent, isStandalone: true, selector: "cps-textarea", inputs: { label: "label", placeholder: "placeholder", rows: "rows", cols: "cols", autofocus: "autofocus", hint: "hint", disabled: "disabled", width: "width", clearable: "clearable", hideDetails: "hideDetails", persistentClear: "persistentClear", error: "error", resizable: "resizable", infoTooltip: "infoTooltip", infoTooltipClass: "infoTooltipClass", infoTooltipMaxWidth: "infoTooltipMaxWidth", infoTooltipPersistent: "infoTooltipPersistent", infoTooltipPosition: "infoTooltipPosition", value: "value" }, outputs: { valueChanged: "valueChanged", focused: "focused", prefixIconClicked: "prefixIconClicked", blurred: "blurred" }, ngImport: i0, template: "<div class=\"cps-textarea-container\" [ngStyle]=\"{ width: cvtWidth }\">\n <div\n class=\"cps-textarea-label\"\n [ngClass]=\"{ 'cps-textarea-label-disabled': disabled }\"\n *ngIf=\"label\">\n <label>{{ label }}</label>\n <cps-info-circle\n *ngIf=\"infoTooltip\"\n class=\"cps-textarea-label-info-circle\"\n size=\"xsmall\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipContentClass]=\"infoTooltipClass\"\n [tooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [tooltipPersistent]=\"infoTooltipPersistent\"\n [tooltipText]=\"infoTooltip\">\n </cps-info-circle>\n </div>\n\n <div\n class=\"cps-textarea-wrap\"\n [ngClass]=\"{\n 'cps-textarea-wrap-error': error,\n clearable: clearable,\n 'persistent-clear': persistentClear\n }\">\n <textarea\n spellcheck=\"false\"\n [cols]=\"cols\"\n [rows]=\"rows\"\n [autofocus]=\"autofocus\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [ngStyle]=\"{\n width: cvtWidth,\n resize: resizable\n }\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n (input)=\"updateValueEvent($event)\"></textarea>\n\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear || (!persistentClear && value) ? 'visible' : 'hidden'\n \"\n class=\"clear-btn\">\n <cps-icon icon=\"delete\" size=\"small\" (click)=\"clear()\"></cps-icon>\n </span>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-textarea-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-textarea-error\">\n {{ error }}\n </div>\n</div>\n", styles: [":host{display:flex}:host .cps-textarea-container{width:100%;gap:.2rem!important;display:flex!important;flex-direction:column!important;font-family:Source Sans Pro,sans-serif}:host .cps-textarea-container .cps-textarea-wrap{position:relative;overflow:hidden}:host .cps-textarea-container .cps-textarea-wrap:hover textarea:enabled{border:1px solid var(--cps-color-calm)}:host .cps-textarea-container .cps-textarea-wrap-error textarea{border-color:var(--cps-color-error)!important}:host .cps-textarea-container .cps-textarea-wrap-error textarea:not(:focus){background:#fef3f2!important}:host .cps-textarea-container .cps-textarea-wrap textarea{display:block;font-family:Source Sans Pro,sans-serif;font-size:1rem;color:var(--cps-color-text-dark);background:#fff;padding:.375rem .75rem;line-height:1.5;min-height:38px;border:1px solid var(--cps-color-line-light);transition-property:border-color;transition-duration:.2s;appearance:none;border-radius:4px;width:100%}:host .cps-textarea-container .cps-textarea-wrap textarea:focus{border:1px solid var(--cps-color-calm);outline:0}:host .cps-textarea-container .cps-textarea-wrap textarea:disabled{color:var(--cps-color-text-light);background-color:#f7f7f7;opacity:1;pointer-events:none}:host .cps-textarea-container .cps-textarea-wrap textarea:focus+.clear-btn cps-icon{opacity:.5}:host .cps-textarea-container .cps-textarea-wrap:hover .clear-btn cps-icon{opacity:.5}:host .cps-textarea-container .cps-textarea-wrap .clear-btn{position:absolute;top:.75rem;right:.75rem;cursor:pointer;color:var(--cps-color-calm)}:host .cps-textarea-container .cps-textarea-wrap .clear-btn cps-icon{opacity:0;transition-duration:.2s}:host .cps-textarea-container .cps-textarea-wrap .clear-btn cps-icon:hover{opacity:1!important}:host .cps-textarea-container .persistent-clear .clear-btn cps-icon{opacity:.5}:host .cps-textarea-container .clearable>textarea{padding-right:2.2rem}:host .cps-textarea-container .cps-textarea-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default}:host .cps-textarea-container .cps-textarea-error{color:var(--cps-color-error);font-weight:700;font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default}:host .cps-textarea-container .cps-textarea-label{color:var(--cps-color-text-dark);font-size:.875rem;align-items:center;display:inline-flex;font-weight:600}:host .cps-textarea-container .cps-textarea-label .cps-textarea-label-info-circle{margin-left:8px}:host .cps-textarea-container .cps-textarea-label-disabled{color:var(--cps-color-text-mild)}:host .cps-textarea-container ::placeholder{font-family:Source Sans Pro,sans-serif;color:var(--cps-color-text-lightest);font-style:italic;opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsInfoCircleComponent, selector: "cps-info-circle", inputs: ["size", "tooltipText", "tooltipPosition", "tooltipContentClass", "tooltipMaxWidth", "tooltipPersistent"] }] }); }
236
+ }
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsTextareaComponent, decorators: [{
238
+ type: Component,
239
+ args: [{ standalone: true, selector: 'cps-textarea', imports: [CommonModule, CpsIconComponent, CpsInfoCircleComponent], template: "<div class=\"cps-textarea-container\" [ngStyle]=\"{ width: cvtWidth }\">\n <div\n class=\"cps-textarea-label\"\n [ngClass]=\"{ 'cps-textarea-label-disabled': disabled }\"\n *ngIf=\"label\">\n <label>{{ label }}</label>\n <cps-info-circle\n *ngIf=\"infoTooltip\"\n class=\"cps-textarea-label-info-circle\"\n size=\"xsmall\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipContentClass]=\"infoTooltipClass\"\n [tooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [tooltipPersistent]=\"infoTooltipPersistent\"\n [tooltipText]=\"infoTooltip\">\n </cps-info-circle>\n </div>\n\n <div\n class=\"cps-textarea-wrap\"\n [ngClass]=\"{\n 'cps-textarea-wrap-error': error,\n clearable: clearable,\n 'persistent-clear': persistentClear\n }\">\n <textarea\n spellcheck=\"false\"\n [cols]=\"cols\"\n [rows]=\"rows\"\n [autofocus]=\"autofocus\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [ngStyle]=\"{\n width: cvtWidth,\n resize: resizable\n }\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n (input)=\"updateValueEvent($event)\"></textarea>\n\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear || (!persistentClear && value) ? 'visible' : 'hidden'\n \"\n class=\"clear-btn\">\n <cps-icon icon=\"delete\" size=\"small\" (click)=\"clear()\"></cps-icon>\n </span>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-textarea-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-textarea-error\">\n {{ error }}\n </div>\n</div>\n", styles: [":host{display:flex}:host .cps-textarea-container{width:100%;gap:.2rem!important;display:flex!important;flex-direction:column!important;font-family:Source Sans Pro,sans-serif}:host .cps-textarea-container .cps-textarea-wrap{position:relative;overflow:hidden}:host .cps-textarea-container .cps-textarea-wrap:hover textarea:enabled{border:1px solid var(--cps-color-calm)}:host .cps-textarea-container .cps-textarea-wrap-error textarea{border-color:var(--cps-color-error)!important}:host .cps-textarea-container .cps-textarea-wrap-error textarea:not(:focus){background:#fef3f2!important}:host .cps-textarea-container .cps-textarea-wrap textarea{display:block;font-family:Source Sans Pro,sans-serif;font-size:1rem;color:var(--cps-color-text-dark);background:#fff;padding:.375rem .75rem;line-height:1.5;min-height:38px;border:1px solid var(--cps-color-line-light);transition-property:border-color;transition-duration:.2s;appearance:none;border-radius:4px;width:100%}:host .cps-textarea-container .cps-textarea-wrap textarea:focus{border:1px solid var(--cps-color-calm);outline:0}:host .cps-textarea-container .cps-textarea-wrap textarea:disabled{color:var(--cps-color-text-light);background-color:#f7f7f7;opacity:1;pointer-events:none}:host .cps-textarea-container .cps-textarea-wrap textarea:focus+.clear-btn cps-icon{opacity:.5}:host .cps-textarea-container .cps-textarea-wrap:hover .clear-btn cps-icon{opacity:.5}:host .cps-textarea-container .cps-textarea-wrap .clear-btn{position:absolute;top:.75rem;right:.75rem;cursor:pointer;color:var(--cps-color-calm)}:host .cps-textarea-container .cps-textarea-wrap .clear-btn cps-icon{opacity:0;transition-duration:.2s}:host .cps-textarea-container .cps-textarea-wrap .clear-btn cps-icon:hover{opacity:1!important}:host .cps-textarea-container .persistent-clear .clear-btn cps-icon{opacity:.5}:host .cps-textarea-container .clearable>textarea{padding-right:2.2rem}:host .cps-textarea-container .cps-textarea-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default}:host .cps-textarea-container .cps-textarea-error{color:var(--cps-color-error);font-weight:700;font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default}:host .cps-textarea-container .cps-textarea-label{color:var(--cps-color-text-dark);font-size:.875rem;align-items:center;display:inline-flex;font-weight:600}:host .cps-textarea-container .cps-textarea-label .cps-textarea-label-info-circle{margin-left:8px}:host .cps-textarea-container .cps-textarea-label-disabled{color:var(--cps-color-text-mild)}:host .cps-textarea-container ::placeholder{font-family:Source Sans Pro,sans-serif;color:var(--cps-color-text-lightest);font-style:italic;opacity:1}\n"] }]
240
+ }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
241
+ type: Self
242
+ }, {
243
+ type: Optional
244
+ }] }, { type: i0.ElementRef }], propDecorators: { label: [{
245
+ type: Input
246
+ }], placeholder: [{
247
+ type: Input
248
+ }], rows: [{
249
+ type: Input
250
+ }], cols: [{
251
+ type: Input
252
+ }], autofocus: [{
253
+ type: Input
254
+ }], hint: [{
255
+ type: Input
256
+ }], disabled: [{
257
+ type: Input
258
+ }], width: [{
259
+ type: Input
260
+ }], clearable: [{
261
+ type: Input
262
+ }], hideDetails: [{
263
+ type: Input
264
+ }], persistentClear: [{
265
+ type: Input
266
+ }], error: [{
267
+ type: Input
268
+ }], resizable: [{
269
+ type: Input
270
+ }], infoTooltip: [{
271
+ type: Input
272
+ }], infoTooltipClass: [{
273
+ type: Input
274
+ }], infoTooltipMaxWidth: [{
275
+ type: Input
276
+ }], infoTooltipPersistent: [{
277
+ type: Input
278
+ }], infoTooltipPosition: [{
279
+ type: Input
280
+ }], value: [{
281
+ type: Input
282
+ }], valueChanged: [{
283
+ type: Output
284
+ }], focused: [{
285
+ type: Output
286
+ }], prefixIconClicked: [{
287
+ type: Output
288
+ }], blurred: [{
289
+ type: Output
290
+ }] } });
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nwcy11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Nwcy10ZXh0YXJlYS9jcHMtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRleHRhcmVhL2Nwcy10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7O0FBR3RGOzs7R0FHRztBQVFILE1BQU0sT0FBTyxvQkFBb0I7SUErRy9COzs7T0FHRztJQUNILElBQWEsS0FBSyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLEtBQUs7WUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBbUNELFlBQzhCLFFBQW1CLEVBQ3ZDLFdBQW9D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ckQsb0JBQW9CO2tCQVBoQyxTQUFTO2lDQUNJLElBQUksWUFDTixjQUFjLFdBQ2YsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUM7OzBCQW1LOUQsSUFBSTs7MEJBQUksUUFBUTtrRUF4SlYsS0FBSztzQkFBYixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsSUFBSTtzQkFBWixLQUFLO2dCQU1HLElBQUk7c0JBQVosS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLElBQUk7c0JBQVosS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLEtBQUs7c0JBQWIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsZUFBZTtzQkFBdkIsS0FBSztnQkFNRyxLQUFLO3NCQUFiLEtBQUs7Z0JBTUcsU0FBUztzQkFBakIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFNRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBTUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQU1HLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFNTyxLQUFLO3NCQUFqQixLQUFLO2dCQWVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csT0FBTztzQkFBaEIsTUFBTTtnQkFPRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBT0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29udmVydFNpemUgfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcm5hbC9zaXplLXV0aWxzJztcbmltcG9ydCB7IENwc0ljb25Db21wb25lbnQgfSBmcm9tICcuLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1pbmZvLWNpcmNsZS9jcHMtaW5mby1jaXJjbGUuY29tcG9uZW50JztcbmltcG9ydCB7IENwc1Rvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY3BzLXRvb2x0aXAvY3BzLXRvb2x0aXAuZGlyZWN0aXZlJztcblxuLyoqXG4gKiBDcHNUZXh0YXJlYUNvbXBvbmVudCBpcyBhIHRleHRhcmVhIGNvbXBvbmVudC5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2Nwcy10ZXh0YXJlYScsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIENwc0ljb25Db21wb25lbnQsIENwc0luZm9DaXJjbGVDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vY3BzLXRleHRhcmVhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3BzLXRleHRhcmVhLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3BzVGV4dGFyZWFDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIExhYmVsIG9mIHRoZSB0ZXh0YXJlYS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuXG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgdGV4dGFyZWEuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnUGxlYXNlIGVudGVyJztcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgaW4gdGhlIHRleHRhcmVhLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHJvd3MgPSA1O1xuXG4gIC8qKlxuICAgKiBUaGUgY29scyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSB2aXNpYmxlIHdpZHRoIG9mIGEgdGV4dGFyZWEuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY29scyA9IDIwO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRleHRhcmVhIGNhbiBhdXRvIGZvY3VzLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBCb3R0b20gaGludCB0ZXh0IGZvciB0aGUgdGV4dGFyZWEuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGludCA9ICcnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRleHRhcmVhIGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdpZHRoIG9mIHRoZSB0ZXh0YXJlYSwgaXQgY2FuIGJlIG9mIHR5cGUgbnVtYmVyIGRlbm90aW5nIHBpeGVscyBvciBzdHJpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgd2lkdGg6IG51bWJlciB8IHN0cmluZyA9ICcxMDAlJztcblxuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCBhIGNsZWFyIGljb24gaXMgZGlzcGxheWVkIHRvIGNsZWFyIHRoZSB2YWx1ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogSGlkZXMgaGludCBhbmQgdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGlkZURldGFpbHMgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0ZXh0YXJlYSBzaG91bGQgaGF2ZSBwZXJzaXN0ZW50IGNsZWFyIGljb24uXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcGVyc2lzdGVudENsZWFyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZXJyb3IgPSAnJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgY2FuIGJlIHJlc2l6ZWQgdmVydGljYWxseSBvciBub3QuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcmVzaXphYmxlOiAndmVydGljYWwnIHwgJ25vbmUnID0gJ3ZlcnRpY2FsJztcblxuICAvKipcbiAgICogV2hlbiBpdCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLCBhbiBpbmZvIGljb24gaXMgZGlzcGxheWVkIHRvIHNob3cgdGV4dCBmb3IgbW9yZSBpbmZvLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwID0gJyc7XG5cbiAgLyoqXG4gICAqIEluZm8gdG9vbHRpcCBjbGFzcyBmb3Igc3R5bGluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcENsYXNzID0gJ2Nwcy10b29sdGlwLWNvbnRlbnQnO1xuXG4gIC8qKlxuICAgKiBNYXggd2lkdGggb2YgaW5mb1Rvb2x0aXAsIG9mIHR5cGUgbnVtYmVyIGRlbm90aW5nIHBpeGVscyBvciBzdHJpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBNYXhXaWR0aDogbnVtYmVyIHwgc3RyaW5nID0gJzEwMCUnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGluZm9Ub29sdGlwIGlzIHBlcnNpc3RlbnQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBQZXJzaXN0ZW50ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIGluZm9Ub29sdGlwLCBpdCBjYW4gYmUgJ3RvcCcsICdib3R0b20nLCAnbGVmdCcgb3IgJ3JpZ2h0Jy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcFBvc2l0aW9uOiBDcHNUb29sdGlwUG9zaXRpb24gPSAndG9wJztcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIHRleHRhcmVhLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF2YWx1ZSkgdmFsdWUgPSAnJztcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSB2YWx1ZSBjaGFuZ2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIGNvbXBvbmVudCByZWNlaXZlcyBmb2N1cy5cbiAgICogQHBhcmFtIHthbnl9XG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSBwcmVmaXhJY29uIGlzIGNsaWNrZWQuXG4gICAqIEBwYXJhbSB7YW55fVxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBwcmVmaXhJY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIGNvbXBvbmVudCBsb3NlcyBmb2N1cy5cbiAgICogQHBhcmFtIHthbnl9XG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIGN2dFdpZHRoID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuX2NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jdnRXaWR0aCA9IGNvbnZlcnRTaXplKHRoaXMud2lkdGgpO1xuXG4gICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuX2NvbnRyb2w/LnN0YXR1c0NoYW5nZXM/LnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgICAgIH1cbiAgICApIGFzIFN1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9jaGVja0Vycm9ycygpIHtcbiAgICBpZiAoIXRoaXMuX2NvbnRyb2wpIHJldHVybjtcbiAgICBjb25zdCBlcnJvcnMgPSB0aGlzLl9jb250cm9sPy5lcnJvcnM7XG5cbiAgICBpZiAoIXRoaXMuX2NvbnRyb2w/LmNvbnRyb2w/LnRvdWNoZWQgfHwgIWVycm9ycykge1xuICAgICAgdGhpcy5lcnJvciA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgncmVxdWlyZWQnIGluIGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvciA9ICdGaWVsZCBpcyByZXF1aXJlZCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCdwYXR0ZXJuJyBpbiBlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSAnVmFsdWUgaXMgaW52YWxpZCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCdtaW5sZW5ndGgnIGluIGVycm9ycykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRvdC1ub3RhdGlvblxuICAgICAgdGhpcy5lcnJvciA9IGBGaWVsZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHtlcnJvcnNbJ21pbmxlbmd0aCddLnJlcXVpcmVkTGVuZ3RofSBjaGFyYWN0ZXJzYDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoJ21heGxlbmd0aCcgaW4gZXJyb3JzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZG90LW5vdGF0aW9uXG4gICAgICB0aGlzLmVycm9yID0gYEZpZWxkIG11c3QgY29udGFpbiAke2Vycm9yc1snbWF4bGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGh9IGNoYXJhY3RlcnMgbWF4aW11bWA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyQXJyID0gT2JqZWN0LnZhbHVlcyhlcnJvcnMpO1xuICAgIGlmIChlcnJBcnIubGVuZ3RoIDwgMSkge1xuICAgICAgdGhpcy5lcnJvciA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlID0gZXJyQXJyLmZpbmQoKG1zZykgPT4gdHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpO1xuXG4gICAgdGhpcy5lcnJvciA9IG1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7fTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgdXBkYXRlVmFsdWVFdmVudChldmVudDogYW55KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZSB8fCAnJztcbiAgICB0aGlzLl91cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSAnJykgdGhpcy5fdXBkYXRlVmFsdWUoJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKSB7fVxuXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLl9jb250cm9sPy5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgICB0aGlzLmJsdXJyZWQuZW1pdCgpO1xuICB9XG5cbiAgb25Gb2N1cygpIHtcbiAgICB0aGlzLmZvY3VzZWQuZW1pdCgpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNwcy10ZXh0YXJlYS1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7IHdpZHRoOiBjdnRXaWR0aCB9XCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNwcy10ZXh0YXJlYS1sYWJlbFwiXG4gICAgW25nQ2xhc3NdPVwieyAnY3BzLXRleHRhcmVhLWxhYmVsLWRpc2FibGVkJzogZGlzYWJsZWQgfVwiXG4gICAgKm5nSWY9XCJsYWJlbFwiPlxuICAgIDxsYWJlbD57eyBsYWJlbCB9fTwvbGFiZWw+XG4gICAgPGNwcy1pbmZvLWNpcmNsZVxuICAgICAgKm5nSWY9XCJpbmZvVG9vbHRpcFwiXG4gICAgICBjbGFzcz1cImNwcy10ZXh0YXJlYS1sYWJlbC1pbmZvLWNpcmNsZVwiXG4gICAgICBzaXplPVwieHNtYWxsXCJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiaW5mb1Rvb2x0aXBQb3NpdGlvblwiXG4gICAgICBbdG9vbHRpcENvbnRlbnRDbGFzc109XCJpbmZvVG9vbHRpcENsYXNzXCJcbiAgICAgIFt0b29sdGlwTWF4V2lkdGhdPVwiaW5mb1Rvb2x0aXBNYXhXaWR0aFwiXG4gICAgICBbdG9vbHRpcFBlcnNpc3RlbnRdPVwiaW5mb1Rvb2x0aXBQZXJzaXN0ZW50XCJcbiAgICAgIFt0b29sdGlwVGV4dF09XCJpbmZvVG9vbHRpcFwiPlxuICAgIDwvY3BzLWluZm8tY2lyY2xlPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcHMtdGV4dGFyZWEtd3JhcFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ2Nwcy10ZXh0YXJlYS13cmFwLWVycm9yJzogZXJyb3IsXG4gICAgICBjbGVhcmFibGU6IGNsZWFyYWJsZSxcbiAgICAgICdwZXJzaXN0ZW50LWNsZWFyJzogcGVyc2lzdGVudENsZWFyXG4gICAgfVwiPlxuICAgIDx0ZXh0YXJlYVxuICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgIFtjb2xzXT1cImNvbHNcIlxuICAgICAgW3Jvd3NdPVwicm93c1wiXG4gICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIHdpZHRoOiBjdnRXaWR0aCxcbiAgICAgICAgcmVzaXplOiByZXNpemFibGVcbiAgICAgIH1cIlxuICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4gICAgICAoaW5wdXQpPVwidXBkYXRlVmFsdWVFdmVudCgkZXZlbnQpXCI+PC90ZXh0YXJlYT5cblxuICAgIDxzcGFuXG4gICAgICAqbmdJZj1cImNsZWFyYWJsZSAmJiAhZGlzYWJsZWRcIlxuICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiXG4gICAgICAgIHBlcnNpc3RlbnRDbGVhciB8fCAoIXBlcnNpc3RlbnRDbGVhciAmJiB2YWx1ZSkgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xuICAgICAgXCJcbiAgICAgIGNsYXNzPVwiY2xlYXItYnRuXCI+XG4gICAgICA8Y3BzLWljb24gaWNvbj1cImRlbGV0ZVwiIHNpemU9XCJzbWFsbFwiIChjbGljayk9XCJjbGVhcigpXCI+PC9jcHMtaWNvbj5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiIWVycm9yICYmICFoaWRlRGV0YWlsc1wiIGNsYXNzPVwiY3BzLXRleHRhcmVhLWhpbnRcIj5cbiAgICB7eyBoaW50IH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZXJyb3IgJiYgIWhpZGVEZXRhaWxzXCIgY2xhc3M9XCJjcHMtdGV4dGFyZWEtZXJyb3JcIj5cbiAgICB7eyBlcnJvciB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19