@libs-ui/components-inputs-emoji 0.2.344-1 → 0.2.344-3

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.
@@ -87,10 +87,10 @@ export class LibsUiComponentsEmojiComponent {
87
87
  this.dataEmojiView.update((item) => ({ ...item, allData: emojiMatch, dataView: page ? [...item.dataView, ...dataInPage] : dataInPage }));
88
88
  }
89
89
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsEmojiComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
90
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsEmojiComponent, isStandalone: true, selector: "libs_ui-components-emoji", inputs: { configPopover: { classPropertyName: "configPopover", publicName: "configPopover", isSignal: true, isRequired: false, transformFunction: null }, isNgContent: { classPropertyName: "isNgContent", publicName: "isNgContent", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, modePopoverPosition: { classPropertyName: "modePopoverPosition", publicName: "modePopoverPosition", isSignal: true, isRequired: false, transformFunction: null }, classPopup: { classPropertyName: "classPopup", publicName: "classPopup", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, classIconInclude: { classPropertyName: "classIconInclude", publicName: "classIconInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outEventEmoji: "outEventEmoji", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "emojiRef", first: true, predicate: ["emojiRef"], descendants: true, isSignal: true }, { propertyName: "elementViewEmoji", first: true, predicate: ["elementViewEmoji"], descendants: true, isSignal: true }], ngImport: i0, template: "<libs_ui-components-popover\n [classInclude]=\"classInclude()\"\n [config]=\"{\n content: 'i18n_text_emoji',\n zIndex: (zIndex() || 1200) + 4,\n }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n <libs_ui-components-popover\n type=\"other\"\n mode=\"click-toggle\"\n class=\"flex\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"configPopover()\"\n [debugId]=\"'debug icon emoij'\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n @if (!isNgContent()) {\n <i class=\"before:!text-[16px] before:!text-[#6a7383] {{ classIconInclude() }}\"></i>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n</libs_ui-components-popover>\n<ng-template #emojiRef>\n <div class=\"py-[10px] flex flex-col {{ classPopup() }}\">\n <div class=\"mx-[10px] mb-[12px]\">\n <div\n class=\"flex\"\n LibsUiComponentsScrollOverlayDirective>\n @for (category of emojisCategories(); track category) {\n <div\n class=\"grow p-[4px] rounded-[4px] bg-[#ffffff] libs-ui-bg-list-hover\"\n (click)=\"handlerChooseCategory($event, category)\">\n <div class=\"mt-[1px] cursor-pointer text-[18px]\">\n {{ category.iconGroup }}\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"mx-[10px] mb-[12px]\">\n <libs_ui-components-inputs-search\n [searchConfig]=\"{\n placeholder: 'i18n_search',\n }\"\n [debounceTime]=\"0\"\n (outSearch)=\"handlerSearchEmoji($event)\" />\n </div>\n <div class=\"h-full w-full relative\">\n <div\n #elementViewEmoji\n class=\"w-full h-full px-[10px] absolute\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (dataEmojiView().dataView.length) {\n @for (item of dataEmojiView().dataView; track $index) {\n <!-- n\u1EBFu sau c\u00F3 y\u00EAu c\u00E2u hover hi\u1EC3n th\u1ECB tooltio th\u00EC b\u1ECF [ignoreShowPopover]=\"true\" -->\n <span\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"true\"\n [config]=\"{ content: item.description, zIndex: (zIndex() || 1200) + 5 }\"\n class=\"cursor-pointer flex shrink-0 h-fit m-[2px] float-left\"\n (click)=\"handlerAddEmoji(item)\">\n {{ item.emoji }}\n </span>\n }\n } @else {\n <div class=\"libs-ui-font-h5r text-[#9ca2ad] h-full w-full items-center justify-center\">\n {{ 'i18n_no_result' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsInputsSearchComponent, selector: "libs_ui-components-inputs-search", inputs: ["disable", "readonly", "searchConfig", "ignoreAutoComplete", "debounceTime", "ignoreStopPropagationEvent", "focusTimeOut", "blurTimeOut"], outputs: ["outSearch", "outValueChange", "outIconLeft", "outIconRight", "outFocusAndBlur", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
90
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsEmojiComponent, isStandalone: true, selector: "libs_ui-components-emoji", inputs: { configPopover: { classPropertyName: "configPopover", publicName: "configPopover", isSignal: true, isRequired: false, transformFunction: null }, isNgContent: { classPropertyName: "isNgContent", publicName: "isNgContent", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, modePopoverPosition: { classPropertyName: "modePopoverPosition", publicName: "modePopoverPosition", isSignal: true, isRequired: false, transformFunction: null }, classPopup: { classPropertyName: "classPopup", publicName: "classPopup", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, classIconInclude: { classPropertyName: "classIconInclude", publicName: "classIconInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outEventEmoji: "outEventEmoji", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "emojiRef", first: true, predicate: ["emojiRef"], descendants: true, isSignal: true }, { propertyName: "elementViewEmoji", first: true, predicate: ["elementViewEmoji"], descendants: true, isSignal: true }], ngImport: i0, template: "<libs_ui-components-popover\n [classInclude]=\"classInclude()\"\n [config]=\"{\n content: 'i18n_text_emoji',\n zIndex: (zIndex() || 1200) + 4,\n }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n <libs_ui-components-popover\n type=\"other\"\n mode=\"click-toggle\"\n class=\"flex\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"configPopover()\"\n [debugId]=\"'debug icon emoij'\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n @if (!isNgContent()) {\n <i class=\"before:!text-[16px] before:!text-[#6a7383] {{ classIconInclude() }}\"></i>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n</libs_ui-components-popover>\n<ng-template #emojiRef>\n <div class=\"py-[10px] flex flex-col {{ classPopup() }}\">\n <div class=\"mx-[10px] mb-[12px]\">\n <div\n class=\"flex\"\n LibsUiComponentsScrollOverlayDirective>\n @for (category of emojisCategories(); track category) {\n <div\n class=\"grow p-[4px] rounded-[4px] bg-[#ffffff] libs-ui-bg-list-hover\"\n [class.libs-ui-bg-list-active]=\"filter().groupSelected === category.group_name\"\n (click)=\"handlerChooseCategory($event, category)\">\n <div class=\"mt-[1px] cursor-pointer text-[18px]\">\n {{ category.iconGroup }}\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"mx-[10px] mb-[12px]\">\n <libs_ui-components-inputs-search\n [searchConfig]=\"{\n placeholder: 'i18n_search',\n }\"\n [debounceTime]=\"0\"\n (outSearch)=\"handlerSearchEmoji($event)\" />\n </div>\n <div class=\"h-full w-full relative\">\n <div\n #elementViewEmoji\n class=\"w-full h-full px-[10px] absolute\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (dataEmojiView().dataView.length) {\n @for (item of dataEmojiView().dataView; track $index) {\n <!-- n\u1EBFu sau c\u00F3 y\u00EAu c\u00E2u hover hi\u1EC3n th\u1ECB tooltio th\u00EC b\u1ECF [ignoreShowPopover]=\"true\" -->\n <span\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"true\"\n [config]=\"{ content: item.description, zIndex: (zIndex() || 1200) + 5 }\"\n class=\"cursor-pointer flex shrink-0 h-fit m-[2px] float-left\"\n (click)=\"handlerAddEmoji(item)\">\n {{ item.emoji }}\n </span>\n }\n } @else {\n <div class=\"libs-ui-font-h5r text-[#9ca2ad] h-full w-full items-center justify-center\">\n {{ 'i18n_no_result' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsInputsSearchComponent, selector: "libs_ui-components-inputs-search", inputs: ["disable", "readonly", "searchConfig", "ignoreAutoComplete", "debounceTime", "ignoreStopPropagationEvent", "focusTimeOut", "blurTimeOut"], outputs: ["outSearch", "outValueChange", "outIconLeft", "outIconRight", "outFocusAndBlur", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
91
91
  }
92
92
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsEmojiComponent, decorators: [{
93
93
  type: Component,
94
- args: [{ selector: 'libs_ui-components-emoji', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsSearchComponent, LibsUiComponentsPopoverComponent, LibsUiComponentsScrollOverlayDirective], template: "<libs_ui-components-popover\n [classInclude]=\"classInclude()\"\n [config]=\"{\n content: 'i18n_text_emoji',\n zIndex: (zIndex() || 1200) + 4,\n }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n <libs_ui-components-popover\n type=\"other\"\n mode=\"click-toggle\"\n class=\"flex\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"configPopover()\"\n [debugId]=\"'debug icon emoij'\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n @if (!isNgContent()) {\n <i class=\"before:!text-[16px] before:!text-[#6a7383] {{ classIconInclude() }}\"></i>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n</libs_ui-components-popover>\n<ng-template #emojiRef>\n <div class=\"py-[10px] flex flex-col {{ classPopup() }}\">\n <div class=\"mx-[10px] mb-[12px]\">\n <div\n class=\"flex\"\n LibsUiComponentsScrollOverlayDirective>\n @for (category of emojisCategories(); track category) {\n <div\n class=\"grow p-[4px] rounded-[4px] bg-[#ffffff] libs-ui-bg-list-hover\"\n (click)=\"handlerChooseCategory($event, category)\">\n <div class=\"mt-[1px] cursor-pointer text-[18px]\">\n {{ category.iconGroup }}\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"mx-[10px] mb-[12px]\">\n <libs_ui-components-inputs-search\n [searchConfig]=\"{\n placeholder: 'i18n_search',\n }\"\n [debounceTime]=\"0\"\n (outSearch)=\"handlerSearchEmoji($event)\" />\n </div>\n <div class=\"h-full w-full relative\">\n <div\n #elementViewEmoji\n class=\"w-full h-full px-[10px] absolute\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (dataEmojiView().dataView.length) {\n @for (item of dataEmojiView().dataView; track $index) {\n <!-- n\u1EBFu sau c\u00F3 y\u00EAu c\u00E2u hover hi\u1EC3n th\u1ECB tooltio th\u00EC b\u1ECF [ignoreShowPopover]=\"true\" -->\n <span\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"true\"\n [config]=\"{ content: item.description, zIndex: (zIndex() || 1200) + 5 }\"\n class=\"cursor-pointer flex shrink-0 h-fit m-[2px] float-left\"\n (click)=\"handlerAddEmoji(item)\">\n {{ item.emoji }}\n </span>\n }\n } @else {\n <div class=\"libs-ui-font-h5r text-[#9ca2ad] h-full w-full items-center justify-center\">\n {{ 'i18n_no_result' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
94
+ args: [{ selector: 'libs_ui-components-emoji', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsSearchComponent, LibsUiComponentsPopoverComponent, LibsUiComponentsScrollOverlayDirective], template: "<libs_ui-components-popover\n [classInclude]=\"classInclude()\"\n [config]=\"{\n content: 'i18n_text_emoji',\n zIndex: (zIndex() || 1200) + 4,\n }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n <libs_ui-components-popover\n type=\"other\"\n mode=\"click-toggle\"\n class=\"flex\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"configPopover()\"\n [debugId]=\"'debug icon emoij'\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n @if (!isNgContent()) {\n <i class=\"before:!text-[16px] before:!text-[#6a7383] {{ classIconInclude() }}\"></i>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n</libs_ui-components-popover>\n<ng-template #emojiRef>\n <div class=\"py-[10px] flex flex-col {{ classPopup() }}\">\n <div class=\"mx-[10px] mb-[12px]\">\n <div\n class=\"flex\"\n LibsUiComponentsScrollOverlayDirective>\n @for (category of emojisCategories(); track category) {\n <div\n class=\"grow p-[4px] rounded-[4px] bg-[#ffffff] libs-ui-bg-list-hover\"\n [class.libs-ui-bg-list-active]=\"filter().groupSelected === category.group_name\"\n (click)=\"handlerChooseCategory($event, category)\">\n <div class=\"mt-[1px] cursor-pointer text-[18px]\">\n {{ category.iconGroup }}\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"mx-[10px] mb-[12px]\">\n <libs_ui-components-inputs-search\n [searchConfig]=\"{\n placeholder: 'i18n_search',\n }\"\n [debounceTime]=\"0\"\n (outSearch)=\"handlerSearchEmoji($event)\" />\n </div>\n <div class=\"h-full w-full relative\">\n <div\n #elementViewEmoji\n class=\"w-full h-full px-[10px] absolute\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (dataEmojiView().dataView.length) {\n @for (item of dataEmojiView().dataView; track $index) {\n <!-- n\u1EBFu sau c\u00F3 y\u00EAu c\u00E2u hover hi\u1EC3n th\u1ECB tooltio th\u00EC b\u1ECF [ignoreShowPopover]=\"true\" -->\n <span\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"true\"\n [config]=\"{ content: item.description, zIndex: (zIndex() || 1200) + 5 }\"\n class=\"cursor-pointer flex shrink-0 h-fit m-[2px] float-left\"\n (click)=\"handlerAddEmoji(item)\">\n {{ item.emoji }}\n </span>\n }\n } @else {\n <div class=\"libs-ui-font-h5r text-[#9ca2ad] h-full w-full items-center justify-center\">\n {{ 'i18n_no_result' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
95
95
  }], ctorParameters: () => [] });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9lbW9qaS9zcmMvZW1vamkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9lbW9qaS9zcmMvZW1vamkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFlLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEssT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUYsT0FBTyxFQUFpRCxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlILE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTVGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFVdEUsTUFBTSxPQUFPLDhCQUE4QjtJQUN6QyxtQkFBbUI7SUFDWCxnQkFBZ0IsR0FBRyxNQUFNLENBQTJDLFNBQVMsQ0FBQyxDQUFDO0lBRTdFLGdCQUFnQixHQUFHLE1BQU0sQ0FBcUIsSUFBSSxLQUFLLEVBQWUsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLGFBQWEsR0FBRyxNQUFNLENBQXNELEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVySCxnQkFBZ0I7SUFDUCxhQUFhLEdBQUcsS0FBSyxDQUErQyxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hLLFdBQVcsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUMvQixNQUFNLEdBQUcsS0FBSyxDQUE2QixDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLG1CQUFtQixHQUFHLEtBQUssRUFBMEMsQ0FBQztJQUN0RSxVQUFVLEdBQUcsS0FBSyxDQUE2QixxQkFBcUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUM1SCxZQUFZLEdBQUcsS0FBSyxDQUE2QixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLGdCQUFnQixHQUFHLEtBQUssQ0FBNkIsa0JBQWtCLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFFckksaUJBQWlCO0lBQ1IsYUFBYSxHQUFHLE1BQU0sRUFBVSxDQUFDO0lBQ2pDLG1CQUFtQixHQUFHLE1BQU0sRUFBZ0MsQ0FBQztJQUV0RSxnQkFBZ0I7SUFDQyxRQUFRLEdBQUcsU0FBUyxDQUFpQyxVQUFVLENBQUMsQ0FBQztJQUNqRSxnQkFBZ0IsR0FBRyxTQUFTLENBQWdDLGtCQUFrQixDQUFDLENBQUM7SUFFakc7UUFDRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUN2QixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEIsR0FBRyxJQUFJO1lBQ1AsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUMvQixNQUFNLEVBQUUsSUFBSSxLQUFLLEVBQVU7U0FDNUIsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUVGLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUNsQixTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNiLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsOERBQThEO29CQUM3RCxJQUFJLENBQUMsYUFBYSxFQUFVLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0UsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWU7SUFDTCxLQUFLLENBQUMsZUFBZSxDQUFDLElBQVk7UUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFUyxLQUFLLENBQUMsdUJBQXVCLENBQUMsS0FBbUM7UUFDekUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFUyxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBWSxFQUFFLFFBQXFCO1FBQ3ZFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRVMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQWlCO1FBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVTLG1CQUFtQjtRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxZQUFZLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQWdCLENBQUM7UUFDN0csTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsTCxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLEVBQUUsSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQztRQUU5RSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNJLENBQUM7d0dBbEdVLDhCQUE4Qjs0RkFBOUIsOEJBQThCLDA0Q0NqQjNDLHd0RkEwRUEsMkNEM0RZLGVBQWUsNEZBQUUscUNBQXFDLG9WQUFFLGdDQUFnQyxvZ0JBQUUsc0NBQXNDOzs0RkFFL0gsOEJBQThCO2tCQVIxQyxTQUFTOytCQUVFLDBCQUEwQixjQUV4QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUscUNBQXFDLEVBQUUsZ0NBQWdDLEVBQUUsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBlZmZlY3QsIEVsZW1lbnRSZWYsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtc2VhcmNoJztcbmltcG9ydCB7IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQsIElQb3BvdmVyT3ZlcmxheSwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBkZWxldGVVbmljb2RlIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBkZWZhdWx0Q29uZmlnUG9wb3ZlciwgZW1vamlzIH0gZnJvbSAnLi9kZWZpbmVzL2Vtb2ppLmRlZmluZSc7XG5pbXBvcnQgeyBJRW1vamksIElHcm91cEVtb2ppIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Vtb2ppLmludGVyZmFjZSc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZW1vamknLFxuICB0ZW1wbGF0ZVVybDogJy4vZW1vamkuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c1NlYXJjaENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0Vtb2ppQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJpdmF0ZSBmdW5jdGlvbnNDb250cm9sID0gc2lnbmFsPElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJvdGVjdGVkIGVtb2ppc0NhdGVnb3JpZXMgPSBzaWduYWw8QXJyYXk8SUdyb3VwRW1vamk+PihuZXcgQXJyYXk8SUdyb3VwRW1vamk+KCkpO1xuICBwcm90ZWN0ZWQgZmlsdGVyID0gc2lnbmFsKHsgcGFnZTogMCwga2V5U2VhcmNoOiAnJywgZ3JvdXBTZWxlY3RlZDogJ1NtaWxleXMgJiBFbW90aW9uJywgcGVyUGFnZTogMTcwIH0pO1xuICBwcm90ZWN0ZWQgZGF0YUVtb2ppVmlldyA9IHNpZ25hbDx7IGRhdGFWaWV3OiBBcnJheTxJRW1vamk+OyBhbGxEYXRhOiBBcnJheTxJRW1vamk+IH0+KHsgZGF0YVZpZXc6IFtdLCBhbGxEYXRhOiBbXSB9KTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGNvbmZpZ1BvcG92ZXIgPSBpbnB1dDxJUG9wb3Zlck92ZXJsYXksIElQb3BvdmVyT3ZlcmxheSB8IHVuZGVmaW5lZD4oZGVmYXVsdENvbmZpZ1BvcG92ZXIoKSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gKHZhbHVlID8gdmFsdWUgOiBkZWZhdWx0Q29uZmlnUG9wb3ZlcigpKSB9KTtcbiAgcmVhZG9ubHkgaXNOZ0NvbnRlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMCB9KTtcbiAgcmVhZG9ubHkgbW9kZVBvcG92ZXJQb3NpdGlvbiA9IGlucHV0PCdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBjbGFzc1BvcHVwID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCd3LVsyOTBweF0gaC1bMjQ1cHhdJywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAndy1bMjkwcHhdIGgtWzI0NXB4XScgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJY29uSW5jbHVkZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignbGlicy11aS1pY29uLWFkZCcsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gJ2xpYnMtdWktaWNvbi1hZGQnIH0pO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEV2ZW50RW1vamkgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVtb2ppUmVmID0gdmlld0NoaWxkPFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oJ2Vtb2ppUmVmJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFZpZXdFbW9qaSA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oJ2VsZW1lbnRWaWV3RW1vamknKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmVtb2ppc0NhdGVnb3JpZXMuc2V0KFxuICAgICAgZW1vamlzKCkubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBpY29uR3JvdXA6IGl0ZW0uZW1vamlzWzBdLmVtb2ppLFxuICAgICAgICBlbW9qaXM6IG5ldyBBcnJheTxJRW1vamk+KCksXG4gICAgICB9KSlcbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnpJbmRleCgpKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb25maWdQb3BvdmVyKCkuekluZGV4ID0gdGhpcy56SW5kZXgoKSArIDU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tb2RlUG9wb3ZlclBvc2l0aW9uKCkgJiYgdGhpcy5jb25maWdQb3BvdmVyKCkucG9zaXRpb24pIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICh0aGlzLmNvbmZpZ1BvcG92ZXIoKSBhcyBhbnkpLnBvc2l0aW9uLm1vZGUgPSB0aGlzLm1vZGVQb3BvdmVyUG9zaXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZ1BvcG92ZXIoKSkge1xuICAgICAgICB0aGlzLmNvbmZpZ1BvcG92ZXIoKS50ZW1wbGF0ZSA9IHRoaXMuZW1vamlSZWYoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldERhdGFWaWV3KCk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJBZGRFbW9qaShkYXRhOiBJRW1vamkpIHtcbiAgICB0aGlzLm91dEV2ZW50RW1vamkuZW1pdChkYXRhLmVtb2ppKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyRnVuY3Rpb25zQ29udHJvbChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMuZnVuY3Rpb25zQ29udHJvbC5zZXQoZXZlbnQpO1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jdGlvbnNDb250cm9sKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNob29zZUNhdGVnb3J5KGV2ZW50OiBFdmVudCwgY2F0ZWdvcnk6IElHcm91cEVtb2ppKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5maWx0ZXIudXBkYXRlKChkYXRhKSA9PiAoeyAuLi5kYXRhLCBwYWdlOiAwLCBncm91cFNlbGVjdGVkOiBjYXRlZ29yeS5ncm91cF9uYW1lIH0pKTtcbiAgICB0aGlzLmdldERhdGFWaWV3KCk7XG4gICAgdGhpcy5lbGVtZW50Vmlld0Vtb2ppKCk/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsKHsgdG9wOiAwIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWFyY2hFbW9qaShrZXlTZWFyY2g6IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyLnVwZGF0ZSgoZGF0YSkgPT4gKHsgLi4uZGF0YSwgcGFnZTogMCwga2V5U2VhcmNoOiBrZXlTZWFyY2gudHJpbSgpIH0pKTtcbiAgICB0aGlzLmdldERhdGFWaWV3KCk7XG4gICAgdGhpcy5lbGVtZW50Vmlld0Vtb2ppKCk/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsKHsgdG9wOiAwIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTY3JvbGxCb3R0b20oKSB7XG4gICAgdGhpcy5maWx0ZXIudXBkYXRlKChkYXRhKSA9PiAoeyAuLi5kYXRhLCBwYWdlOiBkYXRhLnBhZ2UgKyAxIH0pKTtcbiAgICB0aGlzLmdldERhdGFWaWV3KCk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGFWaWV3KCkge1xuICAgIGNvbnN0IGVtb2ppQnlHcm91cCA9IGVtb2ppcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZ3JvdXBfbmFtZSA9PT0gdGhpcy5maWx0ZXIoKS5ncm91cFNlbGVjdGVkKSBhcyBJR3JvdXBFbW9qaTtcbiAgICBjb25zdCBlbW9qaU1hdGNoID0gZW1vamlCeUdyb3VwLmVtb2ppcy5maWx0ZXIoKGl0ZW0pID0+IGRlbGV0ZVVuaWNvZGUoaXRlbS5kZXNjcmlwdGlvbikudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhkZWxldGVVbmljb2RlKHRoaXMuZmlsdGVyKCkua2V5U2VhcmNoLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSk7XG5cbiAgICBjb25zdCB7IHBhZ2UsIHBlclBhZ2UgfSA9IHRoaXMuZmlsdGVyKCk7XG4gICAgY29uc3QgZGF0YUluUGFnZSA9IGVtb2ppTWF0Y2guc2xpY2UocGFnZSAqIHBlclBhZ2UsIHBhZ2UgKiBwZXJQYWdlICsgcGVyUGFnZSk7XG5cbiAgICB0aGlzLmRhdGFFbW9qaVZpZXcudXBkYXRlKChpdGVtKSA9PiAoeyAuLi5pdGVtLCBhbGxEYXRhOiBlbW9qaU1hdGNoLCBkYXRhVmlldzogcGFnZSA/IFsuLi5pdGVtLmRhdGFWaWV3LCAuLi5kYXRhSW5QYWdlXSA6IGRhdGFJblBhZ2UgfSkpO1xuICB9XG59XG4iLCI8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0luY2x1ZGUoKVwiXG4gIFtjb25maWddPVwie1xuICAgIGNvbnRlbnQ6ICdpMThuX3RleHRfZW1vamknLFxuICAgIHpJbmRleDogKHpJbmRleCgpIHx8IDEyMDApICsgNCxcbiAgfVwiXG4gIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbnNDb250cm9sKCRldmVudClcIj5cbiAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgdHlwZT1cIm90aGVyXCJcbiAgICBtb2RlPVwiY2xpY2stdG9nZ2xlXCJcbiAgICBjbGFzcz1cImZsZXhcIlxuICAgIFtpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlXT1cInRydWVcIlxuICAgIFtjb25maWddPVwiY29uZmlnUG9wb3ZlcigpXCJcbiAgICBbZGVidWdJZF09XCInZGVidWcgaWNvbiBlbW9paidcIlxuICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbnNDb250cm9sKCRldmVudClcIj5cbiAgICBAaWYgKCFpc05nQ29udGVudCgpKSB7XG4gICAgICA8aSBjbGFzcz1cImJlZm9yZTohdGV4dC1bMTZweF0gYmVmb3JlOiF0ZXh0LVsjNmE3MzgzXSB7eyBjbGFzc0ljb25JbmNsdWRlKCkgfX1cIj48L2k+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgfVxuICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbjxuZy10ZW1wbGF0ZSAjZW1vamlSZWY+XG4gIDxkaXYgY2xhc3M9XCJweS1bMTBweF0gZmxleCBmbGV4LWNvbCB7eyBjbGFzc1BvcHVwKCkgfX1cIj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtWzEwcHhdIG1iLVsxMnB4XVwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXhcIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZT5cbiAgICAgICAgQGZvciAoY2F0ZWdvcnkgb2YgZW1vamlzQ2F0ZWdvcmllcygpOyB0cmFjayBjYXRlZ29yeSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdyBwLVs0cHhdIHJvdW5kZWQtWzRweF0gYmctWyNmZmZmZmZdIGxpYnMtdWktYmctbGlzdC1ob3ZlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNob29zZUNhdGVnb3J5KCRldmVudCwgY2F0ZWdvcnkpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtWzFweF0gY3Vyc29yLXBvaW50ZXIgdGV4dC1bMThweF1cIj5cbiAgICAgICAgICAgICAge3sgY2F0ZWdvcnkuaWNvbkdyb3VwIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm14LVsxMHB4XSBtYi1bMTJweF1cIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXNlYXJjaFxuICAgICAgICBbc2VhcmNoQ29uZmlnXT1cIntcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ2kxOG5fc2VhcmNoJyxcbiAgICAgICAgfVwiXG4gICAgICAgIFtkZWJvdW5jZVRpbWVdPVwiMFwiXG4gICAgICAgIChvdXRTZWFyY2gpPVwiaGFuZGxlclNlYXJjaEVtb2ppKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgdy1mdWxsIHJlbGF0aXZlXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNlbGVtZW50Vmlld0Vtb2ppXG4gICAgICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbCBweC1bMTBweF0gYWJzb2x1dGVcIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICAob3V0U2Nyb2xsQm90dG9tKT1cImhhbmRsZXJTY3JvbGxCb3R0b20oKVwiPlxuICAgICAgICBAaWYgKGRhdGFFbW9qaVZpZXcoKS5kYXRhVmlldy5sZW5ndGgpIHtcbiAgICAgICAgICBAZm9yIChpdGVtIG9mIGRhdGFFbW9qaVZpZXcoKS5kYXRhVmlldzsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8IS0tIG7hur91IHNhdSBjw7MgecOqdSBjw6J1IGhvdmVyIGhp4buDbiB0aOG7iyB0b29sdGlvIHRow6wgYuG7jyBbaWdub3JlU2hvd1BvcG92ZXJdPVwidHJ1ZVwiIC0tPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cInsgY29udGVudDogaXRlbS5kZXNjcmlwdGlvbiwgekluZGV4OiAoekluZGV4KCkgfHwgMTIwMCkgKyA1IH1cIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGZsZXggc2hyaW5rLTAgaC1maXQgbS1bMnB4XSBmbG9hdC1sZWZ0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJBZGRFbW9qaShpdGVtKVwiPlxuICAgICAgICAgICAgICB7eyBpdGVtLmVtb2ppIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg1ciB0ZXh0LVsjOWNhMmFkXSBoLWZ1bGwgdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAge3sgJ2kxOG5fbm9fcmVzdWx0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9lbW9qaS9zcmMvZW1vamkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9lbW9qaS9zcmMvZW1vamkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFlLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEssT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUYsT0FBTyxFQUFpRCxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlILE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTVGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFVdEUsTUFBTSxPQUFPLDhCQUE4QjtJQUN6QyxtQkFBbUI7SUFDWCxnQkFBZ0IsR0FBRyxNQUFNLENBQTJDLFNBQVMsQ0FBQyxDQUFDO0lBRTdFLGdCQUFnQixHQUFHLE1BQU0sQ0FBcUIsSUFBSSxLQUFLLEVBQWUsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLGFB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QUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNJLENBQUM7d0dBbEdVLDhCQUE4Qjs0RkFBOUIsOEJBQThCLDA0Q0NqQjNDLHV6RkEyRUEsMkNENURZLGVBQWUsNEZBQUUscUNBQXFDLG9WQUFFLGdDQUFnQyxvZ0JBQUUsc0NBQXNDOzs0RkFFL0gsOEJBQThCO2tCQVIxQyxTQUFTOytCQUVFLDBCQUEwQixjQUV4QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUscUNBQXFDLEVBQUUsZ0NBQWdDLEVBQUUsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBlZmZlY3QsIEVsZW1lbnRSZWYsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtc2VhcmNoJztcbmltcG9ydCB7IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQsIElQb3BvdmVyT3ZlcmxheSwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBkZWxldGVVbmljb2RlIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBkZWZhdWx0Q29uZmlnUG9wb3ZlciwgZW1vamlzIH0gZnJvbSAnLi9kZWZpbmVzL2Vtb2ppLmRlZmluZSc7XG5pbXBvcnQgeyBJRW1vamksIElHcm91cEVtb2ppIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Vtb2ppLmludGVyZmFjZSc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZW1vamknLFxuICB0ZW1wbGF0ZVVybDogJy4vZW1vamkuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c1NlYXJjaENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0Vtb2ppQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJpdmF0ZSBmdW5jdGlvbnNDb250cm9sID0gc2lnbmFsPElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJvdGVjdGVkIGVtb2ppc0NhdGVnb3JpZXMgPSBzaWduYWw8QXJyYXk8SUdyb3VwRW1vamk+PihuZXcgQXJyYXk8SUdyb3VwRW1vamk+KCkpO1xuICBwcm90ZWN0ZWQgZmlsdGVyID0gc2lnbmFsKHsgcGFnZTogMCwga2V5U2VhcmNoOiAnJywgZ3JvdXBTZWxlY3RlZDogJ1NtaWxleXMgJiBFbW90aW9uJywgcGVyUGFnZTogMTcwIH0pO1xuICBwcm90ZWN0ZWQgZGF0YUVtb2ppVmlldyA9IHNpZ25hbDx7IGRhdGFWaWV3OiBBcnJheTxJRW1vamk+OyBhbGxEYXRhOiBBcnJheTxJRW1vamk+IH0+KHsgZGF0YVZpZXc6IFtdLCBhbGxEYXRhOiBbXSB9KTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGNvbmZpZ1BvcG92ZXIgPSBpbnB1dDxJUG9wb3Zlck92ZXJsYXksIElQb3BvdmVyT3ZlcmxheSB8IHVuZGVmaW5lZD4oZGVmYXVsdENvbmZpZ1BvcG92ZXIoKSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gKHZhbHVlID8gdmFsdWUgOiBkZWZhdWx0Q29uZmlnUG9wb3ZlcigpKSB9KTtcbiAgcmVhZG9ubHkgaXNOZ0NvbnRlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMCB9KTtcbiAgcmVhZG9ubHkgbW9kZVBvcG92ZXJQb3NpdGlvbiA9IGlucHV0PCdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBjbGFzc1BvcHVwID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCd3LVsyOTBweF0gaC1bMjQ1cHhdJywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAndy1bMjkwcHhdIGgtWzI0NXB4XScgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJY29uSW5jbHVkZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignbGlicy11aS1pY29uLWFkZCcsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gJ2xpYnMtdWktaWNvbi1hZGQnIH0pO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEV2ZW50RW1vamkgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVtb2ppUmVmID0gdmlld0NoaWxkPFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oJ2Vtb2ppUmVmJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFZpZXdFbW9qaSA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oJ2VsZW1lbnRWaWV3RW1vamknKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmVtb2ppc0NhdGVnb3JpZXMuc2V0KFxuICAgICAgZW1vamlzKCkubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBpY29uR3JvdXA6IGl0ZW0uZW1vamlzWzBdLmVtb2ppLFxuICAgICAgICBlbW9qaXM6IG5ldyBBcnJheTxJRW1vamk+KCksXG4gICAgICB9KSlcbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnpJbmRleCgpKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb25maWdQb3BvdmVyKCkuekluZGV4ID0gdGhpcy56SW5kZXgoKSArIDU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tb2RlUG9wb3ZlclBvc2l0aW9uKCkgJiYgdGhpcy5jb25maWdQb3BvdmVyKCkucG9zaXRpb24pIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICh0aGlzLmNvbmZpZ1BvcG92ZXIoKSBhcyBhbnkpLnBvc2l0aW9uLm1vZGUgPSB0aGlzLm1vZGVQb3BvdmVyUG9zaXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZ1BvcG92ZXIoKSkge1xuICAgICAgICB0aGlzLmNvbmZpZ1BvcG92ZXIoKS50ZW1wbGF0ZSA9IHRoaXMuZW1vamlSZWYoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldERhdGFWaWV3KCk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJBZGRFbW9qaShkYXRhOiBJRW1vamkpIHtcbiAgICB0aGlzLm91dEV2ZW50RW1vamkuZW1pdChkYXRhLmVtb2ppKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyRnVuY3Rpb25zQ29udHJvbChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMuZnVuY3Rpb25zQ29udHJvbC5zZXQoZXZlbnQpO1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jdGlvbnNDb250cm9sKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNob29zZUNhdGVnb3J5KGV2ZW50OiBFdmVudCwgY2F0ZWdvcnk6IElHcm91cEVtb2ppKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5maWx0ZXIudXBkYXRlKChkYXRhKSA9PiAoeyAuLi5kYXRhLCBwYWdlOiAwLCBncm91cFNlbGVjdGVkOiBjYXRlZ29yeS5ncm91cF9uYW1lIH0pKTtcbiAgICB0aGlzLmdldERhdGFWaWV3KCk7XG4gICAgdGhpcy5lbGVtZW50Vmlld0Vtb2ppKCk/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsKHsgdG9wOiAwIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWFyY2hFbW9qaShrZXlTZWFyY2g6IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyLnVwZGF0ZSgoZGF0YSkgPT4gKHsgLi4uZGF0YSwgcGFnZTogMCwga2V5U2VhcmNoOiBrZXlTZWFyY2gudHJpbSgpIH0pKTtcbiAgICB0aGlzLmdldERhdGFWaWV3KCk7XG4gICAgdGhpcy5lbGVtZW50Vmlld0Vtb2ppKCk/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsKHsgdG9wOiAwIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTY3JvbGxCb3R0b20oKSB7XG4gICAgdGhpcy5maWx0ZXIudXBkYXRlKChkYXRhKSA9PiAoeyAuLi5kYXRhLCBwYWdlOiBkYXRhLnBhZ2UgKyAxIH0pKTtcbiAgICB0aGlzLmdldERhdGFWaWV3KCk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGFWaWV3KCkge1xuICAgIGNvbnN0IGVtb2ppQnlHcm91cCA9IGVtb2ppcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZ3JvdXBfbmFtZSA9PT0gdGhpcy5maWx0ZXIoKS5ncm91cFNlbGVjdGVkKSBhcyBJR3JvdXBFbW9qaTtcbiAgICBjb25zdCBlbW9qaU1hdGNoID0gZW1vamlCeUdyb3VwLmVtb2ppcy5maWx0ZXIoKGl0ZW0pID0+IGRlbGV0ZVVuaWNvZGUoaXRlbS5kZXNjcmlwdGlvbikudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhkZWxldGVVbmljb2RlKHRoaXMuZmlsdGVyKCkua2V5U2VhcmNoLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSk7XG5cbiAgICBjb25zdCB7IHBhZ2UsIHBlclBhZ2UgfSA9IHRoaXMuZmlsdGVyKCk7XG4gICAgY29uc3QgZGF0YUluUGFnZSA9IGVtb2ppTWF0Y2guc2xpY2UocGFnZSAqIHBlclBhZ2UsIHBhZ2UgKiBwZXJQYWdlICsgcGVyUGFnZSk7XG5cbiAgICB0aGlzLmRhdGFFbW9qaVZpZXcudXBkYXRlKChpdGVtKSA9PiAoeyAuLi5pdGVtLCBhbGxEYXRhOiBlbW9qaU1hdGNoLCBkYXRhVmlldzogcGFnZSA/IFsuLi5pdGVtLmRhdGFWaWV3LCAuLi5kYXRhSW5QYWdlXSA6IGRhdGFJblBhZ2UgfSkpO1xuICB9XG59XG4iLCI8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0luY2x1ZGUoKVwiXG4gIFtjb25maWddPVwie1xuICAgIGNvbnRlbnQ6ICdpMThuX3RleHRfZW1vamknLFxuICAgIHpJbmRleDogKHpJbmRleCgpIHx8IDEyMDApICsgNCxcbiAgfVwiXG4gIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbnNDb250cm9sKCRldmVudClcIj5cbiAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyXG4gICAgdHlwZT1cIm90aGVyXCJcbiAgICBtb2RlPVwiY2xpY2stdG9nZ2xlXCJcbiAgICBjbGFzcz1cImZsZXhcIlxuICAgIFtpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlXT1cInRydWVcIlxuICAgIFtjb25maWddPVwiY29uZmlnUG9wb3ZlcigpXCJcbiAgICBbZGVidWdJZF09XCInZGVidWcgaWNvbiBlbW9paidcIlxuICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbnNDb250cm9sKCRldmVudClcIj5cbiAgICBAaWYgKCFpc05nQ29udGVudCgpKSB7XG4gICAgICA8aSBjbGFzcz1cImJlZm9yZTohdGV4dC1bMTZweF0gYmVmb3JlOiF0ZXh0LVsjNmE3MzgzXSB7eyBjbGFzc0ljb25JbmNsdWRlKCkgfX1cIj48L2k+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgfVxuICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbjxuZy10ZW1wbGF0ZSAjZW1vamlSZWY+XG4gIDxkaXYgY2xhc3M9XCJweS1bMTBweF0gZmxleCBmbGV4LWNvbCB7eyBjbGFzc1BvcHVwKCkgfX1cIj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtWzEwcHhdIG1iLVsxMnB4XVwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXhcIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZT5cbiAgICAgICAgQGZvciAoY2F0ZWdvcnkgb2YgZW1vamlzQ2F0ZWdvcmllcygpOyB0cmFjayBjYXRlZ29yeSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdyBwLVs0cHhdIHJvdW5kZWQtWzRweF0gYmctWyNmZmZmZmZdIGxpYnMtdWktYmctbGlzdC1ob3ZlclwiXG4gICAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWFjdGl2ZV09XCJmaWx0ZXIoKS5ncm91cFNlbGVjdGVkID09PSBjYXRlZ29yeS5ncm91cF9uYW1lXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2hvb3NlQ2F0ZWdvcnkoJGV2ZW50LCBjYXRlZ29yeSlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC1bMXB4XSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxOHB4XVwiPlxuICAgICAgICAgICAgICB7eyBjYXRlZ29yeS5pY29uR3JvdXAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtWzEwcHhdIG1iLVsxMnB4XVwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtc2VhcmNoXG4gICAgICAgIFtzZWFyY2hDb25maWddPVwie1xuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnaTE4bl9zZWFyY2gnLFxuICAgICAgICB9XCJcbiAgICAgICAgW2RlYm91bmNlVGltZV09XCIwXCJcbiAgICAgICAgKG91dFNlYXJjaCk9XCJoYW5kbGVyU2VhcmNoRW1vamkoJGV2ZW50KVwiIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImgtZnVsbCB3LWZ1bGwgcmVsYXRpdmVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI2VsZW1lbnRWaWV3RW1vamlcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIHB4LVsxMHB4XSBhYnNvbHV0ZVwiXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXG4gICAgICAgIChvdXRTY3JvbGxCb3R0b20pPVwiaGFuZGxlclNjcm9sbEJvdHRvbSgpXCI+XG4gICAgICAgIEBpZiAoZGF0YUVtb2ppVmlldygpLmRhdGFWaWV3Lmxlbmd0aCkge1xuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZGF0YUVtb2ppVmlldygpLmRhdGFWaWV3OyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDwhLS0gbuG6v3Ugc2F1IGPDsyB5w6p1IGPDonUgaG92ZXIgaGnhu4NuIHRo4buLIHRvb2x0aW8gdGjDrCBi4buPIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJ0cnVlXCIgLS0+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwieyBjb250ZW50OiBpdGVtLmRlc2NyaXB0aW9uLCB6SW5kZXg6ICh6SW5kZXgoKSB8fCAxMjAwKSArIDUgfVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZmxleCBzaHJpbmstMCBoLWZpdCBtLVsycHhdIGZsb2F0LWxlZnRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckFkZEVtb2ppKGl0ZW0pXCI+XG4gICAgICAgICAgICAgIHt7IGl0ZW0uZW1vamkgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIHRleHQtWyM5Y2EyYWRdIGgtZnVsbCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICB7eyAnaTE4bl9ub19yZXN1bHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1885,11 +1885,11 @@ class LibsUiComponentsEmojiComponent {
1885
1885
  this.dataEmojiView.update((item) => ({ ...item, allData: emojiMatch, dataView: page ? [...item.dataView, ...dataInPage] : dataInPage }));
1886
1886
  }
1887
1887
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsEmojiComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1888
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsEmojiComponent, isStandalone: true, selector: "libs_ui-components-emoji", inputs: { configPopover: { classPropertyName: "configPopover", publicName: "configPopover", isSignal: true, isRequired: false, transformFunction: null }, isNgContent: { classPropertyName: "isNgContent", publicName: "isNgContent", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, modePopoverPosition: { classPropertyName: "modePopoverPosition", publicName: "modePopoverPosition", isSignal: true, isRequired: false, transformFunction: null }, classPopup: { classPropertyName: "classPopup", publicName: "classPopup", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, classIconInclude: { classPropertyName: "classIconInclude", publicName: "classIconInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outEventEmoji: "outEventEmoji", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "emojiRef", first: true, predicate: ["emojiRef"], descendants: true, isSignal: true }, { propertyName: "elementViewEmoji", first: true, predicate: ["elementViewEmoji"], descendants: true, isSignal: true }], ngImport: i0, template: "<libs_ui-components-popover\n [classInclude]=\"classInclude()\"\n [config]=\"{\n content: 'i18n_text_emoji',\n zIndex: (zIndex() || 1200) + 4,\n }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n <libs_ui-components-popover\n type=\"other\"\n mode=\"click-toggle\"\n class=\"flex\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"configPopover()\"\n [debugId]=\"'debug icon emoij'\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n @if (!isNgContent()) {\n <i class=\"before:!text-[16px] before:!text-[#6a7383] {{ classIconInclude() }}\"></i>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n</libs_ui-components-popover>\n<ng-template #emojiRef>\n <div class=\"py-[10px] flex flex-col {{ classPopup() }}\">\n <div class=\"mx-[10px] mb-[12px]\">\n <div\n class=\"flex\"\n LibsUiComponentsScrollOverlayDirective>\n @for (category of emojisCategories(); track category) {\n <div\n class=\"grow p-[4px] rounded-[4px] bg-[#ffffff] libs-ui-bg-list-hover\"\n (click)=\"handlerChooseCategory($event, category)\">\n <div class=\"mt-[1px] cursor-pointer text-[18px]\">\n {{ category.iconGroup }}\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"mx-[10px] mb-[12px]\">\n <libs_ui-components-inputs-search\n [searchConfig]=\"{\n placeholder: 'i18n_search',\n }\"\n [debounceTime]=\"0\"\n (outSearch)=\"handlerSearchEmoji($event)\" />\n </div>\n <div class=\"h-full w-full relative\">\n <div\n #elementViewEmoji\n class=\"w-full h-full px-[10px] absolute\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (dataEmojiView().dataView.length) {\n @for (item of dataEmojiView().dataView; track $index) {\n <!-- n\u1EBFu sau c\u00F3 y\u00EAu c\u00E2u hover hi\u1EC3n th\u1ECB tooltio th\u00EC b\u1ECF [ignoreShowPopover]=\"true\" -->\n <span\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"true\"\n [config]=\"{ content: item.description, zIndex: (zIndex() || 1200) + 5 }\"\n class=\"cursor-pointer flex shrink-0 h-fit m-[2px] float-left\"\n (click)=\"handlerAddEmoji(item)\">\n {{ item.emoji }}\n </span>\n }\n } @else {\n <div class=\"libs-ui-font-h5r text-[#9ca2ad] h-full w-full items-center justify-center\">\n {{ 'i18n_no_result' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsInputsSearchComponent, selector: "libs_ui-components-inputs-search", inputs: ["disable", "readonly", "searchConfig", "ignoreAutoComplete", "debounceTime", "ignoreStopPropagationEvent", "focusTimeOut", "blurTimeOut"], outputs: ["outSearch", "outValueChange", "outIconLeft", "outIconRight", "outFocusAndBlur", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1888
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsEmojiComponent, isStandalone: true, selector: "libs_ui-components-emoji", inputs: { configPopover: { classPropertyName: "configPopover", publicName: "configPopover", isSignal: true, isRequired: false, transformFunction: null }, isNgContent: { classPropertyName: "isNgContent", publicName: "isNgContent", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, modePopoverPosition: { classPropertyName: "modePopoverPosition", publicName: "modePopoverPosition", isSignal: true, isRequired: false, transformFunction: null }, classPopup: { classPropertyName: "classPopup", publicName: "classPopup", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, classIconInclude: { classPropertyName: "classIconInclude", publicName: "classIconInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outEventEmoji: "outEventEmoji", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "emojiRef", first: true, predicate: ["emojiRef"], descendants: true, isSignal: true }, { propertyName: "elementViewEmoji", first: true, predicate: ["elementViewEmoji"], descendants: true, isSignal: true }], ngImport: i0, template: "<libs_ui-components-popover\n [classInclude]=\"classInclude()\"\n [config]=\"{\n content: 'i18n_text_emoji',\n zIndex: (zIndex() || 1200) + 4,\n }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n <libs_ui-components-popover\n type=\"other\"\n mode=\"click-toggle\"\n class=\"flex\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"configPopover()\"\n [debugId]=\"'debug icon emoij'\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n @if (!isNgContent()) {\n <i class=\"before:!text-[16px] before:!text-[#6a7383] {{ classIconInclude() }}\"></i>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n</libs_ui-components-popover>\n<ng-template #emojiRef>\n <div class=\"py-[10px] flex flex-col {{ classPopup() }}\">\n <div class=\"mx-[10px] mb-[12px]\">\n <div\n class=\"flex\"\n LibsUiComponentsScrollOverlayDirective>\n @for (category of emojisCategories(); track category) {\n <div\n class=\"grow p-[4px] rounded-[4px] bg-[#ffffff] libs-ui-bg-list-hover\"\n [class.libs-ui-bg-list-active]=\"filter().groupSelected === category.group_name\"\n (click)=\"handlerChooseCategory($event, category)\">\n <div class=\"mt-[1px] cursor-pointer text-[18px]\">\n {{ category.iconGroup }}\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"mx-[10px] mb-[12px]\">\n <libs_ui-components-inputs-search\n [searchConfig]=\"{\n placeholder: 'i18n_search',\n }\"\n [debounceTime]=\"0\"\n (outSearch)=\"handlerSearchEmoji($event)\" />\n </div>\n <div class=\"h-full w-full relative\">\n <div\n #elementViewEmoji\n class=\"w-full h-full px-[10px] absolute\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (dataEmojiView().dataView.length) {\n @for (item of dataEmojiView().dataView; track $index) {\n <!-- n\u1EBFu sau c\u00F3 y\u00EAu c\u00E2u hover hi\u1EC3n th\u1ECB tooltio th\u00EC b\u1ECF [ignoreShowPopover]=\"true\" -->\n <span\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"true\"\n [config]=\"{ content: item.description, zIndex: (zIndex() || 1200) + 5 }\"\n class=\"cursor-pointer flex shrink-0 h-fit m-[2px] float-left\"\n (click)=\"handlerAddEmoji(item)\">\n {{ item.emoji }}\n </span>\n }\n } @else {\n <div class=\"libs-ui-font-h5r text-[#9ca2ad] h-full w-full items-center justify-center\">\n {{ 'i18n_no_result' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsInputsSearchComponent, selector: "libs_ui-components-inputs-search", inputs: ["disable", "readonly", "searchConfig", "ignoreAutoComplete", "debounceTime", "ignoreStopPropagationEvent", "focusTimeOut", "blurTimeOut"], outputs: ["outSearch", "outValueChange", "outIconLeft", "outIconRight", "outFocusAndBlur", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1889
1889
  }
1890
1890
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsEmojiComponent, decorators: [{
1891
1891
  type: Component,
1892
- args: [{ selector: 'libs_ui-components-emoji', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsSearchComponent, LibsUiComponentsPopoverComponent, LibsUiComponentsScrollOverlayDirective], template: "<libs_ui-components-popover\n [classInclude]=\"classInclude()\"\n [config]=\"{\n content: 'i18n_text_emoji',\n zIndex: (zIndex() || 1200) + 4,\n }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n <libs_ui-components-popover\n type=\"other\"\n mode=\"click-toggle\"\n class=\"flex\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"configPopover()\"\n [debugId]=\"'debug icon emoij'\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n @if (!isNgContent()) {\n <i class=\"before:!text-[16px] before:!text-[#6a7383] {{ classIconInclude() }}\"></i>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n</libs_ui-components-popover>\n<ng-template #emojiRef>\n <div class=\"py-[10px] flex flex-col {{ classPopup() }}\">\n <div class=\"mx-[10px] mb-[12px]\">\n <div\n class=\"flex\"\n LibsUiComponentsScrollOverlayDirective>\n @for (category of emojisCategories(); track category) {\n <div\n class=\"grow p-[4px] rounded-[4px] bg-[#ffffff] libs-ui-bg-list-hover\"\n (click)=\"handlerChooseCategory($event, category)\">\n <div class=\"mt-[1px] cursor-pointer text-[18px]\">\n {{ category.iconGroup }}\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"mx-[10px] mb-[12px]\">\n <libs_ui-components-inputs-search\n [searchConfig]=\"{\n placeholder: 'i18n_search',\n }\"\n [debounceTime]=\"0\"\n (outSearch)=\"handlerSearchEmoji($event)\" />\n </div>\n <div class=\"h-full w-full relative\">\n <div\n #elementViewEmoji\n class=\"w-full h-full px-[10px] absolute\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (dataEmojiView().dataView.length) {\n @for (item of dataEmojiView().dataView; track $index) {\n <!-- n\u1EBFu sau c\u00F3 y\u00EAu c\u00E2u hover hi\u1EC3n th\u1ECB tooltio th\u00EC b\u1ECF [ignoreShowPopover]=\"true\" -->\n <span\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"true\"\n [config]=\"{ content: item.description, zIndex: (zIndex() || 1200) + 5 }\"\n class=\"cursor-pointer flex shrink-0 h-fit m-[2px] float-left\"\n (click)=\"handlerAddEmoji(item)\">\n {{ item.emoji }}\n </span>\n }\n } @else {\n <div class=\"libs-ui-font-h5r text-[#9ca2ad] h-full w-full items-center justify-center\">\n {{ 'i18n_no_result' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
1892
+ args: [{ selector: 'libs_ui-components-emoji', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsSearchComponent, LibsUiComponentsPopoverComponent, LibsUiComponentsScrollOverlayDirective], template: "<libs_ui-components-popover\n [classInclude]=\"classInclude()\"\n [config]=\"{\n content: 'i18n_text_emoji',\n zIndex: (zIndex() || 1200) + 4,\n }\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n <libs_ui-components-popover\n type=\"other\"\n mode=\"click-toggle\"\n class=\"flex\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"configPopover()\"\n [debugId]=\"'debug icon emoij'\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n @if (!isNgContent()) {\n <i class=\"before:!text-[16px] before:!text-[#6a7383] {{ classIconInclude() }}\"></i>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n</libs_ui-components-popover>\n<ng-template #emojiRef>\n <div class=\"py-[10px] flex flex-col {{ classPopup() }}\">\n <div class=\"mx-[10px] mb-[12px]\">\n <div\n class=\"flex\"\n LibsUiComponentsScrollOverlayDirective>\n @for (category of emojisCategories(); track category) {\n <div\n class=\"grow p-[4px] rounded-[4px] bg-[#ffffff] libs-ui-bg-list-hover\"\n [class.libs-ui-bg-list-active]=\"filter().groupSelected === category.group_name\"\n (click)=\"handlerChooseCategory($event, category)\">\n <div class=\"mt-[1px] cursor-pointer text-[18px]\">\n {{ category.iconGroup }}\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"mx-[10px] mb-[12px]\">\n <libs_ui-components-inputs-search\n [searchConfig]=\"{\n placeholder: 'i18n_search',\n }\"\n [debounceTime]=\"0\"\n (outSearch)=\"handlerSearchEmoji($event)\" />\n </div>\n <div class=\"h-full w-full relative\">\n <div\n #elementViewEmoji\n class=\"w-full h-full px-[10px] absolute\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (dataEmojiView().dataView.length) {\n @for (item of dataEmojiView().dataView; track $index) {\n <!-- n\u1EBFu sau c\u00F3 y\u00EAu c\u00E2u hover hi\u1EC3n th\u1ECB tooltio th\u00EC b\u1ECF [ignoreShowPopover]=\"true\" -->\n <span\n LibsUiComponentsPopoverDirective\n [ignoreShowPopover]=\"true\"\n [config]=\"{ content: item.description, zIndex: (zIndex() || 1200) + 5 }\"\n class=\"cursor-pointer flex shrink-0 h-fit m-[2px] float-left\"\n (click)=\"handlerAddEmoji(item)\">\n {{ item.emoji }}\n </span>\n }\n } @else {\n <div class=\"libs-ui-font-h5r text-[#9ca2ad] h-full w-full items-center justify-center\">\n {{ 'i18n_no_result' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
1893
1893
  }], ctorParameters: () => [] });
1894
1894
 
1895
1895
  /**