@libs-ui/components-inputs-quill2x 0.2.357-0 → 0.2.357-10

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.
package/README.md CHANGED
@@ -101,8 +101,8 @@ import { LibsUiComponentsInputsQuill2xComponent } from '@libs-ui/components-inpu
101
101
  templateUrl: './my.component.html',
102
102
  })
103
103
  export class MyComponent {
104
- protected formData = signal<Record<string, string>>({
105
- content: '<p>Xin chào! Đây là nội dung ban đầu.</p>',
104
+ protected basicData = signal<Record<string, string>>({
105
+ content: '<p>Xin chào! Đây là trình soạn thảo <strong>Quill2x</strong>.</p>',
106
106
  });
107
107
 
108
108
  protected handlerChange(html: string): void {
@@ -115,9 +115,9 @@ export class MyComponent {
115
115
  ```html
116
116
  <!-- my.component.html -->
117
117
  <libs_ui-components-inputs-quill2x
118
- [(item)]="formData"
118
+ [(item)]="basicData"
119
119
  [fieldBind]="'content'"
120
- [placeholder]="'Nhập nội dung...'"
120
+ [placeholder]="'Nhập nội dung ngắn...'"
121
121
  (outChange)="handlerChange($event)">
122
122
  </libs_ui-components-inputs-quill2x>
123
123
  ```
@@ -136,11 +136,12 @@ import { LibsUiComponentsInputsQuill2xComponent, IQuill2xCustomConfig } from '@l
136
136
  templateUrl: './my.component.html',
137
137
  })
138
138
  export class MyComponent {
139
- protected articleData = signal<Record<string, string>>({
140
- body: '<h1>Tiêu đề bài viết</h1><p>Nội dung bài viết tại đây.</p>',
139
+ protected fullData = signal<Record<string, string>>({
140
+ content: '<h1>Tiêu đề lớn</h1><p>Nội dung với đầy đủ các công cụ hỗ trợ.</p><ul><li>Danh mục 1</li><li>Danh mục 2</li></ul>',
141
141
  });
142
142
 
143
- protected fullConfig: IQuill2xCustomConfig = {
143
+ // toolbar.type = 'all' hiển thị đầy đủ các nhóm công cụ; resize='vertical' cho phép kéo rộng editor
144
+ protected fullConfig = {
144
145
  toolbar: signal({
145
146
  type: signal<'all'>('all'),
146
147
  }),
@@ -158,8 +159,8 @@ export class MyComponent {
158
159
  ```html
159
160
  <!-- my.component.html -->
160
161
  <libs_ui-components-inputs-quill2x
161
- [(item)]="articleData"
162
- [fieldBind]="'body'"
162
+ [(item)]="fullData"
163
+ [fieldBind]="'content'"
163
164
  [quillCustomConfig]="fullConfig"
164
165
  [resize]="'vertical'"
165
166
  [minHeightEditorContentDefault]="150"
@@ -185,13 +186,13 @@ import { IMentionConfig } from '@libs-ui/components-inputs-mention';
185
186
  templateUrl: './my.component.html',
186
187
  })
187
188
  export class MyComponent {
188
- protected commentData = signal<Record<string, string>>({ comment: '' });
189
+ protected mentionData = signal<Record<string, string>>({ content: '<p>Thử gõ @ để mention...</p>' });
189
190
 
190
191
  protected mentionConfig: IMentionConfig = {
191
192
  items: [
192
- { id: '1', name: 'Anh Tuấn', username: 'tuan@company.com' },
193
- { id: '2', name: 'Bảo Ngọc', username: 'ngoc@company.com' },
194
- { id: '3', name: 'Công Thành', username: 'thanh@company.com' },
193
+ { id: '1', name: 'Anh Tuấn', username: 'tuan@example.com' },
194
+ { id: '2', name: 'Bảo Ngọc', username: 'ngoc@example.com' },
195
+ { id: '3', name: 'Công Thành', username: 'thanh@example.com' },
195
196
  ],
196
197
  triggerChar: '@',
197
198
  labelKey: 'name',
@@ -209,10 +210,9 @@ export class MyComponent {
209
210
  ```html
210
211
  <!-- my.component.html -->
211
212
  <libs_ui-components-inputs-quill2x
212
- [(item)]="commentData"
213
- [fieldBind]="'comment'"
214
- [dataConfigMention]="mentionConfig"
215
- [placeholder]="'Nhập bình luận, gõ @ để mention...'">
213
+ [(item)]="mentionData"
214
+ [fieldBind]="'content'"
215
+ [dataConfigMention]="mentionConfig">
216
216
  </libs_ui-components-inputs-quill2x>
217
217
  ```
218
218
 
@@ -278,12 +278,13 @@ import { LibsUiComponentsInputsQuill2xComponent, IQuill2xCustomConfig } from '@l
278
278
  export class MyComponent implements AfterViewInit {
279
279
  @ViewChild('triggerBtn') triggerBtn?: ElementRef<HTMLButtonElement>;
280
280
 
281
- protected floatingData = signal<Record<string, string>>({ content: '' });
282
- protected floatingConfig = signal<IQuill2xCustomConfig | undefined>(undefined);
281
+ protected positionFixedData = signal<Record<string, string>>({ content: '<p>Nội dung với toolbar floating...</p>' });
282
+ protected positionFixedConfig = signal<IQuill2xCustomConfig | undefined>(undefined);
283
283
 
284
+ // #triggerBtn dùng ViewChild — element phải tồn tại trước khi khởi tạo positionFixed
284
285
  ngAfterViewInit(): void {
285
286
  if (!this.triggerBtn) return;
286
- this.floatingConfig.set({
287
+ this.positionFixedConfig.set({
287
288
  toolbar: signal({
288
289
  type: signal<'default'>('default'),
289
290
  positionFixed: signal({
@@ -304,15 +305,17 @@ export class MyComponent implements AfterViewInit {
304
305
 
305
306
  ```html
306
307
  <!-- my.component.html -->
307
- <button #triggerBtn class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">
308
- Mở toolbar
309
- </button>
310
- <libs_ui-components-inputs-quill2x
311
- [(item)]="floatingData"
312
- [fieldBind]="'content'"
313
- [quillCustomConfig]="floatingConfig()"
314
- [minHeightEditorContentDefault]="150">
315
- </libs_ui-components-inputs-quill2x>
308
+ <div>
309
+ <button #triggerBtn class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">
310
+ Click để mở Quill Editor
311
+ </button>
312
+ <libs_ui-components-inputs-quill2x
313
+ [(item)]="positionFixedData"
314
+ [fieldBind]="'content'"
315
+ [quillCustomConfig]="positionFixedConfig()"
316
+ [displayToolbar]="true">
317
+ </libs_ui-components-inputs-quill2x>
318
+ </div>
316
319
  ```
317
320
 
318
321
  ### 6. Lập trình điều khiển editor qua FunctionsControl
@@ -399,7 +402,7 @@ export class MyComponent {
399
402
 
400
403
  | Output | Type | Mô tả | Handler TS | Binding HTML |
401
404
  |---|---|---|---|---|
402
- | `(outChange)` | `string` | Emit nội dung HTML (đã qua XSS filter) mỗi khi nội dung thay đổi. | `handlerChange(html: string): void { event.stopPropagation?.(); this.savedHtml = html; }` | `(outChange)="handlerChange($event)"` |
405
+ | `(outChange)` | `string` | Emit nội dung HTML (đã qua XSS filter) mỗi khi nội dung thay đổi. | `handlerChange(html: string): void { this.savedHtml = html; }` | `(outChange)="handlerChange($event)"` |
403
406
  | `(outFocus)` | `void` | Emit khi editor nhận focus. | `handlerFocus(): void { this.isEditing.set(true); }` | `(outFocus)="handlerFocus()"` |
404
407
  | `(outBlur)` | `void` | Emit khi editor mất focus. | `handlerBlur(): void { this.isEditing.set(false); }` | `(outBlur)="handlerBlur()"` |
405
408
  | `(outFunctionsControl)` | `IQuill2xFunctionControlEvent` | Emit ngay khi editor khởi tạo xong, trả về object chứa các hàm điều khiển editor. | `handlerFunctionsControl(ctrl: IQuill2xFunctionControlEvent): void { this.editorCtrl = ctrl; }` | `(outFunctionsControl)="handlerFunctionsControl($event)"` |
@@ -589,11 +592,3 @@ const delta = getDeltaOfQuill2xFromHTML(html);
589
592
  ⚠️ **Tính toán toolbar**: Toolbar tự tính toán độ rộng sau khi render. Nếu component cha có animation hoặc thay đổi kích thước, gọi `editorCtrl?.reCalculatorToolbar()` sau khi animation kết thúc để toolbar hiển thị đúng.
590
593
 
591
594
  ⚠️ **convertStandardList khi lưu**: HTML được lưu vào `item[fieldBind]` đã qua `convertStandardList()` để chuẩn hóa định dạng danh sách. Khi hiển thị lại nội dung, dùng component `@libs-ui/components-inputs-quill2x-preview` hoặc apply CSS Quill Snow theme.
592
-
593
- ## Demo
594
-
595
- ```bash
596
- npx nx serve core-ui
597
- ```
598
-
599
- Truy cập: http://localhost:4500/inputs/quill2x
@@ -3,7 +3,7 @@ import { LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs
3
3
  import { LibsUiComponentsModalComponent } from '@libs-ui/components-modal';
4
4
  import { patternUrl } from '@libs-ui/utils';
5
5
  import * as i0 from "@angular/core";
6
- export class LibsUiComponentsInputsQuillLinkComponent {
6
+ export class LibsUiComponentsInputsQuill2xLinkComponent {
7
7
  dataLink = signal({ title: '', link: '' });
8
8
  patternLink = signal(patternUrl());
9
9
  inputValidFunctionControl = signal([]);
@@ -42,11 +42,11 @@ export class LibsUiComponentsInputsQuillLinkComponent {
42
42
  this.outClose.emit();
43
43
  }
44
44
  }
45
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsQuillLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsInputsQuillLinkComponent, isStandalone: true, selector: "libs_ui-components-inputs-quill-link", inputs: { zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, ignoreCommunicateMicroEvent: { classPropertyName: "ignoreCommunicateMicroEvent", publicName: "ignoreCommunicateMicroEvent", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outClose: "outClose", outSaveLink: "outSaveLink" }, ngImport: i0, template: "<libs_ui-components-modal\n [title]=\"'i18n_insert_link'\"\n [mode]=\"'center'\"\n [height]=\"'auto'\"\n [width]=\"'598px'\"\n [ignoreCommunicateMicroEvent]=\"ignoreCommunicateMicroEvent()\"\n [headerConfig]=\"{ ignoreHeaderTheme: true }\"\n [zIndex]=\"zIndex()\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <libs_ui-components-inputs-valid\n [labelConfig]=\"{ labelLeft: 'i18n_content', required: true }\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'title'\"\n [placeholder]=\"'i18n_import_content'\"\n [validRequired]=\"{ isRequired: true }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n <div class=\"mt-[16px]\">\n <libs_ui-components-inputs-valid\n [labelConfig]=\"{ labelLeft: 'Link', required: true }\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'link'\"\n [placeholder]=\"'https://example.com'\"\n [validRequired]=\"{ isRequired: true }\"\n [validPattern]=\"[{ pattern: patternLink(), valuePatternShowError: false }]\"\n [keySelectedUnitLeft]=\"'1'\"\n [unitsLeft]=\"[{ id: '1', label: 'URL' }]\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n </div>\n </div>\n</libs_ui-components-modal>\n", dependencies: [{ kind: "component", type: LibsUiComponentsModalComponent, selector: "libs_ui-components-modal", inputs: ["show", "mode", "isBackdropTransparent", "isBackgroundTransparentModal", "isSizeBackdropByWidthHeightInput", "hasShadowBoxWhenHiddenBackDropTransparent", "classIncludeModalWrapper", "zIndex", "width", "height", "maxWidth", "maxHeight", "minWidth", "isFullScreen", "disable", "ignoreCommunicateMicroEvent", "escapeKeyboardCloseModal", "isClickOutsideClose", "headerConfig", "bodyConfig", "footerConfig", "buttonsFooter", "title", "titleUseXssFilter", "titleUseTooltip", "titleUseInnerText"], outputs: ["showChange", "widthChange", "heightChange", "maxWidthChange", "maxHeightChange", "minWidthChange", "disableChange", "buttonsFooterChange", "outScrollContent", "outEvent", "outFunctionControl", "outClose"] }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "ignoreShowMessageError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsQuill2xLinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsInputsQuill2xLinkComponent, isStandalone: true, selector: "libs_ui-components-inputs-quill2x-link", inputs: { zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, ignoreCommunicateMicroEvent: { classPropertyName: "ignoreCommunicateMicroEvent", publicName: "ignoreCommunicateMicroEvent", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outClose: "outClose", outSaveLink: "outSaveLink" }, ngImport: i0, template: "<libs_ui-components-modal\n [title]=\"'i18n_insert_link'\"\n [mode]=\"'center'\"\n [height]=\"'auto'\"\n [width]=\"'598px'\"\n [ignoreCommunicateMicroEvent]=\"ignoreCommunicateMicroEvent()\"\n [headerConfig]=\"{ ignoreHeaderTheme: true }\"\n [zIndex]=\"zIndex()\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <libs_ui-components-inputs-valid\n [labelConfig]=\"{ labelLeft: 'i18n_content', required: true }\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'title'\"\n [placeholder]=\"'i18n_import_content'\"\n [validRequired]=\"{ isRequired: true }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n <div class=\"mt-[16px]\">\n <libs_ui-components-inputs-valid\n [labelConfig]=\"{ labelLeft: 'Link', required: true }\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'link'\"\n [placeholder]=\"'https://example.com'\"\n [validRequired]=\"{ isRequired: true }\"\n [validPattern]=\"[{ pattern: patternLink(), valuePatternShowError: false }]\"\n [keySelectedUnitLeft]=\"'1'\"\n [unitsLeft]=\"[{ id: '1', label: 'URL' }]\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n </div>\n </div>\n</libs_ui-components-modal>\n", dependencies: [{ kind: "component", type: LibsUiComponentsModalComponent, selector: "libs_ui-components-modal", inputs: ["show", "mode", "isBackdropTransparent", "isBackgroundTransparentModal", "isSizeBackdropByWidthHeightInput", "hasShadowBoxWhenHiddenBackDropTransparent", "classIncludeModalWrapper", "zIndex", "width", "height", "maxWidth", "maxHeight", "minWidth", "isFullScreen", "disable", "ignoreCommunicateMicroEvent", "escapeKeyboardCloseModal", "isClickOutsideClose", "headerConfig", "bodyConfig", "footerConfig", "buttonsFooter", "title", "titleUseXssFilter", "titleUseTooltip", "titleUseInnerText"], outputs: ["showChange", "widthChange", "heightChange", "maxWidthChange", "maxHeightChange", "minWidthChange", "disableChange", "buttonsFooterChange", "outScrollContent", "outEvent", "outFunctionControl", "outClose"] }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "ignoreShowMessageError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
47
47
  }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsQuillLinkComponent, decorators: [{
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsQuill2xLinkComponent, decorators: [{
49
49
  type: Component,
50
- args: [{ selector: 'libs_ui-components-inputs-quill-link', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LibsUiComponentsModalComponent, LibsUiComponentsInputsValidComponent], template: "<libs_ui-components-modal\n [title]=\"'i18n_insert_link'\"\n [mode]=\"'center'\"\n [height]=\"'auto'\"\n [width]=\"'598px'\"\n [ignoreCommunicateMicroEvent]=\"ignoreCommunicateMicroEvent()\"\n [headerConfig]=\"{ ignoreHeaderTheme: true }\"\n [zIndex]=\"zIndex()\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <libs_ui-components-inputs-valid\n [labelConfig]=\"{ labelLeft: 'i18n_content', required: true }\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'title'\"\n [placeholder]=\"'i18n_import_content'\"\n [validRequired]=\"{ isRequired: true }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n <div class=\"mt-[16px]\">\n <libs_ui-components-inputs-valid\n [labelConfig]=\"{ labelLeft: 'Link', required: true }\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'link'\"\n [placeholder]=\"'https://example.com'\"\n [validRequired]=\"{ isRequired: true }\"\n [validPattern]=\"[{ pattern: patternLink(), valuePatternShowError: false }]\"\n [keySelectedUnitLeft]=\"'1'\"\n [unitsLeft]=\"[{ id: '1', label: 'URL' }]\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n </div>\n </div>\n</libs_ui-components-modal>\n" }]
50
+ args: [{ selector: 'libs_ui-components-inputs-quill2x-link', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LibsUiComponentsModalComponent, LibsUiComponentsInputsValidComponent], template: "<libs_ui-components-modal\n [title]=\"'i18n_insert_link'\"\n [mode]=\"'center'\"\n [height]=\"'auto'\"\n [width]=\"'598px'\"\n [ignoreCommunicateMicroEvent]=\"ignoreCommunicateMicroEvent()\"\n [headerConfig]=\"{ ignoreHeaderTheme: true }\"\n [zIndex]=\"zIndex()\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <libs_ui-components-inputs-valid\n [labelConfig]=\"{ labelLeft: 'i18n_content', required: true }\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'title'\"\n [placeholder]=\"'i18n_import_content'\"\n [validRequired]=\"{ isRequired: true }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n <div class=\"mt-[16px]\">\n <libs_ui-components-inputs-valid\n [labelConfig]=\"{ labelLeft: 'Link', required: true }\"\n [(item)]=\"dataLink\"\n [fieldNameBind]=\"'link'\"\n [placeholder]=\"'https://example.com'\"\n [validRequired]=\"{ isRequired: true }\"\n [validPattern]=\"[{ pattern: patternLink(), valuePatternShowError: false }]\"\n [keySelectedUnitLeft]=\"'1'\"\n [unitsLeft]=\"[{ id: '1', label: 'URL' }]\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\" />\n </div>\n </div>\n</libs_ui-components-modal>\n" }]
51
51
  }] });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3F1aWxsMngvc3JjL2xpbmsvbGluay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3F1aWxsMngvc3JjL2xpbmsvbGluay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBbUMsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6SCxPQUFPLEVBQUUsOEJBQThCLEVBQW9CLE1BQU0sMkJBQTJCLENBQUM7QUFDN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVU1QyxNQUFNLE9BQU8sd0NBQXdDO0lBQ3pDLFFBQVEsR0FBRyxNQUFNLENBQWtDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RSxXQUFXLEdBQUcsTUFBTSxDQUFTLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFFcEMseUJBQXlCLEdBQUcsTUFBTSxDQUF5QyxFQUFFLENBQUMsQ0FBQztJQUV2RixNQUFNLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxDQUFDO0lBQzdCLEtBQUssR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN4QixJQUFJLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDdkIsMkJBQTJCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFFL0MsUUFBUSxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBQzFCLFdBQVcsR0FBRyxNQUFNLEVBQW1DLENBQUM7SUFFakUsUUFBUTtRQUNOLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxLQUFzQztRQUM1RSxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLEtBQUssQ0FBQyxRQUFRO1FBQ3BCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUF1QjtRQUNsRCxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7d0dBN0NVLHdDQUF3Qzs0RkFBeEMsd0NBQXdDLDZzQkNickQsaXhDQStCQSw0Q0RwQlksOEJBQThCLGt4QkFBRSxvQ0FBb0M7OzRGQUVuRSx3Q0FBd0M7a0JBUnBELFNBQVM7K0JBRUUsc0NBQXNDLGNBRXBDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLDhCQUE4QixFQUFFLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNNb2RhbENvbXBvbmVudCwgVFlQRV9NT0RBTF9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbW9kYWwnO1xuaW1wb3J0IHsgcGF0dGVyblVybCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy1xdWlsbC1saW5rJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmsuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0xpYnNVaUNvbXBvbmVudHNNb2RhbENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsTGlua0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByb3RlY3RlZCBkYXRhTGluayA9IHNpZ25hbDx7IHRpdGxlOiBzdHJpbmc7IGxpbms6IHN0cmluZyB9Pih7IHRpdGxlOiAnJywgbGluazogJycgfSk7XG4gIHByb3RlY3RlZCBwYXR0ZXJuTGluayA9IHNpZ25hbDxSZWdFeHA+KHBhdHRlcm5VcmwoKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sID0gc2lnbmFsPEFycmF5PElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQ+PihbXSk7XG5cbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigxMjAwKTtcbiAgcmVhZG9ubHkgdGl0bGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpbmsgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUNvbW11bmljYXRlTWljcm9FdmVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgb3V0Q2xvc2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0U2F2ZUxpbmsgPSBvdXRwdXQ8eyB0aXRsZTogc3RyaW5nOyBsaW5rOiBzdHJpbmcgfT4oKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudGl0bGUoKTtcbiAgICBjb25zdCBsaW5rID0gdGhpcy5saW5rKCk7XG4gICAgaWYgKHRpdGxlIHx8IGxpbmspIHtcbiAgICAgIHRoaXMuZGF0YUxpbmsudXBkYXRlKChpdGVtKSA9PiAoeyAuLi5pdGVtLCB0aXRsZTogdGl0bGUgfHwgJycsIGxpbms6IGxpbmsgfHwgJycgfSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyRnVuY3Rpb25zQ29udHJvbChldmVudDogSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMuaW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbC51cGRhdGUoKGl0ZW1zKSA9PiBbLi4uaXRlbXMsIGV2ZW50XSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCgpKSB7XG4gICAgICBpZiAoIShhd2FpdCBjb250cm9sLmNoZWNrSXNWYWxpZCgpKSkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckV2ZW50KGV2ZW50OiBUWVBFX01PREFMX0VWRU5UKSB7XG4gICAgaWYgKGV2ZW50ICE9PSAnYWdyZWUnKSB7XG4gICAgICB0aGlzLm91dENsb3NlLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGF3YWl0IHRoaXMudmFsaWRhdGUoKSkge1xuICAgICAgdGhpcy5vdXRTYXZlTGluay5lbWl0KHRoaXMuZGF0YUxpbmsoKSk7XG4gICAgICB0aGlzLm91dENsb3NlLmVtaXQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxsaWJzX3VpLWNvbXBvbmVudHMtbW9kYWxcbiAgW3RpdGxlXT1cIidpMThuX2luc2VydF9saW5rJ1wiXG4gIFttb2RlXT1cIidjZW50ZXInXCJcbiAgW2hlaWdodF09XCInYXV0bydcIlxuICBbd2lkdGhdPVwiJzU5OHB4J1wiXG4gIFtpZ25vcmVDb21tdW5pY2F0ZU1pY3JvRXZlbnRdPVwiaWdub3JlQ29tbXVuaWNhdGVNaWNyb0V2ZW50KClcIlxuICBbaGVhZGVyQ29uZmlnXT1cInsgaWdub3JlSGVhZGVyVGhlbWU6IHRydWUgfVwiXG4gIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAob3V0RXZlbnQpPVwiaGFuZGxlckV2ZW50KCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktbW9kYWwtYm9keS1jdXN0b21cIj5cbiAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZFxuICAgICAgW2xhYmVsQ29uZmlnXT1cInsgbGFiZWxMZWZ0OiAnaTE4bl9jb250ZW50JywgcmVxdWlyZWQ6IHRydWUgfVwiXG4gICAgICBbKGl0ZW0pXT1cImRhdGFMaW5rXCJcbiAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIid0aXRsZSdcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidpMThuX2ltcG9ydF9jb250ZW50J1wiXG4gICAgICBbdmFsaWRSZXF1aXJlZF09XCJ7IGlzUmVxdWlyZWQ6IHRydWUgfVwiXG4gICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25zQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICA8ZGl2IGNsYXNzPVwibXQtWzE2cHhdXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZFxuICAgICAgICBbbGFiZWxDb25maWddPVwieyBsYWJlbExlZnQ6ICdMaW5rJywgcmVxdWlyZWQ6IHRydWUgfVwiXG4gICAgICAgIFsoaXRlbSldPVwiZGF0YUxpbmtcIlxuICAgICAgICBbZmllbGROYW1lQmluZF09XCInbGluaydcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2h0dHBzOi8vZXhhbXBsZS5jb20nXCJcbiAgICAgICAgW3ZhbGlkUmVxdWlyZWRdPVwieyBpc1JlcXVpcmVkOiB0cnVlIH1cIlxuICAgICAgICBbdmFsaWRQYXR0ZXJuXT1cIlt7IHBhdHRlcm46IHBhdHRlcm5MaW5rKCksIHZhbHVlUGF0dGVyblNob3dFcnJvcjogZmFsc2UgfV1cIlxuICAgICAgICBba2V5U2VsZWN0ZWRVbml0TGVmdF09XCInMSdcIlxuICAgICAgICBbdW5pdHNMZWZ0XT1cIlt7IGlkOiAnMScsIGxhYmVsOiAnVVJMJyB9XVwiXG4gICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbnNDb250cm9sKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbGlic191aS1jb21wb25lbnRzLW1vZGFsPlxuIl19
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3F1aWxsMngvc3JjL2xpbmsvbGluay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3F1aWxsMngvc3JjL2xpbmsvbGluay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBbUMsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6SCxPQUFPLEVBQUUsOEJBQThCLEVBQW9CLE1BQU0sMkJBQTJCLENBQUM7QUFDN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVU1QyxNQUFNLE9BQU8sMENBQTBDO0lBQzNDLFFBQVEsR0FBRyxNQUFNLENBQWtDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RSxXQUFXLEdBQUcsTUFBTSxDQUFTLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFFcEMseUJBQXlCLEdBQUcsTUFBTSxDQUF5QyxFQUFFLENBQUMsQ0FBQztJQUV2RixNQUFNLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxDQUFDO0lBQzdCLEtBQUssR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN4QixJQUFJLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDdkIsMkJBQTJCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFFL0MsUUFBUSxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBQzFCLFdBQVcsR0FBRyxNQUFNLEVBQW1DLENBQUM7SUFFakUsUUFBUTtRQUNOLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxLQUFzQztRQUM1RSxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLEtBQUssQ0FBQyxRQUFRO1FBQ3BCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUF1QjtRQUNsRCxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7d0dBN0NVLDBDQUEwQzs0RkFBMUMsMENBQTBDLCtzQkNidkQsaXhDQStCQSw0Q0RwQlksOEJBQThCLGt4QkFBRSxvQ0FBb0M7OzRGQUVuRSwwQ0FBMEM7a0JBUnRELFNBQVM7K0JBRUUsd0NBQXdDLGNBRXRDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLDhCQUE4QixFQUFFLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNNb2RhbENvbXBvbmVudCwgVFlQRV9NT0RBTF9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbW9kYWwnO1xuaW1wb3J0IHsgcGF0dGVyblVybCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy1xdWlsbDJ4LWxpbmsnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGluay5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbTGlic1VpQ29tcG9uZW50c01vZGFsQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzVmFsaWRDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGwyeExpbmtDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcm90ZWN0ZWQgZGF0YUxpbmsgPSBzaWduYWw8eyB0aXRsZTogc3RyaW5nOyBsaW5rOiBzdHJpbmcgfT4oeyB0aXRsZTogJycsIGxpbms6ICcnIH0pO1xuICBwcm90ZWN0ZWQgcGF0dGVybkxpbmsgPSBzaWduYWw8UmVnRXhwPihwYXR0ZXJuVXJsKCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCA9IHNpZ25hbDxBcnJheTxJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50Pj4oW10pO1xuXG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oMTIwMCk7XG4gIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsaW5rID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBpZ25vcmVDb21tdW5pY2F0ZU1pY3JvRXZlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dFNhdmVMaW5rID0gb3V0cHV0PHsgdGl0bGU6IHN0cmluZzsgbGluazogc3RyaW5nIH0+KCk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLnRpdGxlKCk7XG4gICAgY29uc3QgbGluayA9IHRoaXMubGluaygpO1xuICAgIGlmICh0aXRsZSB8fCBsaW5rKSB7XG4gICAgICB0aGlzLmRhdGFMaW5rLnVwZGF0ZSgoaXRlbSkgPT4gKHsgLi4uaXRlbSwgdGl0bGU6IHRpdGxlIHx8ICcnLCBsaW5rOiBsaW5rIHx8ICcnIH0pKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2woZXZlbnQ6IElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2wudXBkYXRlKChpdGVtcykgPT4gWy4uLml0ZW1zLCBldmVudF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2woKSkge1xuICAgICAgaWYgKCEoYXdhaXQgY29udHJvbC5jaGVja0lzVmFsaWQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJFdmVudChldmVudDogVFlQRV9NT0RBTF9FVkVOVCkge1xuICAgIGlmIChldmVudCAhPT0gJ2FncmVlJykge1xuICAgICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhd2FpdCB0aGlzLnZhbGlkYXRlKCkpIHtcbiAgICAgIHRoaXMub3V0U2F2ZUxpbmsuZW1pdCh0aGlzLmRhdGFMaW5rKCkpO1xuICAgICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8bGlic191aS1jb21wb25lbnRzLW1vZGFsXG4gIFt0aXRsZV09XCInaTE4bl9pbnNlcnRfbGluaydcIlxuICBbbW9kZV09XCInY2VudGVyJ1wiXG4gIFtoZWlnaHRdPVwiJ2F1dG8nXCJcbiAgW3dpZHRoXT1cIic1OThweCdcIlxuICBbaWdub3JlQ29tbXVuaWNhdGVNaWNyb0V2ZW50XT1cImlnbm9yZUNvbW11bmljYXRlTWljcm9FdmVudCgpXCJcbiAgW2hlYWRlckNvbmZpZ109XCJ7IGlnbm9yZUhlYWRlclRoZW1lOiB0cnVlIH1cIlxuICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgKG91dEV2ZW50KT1cImhhbmRsZXJFdmVudCgkZXZlbnQpXCI+XG4gIDxkaXYgY2xhc3M9XCJsaWJzLXVpLW1vZGFsLWJvZHktY3VzdG9tXCI+XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWRcbiAgICAgIFtsYWJlbENvbmZpZ109XCJ7IGxhYmVsTGVmdDogJ2kxOG5fY29udGVudCcsIHJlcXVpcmVkOiB0cnVlIH1cIlxuICAgICAgWyhpdGVtKV09XCJkYXRhTGlua1wiXG4gICAgICBbZmllbGROYW1lQmluZF09XCIndGl0bGUnXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInaTE4bl9pbXBvcnRfY29udGVudCdcIlxuICAgICAgW3ZhbGlkUmVxdWlyZWRdPVwieyBpc1JlcXVpcmVkOiB0cnVlIH1cIlxuICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2woJGV2ZW50KVwiIC8+XG4gICAgPGRpdiBjbGFzcz1cIm10LVsxNnB4XVwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWRcbiAgICAgICAgW2xhYmVsQ29uZmlnXT1cInsgbGFiZWxMZWZ0OiAnTGluaycsIHJlcXVpcmVkOiB0cnVlIH1cIlxuICAgICAgICBbKGl0ZW0pXT1cImRhdGFMaW5rXCJcbiAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwiJ2xpbmsnXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidodHRwczovL2V4YW1wbGUuY29tJ1wiXG4gICAgICAgIFt2YWxpZFJlcXVpcmVkXT1cInsgaXNSZXF1aXJlZDogdHJ1ZSB9XCJcbiAgICAgICAgW3ZhbGlkUGF0dGVybl09XCJbeyBwYXR0ZXJuOiBwYXR0ZXJuTGluaygpLCB2YWx1ZVBhdHRlcm5TaG93RXJyb3I6IGZhbHNlIH1dXCJcbiAgICAgICAgW2tleVNlbGVjdGVkVW5pdExlZnRdPVwiJzEnXCJcbiAgICAgICAgW3VuaXRzTGVmdF09XCJbeyBpZDogJzEnLCBsYWJlbDogJ1VSTCcgfV1cIlxuICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25zQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2xpYnNfdWktY29tcG9uZW50cy1tb2RhbD5cbiJdfQ==