@festo-ui/angular 5.1.0 → 6.0.0-dev.198

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 (156) hide show
  1. package/{esm2020 → esm2022}/lib/components/accordion/accordion-header/accordion-header.component.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/components/accordion/accordion-item/accordion-item-body/accordion-item-body.component.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/components/accordion/accordion-item/accordion-item-header/accordion-item-header.component.mjs +4 -4
  4. package/esm2022/lib/components/accordion/accordion-item/accordion-item.component.mjs +148 -0
  5. package/esm2022/lib/components/accordion/accordion.component.mjs +59 -0
  6. package/{esm2020 → esm2022}/lib/components/breadcrumb/breadcrumb.component.mjs +4 -4
  7. package/{esm2020 → esm2022}/lib/components/buttons/button/button.component.mjs +4 -4
  8. package/{esm2020 → esm2022}/lib/components/buttons/link-button/link-button.component.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/components/chips/chip/chip.component.mjs +4 -4
  10. package/{esm2020 → esm2022}/lib/components/chips/chip-container/chip-container.component.mjs +4 -4
  11. package/esm2022/lib/components/components.module.mjs +207 -0
  12. package/{esm2020 → esm2022}/lib/components/loading-indicator/loading-indicator.component.mjs +4 -4
  13. package/{esm2020 → esm2022}/lib/components/mobile-flyout/mobile-flyout-item/mobile-flyout-item.component.mjs +6 -6
  14. package/{esm2020 → esm2022}/lib/components/mobile-flyout/mobile-flyout-page/mobile-flyout-page.component.mjs +4 -4
  15. package/{esm2020 → esm2022}/lib/components/mobile-flyout/mobile-flyout.component.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/components/pagination/pagination.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/components/popovers/legend/legend.component.mjs +5 -5
  18. package/{esm2020 → esm2022}/lib/components/popovers/legend/legend.directive.mjs +5 -5
  19. package/{esm2020 → esm2022}/lib/components/popovers/popover/popover.component.mjs +5 -5
  20. package/{esm2020 → esm2022}/lib/components/popovers/popover-content/popover-content.component.mjs +5 -5
  21. package/{esm2020 → esm2022}/lib/components/popovers/popover-content/popover-content.directive.mjs +5 -5
  22. package/{esm2020 → esm2022}/lib/components/popovers/popover-menu/popover-menu.component.mjs +5 -5
  23. package/{esm2020 → esm2022}/lib/components/popovers/popover.service.mjs +5 -5
  24. package/{esm2020 → esm2022}/lib/components/popovers/tooltip/tooltip.directive.mjs +5 -5
  25. package/{esm2020 → esm2022}/lib/components/progress/progress.component.mjs +4 -4
  26. package/{esm2020 → esm2022}/lib/components/scroll/scrollable.directive.mjs +5 -5
  27. package/{esm2020 → esm2022}/lib/components/search-input/search-input.component.mjs +4 -4
  28. package/esm2022/lib/components/sidebar-overlay/sidebar-overlay.component.mjs +59 -0
  29. package/{esm2020 → esm2022}/lib/components/snackbar/snackbar-container.component.mjs +4 -4
  30. package/{esm2020 → esm2022}/lib/components/snackbar/snackbar-container.directive.mjs +5 -5
  31. package/esm2022/lib/components/snackbar/snackbar.component.mjs +81 -0
  32. package/esm2022/lib/components/snackbar/snackbar.module.mjs +24 -0
  33. package/{esm2020 → esm2022}/lib/components/snackbar/snackbar.service.mjs +5 -5
  34. package/{esm2020 → esm2022}/lib/components/stepper-horizontal/step-horizontal/step-horizontal.component.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/components/stepper-horizontal/stepper-horizontal.component.mjs +4 -4
  36. package/{esm2020 → esm2022}/lib/components/stepper-vertical/step-vertical/step-vertical.component.mjs +4 -4
  37. package/{esm2020 → esm2022}/lib/components/stepper-vertical/stepper-vertical.component.mjs +4 -4
  38. package/{esm2020 → esm2022}/lib/components/table-header-cell/table-header-cell.directive.mjs +4 -4
  39. package/esm2022/lib/components/tabs/tab-pane/tab-pane.component.mjs +34 -0
  40. package/esm2022/lib/components/tabs/tabs.component.mjs +459 -0
  41. package/{esm2020 → esm2022}/lib/directives/click-outside.directive.mjs +5 -5
  42. package/{esm2020 → esm2022}/lib/festo-angular.module.mjs +5 -5
  43. package/esm2022/lib/forms/checkbox/checkbox.component.mjs +154 -0
  44. package/{esm2020 → esm2022}/lib/forms/color-indicator/color-indicator.component.mjs +4 -4
  45. package/esm2022/lib/forms/color-picker/color-picker.component.mjs +292 -0
  46. package/{esm2020 → esm2022}/lib/forms/date-picker/date-picker.component.mjs +12 -12
  47. package/{esm2020 → esm2022}/lib/forms/date-range-picker/date-range-picker.component.mjs +12 -12
  48. package/{esm2020 → esm2022}/lib/forms/flatpickr/flatpickr.component.mjs +4 -4
  49. package/{esm2020 → esm2022}/lib/forms/forms.module.mjs +62 -62
  50. package/esm2022/lib/forms/radio/radio.component.mjs +350 -0
  51. package/{esm2020 → esm2022}/lib/forms/segment/segment-control/segment-control.component.mjs +4 -4
  52. package/{esm2020 → esm2022}/lib/forms/segment/segment.component.mjs +11 -11
  53. package/{esm2020 → esm2022}/lib/forms/select/chip-text.pipe.mjs +4 -4
  54. package/{esm2020 → esm2022}/lib/forms/select/select-option/select-option.component.mjs +4 -4
  55. package/esm2022/lib/forms/select/select.component.mjs +275 -0
  56. package/esm2022/lib/forms/slider/slider.component.mjs +113 -0
  57. package/esm2022/lib/forms/switch/switch.component.mjs +121 -0
  58. package/esm2022/lib/forms/text-area/text-area.component.mjs +187 -0
  59. package/esm2022/lib/forms/text-editor/text-editor.component.mjs +308 -0
  60. package/esm2022/lib/forms/text-input/text-input.component.mjs +208 -0
  61. package/{esm2020 → esm2022}/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.mjs +4 -4
  62. package/{esm2020 → esm2022}/lib/forms/time-picker/time-picker.component.mjs +11 -11
  63. package/{esm2020 → esm2022}/lib/forms/unique-selection-dispatcher.mjs +4 -4
  64. package/{esm2020 → esm2022}/lib/forms/value-accessor-base.mjs +4 -4
  65. package/{esm2020 → esm2022}/lib/modals/alert/alert.component.mjs +4 -4
  66. package/{esm2020 → esm2022}/lib/modals/confirm/confirm.component.mjs +5 -5
  67. package/{esm2020 → esm2022}/lib/modals/custom-modal/custom-modal.component.mjs +4 -4
  68. package/{esm2020 → esm2022}/lib/modals/image-gallery/image-gallery.component.mjs +5 -5
  69. package/{esm2020 → esm2022}/lib/modals/modal.service.mjs +5 -5
  70. package/{esm2020 → esm2022}/lib/modals/modals.module.mjs +5 -5
  71. package/{esm2020 → esm2022}/lib/modals/prompt/prompt.component.mjs +5 -5
  72. package/{esm2020 → esm2022}/lib/pipes/safe-html.pipe.mjs +5 -5
  73. package/{fesm2020 → fesm2022}/festo-ui-angular.mjs +512 -520
  74. package/{fesm2020 → fesm2022}/festo-ui-angular.mjs.map +1 -1
  75. package/lib/components/accordion/accordion.component.d.ts +1 -1
  76. package/lib/components/breadcrumb/breadcrumb.component.d.ts +1 -1
  77. package/lib/components/buttons/button/button.component.d.ts +1 -1
  78. package/lib/components/buttons/link-button/link-button.component.d.ts +1 -1
  79. package/lib/components/chips/chip/chip.component.d.ts +1 -1
  80. package/lib/components/chips/chip-container/chip-container.component.d.ts +1 -1
  81. package/lib/components/loading-indicator/loading-indicator.component.d.ts +1 -1
  82. package/lib/components/mobile-flyout/mobile-flyout-item/mobile-flyout-item.component.d.ts +1 -1
  83. package/lib/components/mobile-flyout/mobile-flyout-page/mobile-flyout-page.component.d.ts +1 -1
  84. package/lib/components/pagination/pagination.component.d.ts +1 -1
  85. package/lib/components/popovers/legend/legend.component.d.ts +1 -1
  86. package/lib/components/popovers/popover-content/popover-content.component.d.ts +1 -1
  87. package/lib/components/popovers/popover-menu/popover-menu.component.d.ts +1 -1
  88. package/lib/components/popovers/tooltip/tooltip.directive.d.ts +1 -1
  89. package/lib/components/progress/progress.component.d.ts +1 -1
  90. package/lib/components/scroll/scrollable.directive.d.ts +1 -1
  91. package/lib/components/search-input/search-input.component.d.ts +1 -1
  92. package/lib/components/sidebar-overlay/sidebar-overlay.component.d.ts +1 -1
  93. package/lib/components/snackbar/snackbar-container.component.d.ts +1 -1
  94. package/lib/components/snackbar/snackbar-container.directive.d.ts +1 -1
  95. package/lib/components/snackbar/snackbar.component.d.ts +1 -1
  96. package/lib/components/stepper-horizontal/step-horizontal/step-horizontal.component.d.ts +1 -1
  97. package/lib/components/stepper-horizontal/stepper-horizontal.component.d.ts +1 -1
  98. package/lib/components/stepper-vertical/step-vertical/step-vertical.component.d.ts +1 -1
  99. package/lib/components/stepper-vertical/stepper-vertical.component.d.ts +1 -1
  100. package/lib/components/table-header-cell/table-header-cell.directive.d.ts +1 -1
  101. package/lib/components/tabs/tab-pane/tab-pane.component.d.ts +1 -1
  102. package/lib/components/tabs/tabs.component.d.ts +1 -1
  103. package/lib/forms/checkbox/checkbox.component.d.ts +1 -1
  104. package/lib/forms/color-indicator/color-indicator.component.d.ts +1 -1
  105. package/lib/forms/color-picker/color-picker.component.d.ts +1 -1
  106. package/lib/forms/date-picker/date-picker.component.d.ts +1 -1
  107. package/lib/forms/date-range-picker/date-range-picker.component.d.ts +1 -1
  108. package/lib/forms/flatpickr/flatpickr.component.d.ts +1 -1
  109. package/lib/forms/radio/radio.component.d.ts +6 -6
  110. package/lib/forms/segment/segment-control/segment-control.component.d.ts +1 -1
  111. package/lib/forms/segment/segment.component.d.ts +1 -1
  112. package/lib/forms/select/select-option/select-option.component.d.ts +1 -1
  113. package/lib/forms/select/select.component.d.ts +6 -5
  114. package/lib/forms/slider/slider.component.d.ts +1 -1
  115. package/lib/forms/switch/switch.component.d.ts +1 -1
  116. package/lib/forms/text-area/text-area.component.d.ts +1 -1
  117. package/lib/forms/text-editor/text-editor.component.d.ts +1 -1
  118. package/lib/forms/text-input/text-input.component.d.ts +1 -1
  119. package/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.d.ts +1 -1
  120. package/lib/forms/time-picker/time-picker.component.d.ts +1 -1
  121. package/lib/forms/value-accessor-base.d.ts +1 -1
  122. package/lib/modals/alert/alert.component.d.ts +1 -1
  123. package/lib/modals/confirm/confirm.component.d.ts +1 -1
  124. package/lib/modals/custom-modal/custom-modal.component.d.ts +1 -1
  125. package/lib/modals/image-gallery/image-gallery.component.d.ts +1 -1
  126. package/lib/modals/prompt/prompt.component.d.ts +1 -1
  127. package/package.json +17 -23
  128. package/esm2020/lib/components/accordion/accordion-item/accordion-item.component.mjs +0 -148
  129. package/esm2020/lib/components/accordion/accordion.component.mjs +0 -59
  130. package/esm2020/lib/components/components.module.mjs +0 -218
  131. package/esm2020/lib/components/sidebar-overlay/sidebar-overlay.component.mjs +0 -59
  132. package/esm2020/lib/components/snackbar/snackbar.component.mjs +0 -81
  133. package/esm2020/lib/components/snackbar/snackbar.module.mjs +0 -24
  134. package/esm2020/lib/components/tabs/tab-pane/tab-pane.component.mjs +0 -34
  135. package/esm2020/lib/components/tabs/tabs.component.mjs +0 -459
  136. package/esm2020/lib/forms/checkbox/checkbox.component.mjs +0 -154
  137. package/esm2020/lib/forms/color-picker/color-picker.component.mjs +0 -292
  138. package/esm2020/lib/forms/radio/radio.component.mjs +0 -350
  139. package/esm2020/lib/forms/select/select.component.mjs +0 -273
  140. package/esm2020/lib/forms/slider/slider.component.mjs +0 -113
  141. package/esm2020/lib/forms/switch/switch.component.mjs +0 -121
  142. package/esm2020/lib/forms/text-area/text-area.component.mjs +0 -187
  143. package/esm2020/lib/forms/text-editor/text-editor.component.mjs +0 -308
  144. package/esm2020/lib/forms/text-input/text-input.component.mjs +0 -208
  145. package/fesm2015/festo-ui-angular.mjs +0 -6504
  146. package/fesm2015/festo-ui-angular.mjs.map +0 -1
  147. /package/{esm2020 → esm2022}/festo-ui-angular.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/components/accordion/index.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/components/popovers/popover-ref.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/components/popovers/popover.defaults.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/components/popovers/popover.models.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/components/scroll/index.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/components/snackbar/snackbar.models.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/forms/color-picker/color-helper.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/modals/index.mjs +0 -0
  156. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -1,350 +0,0 @@
