@seniorsistemas/data-seniorx-core 3.0.0 → 3.1.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 (180) hide show
  1. package/core/constants/editable-overlay.const.d.ts +4 -0
  2. package/core/constants/help-popover.const.d.ts +7 -0
  3. package/core/constants/input-mask.const.d.ts +5 -0
  4. package/core/constants/navigation-button.const.d.ts +3 -0
  5. package/core/constants/object-card.const.d.ts +21 -0
  6. package/core/constants/thumbnail.const.d.ts +6 -0
  7. package/core/constants/thumbnails.const.d.ts +4 -0
  8. package/core/constants/token-list.const.d.ts +3 -0
  9. package/core/types/button.type.d.ts +1 -1
  10. package/core/types/datepicker.type.d.ts +28 -0
  11. package/core/types/dynamic-form.type.d.ts +29 -0
  12. package/core/types/editable-overlay.type.d.ts +15 -0
  13. package/core/types/help-popover.type.d.ts +2 -0
  14. package/core/types/input-mask.type.d.ts +6 -0
  15. package/core/types/lookup.type.d.ts +45 -0
  16. package/core/types/navigation-button.type.d.ts +9 -0
  17. package/core/types/row-card.type.d.ts +5 -0
  18. package/core/types/semantics.type.d.ts +1 -1
  19. package/core/types/table-options.type.d.ts +1 -0
  20. package/core/types/thumbnail.type.d.ts +1 -0
  21. package/core/types/thumbnails.type.d.ts +20 -0
  22. package/core/types/token-list.type.d.ts +6 -0
  23. package/core/utils/emoji-support.util.d.ts +12 -0
  24. package/core/utils/overlay-dismiss.util.d.ts +25 -0
  25. package/esm2022/core/config/row-card.type.config.mjs +3 -1
  26. package/esm2022/core/constants/country-phone-picker.const.mjs +6 -6
  27. package/esm2022/core/constants/editable-overlay.const.mjs +5 -0
  28. package/esm2022/core/constants/help-popover.const.mjs +7 -0
  29. package/esm2022/core/constants/input-mask.const.mjs +6 -0
  30. package/esm2022/core/constants/navigation-button.const.mjs +4 -0
  31. package/esm2022/core/constants/object-card.const.mjs +23 -0
  32. package/esm2022/core/constants/thumbnail.const.mjs +14 -0
  33. package/esm2022/core/constants/thumbnails.const.mjs +5 -0
  34. package/esm2022/core/constants/token-list.const.mjs +4 -0
  35. package/esm2022/core/types/button.type.mjs +1 -1
  36. package/esm2022/core/types/datepicker.type.mjs +2 -0
  37. package/esm2022/core/types/dynamic-form.type.mjs +2 -0
  38. package/esm2022/core/types/editable-overlay.type.mjs +2 -0
  39. package/esm2022/core/types/help-popover.type.mjs +2 -0
  40. package/esm2022/core/types/input-mask.type.mjs +2 -0
  41. package/esm2022/core/types/lookup.type.mjs +2 -0
  42. package/esm2022/core/types/navigation-button.type.mjs +2 -0
  43. package/esm2022/core/types/row-card.type.mjs +1 -1
  44. package/esm2022/core/types/semantics.type.mjs +1 -1
  45. package/esm2022/core/types/table-options.type.mjs +1 -1
  46. package/esm2022/core/types/thumbnail.type.mjs +2 -0
  47. package/esm2022/core/types/thumbnails.type.mjs +2 -0
  48. package/esm2022/core/types/token-list.type.mjs +2 -0
  49. package/esm2022/core/utils/emoji-support.util.mjs +48 -0
  50. package/esm2022/core/utils/mask.util.mjs +2 -2
  51. package/esm2022/core/utils/overlay-dismiss.util.mjs +38 -0
  52. package/esm2022/features/alert/alert.component.mjs +5 -2
  53. package/esm2022/features/autocomplete/autocomplete.component.mjs +30 -8
  54. package/esm2022/features/bignumber-input/bignumber-input.component.mjs +1 -1
  55. package/esm2022/features/button/button.component.mjs +13 -5
  56. package/esm2022/features/card-list/card/card.component.mjs +2 -2
  57. package/esm2022/features/card-list/card-list.component.mjs +2 -2
  58. package/esm2022/features/checkbox-list/checkbox-list.component.mjs +25 -5
  59. package/esm2022/features/chips/chips.component.mjs +3 -3
  60. package/esm2022/features/code-editor/code-editor.component.mjs +12 -3
  61. package/esm2022/features/combobox/combobox.component.mjs +3 -3
  62. package/esm2022/features/confirm/confirm.component.mjs +2 -2
  63. package/esm2022/features/context-selector/context-selector.component.mjs +1 -1
  64. package/esm2022/features/country-phone-picker/country-phone-picker.component.mjs +22 -18
  65. package/esm2022/features/currency/currency.component.mjs +3 -3
  66. package/esm2022/features/datepicker/datepicker.component.mjs +814 -0
  67. package/esm2022/features/dynamic-form/dynamic-form-field.directive.mjs +178 -0
  68. package/esm2022/features/dynamic-form/dynamic-form.component.mjs +60 -0
  69. package/esm2022/features/dynamic-form/dynamic-form.registry.mjs +13 -0
  70. package/esm2022/features/editable-overlay/editable-overlay-editor.directive.mjs +31 -0
  71. package/esm2022/features/editable-overlay/editable-overlay.component.mjs +217 -0
  72. package/esm2022/features/editor/editor.component.mjs +173 -0
  73. package/esm2022/features/empty-state/empty-state.component.mjs +3 -3
  74. package/esm2022/features/fileupload/fileupload.component.mjs +3 -3
  75. package/esm2022/features/help-popover/help-popover.component.mjs +204 -0
  76. package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
  77. package/esm2022/features/icon-picker/icon-picker.component.mjs +4 -4
  78. package/esm2022/features/image-cropper/image-cropper.component.mjs +2 -2
  79. package/esm2022/features/info-sign/info-sign.component.mjs +6 -3
  80. package/esm2022/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
  81. package/esm2022/features/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +2 -2
  82. package/esm2022/features/input-mask/input-mask.directive.mjs +510 -0
  83. package/esm2022/features/list/list.component.mjs +2 -2
  84. package/esm2022/features/localized-number-input/localized-number-input.component.mjs +3 -3
  85. package/esm2022/features/lookup/lookup.component.mjs +351 -0
  86. package/esm2022/features/modal/modal.component.mjs +6 -3
  87. package/esm2022/features/modalc/modalc.component.mjs +6 -3
  88. package/esm2022/features/navigation-button/navigation-button.component.mjs +172 -0
  89. package/esm2022/features/number-input/number-input.component.mjs +10 -4
  90. package/esm2022/features/object-card/components/object-card-field/object-card-field.component.mjs +89 -0
  91. package/esm2022/features/object-card/components/object-card-main/object-card-main.component.mjs +114 -0
  92. package/esm2022/features/object-card/object-card.component.mjs +199 -0
  93. package/esm2022/features/password-strength/password-strength.component.mjs +3 -3
  94. package/esm2022/features/pin-code-field/pin-code-field.component.mjs +14 -4
  95. package/esm2022/features/popover/popover.component.mjs +29 -3
  96. package/esm2022/features/profile-picture-picker/profile-picture-picker.component.mjs +13 -4
  97. package/esm2022/features/rating-scale/rating-scale.component.mjs +24 -4
  98. package/esm2022/features/row-card-list/row-card/row-card.component.mjs +19 -4
  99. package/esm2022/features/row-card-list/row-card-list.component.mjs +12 -3
  100. package/esm2022/features/scaffold/scaffold.component.mjs +3 -3
  101. package/esm2022/features/searchbox/searchbox.component.mjs +2 -2
  102. package/esm2022/features/select-button/select-button.component.mjs +26 -4
  103. package/esm2022/features/slider/slider.component.mjs +3 -3
  104. package/esm2022/features/split-button/split-button.component.mjs +1 -1
  105. package/esm2022/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.mjs +15 -18
  106. package/esm2022/features/spotlight/spotlight.component.mjs +2 -2
  107. package/esm2022/features/star-rating/star-rating.component.mjs +25 -4
  108. package/esm2022/features/table/components/table-cell-content.component.mjs +2 -2
  109. package/esm2022/features/table/table.component.mjs +30 -9
  110. package/esm2022/features/textarea/textarea.component.mjs +3 -3
  111. package/esm2022/features/thumbnail/thumbnail.component.mjs +86 -0
  112. package/esm2022/features/thumbnails/components/thumbnail-item/thumbnail-item.component.mjs +59 -0
  113. package/esm2022/features/thumbnails/components/thumbnail-item-image/thumbnail-item-image.component.mjs +25 -0
  114. package/esm2022/features/thumbnails/components/thumbnail-item-video/thumbnail-item-video.component.mjs +50 -0
  115. package/esm2022/features/thumbnails/thumbnails.component.mjs +76 -0
  116. package/esm2022/features/tiered-menu/directives/tiered-menu.directive.mjs +13 -1
  117. package/esm2022/features/token-list/token-list.component.mjs +64 -0
  118. package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2 -2
  119. package/esm2022/locales/en.json +409 -1
  120. package/esm2022/locales/es-CO.json +423 -2
  121. package/esm2022/locales/pt.json +1037 -630
  122. package/esm2022/providers/features.provider.mjs +20 -2
  123. package/esm2022/providers/primeng-config.provider.mjs +14 -128
  124. package/esm2022/providers/translate.provider.mjs +2 -2
  125. package/esm2022/public-api.mjs +31 -1
  126. package/features/alert/alert.component.d.ts +1 -0
  127. package/features/autocomplete/autocomplete.component.d.ts +9 -3
  128. package/features/button/button.component.d.ts +3 -1
  129. package/features/checkbox-list/checkbox-list.component.d.ts +8 -1
  130. package/features/code-editor/code-editor.component.d.ts +5 -1
  131. package/features/country-phone-picker/country-phone-picker.component.d.ts +3 -0
  132. package/features/datepicker/datepicker.component.d.ts +118 -0
  133. package/features/dynamic-form/dynamic-form-field.directive.d.ts +26 -0
  134. package/features/dynamic-form/dynamic-form.component.d.ts +15 -0
  135. package/features/dynamic-form/dynamic-form.registry.d.ts +11 -0
  136. package/features/editable-overlay/editable-overlay-editor.directive.d.ts +22 -0
  137. package/features/editable-overlay/editable-overlay.component.d.ts +60 -0
  138. package/features/editor/editor.component.d.ts +47 -0
  139. package/features/help-popover/help-popover.component.d.ts +81 -0
  140. package/features/info-sign/info-sign.component.d.ts +2 -1
  141. package/features/input-mask/input-mask.directive.d.ts +117 -0
  142. package/features/lookup/lookup.component.d.ts +104 -0
  143. package/features/modal/modal.component.d.ts +2 -1
  144. package/features/modalc/modalc.component.d.ts +2 -1
  145. package/features/navigation-button/navigation-button.component.d.ts +58 -0
  146. package/features/number-input/number-input.component.d.ts +3 -1
  147. package/features/object-card/components/object-card-field/object-card-field.component.d.ts +48 -0
  148. package/features/object-card/components/object-card-main/object-card-main.component.d.ts +57 -0
  149. package/features/object-card/object-card.component.d.ts +70 -0
  150. package/features/pin-code-field/pin-code-field.component.d.ts +6 -1
  151. package/features/popover/popover.component.d.ts +4 -1
  152. package/features/profile-picture-picker/profile-picture-picker.component.d.ts +5 -1
  153. package/features/rating-scale/rating-scale.component.d.ts +9 -1
  154. package/features/row-card-list/row-card/row-card.component.d.ts +6 -1
  155. package/features/row-card-list/row-card-list.component.d.ts +4 -1
  156. package/features/select-button/select-button.component.d.ts +9 -1
  157. package/features/star-rating/star-rating.component.d.ts +9 -1
  158. package/features/table/table.component.d.ts +2 -1
  159. package/features/thumbnail/thumbnail.component.d.ts +48 -0
  160. package/features/thumbnails/components/thumbnail-item/thumbnail-item.component.d.ts +29 -0
  161. package/features/thumbnails/components/thumbnail-item-image/thumbnail-item-image.component.d.ts +13 -0
  162. package/features/thumbnails/components/thumbnail-item-video/thumbnail-item-video.component.d.ts +19 -0
  163. package/features/thumbnails/thumbnails.component.d.ts +46 -0
  164. package/features/tiered-menu/directives/tiered-menu.directive.d.ts +2 -0
  165. package/features/token-list/token-list.component.d.ts +31 -0
  166. package/fesm2022/seniorsistemas-data-seniorx-core.mjs +11288 -6613
  167. package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
  168. package/package.json +12 -3
  169. package/providers/primeng-config.provider.d.ts +12 -0
  170. package/public-api.d.ts +38 -0
  171. package/src/locales/en.json +409 -1
  172. package/src/locales/es-CO.json +423 -2
  173. package/src/locales/pt.json +1037 -630
  174. package/styles/sdc-global-variables.scss +38 -0
  175. package/styles.css +132 -0
  176. package/styles.scss +2 -0
  177. package/esm2022/providers/custom/button.mjs +0 -93
  178. package/esm2022/providers/custom/toast.mjs +0 -75
  179. package/providers/custom/button.d.ts +0 -16
  180. package/providers/custom/toast.d.ts +0 -14
@@ -0,0 +1,217 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, Input, Output, ViewEncapsulation, forwardRef, inject } from '@angular/core';
3
+ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { TranslateModule, TranslateService } from '@ngx-translate/core';
5
+ import { EDITABLE_OVERLAY_CANCEL_KEY, EDITABLE_OVERLAY_EDIT_KEY, EDITABLE_OVERLAY_EMPTY_KEY, EDITABLE_OVERLAY_SAVE_KEY } from '../../core/constants/editable-overlay.const';
6
+ import { nextSequentialId } from '../../core/utils/id.util';
7
+ import { resolveTranslatableText } from '../../core/utils/i18n.util';
8
+ import { ButtonComponent } from '../button/button.component';
9
+ import { PopoverComponent } from '../popover/popover.component';
10
+ import { TextboxComponent } from '../textbox/textbox.component';
11
+ import { EditableOverlayEditorDirective } from './editable-overlay-editor.directive';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/common";
14
+ import * as i2 from "@ngx-translate/core";
15
+ export class EditableOverlayComponent {
16
+ cdr = inject(ChangeDetectorRef);
17
+ translate = inject(TranslateService);
18
+ label = false;
19
+ message = false;
20
+ invalid = false;
21
+ required = false;
22
+ disabled = false;
23
+ placeholder = '';
24
+ emptyText = false;
25
+ saveLabel = false;
26
+ cancelLabel = false;
27
+ maxlength;
28
+ displayFormatter;
29
+ saved = new EventEmitter();
30
+ canceled = new EventEmitter();
31
+ openChange = new EventEmitter();
32
+ valueChange = new EventEmitter();
33
+ editorTemplate;
34
+ labelId = nextSequentialId('sdc-editable-overlay-label');
35
+ messageId = nextSequentialId('sdc-editable-overlay-message');
36
+ triggerId = nextSequentialId('sdc-editable-overlay-trigger');
37
+ value = null;
38
+ draft = null;
39
+ open = false;
40
+ editorContext = {
41
+ $implicit: null,
42
+ value: null,
43
+ commit: (nextValue) => this.updateDraft(nextValue),
44
+ cancel: () => this.cancelEdit()
45
+ };
46
+ onChangeFn = () => { };
47
+ onTouchedFn = () => { };
48
+ get editAriaLabel() {
49
+ const labelText = this.labelKey() ? String(this.translate.instant(this.labelKey())) : '';
50
+ return String(this.translate.instant(EDITABLE_OVERLAY_EDIT_KEY, { label: labelText }));
51
+ }
52
+ get saveButtonLabel() {
53
+ return resolveTranslatableText(this.translate, this.saveLabel, EDITABLE_OVERLAY_SAVE_KEY);
54
+ }
55
+ get cancelButtonLabel() {
56
+ return resolveTranslatableText(this.translate, this.cancelLabel, EDITABLE_OVERLAY_CANCEL_KEY);
57
+ }
58
+ get emptyStateText() {
59
+ return resolveTranslatableText(this.translate, this.emptyText, EDITABLE_OVERLAY_EMPTY_KEY);
60
+ }
61
+ get isValueEmpty() {
62
+ return this.isEmpty(this.value);
63
+ }
64
+ get displayText() {
65
+ if (this.isEmpty(this.value)) {
66
+ return this.placeholder || '';
67
+ }
68
+ return this.formatValue(this.value);
69
+ }
70
+ get draftAsString() {
71
+ if (this.draft === null || this.draft === undefined) {
72
+ return '';
73
+ }
74
+ return typeof this.draft === 'string' ? this.draft : String(this.draft);
75
+ }
76
+ labelKey() {
77
+ return typeof this.label === 'string' ? this.label : '';
78
+ }
79
+ messageKey() {
80
+ return typeof this.message === 'string' ? this.message : '';
81
+ }
82
+ writeValue(value) {
83
+ this.value = value ?? null;
84
+ this.cdr.markForCheck();
85
+ }
86
+ registerOnChange(fn) {
87
+ this.onChangeFn = fn;
88
+ }
89
+ registerOnTouched(fn) {
90
+ this.onTouchedFn = fn;
91
+ }
92
+ setDisabledState(isDisabled) {
93
+ this.disabled = isDisabled;
94
+ if (isDisabled && this.open) {
95
+ this.open = false;
96
+ this.draft = null;
97
+ }
98
+ this.cdr.markForCheck();
99
+ }
100
+ startEdit() {
101
+ if (this.disabled || this.open) {
102
+ return;
103
+ }
104
+ this.updateDraft(this.value);
105
+ this.open = true;
106
+ this.openChange.emit(true);
107
+ this.cdr.markForCheck();
108
+ }
109
+ onTriggerKeydown(event) {
110
+ if (event.key !== 'Enter') {
111
+ return;
112
+ }
113
+ event.preventDefault();
114
+ this.startEdit();
115
+ }
116
+ saveEdit() {
117
+ if (!this.open) {
118
+ return;
119
+ }
120
+ const nextValue = this.draft;
121
+ this.value = nextValue;
122
+ this.closeOverlay();
123
+ this.onChangeFn(nextValue);
124
+ this.onTouchedFn();
125
+ this.valueChange.emit(nextValue);
126
+ this.saved.emit(nextValue);
127
+ this.cdr.markForCheck();
128
+ }
129
+ cancelEdit() {
130
+ if (!this.open) {
131
+ return;
132
+ }
133
+ this.closeOverlay();
134
+ this.onTouchedFn();
135
+ this.canceled.emit();
136
+ this.cdr.markForCheck();
137
+ }
138
+ /** Reacts to sdc-popover closing itself (outside click / Escape) - treated as a cancel. */
139
+ onPopoverOpenChange(nextOpen) {
140
+ if (nextOpen || !this.open) {
141
+ return;
142
+ }
143
+ this.cancelEdit();
144
+ }
145
+ updateDraft(value) {
146
+ this.draft = value;
147
+ this.editorContext.value = value;
148
+ this.editorContext.$implicit = value;
149
+ this.cdr.markForCheck();
150
+ }
151
+ closeOverlay() {
152
+ this.open = false;
153
+ this.draft = null;
154
+ this.openChange.emit(false);
155
+ }
156
+ isEmpty(value) {
157
+ return value === null || value === undefined || value === '';
158
+ }
159
+ formatValue(value) {
160
+ if (this.displayFormatter) {
161
+ return this.displayFormatter(value);
162
+ }
163
+ return String(value);
164
+ }
165
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditableOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
166
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: EditableOverlayComponent, isStandalone: true, selector: "sdc-editable-overlay", inputs: { label: "label", message: "message", invalid: "invalid", required: "required", disabled: "disabled", placeholder: "placeholder", emptyText: "emptyText", saveLabel: "saveLabel", cancelLabel: "cancelLabel", maxlength: "maxlength", displayFormatter: "displayFormatter" }, outputs: { saved: "saved", canceled: "canceled", openChange: "openChange", valueChange: "valueChange" }, providers: [
167
+ {
168
+ provide: NG_VALUE_ACCESSOR,
169
+ useExisting: forwardRef(() => EditableOverlayComponent),
170
+ multi: true
171
+ }
172
+ ], queries: [{ propertyName: "editorTemplate", first: true, predicate: EditableOverlayEditorDirective, descendants: true }], ngImport: i0, template: "<div\n class=\"sdc-editable-overlay\"\n [class.sdc-editable-overlay--disabled]=\"disabled\"\n [class.sdc-editable-overlay--invalid]=\"invalid\"\n>\n @if (labelKey()) {\n <div class=\"sdc-editable-overlay__label-row\">\n <label [id]=\"labelId\" [attr.for]=\"triggerId\" class=\"sdc-editable-overlay__label\">\n <span class=\"sdc-editable-overlay__label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">{{ 'platform.datacore.accessibility.required_field' | translate }}</span>\n }\n </span>\n </label>\n </div>\n }\n\n <sdc-popover\n class=\"sdc-editable-overlay__popover\"\n [open]=\"open\"\n [disabled]=\"disabled\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [trapFocus]=\"true\"\n [focusOnOpen]=\"true\"\n [restoreFocusOnClose]=\"true\"\n [ariaLabel]=\"editAriaLabel\"\n panelClass=\"sdc-editable-overlay__panel\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <button\n sdc-popover-trigger\n type=\"button\"\n [id]=\"triggerId\"\n class=\"sdc-editable-overlay__trigger\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"editAriaLabel\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-invalid]=\"invalid ? 'true' : null\"\n [attr.aria-describedby]=\"messageKey() ? messageId : null\"\n (click)=\"startEdit()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <span\n class=\"sdc-editable-overlay__value\"\n [class.sdc-editable-overlay__value--empty]=\"isValueEmpty\"\n >{{ displayText }}</span>\n\n @if (isValueEmpty) {\n <span class=\"sr-only\">{{ emptyStateText }}</span>\n }\n\n @if (!disabled) {\n <i class=\"fas fa-pencil-alt sdc-editable-overlay__icon\" aria-hidden=\"true\"></i>\n }\n </button>\n\n <div sdc-popover-content class=\"sdc-editable-overlay__editor-panel\">\n <div class=\"sdc-editable-overlay__editor\">\n @if (editorTemplate) {\n <ng-container\n *ngTemplateOutlet=\"editorTemplate.template; context: editorContext\"\n ></ng-container>\n } @else {\n <sdc-textbox\n [value]=\"draftAsString\"\n [placeholder]=\"placeholder\"\n [maxlength]=\"maxlength\"\n [required]=\"required\"\n (valueChange)=\"updateDraft($event)\"\n ></sdc-textbox>\n }\n </div>\n\n <div class=\"sdc-editable-overlay__footer\">\n <sdc-button\n type=\"button\"\n priority=\"secondary\"\n size=\"small\"\n [auxiliary]=\"true\"\n [label]=\"cancelButtonLabel\"\n (clicked)=\"cancelEdit()\"\n ></sdc-button>\n <sdc-button\n type=\"button\"\n priority=\"primary\"\n size=\"small\"\n [label]=\"saveButtonLabel\"\n (clicked)=\"saveEdit()\"\n ></sdc-button>\n </div>\n </div>\n </sdc-popover>\n\n @if (messageKey()) {\n <small\n [id]=\"messageId\"\n class=\"sdc-editable-overlay__message\"\n [class.invalid]=\"invalid\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n", styles: [":host{display:inline-block;max-width:100%}.sdc-editable-overlay{--sdc-editable-overlay-hover-bg: rgba(0, 0, 0, .04);--sdc-editable-overlay-focus-outline: var(--sdc-focus-outline, 2px solid #428bca);--sdc-editable-overlay-radius: 4px;--sdc-editable-overlay-color: var(--sdc-form-label-color, #212533);--sdc-editable-overlay-icon-color: var(--sdc-text-subtle, #667085);--sdc-editable-overlay-invalid-color: var(--sdc-form-required-color, #d32f2f);--sdc-editable-overlay-empty-color: var(--sdc-text-subtle, #667085);--sdc-editable-overlay-panel-gap: 8px;display:inline-flex;flex-direction:column;font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);max-width:100%}.sdc-editable-overlay--disabled{cursor:not-allowed;opacity:.65}.sdc-editable-overlay__label-row{display:flex;align-items:center;margin-bottom:var(--sdc-form-label-row-mb, 4px)}.sdc-editable-overlay__label{display:inline-flex;align-items:center;font-size:var(--sdc-form-label-font-size, .875rem);font-weight:var(--sdc-form-label-font-weight, 600);color:var(--sdc-form-label-color, #212533);line-height:var(--sdc-form-label-lh, 1.25)}.sdc-editable-overlay__popover{display:inline-block;max-width:100%}.sdc-editable-overlay__trigger{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--sdc-editable-overlay-radius);box-sizing:border-box;color:var(--sdc-editable-overlay-color);cursor:pointer;display:inline-flex;font-family:inherit;font-size:.875rem;gap:.375rem;max-width:100%;padding:.25rem .5rem;transition:background var(--sdc-transition-fast, .18s ease)}.sdc-editable-overlay__value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-editable-overlay__value--empty{color:var(--sdc-editable-overlay-empty-color)}.sdc-editable-overlay__icon{color:var(--sdc-editable-overlay-icon-color);flex:none;font-size:.8125rem;opacity:0;transition:opacity var(--sdc-transition-fast, .18s ease)}.sdc-editable-overlay__trigger:focus-visible{outline:var(--sdc-editable-overlay-focus-outline);outline-offset:2px}.sdc-editable-overlay__trigger:disabled{cursor:not-allowed;pointer-events:none}.sdc-editable-overlay--invalid .sdc-editable-overlay__trigger{color:var(--sdc-editable-overlay-invalid-color)}.sdc-editable-overlay__trigger:hover:not(:disabled){background:var(--sdc-editable-overlay-hover-bg)}.sdc-editable-overlay__trigger:focus-visible .sdc-editable-overlay__icon{opacity:1}.sdc-editable-overlay__trigger:hover:not(:disabled) .sdc-editable-overlay__icon{opacity:1}.sdc-editable-overlay__editor-panel{display:flex;flex-direction:column;gap:var(--sdc-editable-overlay-panel-gap, 8px);min-width:16rem;padding:.75rem}.sdc-editable-overlay__editor{display:block}.sdc-editable-overlay__footer{display:flex;gap:8px;justify-content:flex-end}.sdc-editable-overlay__message{display:block;margin-top:var(--sdc-form-label-row-mb, 4px);font-size:.8125rem;color:var(--sdc-text-subtle, #667085)}.sdc-editable-overlay__message.invalid{color:var(--sdc-editable-overlay-invalid-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["id", "label", "ariaLabel", "disabled", "loading", "width", "priority", "size", "type", "icon", "rightIcon", "auxiliary", "caret", "tooltip", "animation", "slide", "styleClass", "badge", "menuOptions", "menuContext", "model"], outputs: ["clicked"] }, { kind: "component", type: PopoverComponent, selector: "sdc-popover", inputs: ["open", "disabled", "toggleOnTriggerClick", "closeOnOutsideClick", "closeOnScroll", "closeOnEscape", "trapFocus", "focusOnOpen", "restoreFocusOnClose", "ariaLabel", "appendTo", "zIndex", "offset", "placement", "role", "matchTriggerWidth", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "panelClass"], outputs: ["openChange"] }, { kind: "component", type: TextboxComponent, selector: "sdc-textbox", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
173
+ }
174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditableOverlayComponent, decorators: [{
175
+ type: Component,
176
+ args: [{ selector: 'sdc-editable-overlay', standalone: true, imports: [CommonModule, FormsModule, TranslateModule, ButtonComponent, PopoverComponent, TextboxComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, providers: [
177
+ {
178
+ provide: NG_VALUE_ACCESSOR,
179
+ useExisting: forwardRef(() => EditableOverlayComponent),
180
+ multi: true
181
+ }
182
+ ], template: "<div\n class=\"sdc-editable-overlay\"\n [class.sdc-editable-overlay--disabled]=\"disabled\"\n [class.sdc-editable-overlay--invalid]=\"invalid\"\n>\n @if (labelKey()) {\n <div class=\"sdc-editable-overlay__label-row\">\n <label [id]=\"labelId\" [attr.for]=\"triggerId\" class=\"sdc-editable-overlay__label\">\n <span class=\"sdc-editable-overlay__label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n <span class=\"sr-only\">{{ 'platform.datacore.accessibility.required_field' | translate }}</span>\n }\n </span>\n </label>\n </div>\n }\n\n <sdc-popover\n class=\"sdc-editable-overlay__popover\"\n [open]=\"open\"\n [disabled]=\"disabled\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [trapFocus]=\"true\"\n [focusOnOpen]=\"true\"\n [restoreFocusOnClose]=\"true\"\n [ariaLabel]=\"editAriaLabel\"\n panelClass=\"sdc-editable-overlay__panel\"\n (openChange)=\"onPopoverOpenChange($event)\"\n >\n <button\n sdc-popover-trigger\n type=\"button\"\n [id]=\"triggerId\"\n class=\"sdc-editable-overlay__trigger\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"editAriaLabel\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-invalid]=\"invalid ? 'true' : null\"\n [attr.aria-describedby]=\"messageKey() ? messageId : null\"\n (click)=\"startEdit()\"\n (keydown)=\"onTriggerKeydown($event)\"\n >\n <span\n class=\"sdc-editable-overlay__value\"\n [class.sdc-editable-overlay__value--empty]=\"isValueEmpty\"\n >{{ displayText }}</span>\n\n @if (isValueEmpty) {\n <span class=\"sr-only\">{{ emptyStateText }}</span>\n }\n\n @if (!disabled) {\n <i class=\"fas fa-pencil-alt sdc-editable-overlay__icon\" aria-hidden=\"true\"></i>\n }\n </button>\n\n <div sdc-popover-content class=\"sdc-editable-overlay__editor-panel\">\n <div class=\"sdc-editable-overlay__editor\">\n @if (editorTemplate) {\n <ng-container\n *ngTemplateOutlet=\"editorTemplate.template; context: editorContext\"\n ></ng-container>\n } @else {\n <sdc-textbox\n [value]=\"draftAsString\"\n [placeholder]=\"placeholder\"\n [maxlength]=\"maxlength\"\n [required]=\"required\"\n (valueChange)=\"updateDraft($event)\"\n ></sdc-textbox>\n }\n </div>\n\n <div class=\"sdc-editable-overlay__footer\">\n <sdc-button\n type=\"button\"\n priority=\"secondary\"\n size=\"small\"\n [auxiliary]=\"true\"\n [label]=\"cancelButtonLabel\"\n (clicked)=\"cancelEdit()\"\n ></sdc-button>\n <sdc-button\n type=\"button\"\n priority=\"primary\"\n size=\"small\"\n [label]=\"saveButtonLabel\"\n (clicked)=\"saveEdit()\"\n ></sdc-button>\n </div>\n </div>\n </sdc-popover>\n\n @if (messageKey()) {\n <small\n [id]=\"messageId\"\n class=\"sdc-editable-overlay__message\"\n [class.invalid]=\"invalid\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n", styles: [":host{display:inline-block;max-width:100%}.sdc-editable-overlay{--sdc-editable-overlay-hover-bg: rgba(0, 0, 0, .04);--sdc-editable-overlay-focus-outline: var(--sdc-focus-outline, 2px solid #428bca);--sdc-editable-overlay-radius: 4px;--sdc-editable-overlay-color: var(--sdc-form-label-color, #212533);--sdc-editable-overlay-icon-color: var(--sdc-text-subtle, #667085);--sdc-editable-overlay-invalid-color: var(--sdc-form-required-color, #d32f2f);--sdc-editable-overlay-empty-color: var(--sdc-text-subtle, #667085);--sdc-editable-overlay-panel-gap: 8px;display:inline-flex;flex-direction:column;font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);max-width:100%}.sdc-editable-overlay--disabled{cursor:not-allowed;opacity:.65}.sdc-editable-overlay__label-row{display:flex;align-items:center;margin-bottom:var(--sdc-form-label-row-mb, 4px)}.sdc-editable-overlay__label{display:inline-flex;align-items:center;font-size:var(--sdc-form-label-font-size, .875rem);font-weight:var(--sdc-form-label-font-weight, 600);color:var(--sdc-form-label-color, #212533);line-height:var(--sdc-form-label-lh, 1.25)}.sdc-editable-overlay__popover{display:inline-block;max-width:100%}.sdc-editable-overlay__trigger{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--sdc-editable-overlay-radius);box-sizing:border-box;color:var(--sdc-editable-overlay-color);cursor:pointer;display:inline-flex;font-family:inherit;font-size:.875rem;gap:.375rem;max-width:100%;padding:.25rem .5rem;transition:background var(--sdc-transition-fast, .18s ease)}.sdc-editable-overlay__value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-editable-overlay__value--empty{color:var(--sdc-editable-overlay-empty-color)}.sdc-editable-overlay__icon{color:var(--sdc-editable-overlay-icon-color);flex:none;font-size:.8125rem;opacity:0;transition:opacity var(--sdc-transition-fast, .18s ease)}.sdc-editable-overlay__trigger:focus-visible{outline:var(--sdc-editable-overlay-focus-outline);outline-offset:2px}.sdc-editable-overlay__trigger:disabled{cursor:not-allowed;pointer-events:none}.sdc-editable-overlay--invalid .sdc-editable-overlay__trigger{color:var(--sdc-editable-overlay-invalid-color)}.sdc-editable-overlay__trigger:hover:not(:disabled){background:var(--sdc-editable-overlay-hover-bg)}.sdc-editable-overlay__trigger:focus-visible .sdc-editable-overlay__icon{opacity:1}.sdc-editable-overlay__trigger:hover:not(:disabled) .sdc-editable-overlay__icon{opacity:1}.sdc-editable-overlay__editor-panel{display:flex;flex-direction:column;gap:var(--sdc-editable-overlay-panel-gap, 8px);min-width:16rem;padding:.75rem}.sdc-editable-overlay__editor{display:block}.sdc-editable-overlay__footer{display:flex;gap:8px;justify-content:flex-end}.sdc-editable-overlay__message{display:block;margin-top:var(--sdc-form-label-row-mb, 4px);font-size:.8125rem;color:var(--sdc-text-subtle, #667085)}.sdc-editable-overlay__message.invalid{color:var(--sdc-editable-overlay-invalid-color)}\n"] }]
183
+ }], propDecorators: { label: [{
184
+ type: Input
185
+ }], message: [{
186
+ type: Input
187
+ }], invalid: [{
188
+ type: Input
189
+ }], required: [{
190
+ type: Input
191
+ }], disabled: [{
192
+ type: Input
193
+ }], placeholder: [{
194
+ type: Input
195
+ }], emptyText: [{
196
+ type: Input
197
+ }], saveLabel: [{
198
+ type: Input
199
+ }], cancelLabel: [{
200
+ type: Input
201
+ }], maxlength: [{
202
+ type: Input
203
+ }], displayFormatter: [{
204
+ type: Input
205
+ }], saved: [{
206
+ type: Output
207
+ }], canceled: [{
208
+ type: Output
209
+ }], openChange: [{
210
+ type: Output
211
+ }], valueChange: [{
212
+ type: Output
213
+ }], editorTemplate: [{
214
+ type: ContentChild,
215
+ args: [EditableOverlayEditorDirective]
216
+ }] } });
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGFibGUtb3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2VkaXRhYmxlLW92ZXJsYXkvZWRpdGFibGUtb3ZlcmxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2VkaXRhYmxlLW92ZXJsYXkvZWRpdGFibGUtb3ZlcmxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQzFCLE1BQU0sNkNBQTZDLENBQUM7QUFHckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFN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QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVJLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxjQUFjO3NCQUR2QixZQUFZO3VCQUFDLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmltcG9ydCB7XG4gIEVESVRBQkxFX09WRVJMQVlfQ0FOQ0VMX0tFWSxcbiAgRURJVEFCTEVfT1ZFUkxBWV9FRElUX0tFWSxcbiAgRURJVEFCTEVfT1ZFUkxBWV9FTVBUWV9LRVksXG4gIEVESVRBQkxFX09WRVJMQVlfU0FWRV9LRVlcbn0gZnJvbSAnLi4vLi4vY29yZS9jb25zdGFudHMvZWRpdGFibGUtb3ZlcmxheS5jb25zdCc7XG5pbXBvcnQgdHlwZSB7IEVkaXRhYmxlT3ZlcmxheUVkaXRvckNvbnRleHQgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL2VkaXRhYmxlLW92ZXJsYXkudHlwZSc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NlbWFudGljcy50eXBlJztcbmltcG9ydCB7IG5leHRTZXF1ZW50aWFsSWQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2lkLnV0aWwnO1xuaW1wb3J0IHsgcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2kxOG4udXRpbCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Ym94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0YWJsZU92ZXJsYXlFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuL2VkaXRhYmxlLW92ZXJsYXktZWRpdG9yLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NkYy1lZGl0YWJsZS1vdmVybGF5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgQnV0dG9uQ29tcG9uZW50LCBQb3BvdmVyQ29tcG9uZW50LCBUZXh0Ym94Q29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXRhYmxlLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZWRpdGFibGUtb3ZlcmxheS5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFZGl0YWJsZU92ZXJsYXlDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRWRpdGFibGVPdmVybGF5Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIEBJbnB1dCgpIGxhYmVsOiBTdHJpbmdCb29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmluZ0Jvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSBlbXB0eVRleHQ6IFN0cmluZ0Jvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2F2ZUxhYmVsOiBTdHJpbmdCb29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNhbmNlbExhYmVsOiBTdHJpbmdCb29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heGxlbmd0aD86IG51bWJlcjtcbiAgQElucHV0KCkgZGlzcGxheUZvcm1hdHRlcj86ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBzYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dW5rbm93bj4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoRWRpdGFibGVPdmVybGF5RWRpdG9yRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgZWRpdG9yVGVtcGxhdGU/OiBFZGl0YWJsZU92ZXJsYXlFZGl0b3JEaXJlY3RpdmU7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxhYmVsSWQgPSBuZXh0U2VxdWVudGlhbElkKCdzZGMtZWRpdGFibGUtb3ZlcmxheS1sYWJlbCcpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWVzc2FnZUlkID0gbmV4dFNlcXVlbnRpYWxJZCgnc2RjLWVkaXRhYmxlLW92ZXJsYXktbWVzc2FnZScpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJpZ2dlcklkID0gbmV4dFNlcXVlbnRpYWxJZCgnc2RjLWVkaXRhYmxlLW92ZXJsYXktdHJpZ2dlcicpO1xuXG4gIHByb3RlY3RlZCB2YWx1ZTogdW5rbm93biA9IG51bGw7XG4gIHByb3RlY3RlZCBkcmFmdDogdW5rbm93biA9IG51bGw7XG4gIHByb3RlY3RlZCBvcGVuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVkaXRvckNvbnRleHQ6IEVkaXRhYmxlT3ZlcmxheUVkaXRvckNvbnRleHQgPSB7XG4gICAgJGltcGxpY2l0OiBudWxsLFxuICAgIHZhbHVlOiBudWxsLFxuICAgIGNvbW1pdDogKG5leHRWYWx1ZTogdW5rbm93bikgPT4gdGhpcy51cGRhdGVEcmFmdChuZXh0VmFsdWUpLFxuICAgIGNhbmNlbDogKCkgPT4gdGhpcy5jYW5jZWxFZGl0KClcbiAgfTtcblxuICBwcml2YXRlIG9uQ2hhbmdlRm46ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hlZEZuOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgcHJvdGVjdGVkIGdldCBlZGl0QXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFiZWxUZXh0ID0gdGhpcy5sYWJlbEtleSgpID8gU3RyaW5nKHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5sYWJlbEtleSgpKSkgOiAnJztcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoRURJVEFCTEVfT1ZFUkxBWV9FRElUX0tFWSwgeyBsYWJlbDogbGFiZWxUZXh0IH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgc2F2ZUJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLnNhdmVMYWJlbCwgRURJVEFCTEVfT1ZFUkxBWV9TQVZFX0tFWSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGNhbmNlbEJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLmNhbmNlbExhYmVsLCBFRElUQUJMRV9PVkVSTEFZX0NBTkNFTF9LRVkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBlbXB0eVN0YXRlVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5lbXB0eVRleHQsIEVESVRBQkxFX09WRVJMQVlfRU1QVFlfS0VZKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW1wdHkodGhpcy52YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGRpc3BsYXlUZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSh0aGlzLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXIgfHwgJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGRyYWZ0QXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kcmFmdCA9PT0gbnVsbCB8fCB0aGlzLmRyYWZ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuZHJhZnQgPT09ICdzdHJpbmcnID8gdGhpcy5kcmFmdCA6IFN0cmluZyh0aGlzLmRyYWZ0KTtcbiAgfVxuXG4gIGxhYmVsS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLmxhYmVsID09PSAnc3RyaW5nJyA/IHRoaXMubGFiZWwgOiAnJztcbiAgfVxuXG4gIG1lc3NhZ2VLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMubWVzc2FnZSA9PT0gJ3N0cmluZycgPyB0aGlzLm1lc3NhZ2UgOiAnJztcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgPz8gbnVsbDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZEZuID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcblxuICAgIGlmIChpc0Rpc2FibGVkICYmIHRoaXMub3Blbikge1xuICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmRyYWZ0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydEVkaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5vcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVEcmFmdCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uVHJpZ2dlcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnN0YXJ0RWRpdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNhdmVFZGl0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFZhbHVlID0gdGhpcy5kcmFmdDtcblxuICAgIHRoaXMudmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgdGhpcy5jbG9zZU92ZXJsYXkoKTtcbiAgICB0aGlzLm9uQ2hhbmdlRm4obmV4dFZhbHVlKTtcbiAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5leHRWYWx1ZSk7XG4gICAgdGhpcy5zYXZlZC5lbWl0KG5leHRWYWx1ZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuY2VsRWRpdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VPdmVybGF5KCk7XG4gICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgIHRoaXMuY2FuY2VsZWQuZW1pdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIFJlYWN0cyB0byBzZGMtcG9wb3ZlciBjbG9zaW5nIGl0c2VsZiAob3V0c2lkZSBjbGljayAvIEVzY2FwZSkgLSB0cmVhdGVkIGFzIGEgY2FuY2VsLiAqL1xuICBwcm90ZWN0ZWQgb25Qb3BvdmVyT3BlbkNoYW5nZShuZXh0T3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChuZXh0T3BlbiB8fCAhdGhpcy5vcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRHJhZnQodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmRyYWZ0ID0gdmFsdWU7XG4gICAgdGhpcy5lZGl0b3JDb250ZXh0LnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5lZGl0b3JDb250ZXh0LiRpbXBsaWNpdCA9IHZhbHVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy5kcmFmdCA9IG51bGw7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZGlzcGxheUZvcm1hdHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheUZvcm1hdHRlcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJzZGMtZWRpdGFibGUtb3ZlcmxheVwiXG4gIFtjbGFzcy5zZGMtZWRpdGFibGUtb3ZlcmxheS0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbY2xhc3Muc2RjLWVkaXRhYmxlLW92ZXJsYXktLWludmFsaWRdPVwiaW52YWxpZFwiXG4+XG4gIEBpZiAobGFiZWxLZXkoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJzZGMtZWRpdGFibGUtb3ZlcmxheV9fbGFiZWwtcm93XCI+XG4gICAgICA8bGFiZWwgW2lkXT1cImxhYmVsSWRcIiBbYXR0ci5mb3JdPVwidHJpZ2dlcklkXCIgY2xhc3M9XCJzZGMtZWRpdGFibGUtb3ZlcmxheV9fbGFiZWxcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtZWRpdGFibGUtb3ZlcmxheV9fbGFiZWwtdGV4dFwiPlxuICAgICAgICAgIHt7IGxhYmVsS2V5KCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkLWZpZWxkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7ICdwbGF0Zm9ybS5kYXRhY29yZS5hY2Nlc3NpYmlsaXR5LnJlcXVpcmVkX2ZpZWxkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8c2RjLXBvcG92ZXJcbiAgICBjbGFzcz1cInNkYy1lZGl0YWJsZS1vdmVybGF5X19wb3BvdmVyXCJcbiAgICBbb3Blbl09XCJvcGVuXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFt0b2dnbGVPblRyaWdnZXJDbGlja109XCJmYWxzZVwiXG4gICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgW2Nsb3NlT25Fc2NhcGVdPVwidHJ1ZVwiXG4gICAgW3RyYXBGb2N1c109XCJ0cnVlXCJcbiAgICBbZm9jdXNPbk9wZW5dPVwidHJ1ZVwiXG4gICAgW3Jlc3RvcmVGb2N1c09uQ2xvc2VdPVwidHJ1ZVwiXG4gICAgW2FyaWFMYWJlbF09XCJlZGl0QXJpYUxhYmVsXCJcbiAgICBwYW5lbENsYXNzPVwic2RjLWVkaXRhYmxlLW92ZXJsYXlfX3BhbmVsXCJcbiAgICAob3BlbkNoYW5nZSk9XCJvblBvcG92ZXJPcGVuQ2hhbmdlKCRldmVudClcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgc2RjLXBvcG92ZXItdHJpZ2dlclxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbaWRdPVwidHJpZ2dlcklkXCJcbiAgICAgIGNsYXNzPVwic2RjLWVkaXRhYmxlLW92ZXJsYXlfX3RyaWdnZXJcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZWRpdEFyaWFMYWJlbFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5cIlxuICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImludmFsaWQgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwibWVzc2FnZUtleSgpID8gbWVzc2FnZUlkIDogbnVsbFwiXG4gICAgICAoY2xpY2spPVwic3RhcnRFZGl0KClcIlxuICAgICAgKGtleWRvd24pPVwib25UcmlnZ2VyS2V5ZG93bigkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cInNkYy1lZGl0YWJsZS1vdmVybGF5X192YWx1ZVwiXG4gICAgICAgIFtjbGFzcy5zZGMtZWRpdGFibGUtb3ZlcmxheV9fdmFsdWUtLWVtcHR5XT1cImlzVmFsdWVFbXB0eVwiXG4gICAgICA+e3sgZGlzcGxheVRleHQgfX08L3NwYW4+XG5cbiAgICAgIEBpZiAoaXNWYWx1ZUVtcHR5KSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7IGVtcHR5U3RhdGVUZXh0IH19PC9zcGFuPlxuICAgICAgfVxuXG4gICAgICBAaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wZW5jaWwtYWx0IHNkYy1lZGl0YWJsZS1vdmVybGF5X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgfVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpdiBzZGMtcG9wb3Zlci1jb250ZW50IGNsYXNzPVwic2RjLWVkaXRhYmxlLW92ZXJsYXlfX2VkaXRvci1wYW5lbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNkYy1lZGl0YWJsZS1vdmVybGF5X19lZGl0b3JcIj5cbiAgICAgICAgQGlmIChlZGl0b3JUZW1wbGF0ZSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZWRpdG9yVGVtcGxhdGUudGVtcGxhdGU7IGNvbnRleHQ6IGVkaXRvckNvbnRleHRcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPHNkYy10ZXh0Ym94XG4gICAgICAgICAgICBbdmFsdWVdPVwiZHJhZnRBc1N0cmluZ1wiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW21heGxlbmd0aF09XCJtYXhsZW5ndGhcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ1cGRhdGVEcmFmdCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtZWRpdGFibGUtb3ZlcmxheV9fZm9vdGVyXCI+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcHJpb3JpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgW2F1eGlsaWFyeV09XCJ0cnVlXCJcbiAgICAgICAgICBbbGFiZWxdPVwiY2FuY2VsQnV0dG9uTGFiZWxcIlxuICAgICAgICAgIChjbGlja2VkKT1cImNhbmNlbEVkaXQoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgcHJpb3JpdHk9XCJwcmltYXJ5XCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIFtsYWJlbF09XCJzYXZlQnV0dG9uTGFiZWxcIlxuICAgICAgICAgIChjbGlja2VkKT1cInNhdmVFZGl0KClcIlxuICAgICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvc2RjLXBvcG92ZXI+XG5cbiAgQGlmIChtZXNzYWdlS2V5KCkpIHtcbiAgICA8c21hbGxcbiAgICAgIFtpZF09XCJtZXNzYWdlSWRcIlxuICAgICAgY2xhc3M9XCJzZGMtZWRpdGFibGUtb3ZlcmxheV9fbWVzc2FnZVwiXG4gICAgICBbY2xhc3MuaW52YWxpZF09XCJpbnZhbGlkXCJcbiAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgID5cbiAgICAgIHt7IG1lc3NhZ2VLZXkoKSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc21hbGw+XG4gIH1cbjwvZGl2PlxuIl19
@@ -0,0 +1,173 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, forwardRef } from '@angular/core';
3
+ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { TranslateModule } from '@ngx-translate/core';
5
+ import { Editor } from '@tiptap/core';
6
+ import StarterKit from '@tiptap/starter-kit';
7
+ import Underline from '@tiptap/extension-underline';
8
+ import TextAlign from '@tiptap/extension-text-align';
9
+ import { TextStyle } from '@tiptap/extension-text-style';
10
+ import Color from '@tiptap/extension-color';
11
+ import Highlight from '@tiptap/extension-highlight';
12
+ import Subscript from '@tiptap/extension-subscript';
13
+ import Superscript from '@tiptap/extension-superscript';
14
+ import Placeholder from '@tiptap/extension-placeholder';
15
+ import Image from '@tiptap/extension-image';
16
+ import { InputsComponent } from '../../core/directives/inputs.directive';
17
+ import { nextSequentialId } from '../../core/utils/id.util';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "@ngx-translate/core";
20
+ /** Default toolbar buttons available in the editor. */
21
+ export const EDITOR_DEFAULT_TOOLBAR_BUTTONS = [
22
+ 'bold', 'italic', 'underline', 'strike',
23
+ 'bulletList', 'orderedList',
24
+ 'alignLeft', 'alignCenter', 'alignRight',
25
+ 'blockquote', 'code',
26
+ 'undo', 'redo'
27
+ ];
28
+ export class EditorComponent extends InputsComponent {
29
+ readonly = false;
30
+ minHeight = '150px';
31
+ maxHeight = '400px';
32
+ showToolbar = true;
33
+ toolbarButtons = EDITOR_DEFAULT_TOOLBAR_BUTTONS;
34
+ infoTooltip = null;
35
+ textChange = new EventEmitter();
36
+ selectionChange = new EventEmitter();
37
+ editorHost;
38
+ editorHostId = nextSequentialId('sdc-editor-content');
39
+ editor = null;
40
+ ngAfterViewInit() {
41
+ this.editor = new Editor({
42
+ element: this.editorHost.nativeElement,
43
+ extensions: this.buildExtensions(),
44
+ content: this.value ?? '',
45
+ editable: !this.disabled && !this.readonly,
46
+ onUpdate: ({ editor }) => {
47
+ const html = editor.getHTML();
48
+ const text = editor.getText();
49
+ this.commitValue(html);
50
+ this.textChange.emit({ htmlValue: html, textValue: text });
51
+ },
52
+ onSelectionUpdate: () => {
53
+ this.selectionChange.emit();
54
+ }
55
+ });
56
+ }
57
+ ngOnDestroy() {
58
+ this.editor?.destroy();
59
+ this.editor = null;
60
+ }
61
+ writeValue(value) {
62
+ super.writeValue(value);
63
+ if (this.editor && value !== this.editor.getHTML()) {
64
+ this.editor.commands.setContent(value || '', { emitUpdate: false });
65
+ }
66
+ }
67
+ setDisabledState(isDisabled) {
68
+ super.setDisabledState?.(isDisabled);
69
+ this.editor?.setEditable(!isDisabled && !this.readonly);
70
+ }
71
+ /** Check if a mark or node is active in the current selection. */
72
+ isActive(name, attrs) {
73
+ if (typeof name === 'string') {
74
+ return this.editor?.isActive(name, attrs) ?? false;
75
+ }
76
+ return this.editor?.isActive(name) ?? false;
77
+ }
78
+ /** Check if a toolbar button should be shown based on `toolbarButtons` config. */
79
+ isButtonVisible(name) {
80
+ return this.toolbarButtons.includes(name);
81
+ }
82
+ // ─── Toolbar Actions ───────────────────────────────────────────────
83
+ toggleBold() {
84
+ this.editor?.chain().focus().toggleBold().run();
85
+ }
86
+ toggleItalic() {
87
+ this.editor?.chain().focus().toggleItalic().run();
88
+ }
89
+ toggleUnderline() {
90
+ this.editor?.chain().focus().toggleUnderline().run();
91
+ }
92
+ toggleStrike() {
93
+ this.editor?.chain().focus().toggleStrike().run();
94
+ }
95
+ toggleBulletList() {
96
+ this.editor?.chain().focus().toggleBulletList().run();
97
+ }
98
+ toggleOrderedList() {
99
+ this.editor?.chain().focus().toggleOrderedList().run();
100
+ }
101
+ setTextAlign(alignment) {
102
+ this.editor?.chain().focus().setTextAlign(alignment).run();
103
+ }
104
+ toggleBlockquote() {
105
+ this.editor?.chain().focus().toggleBlockquote().run();
106
+ }
107
+ toggleCode() {
108
+ this.editor?.chain().focus().toggleCodeBlock().run();
109
+ }
110
+ undo() {
111
+ this.editor?.chain().focus().undo().run();
112
+ }
113
+ redo() {
114
+ this.editor?.chain().focus().redo().run();
115
+ }
116
+ // ─── Private ───────────────────────────────────────────────────────
117
+ buildExtensions() {
118
+ return [
119
+ StarterKit,
120
+ Underline,
121
+ TextStyle,
122
+ Color,
123
+ Highlight.configure({ multicolor: true }),
124
+ Subscript,
125
+ Superscript,
126
+ Image,
127
+ TextAlign.configure({
128
+ types: ['heading', 'paragraph']
129
+ }),
130
+ Placeholder.configure({
131
+ placeholder: this.placeholder || ''
132
+ })
133
+ ];
134
+ }
135
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
136
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: EditorComponent, isStandalone: true, selector: "sdc-editor", inputs: { readonly: "readonly", minHeight: "minHeight", maxHeight: "maxHeight", showToolbar: "showToolbar", toolbarButtons: "toolbarButtons", infoTooltip: "infoTooltip" }, outputs: { textChange: "textChange", selectionChange: "selectionChange" }, providers: [
137
+ {
138
+ provide: NG_VALUE_ACCESSOR,
139
+ useExisting: forwardRef(() => EditorComponent),
140
+ multi: true
141
+ }
142
+ ], viewQueries: [{ propertyName: "editorHost", first: true, predicate: ["editorHost"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"sdc-editor\"\n [class.sdc-editor--disabled]=\"disabled\"\n [class.sdc-editor--invalid]=\"invalid\"\n [class.sdc-editor--readonly]=\"readonly\"\n>\n @if (labelKey()) {\n <label class=\"sdc-editor__label\" [attr.for]=\"editorHostId\">\n {{ labelKey() | translate }}\n @if (required) { <span class=\"sdc-editor__required\" aria-hidden=\"true\">*</span> }\n </label>\n }\n\n @if (showToolbar && !readonly && !disabled) {\n <fieldset class=\"sdc-editor__toolbar\">\n <legend class=\"sr-only\">{{ 'editor.toolbarLabel' | translate }}</legend>\n @if (isButtonVisible('bold')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('bold')\"\n (click)=\"toggleBold()\"\n [title]=\"'editor.bold' | translate\"\n [attr.aria-label]=\"'editor.bold' | translate\"\n >\n <i class=\"fas fa-bold\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (isButtonVisible('italic')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('italic')\"\n (click)=\"toggleItalic()\"\n [title]=\"'editor.italic' | translate\"\n [attr.aria-label]=\"'editor.italic' | translate\"\n >\n <i class=\"fas fa-italic\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (isButtonVisible('underline')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('underline')\"\n (click)=\"toggleUnderline()\"\n [title]=\"'editor.underline' | translate\"\n [attr.aria-label]=\"'editor.underline' | translate\"\n >\n <i class=\"fas fa-underline\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (isButtonVisible('strike')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('strike')\"\n (click)=\"toggleStrike()\"\n [title]=\"'editor.strike' | translate\"\n [attr.aria-label]=\"'editor.strike' | translate\"\n >\n <i class=\"fas fa-strikethrough\" aria-hidden=\"true\"></i>\n </button>\n }\n\n <span class=\"sdc-editor__toolbar-separator\"></span>\n\n @if (isButtonVisible('bulletList')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('bulletList')\"\n (click)=\"toggleBulletList()\"\n [title]=\"'editor.bulletList' | translate\"\n [attr.aria-label]=\"'editor.bulletList' | translate\"\n >\n <i class=\"fas fa-list-ul\"></i>\n </button>\n }\n @if (isButtonVisible('orderedList')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('orderedList')\"\n (click)=\"toggleOrderedList()\"\n [title]=\"'editor.orderedList' | translate\"\n [attr.aria-label]=\"'editor.orderedList' | translate\"\n >\n <i class=\"fas fa-list-ol\"></i>\n </button>\n }\n\n <span class=\"sdc-editor__toolbar-separator\"></span>\n\n @if (isButtonVisible('alignLeft')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive({ textAlign: 'left' })\"\n (click)=\"setTextAlign('left')\"\n [title]=\"'editor.alignLeft' | translate\"\n [attr.aria-label]=\"'editor.alignLeft' | translate\"\n >\n <i class=\"fas fa-align-left\"></i>\n </button>\n }\n @if (isButtonVisible('alignCenter')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive({ textAlign: 'center' })\"\n (click)=\"setTextAlign('center')\"\n [title]=\"'editor.alignCenter' | translate\"\n [attr.aria-label]=\"'editor.alignCenter' | translate\"\n >\n <i class=\"fas fa-align-center\"></i>\n </button>\n }\n @if (isButtonVisible('alignRight')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive({ textAlign: 'right' })\"\n (click)=\"setTextAlign('right')\"\n [title]=\"'editor.alignRight' | translate\"\n [attr.aria-label]=\"'editor.alignRight' | translate\"\n >\n <i class=\"fas fa-align-right\"></i>\n </button>\n }\n\n <span class=\"sdc-editor__toolbar-separator\"></span>\n\n @if (isButtonVisible('blockquote')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('blockquote')\"\n (click)=\"toggleBlockquote()\"\n [title]=\"'editor.blockquote' | translate\"\n [attr.aria-label]=\"'editor.blockquote' | translate\"\n >\n <i class=\"fas fa-quote-right\"></i>\n </button>\n }\n @if (isButtonVisible('code')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('codeBlock')\"\n (click)=\"toggleCode()\"\n [title]=\"'editor.code' | translate\"\n [attr.aria-label]=\"'editor.code' | translate\"\n >\n <i class=\"fas fa-code\"></i>\n </button>\n }\n\n <span class=\"sdc-editor__toolbar-separator\"></span>\n\n @if (isButtonVisible('undo')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n (click)=\"undo()\"\n [title]=\"'editor.undo' | translate\"\n [attr.aria-label]=\"'editor.undo' | translate\"\n >\n <i class=\"fas fa-undo\"></i>\n </button>\n }\n @if (isButtonVisible('redo')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n (click)=\"redo()\"\n [title]=\"'editor.redo' | translate\"\n [attr.aria-label]=\"'editor.redo' | translate\"\n >\n <i class=\"fas fa-redo\"></i>\n </button>\n }\n </fieldset>\n }\n\n <div\n #editorHost\n [id]=\"editorHostId\"\n class=\"sdc-editor__content\"\n [style.minHeight]=\"minHeight\"\n [style.maxHeight]=\"maxHeight\"\n ></div>\n\n @if (messageKey()) {\n <small class=\"sdc-editor__message\" [class.sdc-editor__message--invalid]=\"invalid\">\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n", styles: [":root{--sdc-editor-border-color: #d1d5db;--sdc-editor-border-radius: 4px;--sdc-editor-focus-border-color: #3b82f6;--sdc-editor-invalid-border-color: #ef4444;--sdc-editor-toolbar-bg: #f9fafb;--sdc-editor-toolbar-border-color: #e5e7eb;--sdc-editor-toolbar-btn-size: 32px;--sdc-editor-toolbar-btn-radius: 4px;--sdc-editor-toolbar-btn-hover-bg: #e5e7eb;--sdc-editor-toolbar-btn-active-bg: #dbeafe;--sdc-editor-toolbar-btn-active-color: #2563eb;--sdc-editor-content-padding: 12px;--sdc-editor-message-color: #6b7280;--sdc-editor-message-invalid-color: #ef4444;--sdc-editor-disabled-bg: #f3f4f6;--sdc-editor-disabled-opacity: .6;--sdc-editor-placeholder-color: #9ca3af}.sdc-editor{display:flex;flex-direction:column;width:100%}.sdc-editor__label{display:block;font-size:var(--sdc-form-label-font-size);font-weight:var(--sdc-form-label-font-weight);color:var(--sdc-form-label-color);line-height:var(--sdc-form-label-lh);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-editor__required{color:var(--sdc-form-required-color);font-weight:var(--sdc-form-required-weight);margin-left:var(--sdc-form-required-ml)}.sdc-editor__toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;margin:0;padding:4px 8px;min-width:0;background:var(--sdc-editor-toolbar-bg);border:1px solid var(--sdc-editor-border-color);border-bottom:1px solid var(--sdc-editor-toolbar-border-color);border-radius:var(--sdc-editor-border-radius) var(--sdc-editor-border-radius) 0 0}.sdc-editor__toolbar-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--sdc-editor-toolbar-btn-size);height:var(--sdc-editor-toolbar-btn-size);padding:0;border:none;border-radius:var(--sdc-editor-toolbar-btn-radius);background:transparent;color:#374151;font-size:.875rem;cursor:pointer;transition:background-color .15s ease,color .15s ease}.sdc-editor__toolbar-btn:hover{background:var(--sdc-editor-toolbar-btn-hover-bg)}.sdc-editor__toolbar-btn.active{background:var(--sdc-editor-toolbar-btn-active-bg);color:var(--sdc-editor-toolbar-btn-active-color)}.sdc-editor__toolbar-btn:focus-visible{outline:2px solid var(--sdc-editor-focus-border-color);outline-offset:1px}.sdc-editor__toolbar-separator{display:inline-block;width:1px;height:20px;margin:0 4px;background:var(--sdc-editor-toolbar-border-color)}.sdc-editor__content{border:1px solid var(--sdc-editor-border-color);border-radius:var(--sdc-editor-border-radius);overflow-y:auto;transition:border-color .15s ease}.sdc-editor__toolbar+.sdc-editor__content{border-top-left-radius:0;border-top-right-radius:0;border-top:none}.sdc-editor__content:focus-within{border-color:var(--sdc-editor-focus-border-color)}.sdc-editor__content .tiptap,.sdc-editor__content .ProseMirror{padding:var(--sdc-editor-content-padding);min-height:inherit;outline:none;font-size:.875rem;line-height:1.5}.sdc-editor__content .tiptap>*+*,.sdc-editor__content .ProseMirror>*+*{margin-top:.5em}.sdc-editor__content .tiptap p.is-editor-empty:first-child:before,.sdc-editor__content .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--sdc-editor-placeholder-color);pointer-events:none;height:0}.sdc-editor__content .tiptap ul,.sdc-editor__content .tiptap ol,.sdc-editor__content .ProseMirror ul,.sdc-editor__content .ProseMirror ol{padding-left:1.5em}.sdc-editor__content .tiptap ul,.sdc-editor__content .ProseMirror ul{list-style-type:disc}.sdc-editor__content .tiptap ol,.sdc-editor__content .ProseMirror ol{list-style-type:decimal}.sdc-editor__content .tiptap blockquote,.sdc-editor__content .ProseMirror blockquote{border-left:3px solid var(--sdc-editor-toolbar-border-color);padding-left:1em;margin-left:0;color:#6b7280}.sdc-editor__content .tiptap pre,.sdc-editor__content .ProseMirror pre{background:#1f2937;color:#f9fafb;padding:.75em 1em;border-radius:4px;font-family:Fira Code,Consolas,monospace;font-size:.8125rem;overflow-x:auto}.sdc-editor__content .tiptap code,.sdc-editor__content .ProseMirror code{background:#f3f4f6;padding:.2em .4em;border-radius:3px;font-size:.8125rem}.sdc-editor__content .tiptap pre code,.sdc-editor__content .ProseMirror pre code{background:none;padding:0}.sdc-editor__content .tiptap img,.sdc-editor__content .ProseMirror img{max-width:100%;height:auto;border-radius:4px}.sdc-editor__content .tiptap h1,.sdc-editor__content .tiptap h2,.sdc-editor__content .tiptap h3,.sdc-editor__content .tiptap h4,.sdc-editor__content .tiptap h5,.sdc-editor__content .tiptap h6,.sdc-editor__content .ProseMirror h1,.sdc-editor__content .ProseMirror h2,.sdc-editor__content .ProseMirror h3,.sdc-editor__content .ProseMirror h4,.sdc-editor__content .ProseMirror h5,.sdc-editor__content .ProseMirror h6{font-weight:600;line-height:1.25}.sdc-editor__content .tiptap h1,.sdc-editor__content .ProseMirror h1{font-size:1.5rem}.sdc-editor__content .tiptap h2,.sdc-editor__content .ProseMirror h2{font-size:1.25rem}.sdc-editor__content .tiptap h3,.sdc-editor__content .ProseMirror h3{font-size:1.125rem}.sdc-editor__message{font-size:.75rem;color:var(--sdc-editor-message-color);margin-top:2px}.sdc-editor__message--invalid{color:var(--sdc-editor-message-invalid-color)}.sdc-editor--invalid .sdc-editor__content,.sdc-editor--invalid .sdc-editor__toolbar{border-color:var(--sdc-editor-invalid-border-color)}.sdc-editor--disabled{opacity:var(--sdc-editor-disabled-opacity);pointer-events:none}.sdc-editor--disabled .sdc-editor__content{background:var(--sdc-editor-disabled-bg)}.sdc-editor--readonly .sdc-editor__content{background:var(--sdc-editor-disabled-bg);cursor:default}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
143
+ }
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditorComponent, decorators: [{
145
+ type: Component,
146
+ args: [{ selector: 'sdc-editor', standalone: true, imports: [CommonModule, FormsModule, TranslateModule], providers: [
147
+ {
148
+ provide: NG_VALUE_ACCESSOR,
149
+ useExisting: forwardRef(() => EditorComponent),
150
+ multi: true
151
+ }
152
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n class=\"sdc-editor\"\n [class.sdc-editor--disabled]=\"disabled\"\n [class.sdc-editor--invalid]=\"invalid\"\n [class.sdc-editor--readonly]=\"readonly\"\n>\n @if (labelKey()) {\n <label class=\"sdc-editor__label\" [attr.for]=\"editorHostId\">\n {{ labelKey() | translate }}\n @if (required) { <span class=\"sdc-editor__required\" aria-hidden=\"true\">*</span> }\n </label>\n }\n\n @if (showToolbar && !readonly && !disabled) {\n <fieldset class=\"sdc-editor__toolbar\">\n <legend class=\"sr-only\">{{ 'editor.toolbarLabel' | translate }}</legend>\n @if (isButtonVisible('bold')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('bold')\"\n (click)=\"toggleBold()\"\n [title]=\"'editor.bold' | translate\"\n [attr.aria-label]=\"'editor.bold' | translate\"\n >\n <i class=\"fas fa-bold\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (isButtonVisible('italic')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('italic')\"\n (click)=\"toggleItalic()\"\n [title]=\"'editor.italic' | translate\"\n [attr.aria-label]=\"'editor.italic' | translate\"\n >\n <i class=\"fas fa-italic\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (isButtonVisible('underline')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('underline')\"\n (click)=\"toggleUnderline()\"\n [title]=\"'editor.underline' | translate\"\n [attr.aria-label]=\"'editor.underline' | translate\"\n >\n <i class=\"fas fa-underline\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (isButtonVisible('strike')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('strike')\"\n (click)=\"toggleStrike()\"\n [title]=\"'editor.strike' | translate\"\n [attr.aria-label]=\"'editor.strike' | translate\"\n >\n <i class=\"fas fa-strikethrough\" aria-hidden=\"true\"></i>\n </button>\n }\n\n <span class=\"sdc-editor__toolbar-separator\"></span>\n\n @if (isButtonVisible('bulletList')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('bulletList')\"\n (click)=\"toggleBulletList()\"\n [title]=\"'editor.bulletList' | translate\"\n [attr.aria-label]=\"'editor.bulletList' | translate\"\n >\n <i class=\"fas fa-list-ul\"></i>\n </button>\n }\n @if (isButtonVisible('orderedList')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('orderedList')\"\n (click)=\"toggleOrderedList()\"\n [title]=\"'editor.orderedList' | translate\"\n [attr.aria-label]=\"'editor.orderedList' | translate\"\n >\n <i class=\"fas fa-list-ol\"></i>\n </button>\n }\n\n <span class=\"sdc-editor__toolbar-separator\"></span>\n\n @if (isButtonVisible('alignLeft')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive({ textAlign: 'left' })\"\n (click)=\"setTextAlign('left')\"\n [title]=\"'editor.alignLeft' | translate\"\n [attr.aria-label]=\"'editor.alignLeft' | translate\"\n >\n <i class=\"fas fa-align-left\"></i>\n </button>\n }\n @if (isButtonVisible('alignCenter')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive({ textAlign: 'center' })\"\n (click)=\"setTextAlign('center')\"\n [title]=\"'editor.alignCenter' | translate\"\n [attr.aria-label]=\"'editor.alignCenter' | translate\"\n >\n <i class=\"fas fa-align-center\"></i>\n </button>\n }\n @if (isButtonVisible('alignRight')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive({ textAlign: 'right' })\"\n (click)=\"setTextAlign('right')\"\n [title]=\"'editor.alignRight' | translate\"\n [attr.aria-label]=\"'editor.alignRight' | translate\"\n >\n <i class=\"fas fa-align-right\"></i>\n </button>\n }\n\n <span class=\"sdc-editor__toolbar-separator\"></span>\n\n @if (isButtonVisible('blockquote')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('blockquote')\"\n (click)=\"toggleBlockquote()\"\n [title]=\"'editor.blockquote' | translate\"\n [attr.aria-label]=\"'editor.blockquote' | translate\"\n >\n <i class=\"fas fa-quote-right\"></i>\n </button>\n }\n @if (isButtonVisible('code')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n [class.active]=\"isActive('codeBlock')\"\n (click)=\"toggleCode()\"\n [title]=\"'editor.code' | translate\"\n [attr.aria-label]=\"'editor.code' | translate\"\n >\n <i class=\"fas fa-code\"></i>\n </button>\n }\n\n <span class=\"sdc-editor__toolbar-separator\"></span>\n\n @if (isButtonVisible('undo')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n (click)=\"undo()\"\n [title]=\"'editor.undo' | translate\"\n [attr.aria-label]=\"'editor.undo' | translate\"\n >\n <i class=\"fas fa-undo\"></i>\n </button>\n }\n @if (isButtonVisible('redo')) {\n <button\n type=\"button\"\n class=\"sdc-editor__toolbar-btn\"\n (click)=\"redo()\"\n [title]=\"'editor.redo' | translate\"\n [attr.aria-label]=\"'editor.redo' | translate\"\n >\n <i class=\"fas fa-redo\"></i>\n </button>\n }\n </fieldset>\n }\n\n <div\n #editorHost\n [id]=\"editorHostId\"\n class=\"sdc-editor__content\"\n [style.minHeight]=\"minHeight\"\n [style.maxHeight]=\"maxHeight\"\n ></div>\n\n @if (messageKey()) {\n <small class=\"sdc-editor__message\" [class.sdc-editor__message--invalid]=\"invalid\">\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n", styles: [":root{--sdc-editor-border-color: #d1d5db;--sdc-editor-border-radius: 4px;--sdc-editor-focus-border-color: #3b82f6;--sdc-editor-invalid-border-color: #ef4444;--sdc-editor-toolbar-bg: #f9fafb;--sdc-editor-toolbar-border-color: #e5e7eb;--sdc-editor-toolbar-btn-size: 32px;--sdc-editor-toolbar-btn-radius: 4px;--sdc-editor-toolbar-btn-hover-bg: #e5e7eb;--sdc-editor-toolbar-btn-active-bg: #dbeafe;--sdc-editor-toolbar-btn-active-color: #2563eb;--sdc-editor-content-padding: 12px;--sdc-editor-message-color: #6b7280;--sdc-editor-message-invalid-color: #ef4444;--sdc-editor-disabled-bg: #f3f4f6;--sdc-editor-disabled-opacity: .6;--sdc-editor-placeholder-color: #9ca3af}.sdc-editor{display:flex;flex-direction:column;width:100%}.sdc-editor__label{display:block;font-size:var(--sdc-form-label-font-size);font-weight:var(--sdc-form-label-font-weight);color:var(--sdc-form-label-color);line-height:var(--sdc-form-label-lh);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-editor__required{color:var(--sdc-form-required-color);font-weight:var(--sdc-form-required-weight);margin-left:var(--sdc-form-required-ml)}.sdc-editor__toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;margin:0;padding:4px 8px;min-width:0;background:var(--sdc-editor-toolbar-bg);border:1px solid var(--sdc-editor-border-color);border-bottom:1px solid var(--sdc-editor-toolbar-border-color);border-radius:var(--sdc-editor-border-radius) var(--sdc-editor-border-radius) 0 0}.sdc-editor__toolbar-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--sdc-editor-toolbar-btn-size);height:var(--sdc-editor-toolbar-btn-size);padding:0;border:none;border-radius:var(--sdc-editor-toolbar-btn-radius);background:transparent;color:#374151;font-size:.875rem;cursor:pointer;transition:background-color .15s ease,color .15s ease}.sdc-editor__toolbar-btn:hover{background:var(--sdc-editor-toolbar-btn-hover-bg)}.sdc-editor__toolbar-btn.active{background:var(--sdc-editor-toolbar-btn-active-bg);color:var(--sdc-editor-toolbar-btn-active-color)}.sdc-editor__toolbar-btn:focus-visible{outline:2px solid var(--sdc-editor-focus-border-color);outline-offset:1px}.sdc-editor__toolbar-separator{display:inline-block;width:1px;height:20px;margin:0 4px;background:var(--sdc-editor-toolbar-border-color)}.sdc-editor__content{border:1px solid var(--sdc-editor-border-color);border-radius:var(--sdc-editor-border-radius);overflow-y:auto;transition:border-color .15s ease}.sdc-editor__toolbar+.sdc-editor__content{border-top-left-radius:0;border-top-right-radius:0;border-top:none}.sdc-editor__content:focus-within{border-color:var(--sdc-editor-focus-border-color)}.sdc-editor__content .tiptap,.sdc-editor__content .ProseMirror{padding:var(--sdc-editor-content-padding);min-height:inherit;outline:none;font-size:.875rem;line-height:1.5}.sdc-editor__content .tiptap>*+*,.sdc-editor__content .ProseMirror>*+*{margin-top:.5em}.sdc-editor__content .tiptap p.is-editor-empty:first-child:before,.sdc-editor__content .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:var(--sdc-editor-placeholder-color);pointer-events:none;height:0}.sdc-editor__content .tiptap ul,.sdc-editor__content .tiptap ol,.sdc-editor__content .ProseMirror ul,.sdc-editor__content .ProseMirror ol{padding-left:1.5em}.sdc-editor__content .tiptap ul,.sdc-editor__content .ProseMirror ul{list-style-type:disc}.sdc-editor__content .tiptap ol,.sdc-editor__content .ProseMirror ol{list-style-type:decimal}.sdc-editor__content .tiptap blockquote,.sdc-editor__content .ProseMirror blockquote{border-left:3px solid var(--sdc-editor-toolbar-border-color);padding-left:1em;margin-left:0;color:#6b7280}.sdc-editor__content .tiptap pre,.sdc-editor__content .ProseMirror pre{background:#1f2937;color:#f9fafb;padding:.75em 1em;border-radius:4px;font-family:Fira Code,Consolas,monospace;font-size:.8125rem;overflow-x:auto}.sdc-editor__content .tiptap code,.sdc-editor__content .ProseMirror code{background:#f3f4f6;padding:.2em .4em;border-radius:3px;font-size:.8125rem}.sdc-editor__content .tiptap pre code,.sdc-editor__content .ProseMirror pre code{background:none;padding:0}.sdc-editor__content .tiptap img,.sdc-editor__content .ProseMirror img{max-width:100%;height:auto;border-radius:4px}.sdc-editor__content .tiptap h1,.sdc-editor__content .tiptap h2,.sdc-editor__content .tiptap h3,.sdc-editor__content .tiptap h4,.sdc-editor__content .tiptap h5,.sdc-editor__content .tiptap h6,.sdc-editor__content .ProseMirror h1,.sdc-editor__content .ProseMirror h2,.sdc-editor__content .ProseMirror h3,.sdc-editor__content .ProseMirror h4,.sdc-editor__content .ProseMirror h5,.sdc-editor__content .ProseMirror h6{font-weight:600;line-height:1.25}.sdc-editor__content .tiptap h1,.sdc-editor__content .ProseMirror h1{font-size:1.5rem}.sdc-editor__content .tiptap h2,.sdc-editor__content .ProseMirror h2{font-size:1.25rem}.sdc-editor__content .tiptap h3,.sdc-editor__content .ProseMirror h3{font-size:1.125rem}.sdc-editor__message{font-size:.75rem;color:var(--sdc-editor-message-color);margin-top:2px}.sdc-editor__message--invalid{color:var(--sdc-editor-message-invalid-color)}.sdc-editor--invalid .sdc-editor__content,.sdc-editor--invalid .sdc-editor__toolbar{border-color:var(--sdc-editor-invalid-border-color)}.sdc-editor--disabled{opacity:var(--sdc-editor-disabled-opacity);pointer-events:none}.sdc-editor--disabled .sdc-editor__content{background:var(--sdc-editor-disabled-bg)}.sdc-editor--readonly .sdc-editor__content{background:var(--sdc-editor-disabled-bg);cursor:default}\n"] }]
153
+ }], propDecorators: { readonly: [{
154
+ type: Input
155
+ }], minHeight: [{
156
+ type: Input
157
+ }], maxHeight: [{
158
+ type: Input
159
+ }], showToolbar: [{
160
+ type: Input
161
+ }], toolbarButtons: [{
162
+ type: Input
163
+ }], infoTooltip: [{
164
+ type: Input
165
+ }], textChange: [{
166
+ type: Output
167
+ }], selectionChange: [{
168
+ type: Output
169
+ }], editorHost: [{
170
+ type: ViewChild,
171
+ args: ['editorHost', { static: true }]
172
+ }] } });
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRCxPQUFPLFNBQVMsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUM7QUFDNUMsT0FBTyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDcEQsT0FBTyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDcEQsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0seUJBQXlCLENBQUM7QUFFNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FB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O2FBQ3RDLENBQUM7U0FDTCxDQUFDO0lBQ04sQ0FBQzt3R0FsSVEsZUFBZTs0RkFBZixlQUFlLGdUQVZiO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBQzlDLEtBQUssRUFBRSxJQUFJO2FBQ2Q7U0FDSix5S0M3REwsMGpOQXVNQSw0OUtEbkpjLFlBQVksOEJBQUUsV0FBVyw4QkFBRSxlQUFlOzs0RkFhM0MsZUFBZTtrQkFoQjNCLFNBQVM7K0JBQ0ksWUFBWSxjQUNWLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLGFBRzFDO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDOzRCQUM5QyxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFHNUIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVxRCxVQUFVO3NCQUFyRSxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuaW1wb3J0IFN0YXJ0ZXJLaXQgZnJvbSAnQHRpcHRhcC9zdGFydGVyLWtpdCc7XG5pbXBvcnQgVW5kZXJsaW5lIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSc7XG5pbXBvcnQgVGV4dEFsaWduIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ24nO1xuaW1wb3J0IHsgVGV4dFN0eWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dC1zdHlsZSc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29sb3InO1xuaW1wb3J0IEhpZ2hsaWdodCBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oaWdobGlnaHQnO1xuaW1wb3J0IFN1YnNjcmlwdCBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdWJzY3JpcHQnO1xuaW1wb3J0IFN1cGVyc2NyaXB0IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN1cGVyc2NyaXB0JztcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1wbGFjZWhvbGRlcic7XG5pbXBvcnQgSW1hZ2UgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnO1xuXG5pbXBvcnQgeyBJbnB1dHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2RpcmVjdGl2ZXMvaW5wdXRzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBuZXh0U2VxdWVudGlhbElkIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pZC51dGlsJztcblxuLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZWRpdG9yIGNvbnRlbnQgY2hhbmdlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yVGV4dENoYW5nZUV2ZW50IHtcbiAgICBodG1sVmFsdWU6IHN0cmluZztcbiAgICB0ZXh0VmFsdWU6IHN0cmluZztcbn1cblxuLyoqIFRleHQgYWxpZ25tZW50IG9wdGlvbnMgYWNjZXB0ZWQgYnkge0BsaW5rIEVkaXRvckNvbXBvbmVudC5zZXRUZXh0QWxpZ259LiAqL1xuZXhwb3J0IHR5cGUgRWRpdG9yVGV4dEFsaWdubWVudCA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICdqdXN0aWZ5JztcblxuLyoqIERlZmF1bHQgdG9vbGJhciBidXR0b25zIGF2YWlsYWJsZSBpbiB0aGUgZWRpdG9yLiAqL1xuZXhwb3J0IGNvbnN0IEVESVRPUl9ERUZBVUxUX1RPT0xCQVJfQlVUVE9OUzogc3RyaW5nW10gPSBbXG4gICAgJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZScsICdzdHJpa2UnLFxuICAgICdidWxsZXRMaXN0JywgJ29yZGVyZWRMaXN0JyxcbiAgICAnYWxpZ25MZWZ0JywgJ2FsaWduQ2VudGVyJywgJ2FsaWduUmlnaHQnLFxuICAgICdibG9ja3F1b3RlJywgJ2NvZGUnLFxuICAgICd1bmRvJywgJ3JlZG8nXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NkYy1lZGl0b3InLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuc2NzcycsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWRpdG9yQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgSW5wdXRzQ29tcG9uZW50PHN0cmluZz4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgbWluSGVpZ2h0ID0gJzE1MHB4JztcbiAgICBASW5wdXQoKSBtYXhIZWlnaHQgPSAnNDAwcHgnO1xuICAgIEBJbnB1dCgpIHNob3dUb29sYmFyID0gdHJ1ZTtcbiAgICBASW5wdXQoKSB0b29sYmFyQnV0dG9uczogc3RyaW5nW10gPSBFRElUT1JfREVGQVVMVF9UT09MQkFSX0JVVFRPTlM7XG4gICAgQElucHV0KCkgaW5mb1Rvb2x0aXA6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgQE91dHB1dCgpIHRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRvclRleHRDaGFuZ2VFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZWRpdG9ySG9zdCcsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgcmVhZG9ubHkgZWRpdG9ySG9zdCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVkaXRvckhvc3RJZCA9IG5leHRTZXF1ZW50aWFsSWQoJ3NkYy1lZGl0b3ItY29udGVudCcpO1xuXG4gICAgcHJpdmF0ZSBlZGl0b3I6IEVkaXRvciB8IG51bGwgPSBudWxsO1xuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgICAgICAgZWxlbWVudDogdGhpcy5lZGl0b3JIb3N0Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBleHRlbnNpb25zOiB0aGlzLmJ1aWxkRXh0ZW5zaW9ucygpLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy52YWx1ZSA/PyAnJyxcbiAgICAgICAgICAgIGVkaXRhYmxlOiAhdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSxcbiAgICAgICAgICAgIG9uVXBkYXRlOiAoeyBlZGl0b3IgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBlZGl0b3IuZ2V0SFRNTCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBlZGl0b3IuZ2V0VGV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWl0VmFsdWUoaHRtbCk7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0Q2hhbmdlLmVtaXQoeyBodG1sVmFsdWU6IGh0bWwsIHRleHRWYWx1ZTogdGV4dCB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblNlbGVjdGlvblVwZGF0ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvciAmJiB2YWx1ZSAhPT0gdGhpcy5lZGl0b3IuZ2V0SFRNTCgpKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5zZXRDb250ZW50KHZhbHVlIHx8ICcnLCB7IGVtaXRVcGRhdGU6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnNldERpc2FibGVkU3RhdGU/Lihpc0Rpc2FibGVkKTtcbiAgICAgICAgdGhpcy5lZGl0b3I/LnNldEVkaXRhYmxlKCFpc0Rpc2FibGVkICYmICF0aGlzLnJlYWRvbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgYSBtYXJrIG9yIG5vZGUgaXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gKi9cbiAgICBpc0FjdGl2ZShuYW1lOiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3I/LmlzQWN0aXZlKG5hbWUsIGF0dHJzKSA/PyBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3I/LmlzQWN0aXZlKG5hbWUpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBDaGVjayBpZiBhIHRvb2xiYXIgYnV0dG9uIHNob3VsZCBiZSBzaG93biBiYXNlZCBvbiBgdG9vbGJhckJ1dHRvbnNgIGNvbmZpZy4gKi9cbiAgICBpc0J1dHRvblZpc2libGUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvb2xiYXJCdXR0b25zLmluY2x1ZGVzKG5hbWUpO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgOKUgCBUb29sYmFyIEFjdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgICB0b2dnbGVCb2xkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJvbGQoKS5ydW4oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVJdGFsaWMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSXRhbGljKCkucnVuKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlVW5kZXJsaW5lKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVVuZGVybGluZSgpLnJ1bigpO1xuICAgIH1cblxuICAgIHRvZ2dsZVN0cmlrZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVTdHJpa2UoKS5ydW4oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVCdWxsZXRMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJ1bGxldExpc3QoKS5ydW4oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVPcmRlcmVkTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVPcmRlcmVkTGlzdCgpLnJ1bigpO1xuICAgIH1cblxuICAgIHNldFRleHRBbGlnbihhbGlnbm1lbnQ6IEVkaXRvclRleHRBbGlnbm1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oYWxpZ25tZW50KS5ydW4oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVCbG9ja3F1b3RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJsb2NrcXVvdGUoKS5ydW4oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVDb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUNvZGVCbG9jaygpLnJ1bigpO1xuICAgIH1cblxuICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudW5kbygpLnJ1bigpO1xuICAgIH1cblxuICAgIHJlZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkucmVkbygpLnJ1bigpO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgOKUgCBQcml2YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gICAgcHJpdmF0ZSBidWlsZEV4dGVuc2lvbnMoKTogRWRpdG9yWydvcHRpb25zJ11bJ2V4dGVuc2lvbnMnXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBTdGFydGVyS2l0LFxuICAgICAgICAgICAgVW5kZXJsaW5lLFxuICAgICAgICAgICAgVGV4dFN0eWxlLFxuICAgICAgICAgICAgQ29sb3IsXG4gICAgICAgICAgICBIaWdobGlnaHQuY29uZmlndXJlKHsgbXVsdGljb2xvcjogdHJ1ZSB9KSxcbiAgICAgICAgICAgIFN1YnNjcmlwdCxcbiAgICAgICAgICAgIFN1cGVyc2NyaXB0LFxuICAgICAgICAgICAgSW1hZ2UsXG4gICAgICAgICAgICBUZXh0QWxpZ24uY29uZmlndXJlKHtcbiAgICAgICAgICAgICAgICB0eXBlczogWydoZWFkaW5nJywgJ3BhcmFncmFwaCddXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFBsYWNlaG9sZGVyLmNvbmZpZ3VyZSh7XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIgfHwgJydcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInNkYy1lZGl0b3JcIlxuICBbY2xhc3Muc2RjLWVkaXRvci0tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbY2xhc3Muc2RjLWVkaXRvci0taW52YWxpZF09XCJpbnZhbGlkXCJcbiAgW2NsYXNzLnNkYy1lZGl0b3ItLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcbj5cbiAgQGlmIChsYWJlbEtleSgpKSB7XG4gICAgPGxhYmVsIGNsYXNzPVwic2RjLWVkaXRvcl9fbGFiZWxcIiBbYXR0ci5mb3JdPVwiZWRpdG9ySG9zdElkXCI+XG4gICAgICB7eyBsYWJlbEtleSgpIHwgdHJhbnNsYXRlIH19XG4gICAgICBAaWYgKHJlcXVpcmVkKSB7IDxzcGFuIGNsYXNzPVwic2RjLWVkaXRvcl9fcmVxdWlyZWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPiB9XG4gICAgPC9sYWJlbD5cbiAgfVxuXG4gIEBpZiAoc2hvd1Rvb2xiYXIgJiYgIXJlYWRvbmx5ICYmICFkaXNhYmxlZCkge1xuICAgIDxmaWVsZHNldCBjbGFzcz1cInNkYy1lZGl0b3JfX3Rvb2xiYXJcIj5cbiAgICAgIDxsZWdlbmQgY2xhc3M9XCJzci1vbmx5XCI+e3sgJ2VkaXRvci50b29sYmFyTGFiZWwnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICBAaWYgKGlzQnV0dG9uVmlzaWJsZSgnYm9sZCcpKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNkYy1lZGl0b3JfX3Rvb2xiYXItYnRuXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlKCdib2xkJylcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVCb2xkKClcIlxuICAgICAgICAgIFt0aXRsZV09XCInZWRpdG9yLmJvbGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidlZGl0b3IuYm9sZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYm9sZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYgKGlzQnV0dG9uVmlzaWJsZSgnaXRhbGljJykpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLWVkaXRvcl9fdG9vbGJhci1idG5cIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3RpdmUoJ2l0YWxpYycpXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlSXRhbGljKClcIlxuICAgICAgICAgIFt0aXRsZV09XCInZWRpdG9yLml0YWxpYycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2VkaXRvci5pdGFsaWMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWl0YWxpY1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYgKGlzQnV0dG9uVmlzaWJsZSgndW5kZXJsaW5lJykpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLWVkaXRvcl9fdG9vbGJhci1idG5cIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3RpdmUoJ3VuZGVybGluZScpXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlVW5kZXJsaW5lKClcIlxuICAgICAgICAgIFt0aXRsZV09XCInZWRpdG9yLnVuZGVybGluZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2VkaXRvci51bmRlcmxpbmUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXVuZGVybGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYgKGlzQnV0dG9uVmlzaWJsZSgnc3RyaWtlJykpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLWVkaXRvcl9fdG9vbGJhci1idG5cIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3RpdmUoJ3N0cmlrZScpXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU3RyaWtlKClcIlxuICAgICAgICAgIFt0aXRsZV09XCInZWRpdG9yLnN0cmlrZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2VkaXRvci5zdHJpa2UnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXN0cmlrZXRocm91Z2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuXG4gICAgICA8c3BhbiBjbGFzcz1cInNkYy1lZGl0b3JfX3Rvb2xiYXItc2VwYXJhdG9yXCI+PC9zcGFuPlxuXG4gICAgICBAaWYgKGlzQnV0dG9uVmlzaWJsZSgnYnVsbGV0TGlzdCcpKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNkYy1lZGl0b3JfX3Rvb2xiYXItYnRuXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlKCdidWxsZXRMaXN0JylcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVCdWxsZXRMaXN0KClcIlxuICAgICAgICAgIFt0aXRsZV09XCInZWRpdG9yLmJ1bGxldExpc3QnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidlZGl0b3IuYnVsbGV0TGlzdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbGlzdC11bFwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYgKGlzQnV0dG9uVmlzaWJsZSgnb3JkZXJlZExpc3QnKSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzZGMtZWRpdG9yX190b29sYmFyLWJ0blwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZSgnb3JkZXJlZExpc3QnKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9yZGVyZWRMaXN0KClcIlxuICAgICAgICAgIFt0aXRsZV09XCInZWRpdG9yLm9yZGVyZWRMaXN0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInZWRpdG9yLm9yZGVyZWRMaXN0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1saXN0LW9sXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cblxuICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtZWRpdG9yX190b29sYmFyLXNlcGFyYXRvclwiPjwvc3Bhbj5cblxuICAgICAgQGlmIChpc0J1dHRvblZpc2libGUoJ2FsaWduTGVmdCcpKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNkYy1lZGl0b3JfX3Rvb2xiYXItYnRuXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlKHsgdGV4dEFsaWduOiAnbGVmdCcgfSlcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRUZXh0QWxpZ24oJ2xlZnQnKVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidlZGl0b3IuYWxpZ25MZWZ0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInZWRpdG9yLmFsaWduTGVmdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYWxpZ24tbGVmdFwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYgKGlzQnV0dG9uVmlzaWJsZSgnYWxpZ25DZW50ZXInKSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzZGMtZWRpdG9yX190b29sYmFyLWJ0blwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZSh7IHRleHRBbGlnbjogJ2NlbnRlcicgfSlcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRUZXh0QWxpZ24oJ2NlbnRlcicpXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ2VkaXRvci5hbGlnbkNlbnRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2VkaXRvci5hbGlnbkNlbnRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYWxpZ24tY2VudGVyXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoaXNCdXR0b25WaXNpYmxlKCdhbGlnblJpZ2h0JykpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLWVkaXRvcl9fdG9vbGJhci1idG5cIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICdyaWdodCcgfSlcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRUZXh0QWxpZ24oJ3JpZ2h0JylcIlxuICAgICAgICAgIFt0aXRsZV09XCInZWRpdG9yLmFsaWduUmlnaHQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidlZGl0b3IuYWxpZ25SaWdodCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYWxpZ24tcmlnaHRcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuXG4gICAgICA8c3BhbiBjbGFzcz1cInNkYy1lZGl0b3JfX3Rvb2xiYXItc2VwYXJhdG9yXCI+PC9zcGFuPlxuXG4gICAgICBAaWYgKGlzQnV0dG9uVmlzaWJsZSgnYmxvY2txdW90ZScpKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNkYy1lZGl0b3JfX3Rvb2xiYXItYnRuXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlKCdibG9ja3F1b3RlJylcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVCbG9ja3F1b3RlKClcIlxuICAgICAgICAgIFt0aXRsZV09XCInZWRpdG9yLmJsb2NrcXVvdGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidlZGl0b3IuYmxvY2txdW90ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcXVvdGUtcmlnaHRcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgQGlmIChpc0J1dHRvblZpc2libGUoJ2NvZGUnKSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzZGMtZWRpdG9yX190b29sYmFyLWJ0blwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZSgnY29kZUJsb2NrJylcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb2RlKClcIlxuICAgICAgICAgIFt0aXRsZV09XCInZWRpdG9yLmNvZGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidlZGl0b3IuY29kZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY29kZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2RjLWVkaXRvcl9fdG9vbGJhci1zZXBhcmF0b3JcIj48L3NwYW4+XG5cbiAgICAgIEBpZiAoaXNCdXR0b25WaXNpYmxlKCd1bmRvJykpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLWVkaXRvcl9fdG9vbGJhci1idG5cIlxuICAgICAgICAgIChjbGljayk9XCJ1bmRvKClcIlxuICAgICAgICAgIFt0aXRsZV09XCInZWRpdG9yLnVuZG8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidlZGl0b3IudW5kbycgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdW5kb1wiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYgKGlzQnV0dG9uVmlzaWJsZSgncmVkbycpKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNkYy1lZGl0b3JfX3Rvb2xiYXItYnRuXCJcbiAgICAgICAgICAoY2xpY2spPVwicmVkbygpXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ2VkaXRvci5yZWRvJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInZWRpdG9yLnJlZG8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXJlZG9cIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZmllbGRzZXQ+XG4gIH1cblxuICA8ZGl2XG4gICAgI2VkaXRvckhvc3RcbiAgICBbaWRdPVwiZWRpdG9ySG9zdElkXCJcbiAgICBjbGFzcz1cInNkYy1lZGl0b3JfX2NvbnRlbnRcIlxuICAgIFtzdHlsZS5taW5IZWlnaHRdPVwibWluSGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4SGVpZ2h0XT1cIm1heEhlaWdodFwiXG4gID48L2Rpdj5cblxuICBAaWYgKG1lc3NhZ2VLZXkoKSkge1xuICAgIDxzbWFsbCBjbGFzcz1cInNkYy1lZGl0b3JfX21lc3NhZ2VcIiBbY2xhc3Muc2RjLWVkaXRvcl9fbWVzc2FnZS0taW52YWxpZF09XCJpbnZhbGlkXCI+XG4gICAgICB7eyBtZXNzYWdlS2V5KCkgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NtYWxsPlxuICB9XG48L2Rpdj5cbiJdfQ==