1
- import { Component, Input, ChangeDetectionStrategy, Optional, EventEmitter, Output, ViewEncapsulation, Directive, forwardRef, ContentChildren, HostBinding } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
- import { CommonModule } from '@angular/common';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../unique-selection-dispatcher";
7
- import * as i2 from "@angular/common";
8
- export class FngRadioChange {
9
- constructor(source, value) {
10
- this.source = source;
11
- this.value = value;
12
- }
13
- }
14
- let nextUniqueId = 0;
15
- export class FngRadioGroupDirective {
16
- get name() {
17
- return this.innerName;
18
- }
19
- set name(value) {
20
- this.innerName = value;
21
- this.updateRadioButtonNames();
22
- }
23
- get large() {
24
- return this.isLarge;
25
- }
26
- set large(v) {
27
- this.isLarge = v;
28
- this.updateRadioButtonSize();
29
- }
30
- get labelPosition() {
31
- return this.innerLabelPosition;
32
- }
33
- set labelPosition(v) {
34
- this.innerLabelPosition = v;
35
- this.markRadiosForCheck();
36
- }
37
- get value() {
38
- return this.innerValue;
39
- }
40
- set value(newValue) {
41
- if (this.innerValue !== newValue) {
42
- this.innerValue = newValue;
43
- this.updateSelectedRadioFromValue();
44
- this.checkSelectedRadioButton();
45
- }
46
- }
47
- get selected() {
48
- return this.isSelected;
49
- }
50
- set selected(selected) {
51
- this.isSelected = selected;
52
- this.value = selected ? selected.value : null;
53
- this.checkSelectedRadioButton();
54
- }
55
- get disabled() {
56
- return this.isDisabled;
57
- }
58
- set disabled(value) {
59
- this.isDisabled = coerceBooleanProperty(value);
60
- this.markRadiosForCheck();
61
- }
62
- get required() {
63
- return this.isRequired;
64
- }
65
- set required(value) {
66
- this.isRequired = coerceBooleanProperty(value);
67
- this.markRadiosForCheck();
68
- }
69
- constructor(changeDetector) {
70
- this.changeDetector = changeDetector;
71
- this.hostClass = true;
72
- this.role = 'radiogroup';
73
- this.change = new EventEmitter();
74
- this.isLarge = false;
75
- this.isDisabled = false;
76
- this.isRequired = false;
77
- this.innerValue = null;
78
- this.isInitialized = false;
79
- this.isSelected = null;
80
- this.innerName = `fngRadioGroup-${nextUniqueId++}`;
81
- this.innerLabelPosition = 'before';
82
- }
83
- ngAfterContentInit() {
84
- this.isInitialized = true;
85
- }
86
- checkSelectedRadioButton() {
87
- if (this.isSelected && !this.isSelected.checked) {
88
- this.isSelected.checked = true;
89
- }
90
- }
91
- touch() {
92
- if (this.onTouched != null) {
93
- this.onTouched();
94
- }
95
- }
96
- emitChangeEvent() {
97
- if (this.isInitialized) {
98
- this.change.emit(new FngRadioChange(this.isSelected, this.innerValue));
99
- }
100
- }
101
- markRadiosForCheck() {
102
- if (this.radios) {
103
- this.radios.forEach(radio => radio.markForCheck());
104
- }
105
- }
106
- writeValue(value) {
107
- this.value = value;
108
- this.changeDetector.markForCheck();
109
- }
110
- registerOnChange(fn) {
111
- this.controlValueAccessorChangeFn = fn;
112
- }
113
- registerOnTouched(fn) {
114
- this.onTouched = fn;
115
- }
116
- setDisabledState(isDisabled) {
117
- this.disabled = isDisabled;
118
- this.changeDetector.markForCheck();
119
- }
120
- updateRadioButtonSize() {
121
- if (this.radios) {
122
- this.radios.forEach(radio => {
123
- radio.large = this.large;
124
- radio.markForCheck();
125
- });
126
- }
127
- }
128
- updateRadioButtonNames() {
129
- if (this.radios) {
130
- this.radios.forEach(radio => {
131
- radio.name = this.name;
132
- radio.markForCheck();
133
- });
134
- }
135
- }
136
- updateSelectedRadioFromValue() {
137
- const isAlreadySelected = this.isSelected !== null && this.isSelected.value === this.innerValue;
138
- if (this.radios && !isAlreadySelected) {
139
- this.isSelected = null;
140
- this.radios.forEach(radio => {
141
- radio.checked = this.value === radio.value;
142
- if (radio.checked) {
143
- this.isSelected = radio;
144
- }
145
- });
146
- }
147
- }
148
- }
149
- FngRadioGroupDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngRadioGroupDirective, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
150
- FngRadioGroupDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.1", type: FngRadioGroupDirective, isStandalone: true, selector: "[fngRadioGroup]", inputs: { name: "name", large: "large", labelPosition: "labelPosition", value: "value", selected: "selected", disabled: "disabled", required: "required" }, outputs: { change: "change" }, host: { properties: { "class.fwe-radio-group": "this.hostClass", "attr.role": "this.role" } }, providers: [
151
- {
152
- provide: NG_VALUE_ACCESSOR,
153
- useExisting: forwardRef(() => FngRadioGroupDirective),
154
- multi: true
155
- }
156
- ], queries: [{ propertyName: "radios", predicate: i0.forwardRef(function () { return FngRadioComponent; }), descendants: true }], ngImport: i0 });
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngRadioGroupDirective, decorators: [{
158
- type: Directive,
159
- args: [{
160
- standalone: true,
161
- selector: '[fngRadioGroup]',
162
- providers: [
163
- {
164
- provide: NG_VALUE_ACCESSOR,
165
- useExisting: forwardRef(() => FngRadioGroupDirective),
166
- multi: true
167
- }
168
- ]
169
- }]
170
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { hostClass: [{
171
- type: HostBinding,
172
- args: ['class.fwe-radio-group']
173
- }], role: [{
174
- type: HostBinding,
175
- args: ['attr.role']
176
- }], change: [{
177
- type: Output
178
- }], radios: [{
179
- type: ContentChildren,
180
- args: [forwardRef(() => FngRadioComponent), { descendants: true }]
181
- }], name: [{
182
- type: Input
183
- }], large: [{
184
- type: Input
185
- }], labelPosition: [{
186
- type: Input
187
- }], value: [{
188
- type: Input
189
- }], selected: [{
190
- type: Input
191
- }], disabled: [{
192
- type: Input
193
- }], required: [{
194
- type: Input
195
- }] } });
196
- export class FngRadioComponent {
197
- get id() {
198
- return this.innerId;
199
- }
200
- set id(value) {
201
- this.innerId = value ? `${value}-${++nextUniqueId}` : `fng-radio-${++nextUniqueId}`;
202
- }
203
- get inputId() {
204
- return `${this.innerId}-input`;
205
- }
206
- get checked() {
207
- return this.isChecked;
208
- }
209
- set checked(value) {
210
- const newCheckedState = coerceBooleanProperty(value);
211
- if (this.isChecked !== newCheckedState) {
212
- this.isChecked = newCheckedState;
213
- if (newCheckedState && this.radioGroup && this.radioGroup.value !== this.value) {
214
- this.radioGroup.selected = this;
215
- }
216
- else if (!newCheckedState && this.radioGroup && this.radioGroup.value === this.value) {
217
- this.radioGroup.selected = null;
218
- }
219
- if (newCheckedState) {
220
- this.radioDispatcher.notify(this.id, this.name);
221
- }
222
- this.changeDetector.markForCheck();
223
- }
224
- }
225
- get value() {
226
- return this.innerValue;
227
- }
228
- set value(value) {
229
- if (this.innerValue !== value) {
230
- this.innerValue = value;
231
- if (this.radioGroup !== null) {
232
- if (!this.checked) {
233
- this.checked = this.radioGroup.value === value;
234
- }
235
- if (this.checked) {
236
- this.radioGroup.selected = this;
237
- }
238
- }
239
- }
240
- }
241
- get large() {
242
- return this.isLarge || (this.radioGroup != null && this.radioGroup.large);
243
- }
244
- set large(value) {
245
- this.isLarge = value;
246
- }
247
- get labelPosition() {
248
- return this.innerLabelPosition || (this.radioGroup && this.radioGroup.labelPosition) || 'before';
249
- }
250
- set labelPosition(value) {
251
- this.innerLabelPosition = value;
252
- }
253
- get disabled() {
254
- return this.isDisabled || (this.radioGroup != null && this.radioGroup.disabled);
255
- }
256
- set disabled(value) {
257
- const newDisabledState = coerceBooleanProperty(value);
258
- if (this.isDisabled !== newDisabledState) {
259
- this.isDisabled = newDisabledState;
260
- this.changeDetector.markForCheck();
261
- }
262
- }
263
- get required() {
264
- return this.isRequired || (this.radioGroup && this.radioGroup.required);
265
- }
266
- set required(value) {
267
- this.isRequired = coerceBooleanProperty(value);
268
- }
269
- constructor(radioGroup, changeDetector, radioDispatcher) {
270
- this.changeDetector = changeDetector;
271
- this.radioDispatcher = radioDispatcher;
272
- this.innerId = `fng-radio-${++nextUniqueId}`;
273
- this.change = new EventEmitter();
274
- this.isLarge = false;
275
- this.isChecked = false;
276
- this.isDisabled = false;
277
- this.isRequired = false;
278
- this.innerValue = null;
279
- this.innerLabelPosition = 'before';
280
- this.radioGroup = radioGroup;
281
- this.removeUniqueSelectionListener = radioDispatcher.listen((id, name) => {
282
- if (id !== this.id && name === this.name) {
283
- this.checked = false;
284
- }
285
- });
286
- }
287
- ngOnInit() {
288
- if (this.radioGroup) {
289
- this.checked = this.radioGroup.value === this.innerValue;
290
- this.name = this.radioGroup.name;
291
- }
292
- }
293
- ngOnDestroy() {
294
- if (this.removeUniqueSelectionListener != null) {
295
- this.removeUniqueSelectionListener();
296
- }
297
- }
298
- onInputClick(event) {
299
- event.stopPropagation();
300
- }
301
- onInputChange(event) {
302
- event.stopPropagation();
303
- if (!this.disabled) {
304
- const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;
305
- this.checked = true;
306
- this.emitChangeEvent();
307
- if (this.radioGroup) {
308
- if (typeof this.radioGroup?.controlValueAccessorChangeFn === 'function') {
309
- this.radioGroup?.controlValueAccessorChangeFn(this.value);
310
- }
311
- if (groupValueChanged) {
312
- this.radioGroup.emitChangeEvent();
313
- }
314
- }
315
- }
316
- }
317
- markForCheck() {
318
- this.changeDetector.markForCheck();
319
- }
320
- emitChangeEvent() {
321
- this.change.emit(new FngRadioChange(this, this.innerValue));
322
- }
323
- }
324
- FngRadioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngRadioComponent, deps: [{ token: FngRadioGroupDirective, optional: true }, { token: i0.ChangeDetectorRef }, { token: i1.FngUniqueSelectionDispatcher }], target: i0.ɵɵFactoryTarget.Component });
325
- FngRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: FngRadioComponent, isStandalone: true, selector: "fng-radio", inputs: { name: "name", id: "id", checked: "checked", value: "value", large: "large", labelPosition: "labelPosition", disabled: "disabled", required: "required" }, outputs: { change: "change" }, ngImport: i0, template: "<label\n [attr.for]=\"inputId\"\n [ngClass]=\"{\n 'fwe-radio': true,\n 'fwe-radio-label-below': labelPosition == 'below',\n 'fwe-radio-label-before': labelPosition == 'before',\n 'fwe-radio-lg': large\n }\"\n>\n <input\n type=\"radio\"\n [id]=\"inputId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [required]=\"required\"\n (change)=\"onInputChange($event)\"\n (click)=\"onInputClick($event)\"\n />\n <div class=\"fwe-radio-checkmark\"></div>\n <div class=\"fwe-radio-label-content\">\n <ng-content></ng-content>\n </div>\n</label>\n", styles: [".fwe-radio:hover .fwe-radio-checkmark{background-color:var(--fwe-control)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
326
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngRadioComponent, decorators: [{
327
- type: Component,
328
- args: [{ standalone: true, imports: [CommonModule], selector: 'fng-radio', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<label\n [attr.for]=\"inputId\"\n [ngClass]=\"{\n 'fwe-radio': true,\n 'fwe-radio-label-below': labelPosition == 'below',\n 'fwe-radio-label-before': labelPosition == 'before',\n 'fwe-radio-lg': large\n }\"\n>\n <input\n type=\"radio\"\n [id]=\"inputId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [required]=\"required\"\n (change)=\"onInputChange($event)\"\n (click)=\"onInputClick($event)\"\n />\n <div class=\"fwe-radio-checkmark\"></div>\n <div class=\"fwe-radio-label-content\">\n <ng-content></ng-content>\n </div>\n</label>\n", styles: [".fwe-radio:hover .fwe-radio-checkmark{background-color:var(--fwe-control)}\n"] }]
329
- }], ctorParameters: function () { return [{ type: FngRadioGroupDirective, decorators: [{
330
- type: Optional
331
- }] }, { type: i0.ChangeDetectorRef }, { type: i1.FngUniqueSelectionDispatcher }]; }, propDecorators: { name: [{
332
- type: Input
333
- }], id: [{
334
- type: Input
335
- }], checked: [{
336
- type: Input
337
- }], value: [{
338
- type: Input
339
- }], large: [{
340
- type: Input
341
- }], labelPosition: [{
342
- type: Input
343
- }], disabled: [{
344
- type: Input
345
- }], required: [{
346
- type: Input
347
- }], change: [{
348
- type: Output
349
- }] } });
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvbGliL2Zvcm1zL3JhZGlvL3JhZGlvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy9yYWRpby9yYWRpby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCx1QkFBdUIsRUFDdkIsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBR04saUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBRVYsZUFBZSxFQUNmLFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBRS9DLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW1CLE1BQWdDLEVBQVMsS0FBVTtRQUFuRCxXQUFNLEdBQU4sTUFBTSxDQUEwQjtRQUFTLFVBQUssR0FBTCxLQUFLLENBQUs7SUFBRyxDQUFDO0NBQzNFO0FBRUQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBYXJCLE1BQU0sT0FBTyxzQkFBc0I7SUFVakMsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFP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QyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzswQkEwR2xDLFFBQVE7dUhBdkdGLElBQUk7c0JBQVosS0FBSztnQkFPRixFQUFFO3NCQURMLEtBQUs7Z0JBVUYsT0FBTztzQkFEVixLQUFLO2dCQXNCRixLQUFLO3NCQURSLEtBQUs7Z0JBbUJGLEtBQUs7c0JBRFIsS0FBSztnQkFTRixhQUFhO3NCQURoQixLQUFLO2dCQVNGLFFBQVE7c0JBRFgsS0FBSztnQkFhRixRQUFRO3NCQURYLEtBQUs7Z0JBUWEsTUFBTTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIE9wdGlvbmFsLFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIERpcmVjdGl2ZSxcbiAgZm9yd2FyZFJlZixcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBIb3N0QmluZGluZ1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGbmdVbmlxdWVTZWxlY3Rpb25EaXNwYXRjaGVyIH0gZnJvbSAnLi4vdW5pcXVlLXNlbGVjdGlvbi1kaXNwYXRjaGVyJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgY2xhc3MgRm5nUmFkaW9DaGFuZ2Uge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgc291cmNlOiBGbmdSYWRpb0NvbXBvbmVudCB8IG51bGwsIHB1YmxpYyB2YWx1ZTogYW55KSB7fVxufVxuXG5sZXQgbmV4dFVuaXF1ZUlkID0gMDtcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnW2ZuZ1JhZGlvR3JvdXBdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGbmdSYWRpb0dyb3VwRGlyZWN0aXZlKSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZuZ1JhZGlvR3JvdXBEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZndlLXJhZGlvLWdyb3VwJykgaG9zdENsYXNzID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKSByb2xlID0gJ3JhZGlvZ3JvdXAnO1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZuZ1JhZGlvQ2hhbmdlPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBGbmdSYWRpb0NvbXBvbmVudCksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcmFkaW9zOiBRdWVyeUxpc3Q8Rm5nUmFkaW9Db21wb25lbnQ+IHwgdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJOYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlubmVyTmFtZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlUmFkaW9CdXR0b25OYW1lcygpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGxhcmdlKCkge1xuICAgIHJldHVybiB0aGlzLmlzTGFyZ2U7XG4gIH1cbiAgc2V0IGxhcmdlKHYpIHtcbiAgICB0aGlzLmlzTGFyZ2UgPSB2O1xuICAgIHRoaXMudXBkYXRlUmFkaW9CdXR0b25TaXplKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgbGFiZWxQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lckxhYmVsUG9zaXRpb247XG4gIH1cbiAgc2V0IGxhYmVsUG9zaXRpb24odikge1xuICAgIHRoaXMuaW5uZXJMYWJlbFBvc2l0aW9uID0gdjtcbiAgICB0aGlzLm1hcmtSYWRpb3NGb3JDaGVjaygpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJWYWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlubmVyVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRSYWRpb0Zyb21WYWx1ZSgpO1xuICAgICAgdGhpcy5jaGVja1NlbGVjdGVkUmFkaW9CdXR0b24oKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZDtcbiAgfVxuICBzZXQgc2VsZWN0ZWQoc2VsZWN0ZWQ6IGFueSB8IG51bGwpIHtcbiAgICB0aGlzLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICB0aGlzLnZhbHVlID0gc2VsZWN0ZWQgPyBzZWxlY3RlZC52YWx1ZSA6IG51bGw7XG4gICAgdGhpcy5jaGVja1NlbGVjdGVkUmFkaW9CdXR0b24oKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIHRoaXMuaXNEaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5tYXJrUmFkaW9zRm9yQ2hlY2soKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkO1xuICB9XG4gIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNSZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5tYXJrUmFkaW9zRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNMYXJnZSA9IGZhbHNlO1xuICBwcml2YXRlIGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc1JlcXVpcmVkID0gZmFsc2U7XG4gIHByaXZhdGUgaW5uZXJWYWx1ZTogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgaXNTZWxlY3RlZDogRm5nUmFkaW9Db21wb25lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpbm5lck5hbWUgPSBgZm5nUmFkaW9Hcm91cC0ke25leHRVbmlxdWVJZCsrfWA7XG4gIHByaXZhdGUgaW5uZXJMYWJlbFBvc2l0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicgfCAnYmVsb3cnID0gJ2JlZm9yZSc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbjogKCh2YWx1ZTogYW55KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICBvblRvdWNoZWQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIGNoZWNrU2VsZWN0ZWRSYWRpb0J1dHRvbigpIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkICYmICF0aGlzLmlzU2VsZWN0ZWQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5pc1NlbGVjdGVkLmNoZWNrZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRvdWNoKCkge1xuICAgIGlmICh0aGlzLm9uVG91Y2hlZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGVtaXRDaGFuZ2VFdmVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KG5ldyBGbmdSYWRpb0NoYW5nZSh0aGlzLmlzU2VsZWN0ZWQsIHRoaXMuaW5uZXJWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtSYWRpb3NGb3JDaGVjaygpIHtcbiAgICBpZiAodGhpcy5yYWRpb3MpIHtcbiAgICAgIHRoaXMucmFkaW9zLmZvckVhY2gocmFkaW8gPT4gcmFkaW8ubWFya0ZvckNoZWNrKCkpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcbiAgICB0aGlzLmNvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4gPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUmFkaW9CdXR0b25TaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJhZGlvcykge1xuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaChyYWRpbyA9PiB7XG4gICAgICAgIHJhZGlvLmxhcmdlID0gdGhpcy5sYXJnZTtcbiAgICAgICAgcmFkaW8ubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJhZGlvQnV0dG9uTmFtZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmFkaW9zKSB7XG4gICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKHJhZGlvID0+IHtcbiAgICAgICAgcmFkaW8ubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgcmFkaW8ubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkUmFkaW9Gcm9tVmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgaXNBbHJlYWR5U2VsZWN0ZWQgPSB0aGlzLmlzU2VsZWN0ZWQgIT09IG51bGwgJiYgdGhpcy5pc1NlbGVjdGVkLnZhbHVlID09PSB0aGlzLmlubmVyVmFsdWU7XG4gICAgaWYgKHRoaXMucmFkaW9zICYmICFpc0FscmVhZHlTZWxlY3RlZCkge1xuICAgICAgdGhpcy5pc1NlbGVjdGVkID0gbnVsbDtcbiAgICAgIHRoaXMucmFkaW9zLmZvckVhY2gocmFkaW8gPT4ge1xuICAgICAgICByYWRpby5jaGVja2VkID0gdGhpcy52YWx1ZSA9PT0gcmFkaW8udmFsdWU7XG4gICAgICAgIGlmIChyYWRpby5jaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gcmFkaW87XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHNlbGVjdG9yOiAnZm5nLXJhZGlvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFkaW8uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRm5nUmFkaW9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGlubmVySWQgPSBgZm5nLXJhZGlvLSR7KytuZXh0VW5pcXVlSWR9YDtcbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJJZDtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaW5uZXJJZCA9IHZhbHVlID8gYCR7dmFsdWV9LSR7KytuZXh0VW5pcXVlSWR9YCA6IGBmbmctcmFkaW8tJHsrK25leHRVbmlxdWVJZH1gO1xuICB9XG5cbiAgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pbm5lcklkfS1pbnB1dGA7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0NoZWNrZWQ7XG4gIH1cbiAgc2V0IGNoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBuZXdDaGVja2VkU3RhdGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIGlmICh0aGlzLmlzQ2hlY2tlZCAhPT0gbmV3Q2hlY2tlZFN0YXRlKSB7XG4gICAgICB0aGlzLmlzQ2hlY2tlZCA9IG5ld0NoZWNrZWRTdGF0ZTtcbiAgICAgIGlmIChuZXdDaGVja2VkU3RhdGUgJiYgdGhpcy5yYWRpb0dyb3VwICYmIHRoaXMucmFkaW9Hcm91cC52YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLnJhZGlvR3JvdXAuc2VsZWN0ZWQgPSB0aGlzO1xuICAgICAgfSBlbHNlIGlmICghbmV3Q2hlY2tlZFN0YXRlICYmIHRoaXMucmFkaW9Hcm91cCAmJiB0aGlzLnJhZGlvR3JvdXAudmFsdWUgPT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5yYWRpb0dyb3VwLnNlbGVjdGVkID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld0NoZWNrZWRTdGF0ZSkge1xuICAgICAgICB0aGlzLnJhZGlvRGlzcGF0Y2hlci5ub3RpZnkodGhpcy5pZCwgdGhpcy5uYW1lKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJWYWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlubmVyVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnJhZGlvR3JvdXAgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrZWQgPSB0aGlzLnJhZGlvR3JvdXAudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgICB0aGlzLnJhZGlvR3JvdXAuc2VsZWN0ZWQgPSB0aGlzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGxhcmdlKCkge1xuICAgIHJldHVybiB0aGlzLmlzTGFyZ2UgfHwgKHRoaXMucmFkaW9Hcm91cCAhPSBudWxsICYmIHRoaXMucmFkaW9Hcm91cC5sYXJnZSk7XG4gIH1cbiAgc2V0IGxhcmdlKHZhbHVlKSB7XG4gICAgdGhpcy5pc0xhcmdlID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgbGFiZWxQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lckxhYmVsUG9zaXRpb24gfHwgKHRoaXMucmFkaW9Hcm91cCAmJiB0aGlzLnJhZGlvR3JvdXAubGFiZWxQb3NpdGlvbikgfHwgJ2JlZm9yZSc7XG4gIH1cbiAgc2V0IGxhYmVsUG9zaXRpb24odmFsdWUpIHtcbiAgICB0aGlzLmlubmVyTGFiZWxQb3NpdGlvbiA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQgfHwgKHRoaXMucmFkaW9Hcm91cCAhPSBudWxsICYmIHRoaXMucmFkaW9Hcm91cC5kaXNhYmxlZCk7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgbmV3RGlzYWJsZWRTdGF0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCAhPT0gbmV3RGlzYWJsZWRTdGF0ZSkge1xuICAgICAgdGhpcy5pc0Rpc2FibGVkID0gbmV3RGlzYWJsZWRTdGF0ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgfHwgKHRoaXMucmFkaW9Hcm91cCAmJiB0aGlzLnJhZGlvR3JvdXAucmVxdWlyZWQpO1xuICB9XG4gIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNSZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGbmdSYWRpb0NoYW5nZT4oKTtcblxuICByYWRpb0dyb3VwOiBGbmdSYWRpb0dyb3VwRGlyZWN0aXZlO1xuXG4gIHByaXZhdGUgaXNMYXJnZSA9IGZhbHNlO1xuICBwcml2YXRlIGlzQ2hlY2tlZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5uZXJWYWx1ZTogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBpbm5lckxhYmVsUG9zaXRpb246ICdiZWZvcmUnIHwgJ2FmdGVyJyB8ICdiZWxvdycgPSAnYmVmb3JlJztcbiAgcHJpdmF0ZSByZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcjogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSByYWRpb0dyb3VwOiBGbmdSYWRpb0dyb3VwRGlyZWN0aXZlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmFkaW9EaXNwYXRjaGVyOiBGbmdVbmlxdWVTZWxlY3Rpb25EaXNwYXRjaGVyXG4gICkge1xuICAgIHRoaXMucmFkaW9Hcm91cCA9IHJhZGlvR3JvdXA7XG4gICAgdGhpcy5yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lciA9IHJhZGlvRGlzcGF0Y2hlci5saXN0ZW4oKGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGlkICE9PSB0aGlzLmlkICYmIG5hbWUgPT09IHRoaXMubmFtZSkge1xuICAgICAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnJhZGlvR3JvdXApIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRoaXMucmFkaW9Hcm91cC52YWx1ZSA9PT0gdGhpcy5pbm5lclZhbHVlO1xuICAgICAgdGhpcy5uYW1lID0gdGhpcy5yYWRpb0dyb3VwLm5hbWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRDbGljayhldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGdyb3VwVmFsdWVDaGFuZ2VkID0gdGhpcy5yYWRpb0dyb3VwICYmIHRoaXMudmFsdWUgIT09IHRoaXMucmFkaW9Hcm91cC52YWx1ZTtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2VFdmVudCgpO1xuXG4gICAgICBpZiAodGhpcy5yYWRpb0dyb3VwKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yYWRpb0dyb3VwPy5jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy5yYWRpb0dyb3VwPy5jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdyb3VwVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5yYWRpb0dyb3VwLmVtaXRDaGFuZ2VFdmVudCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2VFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZS5lbWl0KG5ldyBGbmdSYWRpb0NoYW5nZSh0aGlzLCB0aGlzLmlubmVyVmFsdWUpKTtcbiAgfVxufVxuIiwiPGxhYmVsXG4gIFthdHRyLmZvcl09XCJpbnB1dElkXCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdmd2UtcmFkaW8nOiB0cnVlLFxuICAgICdmd2UtcmFkaW8tbGFiZWwtYmVsb3cnOiBsYWJlbFBvc2l0aW9uID09ICdiZWxvdycsXG4gICAgJ2Z3ZS1yYWRpby1sYWJlbC1iZWZvcmUnOiBsYWJlbFBvc2l0aW9uID09ICdiZWZvcmUnLFxuICAgICdmd2UtcmFkaW8tbGcnOiBsYXJnZVxuICB9XCJcbj5cbiAgPGlucHV0XG4gICAgdHlwZT1cInJhZGlvXCJcbiAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgIFthdHRyLnZhbHVlXT1cInZhbHVlXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIChjaGFuZ2UpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwib25JbnB1dENsaWNrKCRldmVudClcIlxuICAvPlxuICA8ZGl2IGNsYXNzPVwiZndlLXJhZGlvLWNoZWNrbWFya1wiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZndlLXJhZGlvLWxhYmVsLWNvbnRlbnRcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9sYWJlbD5cbiJdfQ==