@libs-ui/components-dropdown 0.2.67 → 0.2.69

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.
@@ -441,7 +441,7 @@ export class LibsUiComponentsDropdownComponent {
441
441
  this.outChangStageFlagMouse.emit(flag);
442
442
  }
443
443
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
444
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDropdownComponent, isStandalone: true, selector: "libs_ui-components-dropdown", inputs: { useXssFilter: { classPropertyName: "useXssFilter", publicName: "useXssFilter", isSignal: true, isRequired: false, transformFunction: null }, popoverElementRefCustom: { classPropertyName: "popoverElementRefCustom", publicName: "popoverElementRefCustom", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, flagMouseContent: { classPropertyName: "flagMouseContent", publicName: "flagMouseContent", isSignal: true, isRequired: false, transformFunction: null }, popoverCustomConfig: { classPropertyName: "popoverCustomConfig", publicName: "popoverCustomConfig", 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 }, convertItemSelected: { classPropertyName: "convertItemSelected", publicName: "convertItemSelected", isSignal: true, isRequired: false, transformFunction: null }, getPopoverItemSelected: { classPropertyName: "getPopoverItemSelected", publicName: "getPopoverItemSelected", isSignal: true, isRequired: false, transformFunction: null }, httpRequestDetailItemById: { classPropertyName: "httpRequestDetailItemById", publicName: "httpRequestDetailItemById", isSignal: true, isRequired: false, transformFunction: null }, lengthKeys: { classPropertyName: "lengthKeys", publicName: "lengthKeys", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenNoSelect: { classPropertyName: "textDisplayWhenNoSelect", publicName: "textDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenMultiSelect: { classPropertyName: "textDisplayWhenMultiSelect", publicName: "textDisplayWhenMultiSelect", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, fieldGetLabel: { classPropertyName: "fieldGetLabel", publicName: "fieldGetLabel", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverConfig: { classPropertyName: "labelPopoverConfig", publicName: "labelPopoverConfig", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverFullWidth: { classPropertyName: "labelPopoverFullWidth", publicName: "labelPopoverFullWidth", isSignal: true, isRequired: false, transformFunction: null }, hasContentUnitRight: { classPropertyName: "hasContentUnitRight", publicName: "hasContentUnitRight", isSignal: true, isRequired: false, transformFunction: null }, listSearchNoDataTemplateRef: { classPropertyName: "listSearchNoDataTemplateRef", publicName: "listSearchNoDataTemplateRef", isSignal: true, isRequired: false, transformFunction: null }, fieldGetImage: { classPropertyName: "fieldGetImage", publicName: "fieldGetImage", isSignal: true, isRequired: false, transformFunction: null }, imageSize: { classPropertyName: "imageSize", publicName: "imageSize", isSignal: true, isRequired: false, transformFunction: null }, typeShape: { classPropertyName: "typeShape", publicName: "typeShape", isSignal: true, isRequired: false, transformFunction: null }, fieldGetIcon: { classPropertyName: "fieldGetIcon", publicName: "fieldGetIcon", isSignal: true, isRequired: false, transformFunction: null }, fieldGetTextAvatar: { classPropertyName: "fieldGetTextAvatar", publicName: "fieldGetTextAvatar", isSignal: true, isRequired: false, transformFunction: null }, fieldGetColorAvatar: { classPropertyName: "fieldGetColorAvatar", publicName: "fieldGetColorAvatar", isSignal: true, isRequired: false, transformFunction: null }, classAvatarInclude: { classPropertyName: "classAvatarInclude", publicName: "classAvatarInclude", isSignal: true, isRequired: false, transformFunction: null }, getLastTextAfterSpace: { classPropertyName: "getLastTextAfterSpace", publicName: "getLastTextAfterSpace", isSignal: true, isRequired: false, transformFunction: null }, linkImageError: { classPropertyName: "linkImageError", publicName: "linkImageError", isSignal: true, isRequired: false, transformFunction: null }, showError: { classPropertyName: "showError", publicName: "showError", isSignal: true, isRequired: false, transformFunction: null }, showBorderError: { classPropertyName: "showBorderError", publicName: "showBorderError", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, listSearchConfig: { classPropertyName: "listSearchConfig", publicName: "listSearchConfig", isSignal: true, isRequired: false, transformFunction: null }, isSearchOnline: { classPropertyName: "isSearchOnline", publicName: "isSearchOnline", isSignal: true, isRequired: false, transformFunction: null }, listHiddenInputSearch: { classPropertyName: "listHiddenInputSearch", publicName: "listHiddenInputSearch", isSignal: true, isRequired: false, transformFunction: null }, listSearchPadding: { classPropertyName: "listSearchPadding", publicName: "listSearchPadding", isSignal: true, isRequired: false, transformFunction: null }, listKeySearch: { classPropertyName: "listKeySearch", publicName: "listKeySearch", isSignal: true, isRequired: false, transformFunction: null }, listDividerClassInclude: { classPropertyName: "listDividerClassInclude", publicName: "listDividerClassInclude", isSignal: true, isRequired: false, transformFunction: null }, listConfig: { classPropertyName: "listConfig", publicName: "listConfig", isSignal: true, isRequired: false, transformFunction: null }, listButtonsOther: { classPropertyName: "listButtonsOther", publicName: "listButtonsOther", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, listClickExactly: { classPropertyName: "listClickExactly", publicName: "listClickExactly", isSignal: true, isRequired: false, transformFunction: null }, listBackgroundCustom: { classPropertyName: "listBackgroundCustom", publicName: "listBackgroundCustom", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, listKeySelected: { classPropertyName: "listKeySelected", publicName: "listKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listMultiKeySelected: { classPropertyName: "listMultiKeySelected", publicName: "listMultiKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, listKeysHidden: { classPropertyName: "listKeysHidden", publicName: "listKeysHidden", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, validMaxItemSelected: { classPropertyName: "validMaxItemSelected", publicName: "validMaxItemSelected", isSignal: true, isRequired: false, transformFunction: null }, changeValidUndefinedResetError: { classPropertyName: "changeValidUndefinedResetError", publicName: "changeValidUndefinedResetError", isSignal: true, isRequired: false, transformFunction: null }, allowSelectItemMultiple: { classPropertyName: "allowSelectItemMultiple", publicName: "allowSelectItemMultiple", isSignal: true, isRequired: false, transformFunction: null }, focusInputSearch: { classPropertyName: "focusInputSearch", publicName: "focusInputSearch", isSignal: true, isRequired: false, transformFunction: null }, onlyEmitDataWhenReset: { classPropertyName: "onlyEmitDataWhenReset", publicName: "onlyEmitDataWhenReset", isSignal: true, isRequired: false, transformFunction: null }, resetKeyWhenSelectAllKey: { classPropertyName: "resetKeyWhenSelectAllKey", publicName: "resetKeyWhenSelectAllKey", isSignal: true, isRequired: false, transformFunction: null }, listConfigHasDivider: { classPropertyName: "listConfigHasDivider", publicName: "listConfigHasDivider", isSignal: true, isRequired: false, transformFunction: null }, classIncludeIcon: { classPropertyName: "classIncludeIcon", publicName: "classIncludeIcon", isSignal: true, isRequired: false, transformFunction: null }, classIncludeContent: { classPropertyName: "classIncludeContent", publicName: "classIncludeContent", isSignal: true, isRequired: false, transformFunction: null }, listIgnoreClassDisableDefaultWhenUseKeysDisableItem: { classPropertyName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", publicName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", isSignal: true, isRequired: false, transformFunction: null }, tabKeyActive: { classPropertyName: "tabKeyActive", publicName: "tabKeyActive", isSignal: true, isRequired: false, transformFunction: null }, tabsConfig: { classPropertyName: "tabsConfig", publicName: "tabsConfig", isSignal: true, isRequired: false, transformFunction: null }, ignoreBorderBottom: { classPropertyName: "ignoreBorderBottom", publicName: "ignoreBorderBottom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { flagMouse: "flagMouseChange", flagMouseContent: "flagMouseContentChange", lengthKeys: "lengthKeysChange", showBorderError: "showBorderErrorChange", listKeySelected: "listKeySelectedChange", listMultiKeySelected: "listMultiKeySelectedChange", tabKeyActive: "tabKeyActiveChange", outSelectKey: "outSelectKey", outSelectMultiKey: "outSelectMultiKey", outFunctionsControl: "outFunctionsControl", outValidEvent: "outValidEvent", outChangStageFlagMouse: "outChangStageFlagMouse", outDataChange: "outDataChange", outClickButtonOther: "outClickButtonOther", outShowList: "outShowList", outChangeTabKeyActive: "outChangeTabKeyActive" }, ngImport: i0, template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required \"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: 'rounded-[4px] ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general ') + ((listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? ' overflow-hidden' : ''),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div [class]=\"'libs-ui-dropdown ' + classIncludeContent()\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\"\n [class.text-[#071631]]=\"readonly()\"\n [class.bg-[#f8f9fa]]=\"disable() || loadingDetail() || readonly()\"\n [class.text-[#9ca2ad]]=\"disable() || loadingDetail() || readonly()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div class=\"flex items-center w-full absolute\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\" />\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate:{value: lengthKeys()} | LibsUiPipesSecurityTrustPipe:'html':useXssFilter() | async\"\n [config]=\"{maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0}\"\n [ignoreStopPropagationEvent]=\"true\" />\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"> </i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i class=\"text-[16px] libs-ui-icon-move-right rotate-90 {{ classIncludeIcon() }}\"\n [class.text-[#6a7383]]=\"!readonly() && !classIncludeIcon()\"\n [class.text-[#9ca2ad]]=\"(readonly() || disable()) && !classIncludeIcon()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\"\n [innerHtml]=\"(error.message || ' ') | translate:(error.interpolateParams || {})\">\n </div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column;\">\n @if (tabsConfig()) {\n <libs_ui-components-dropdown-tabs [tabsConfig]=\"tabsConfig()\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? true\"\n [disable]=\"disable() || loadingDetail()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"(listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? 0 : listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event, true)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:flex;flex-direction:column}:host .libs-ui-dropdown{position:relative;width:100%;min-height:32px;display:flex;align-items:center;background-color:#fff;padding:0 16px;border-radius:4px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["getLastTextAfterSpace", "typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "idGenColor", "textAvatar", "classImageInclude"], outputs: ["outAvatarError"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "itemChangeUnSelect", "paddingLeftItem", "config", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }, { kind: "component", type: LibsUiComponentsDropdownTabsComponent, selector: "libs_ui-components-dropdown-tabs", inputs: ["ignoreBorderBottom", "tabsConfig", "tabKeyActive", "disable"], outputs: ["tabKeyActiveChange", "outChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
444
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDropdownComponent, isStandalone: true, selector: "libs_ui-components-dropdown", inputs: { useXssFilter: { classPropertyName: "useXssFilter", publicName: "useXssFilter", isSignal: true, isRequired: false, transformFunction: null }, popoverElementRefCustom: { classPropertyName: "popoverElementRefCustom", publicName: "popoverElementRefCustom", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, flagMouseContent: { classPropertyName: "flagMouseContent", publicName: "flagMouseContent", isSignal: true, isRequired: false, transformFunction: null }, popoverCustomConfig: { classPropertyName: "popoverCustomConfig", publicName: "popoverCustomConfig", 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 }, convertItemSelected: { classPropertyName: "convertItemSelected", publicName: "convertItemSelected", isSignal: true, isRequired: false, transformFunction: null }, getPopoverItemSelected: { classPropertyName: "getPopoverItemSelected", publicName: "getPopoverItemSelected", isSignal: true, isRequired: false, transformFunction: null }, httpRequestDetailItemById: { classPropertyName: "httpRequestDetailItemById", publicName: "httpRequestDetailItemById", isSignal: true, isRequired: false, transformFunction: null }, lengthKeys: { classPropertyName: "lengthKeys", publicName: "lengthKeys", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenNoSelect: { classPropertyName: "textDisplayWhenNoSelect", publicName: "textDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenMultiSelect: { classPropertyName: "textDisplayWhenMultiSelect", publicName: "textDisplayWhenMultiSelect", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, fieldGetLabel: { classPropertyName: "fieldGetLabel", publicName: "fieldGetLabel", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverConfig: { classPropertyName: "labelPopoverConfig", publicName: "labelPopoverConfig", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverFullWidth: { classPropertyName: "labelPopoverFullWidth", publicName: "labelPopoverFullWidth", isSignal: true, isRequired: false, transformFunction: null }, hasContentUnitRight: { classPropertyName: "hasContentUnitRight", publicName: "hasContentUnitRight", isSignal: true, isRequired: false, transformFunction: null }, listSearchNoDataTemplateRef: { classPropertyName: "listSearchNoDataTemplateRef", publicName: "listSearchNoDataTemplateRef", isSignal: true, isRequired: false, transformFunction: null }, fieldGetImage: { classPropertyName: "fieldGetImage", publicName: "fieldGetImage", isSignal: true, isRequired: false, transformFunction: null }, imageSize: { classPropertyName: "imageSize", publicName: "imageSize", isSignal: true, isRequired: false, transformFunction: null }, typeShape: { classPropertyName: "typeShape", publicName: "typeShape", isSignal: true, isRequired: false, transformFunction: null }, fieldGetIcon: { classPropertyName: "fieldGetIcon", publicName: "fieldGetIcon", isSignal: true, isRequired: false, transformFunction: null }, fieldGetTextAvatar: { classPropertyName: "fieldGetTextAvatar", publicName: "fieldGetTextAvatar", isSignal: true, isRequired: false, transformFunction: null }, fieldGetColorAvatar: { classPropertyName: "fieldGetColorAvatar", publicName: "fieldGetColorAvatar", isSignal: true, isRequired: false, transformFunction: null }, classAvatarInclude: { classPropertyName: "classAvatarInclude", publicName: "classAvatarInclude", isSignal: true, isRequired: false, transformFunction: null }, getLastTextAfterSpace: { classPropertyName: "getLastTextAfterSpace", publicName: "getLastTextAfterSpace", isSignal: true, isRequired: false, transformFunction: null }, linkImageError: { classPropertyName: "linkImageError", publicName: "linkImageError", isSignal: true, isRequired: false, transformFunction: null }, showError: { classPropertyName: "showError", publicName: "showError", isSignal: true, isRequired: false, transformFunction: null }, showBorderError: { classPropertyName: "showBorderError", publicName: "showBorderError", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, listSearchConfig: { classPropertyName: "listSearchConfig", publicName: "listSearchConfig", isSignal: true, isRequired: false, transformFunction: null }, isSearchOnline: { classPropertyName: "isSearchOnline", publicName: "isSearchOnline", isSignal: true, isRequired: false, transformFunction: null }, listHiddenInputSearch: { classPropertyName: "listHiddenInputSearch", publicName: "listHiddenInputSearch", isSignal: true, isRequired: false, transformFunction: null }, listSearchPadding: { classPropertyName: "listSearchPadding", publicName: "listSearchPadding", isSignal: true, isRequired: false, transformFunction: null }, listKeySearch: { classPropertyName: "listKeySearch", publicName: "listKeySearch", isSignal: true, isRequired: false, transformFunction: null }, listDividerClassInclude: { classPropertyName: "listDividerClassInclude", publicName: "listDividerClassInclude", isSignal: true, isRequired: false, transformFunction: null }, listConfig: { classPropertyName: "listConfig", publicName: "listConfig", isSignal: true, isRequired: false, transformFunction: null }, listButtonsOther: { classPropertyName: "listButtonsOther", publicName: "listButtonsOther", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, listClickExactly: { classPropertyName: "listClickExactly", publicName: "listClickExactly", isSignal: true, isRequired: false, transformFunction: null }, listBackgroundCustom: { classPropertyName: "listBackgroundCustom", publicName: "listBackgroundCustom", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, listKeySelected: { classPropertyName: "listKeySelected", publicName: "listKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listMultiKeySelected: { classPropertyName: "listMultiKeySelected", publicName: "listMultiKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, listKeysHidden: { classPropertyName: "listKeysHidden", publicName: "listKeysHidden", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, validMaxItemSelected: { classPropertyName: "validMaxItemSelected", publicName: "validMaxItemSelected", isSignal: true, isRequired: false, transformFunction: null }, changeValidUndefinedResetError: { classPropertyName: "changeValidUndefinedResetError", publicName: "changeValidUndefinedResetError", isSignal: true, isRequired: false, transformFunction: null }, allowSelectItemMultiple: { classPropertyName: "allowSelectItemMultiple", publicName: "allowSelectItemMultiple", isSignal: true, isRequired: false, transformFunction: null }, focusInputSearch: { classPropertyName: "focusInputSearch", publicName: "focusInputSearch", isSignal: true, isRequired: false, transformFunction: null }, onlyEmitDataWhenReset: { classPropertyName: "onlyEmitDataWhenReset", publicName: "onlyEmitDataWhenReset", isSignal: true, isRequired: false, transformFunction: null }, resetKeyWhenSelectAllKey: { classPropertyName: "resetKeyWhenSelectAllKey", publicName: "resetKeyWhenSelectAllKey", isSignal: true, isRequired: false, transformFunction: null }, listConfigHasDivider: { classPropertyName: "listConfigHasDivider", publicName: "listConfigHasDivider", isSignal: true, isRequired: false, transformFunction: null }, classIncludeIcon: { classPropertyName: "classIncludeIcon", publicName: "classIncludeIcon", isSignal: true, isRequired: false, transformFunction: null }, classIncludeContent: { classPropertyName: "classIncludeContent", publicName: "classIncludeContent", isSignal: true, isRequired: false, transformFunction: null }, listIgnoreClassDisableDefaultWhenUseKeysDisableItem: { classPropertyName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", publicName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", isSignal: true, isRequired: false, transformFunction: null }, tabKeyActive: { classPropertyName: "tabKeyActive", publicName: "tabKeyActive", isSignal: true, isRequired: false, transformFunction: null }, tabsConfig: { classPropertyName: "tabsConfig", publicName: "tabsConfig", isSignal: true, isRequired: false, transformFunction: null }, ignoreBorderBottom: { classPropertyName: "ignoreBorderBottom", publicName: "ignoreBorderBottom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { flagMouse: "flagMouseChange", flagMouseContent: "flagMouseContentChange", lengthKeys: "lengthKeysChange", showBorderError: "showBorderErrorChange", listKeySelected: "listKeySelectedChange", listMultiKeySelected: "listMultiKeySelectedChange", tabKeyActive: "tabKeyActiveChange", outSelectKey: "outSelectKey", outSelectMultiKey: "outSelectMultiKey", outFunctionsControl: "outFunctionsControl", outValidEvent: "outValidEvent", outChangStageFlagMouse: "outChangStageFlagMouse", outDataChange: "outDataChange", outClickButtonOther: "outClickButtonOther", outShowList: "outShowList", outChangeTabKeyActive: "outChangeTabKeyActive" }, ngImport: i0, template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required \"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: 'rounded-[4px] ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general ') + ((listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? ' overflow-hidden' : ''),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div [class]=\"'libs-ui-dropdown ' + classIncludeContent()\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\"\n [class.text-[#071631]]=\"readonly()\"\n [class.bg-[#f8f9fa]]=\"disable() || loadingDetail() || readonly()\"\n [class.text-[#9ca2ad]]=\"disable() || loadingDetail() || readonly()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div class=\"flex items-center w-full absolute\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\" />\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate:{value: lengthKeys()} | LibsUiPipesSecurityTrustPipe:'html':useXssFilter() | async\"\n [config]=\"{maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0}\"\n [ignoreStopPropagationEvent]=\"true\" />\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"> </i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i class=\"text-[16px] libs-ui-icon-move-right rotate-90 {{ classIncludeIcon() }}\"\n [class.text-[#6a7383]]=\"!readonly() && !classIncludeIcon()\"\n [class.text-[#9ca2ad]]=\"(readonly() || disable()) && !classIncludeIcon()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\"\n [innerHtml]=\"(error.message || ' ') | translate:(error.interpolateParams || {})\">\n </div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column;\">\n @if (tabsConfig()) {\n <libs_ui-components-dropdown-tabs [tabsConfig]=\"tabsConfig()\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? true\"\n [disable]=\"disable() || loadingDetail()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"(listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? 0 : listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event, true)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:flex;flex-direction:column}:host .libs-ui-dropdown{position:relative;width:100%;min-height:32px;display:flex;align-items:center;background-color:#fff;padding:0 16px;border-radius:4px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["getLastTextAfterSpace", "typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "idGenColor", "textAvatar", "classImageInclude"], outputs: ["outAvatarError"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "itemChangeUnSelect", "paddingLeftItem", "config", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }, { kind: "component", type: LibsUiComponentsDropdownTabsComponent, selector: "libs_ui-components-dropdown-tabs", inputs: ["ignoreBorderBottom", "tabsConfig", "tabKeyActive", "disable"], outputs: ["tabKeyActiveChange", "outChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
445
445
  }
446
446
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDropdownComponent, decorators: [{
447
447
  type: Component,
@@ -452,4 +452,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
452
452
  LibsUiComponentsDropdownTabsComponent
453
453
  ], template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required \"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: 'rounded-[4px] ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general ') + ((listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? ' overflow-hidden' : ''),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div [class]=\"'libs-ui-dropdown ' + classIncludeContent()\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\"\n [class.text-[#071631]]=\"readonly()\"\n [class.bg-[#f8f9fa]]=\"disable() || loadingDetail() || readonly()\"\n [class.text-[#9ca2ad]]=\"disable() || loadingDetail() || readonly()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div class=\"flex items-center w-full absolute\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\" />\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate:{value: lengthKeys()} | LibsUiPipesSecurityTrustPipe:'html':useXssFilter() | async\"\n [config]=\"{maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0}\"\n [ignoreStopPropagationEvent]=\"true\" />\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"> </i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i class=\"text-[16px] libs-ui-icon-move-right rotate-90 {{ classIncludeIcon() }}\"\n [class.text-[#6a7383]]=\"!readonly() && !classIncludeIcon()\"\n [class.text-[#9ca2ad]]=\"(readonly() || disable()) && !classIncludeIcon()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\"\n [innerHtml]=\"(error.message || ' ') | translate:(error.interpolateParams || {})\">\n </div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column;\">\n @if (tabsConfig()) {\n <libs_ui-components-dropdown-tabs [tabsConfig]=\"tabsConfig()\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? true\"\n [disable]=\"disable() || loadingDetail()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"(listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? 0 : listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event, true)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:flex;flex-direction:column}:host .libs-ui-dropdown{position:relative;width:100%;min-height:32px;display:flex;align-items:center;background-color:#fff;padding:0 16px;border-radius:4px;cursor:pointer}\n"] }]
454
454
  }], ctorParameters: () => [] });
455
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNKLE9BQU8sRUFBRSwrQkFBK0IsRUFBOEMsTUFBTSw0QkFBNEIsQ0FBQztBQUl6SCxPQUFPLEVBQVUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQXVGLDZCQUE2QixFQUFpQixNQUFNLDBCQUEwQixDQUFDO0FBQ2hNLE9BQU8sRUFBdUUsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFDeEssT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0UsT0FBTyxFQUFzQix3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0SSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHeEUsT0FBTyxFQUFFLHFDQUFx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NkIseTlCQUM5RCxxQ0FBcUM7OzRGQUc1QixpQ0FBaUM7a0JBZDdDLFNBQVM7K0JBRUUsNkJBQTZCLGNBRzNCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxlQUFlLEVBQUUsNEJBQTRCLEVBQUUsU0FBUzt3QkFDeEQsOEJBQThCLEVBQUUsZ0NBQWdDO3dCQUNoRSwrQkFBK0IsRUFBRSw2QkFBNkI7d0JBQzlELHFDQUFxQztxQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIFRlbXBsYXRlUmVmLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNBdmF0YXJDb21wb25lbnQsIFRZUEVfU0hBUEVfQVZBVEFSLCBUWVBFX1NJWkVfQVZBVEFSX0NPTkZJRyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYXZhdGFyJztcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElJbnB1dFNlYXJjaENvbmZpZyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXNlYXJjaCc7XG5pbXBvcnQgeyBJVmFsaWQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy12YWxpZCc7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWwnO1xuaW1wb3J0IHsgZ2V0RmllbGRLZXlCeVR5cGUsIElMaXN0RGF0YUVtaXRLZXksIElMaXN0RGF0YUVtaXRNdWx0aUtleSwgSUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCwgSUxpc3RDb25maWdJdGVtLCBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCwgVFlQRV9URU1QTEFURSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBJUG9wb3ZlciwgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVBvcG92ZXJPdmVybGF5LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1zZWN1cml0eS10cnVzdCc7XG5pbXBvcnQgeyBJSHR0cFJlcXVlc3RDb25maWcsIExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLWh0dHAtcmVxdWVzdCc7XG5pbXBvcnQgeyBDSEFSQUNURVJfREFUQV9FTVBUWSwgY2xvbmVEZWVwLCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgZ2V0LCBpc05pbCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJRHJvcGRvd25UYWJzSXRlbSwgSUVtaXRNdWx0aUtleSwgSUVtaXRTZWxlY3RLZXksIElQb3BvdmVyQ3VzdG9tQ29uZmlnLCBJVmFsaWRNYXhJdGVtU2VsZWN0ZWQgfSBmcm9tICcuL2ludGVyZmFjZXMvZHJvcGRvd24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEcm9wZG93blRhYnNDb21wb25lbnQgfSBmcm9tICcuL3RhYnMvdGFicy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSwgTGlic1VpUGlwZXNTZWN1cml0eVRydXN0UGlwZSwgQXN5bmNQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duVGFic0NvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIGVycm9yID0gc2lnbmFsPElWYWxpZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHNob3dMaXN0ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGl0ZW1zU2VsZWN0ZWQgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgbG9hZGluZ0RldGFpbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBsb2FkaW5nTGlzdCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpdGVtcyA9IHNpZ25hbDxBcnJheTx1bmtub3duPj4oW10pO1xuICBwcm90ZWN0ZWQgZmllbGRMYWJlbCA9IHNpZ25hbDxzdHJpbmc+KCdsYWJlbERpc3BsYXknKTtcbiAgcHJvdGVjdGVkIHBvcG92ZXJJdGVtU2VsZWN0ZWQgPSBzaWduYWw8SVBvcG92ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsYWJlbEl0ZW1TZWxlY3RlZENvbXB1dGVkID0gY29tcHV0ZWQodGhpcy5nZXRMYWJlbEl0ZW1TZWxlY3RlZC5iaW5kKHRoaXMpKTtcblxuICBwcml2YXRlIGtleXNTZWxlY3RlZCA9IHNpZ25hbDxBcnJheTx1bmtub3duPj4oW10pO1xuICBwcml2YXRlIHBvcG92ZXJGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBmaWVsZEtleSA9IHNpZ25hbDxzdHJpbmc+KCdpZCcpO1xuICBwcml2YXRlIGxpc3RGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8SUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBzZWxlY3RlZEtleUJ5SW5wdXQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qIElOUFVUICovXG4gIHJlYWRvbmx5IHVzZVhzc0ZpbHRlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcG9wb3ZlckVsZW1lbnRSZWZDdXN0b20gPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZmxhZ01vdXNlID0gbW9kZWw8SUZsYWdNb3VzZT4oeyBpc01vdXNlRW50ZXI6IGZhbHNlLCBpc01vdXNlRW50ZXJDb250ZW50OiBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgZmxhZ01vdXNlQ29udGVudCA9IG1vZGVsPElGbGFnTW91c2U+KCk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDdXN0b21Db25maWcgPSBpbnB1dDxJUG9wb3ZlckN1c3RvbUNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgaXNOZ0NvbnRlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGNvbnZlcnRJdGVtU2VsZWN0ZWQgPSBpbnB1dDwoaXRlbTogdW5rbm93biwgdHJhbnNsYXRlPzogVHJhbnNsYXRlU2VydmljZSkgPT4gdm9pZD4odGhpcy5kZWZhdWx0Q29udmVydEl0ZW1TZWxlY3RlZC5iaW5kKHRoaXMpKTtcbiAgcmVhZG9ubHkgZ2V0UG9wb3Zlckl0ZW1TZWxlY3RlZCA9IGlucHV0PChpdGVtOiB1bmtub3duLCB0cmFuc2xhdGU/OiBUcmFuc2xhdGVTZXJ2aWNlKSA9PiBQcm9taXNlPElQb3BvdmVyIHwgdW5kZWZpbmVkPj4oKTtcbiAgcmVhZG9ubHkgaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCA9IGlucHV0PElIdHRwUmVxdWVzdENvbmZpZz4oKTtcbiAgcmVhZG9ubHkgbGVuZ3RoS2V5cyA9IG1vZGVsPG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nPignaTE4bl9zZWxlY3RfdmFsdWUnKTtcbiAgcmVhZG9ubHkgdGV4dERpc3BsYXlXaGVuTXVsdGlTZWxlY3QgPSBpbnB1dDxzdHJpbmc+KCdpMThuX3NlbGVjdGluZ19vcHRpb25zJyk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nPignbGlicy11aS1mb250LWg1cicpO1xuICByZWFkb25seSBmaWVsZEdldExhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsYWJlbFBvcG92ZXJDb25maWcgPSBpbnB1dDxJUG9wb3Zlck92ZXJsYXk+KCk7XG4gIHJlYWRvbmx5IGxhYmVsUG9wb3ZlckZ1bGxXaWR0aCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBoYXNDb250ZW50VW5pdFJpZ2h0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdFNlYXJjaE5vRGF0YVRlbXBsYXRlUmVmID0gaW5wdXQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGZpZWxkR2V0SW1hZ2UgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGltYWdlU2l6ZSA9IGlucHV0PFRZUEVfU0laRV9BVkFUQVJfQ09ORklHPigxNik7XG4gIHJlYWRvbmx5IHR5cGVTaGFwZSA9IGlucHV0PFRZUEVfU0hBUEVfQVZBVEFSPignY2lyY2xlJyk7XG4gIHJlYWRvbmx5IGZpZWxkR2V0SWNvbiA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRHZXRUZXh0QXZhdGFyID0gaW5wdXQ8c3RyaW5nPigndXNlcm5hbWUnKTtcbiAgcmVhZG9ubHkgZmllbGRHZXRDb2xvckF2YXRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY2xhc3NBdmF0YXJJbmNsdWRlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdtci1bOHB4XScsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSB8fCAnbXItWzhweF0nIH0pO1xuICByZWFkb25seSBnZXRMYXN0VGV4dEFmdGVyU3BhY2UgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaW5rSW1hZ2VFcnJvciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgc2hvd0Vycm9yID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHNob3dCb3JkZXJFcnJvciA9IG1vZGVsPGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxhYmVsQ29uZmlnID0gaW5wdXQ8SUxhYmVsPigpO1xuICByZWFkb25seSBsaXN0U2VhcmNoQ29uZmlnID0gaW5wdXQ8SUlucHV0U2VhcmNoQ29uZmlnLCBJSW5wdXRTZWFyY2hDb25maWcgfCB1bmRlZmluZWQ+KHsgbm9Cb3JkZXI6IHRydWUgfSwgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlIHx8IHsgbm9Cb3JkZXI6IHRydWUgfSB9KTtcbiAgcmVhZG9ubHkgaXNTZWFyY2hPbmxpbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxpc3RIaWRkZW5JbnB1dFNlYXJjaCA9IGlucHV0PGJvb2xlYW4+KClcbiAgcmVhZG9ubHkgbGlzdFNlYXJjaFBhZGRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaXN0S2V5U2VhcmNoID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsaXN0RGl2aWRlckNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbGlzdENvbmZpZyA9IGlucHV0PElMaXN0Q29uZmlnSXRlbT4oKTtcbiAgcmVhZG9ubHkgbGlzdEJ1dHRvbnNPdGhlciA9IGlucHV0PEFycmF5PElCdXR0b24+PigpO1xuICByZWFkb25seSBsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaXN0Q2xpY2tFeGFjdGx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdEJhY2tncm91bmRDdXN0b20gPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpc3RNYXhJdGVtU2hvdyA9IGlucHV0PG51bWJlcj4oNiwpO1xuICByZWFkb25seSBsaXN0S2V5U2VsZWN0ZWQgPSBtb2RlbDx1bmtub3duPigpO1xuICByZWFkb25seSBsaXN0TXVsdGlLZXlTZWxlY3RlZCA9IG1vZGVsPEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBsaXN0S2V5c0Rpc2FibGUgPSBpbnB1dDxBcnJheTxzdHJpbmc+PigpOyAvLyBraMO0bmcgZMO5bmcgZ2nDoSB0cuG7iyBuw6B5IGvhur90IGjhu6NwIHbhu5tpIHRlbXBsYXRlIGNoZWNrYm94IGPDsyBjb25maWcgY2jhu6lhIGNvbmZpZ0NoZWNrYm94Q2hlY2tBbGxcbiAgcmVhZG9ubHkgbGlzdEtleXNIaWRkZW4gPSBpbnB1dDxBcnJheTxzdHJpbmc+PigpOyAvLyBraMO0bmcgZMO5bmcgZ2nDoSB0cuG7iyBuw6B5IGvhur90IGjhu6NwIHbhu5tpIHRlbXBsYXRlIGNoZWNrYm94IGPDsyBjb25maWcgY2jhu6lhIGNvbmZpZ0NoZWNrYm94Q2hlY2tBbGxcbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PElWYWxpZD4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNYXhJdGVtU2VsZWN0ZWQgPSBpbnB1dDxJVmFsaWRNYXhJdGVtU2VsZWN0ZWQ+KCk7XG4gIHJlYWRvbmx5IGNoYW5nZVZhbGlkVW5kZWZpbmVkUmVzZXRFcnJvciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGFsbG93U2VsZWN0SXRlbU11bHRpcGxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZm9jdXNJbnB1dFNlYXJjaCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBvbmx5RW1pdERhdGFXaGVuUmVzZXQgPSBpbnB1dDxib29sZWFuPigpOyAvLyB0cnVlIGtoaSBtdeG7kW4gZW1pdCBz4buxIGtp4buHbiB0aGF5IMSR4buVaSBrZXlcbiAgcmVhZG9ubHkgcmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdENvbmZpZ0hhc0RpdmlkZXIgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlSWNvbiA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignbWwtWzhweF0nLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgfHwgJ21sLVs4cHhdJyB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlQ29udGVudCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbGlzdElnbm9yZUNsYXNzRGlzYWJsZURlZmF1bHRXaGVuVXNlS2V5c0Rpc2FibGVJdGVtID0gaW5wdXQ8Ym9vbGVhbj4oKTsgLy8gYuG7jyBjaOG6vyDEkeG7mSBkaXNhYmxlIGl0ZW0gdHLDqm4gaHRtbCBsaXN0IHZpZXcgxJHhu4MgZGlzYWJsZSB04burbmcgcGjhuqduIHRyb25nIHJvd3NcbiAgcmVhZG9ubHkgdGFiS2V5QWN0aXZlID0gbW9kZWw8c3RyaW5nPigpO1xuICByZWFkb25seSB0YWJzQ29uZmlnID0gaW5wdXQ8QXJyYXk8SURyb3Bkb3duVGFic0l0ZW0+PigpO1xuICByZWFkb25seSBpZ25vcmVCb3JkZXJCb3R0b20gPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRTZWxlY3RLZXkgPSBvdXRwdXQ8SUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQ+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIGNo4buNbiAxLlxuICByZWFkb25seSBvdXRTZWxlY3RNdWx0aUtleSA9IG91dHB1dDxJRW1pdE11bHRpS2V5IHwgdW5kZWZpbmVkPigpOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFZhbGlkRXZlbnQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuICByZWFkb25seSBvdXREYXRhQ2hhbmdlID0gb3V0cHV0PEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBvdXRDbGlja0J1dHRvbk90aGVyID0gb3V0cHV0PElCdXR0b24+KCk7XG4gIHJlYWRvbmx5IG91dFNob3dMaXN0ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVRhYktleUFjdGl2ZSA9IG91dHB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLyogSU5KRUNUKi9cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByaXZhdGUgaHR0cFJlcXVlc3RTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGxpc3RDb25maWcgPSB0aGlzLmxpc3RDb25maWcoKTtcbiAgICAgIGlmIChsaXN0Q29uZmlnKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmZpZWxkS2V5LnNldChnZXRGaWVsZEtleUJ5VHlwZShsaXN0Q29uZmlnLCAnaWQnKSkpO1xuICAgICAgfVxuICAgIH0pXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxpc3RLZXlTZWxlY3RlZCgpICYmICF0aGlzLml0ZW1zU2VsZWN0ZWQoKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlCeUlucHV0LnNldCh0cnVlKVxuICAgICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdGVkS2V5KHsga2V5OiB0aGlzLmxpc3RLZXlTZWxlY3RlZCgpLCBpdGVtOiB1bmRlZmluZWQsIGlzQ2xpY2tNYW51YWw6IGZhbHNlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VWYWxpZFVuZGVmaW5lZFJlc2V0RXJyb3IoKSAmJiB0aGlzLnZhbGlkUmVxdWlyZWQoKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5yZXNldEVycm9yKCkpO1xuICAgICAgfVxuICAgIH0pXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkKCkpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5rZXlzU2VsZWN0ZWQoKSB8fCBbXTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkKCkgfHwgW107XG5cbiAgICAgICAgICBpZiAocHJldmlvdXNWYWx1ZS5sZW5ndGggIT09IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdE11bHRpS2V5KHsga2V5czogY3VycmVudFZhbHVlLCBtYXBLZXlzOiBbXSwgaXNDbGlja01hbnVhbDogZmFsc2UgfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCBrZXlQcmV2aW91cyBvZiBwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRWYWx1ZS5zb21lKGtleUN1cnJlbnQgPT4ga2V5Q3VycmVudCA9PT0ga2V5UHJldmlvdXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdE11bHRpS2V5KHsga2V5czogY3VycmVudFZhbHVlLCBtYXBLZXlzOiBbXSwgaXNDbGlja01hbnVhbDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgbGlzdENvbmZpZyA9IHRoaXMubGlzdENvbmZpZygpO1xuICAgIGlmICghdGhpcy5sZW5ndGhLZXlzKCkgJiYgbGlzdENvbmZpZyAmJiAobGlzdENvbmZpZy5hdXRvU2VsZWN0Rmlyc3RJdGVtIHx8IGxpc3RDb25maWcuY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCk/LmF1dG9TZWxlY3RBbGxJdGVtIHx8IGxpc3RDb25maWcuY29uZmlnVGVtcGxhdGVHcm91cD8uKCk/LmZsYXRJdGVtc1N1cHBvcnRBdXRvU2VsZWN0KSAmJiBsaXN0Q29uZmlnLmh0dHBSZXF1ZXN0RGF0YSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nRGV0YWlsLnNldCh0cnVlKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3REYXRhID0gbGlzdENvbmZpZy5odHRwUmVxdWVzdERhdGEoKTtcbiAgICAgICAgY29uc3QgeyBhcmd1bWVudHNWYWx1ZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUgfSA9IGh0dHBSZXF1ZXN0RGF0YTtcbiAgICAgICAgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UudXBkYXRlQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlLCB7IC4uLnRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLmZha2VSZXNwb25zZVBhZ2luZ0FwaSgpLCBkcm9wZG93blRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUgfSwge30sICcnLCB0cnVlLCBmYWxzZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5jYWxsQXBpKGh0dHBSZXF1ZXN0RGF0YSk7XG4gICAgICAgIHRoaXMubG9hZGluZ0RldGFpbC5zZXQoZmFsc2UpO1xuICAgICAgICBpZiAocmVzdWx0Py5kYXRhKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5zZXQocmVzdWx0LmRhdGEpO1xuICAgICAgICAgIHRoaXMuZW1pdEF1dG9TZWxlY3RLZXkocmVzdWx0LmRhdGEsIGxpc3RDb25maWcudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0RGF0YUNoYW5nZS5lbWl0KHRoaXMuaXRlbXMoKSk7XG4gICAgfVxuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIHJlc2V0OiB0aGlzLnJlc2V0LmJpbmQodGhpcyksXG4gICAgICB2YWxpZDogdGhpcy52YWxpZC5iaW5kKHRoaXMpLFxuICAgICAgcmVzZXRFcnJvcjogdGhpcy5yZXNldEVycm9yLmJpbmQodGhpcyksXG4gICAgICBzZXRFcnJvcjogdGhpcy5zZXRFcnJvci5iaW5kKHRoaXMpLFxuICAgICAgcmVtb3ZlTGlzdDogYXN5bmMgKCkgPT4gdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCksXG4gICAgICBnZXREaXNhYmxlOiBhc3luYyAoKSA9PiB0aGlzLmRpc2FibGUoKSA/PyBmYWxzZSxcbiAgICAgIHVwZGF0ZUxhYmVsSXRlbVNlbGVjdGVkOiBhc3luYyAobGFiZWwpID0+IHRoaXMuaXRlbXNTZWxlY3RlZC51cGRhdGUodmFsdWUgPT4gKHsgLi4udmFsdWUsIFt0aGlzLmZpZWxkTGFiZWwoKV06IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobGFiZWwpIH0pKSxcbiAgICAgIHJlZnJlc2hMaXN0OiBhc3luYyAoKSA9PiB0aGlzLmxpc3RGdW5jdGlvbkNvbnRyb2woKT8ucmVmcmVzaCgpLFxuICAgICAgc2V0SXRlbVNlbGVjdGVkQnlLZXk6IHRoaXMuc2V0SXRlbVNlbGVjdGVkQnlLZXkuYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tWYWxpZCh0cnVlKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcml2YXRlIGRlZmF1bHRDb252ZXJ0SXRlbVNlbGVjdGVkKGl0ZW06IHVua25vd24pIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmllbGRHZXRMYWJlbCA9IHRoaXMuZmllbGRHZXRMYWJlbCgpO1xuICAgIGNvbnN0IHZhbHVlID0gZmllbGRHZXRMYWJlbCA/IGdldChpdGVtLCBmaWVsZEdldExhYmVsKSA6IHVuZGVmaW5lZDtcbiAgICBzZXQoaXRlbSwgdGhpcy5maWVsZExhYmVsKCksIHZhbHVlID8/IGdldChpdGVtLCAnbGFiZWwnKSA/PyBnZXQoaXRlbSwgJ25hbWUnKSA/PyAnICcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYWJlbEl0ZW1TZWxlY3RlZCgpIHtcbiAgICBsZXQgbGFiZWwgPSAnICc7XG4gICAgaWYgKCF0aGlzLmxlbmd0aEtleXMoKSkge1xuICAgICAgbGFiZWwgPSB0aGlzLnRleHREaXNwbGF5V2hlbk5vU2VsZWN0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxlbmd0aEtleXMoKSA+IDEpIHtcbiAgICAgIGxhYmVsID0gdGhpcy50ZXh0RGlzcGxheVdoZW5NdWx0aVNlbGVjdCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sZW5ndGhLZXlzKCkgPT09IDEpIHtcbiAgICAgIGxhYmVsID0gdGhpcy5pdGVtc1NlbGVjdGVkKCk/Llt0aGlzLmZpZWxkTGFiZWwoKV0gfHwgdGhpcy50ZXh0RGlzcGxheVdoZW5Ob1NlbGVjdCgpO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICBwcml2YXRlIGVtaXRBdXRvU2VsZWN0S2V5KGl0ZW1zOiBBcnJheTx1bmtub3duPiwgdHlwZTogVFlQRV9URU1QTEFURSkge1xuICAgIGNvbnN0IGxpc3RDb25maWcgPSB0aGlzLmxpc3RDb25maWcoKTtcbiAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGggfHwgIWxpc3RDb25maWcgfHwgKCFsaXN0Q29uZmlnLmF1dG9TZWxlY3RGaXJzdEl0ZW0gJiYgIWxpc3RDb25maWcuY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCk/LmF1dG9TZWxlY3RBbGxJdGVtICYmICFsaXN0Q29uZmlnLmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpPy5mbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxhdEl0ZW1zU3VwcG9ydEF1dG9TZWxlY3QgPSBsaXN0Q29uZmlnLmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpPy5mbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdDtcbiAgICBpZiAodHlwZSA9PT0gJ2dyb3VwJyAmJiBmbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdCkge1xuICAgICAgaXRlbXMgPSBmbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdChpdGVtcyk7XG4gICAgfVxuICAgIGlmIChsaXN0Q29uZmlnLmF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1swXTtcbiAgICAgIGNvbnN0IGtleSA9IGdldChpdGVtLCB0aGlzLmZpZWxkS2V5KCkpO1xuICAgICAgaWYgKHR5cGUgPT09ICdyYWRpbycgfHwgdHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdGVkS2V5KHsga2V5LCBpdGVtLCBpc0NsaWNrTWFudWFsOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5saXN0S2V5U2VsZWN0ZWQuc2V0KGtleSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFuZGxlclNlbGVjdE11bHRpS2V5KHsga2V5czogW2tleV0sIG1hcEtleXM6IFt7IGtleSwgaXRlbSwgaXNDbGlja01hbnVhbDogZmFsc2UgfV0sIGlzQ2xpY2tNYW51YWw6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5saXN0TXVsdGlLZXlTZWxlY3RlZC5zZXQoW2tleV0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZSAhPT0gJ2NoZWNrYm94JyAmJiB0eXBlICE9PSAnZ3JvdXAnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBjb25zdCBtYXBLZXlzOiBBcnJheTxJTGlzdERhdGFFbWl0S2V5PiA9IFtdO1xuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpKTtcbiAgICAgIGlmIChpc05pbChrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgbWFwS2V5cy5wdXNoKHsga2V5LCBpdGVtLCBpc0NsaWNrTWFudWFsOiBmYWxzZSB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RNdWx0aUtleSh7IGtleXMsIG1hcEtleXMsIGlzQ2xpY2tNYW51YWw6IGZhbHNlIH0pO1xuICAgIHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQuc2V0KGtleXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudCh0eXBlOiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIHRoaXMuc2hvd0xpc3Quc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0U2hvd0xpc3QuZW1pdCh0aGlzLnNob3dMaXN0KCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNob3dMaXN0LnNldCh0cnVlKTtcbiAgICB0aGlzLm91dFNob3dMaXN0LmVtaXQodGhpcy5zaG93TGlzdCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRGF0YUNoYW5nZShpdGVtczogQXJyYXk8dW5rbm93bj4pIHtcbiAgICB0aGlzLml0ZW1zLnNldChpdGVtcyk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnVwZGF0ZVBvcG92ZXJPdmVybGF5UG9zaXRpb24oKTtcbiAgICB0aGlzLm91dERhdGFDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoZXZlbnQ6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLmZsYWdNb3VzZUNvbnRlbnQuc2V0KGV2ZW50KTtcbiAgICB0aGlzLm1lcmdlRmxhZ01vdXNlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uT3RoZXIoYnV0dG9uOiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbk90aGVyLmVtaXQoYnV0dG9uKTtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2woKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckNvbnRyb2xFdmVudChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCwgZXZlbnRGcm9tTGlzdCA9IGZhbHNlKSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQ/LmtleTtcbiAgICBjb25zdCBpdGVtID0gZXZlbnQ/Lml0ZW07XG4gICAgdGhpcy5sZW5ndGhLZXlzLnNldCghKGlzTmlsKGtleSkgfHwgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSA9PT0gJycpKSA/IDEgOiAwKTtcbiAgICB0aGlzLmxpc3RLZXlTZWxlY3RlZC5zZXQoa2V5KTtcbiAgICBpZiAoIXRoaXMuYWxsb3dTZWxlY3RJdGVtTXVsdGlwbGUoKSAmJiB0aGlzLml0ZW1zU2VsZWN0ZWQoKSAmJiBnZXQodGhpcy5pdGVtc1NlbGVjdGVkKCksIHRoaXMuZmllbGRLZXkoKSkgPT09IGtleSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleUJ5SW5wdXQuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkS2V5QnlJbnB1dCgpKSB7XG4gICAgICBpZiAoIShpc05pbChrZXkpIHx8ICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkgPT09ICcnKSkgJiYgKGl0ZW0gfHwgdGhpcy5pdGVtc1NlbGVjdGVkKCkpKSB7XG4gICAgICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnRGcm9tTGlzdCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleUJ5SW5wdXQuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja1ZhbGlkKCk7XG4gICAgaWYgKHRoaXMubGVuZ3RoS2V5cygpICYmICFpdGVtICYmIHRoaXMuaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCgpKSB7XG4gICAgICBsZXQgaXRlbVNlbGVjdGVkID0gYXdhaXQgdGhpcy5zZXRJdGVtU2VsZWN0ZWRCeUtleShrZXkpO1xuICAgICAgaWYgKCFpdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgaXRlbVNlbGVjdGVkID0ge1xuICAgICAgICAgIFt0aGlzLmZpZWxkS2V5KCldOiBrZXksXG4gICAgICAgICAgW3RoaXMuZmllbGRMYWJlbCgpXTogQ0hBUkFDVEVSX0RBVEFfRU1QVFlcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChpdGVtU2VsZWN0ZWQpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50Lml0ZW0gPSBpdGVtU2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHsgLi4uZXZlbnQsIHRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUoKSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChjbG9uZURlZXAoaXRlbSkpO1xuICAgIHRoaXMuYnVpbGREaXNwbGF5KCk7XG4gICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh7IC4uLmV2ZW50LCB0YWJLZXlBY3RpdmU6IHRoaXMudGFiS2V5QWN0aXZlKCkgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNlbGVjdE11bHRpS2V5KGV2ZW50OiBJTGlzdERhdGFFbWl0TXVsdGlLZXkgfCB1bmRlZmluZWQsIGlzQ2xpY2tNYW51YWwgPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLmxpc3RDb25maWcoKT8uY29uZmlnVGVtcGxhdGVHcm91cD8uKCk/LnNpbmdsZVNlbGVjdEl0ZW0gJiYgZXZlbnQ/Lm1hcEtleXM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgaXRlbUNsaWNrTWFudWFsID0gZXZlbnQubWFwS2V5cy5maW5kKG1hcEtleSA9PiBtYXBLZXkuaXRlbSAmJiBtYXBLZXkuaXRlbS5pc0NoZWNrTWFudWFsKTtcbiAgICAgIGlmIChpdGVtQ2xpY2tNYW51YWwpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBpdGVtQ2xpY2tNYW51YWwuaXRlbS5pc0NoZWNrTWFudWFsID0gZmFsc2UpO1xuICAgICAgICBldmVudC5rZXlzID0gW2l0ZW1DbGlja01hbnVhbC5rZXldO1xuICAgICAgICBldmVudC5tYXBLZXlzID0gW2l0ZW1DbGlja01hbnVhbF07XG4gICAgICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmtleXNTZWxlY3RlZC5zZXQoWy4uLihldmVudD8ua2V5cyB8fCBbXSldKTtcbiAgICB0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkLnNldChbLi4uKGV2ZW50Py5rZXlzIHx8IFtdKV0pO1xuICAgIHRoaXMubGVuZ3RoS2V5cy5zZXQoZXZlbnQ/LmtleXM/Lmxlbmd0aCB8fCAwKTtcbiAgICB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgICBpZiAodGhpcy5sZW5ndGhLZXlzKCkgPiAxKSB7XG4gICAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyAuLi4oZXZlbnQgfHwge30pLCBpc0NsaWNrTWFudWFsLCB0YWJLZXlBY3RpdmU6IHRoaXMudGFiS2V5QWN0aXZlKCkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IGV2ZW50Py5rZXlzWzBdO1xuICAgIGxldCBpdGVtID0gZXZlbnQ/Lm1hcEtleXM/LmZpbmQoaXRlbSA9PiBpdGVtLmtleSA9PT0ga2V5KT8uaXRlbTtcblxuICAgIGlmICh0aGlzLmxlbmd0aEtleXMoKSAmJiAhaXRlbSAmJiB0aGlzLmh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWQoKSkge1xuICAgICAgaXRlbSA9IGF3YWl0IHRoaXMuc2V0SXRlbVNlbGVjdGVkQnlLZXkoa2V5KTtcbiAgICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IGtleXM6IFtrZXldLCBtYXBLZXlzOiBbeyBrZXksIGl0ZW0gfV0sIGlzQ2xpY2tNYW51YWwsIHRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUoKSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChjbG9uZURlZXAoaXRlbSkpO1xuICAgIHRoaXMuYnVpbGREaXNwbGF5KCk7XG4gICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHsgLi4uKGV2ZW50IHx8IHt9KSwgaXNDbGlja01hbnVhbCwgdGFiS2V5QWN0aXZlOiB0aGlzLnRhYktleUFjdGl2ZSgpIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRJdGVtU2VsZWN0ZWRCeUtleShrZXk6IHVua25vd24pIHtcbiAgICBjb25zdCBodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkID0gdGhpcy5odHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkKCk7XG4gICAgaWYgKCFodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkIHx8IHRoaXMubG9hZGluZ0RldGFpbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KHRydWUpO1xuICAgICAgY29uc3QgeyBhcmd1bWVudHNWYWx1ZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUgfSA9IGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWQ7XG4gICAgICB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS51cGRhdGVBcmd1bWVudHMoYXJndW1lbnRzVmFsdWUsIHsga2V5LCBkcm9wZG93blRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUoKSB9LCB7fSwgJycsIGZhbHNlLCBmYWxzZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UuY2FsbEFwaShodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkKTtcbiAgICAgIGNvbnN0IGl0ZW0gPSBjbG9uZURlZXAocmVzdWx0LmRhdGFbMF0gfHwgcmVzdWx0LmRhdGEpO1xuICAgICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChpdGVtKTtcbiAgICAgIHRoaXMuYnVpbGREaXNwbGF5KCk7XG4gICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVRhYigpIHtcbiAgICB0aGlzLm91dENoYW5nZVRhYktleUFjdGl2ZS5lbWl0KHRoaXMudGFiS2V5QWN0aXZlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJMb2FkaW5nTGlzdChldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMubG9hZGluZ0xpc3Quc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0RXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMuZXJyb3Iuc2V0KHsgbWVzc2FnZTogZXJyb3IgfSk7XG4gICAgdGhpcy5zaG93Qm9yZGVyRXJyb3Iuc2V0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZCgpIHtcbiAgICBpZiAodGhpcy5lcnJvcigpPy5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tWYWxpZCh2YWxpZGF0ZURlZmF1bHQ/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgdGhpcy5lcnJvci5zZXQodW5kZWZpbmVkKTtcbiAgICBjb25zdCB2YWxpZCA9IHsgcmVxdWlyZWQ6IHRydWUsIGxpbWl0TWF4SXRlbVNlbGVjdDogdHJ1ZSB9O1xuICAgIGNvbnN0IHZhbGlkTWF4SXRlbVNlbGVjdGVkID0gdGhpcy52YWxpZE1heEl0ZW1TZWxlY3RlZCgpO1xuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKSAmJiAhdGhpcy5sZW5ndGhLZXlzKCkpIHtcbiAgICAgIHZhbGlkLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWxpZE1heEl0ZW1TZWxlY3RlZCAmJiB0aGlzLmxlbmd0aEtleXMoKSA+IHZhbGlkTWF4SXRlbVNlbGVjdGVkLnZhbHVlKSB7XG4gICAgICB2YWxpZC5saW1pdE1heEl0ZW1TZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF2YWxpZGF0ZURlZmF1bHQgJiYgdmFsaWQucmVxdWlyZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCB2YWxpZFJlcXVpcmVkID0gdGhpcy52YWxpZFJlcXVpcmVkKCk7XG4gICAgICB0aGlzLmVycm9yLnNldCh7IC4uLih2YWxpZFJlcXVpcmVkIHx8IHt9KSwgbWVzc2FnZTogdmFsaWRSZXF1aXJlZD8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEIH0pO1xuICAgIH1cbiAgICBpZiAoIXZhbGlkYXRlRGVmYXVsdCAmJiAhdGhpcy5lcnJvcigpICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHZhbGlkTWF4SXRlbVNlbGVjdGVkID0gdGhpcy52YWxpZE1heEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgdGhpcy5lcnJvci5zZXQoeyAuLi4odmFsaWRNYXhJdGVtU2VsZWN0ZWQgfHwge30pLCBtZXNzYWdlOiB2YWxpZE1heEl0ZW1TZWxlY3RlZD8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHsgdmFsdWU6IHZhbGlkTWF4SXRlbVNlbGVjdGVkPy52YWx1ZSB9IH0pXG4gICAgfVxuICAgIHRoaXMub3V0VmFsaWRFdmVudC5lbWl0KHZhbGlkLnJlcXVpcmVkICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdCk7XG4gICAgcmV0dXJuIHZhbGlkLnJlcXVpcmVkICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzZXRFcnJvcigpIHtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuc2hvd0JvcmRlckVycm9yLnNldChmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckxpc3RGdW5jdGlvbnNDb250cm9sKGV2ZW50OiBJTGlzdEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5saXN0RnVuY3Rpb25Db250cm9sLnNldChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoZmxhZzogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMuZmxhZ01vdXNlLnNldChmbGFnKTtcbiAgICB0aGlzLm1lcmdlRmxhZ01vdXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0KCkge1xuICAgIHRoaXMuaXRlbXNTZWxlY3RlZC5zZXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmxlbmd0aEtleXMuc2V0KDApO1xuICAgIHRoaXMubGlzdEZ1bmN0aW9uQ29udHJvbCgpPy5yZXNldEtleVNlbGVjdGVkKCk7XG4gICAgaWYgKCF0aGlzLnNob3dMaXN0KCkgJiYgdGhpcy5vbmx5RW1pdERhdGFXaGVuUmVzZXQoKSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHRoaXMubGlzdEtleVNlbGVjdGVkLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5rZXlzU2VsZWN0ZWQuc2V0KFtdKTtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlCeUlucHV0LnNldChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkRGlzcGxheSgpIHtcbiAgICBpZiAodGhpcy5pdGVtc1NlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuY29udmVydEl0ZW1TZWxlY3RlZCgpKHRoaXMuaXRlbXNTZWxlY3RlZCgpLCB0aGlzLnRyYW5zbGF0ZSk7XG4gICAgICBjb25zdCBnZXRQb3BvdmVySXRlbVNlbGVjdGVkID0gdGhpcy5nZXRQb3BvdmVySXRlbVNlbGVjdGVkKCk7XG4gICAgICBpZiAoZ2V0UG9wb3Zlckl0ZW1TZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnBvcG92ZXJJdGVtU2VsZWN0ZWQuc2V0KGF3YWl0IGdldFBvcG92ZXJJdGVtU2VsZWN0ZWQodGhpcy5pdGVtc1NlbGVjdGVkLCB0aGlzLnRyYW5zbGF0ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VGbGFnTW91c2UoKSB7XG4gICAgY29uc3QgZmxhZzogSUZsYWdNb3VzZSA9IHsgaXNNb3VzZUVudGVyOiBmYWxzZSwgaXNNb3VzZUVudGVyQ29udGVudDogZmFsc2UsIGlzQ29udGFpbmVySGFzU2Nyb2xsOiBmYWxzZSB9O1xuICAgIGlmICh0aGlzLmZsYWdNb3VzZUNvbnRlbnQoKT8uaXNNb3VzZUVudGVyIHx8IHRoaXMuZmxhZ01vdXNlKCkuaXNNb3VzZUVudGVyKSB7XG4gICAgICBmbGFnLmlzTW91c2VFbnRlciA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZsYWdNb3VzZUNvbnRlbnQoKT8uaXNNb3VzZUVudGVyQ29udGVudCB8fCB0aGlzLmZsYWdNb3VzZSgpLmlzTW91c2VFbnRlckNvbnRlbnQpIHtcbiAgICAgIGZsYWcuaXNNb3VzZUVudGVyQ29udGVudCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZsYWdNb3VzZUNvbnRlbnQoKT8uaXNDb250YWluZXJIYXNTY3JvbGwgfHwgdGhpcy5mbGFnTW91c2UoKS5pc0NvbnRhaW5lckhhc1Njcm9sbCkge1xuICAgICAgZmxhZy5pc0NvbnRhaW5lckhhc1Njcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZS5lbWl0KGZsYWcpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbFwiPlxuICBAaWYgKGxhYmVsQ29uZmlnKCk7IGFzIGxhYmVsKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBbY2xhc3NJbmNsdWRlXT1cImxhYmVsLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsLmxhYmVsTGVmdFwiXG4gICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWwubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgW3JlcXVpcmVkXT1cImxhYmVsLnJlcXVpcmVkIFwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwibGFiZWwuZGVzY3JpcHRpb25cIlxuICAgICAgW2Rlc2NyaXB0aW9uQ2xhc3NdPVwibGFiZWwuZGVzY3JpcHRpb25DbGFzc1wiXG4gICAgICBbbGFiZWxSaWdodF09XCJsYWJlbC5sYWJlbFJpZ2h0XCJcbiAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWwubGFiZWxSaWdodENsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2J1dHRvbnNMZWZ0XT1cImxhYmVsLmJ1dHRvbnNMZWZ0XCJcbiAgICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWwuYnV0dG9uc1JpZ2h0XCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwibGFiZWwuZGlzYWJsZUJ1dHRvbnNMZWZ0IHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwibGFiZWwuZGlzYWJsZUJ1dHRvbnNSaWdodCB8fCBkaXNhYmxlKCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgIFtoYXNUb2dnbGVdPVwibGFiZWwuaGFzVG9nZ2xlXCJcbiAgICAgIFt0b2dnbGVBY3RpdmVdPVwibGFiZWwudG9nZ2xlQWN0aXZlXCJcbiAgICAgIFt0b2dnbGVEaXNhYmxlXT1cImxhYmVsLnRvZ2dsZURpc2FibGUgfHwgZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICBbcG9wb3Zlcl09XCJsYWJlbC5wb3BvdmVyXCJcbiAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImxhYmVsLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWwub25seVNob3dDb3VudFwiXG4gICAgICBbbGltaXRMZW5ndGhdPVwibGFiZWwubGltaXRMZW5ndGhcIlxuICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbC5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWwuZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbiB8fCBkaXNhYmxlKClcIlxuICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImxhYmVsLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgIFtjb3VudF09XCJsYWJlbC5jb3VudFwiIC8+XG4gIH1cbiAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgIFtjbGFzc109XCJjbGFzc0luY2x1ZGUoKSB8fCAndy1mdWxsJ1wiXG4gICAgW21vZGVdPVwiJ2NsaWNrLXRvZ2dsZSdcIlxuICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgIFtpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlXT1cInRydWVcIlxuICAgIFtpZ25vcmVDdXJzb3JQb2ludGVyTW9kZUxpa2VDbGlja109XCJ0cnVlXCJcbiAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwiaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKVwiXG4gICAgW2VsZW1lbnRSZWZDdXN0b21dPVwicG9wb3ZlckVsZW1lbnRSZWZDdXN0b20oKVwiXG4gICAgW2NvbmZpZ109XCJ7XG4gICAgICBhbmltYXRpb25Db25maWc6IHBvcG92ZXJDdXN0b21Db25maWcoKT8uYW5pbWF0aW9uQ29uZmlnIHx8IHt9LFxuICAgICAgekluZGV4OiB6SW5kZXgoKSA/PyAxMDAwLFxuICAgICAgd2lkdGhCeVBhcmVudDogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy53aWR0aEJ5UGFyZW50ID8/IHRydWUsXG4gICAgICBwYXJlbnRCb3JkZXJXaWR0aDogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5wYXJlbnRCb3JkZXJXaWR0aCA/PyAwLFxuICAgICAgbWF4SGVpZ2h0OiBwb3BvdmVyQ3VzdG9tQ29uZmlnKCk/Lm1heEhlaWdodCA/PyAyMDQ4LFxuICAgICAgbWF4V2lkdGg6IHBvcG92ZXJDdXN0b21Db25maWcoKT8ubWF4V2lkdGggPz8gMjA0OCxcbiAgICAgIGRpcmVjdGlvbjogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5kaXJlY3Rpb24gPz8gJ2JvdHRvbScsXG4gICAgICB0ZW1wbGF0ZTogbGlzdFZpZXdFbCxcbiAgICAgIHdoaXRlVGhlbWU6IHRydWUsXG4gICAgICB0aW1lckRlc3Ryb3k6IHBvcG92ZXJDdXN0b21Db25maWcoKT8udGltZXJEZXN0cm95ID8/IDAsXG4gICAgICBpZ25vcmVBcnJvdzogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5pZ25vcmVBcnJvdyA/PyB0cnVlLFxuICAgICAgZGlyZWN0aW9uRGlzdGFuY2U6IDIsXG4gICAgICBjbGFzc0luY2x1ZGU6ICdyb3VuZGVkLVs0cHhdICcgKyAocG9wb3ZlckN1c3RvbUNvbmZpZygpPy5jbGFzc0luY2x1ZGUgPz8gJ2xpYnMtdWktYm9yZGVyLWdlbmVyYWwgJykgKyAoKGxpc3RDb25maWcoKT8udHlwZSA9PT0gJ3RleHQnICYmIGxpc3RDb25maWcoKT8uY29uZmlnVGVtcGxhdGVUZXh0Py4oKT8ubm90VXNlVmlydHVhbFNjcm9sbCkgPyAnIG92ZXJmbG93LWhpZGRlbicgOiAnJyksXG4gICAgICBwb3NpdGlvbjogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5wb3NpdGlvbiB8fCB7IG1vZGU6ICdzdGFydCcsIGRpc3RhbmNlOiAwIH0sXG4gICAgICB3aWR0aDogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy53aWR0aFxuICAgIH1cIlxuICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJQb3BvdmVyQ29udHJvbEV2ZW50KCRldmVudClcIlxuICAgIChvdXRFdmVudCk9XCJoYW5kbGVyRXZlbnQoJGV2ZW50KVwiXG4gICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nZUZsYWdNb3VzZSgkZXZlbnQpXCI+XG4gICAgQGlmICghaXNOZ0NvbnRlbnQoKSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktZHJvcGRvd24gJyArIGNsYXNzSW5jbHVkZUNvbnRlbnQoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1nZW5lcmFsXT1cIiFlcnJvcigpICYmICFzaG93Qm9yZGVyRXJyb3IoKSAmJiAhc2hvd0xpc3QoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1wcmltYXJ5LWZvY3VzLWdlbmVyYWxdPVwiIWVycm9yKCkgJiYgIXNob3dCb3JkZXJFcnJvcigpICYmIHNob3dMaXN0KClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCJlcnJvcigpIHx8IHNob3dCb3JkZXJFcnJvcigpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCIhKGRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKCkgfHwgcmVhZG9ubHkoKSlcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWJhY2tncm91bmRdPVwiZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICAgIFtjbGFzcy5yb3VuZGVkLXRyLTBdPVwiaGFzQ29udGVudFVuaXRSaWdodCgpXCJcbiAgICAgICAgW2NsYXNzLnJvdW5kZWQtYnItMF09XCJoYXNDb250ZW50VW5pdFJpZ2h0KClcIlxuICAgICAgICBbY2xhc3MudGV4dC1bIzA3MTYzMV1dPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5iZy1bI2Y4ZjlmYV1dPVwiZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgW2NsYXNzLnRleHQtWyM5Y2EyYWRdXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKCkgfHwgcmVhZG9ubHkoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHctZnVsbCByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHctZnVsbCBhYnNvbHV0ZVwiPlxuICAgICAgICAgICAgICBAaWYgKGxlbmd0aEtleXMoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIEBpZiAoaXRlbXNTZWxlY3RlZCgpOyBhcyBpdGVtc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkR2V0SW1hZ2UoKTsgYXMgZmllbGRHZXRJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWF2YXRhciBbY2xhc3NJbmNsdWRlXT1cImNsYXNzQXZhdGFySW5jbHVkZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZVNoYXBlXT1cInR5cGVTaGFwZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJpbWFnZVNpemUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJdPVwiaXRlbXNTZWxlY3RlZFtmaWVsZEdldEltYWdlXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJsaW5rSW1hZ2VFcnJvcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRHZW5Db2xvcl09XCJpdGVtc1NlbGVjdGVkW2ZpZWxkR2V0Q29sb3JBdmF0YXIoKSB8fCBmaWVsZEdldFRleHRBdmF0YXIoKV1cIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0QXZhdGFyXT1cIml0ZW1zU2VsZWN0ZWRbZmllbGRHZXRUZXh0QXZhdGFyKCldXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZ2V0TGFzdFRleHRBZnRlclNwYWNlXT1cImdldExhc3RUZXh0QWZ0ZXJTcGFjZSgpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGRHZXRJY29uKCk7IGFzIGZpZWxkR2V0SWNvbikge1xuICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiaXRlbXNTZWxlY3RlZFtmaWVsZEdldEljb25dICsgJyBtci1bOHB4XSdcIj48L2k+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiKGxhYmVsUG9wb3ZlckZ1bGxXaWR0aCgpID8gJ3ctMTAwICcgOiAnJykgKyBjbGFzc0luY2x1ZGVUZXh0RGlzcGxheVdoZW5Ob1NlbGVjdCgpXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImxhYmVsSXRlbVNlbGVjdGVkQ29tcHV0ZWQoKSB8IHRyYW5zbGF0ZTp7dmFsdWU6IGxlbmd0aEtleXMoKX0gfCBMaWJzVWlQaXBlc1NlY3VyaXR5VHJ1c3RQaXBlOidodG1sJzp1c2VYc3NGaWx0ZXIoKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cInttYXhXaWR0aDogbGFiZWxQb3BvdmVyQ29uZmlnKCk/Lm1heFdpZHRoIHx8IDI1MCwgZGlyZWN0aW9uOiAndG9wJywgekluZGV4OiBsYWJlbFBvcG92ZXJDb25maWcoKT8uekluZGV4LCB0aW1lckRlc3Ryb3k6IGxhYmVsUG9wb3ZlckNvbmZpZygpPy50aW1lckRlc3Ryb3kgfHwgMH1cIlxuICAgICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgQGlmIChwb3BvdmVySXRlbVNlbGVjdGVkKCk7IGFzIHBvcG92ZXJJdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW3R5cGVdPVwicG9wb3Zlckl0ZW1TZWxlY3RlZC50eXBlIHx8ICdvdGhlcidcIlxuICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJwb3BvdmVySXRlbVNlbGVjdGVkLmNvbmZpZyB8fCB7fVwiPlxuICAgICAgICAgICAgICAgICAgQGlmIChwb3BvdmVySXRlbVNlbGVjdGVkLmRhdGFWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJwb3BvdmVySXRlbVNlbGVjdGVkLmRhdGFWaWV3IHwgdHJhbnNsYXRlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tdG9vbHRpcC1vdXRsaW5lIHRleHQtWzE2cHhdIG14LVs4cHhdXCI+IDwvaT5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzE2cHhdIGxpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCB7eyBjbGFzc0luY2x1ZGVJY29uKCkgfX1cIlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtWyM2YTczODNdXT1cIiFyZWFkb25seSgpICYmICFjbGFzc0luY2x1ZGVJY29uKClcIlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtWyM5Y2EyYWRdXT1cIihyZWFkb25seSgpIHx8IGRpc2FibGUoKSkgJiYgIWNsYXNzSW5jbHVkZUljb24oKVwiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICB9XG4gIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gIEBpZiAoc2hvd0Vycm9yKCkpIHtcbiAgICBAaWYgKGVycm9yKCk7IGFzIGVycm9yKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibXQtWzhweF0gdGV4dC1bI2VlMmQ0MV0gbGlicy11aS1mb250LWg3clwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwiKGVycm9yLm1lc3NhZ2UgfHwgJyAnKSB8IHRyYW5zbGF0ZTooZXJyb3IuaW50ZXJwb2xhdGVQYXJhbXMgfHwge30pXCI+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIH1cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNsaXN0Vmlld0VsPlxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cbiAgICBAaWYgKHRhYnNDb25maWcoKSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bi10YWJzIFt0YWJzQ29uZmlnXT1cInRhYnNDb25maWcoKVwiXG4gICAgICAgIFsodGFiS2V5QWN0aXZlKV09XCJ0YWJLZXlBY3RpdmVcIlxuICAgICAgICBbaWdub3JlQm9yZGVyQm90dG9tXT1cImlnbm9yZUJvcmRlckJvdHRvbSgpXCJcbiAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKSB8fCBsb2FkaW5nTGlzdCgpXCJcbiAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlVGFiKClcIiAvPlxuICAgIH1cbiAgICA8bGlic191aS1jb21wb25lbnRzLWxpc3QgW3NlYXJjaENvbmZpZ109XCJsaXN0U2VhcmNoQ29uZmlnKClcIlxuICAgICAgW2lzU2VhcmNoT25saW5lXT1cImlzU2VhcmNoT25saW5lKClcIlxuICAgICAgW2Ryb3Bkb3duVGFiS2V5QWN0aXZlXT1cInRhYktleUFjdGl2ZSgpXCJcbiAgICAgIFtrZXlTZWFyY2hdPVwibGlzdEtleVNlYXJjaCgpXCJcbiAgICAgIFtjb25maWddPVwibGlzdENvbmZpZygpXCJcbiAgICAgIFtwYWRkaW5nTGVmdEl0ZW1dPVwicG9wb3ZlckN1c3RvbUNvbmZpZygpPy5wYWRkaW5nTGVmdEl0ZW0gPz8gdHJ1ZVwiXG4gICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgIFtoaWRkZW5JbnB1dFNlYXJjaF09XCJsaXN0SGlkZGVuSW5wdXRTZWFyY2goKVwiXG4gICAgICBbc2VhcmNoUGFkZGluZ109XCJsaXN0U2VhcmNoUGFkZGluZygpXCJcbiAgICAgIFttYXhJdGVtU2hvd109XCIobGlzdENvbmZpZygpPy50eXBlID09PSAndGV4dCcgJiYgbGlzdENvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRleHQ/LigpPy5ub3RVc2VWaXJ0dWFsU2Nyb2xsKSA/IDAgOiBsaXN0TWF4SXRlbVNob3coKVwiXG4gICAgICBba2V5U2VsZWN0ZWRdPVwibGlzdEtleVNlbGVjdGVkKClcIlxuICAgICAgW211bHRpS2V5U2VsZWN0ZWRdPVwibGlzdE11bHRpS2V5U2VsZWN0ZWQoKVwiXG4gICAgICBbY2xpY2tFeGFjdGx5XT1cInBvcG92ZXJDdXN0b21Db25maWcoKT8uY2xpY2tFeGFjdGx5ID8/IGZhbHNlXCJcbiAgICAgIFtkaXZpZGVyQ2xhc3NJbmNsdWRlXT1cImxpc3RTZWFyY2hDb25maWcoKSA/IGxpc3REaXZpZGVyQ2xhc3NJbmNsdWRlKCkgOiAnaGlkZGVuJ1wiXG4gICAgICBbYnV0dG9uc090aGVyXT1cImxpc3RCdXR0b25zT3RoZXIoKVwiXG4gICAgICBbYmFja2dyb3VuZExpc3RDdXN0b21dPVwibGlzdEJhY2tncm91bmRDdXN0b20oKVwiXG4gICAgICBba2V5c0Rpc2FibGVJdGVtXT1cImxpc3RLZXlzRGlzYWJsZSgpXCJcbiAgICAgIFtrZXlzSGlkZGVuSXRlbV09XCJsaXN0S2V5c0hpZGRlbigpXCJcbiAgICAgIFtoYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb24oKSA/PyAoIXBvcG92ZXJDdXN0b21Db25maWcoKSAmJiAhbGFiZWxDb25maWcoKT8ucmVxdWlyZWQgJiYgKGxpc3RDb25maWcoKT8udHlwZSA9PT0gJ3RleHQnIHx8IGxpc3RDb25maWcoKT8udHlwZSA9PT0gJ3JhZGlvJykpXCJcbiAgICAgIFt0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YV09XCJsaXN0U2VhcmNoTm9EYXRhVGVtcGxhdGVSZWYoKVwiXG4gICAgICBbZm9jdXNJbnB1dFNlYXJjaF09XCJmb2N1c0lucHV0U2VhcmNoKClcIlxuICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICBbcmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd25dPVwicmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5KClcIlxuICAgICAgW2lnbm9yZUNsYXNzRGlzYWJsZURlZmF1bHRXaGVuVXNlS2V5c0Rpc2FibGVJdGVtXT1cImxpc3RJZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbSgpXCJcbiAgICAgIFtoYXNEaXZpZGVyXT1cImxpc3RDb25maWdIYXNEaXZpZGVyKClcIlxuICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAob3V0U2VsZWN0TXVsdGlLZXkpPVwiaGFuZGxlclNlbGVjdE11bHRpS2V5KCRldmVudCwgdHJ1ZSlcIlxuICAgICAgKG91dENoYW5nZVZpZXcpPVwiaGFuZGxlckRhdGFDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAob3V0Q2xpY2tCdXR0b25PdGhlcik9XCJoYW5kbGVyQ2xpY2tCdXR0b25PdGhlcigkZXZlbnQpXCJcbiAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJMaXN0RnVuY3Rpb25zQ29udHJvbCgkZXZlbnQpXCJcbiAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCJcbiAgICAgIChvdXRMb2FkaW5nKT1cImhhbmRsZXJMb2FkaW5nTGlzdCgkZXZlbnQpXCIgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
455
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNKLE9BQU8sRUFBRSwrQkFBK0IsRUFBOEMsTUFBTSw0QkFBNEIsQ0FBQztBQUl6SCxPQUFPLEVBQVUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQXVGLDZCQUE2QixFQUFpQixNQUFNLDBCQUEwQixDQUFDO0FBQ2hNLE9BQU8sRUFBdUUsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFDeEssT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0UsT0FBTyxFQUFzQix3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0SSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHeEUsT0FBTyxFQUFFLHFDQUFx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NkIseTlCQUM5RCxxQ0FBcUM7OzRGQUc1QixpQ0FBaUM7a0JBZDdDLFNBQVM7K0JBRUUsNkJBQTZCLGNBRzNCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxlQUFlLEVBQUUsNEJBQTRCLEVBQUUsU0FBUzt3QkFDeEQsOEJBQThCLEVBQUUsZ0NBQWdDO3dCQUNoRSwrQkFBK0IsRUFBRSw2QkFBNkI7d0JBQzlELHFDQUFxQztxQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIFRlbXBsYXRlUmVmLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNBdmF0YXJDb21wb25lbnQsIFRZUEVfU0hBUEVfQVZBVEFSLCBUWVBFX1NJWkVfQVZBVEFSX0NPTkZJRyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYXZhdGFyJztcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElJbnB1dFNlYXJjaENvbmZpZyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXNlYXJjaCc7XG5pbXBvcnQgeyBJVmFsaWQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy12YWxpZCc7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWwnO1xuaW1wb3J0IHsgZ2V0RmllbGRLZXlCeVR5cGUsIElMaXN0RGF0YUVtaXRLZXksIElMaXN0RGF0YUVtaXRNdWx0aUtleSwgSUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCwgSUxpc3RDb25maWdJdGVtLCBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCwgVFlQRV9URU1QTEFURSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBJUG9wb3ZlciwgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVBvcG92ZXJPdmVybGF5LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1zZWN1cml0eS10cnVzdCc7XG5pbXBvcnQgeyBJSHR0cFJlcXVlc3RDb25maWcsIExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLWh0dHAtcmVxdWVzdCc7XG5pbXBvcnQgeyBDSEFSQUNURVJfREFUQV9FTVBUWSwgY2xvbmVEZWVwLCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgZ2V0LCBpc05pbCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBJRHJvcGRvd25UYWJzSXRlbSwgSUVtaXRNdWx0aUtleSwgSUVtaXRTZWxlY3RLZXksIElQb3BvdmVyQ3VzdG9tQ29uZmlnLCBJVmFsaWRNYXhJdGVtU2VsZWN0ZWQgfSBmcm9tICcuL2ludGVyZmFjZXMvZHJvcGRvd24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEcm9wZG93blRhYnNDb21wb25lbnQgfSBmcm9tICcuL3RhYnMvdGFicy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSwgTGlic1VpUGlwZXNTZWN1cml0eVRydXN0UGlwZSwgQXN5bmNQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duVGFic0NvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIGVycm9yID0gc2lnbmFsPElWYWxpZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHNob3dMaXN0ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGl0ZW1zU2VsZWN0ZWQgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgbG9hZGluZ0RldGFpbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBsb2FkaW5nTGlzdCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpdGVtcyA9IHNpZ25hbDxBcnJheTx1bmtub3duPj4oW10pO1xuICBwcm90ZWN0ZWQgZmllbGRMYWJlbCA9IHNpZ25hbDxzdHJpbmc+KCdsYWJlbERpc3BsYXknKTtcbiAgcHJvdGVjdGVkIHBvcG92ZXJJdGVtU2VsZWN0ZWQgPSBzaWduYWw8SVBvcG92ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsYWJlbEl0ZW1TZWxlY3RlZENvbXB1dGVkID0gY29tcHV0ZWQodGhpcy5nZXRMYWJlbEl0ZW1TZWxlY3RlZC5iaW5kKHRoaXMpKTtcblxuICBwcml2YXRlIGtleXNTZWxlY3RlZCA9IHNpZ25hbDxBcnJheTx1bmtub3duPj4oW10pO1xuICBwcml2YXRlIHBvcG92ZXJGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBmaWVsZEtleSA9IHNpZ25hbDxzdHJpbmc+KCdpZCcpO1xuICBwcml2YXRlIGxpc3RGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8SUxpc3RGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBzZWxlY3RlZEtleUJ5SW5wdXQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8qIElOUFVUICovXG4gIHJlYWRvbmx5IHVzZVhzc0ZpbHRlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcG9wb3ZlckVsZW1lbnRSZWZDdXN0b20gPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZmxhZ01vdXNlID0gbW9kZWw8SUZsYWdNb3VzZT4oeyBpc01vdXNlRW50ZXI6IGZhbHNlLCBpc01vdXNlRW50ZXJDb250ZW50OiBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgZmxhZ01vdXNlQ29udGVudCA9IG1vZGVsPElGbGFnTW91c2U+KCk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDdXN0b21Db25maWcgPSBpbnB1dDxJUG9wb3ZlckN1c3RvbUNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgaXNOZ0NvbnRlbnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGNvbnZlcnRJdGVtU2VsZWN0ZWQgPSBpbnB1dDwoaXRlbTogdW5rbm93biwgdHJhbnNsYXRlPzogVHJhbnNsYXRlU2VydmljZSkgPT4gdm9pZD4odGhpcy5kZWZhdWx0Q29udmVydEl0ZW1TZWxlY3RlZC5iaW5kKHRoaXMpKTtcbiAgcmVhZG9ubHkgZ2V0UG9wb3Zlckl0ZW1TZWxlY3RlZCA9IGlucHV0PChpdGVtOiB1bmtub3duLCB0cmFuc2xhdGU/OiBUcmFuc2xhdGVTZXJ2aWNlKSA9PiBQcm9taXNlPElQb3BvdmVyIHwgdW5kZWZpbmVkPj4oKTtcbiAgcmVhZG9ubHkgaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCA9IGlucHV0PElIdHRwUmVxdWVzdENvbmZpZz4oKTtcbiAgcmVhZG9ubHkgbGVuZ3RoS2V5cyA9IG1vZGVsPG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nPignaTE4bl9zZWxlY3RfdmFsdWUnKTtcbiAgcmVhZG9ubHkgdGV4dERpc3BsYXlXaGVuTXVsdGlTZWxlY3QgPSBpbnB1dDxzdHJpbmc+KCdpMThuX3NlbGVjdGluZ19vcHRpb25zJyk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZVRleHREaXNwbGF5V2hlbk5vU2VsZWN0ID0gaW5wdXQ8c3RyaW5nPignbGlicy11aS1mb250LWg1cicpO1xuICByZWFkb25seSBmaWVsZEdldExhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsYWJlbFBvcG92ZXJDb25maWcgPSBpbnB1dDxJUG9wb3Zlck92ZXJsYXk+KCk7XG4gIHJlYWRvbmx5IGxhYmVsUG9wb3ZlckZ1bGxXaWR0aCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBoYXNDb250ZW50VW5pdFJpZ2h0ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdFNlYXJjaE5vRGF0YVRlbXBsYXRlUmVmID0gaW5wdXQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG4gIHJlYWRvbmx5IGZpZWxkR2V0SW1hZ2UgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGltYWdlU2l6ZSA9IGlucHV0PFRZUEVfU0laRV9BVkFUQVJfQ09ORklHPigxNik7XG4gIHJlYWRvbmx5IHR5cGVTaGFwZSA9IGlucHV0PFRZUEVfU0hBUEVfQVZBVEFSPignY2lyY2xlJyk7XG4gIHJlYWRvbmx5IGZpZWxkR2V0SWNvbiA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZmllbGRHZXRUZXh0QXZhdGFyID0gaW5wdXQ8c3RyaW5nPigndXNlcm5hbWUnKTtcbiAgcmVhZG9ubHkgZmllbGRHZXRDb2xvckF2YXRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY2xhc3NBdmF0YXJJbmNsdWRlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdtci1bOHB4XScsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSB8fCAnbXItWzhweF0nIH0pO1xuICByZWFkb25seSBnZXRMYXN0VGV4dEFmdGVyU3BhY2UgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaW5rSW1hZ2VFcnJvciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgc2hvd0Vycm9yID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHNob3dCb3JkZXJFcnJvciA9IG1vZGVsPGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxhYmVsQ29uZmlnID0gaW5wdXQ8SUxhYmVsPigpO1xuICByZWFkb25seSBsaXN0U2VhcmNoQ29uZmlnID0gaW5wdXQ8SUlucHV0U2VhcmNoQ29uZmlnLCBJSW5wdXRTZWFyY2hDb25maWcgfCB1bmRlZmluZWQ+KHsgbm9Cb3JkZXI6IHRydWUgfSwgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlIHx8IHsgbm9Cb3JkZXI6IHRydWUgfSB9KTtcbiAgcmVhZG9ubHkgaXNTZWFyY2hPbmxpbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxpc3RIaWRkZW5JbnB1dFNlYXJjaCA9IGlucHV0PGJvb2xlYW4+KClcbiAgcmVhZG9ubHkgbGlzdFNlYXJjaFBhZGRpbmcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaXN0S2V5U2VhcmNoID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsaXN0RGl2aWRlckNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbGlzdENvbmZpZyA9IGlucHV0PElMaXN0Q29uZmlnSXRlbT4oKTtcbiAgcmVhZG9ubHkgbGlzdEJ1dHRvbnNPdGhlciA9IGlucHV0PEFycmF5PElCdXR0b24+PigpO1xuICByZWFkb25seSBsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsaXN0Q2xpY2tFeGFjdGx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdEJhY2tncm91bmRDdXN0b20gPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxpc3RNYXhJdGVtU2hvdyA9IGlucHV0PG51bWJlcj4oNiwpO1xuICByZWFkb25seSBsaXN0S2V5U2VsZWN0ZWQgPSBtb2RlbDx1bmtub3duPigpO1xuICByZWFkb25seSBsaXN0TXVsdGlLZXlTZWxlY3RlZCA9IG1vZGVsPEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBsaXN0S2V5c0Rpc2FibGUgPSBpbnB1dDxBcnJheTxzdHJpbmc+PigpOyAvLyBraMO0bmcgZMO5bmcgZ2nDoSB0cuG7iyBuw6B5IGvhur90IGjhu6NwIHbhu5tpIHRlbXBsYXRlIGNoZWNrYm94IGPDsyBjb25maWcgY2jhu6lhIGNvbmZpZ0NoZWNrYm94Q2hlY2tBbGxcbiAgcmVhZG9ubHkgbGlzdEtleXNIaWRkZW4gPSBpbnB1dDxBcnJheTxzdHJpbmc+PigpOyAvLyBraMO0bmcgZMO5bmcgZ2nDoSB0cuG7iyBuw6B5IGvhur90IGjhu6NwIHbhu5tpIHRlbXBsYXRlIGNoZWNrYm94IGPDsyBjb25maWcgY2jhu6lhIGNvbmZpZ0NoZWNrYm94Q2hlY2tBbGxcbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PElWYWxpZD4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNYXhJdGVtU2VsZWN0ZWQgPSBpbnB1dDxJVmFsaWRNYXhJdGVtU2VsZWN0ZWQ+KCk7XG4gIHJlYWRvbmx5IGNoYW5nZVZhbGlkVW5kZWZpbmVkUmVzZXRFcnJvciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGFsbG93U2VsZWN0SXRlbU11bHRpcGxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZm9jdXNJbnB1dFNlYXJjaCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBvbmx5RW1pdERhdGFXaGVuUmVzZXQgPSBpbnB1dDxib29sZWFuPigpOyAvLyB0cnVlIGtoaSBtdeG7kW4gZW1pdCBz4buxIGtp4buHbiB0aGF5IMSR4buVaSBrZXlcbiAgcmVhZG9ubHkgcmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgbGlzdENvbmZpZ0hhc0RpdmlkZXIgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlSWNvbiA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignbWwtWzhweF0nLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgfHwgJ21sLVs4cHhdJyB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlQ29udGVudCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbGlzdElnbm9yZUNsYXNzRGlzYWJsZURlZmF1bHRXaGVuVXNlS2V5c0Rpc2FibGVJdGVtID0gaW5wdXQ8Ym9vbGVhbj4oKTsgLy8gYuG7jyBjaOG6vyDEkeG7mSBkaXNhYmxlIGl0ZW0gdHLDqm4gaHRtbCBsaXN0IHZpZXcgxJHhu4MgZGlzYWJsZSB04burbmcgcGjhuqduIHRyb25nIHJvd3NcbiAgcmVhZG9ubHkgdGFiS2V5QWN0aXZlID0gbW9kZWw8c3RyaW5nPigpO1xuICByZWFkb25seSB0YWJzQ29uZmlnID0gaW5wdXQ8QXJyYXk8SURyb3Bkb3duVGFic0l0ZW0+PigpO1xuICByZWFkb25seSBpZ25vcmVCb3JkZXJCb3R0b20gPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRTZWxlY3RLZXkgPSBvdXRwdXQ8SUVtaXRTZWxlY3RLZXkgfCB1bmRlZmluZWQ+KCk7IC8vIHPhu60gZOG7pW5nIGNobyB0eXBlIGNo4buNbiAxLlxuICByZWFkb25seSBvdXRTZWxlY3RNdWx0aUtleSA9IG91dHB1dDxJRW1pdE11bHRpS2V5IHwgdW5kZWZpbmVkPigpOyAvLyBz4butIGThu6VuZyBjaG8gdHlwZSBjaG8gcGjDqXAgY2jhu41uIG5oaeG7gXUuXG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFZhbGlkRXZlbnQgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuICByZWFkb25seSBvdXREYXRhQ2hhbmdlID0gb3V0cHV0PEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBvdXRDbGlja0J1dHRvbk90aGVyID0gb3V0cHV0PElCdXR0b24+KCk7XG4gIHJlYWRvbmx5IG91dFNob3dMaXN0ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVRhYktleUFjdGl2ZSA9IG91dHB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLyogSU5KRUNUKi9cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByaXZhdGUgaHR0cFJlcXVlc3RTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUh0dHBSZXF1ZXN0U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGxpc3RDb25maWcgPSB0aGlzLmxpc3RDb25maWcoKTtcbiAgICAgIGlmIChsaXN0Q29uZmlnKSB7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmZpZWxkS2V5LnNldChnZXRGaWVsZEtleUJ5VHlwZShsaXN0Q29uZmlnLCAnaWQnKSkpO1xuICAgICAgfVxuICAgIH0pXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxpc3RLZXlTZWxlY3RlZCgpICYmICF0aGlzLml0ZW1zU2VsZWN0ZWQoKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlCeUlucHV0LnNldCh0cnVlKVxuICAgICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdGVkS2V5KHsga2V5OiB0aGlzLmxpc3RLZXlTZWxlY3RlZCgpLCBpdGVtOiB1bmRlZmluZWQsIGlzQ2xpY2tNYW51YWw6IGZhbHNlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VWYWxpZFVuZGVmaW5lZFJlc2V0RXJyb3IoKSAmJiB0aGlzLnZhbGlkUmVxdWlyZWQoKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5yZXNldEVycm9yKCkpO1xuICAgICAgfVxuICAgIH0pXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkKCkpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5rZXlzU2VsZWN0ZWQoKSB8fCBbXTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkKCkgfHwgW107XG5cbiAgICAgICAgICBpZiAocHJldmlvdXNWYWx1ZS5sZW5ndGggIT09IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdE11bHRpS2V5KHsga2V5czogY3VycmVudFZhbHVlLCBtYXBLZXlzOiBbXSwgaXNDbGlja01hbnVhbDogZmFsc2UgfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCBrZXlQcmV2aW91cyBvZiBwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRWYWx1ZS5zb21lKGtleUN1cnJlbnQgPT4ga2V5Q3VycmVudCA9PT0ga2V5UHJldmlvdXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdE11bHRpS2V5KHsga2V5czogY3VycmVudFZhbHVlLCBtYXBLZXlzOiBbXSwgaXNDbGlja01hbnVhbDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgbGlzdENvbmZpZyA9IHRoaXMubGlzdENvbmZpZygpO1xuICAgIGlmICghdGhpcy5sZW5ndGhLZXlzKCkgJiYgbGlzdENvbmZpZyAmJiAobGlzdENvbmZpZy5hdXRvU2VsZWN0Rmlyc3RJdGVtIHx8IGxpc3RDb25maWcuY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCk/LmF1dG9TZWxlY3RBbGxJdGVtIHx8IGxpc3RDb25maWcuY29uZmlnVGVtcGxhdGVHcm91cD8uKCk/LmZsYXRJdGVtc1N1cHBvcnRBdXRvU2VsZWN0KSAmJiBsaXN0Q29uZmlnLmh0dHBSZXF1ZXN0RGF0YSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nRGV0YWlsLnNldCh0cnVlKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3REYXRhID0gbGlzdENvbmZpZy5odHRwUmVxdWVzdERhdGEoKTtcbiAgICAgICAgY29uc3QgeyBhcmd1bWVudHNWYWx1ZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUgfSA9IGh0dHBSZXF1ZXN0RGF0YTtcbiAgICAgICAgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UudXBkYXRlQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlLCB7IC4uLnRoaXMuaHR0cFJlcXVlc3RTZXJ2aWNlLmZha2VSZXNwb25zZVBhZ2luZ0FwaSgpLCBkcm9wZG93blRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUgfSwge30sICcnLCB0cnVlLCBmYWxzZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5jYWxsQXBpKGh0dHBSZXF1ZXN0RGF0YSk7XG4gICAgICAgIHRoaXMubG9hZGluZ0RldGFpbC5zZXQoZmFsc2UpO1xuICAgICAgICBpZiAocmVzdWx0Py5kYXRhKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5zZXQocmVzdWx0LmRhdGEpO1xuICAgICAgICAgIHRoaXMuZW1pdEF1dG9TZWxlY3RLZXkocmVzdWx0LmRhdGEsIGxpc3RDb25maWcudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgdGhpcy5pdGVtcy5zZXQoW10pO1xuICAgICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0RGF0YUNoYW5nZS5lbWl0KHRoaXMuaXRlbXMoKSk7XG4gICAgfVxuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIHJlc2V0OiB0aGlzLnJlc2V0LmJpbmQodGhpcyksXG4gICAgICB2YWxpZDogdGhpcy52YWxpZC5iaW5kKHRoaXMpLFxuICAgICAgcmVzZXRFcnJvcjogdGhpcy5yZXNldEVycm9yLmJpbmQodGhpcyksXG4gICAgICBzZXRFcnJvcjogdGhpcy5zZXRFcnJvci5iaW5kKHRoaXMpLFxuICAgICAgcmVtb3ZlTGlzdDogYXN5bmMgKCkgPT4gdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCksXG4gICAgICBnZXREaXNhYmxlOiBhc3luYyAoKSA9PiB0aGlzLmRpc2FibGUoKSA/PyBmYWxzZSxcbiAgICAgIHVwZGF0ZUxhYmVsSXRlbVNlbGVjdGVkOiBhc3luYyAobGFiZWwpID0+IHRoaXMuaXRlbXNTZWxlY3RlZC51cGRhdGUodmFsdWUgPT4gKHsgLi4udmFsdWUsIFt0aGlzLmZpZWxkTGFiZWwoKV06IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobGFiZWwpIH0pKSxcbiAgICAgIHJlZnJlc2hMaXN0OiBhc3luYyAoKSA9PiB0aGlzLmxpc3RGdW5jdGlvbkNvbnRyb2woKT8ucmVmcmVzaCgpLFxuICAgICAgc2V0SXRlbVNlbGVjdGVkQnlLZXk6IHRoaXMuc2V0SXRlbVNlbGVjdGVkQnlLZXkuYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tWYWxpZCh0cnVlKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcml2YXRlIGRlZmF1bHRDb252ZXJ0SXRlbVNlbGVjdGVkKGl0ZW06IHVua25vd24pIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmllbGRHZXRMYWJlbCA9IHRoaXMuZmllbGRHZXRMYWJlbCgpO1xuICAgIGNvbnN0IHZhbHVlID0gZmllbGRHZXRMYWJlbCA/IGdldChpdGVtLCBmaWVsZEdldExhYmVsKSA6IHVuZGVmaW5lZDtcbiAgICBzZXQoaXRlbSwgdGhpcy5maWVsZExhYmVsKCksIHZhbHVlID8/IGdldChpdGVtLCAnbGFiZWwnKSA/PyBnZXQoaXRlbSwgJ25hbWUnKSA/PyAnICcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYWJlbEl0ZW1TZWxlY3RlZCgpIHtcbiAgICBsZXQgbGFiZWwgPSAnICc7XG4gICAgaWYgKCF0aGlzLmxlbmd0aEtleXMoKSkge1xuICAgICAgbGFiZWwgPSB0aGlzLnRleHREaXNwbGF5V2hlbk5vU2VsZWN0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxlbmd0aEtleXMoKSA+IDEpIHtcbiAgICAgIGxhYmVsID0gdGhpcy50ZXh0RGlzcGxheVdoZW5NdWx0aVNlbGVjdCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sZW5ndGhLZXlzKCkgPT09IDEpIHtcbiAgICAgIGxhYmVsID0gdGhpcy5pdGVtc1NlbGVjdGVkKCk/Llt0aGlzLmZpZWxkTGFiZWwoKV0gfHwgdGhpcy50ZXh0RGlzcGxheVdoZW5Ob1NlbGVjdCgpO1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICBwcml2YXRlIGVtaXRBdXRvU2VsZWN0S2V5KGl0ZW1zOiBBcnJheTx1bmtub3duPiwgdHlwZTogVFlQRV9URU1QTEFURSkge1xuICAgIGNvbnN0IGxpc3RDb25maWcgPSB0aGlzLmxpc3RDb25maWcoKTtcbiAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGggfHwgIWxpc3RDb25maWcgfHwgKCFsaXN0Q29uZmlnLmF1dG9TZWxlY3RGaXJzdEl0ZW0gJiYgIWxpc3RDb25maWcuY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCk/LmF1dG9TZWxlY3RBbGxJdGVtICYmICFsaXN0Q29uZmlnLmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpPy5mbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxhdEl0ZW1zU3VwcG9ydEF1dG9TZWxlY3QgPSBsaXN0Q29uZmlnLmNvbmZpZ1RlbXBsYXRlR3JvdXA/LigpPy5mbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdDtcbiAgICBpZiAodHlwZSA9PT0gJ2dyb3VwJyAmJiBmbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdCkge1xuICAgICAgaXRlbXMgPSBmbGF0SXRlbXNTdXBwb3J0QXV0b1NlbGVjdChpdGVtcyk7XG4gICAgfVxuICAgIGlmIChsaXN0Q29uZmlnLmF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1swXTtcbiAgICAgIGNvbnN0IGtleSA9IGdldChpdGVtLCB0aGlzLmZpZWxkS2V5KCkpO1xuICAgICAgaWYgKHR5cGUgPT09ICdyYWRpbycgfHwgdHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlclNlbGVjdGVkS2V5KHsga2V5LCBpdGVtLCBpc0NsaWNrTWFudWFsOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5saXN0S2V5U2VsZWN0ZWQuc2V0KGtleSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFuZGxlclNlbGVjdE11bHRpS2V5KHsga2V5czogW2tleV0sIG1hcEtleXM6IFt7IGtleSwgaXRlbSwgaXNDbGlja01hbnVhbDogZmFsc2UgfV0sIGlzQ2xpY2tNYW51YWw6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5saXN0TXVsdGlLZXlTZWxlY3RlZC5zZXQoW2tleV0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZSAhPT0gJ2NoZWNrYm94JyAmJiB0eXBlICE9PSAnZ3JvdXAnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBjb25zdCBtYXBLZXlzOiBBcnJheTxJTGlzdERhdGFFbWl0S2V5PiA9IFtdO1xuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBnZXQoaXRlbSwgdGhpcy5maWVsZEtleSgpKTtcbiAgICAgIGlmIChpc05pbChrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgbWFwS2V5cy5wdXNoKHsga2V5LCBpdGVtLCBpc0NsaWNrTWFudWFsOiBmYWxzZSB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RNdWx0aUtleSh7IGtleXMsIG1hcEtleXMsIGlzQ2xpY2tNYW51YWw6IGZhbHNlIH0pO1xuICAgIHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQuc2V0KGtleXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudCh0eXBlOiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICBpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIHRoaXMuc2hvd0xpc3Quc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0U2hvd0xpc3QuZW1pdCh0aGlzLnNob3dMaXN0KCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNob3dMaXN0LnNldCh0cnVlKTtcbiAgICB0aGlzLm91dFNob3dMaXN0LmVtaXQodGhpcy5zaG93TGlzdCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRGF0YUNoYW5nZShpdGVtczogQXJyYXk8dW5rbm93bj4pIHtcbiAgICB0aGlzLml0ZW1zLnNldChpdGVtcyk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sKCk/LnVwZGF0ZVBvcG92ZXJPdmVybGF5UG9zaXRpb24oKTtcbiAgICB0aGlzLm91dERhdGFDaGFuZ2UuZW1pdCh0aGlzLml0ZW1zKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoZXZlbnQ6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLmZsYWdNb3VzZUNvbnRlbnQuc2V0KGV2ZW50KTtcbiAgICB0aGlzLm1lcmdlRmxhZ01vdXNlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQnV0dG9uT3RoZXIoYnV0dG9uOiBJQnV0dG9uKSB7XG4gICAgdGhpcy5vdXRDbGlja0J1dHRvbk90aGVyLmVtaXQoYnV0dG9uKTtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2woKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckNvbnRyb2xFdmVudChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCwgZXZlbnRGcm9tTGlzdCA9IGZhbHNlKSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQ/LmtleTtcbiAgICBjb25zdCBpdGVtID0gZXZlbnQ/Lml0ZW07XG4gICAgdGhpcy5sZW5ndGhLZXlzLnNldCghKGlzTmlsKGtleSkgfHwgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSA9PT0gJycpKSA/IDEgOiAwKTtcbiAgICB0aGlzLmxpc3RLZXlTZWxlY3RlZC5zZXQoa2V5KTtcbiAgICBpZiAoIXRoaXMuYWxsb3dTZWxlY3RJdGVtTXVsdGlwbGUoKSAmJiB0aGlzLml0ZW1zU2VsZWN0ZWQoKSAmJiBnZXQodGhpcy5pdGVtc1NlbGVjdGVkKCksIHRoaXMuZmllbGRLZXkoKSkgPT09IGtleSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleUJ5SW5wdXQuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkS2V5QnlJbnB1dCgpKSB7XG4gICAgICBpZiAoIShpc05pbChrZXkpIHx8ICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkgPT09ICcnKSkgJiYgKGl0ZW0gfHwgdGhpcy5pdGVtc1NlbGVjdGVkKCkpKSB7XG4gICAgICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnRGcm9tTGlzdCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleUJ5SW5wdXQuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja1ZhbGlkKCk7XG4gICAgaWYgKHRoaXMubGVuZ3RoS2V5cygpICYmICFpdGVtICYmIHRoaXMuaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZCgpKSB7XG4gICAgICBsZXQgaXRlbVNlbGVjdGVkID0gYXdhaXQgdGhpcy5zZXRJdGVtU2VsZWN0ZWRCeUtleShrZXkpO1xuICAgICAgaWYgKCFpdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgaXRlbVNlbGVjdGVkID0ge1xuICAgICAgICAgIFt0aGlzLmZpZWxkS2V5KCldOiBrZXksXG4gICAgICAgICAgW3RoaXMuZmllbGRMYWJlbCgpXTogQ0hBUkFDVEVSX0RBVEFfRU1QVFlcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChpdGVtU2VsZWN0ZWQpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50Lml0ZW0gPSBpdGVtU2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHsgLi4uZXZlbnQsIHRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUoKSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChjbG9uZURlZXAoaXRlbSkpO1xuICAgIHRoaXMuYnVpbGREaXNwbGF5KCk7XG4gICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh7IC4uLmV2ZW50LCB0YWJLZXlBY3RpdmU6IHRoaXMudGFiS2V5QWN0aXZlKCkgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNlbGVjdE11bHRpS2V5KGV2ZW50OiBJTGlzdERhdGFFbWl0TXVsdGlLZXkgfCB1bmRlZmluZWQsIGlzQ2xpY2tNYW51YWwgPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLmxpc3RDb25maWcoKT8uY29uZmlnVGVtcGxhdGVHcm91cD8uKCk/LnNpbmdsZVNlbGVjdEl0ZW0gJiYgZXZlbnQ/Lm1hcEtleXM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgaXRlbUNsaWNrTWFudWFsID0gZXZlbnQubWFwS2V5cy5maW5kKG1hcEtleSA9PiBtYXBLZXkuaXRlbSAmJiBtYXBLZXkuaXRlbS5pc0NoZWNrTWFudWFsKTtcbiAgICAgIGlmIChpdGVtQ2xpY2tNYW51YWwpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBpdGVtQ2xpY2tNYW51YWwuaXRlbS5pc0NoZWNrTWFudWFsID0gZmFsc2UpO1xuICAgICAgICBldmVudC5rZXlzID0gW2l0ZW1DbGlja01hbnVhbC5rZXldO1xuICAgICAgICBldmVudC5tYXBLZXlzID0gW2l0ZW1DbGlja01hbnVhbF07XG4gICAgICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmtleXNTZWxlY3RlZC5zZXQoWy4uLihldmVudD8ua2V5cyB8fCBbXSldKTtcbiAgICB0aGlzLmxpc3RNdWx0aUtleVNlbGVjdGVkLnNldChbLi4uKGV2ZW50Py5rZXlzIHx8IFtdKV0pO1xuICAgIHRoaXMubGVuZ3RoS2V5cy5zZXQoZXZlbnQ/LmtleXM/Lmxlbmd0aCB8fCAwKTtcbiAgICB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgICBpZiAodGhpcy5sZW5ndGhLZXlzKCkgPiAxKSB7XG4gICAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyAuLi4oZXZlbnQgfHwge30pLCBpc0NsaWNrTWFudWFsLCB0YWJLZXlBY3RpdmU6IHRoaXMudGFiS2V5QWN0aXZlKCkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IGV2ZW50Py5rZXlzWzBdO1xuICAgIGxldCBpdGVtID0gZXZlbnQ/Lm1hcEtleXM/LmZpbmQoaXRlbSA9PiBpdGVtLmtleSA9PT0ga2V5KT8uaXRlbTtcblxuICAgIGlmICh0aGlzLmxlbmd0aEtleXMoKSAmJiAhaXRlbSAmJiB0aGlzLmh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWQoKSkge1xuICAgICAgaXRlbSA9IGF3YWl0IHRoaXMuc2V0SXRlbVNlbGVjdGVkQnlLZXkoa2V5KTtcbiAgICAgIHRoaXMub3V0U2VsZWN0TXVsdGlLZXkuZW1pdCh7IGtleXM6IFtrZXldLCBtYXBLZXlzOiBbeyBrZXksIGl0ZW0gfV0sIGlzQ2xpY2tNYW51YWwsIHRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUoKSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChjbG9uZURlZXAoaXRlbSkpO1xuICAgIHRoaXMuYnVpbGREaXNwbGF5KCk7XG4gICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHsgLi4uKGV2ZW50IHx8IHt9KSwgaXNDbGlja01hbnVhbCwgdGFiS2V5QWN0aXZlOiB0aGlzLnRhYktleUFjdGl2ZSgpIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRJdGVtU2VsZWN0ZWRCeUtleShrZXk6IHVua25vd24pIHtcbiAgICBjb25zdCBodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkID0gdGhpcy5odHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkKCk7XG4gICAgaWYgKCFodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkIHx8IHRoaXMubG9hZGluZ0RldGFpbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KHRydWUpO1xuICAgICAgY29uc3QgeyBhcmd1bWVudHNWYWx1ZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUgfSA9IGh0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWQ7XG4gICAgICB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS51cGRhdGVBcmd1bWVudHMoYXJndW1lbnRzVmFsdWUsIHsga2V5LCBkcm9wZG93blRhYktleUFjdGl2ZTogdGhpcy50YWJLZXlBY3RpdmUoKSB9LCB7fSwgJycsIGZhbHNlLCBmYWxzZSwgZ3VpZGVBdXRvVXBkYXRlQXJndW1lbnRzVmFsdWUpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UuY2FsbEFwaShodHRwUmVxdWVzdERldGFpbEl0ZW1CeUlkKTtcbiAgICAgIGNvbnN0IGl0ZW0gPSBjbG9uZURlZXAocmVzdWx0LmRhdGFbMF0gfHwgcmVzdWx0LmRhdGEpO1xuICAgICAgdGhpcy5pdGVtc1NlbGVjdGVkLnNldChpdGVtKTtcbiAgICAgIHRoaXMuYnVpbGREaXNwbGF5KCk7XG4gICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICB0aGlzLmxvYWRpbmdEZXRhaWwuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVRhYigpIHtcbiAgICB0aGlzLm91dENoYW5nZVRhYktleUFjdGl2ZS5lbWl0KHRoaXMudGFiS2V5QWN0aXZlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJMb2FkaW5nTGlzdChldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMubG9hZGluZ0xpc3Quc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0RXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMuZXJyb3Iuc2V0KHsgbWVzc2FnZTogZXJyb3IgfSk7XG4gICAgdGhpcy5zaG93Qm9yZGVyRXJyb3Iuc2V0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZCgpIHtcbiAgICBpZiAodGhpcy5lcnJvcigpPy5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNoZWNrVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tWYWxpZCh2YWxpZGF0ZURlZmF1bHQ/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgdGhpcy5lcnJvci5zZXQodW5kZWZpbmVkKTtcbiAgICBjb25zdCB2YWxpZCA9IHsgcmVxdWlyZWQ6IHRydWUsIGxpbWl0TWF4SXRlbVNlbGVjdDogdHJ1ZSB9O1xuICAgIGNvbnN0IHZhbGlkTWF4SXRlbVNlbGVjdGVkID0gdGhpcy52YWxpZE1heEl0ZW1TZWxlY3RlZCgpO1xuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKSAmJiAhdGhpcy5sZW5ndGhLZXlzKCkpIHtcbiAgICAgIHZhbGlkLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWxpZE1heEl0ZW1TZWxlY3RlZCAmJiB0aGlzLmxlbmd0aEtleXMoKSA+IHZhbGlkTWF4SXRlbVNlbGVjdGVkLnZhbHVlKSB7XG4gICAgICB2YWxpZC5saW1pdE1heEl0ZW1TZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF2YWxpZGF0ZURlZmF1bHQgJiYgdmFsaWQucmVxdWlyZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCB2YWxpZFJlcXVpcmVkID0gdGhpcy52YWxpZFJlcXVpcmVkKCk7XG4gICAgICB0aGlzLmVycm9yLnNldCh7IC4uLih2YWxpZFJlcXVpcmVkIHx8IHt9KSwgbWVzc2FnZTogdmFsaWRSZXF1aXJlZD8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEIH0pO1xuICAgIH1cbiAgICBpZiAoIXZhbGlkYXRlRGVmYXVsdCAmJiAhdGhpcy5lcnJvcigpICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHZhbGlkTWF4SXRlbVNlbGVjdGVkID0gdGhpcy52YWxpZE1heEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgdGhpcy5lcnJvci5zZXQoeyAuLi4odmFsaWRNYXhJdGVtU2VsZWN0ZWQgfHwge30pLCBtZXNzYWdlOiB2YWxpZE1heEl0ZW1TZWxlY3RlZD8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX01BWF9WQUxJRCwgaW50ZXJwb2xhdGVQYXJhbXM6IHsgdmFsdWU6IHZhbGlkTWF4SXRlbVNlbGVjdGVkPy52YWx1ZSB9IH0pXG4gICAgfVxuICAgIHRoaXMub3V0VmFsaWRFdmVudC5lbWl0KHZhbGlkLnJlcXVpcmVkICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdCk7XG4gICAgcmV0dXJuIHZhbGlkLnJlcXVpcmVkICYmIHZhbGlkLmxpbWl0TWF4SXRlbVNlbGVjdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzZXRFcnJvcigpIHtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuc2hvd0JvcmRlckVycm9yLnNldChmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckxpc3RGdW5jdGlvbnNDb250cm9sKGV2ZW50OiBJTGlzdEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5saXN0RnVuY3Rpb25Db250cm9sLnNldChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoZmxhZzogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMuZmxhZ01vdXNlLnNldChmbGFnKTtcbiAgICB0aGlzLm1lcmdlRmxhZ01vdXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0KCkge1xuICAgIHRoaXMuaXRlbXNTZWxlY3RlZC5zZXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmxlbmd0aEtleXMuc2V0KDApO1xuICAgIHRoaXMubGlzdEZ1bmN0aW9uQ29udHJvbCgpPy5yZXNldEtleVNlbGVjdGVkKCk7XG4gICAgaWYgKCF0aGlzLnNob3dMaXN0KCkgJiYgdGhpcy5vbmx5RW1pdERhdGFXaGVuUmVzZXQoKSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHRoaXMubGlzdEtleVNlbGVjdGVkLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMubGlzdE11bHRpS2V5U2VsZWN0ZWQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5rZXlzU2VsZWN0ZWQuc2V0KFtdKTtcbiAgICB0aGlzLmVycm9yLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlCeUlucHV0LnNldChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkRGlzcGxheSgpIHtcbiAgICBpZiAodGhpcy5pdGVtc1NlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuY29udmVydEl0ZW1TZWxlY3RlZCgpKHRoaXMuaXRlbXNTZWxlY3RlZCgpLCB0aGlzLnRyYW5zbGF0ZSk7XG4gICAgICBjb25zdCBnZXRQb3BvdmVySXRlbVNlbGVjdGVkID0gdGhpcy5nZXRQb3BvdmVySXRlbVNlbGVjdGVkKCk7XG4gICAgICBpZiAoZ2V0UG9wb3Zlckl0ZW1TZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnBvcG92ZXJJdGVtU2VsZWN0ZWQuc2V0KGF3YWl0IGdldFBvcG92ZXJJdGVtU2VsZWN0ZWQodGhpcy5pdGVtc1NlbGVjdGVkLCB0aGlzLnRyYW5zbGF0ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VGbGFnTW91c2UoKSB7XG4gICAgY29uc3QgZmxhZzogSUZsYWdNb3VzZSA9IHsgaXNNb3VzZUVudGVyOiBmYWxzZSwgaXNNb3VzZUVudGVyQ29udGVudDogZmFsc2UsIGlzQ29udGFpbmVySGFzU2Nyb2xsOiBmYWxzZSB9O1xuICAgIGlmICh0aGlzLmZsYWdNb3VzZUNvbnRlbnQoKT8uaXNNb3VzZUVudGVyIHx8IHRoaXMuZmxhZ01vdXNlKCkuaXNNb3VzZUVudGVyKSB7XG4gICAgICBmbGFnLmlzTW91c2VFbnRlciA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZsYWdNb3VzZUNvbnRlbnQoKT8uaXNNb3VzZUVudGVyQ29udGVudCB8fCB0aGlzLmZsYWdNb3VzZSgpLmlzTW91c2VFbnRlckNvbnRlbnQpIHtcbiAgICAgIGZsYWcuaXNNb3VzZUVudGVyQ29udGVudCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZsYWdNb3VzZUNvbnRlbnQoKT8uaXNDb250YWluZXJIYXNTY3JvbGwgfHwgdGhpcy5mbGFnTW91c2UoKS5pc0NvbnRhaW5lckhhc1Njcm9sbCkge1xuICAgICAgZmxhZy5pc0NvbnRhaW5lckhhc1Njcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZS5lbWl0KGZsYWcpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbFwiPlxuICBAaWYgKGxhYmVsQ29uZmlnKCk7IGFzIGxhYmVsKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBbY2xhc3NJbmNsdWRlXT1cImxhYmVsLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsLmxhYmVsTGVmdFwiXG4gICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWwubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgW3JlcXVpcmVkXT1cImxhYmVsLnJlcXVpcmVkIFwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwibGFiZWwuZGVzY3JpcHRpb25cIlxuICAgICAgW2Rlc2NyaXB0aW9uQ2xhc3NdPVwibGFiZWwuZGVzY3JpcHRpb25DbGFzc1wiXG4gICAgICBbbGFiZWxSaWdodF09XCJsYWJlbC5sYWJlbFJpZ2h0XCJcbiAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWwubGFiZWxSaWdodENsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2J1dHRvbnNMZWZ0XT1cImxhYmVsLmJ1dHRvbnNMZWZ0XCJcbiAgICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWwuYnV0dG9uc1JpZ2h0XCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwibGFiZWwuZGlzYWJsZUJ1dHRvbnNMZWZ0IHx8IGRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwibGFiZWwuZGlzYWJsZUJ1dHRvbnNSaWdodCB8fCBkaXNhYmxlKCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgIFtoYXNUb2dnbGVdPVwibGFiZWwuaGFzVG9nZ2xlXCJcbiAgICAgIFt0b2dnbGVBY3RpdmVdPVwibGFiZWwudG9nZ2xlQWN0aXZlXCJcbiAgICAgIFt0b2dnbGVEaXNhYmxlXT1cImxhYmVsLnRvZ2dsZURpc2FibGUgfHwgZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICBbcG9wb3Zlcl09XCJsYWJlbC5wb3BvdmVyXCJcbiAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImxhYmVsLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWwub25seVNob3dDb3VudFwiXG4gICAgICBbbGltaXRMZW5ndGhdPVwibGFiZWwubGltaXRMZW5ndGhcIlxuICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbC5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWwuZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbiB8fCBkaXNhYmxlKClcIlxuICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImxhYmVsLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgIFtjb3VudF09XCJsYWJlbC5jb3VudFwiIC8+XG4gIH1cbiAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgIFtjbGFzc109XCJjbGFzc0luY2x1ZGUoKSB8fCAndy1mdWxsJ1wiXG4gICAgW21vZGVdPVwiJ2NsaWNrLXRvZ2dsZSdcIlxuICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgIFtpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlXT1cInRydWVcIlxuICAgIFtpZ25vcmVDdXJzb3JQb2ludGVyTW9kZUxpa2VDbGlja109XCJ0cnVlXCJcbiAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwiaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKVwiXG4gICAgW2VsZW1lbnRSZWZDdXN0b21dPVwicG9wb3ZlckVsZW1lbnRSZWZDdXN0b20oKVwiXG4gICAgW2NvbmZpZ109XCJ7XG4gICAgICBhbmltYXRpb25Db25maWc6IHBvcG92ZXJDdXN0b21Db25maWcoKT8uYW5pbWF0aW9uQ29uZmlnIHx8IHt9LFxuICAgICAgekluZGV4OiB6SW5kZXgoKSA/PyAxMDAwLFxuICAgICAgd2lkdGhCeVBhcmVudDogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy53aWR0aEJ5UGFyZW50ID8/IHRydWUsXG4gICAgICBwYXJlbnRCb3JkZXJXaWR0aDogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5wYXJlbnRCb3JkZXJXaWR0aCA/PyAwLFxuICAgICAgbWF4SGVpZ2h0OiBwb3BvdmVyQ3VzdG9tQ29uZmlnKCk/Lm1heEhlaWdodCA/PyAyMDQ4LFxuICAgICAgbWF4V2lkdGg6IHBvcG92ZXJDdXN0b21Db25maWcoKT8ubWF4V2lkdGggPz8gMjA0OCxcbiAgICAgIGRpcmVjdGlvbjogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5kaXJlY3Rpb24gPz8gJ2JvdHRvbScsXG4gICAgICB0ZW1wbGF0ZTogbGlzdFZpZXdFbCxcbiAgICAgIHdoaXRlVGhlbWU6IHRydWUsXG4gICAgICB0aW1lckRlc3Ryb3k6IHBvcG92ZXJDdXN0b21Db25maWcoKT8udGltZXJEZXN0cm95ID8/IDAsXG4gICAgICBpZ25vcmVBcnJvdzogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5pZ25vcmVBcnJvdyA/PyB0cnVlLFxuICAgICAgZGlyZWN0aW9uRGlzdGFuY2U6IDIsXG4gICAgICBjbGFzc0luY2x1ZGU6ICdyb3VuZGVkLVs0cHhdICcgKyAocG9wb3ZlckN1c3RvbUNvbmZpZygpPy5jbGFzc0luY2x1ZGUgPz8gJ2xpYnMtdWktYm9yZGVyLWdlbmVyYWwgJykgKyAoKGxpc3RDb25maWcoKT8udHlwZSA9PT0gJ3RleHQnICYmIGxpc3RDb25maWcoKT8uY29uZmlnVGVtcGxhdGVUZXh0Py4oKT8ubm90VXNlVmlydHVhbFNjcm9sbCkgPyAnIG92ZXJmbG93LWhpZGRlbicgOiAnJyksXG4gICAgICBwb3NpdGlvbjogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy5wb3NpdGlvbiB8fCB7IG1vZGU6ICdzdGFydCcsIGRpc3RhbmNlOiAwIH0sXG4gICAgICB3aWR0aDogcG9wb3ZlckN1c3RvbUNvbmZpZygpPy53aWR0aFxuICAgIH1cIlxuICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJQb3BvdmVyQ29udHJvbEV2ZW50KCRldmVudClcIlxuICAgIChvdXRFdmVudCk9XCJoYW5kbGVyRXZlbnQoJGV2ZW50KVwiXG4gICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nZUZsYWdNb3VzZSgkZXZlbnQpXCI+XG4gICAgQGlmICghaXNOZ0NvbnRlbnQoKSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiJ2xpYnMtdWktZHJvcGRvd24gJyArIGNsYXNzSW5jbHVkZUNvbnRlbnQoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1nZW5lcmFsXT1cIiFlcnJvcigpICYmICFzaG93Qm9yZGVyRXJyb3IoKSAmJiAhc2hvd0xpc3QoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1wcmltYXJ5LWZvY3VzLWdlbmVyYWxdPVwiIWVycm9yKCkgJiYgIXNob3dCb3JkZXJFcnJvcigpICYmIHNob3dMaXN0KClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCJlcnJvcigpIHx8IHNob3dCb3JkZXJFcnJvcigpXCJcbiAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCIhKGRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKCkgfHwgcmVhZG9ubHkoKSlcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKClcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWJhY2tncm91bmRdPVwiZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImxvYWRpbmdEZXRhaWwoKVwiXG4gICAgICAgIFtjbGFzcy5yb3VuZGVkLXRyLTBdPVwiaGFzQ29udGVudFVuaXRSaWdodCgpXCJcbiAgICAgICAgW2NsYXNzLnJvdW5kZWQtYnItMF09XCJoYXNDb250ZW50VW5pdFJpZ2h0KClcIlxuICAgICAgICBbY2xhc3MudGV4dC1bIzA3MTYzMV1dPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5iZy1bI2Y4ZjlmYV1dPVwiZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgW2NsYXNzLnRleHQtWyM5Y2EyYWRdXT1cImRpc2FibGUoKSB8fCBsb2FkaW5nRGV0YWlsKCkgfHwgcmVhZG9ubHkoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHctZnVsbCByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHctZnVsbCBhYnNvbHV0ZVwiPlxuICAgICAgICAgICAgICBAaWYgKGxlbmd0aEtleXMoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIEBpZiAoaXRlbXNTZWxlY3RlZCgpOyBhcyBpdGVtc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICBAaWYgKGZpZWxkR2V0SW1hZ2UoKTsgYXMgZmllbGRHZXRJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWF2YXRhciBbY2xhc3NJbmNsdWRlXT1cImNsYXNzQXZhdGFySW5jbHVkZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZVNoYXBlXT1cInR5cGVTaGFwZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJpbWFnZVNpemUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJdPVwiaXRlbXNTZWxlY3RlZFtmaWVsZEdldEltYWdlXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJsaW5rSW1hZ2VFcnJvcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRHZW5Db2xvcl09XCJpdGVtc1NlbGVjdGVkW2ZpZWxkR2V0Q29sb3JBdmF0YXIoKSB8fCBmaWVsZEdldFRleHRBdmF0YXIoKV1cIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0QXZhdGFyXT1cIml0ZW1zU2VsZWN0ZWRbZmllbGRHZXRUZXh0QXZhdGFyKCldXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZ2V0TGFzdFRleHRBZnRlclNwYWNlXT1cImdldExhc3RUZXh0QWZ0ZXJTcGFjZSgpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGRHZXRJY29uKCk7IGFzIGZpZWxkR2V0SWNvbikge1xuICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiaXRlbXNTZWxlY3RlZFtmaWVsZEdldEljb25dICsgJyBtci1bOHB4XSdcIj48L2k+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiKGxhYmVsUG9wb3ZlckZ1bGxXaWR0aCgpID8gJ3ctMTAwICcgOiAnJykgKyBjbGFzc0luY2x1ZGVUZXh0RGlzcGxheVdoZW5Ob1NlbGVjdCgpXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImxhYmVsSXRlbVNlbGVjdGVkQ29tcHV0ZWQoKSB8IHRyYW5zbGF0ZTp7dmFsdWU6IGxlbmd0aEtleXMoKX0gfCBMaWJzVWlQaXBlc1NlY3VyaXR5VHJ1c3RQaXBlOidodG1sJzp1c2VYc3NGaWx0ZXIoKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cInttYXhXaWR0aDogbGFiZWxQb3BvdmVyQ29uZmlnKCk/Lm1heFdpZHRoIHx8IDI1MCwgZGlyZWN0aW9uOiAndG9wJywgekluZGV4OiBsYWJlbFBvcG92ZXJDb25maWcoKT8uekluZGV4LCB0aW1lckRlc3Ryb3k6IGxhYmVsUG9wb3ZlckNvbmZpZygpPy50aW1lckRlc3Ryb3kgfHwgMH1cIlxuICAgICAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgQGlmIChwb3BvdmVySXRlbVNlbGVjdGVkKCk7IGFzIHBvcG92ZXJJdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW3R5cGVdPVwicG9wb3Zlckl0ZW1TZWxlY3RlZC50eXBlIHx8ICdvdGhlcidcIlxuICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJwb3BvdmVySXRlbVNlbGVjdGVkLmNvbmZpZyB8fCB7fVwiPlxuICAgICAgICAgICAgICAgICAgQGlmIChwb3BvdmVySXRlbVNlbGVjdGVkLmRhdGFWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJwb3BvdmVySXRlbVNlbGVjdGVkLmRhdGFWaWV3IHwgdHJhbnNsYXRlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tdG9vbHRpcC1vdXRsaW5lIHRleHQtWzE2cHhdIG14LVs4cHhdXCI+IDwvaT5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzE2cHhdIGxpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCB7eyBjbGFzc0luY2x1ZGVJY29uKCkgfX1cIlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtWyM2YTczODNdXT1cIiFyZWFkb25seSgpICYmICFjbGFzc0luY2x1ZGVJY29uKClcIlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtWyM5Y2EyYWRdXT1cIihyZWFkb25seSgpIHx8IGRpc2FibGUoKSkgJiYgIWNsYXNzSW5jbHVkZUljb24oKVwiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICB9XG4gIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gIEBpZiAoc2hvd0Vycm9yKCkpIHtcbiAgICBAaWYgKGVycm9yKCk7IGFzIGVycm9yKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibXQtWzhweF0gdGV4dC1bI2VlMmQ0MV0gbGlicy11aS1mb250LWg3clwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwiKGVycm9yLm1lc3NhZ2UgfHwgJyAnKSB8IHRyYW5zbGF0ZTooZXJyb3IuaW50ZXJwb2xhdGVQYXJhbXMgfHwge30pXCI+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIH1cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNsaXN0Vmlld0VsPlxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cbiAgICBAaWYgKHRhYnNDb25maWcoKSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bi10YWJzIFt0YWJzQ29uZmlnXT1cInRhYnNDb25maWcoKVwiXG4gICAgICAgIFsodGFiS2V5QWN0aXZlKV09XCJ0YWJLZXlBY3RpdmVcIlxuICAgICAgICBbaWdub3JlQm9yZGVyQm90dG9tXT1cImlnbm9yZUJvcmRlckJvdHRvbSgpXCJcbiAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGxvYWRpbmdEZXRhaWwoKSB8fCBsb2FkaW5nTGlzdCgpXCJcbiAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlVGFiKClcIiAvPlxuICAgIH1cbiAgICA8bGlic191aS1jb21wb25lbnRzLWxpc3QgW3NlYXJjaENvbmZpZ109XCJsaXN0U2VhcmNoQ29uZmlnKClcIlxuICAgICAgW2lzU2VhcmNoT25saW5lXT1cImlzU2VhcmNoT25saW5lKClcIlxuICAgICAgW2Ryb3Bkb3duVGFiS2V5QWN0aXZlXT1cInRhYktleUFjdGl2ZSgpXCJcbiAgICAgIFtrZXlTZWFyY2hdPVwibGlzdEtleVNlYXJjaCgpXCJcbiAgICAgIFtjb25maWddPVwibGlzdENvbmZpZygpXCJcbiAgICAgIFtwYWRkaW5nTGVmdEl0ZW1dPVwicG9wb3ZlckN1c3RvbUNvbmZpZygpPy5wYWRkaW5nTGVmdEl0ZW0gPz8gdHJ1ZVwiXG4gICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgbG9hZGluZ0RldGFpbCgpXCJcbiAgICAgIFtoaWRkZW5JbnB1dFNlYXJjaF09XCJsaXN0SGlkZGVuSW5wdXRTZWFyY2goKVwiXG4gICAgICBbc2VhcmNoUGFkZGluZ109XCJsaXN0U2VhcmNoUGFkZGluZygpXCJcbiAgICAgIFttYXhJdGVtU2hvd109XCIobGlzdENvbmZpZygpPy50eXBlID09PSAndGV4dCcgJiYgbGlzdENvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRleHQ/LigpPy5ub3RVc2VWaXJ0dWFsU2Nyb2xsKSA/IDAgOiBsaXN0TWF4SXRlbVNob3coKVwiXG4gICAgICBba2V5U2VsZWN0ZWRdPVwibGlzdEtleVNlbGVjdGVkKClcIlxuICAgICAgW211bHRpS2V5U2VsZWN0ZWRdPVwibGlzdE11bHRpS2V5U2VsZWN0ZWQoKVwiXG4gICAgICBbY2xpY2tFeGFjdGx5XT1cInBvcG92ZXJDdXN0b21Db25maWcoKT8uY2xpY2tFeGFjdGx5ID8/IGZhbHNlXCJcbiAgICAgIFtkaXZpZGVyQ2xhc3NJbmNsdWRlXT1cImxpc3RTZWFyY2hDb25maWcoKSA/IGxpc3REaXZpZGVyQ2xhc3NJbmNsdWRlKCkgOiAnaGlkZGVuJ1wiXG4gICAgICBbYnV0dG9uc090aGVyXT1cImxpc3RCdXR0b25zT3RoZXIoKVwiXG4gICAgICBbYmFja2dyb3VuZExpc3RDdXN0b21dPVwibGlzdEJhY2tncm91bmRDdXN0b20oKVwiXG4gICAgICBba2V5c0Rpc2FibGVJdGVtXT1cImxpc3RLZXlzRGlzYWJsZSgpXCJcbiAgICAgIFtrZXlzSGlkZGVuSXRlbV09XCJsaXN0S2V5c0hpZGRlbigpXCJcbiAgICAgIFtoYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJsaXN0SGFzQnV0dG9uVW5TZWxlY3RPcHRpb24oKSA/PyAoIXBvcG92ZXJDdXN0b21Db25maWcoKSAmJiAhbGFiZWxDb25maWcoKT8ucmVxdWlyZWQgJiYgKGxpc3RDb25maWcoKT8udHlwZSA9PT0gJ3RleHQnIHx8IGxpc3RDb25maWcoKT8udHlwZSA9PT0gJ3JhZGlvJykpXCJcbiAgICAgIFt0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YV09XCJsaXN0U2VhcmNoTm9EYXRhVGVtcGxhdGVSZWYoKVwiXG4gICAgICBbZm9jdXNJbnB1dFNlYXJjaF09XCJmb2N1c0lucHV0U2VhcmNoKClcIlxuICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICBbcmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd25dPVwicmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5KClcIlxuICAgICAgW2lnbm9yZUNsYXNzRGlzYWJsZURlZmF1bHRXaGVuVXNlS2V5c0Rpc2FibGVJdGVtXT1cImxpc3RJZ25vcmVDbGFzc0Rpc2FibGVEZWZhdWx0V2hlblVzZUtleXNEaXNhYmxlSXRlbSgpXCJcbiAgICAgIFtoYXNEaXZpZGVyXT1cImxpc3RDb25maWdIYXNEaXZpZGVyKClcIlxuICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAob3V0U2VsZWN0TXVsdGlLZXkpPVwiaGFuZGxlclNlbGVjdE11bHRpS2V5KCRldmVudCwgdHJ1ZSlcIlxuICAgICAgKG91dENoYW5nZVZpZXcpPVwiaGFuZGxlckRhdGFDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAob3V0Q2xpY2tCdXR0b25PdGhlcik9XCJoYW5kbGVyQ2xpY2tCdXR0b25PdGhlcigkZXZlbnQpXCJcbiAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJMaXN0RnVuY3Rpb25zQ29udHJvbCgkZXZlbnQpXCJcbiAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCJcbiAgICAgIChvdXRMb2FkaW5nKT1cImhhbmRsZXJMb2FkaW5nTGlzdCgkZXZlbnQpXCIgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -460,7 +460,7 @@ class LibsUiComponentsDropdownComponent {
460
460
  this.outChangStageFlagMouse.emit(flag);
461
461
  }
462
462
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
463
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDropdownComponent, isStandalone: true, selector: "libs_ui-components-dropdown", inputs: { useXssFilter: { classPropertyName: "useXssFilter", publicName: "useXssFilter", isSignal: true, isRequired: false, transformFunction: null }, popoverElementRefCustom: { classPropertyName: "popoverElementRefCustom", publicName: "popoverElementRefCustom", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, flagMouseContent: { classPropertyName: "flagMouseContent", publicName: "flagMouseContent", isSignal: true, isRequired: false, transformFunction: null }, popoverCustomConfig: { classPropertyName: "popoverCustomConfig", publicName: "popoverCustomConfig", 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 }, convertItemSelected: { classPropertyName: "convertItemSelected", publicName: "convertItemSelected", isSignal: true, isRequired: false, transformFunction: null }, getPopoverItemSelected: { classPropertyName: "getPopoverItemSelected", publicName: "getPopoverItemSelected", isSignal: true, isRequired: false, transformFunction: null }, httpRequestDetailItemById: { classPropertyName: "httpRequestDetailItemById", publicName: "httpRequestDetailItemById", isSignal: true, isRequired: false, transformFunction: null }, lengthKeys: { classPropertyName: "lengthKeys", publicName: "lengthKeys", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenNoSelect: { classPropertyName: "textDisplayWhenNoSelect", publicName: "textDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenMultiSelect: { classPropertyName: "textDisplayWhenMultiSelect", publicName: "textDisplayWhenMultiSelect", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, fieldGetLabel: { classPropertyName: "fieldGetLabel", publicName: "fieldGetLabel", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverConfig: { classPropertyName: "labelPopoverConfig", publicName: "labelPopoverConfig", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverFullWidth: { classPropertyName: "labelPopoverFullWidth", publicName: "labelPopoverFullWidth", isSignal: true, isRequired: false, transformFunction: null }, hasContentUnitRight: { classPropertyName: "hasContentUnitRight", publicName: "hasContentUnitRight", isSignal: true, isRequired: false, transformFunction: null }, listSearchNoDataTemplateRef: { classPropertyName: "listSearchNoDataTemplateRef", publicName: "listSearchNoDataTemplateRef", isSignal: true, isRequired: false, transformFunction: null }, fieldGetImage: { classPropertyName: "fieldGetImage", publicName: "fieldGetImage", isSignal: true, isRequired: false, transformFunction: null }, imageSize: { classPropertyName: "imageSize", publicName: "imageSize", isSignal: true, isRequired: false, transformFunction: null }, typeShape: { classPropertyName: "typeShape", publicName: "typeShape", isSignal: true, isRequired: false, transformFunction: null }, fieldGetIcon: { classPropertyName: "fieldGetIcon", publicName: "fieldGetIcon", isSignal: true, isRequired: false, transformFunction: null }, fieldGetTextAvatar: { classPropertyName: "fieldGetTextAvatar", publicName: "fieldGetTextAvatar", isSignal: true, isRequired: false, transformFunction: null }, fieldGetColorAvatar: { classPropertyName: "fieldGetColorAvatar", publicName: "fieldGetColorAvatar", isSignal: true, isRequired: false, transformFunction: null }, classAvatarInclude: { classPropertyName: "classAvatarInclude", publicName: "classAvatarInclude", isSignal: true, isRequired: false, transformFunction: null }, getLastTextAfterSpace: { classPropertyName: "getLastTextAfterSpace", publicName: "getLastTextAfterSpace", isSignal: true, isRequired: false, transformFunction: null }, linkImageError: { classPropertyName: "linkImageError", publicName: "linkImageError", isSignal: true, isRequired: false, transformFunction: null }, showError: { classPropertyName: "showError", publicName: "showError", isSignal: true, isRequired: false, transformFunction: null }, showBorderError: { classPropertyName: "showBorderError", publicName: "showBorderError", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, listSearchConfig: { classPropertyName: "listSearchConfig", publicName: "listSearchConfig", isSignal: true, isRequired: false, transformFunction: null }, isSearchOnline: { classPropertyName: "isSearchOnline", publicName: "isSearchOnline", isSignal: true, isRequired: false, transformFunction: null }, listHiddenInputSearch: { classPropertyName: "listHiddenInputSearch", publicName: "listHiddenInputSearch", isSignal: true, isRequired: false, transformFunction: null }, listSearchPadding: { classPropertyName: "listSearchPadding", publicName: "listSearchPadding", isSignal: true, isRequired: false, transformFunction: null }, listKeySearch: { classPropertyName: "listKeySearch", publicName: "listKeySearch", isSignal: true, isRequired: false, transformFunction: null }, listDividerClassInclude: { classPropertyName: "listDividerClassInclude", publicName: "listDividerClassInclude", isSignal: true, isRequired: false, transformFunction: null }, listConfig: { classPropertyName: "listConfig", publicName: "listConfig", isSignal: true, isRequired: false, transformFunction: null }, listButtonsOther: { classPropertyName: "listButtonsOther", publicName: "listButtonsOther", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, listClickExactly: { classPropertyName: "listClickExactly", publicName: "listClickExactly", isSignal: true, isRequired: false, transformFunction: null }, listBackgroundCustom: { classPropertyName: "listBackgroundCustom", publicName: "listBackgroundCustom", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, listKeySelected: { classPropertyName: "listKeySelected", publicName: "listKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listMultiKeySelected: { classPropertyName: "listMultiKeySelected", publicName: "listMultiKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, listKeysHidden: { classPropertyName: "listKeysHidden", publicName: "listKeysHidden", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, validMaxItemSelected: { classPropertyName: "validMaxItemSelected", publicName: "validMaxItemSelected", isSignal: true, isRequired: false, transformFunction: null }, changeValidUndefinedResetError: { classPropertyName: "changeValidUndefinedResetError", publicName: "changeValidUndefinedResetError", isSignal: true, isRequired: false, transformFunction: null }, allowSelectItemMultiple: { classPropertyName: "allowSelectItemMultiple", publicName: "allowSelectItemMultiple", isSignal: true, isRequired: false, transformFunction: null }, focusInputSearch: { classPropertyName: "focusInputSearch", publicName: "focusInputSearch", isSignal: true, isRequired: false, transformFunction: null }, onlyEmitDataWhenReset: { classPropertyName: "onlyEmitDataWhenReset", publicName: "onlyEmitDataWhenReset", isSignal: true, isRequired: false, transformFunction: null }, resetKeyWhenSelectAllKey: { classPropertyName: "resetKeyWhenSelectAllKey", publicName: "resetKeyWhenSelectAllKey", isSignal: true, isRequired: false, transformFunction: null }, listConfigHasDivider: { classPropertyName: "listConfigHasDivider", publicName: "listConfigHasDivider", isSignal: true, isRequired: false, transformFunction: null }, classIncludeIcon: { classPropertyName: "classIncludeIcon", publicName: "classIncludeIcon", isSignal: true, isRequired: false, transformFunction: null }, classIncludeContent: { classPropertyName: "classIncludeContent", publicName: "classIncludeContent", isSignal: true, isRequired: false, transformFunction: null }, listIgnoreClassDisableDefaultWhenUseKeysDisableItem: { classPropertyName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", publicName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", isSignal: true, isRequired: false, transformFunction: null }, tabKeyActive: { classPropertyName: "tabKeyActive", publicName: "tabKeyActive", isSignal: true, isRequired: false, transformFunction: null }, tabsConfig: { classPropertyName: "tabsConfig", publicName: "tabsConfig", isSignal: true, isRequired: false, transformFunction: null }, ignoreBorderBottom: { classPropertyName: "ignoreBorderBottom", publicName: "ignoreBorderBottom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { flagMouse: "flagMouseChange", flagMouseContent: "flagMouseContentChange", lengthKeys: "lengthKeysChange", showBorderError: "showBorderErrorChange", listKeySelected: "listKeySelectedChange", listMultiKeySelected: "listMultiKeySelectedChange", tabKeyActive: "tabKeyActiveChange", outSelectKey: "outSelectKey", outSelectMultiKey: "outSelectMultiKey", outFunctionsControl: "outFunctionsControl", outValidEvent: "outValidEvent", outChangStageFlagMouse: "outChangStageFlagMouse", outDataChange: "outDataChange", outClickButtonOther: "outClickButtonOther", outShowList: "outShowList", outChangeTabKeyActive: "outChangeTabKeyActive" }, ngImport: i0, template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required \"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: 'rounded-[4px] ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general ') + ((listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? ' overflow-hidden' : ''),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div [class]=\"'libs-ui-dropdown ' + classIncludeContent()\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\"\n [class.text-[#071631]]=\"readonly()\"\n [class.bg-[#f8f9fa]]=\"disable() || loadingDetail() || readonly()\"\n [class.text-[#9ca2ad]]=\"disable() || loadingDetail() || readonly()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div class=\"flex items-center w-full absolute\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\" />\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate:{value: lengthKeys()} | LibsUiPipesSecurityTrustPipe:'html':useXssFilter() | async\"\n [config]=\"{maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0}\"\n [ignoreStopPropagationEvent]=\"true\" />\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"> </i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i class=\"text-[16px] libs-ui-icon-move-right rotate-90 {{ classIncludeIcon() }}\"\n [class.text-[#6a7383]]=\"!readonly() && !classIncludeIcon()\"\n [class.text-[#9ca2ad]]=\"(readonly() || disable()) && !classIncludeIcon()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\"\n [innerHtml]=\"(error.message || ' ') | translate:(error.interpolateParams || {})\">\n </div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column;\">\n @if (tabsConfig()) {\n <libs_ui-components-dropdown-tabs [tabsConfig]=\"tabsConfig()\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? true\"\n [disable]=\"disable() || loadingDetail()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"(listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? 0 : listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event, true)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:flex;flex-direction:column}:host .libs-ui-dropdown{position:relative;width:100%;min-height:32px;display:flex;align-items:center;background-color:#fff;padding:0 16px;border-radius:4px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["getLastTextAfterSpace", "typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "idGenColor", "textAvatar", "classImageInclude"], outputs: ["outAvatarError"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "itemChangeUnSelect", "paddingLeftItem", "config", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }, { kind: "component", type: LibsUiComponentsDropdownTabsComponent, selector: "libs_ui-components-dropdown-tabs", inputs: ["ignoreBorderBottom", "tabsConfig", "tabKeyActive", "disable"], outputs: ["tabKeyActiveChange", "outChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
463
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDropdownComponent, isStandalone: true, selector: "libs_ui-components-dropdown", inputs: { useXssFilter: { classPropertyName: "useXssFilter", publicName: "useXssFilter", isSignal: true, isRequired: false, transformFunction: null }, popoverElementRefCustom: { classPropertyName: "popoverElementRefCustom", publicName: "popoverElementRefCustom", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, flagMouseContent: { classPropertyName: "flagMouseContent", publicName: "flagMouseContent", isSignal: true, isRequired: false, transformFunction: null }, popoverCustomConfig: { classPropertyName: "popoverCustomConfig", publicName: "popoverCustomConfig", 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 }, convertItemSelected: { classPropertyName: "convertItemSelected", publicName: "convertItemSelected", isSignal: true, isRequired: false, transformFunction: null }, getPopoverItemSelected: { classPropertyName: "getPopoverItemSelected", publicName: "getPopoverItemSelected", isSignal: true, isRequired: false, transformFunction: null }, httpRequestDetailItemById: { classPropertyName: "httpRequestDetailItemById", publicName: "httpRequestDetailItemById", isSignal: true, isRequired: false, transformFunction: null }, lengthKeys: { classPropertyName: "lengthKeys", publicName: "lengthKeys", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenNoSelect: { classPropertyName: "textDisplayWhenNoSelect", publicName: "textDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, textDisplayWhenMultiSelect: { classPropertyName: "textDisplayWhenMultiSelect", publicName: "textDisplayWhenMultiSelect", isSignal: true, isRequired: false, transformFunction: null }, classIncludeTextDisplayWhenNoSelect: { classPropertyName: "classIncludeTextDisplayWhenNoSelect", publicName: "classIncludeTextDisplayWhenNoSelect", isSignal: true, isRequired: false, transformFunction: null }, fieldGetLabel: { classPropertyName: "fieldGetLabel", publicName: "fieldGetLabel", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverConfig: { classPropertyName: "labelPopoverConfig", publicName: "labelPopoverConfig", isSignal: true, isRequired: false, transformFunction: null }, labelPopoverFullWidth: { classPropertyName: "labelPopoverFullWidth", publicName: "labelPopoverFullWidth", isSignal: true, isRequired: false, transformFunction: null }, hasContentUnitRight: { classPropertyName: "hasContentUnitRight", publicName: "hasContentUnitRight", isSignal: true, isRequired: false, transformFunction: null }, listSearchNoDataTemplateRef: { classPropertyName: "listSearchNoDataTemplateRef", publicName: "listSearchNoDataTemplateRef", isSignal: true, isRequired: false, transformFunction: null }, fieldGetImage: { classPropertyName: "fieldGetImage", publicName: "fieldGetImage", isSignal: true, isRequired: false, transformFunction: null }, imageSize: { classPropertyName: "imageSize", publicName: "imageSize", isSignal: true, isRequired: false, transformFunction: null }, typeShape: { classPropertyName: "typeShape", publicName: "typeShape", isSignal: true, isRequired: false, transformFunction: null }, fieldGetIcon: { classPropertyName: "fieldGetIcon", publicName: "fieldGetIcon", isSignal: true, isRequired: false, transformFunction: null }, fieldGetTextAvatar: { classPropertyName: "fieldGetTextAvatar", publicName: "fieldGetTextAvatar", isSignal: true, isRequired: false, transformFunction: null }, fieldGetColorAvatar: { classPropertyName: "fieldGetColorAvatar", publicName: "fieldGetColorAvatar", isSignal: true, isRequired: false, transformFunction: null }, classAvatarInclude: { classPropertyName: "classAvatarInclude", publicName: "classAvatarInclude", isSignal: true, isRequired: false, transformFunction: null }, getLastTextAfterSpace: { classPropertyName: "getLastTextAfterSpace", publicName: "getLastTextAfterSpace", isSignal: true, isRequired: false, transformFunction: null }, linkImageError: { classPropertyName: "linkImageError", publicName: "linkImageError", isSignal: true, isRequired: false, transformFunction: null }, showError: { classPropertyName: "showError", publicName: "showError", isSignal: true, isRequired: false, transformFunction: null }, showBorderError: { classPropertyName: "showBorderError", publicName: "showBorderError", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, listSearchConfig: { classPropertyName: "listSearchConfig", publicName: "listSearchConfig", isSignal: true, isRequired: false, transformFunction: null }, isSearchOnline: { classPropertyName: "isSearchOnline", publicName: "isSearchOnline", isSignal: true, isRequired: false, transformFunction: null }, listHiddenInputSearch: { classPropertyName: "listHiddenInputSearch", publicName: "listHiddenInputSearch", isSignal: true, isRequired: false, transformFunction: null }, listSearchPadding: { classPropertyName: "listSearchPadding", publicName: "listSearchPadding", isSignal: true, isRequired: false, transformFunction: null }, listKeySearch: { classPropertyName: "listKeySearch", publicName: "listKeySearch", isSignal: true, isRequired: false, transformFunction: null }, listDividerClassInclude: { classPropertyName: "listDividerClassInclude", publicName: "listDividerClassInclude", isSignal: true, isRequired: false, transformFunction: null }, listConfig: { classPropertyName: "listConfig", publicName: "listConfig", isSignal: true, isRequired: false, transformFunction: null }, listButtonsOther: { classPropertyName: "listButtonsOther", publicName: "listButtonsOther", isSignal: true, isRequired: false, transformFunction: null }, listHasButtonUnSelectOption: { classPropertyName: "listHasButtonUnSelectOption", publicName: "listHasButtonUnSelectOption", isSignal: true, isRequired: false, transformFunction: null }, listClickExactly: { classPropertyName: "listClickExactly", publicName: "listClickExactly", isSignal: true, isRequired: false, transformFunction: null }, listBackgroundCustom: { classPropertyName: "listBackgroundCustom", publicName: "listBackgroundCustom", isSignal: true, isRequired: false, transformFunction: null }, listMaxItemShow: { classPropertyName: "listMaxItemShow", publicName: "listMaxItemShow", isSignal: true, isRequired: false, transformFunction: null }, listKeySelected: { classPropertyName: "listKeySelected", publicName: "listKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listMultiKeySelected: { classPropertyName: "listMultiKeySelected", publicName: "listMultiKeySelected", isSignal: true, isRequired: false, transformFunction: null }, listKeysDisable: { classPropertyName: "listKeysDisable", publicName: "listKeysDisable", isSignal: true, isRequired: false, transformFunction: null }, listKeysHidden: { classPropertyName: "listKeysHidden", publicName: "listKeysHidden", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, validMaxItemSelected: { classPropertyName: "validMaxItemSelected", publicName: "validMaxItemSelected", isSignal: true, isRequired: false, transformFunction: null }, changeValidUndefinedResetError: { classPropertyName: "changeValidUndefinedResetError", publicName: "changeValidUndefinedResetError", isSignal: true, isRequired: false, transformFunction: null }, allowSelectItemMultiple: { classPropertyName: "allowSelectItemMultiple", publicName: "allowSelectItemMultiple", isSignal: true, isRequired: false, transformFunction: null }, focusInputSearch: { classPropertyName: "focusInputSearch", publicName: "focusInputSearch", isSignal: true, isRequired: false, transformFunction: null }, onlyEmitDataWhenReset: { classPropertyName: "onlyEmitDataWhenReset", publicName: "onlyEmitDataWhenReset", isSignal: true, isRequired: false, transformFunction: null }, resetKeyWhenSelectAllKey: { classPropertyName: "resetKeyWhenSelectAllKey", publicName: "resetKeyWhenSelectAllKey", isSignal: true, isRequired: false, transformFunction: null }, listConfigHasDivider: { classPropertyName: "listConfigHasDivider", publicName: "listConfigHasDivider", isSignal: true, isRequired: false, transformFunction: null }, classIncludeIcon: { classPropertyName: "classIncludeIcon", publicName: "classIncludeIcon", isSignal: true, isRequired: false, transformFunction: null }, classIncludeContent: { classPropertyName: "classIncludeContent", publicName: "classIncludeContent", isSignal: true, isRequired: false, transformFunction: null }, listIgnoreClassDisableDefaultWhenUseKeysDisableItem: { classPropertyName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", publicName: "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", isSignal: true, isRequired: false, transformFunction: null }, tabKeyActive: { classPropertyName: "tabKeyActive", publicName: "tabKeyActive", isSignal: true, isRequired: false, transformFunction: null }, tabsConfig: { classPropertyName: "tabsConfig", publicName: "tabsConfig", isSignal: true, isRequired: false, transformFunction: null }, ignoreBorderBottom: { classPropertyName: "ignoreBorderBottom", publicName: "ignoreBorderBottom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { flagMouse: "flagMouseChange", flagMouseContent: "flagMouseContentChange", lengthKeys: "lengthKeysChange", showBorderError: "showBorderErrorChange", listKeySelected: "listKeySelectedChange", listMultiKeySelected: "listMultiKeySelectedChange", tabKeyActive: "tabKeyActiveChange", outSelectKey: "outSelectKey", outSelectMultiKey: "outSelectMultiKey", outFunctionsControl: "outFunctionsControl", outValidEvent: "outValidEvent", outChangStageFlagMouse: "outChangStageFlagMouse", outDataChange: "outDataChange", outClickButtonOther: "outClickButtonOther", outShowList: "outShowList", outChangeTabKeyActive: "outChangeTabKeyActive" }, ngImport: i0, template: "<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required \"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: 'rounded-[4px] ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general ') + ((listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? ' overflow-hidden' : ''),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div [class]=\"'libs-ui-dropdown ' + classIncludeContent()\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\"\n [class.text-[#071631]]=\"readonly()\"\n [class.bg-[#f8f9fa]]=\"disable() || loadingDetail() || readonly()\"\n [class.text-[#9ca2ad]]=\"disable() || loadingDetail() || readonly()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div class=\"flex items-center w-full absolute\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\" />\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate:{value: lengthKeys()} | LibsUiPipesSecurityTrustPipe:'html':useXssFilter() | async\"\n [config]=\"{maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0}\"\n [ignoreStopPropagationEvent]=\"true\" />\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"> </i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i class=\"text-[16px] libs-ui-icon-move-right rotate-90 {{ classIncludeIcon() }}\"\n [class.text-[#6a7383]]=\"!readonly() && !classIncludeIcon()\"\n [class.text-[#9ca2ad]]=\"(readonly() || disable()) && !classIncludeIcon()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\"\n [innerHtml]=\"(error.message || ' ') | translate:(error.interpolateParams || {})\">\n </div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column;\">\n @if (tabsConfig()) {\n <libs_ui-components-dropdown-tabs [tabsConfig]=\"tabsConfig()\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? true\"\n [disable]=\"disable() || loadingDetail()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"(listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? 0 : listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event, true)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n", styles: [":host{width:100%;display:flex;flex-direction:column}:host .libs-ui-dropdown{position:relative;width:100%;min-height:32px;display:flex;align-items:center;background-color:#fff;padding:0 16px;border-radius:4px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["getLastTextAfterSpace", "typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "idGenColor", "textAvatar", "classImageInclude"], outputs: ["outAvatarError"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "itemChangeUnSelect", "paddingLeftItem", "config", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }, { kind: "component", type: LibsUiComponentsDropdownTabsComponent, selector: "libs_ui-components-dropdown-tabs", inputs: ["ignoreBorderBottom", "tabsConfig", "tabKeyActive", "disable"], outputs: ["tabKeyActiveChange", "outChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
464
464
  }
465
465
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDropdownComponent, decorators: [{
466
466
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-dropdown.mjs","sources":["../../../../../libs-ui/components/dropdown/src/tabs/tabs.component.ts","../../../../../libs-ui/components/dropdown/src/tabs/tabs.component.html","../../../../../libs-ui/components/dropdown/src/dropdown.component.ts","../../../../../libs-ui/components/dropdown/src/dropdown.component.html","../../../../../libs-ui/components/dropdown/src/libs-ui-components-dropdown.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, model, output } from \"@angular/core\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { IDropdownTabsItem } from \"../interfaces/dropdown.interface\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: \"libs_ui-components-dropdown-tabs\",\n templateUrl: \"./tabs.component.html\",\n styleUrl: \"./tabs.component.scss\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule]\n})\nexport class LibsUiComponentsDropdownTabsComponent {\n\n readonly ignoreBorderBottom = input<boolean>();\n readonly tabsConfig = input<Array<IDropdownTabsItem>>();\n readonly tabKeyActive = model<string>();\n readonly disable = input<boolean>();\n\n readonly outChange = output<void>();\n\n protected handlerSelectTab(event: Event, key: string) {\n event.stopPropagation();\n this.tabKeyActive.set(key);\n this.outChange.emit();\n }\n\n}","<div class=\"libs-ui-dropdown-tab-container\"\n [class.libs-ui-border-bottom-general]=\"!ignoreBorderBottom()\">\n @for (tab of tabsConfig(); track tab) {\n <div class=\"libs-ui-dropdown-tab-container-item libs-ui-font-h6m\"\n [class.libs-ui-dropdown-tab-container-item-active]=\"tabKeyActive() === tab.key\"\n [class.libs-ui-disable]=\"disable()\"\n [class.pointer-events-none]=\"disable()\"\n (click)=\"handlerSelectTab($event,tab.key)\">\n {{ tab.name | translate }}\n </div>\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, model, OnInit, output, signal, TemplateRef, untracked } from '@angular/core';\nimport { LibsUiComponentsAvatarComponent, TYPE_SHAPE_AVATAR, TYPE_SIZE_AVATAR_CONFIG } from '@libs-ui/components-avatar';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { IInputSearchConfig } from '@libs-ui/components-inputs-search';\nimport { IValid } from '@libs-ui/components-inputs-valid';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { getFieldKeyByType, IListDataEmitKey, IListDataEmitMultiKey, IListFunctionControlEvent, IListConfigItem, LibsUiComponentsListComponent, TYPE_TEMPLATE } from '@libs-ui/components-list';\nimport { IFlagMouse, IPopover, IPopoverFunctionControlEvent, IPopoverOverlay, LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { LibsUiPipesSecurityTrustPipe } from '@libs-ui/pipes-security-trust';\nimport { IHttpRequestConfig, LibsUiHttpRequestService } from '@libs-ui/services-http-request';\nimport { CHARACTER_DATA_EMPTY, cloneDeep, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_VALID, get, isNil, set } from '@libs-ui/utils';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { IDropdownTabsItem, IEmitMultiKey, IEmitSelectKey, IPopoverCustomConfig, IValidMaxItemSelected } from './interfaces/dropdown.interface';\nimport { IDropdownFunctionControlEvent } from './interfaces/function-control-event.interface';\nimport { LibsUiComponentsDropdownTabsComponent } from './tabs/tabs.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrl: './dropdown.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TranslateModule, LibsUiPipesSecurityTrustPipe, AsyncPipe,\n LibsUiComponentsLabelComponent, LibsUiComponentsPopoverComponent,\n LibsUiComponentsAvatarComponent, LibsUiComponentsListComponent,\n LibsUiComponentsDropdownTabsComponent\n ]\n})\nexport class LibsUiComponentsDropdownComponent implements OnInit {\n\n /* PROPERTY */\n protected error = signal<IValid | undefined>(undefined);\n protected showList = signal<boolean>(false);\n protected itemsSelected = signal<any>(undefined);\n protected loadingDetail = signal<boolean>(false);\n protected loadingList = signal<boolean>(false);\n protected items = signal<Array<unknown>>([]);\n protected fieldLabel = signal<string>('labelDisplay');\n protected popoverItemSelected = signal<IPopover | undefined>(undefined);\n protected labelItemSelectedComputed = computed(this.getLabelItemSelected.bind(this));\n\n private keysSelected = signal<Array<unknown>>([]);\n private popoverFunctionControl = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n private fieldKey = signal<string>('id');\n private listFunctionControl = signal<IListFunctionControlEvent | undefined>(undefined);\n private selectedKeyByInput = signal<boolean>(false);\n\n /* INPUT */\n readonly useXssFilter = input<boolean>(false);\n readonly popoverElementRefCustom = input<HTMLElement>();\n readonly classInclude = input<string>();\n readonly ignoreStopPropagationEvent = input<boolean>(false);\n readonly flagMouse = model<IFlagMouse>({ isMouseEnter: false, isMouseEnterContent: false });\n readonly flagMouseContent = model<IFlagMouse>();\n readonly popoverCustomConfig = input<IPopoverCustomConfig>();\n readonly isNgContent = input<boolean>();\n readonly zIndex = input<number>();\n readonly convertItemSelected = input<(item: unknown, translate?: TranslateService) => void>(this.defaultConvertItemSelected.bind(this));\n readonly getPopoverItemSelected = input<(item: unknown, translate?: TranslateService) => Promise<IPopover | undefined>>();\n readonly httpRequestDetailItemById = input<IHttpRequestConfig>();\n readonly lengthKeys = model<number>(0);\n readonly textDisplayWhenNoSelect = input<string>('i18n_select_value');\n readonly textDisplayWhenMultiSelect = input<string>('i18n_selecting_options');\n readonly classIncludeTextDisplayWhenNoSelect = input<string>('libs-ui-font-h5r');\n readonly fieldGetLabel = input<string>();\n readonly labelPopoverConfig = input<IPopoverOverlay>();\n readonly labelPopoverFullWidth = input<boolean>(true);\n readonly hasContentUnitRight = input<boolean>();\n readonly listSearchNoDataTemplateRef = input<TemplateRef<unknown>>();\n readonly fieldGetImage = input<string>();\n readonly imageSize = input<TYPE_SIZE_AVATAR_CONFIG>(16);\n readonly typeShape = input<TYPE_SHAPE_AVATAR>('circle');\n readonly fieldGetIcon = input<string>();\n readonly fieldGetTextAvatar = input<string>('username');\n readonly fieldGetColorAvatar = input<string>();\n readonly classAvatarInclude = input<string, string | undefined>('mr-[8px]', { transform: value => value || 'mr-[8px]' });\n readonly getLastTextAfterSpace = input<boolean>();\n readonly linkImageError = input<string>();\n readonly showError = input<boolean>(true);\n readonly showBorderError = model<boolean>();\n readonly disable = input<boolean>();\n readonly readonly = input<boolean>();\n readonly labelConfig = input<ILabel>();\n readonly listSearchConfig = input<IInputSearchConfig, IInputSearchConfig | undefined>({ noBorder: true }, { transform: value => value || { noBorder: true } });\n readonly isSearchOnline = input<boolean>(false);\n readonly listHiddenInputSearch = input<boolean>()\n readonly listSearchPadding = input<boolean>();\n readonly listKeySearch = input<string>();\n readonly listDividerClassInclude = input<string>();\n readonly listConfig = input<IListConfigItem>();\n readonly listButtonsOther = input<Array<IButton>>();\n readonly listHasButtonUnSelectOption = input<boolean>();\n readonly listClickExactly = input<boolean>();\n readonly listBackgroundCustom = input<string>();\n readonly listMaxItemShow = input<number>(6,);\n readonly listKeySelected = model<unknown>();\n readonly listMultiKeySelected = model<Array<unknown>>();\n readonly listKeysDisable = input<Array<string>>(); // không dùng giá trị này kết hợp với template checkbox có config chứa configCheckboxCheckAll\n readonly listKeysHidden = input<Array<string>>(); // không dùng giá trị này kết hợp với template checkbox có config chứa configCheckboxCheckAll\n readonly validRequired = input<IValid>();\n readonly validMaxItemSelected = input<IValidMaxItemSelected>();\n readonly changeValidUndefinedResetError = input<boolean>();\n readonly allowSelectItemMultiple = input<boolean>();\n readonly focusInputSearch = input<boolean>(true);\n readonly onlyEmitDataWhenReset = input<boolean>(); // true khi muốn emit sự kiện thay đổi key\n readonly resetKeyWhenSelectAllKey = input<boolean>();\n readonly listConfigHasDivider = input<boolean>(true);\n readonly classIncludeIcon = input<string, string | undefined>('ml-[8px]', { transform: value => value || 'ml-[8px]' });\n readonly classIncludeContent = input<string>();\n readonly listIgnoreClassDisableDefaultWhenUseKeysDisableItem = input<boolean>(); // bỏ chế độ disable item trên html list view để disable từng phần trong rows\n readonly tabKeyActive = model<string>();\n readonly tabsConfig = input<Array<IDropdownTabsItem>>();\n readonly ignoreBorderBottom = input<boolean>();\n\n /* OUTPUT */\n readonly outSelectKey = output<IEmitSelectKey | undefined>(); // sử dụng cho type chọn 1.\n readonly outSelectMultiKey = output<IEmitMultiKey | undefined>(); // sử dụng cho type cho phép chọn nhiều.\n readonly outFunctionsControl = output<IDropdownFunctionControlEvent>();\n readonly outValidEvent = output<boolean>();\n readonly outChangStageFlagMouse = output<IFlagMouse>();\n readonly outDataChange = output<Array<unknown>>();\n readonly outClickButtonOther = output<IButton>();\n readonly outShowList = output<boolean>();\n readonly outChangeTabKeyActive = output<string | undefined>();\n\n /* INJECT*/\n private translate = inject(TranslateService);\n private httpRequestService = inject(LibsUiHttpRequestService);\n\n constructor() {\n effect(() => {\n const listConfig = this.listConfig();\n if (listConfig) {\n untracked(() => this.fieldKey.set(getFieldKeyByType(listConfig, 'id')));\n }\n })\n effect(() => {\n if (this.listKeySelected() && !this.itemsSelected()) {\n untracked(() => {\n this.selectedKeyByInput.set(true)\n this.handlerSelectedKey({ key: this.listKeySelected(), item: undefined, isClickManual: false });\n });\n }\n })\n effect(() => {\n if (this.changeValidUndefinedResetError() && this.validRequired()) {\n untracked(() => this.resetError());\n }\n })\n effect(() => {\n if (this.listMultiKeySelected()) {\n untracked(() => {\n const previousValue = this.keysSelected() || [];\n const currentValue = this.listMultiKeySelected() || [];\n\n if (previousValue.length !== currentValue.length) {\n this.handlerSelectMultiKey({ keys: currentValue, mapKeys: [], isClickManual: false });\n\n return;\n }\n for (const keyPrevious of previousValue) {\n if (!currentValue.some(keyCurrent => keyCurrent === keyPrevious)) {\n this.handlerSelectMultiKey({ keys: currentValue, mapKeys: [], isClickManual: false });\n break;\n }\n }\n })\n }\n })\n }\n\n async ngOnInit() {\n const listConfig = this.listConfig();\n if (!this.lengthKeys() && listConfig && (listConfig.autoSelectFirstItem || listConfig.configTemplateCheckbox?.()?.autoSelectAllItem || listConfig.configTemplateGroup?.()?.flatItemsSupportAutoSelect) && listConfig.httpRequestData) {\n try {\n this.loadingDetail.set(true);\n const httpRequestData = listConfig.httpRequestData();\n const { argumentsValue, guideAutoUpdateArgumentsValue } = httpRequestData;\n this.httpRequestService.updateArguments(argumentsValue, { ...this.httpRequestService.fakeResponsePagingApi(), dropdownTabKeyActive: this.tabKeyActive }, {}, '', true, false, guideAutoUpdateArgumentsValue);\n const result = await this.httpRequestService.callApi(httpRequestData);\n this.loadingDetail.set(false);\n if (result?.data) {\n this.items.set(result.data);\n this.emitAutoSelectKey(result.data, listConfig.type);\n }\n } catch (error) {\n console.log(error);\n this.items.set([]);\n this.loadingDetail.set(false);\n }\n this.outDataChange.emit(this.items());\n }\n this.outFunctionsControl.emit({\n reset: this.reset.bind(this),\n valid: this.valid.bind(this),\n resetError: this.resetError.bind(this),\n setError: this.setError.bind(this),\n removeList: async () => this.popoverFunctionControl()?.removePopoverOverlay(),\n getDisable: async () => this.disable() ?? false,\n updateLabelItemSelected: async (label) => this.itemsSelected.update(value => ({ ...value, [this.fieldLabel()]: this.translate.instant(label) })),\n refreshList: async () => this.listFunctionControl()?.refresh(),\n setItemSelectedByKey: this.setItemSelectedByKey.bind(this)\n });\n this.checkValid(true);\n }\n\n /* FUNCTIONS */\n private defaultConvertItemSelected(item: unknown) {\n if (!item) {\n return;\n }\n const fieldGetLabel = this.fieldGetLabel();\n const value = fieldGetLabel ? get(item, fieldGetLabel) : undefined;\n set(item, this.fieldLabel(), value ?? get(item, 'label') ?? get(item, 'name') ?? ' ');\n }\n\n private getLabelItemSelected() {\n let label = ' ';\n if (!this.lengthKeys()) {\n label = this.textDisplayWhenNoSelect();\n }\n if (this.lengthKeys() > 1) {\n label = this.textDisplayWhenMultiSelect();\n }\n if (this.lengthKeys() === 1) {\n label = this.itemsSelected()?.[this.fieldLabel()] || this.textDisplayWhenNoSelect();\n }\n return label;\n }\n\n private emitAutoSelectKey(items: Array<unknown>, type: TYPE_TEMPLATE) {\n const listConfig = this.listConfig();\n if (!items || !items.length || !listConfig || (!listConfig.autoSelectFirstItem && !listConfig.configTemplateCheckbox?.()?.autoSelectAllItem && !listConfig.configTemplateGroup?.()?.flatItemsSupportAutoSelect)) {\n return;\n }\n const flatItemsSupportAutoSelect = listConfig.configTemplateGroup?.()?.flatItemsSupportAutoSelect;\n if (type === 'group' && flatItemsSupportAutoSelect) {\n items = flatItemsSupportAutoSelect(items);\n }\n if (listConfig.autoSelectFirstItem) {\n const item = items[0];\n const key = get(item, this.fieldKey());\n if (type === 'radio' || type === 'text') {\n this.handlerSelectedKey({ key, item, isClickManual: false });\n this.listKeySelected.set(key);\n return;\n }\n this.handlerSelectMultiKey({ keys: [key], mapKeys: [{ key, item, isClickManual: false }], isClickManual: false });\n this.listMultiKeySelected.set([key]);\n return;\n }\n if (type !== 'checkbox' && type !== 'group') {\n return;\n }\n const keys: Array<string> = [];\n const mapKeys: Array<IListDataEmitKey> = [];\n items.forEach(item => {\n const key = get(item, this.fieldKey());\n if (isNil(key)) {\n return;\n }\n keys.push(key);\n mapKeys.push({ key, item, isClickManual: false });\n });\n this.handlerSelectMultiKey({ keys, mapKeys, isClickManual: false });\n this.listMultiKeySelected.set(keys);\n }\n\n protected handlerEvent(type: TYPE_POPOVER_EVENT) {\n if (type === 'click') {\n return;\n }\n if (type === 'remove') {\n this.showList.set(false);\n this.outShowList.emit(this.showList());\n return;\n }\n this.showList.set(true);\n this.outShowList.emit(this.showList());\n }\n\n protected handlerDataChange(items: Array<unknown>) {\n this.items.set(items);\n this.popoverFunctionControl()?.updatePopoverOverlayPosition();\n this.outDataChange.emit(this.items());\n }\n\n protected handlerChangeFlagMouse(event: IFlagMouse) {\n this.flagMouseContent.set(event);\n this.mergeFlagMouse();\n }\n\n protected handlerClickButtonOther(button: IButton) {\n this.outClickButtonOther.emit(button);\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n\n protected handlerPopoverControlEvent(event: IPopoverFunctionControlEvent) {\n this.popoverFunctionControl.set(event);\n }\n\n protected async handlerSelectedKey(event: IListDataEmitKey | undefined, eventFromList = false) {\n const key = event?.key;\n const item = event?.item;\n this.lengthKeys.set(!(isNil(key) || (typeof key === 'string' && key === '')) ? 1 : 0);\n this.listKeySelected.set(key);\n if (!this.allowSelectItemMultiple() && this.itemsSelected() && get(this.itemsSelected(), this.fieldKey()) === key) {\n this.selectedKeyByInput.set(false);\n return;\n }\n if (!this.selectedKeyByInput()) {\n if (!(isNil(key) || (typeof key === 'string' && key === '')) && (item || this.itemsSelected())) {\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n }\n if (eventFromList) {\n this.selectedKeyByInput.set(false);\n }\n this.checkValid();\n if (this.lengthKeys() && !item && this.httpRequestDetailItemById()) {\n let itemSelected = await this.setItemSelectedByKey(key);\n if (!itemSelected) {\n itemSelected = {\n [this.fieldKey()]: key,\n [this.fieldLabel()]: CHARACTER_DATA_EMPTY\n };\n this.itemsSelected.set(itemSelected);\n }\n if (event) {\n event.item = itemSelected;\n }\n this.outSelectKey.emit({ ...event, tabKeyActive: this.tabKeyActive() });\n return;\n }\n this.itemsSelected.set(cloneDeep(item));\n this.buildDisplay();\n this.outSelectKey.emit({ ...event, tabKeyActive: this.tabKeyActive() });\n }\n\n protected async handlerSelectMultiKey(event: IListDataEmitMultiKey | undefined, isClickManual = false) {\n if (this.listConfig()?.configTemplateGroup?.()?.singleSelectItem && event?.mapKeys?.length) {\n const itemClickManual = event.mapKeys.find(mapKey => mapKey.item && mapKey.item.isCheckManual);\n if (itemClickManual) {\n setTimeout(() => itemClickManual.item.isCheckManual = false);\n event.keys = [itemClickManual.key];\n event.mapKeys = [itemClickManual];\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n }\n this.keysSelected.set([...(event?.keys || [])]);\n this.listMultiKeySelected.set([...(event?.keys || [])]);\n this.lengthKeys.set(event?.keys?.length || 0);\n this.checkValid();\n if (this.lengthKeys() > 1) {\n this.outSelectMultiKey.emit({ ...(event || {}), isClickManual, tabKeyActive: this.tabKeyActive() });\n return;\n }\n const key = event?.keys[0];\n let item = event?.mapKeys?.find(item => item.key === key)?.item;\n\n if (this.lengthKeys() && !item && this.httpRequestDetailItemById()) {\n item = await this.setItemSelectedByKey(key);\n this.outSelectMultiKey.emit({ keys: [key], mapKeys: [{ key, item }], isClickManual, tabKeyActive: this.tabKeyActive() });\n return;\n }\n this.itemsSelected.set(cloneDeep(item));\n this.buildDisplay();\n this.outSelectMultiKey.emit({ ...(event || {}), isClickManual, tabKeyActive: this.tabKeyActive() });\n }\n\n private async setItemSelectedByKey(key: unknown) {\n const httpRequestDetailItemById = this.httpRequestDetailItemById();\n if (!httpRequestDetailItemById || this.loadingDetail()) {\n return;\n }\n try {\n this.loadingDetail.set(true);\n const { argumentsValue, guideAutoUpdateArgumentsValue } = httpRequestDetailItemById;\n this.httpRequestService.updateArguments(argumentsValue, { key, dropdownTabKeyActive: this.tabKeyActive() }, {}, '', false, false, guideAutoUpdateArgumentsValue);\n const result = await this.httpRequestService.callApi(httpRequestDetailItemById);\n const item = cloneDeep(result.data[0] || result.data);\n this.itemsSelected.set(item);\n this.buildDisplay();\n this.loadingDetail.set(false);\n return item;\n } catch (error) {\n console.log(error);\n this.loadingDetail.set(false);\n return;\n }\n }\n\n protected handlerChangeTab() {\n this.outChangeTabKeyActive.emit(this.tabKeyActive());\n }\n\n protected handlerLoadingList(event: boolean) {\n this.loadingList.set(event);\n }\n\n private async setError(error: string) {\n this.error.set({ message: error });\n this.showBorderError.set(true);\n }\n\n private async valid() {\n if (this.error()?.message) {\n return false;\n }\n return this.checkValid();\n }\n\n private checkValid(validateDefault?: boolean): boolean {\n this.error.set(undefined);\n const valid = { required: true, limitMaxItemSelect: true };\n const validMaxItemSelected = this.validMaxItemSelected();\n if (this.validRequired() && !this.lengthKeys()) {\n valid.required = false;\n }\n if (validMaxItemSelected && this.lengthKeys() > validMaxItemSelected.value) {\n valid.limitMaxItemSelect = false;\n }\n if (!validateDefault && valid.required === false) {\n const validRequired = this.validRequired();\n this.error.set({ ...(validRequired || {}), message: validRequired?.message || ERROR_MESSAGE_EMPTY_VALID });\n }\n if (!validateDefault && !this.error() && valid.limitMaxItemSelect === false) {\n const validMaxItemSelected = this.validMaxItemSelected();\n this.error.set({ ...(validMaxItemSelected || {}), message: validMaxItemSelected?.message || ERROR_MESSAGE_MAX_VALID, interpolateParams: { value: validMaxItemSelected?.value } })\n }\n this.outValidEvent.emit(valid.required && valid.limitMaxItemSelect);\n return valid.required && valid.limitMaxItemSelect;\n }\n\n private async resetError() {\n this.error.set(undefined);\n this.showBorderError.set(false);\n }\n\n protected handlerListFunctionsControl(event: IListFunctionControlEvent) {\n this.listFunctionControl.set(event);\n }\n\n protected handlerChangStageFlagMouse(flag: IFlagMouse) {\n this.flagMouse.set(flag);\n this.mergeFlagMouse();\n }\n\n private async reset() {\n this.itemsSelected.set(undefined);\n this.lengthKeys.set(0);\n this.listFunctionControl()?.resetKeySelected();\n if (!this.showList() && this.onlyEmitDataWhenReset()) {\n this.outSelectKey.emit(undefined);\n this.outSelectMultiKey.emit(undefined);\n }\n this.listKeySelected.set(undefined);\n this.listMultiKeySelected.set(undefined);\n this.keysSelected.set([]);\n this.error.set(undefined);\n this.selectedKeyByInput.set(false);\n }\n\n private async buildDisplay() {\n if (this.itemsSelected()) {\n this.convertItemSelected()(this.itemsSelected(), this.translate);\n const getPopoverItemSelected = this.getPopoverItemSelected();\n if (getPopoverItemSelected) {\n this.popoverItemSelected.set(await getPopoverItemSelected(this.itemsSelected, this.translate));\n }\n }\n }\n\n private mergeFlagMouse() {\n const flag: IFlagMouse = { isMouseEnter: false, isMouseEnterContent: false, isContainerHasScroll: false };\n if (this.flagMouseContent()?.isMouseEnter || this.flagMouse().isMouseEnter) {\n flag.isMouseEnter = true;\n }\n if (this.flagMouseContent()?.isMouseEnterContent || this.flagMouse().isMouseEnterContent) {\n flag.isMouseEnterContent = true;\n }\n if (this.flagMouseContent()?.isContainerHasScroll || this.flagMouse().isContainerHasScroll) {\n flag.isContainerHasScroll = true;\n }\n this.outChangStageFlagMouse.emit(flag);\n }\n\n}\n","<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required \"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: 'rounded-[4px] ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general ') + ((listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? ' overflow-hidden' : ''),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div [class]=\"'libs-ui-dropdown ' + classIncludeContent()\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\"\n [class.text-[#071631]]=\"readonly()\"\n [class.bg-[#f8f9fa]]=\"disable() || loadingDetail() || readonly()\"\n [class.text-[#9ca2ad]]=\"disable() || loadingDetail() || readonly()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div class=\"flex items-center w-full absolute\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\" />\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate:{value: lengthKeys()} | LibsUiPipesSecurityTrustPipe:'html':useXssFilter() | async\"\n [config]=\"{maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0}\"\n [ignoreStopPropagationEvent]=\"true\" />\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"> </i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i class=\"text-[16px] libs-ui-icon-move-right rotate-90 {{ classIncludeIcon() }}\"\n [class.text-[#6a7383]]=\"!readonly() && !classIncludeIcon()\"\n [class.text-[#9ca2ad]]=\"(readonly() || disable()) && !classIncludeIcon()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\"\n [innerHtml]=\"(error.message || ' ') | translate:(error.interpolateParams || {})\">\n </div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column;\">\n @if (tabsConfig()) {\n <libs_ui-components-dropdown-tabs [tabsConfig]=\"tabsConfig()\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? true\"\n [disable]=\"disable() || loadingDetail()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"(listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? 0 : listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event, true)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-dropdown.mjs","sources":["../../../../../libs-ui/components/dropdown/src/tabs/tabs.component.ts","../../../../../libs-ui/components/dropdown/src/tabs/tabs.component.html","../../../../../libs-ui/components/dropdown/src/dropdown.component.ts","../../../../../libs-ui/components/dropdown/src/dropdown.component.html","../../../../../libs-ui/components/dropdown/src/libs-ui-components-dropdown.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, model, output } from \"@angular/core\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { IDropdownTabsItem } from \"../interfaces/dropdown.interface\";\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: \"libs_ui-components-dropdown-tabs\",\n templateUrl: \"./tabs.component.html\",\n styleUrl: \"./tabs.component.scss\",\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule]\n})\nexport class LibsUiComponentsDropdownTabsComponent {\n\n readonly ignoreBorderBottom = input<boolean>();\n readonly tabsConfig = input<Array<IDropdownTabsItem>>();\n readonly tabKeyActive = model<string>();\n readonly disable = input<boolean>();\n\n readonly outChange = output<void>();\n\n protected handlerSelectTab(event: Event, key: string) {\n event.stopPropagation();\n this.tabKeyActive.set(key);\n this.outChange.emit();\n }\n\n}","<div class=\"libs-ui-dropdown-tab-container\"\n [class.libs-ui-border-bottom-general]=\"!ignoreBorderBottom()\">\n @for (tab of tabsConfig(); track tab) {\n <div class=\"libs-ui-dropdown-tab-container-item libs-ui-font-h6m\"\n [class.libs-ui-dropdown-tab-container-item-active]=\"tabKeyActive() === tab.key\"\n [class.libs-ui-disable]=\"disable()\"\n [class.pointer-events-none]=\"disable()\"\n (click)=\"handlerSelectTab($event,tab.key)\">\n {{ tab.name | translate }}\n </div>\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, model, OnInit, output, signal, TemplateRef, untracked } from '@angular/core';\nimport { LibsUiComponentsAvatarComponent, TYPE_SHAPE_AVATAR, TYPE_SIZE_AVATAR_CONFIG } from '@libs-ui/components-avatar';\nimport { IButton } from '@libs-ui/components-buttons-button';\nimport { IInputSearchConfig } from '@libs-ui/components-inputs-search';\nimport { IValid } from '@libs-ui/components-inputs-valid';\nimport { ILabel, LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { getFieldKeyByType, IListDataEmitKey, IListDataEmitMultiKey, IListFunctionControlEvent, IListConfigItem, LibsUiComponentsListComponent, TYPE_TEMPLATE } from '@libs-ui/components-list';\nimport { IFlagMouse, IPopover, IPopoverFunctionControlEvent, IPopoverOverlay, LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { LibsUiPipesSecurityTrustPipe } from '@libs-ui/pipes-security-trust';\nimport { IHttpRequestConfig, LibsUiHttpRequestService } from '@libs-ui/services-http-request';\nimport { CHARACTER_DATA_EMPTY, cloneDeep, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_VALID, get, isNil, set } from '@libs-ui/utils';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { IDropdownTabsItem, IEmitMultiKey, IEmitSelectKey, IPopoverCustomConfig, IValidMaxItemSelected } from './interfaces/dropdown.interface';\nimport { IDropdownFunctionControlEvent } from './interfaces/function-control-event.interface';\nimport { LibsUiComponentsDropdownTabsComponent } from './tabs/tabs.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrl: './dropdown.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TranslateModule, LibsUiPipesSecurityTrustPipe, AsyncPipe,\n LibsUiComponentsLabelComponent, LibsUiComponentsPopoverComponent,\n LibsUiComponentsAvatarComponent, LibsUiComponentsListComponent,\n LibsUiComponentsDropdownTabsComponent\n ]\n})\nexport class LibsUiComponentsDropdownComponent implements OnInit {\n\n /* PROPERTY */\n protected error = signal<IValid | undefined>(undefined);\n protected showList = signal<boolean>(false);\n protected itemsSelected = signal<any>(undefined);\n protected loadingDetail = signal<boolean>(false);\n protected loadingList = signal<boolean>(false);\n protected items = signal<Array<unknown>>([]);\n protected fieldLabel = signal<string>('labelDisplay');\n protected popoverItemSelected = signal<IPopover | undefined>(undefined);\n protected labelItemSelectedComputed = computed(this.getLabelItemSelected.bind(this));\n\n private keysSelected = signal<Array<unknown>>([]);\n private popoverFunctionControl = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n private fieldKey = signal<string>('id');\n private listFunctionControl = signal<IListFunctionControlEvent | undefined>(undefined);\n private selectedKeyByInput = signal<boolean>(false);\n\n /* INPUT */\n readonly useXssFilter = input<boolean>(false);\n readonly popoverElementRefCustom = input<HTMLElement>();\n readonly classInclude = input<string>();\n readonly ignoreStopPropagationEvent = input<boolean>(false);\n readonly flagMouse = model<IFlagMouse>({ isMouseEnter: false, isMouseEnterContent: false });\n readonly flagMouseContent = model<IFlagMouse>();\n readonly popoverCustomConfig = input<IPopoverCustomConfig>();\n readonly isNgContent = input<boolean>();\n readonly zIndex = input<number>();\n readonly convertItemSelected = input<(item: unknown, translate?: TranslateService) => void>(this.defaultConvertItemSelected.bind(this));\n readonly getPopoverItemSelected = input<(item: unknown, translate?: TranslateService) => Promise<IPopover | undefined>>();\n readonly httpRequestDetailItemById = input<IHttpRequestConfig>();\n readonly lengthKeys = model<number>(0);\n readonly textDisplayWhenNoSelect = input<string>('i18n_select_value');\n readonly textDisplayWhenMultiSelect = input<string>('i18n_selecting_options');\n readonly classIncludeTextDisplayWhenNoSelect = input<string>('libs-ui-font-h5r');\n readonly fieldGetLabel = input<string>();\n readonly labelPopoverConfig = input<IPopoverOverlay>();\n readonly labelPopoverFullWidth = input<boolean>(true);\n readonly hasContentUnitRight = input<boolean>();\n readonly listSearchNoDataTemplateRef = input<TemplateRef<unknown>>();\n readonly fieldGetImage = input<string>();\n readonly imageSize = input<TYPE_SIZE_AVATAR_CONFIG>(16);\n readonly typeShape = input<TYPE_SHAPE_AVATAR>('circle');\n readonly fieldGetIcon = input<string>();\n readonly fieldGetTextAvatar = input<string>('username');\n readonly fieldGetColorAvatar = input<string>();\n readonly classAvatarInclude = input<string, string | undefined>('mr-[8px]', { transform: value => value || 'mr-[8px]' });\n readonly getLastTextAfterSpace = input<boolean>();\n readonly linkImageError = input<string>();\n readonly showError = input<boolean>(true);\n readonly showBorderError = model<boolean>();\n readonly disable = input<boolean>();\n readonly readonly = input<boolean>();\n readonly labelConfig = input<ILabel>();\n readonly listSearchConfig = input<IInputSearchConfig, IInputSearchConfig | undefined>({ noBorder: true }, { transform: value => value || { noBorder: true } });\n readonly isSearchOnline = input<boolean>(false);\n readonly listHiddenInputSearch = input<boolean>()\n readonly listSearchPadding = input<boolean>();\n readonly listKeySearch = input<string>();\n readonly listDividerClassInclude = input<string>();\n readonly listConfig = input<IListConfigItem>();\n readonly listButtonsOther = input<Array<IButton>>();\n readonly listHasButtonUnSelectOption = input<boolean>();\n readonly listClickExactly = input<boolean>();\n readonly listBackgroundCustom = input<string>();\n readonly listMaxItemShow = input<number>(6,);\n readonly listKeySelected = model<unknown>();\n readonly listMultiKeySelected = model<Array<unknown>>();\n readonly listKeysDisable = input<Array<string>>(); // không dùng giá trị này kết hợp với template checkbox có config chứa configCheckboxCheckAll\n readonly listKeysHidden = input<Array<string>>(); // không dùng giá trị này kết hợp với template checkbox có config chứa configCheckboxCheckAll\n readonly validRequired = input<IValid>();\n readonly validMaxItemSelected = input<IValidMaxItemSelected>();\n readonly changeValidUndefinedResetError = input<boolean>();\n readonly allowSelectItemMultiple = input<boolean>();\n readonly focusInputSearch = input<boolean>(true);\n readonly onlyEmitDataWhenReset = input<boolean>(); // true khi muốn emit sự kiện thay đổi key\n readonly resetKeyWhenSelectAllKey = input<boolean>();\n readonly listConfigHasDivider = input<boolean>(true);\n readonly classIncludeIcon = input<string, string | undefined>('ml-[8px]', { transform: value => value || 'ml-[8px]' });\n readonly classIncludeContent = input<string>();\n readonly listIgnoreClassDisableDefaultWhenUseKeysDisableItem = input<boolean>(); // bỏ chế độ disable item trên html list view để disable từng phần trong rows\n readonly tabKeyActive = model<string>();\n readonly tabsConfig = input<Array<IDropdownTabsItem>>();\n readonly ignoreBorderBottom = input<boolean>();\n\n /* OUTPUT */\n readonly outSelectKey = output<IEmitSelectKey | undefined>(); // sử dụng cho type chọn 1.\n readonly outSelectMultiKey = output<IEmitMultiKey | undefined>(); // sử dụng cho type cho phép chọn nhiều.\n readonly outFunctionsControl = output<IDropdownFunctionControlEvent>();\n readonly outValidEvent = output<boolean>();\n readonly outChangStageFlagMouse = output<IFlagMouse>();\n readonly outDataChange = output<Array<unknown>>();\n readonly outClickButtonOther = output<IButton>();\n readonly outShowList = output<boolean>();\n readonly outChangeTabKeyActive = output<string | undefined>();\n\n /* INJECT*/\n private translate = inject(TranslateService);\n private httpRequestService = inject(LibsUiHttpRequestService);\n\n constructor() {\n effect(() => {\n const listConfig = this.listConfig();\n if (listConfig) {\n untracked(() => this.fieldKey.set(getFieldKeyByType(listConfig, 'id')));\n }\n })\n effect(() => {\n if (this.listKeySelected() && !this.itemsSelected()) {\n untracked(() => {\n this.selectedKeyByInput.set(true)\n this.handlerSelectedKey({ key: this.listKeySelected(), item: undefined, isClickManual: false });\n });\n }\n })\n effect(() => {\n if (this.changeValidUndefinedResetError() && this.validRequired()) {\n untracked(() => this.resetError());\n }\n })\n effect(() => {\n if (this.listMultiKeySelected()) {\n untracked(() => {\n const previousValue = this.keysSelected() || [];\n const currentValue = this.listMultiKeySelected() || [];\n\n if (previousValue.length !== currentValue.length) {\n this.handlerSelectMultiKey({ keys: currentValue, mapKeys: [], isClickManual: false });\n\n return;\n }\n for (const keyPrevious of previousValue) {\n if (!currentValue.some(keyCurrent => keyCurrent === keyPrevious)) {\n this.handlerSelectMultiKey({ keys: currentValue, mapKeys: [], isClickManual: false });\n break;\n }\n }\n })\n }\n })\n }\n\n async ngOnInit() {\n const listConfig = this.listConfig();\n if (!this.lengthKeys() && listConfig && (listConfig.autoSelectFirstItem || listConfig.configTemplateCheckbox?.()?.autoSelectAllItem || listConfig.configTemplateGroup?.()?.flatItemsSupportAutoSelect) && listConfig.httpRequestData) {\n try {\n this.loadingDetail.set(true);\n const httpRequestData = listConfig.httpRequestData();\n const { argumentsValue, guideAutoUpdateArgumentsValue } = httpRequestData;\n this.httpRequestService.updateArguments(argumentsValue, { ...this.httpRequestService.fakeResponsePagingApi(), dropdownTabKeyActive: this.tabKeyActive }, {}, '', true, false, guideAutoUpdateArgumentsValue);\n const result = await this.httpRequestService.callApi(httpRequestData);\n this.loadingDetail.set(false);\n if (result?.data) {\n this.items.set(result.data);\n this.emitAutoSelectKey(result.data, listConfig.type);\n }\n } catch (error) {\n console.log(error);\n this.items.set([]);\n this.loadingDetail.set(false);\n }\n this.outDataChange.emit(this.items());\n }\n this.outFunctionsControl.emit({\n reset: this.reset.bind(this),\n valid: this.valid.bind(this),\n resetError: this.resetError.bind(this),\n setError: this.setError.bind(this),\n removeList: async () => this.popoverFunctionControl()?.removePopoverOverlay(),\n getDisable: async () => this.disable() ?? false,\n updateLabelItemSelected: async (label) => this.itemsSelected.update(value => ({ ...value, [this.fieldLabel()]: this.translate.instant(label) })),\n refreshList: async () => this.listFunctionControl()?.refresh(),\n setItemSelectedByKey: this.setItemSelectedByKey.bind(this)\n });\n this.checkValid(true);\n }\n\n /* FUNCTIONS */\n private defaultConvertItemSelected(item: unknown) {\n if (!item) {\n return;\n }\n const fieldGetLabel = this.fieldGetLabel();\n const value = fieldGetLabel ? get(item, fieldGetLabel) : undefined;\n set(item, this.fieldLabel(), value ?? get(item, 'label') ?? get(item, 'name') ?? ' ');\n }\n\n private getLabelItemSelected() {\n let label = ' ';\n if (!this.lengthKeys()) {\n label = this.textDisplayWhenNoSelect();\n }\n if (this.lengthKeys() > 1) {\n label = this.textDisplayWhenMultiSelect();\n }\n if (this.lengthKeys() === 1) {\n label = this.itemsSelected()?.[this.fieldLabel()] || this.textDisplayWhenNoSelect();\n }\n return label;\n }\n\n private emitAutoSelectKey(items: Array<unknown>, type: TYPE_TEMPLATE) {\n const listConfig = this.listConfig();\n if (!items || !items.length || !listConfig || (!listConfig.autoSelectFirstItem && !listConfig.configTemplateCheckbox?.()?.autoSelectAllItem && !listConfig.configTemplateGroup?.()?.flatItemsSupportAutoSelect)) {\n return;\n }\n const flatItemsSupportAutoSelect = listConfig.configTemplateGroup?.()?.flatItemsSupportAutoSelect;\n if (type === 'group' && flatItemsSupportAutoSelect) {\n items = flatItemsSupportAutoSelect(items);\n }\n if (listConfig.autoSelectFirstItem) {\n const item = items[0];\n const key = get(item, this.fieldKey());\n if (type === 'radio' || type === 'text') {\n this.handlerSelectedKey({ key, item, isClickManual: false });\n this.listKeySelected.set(key);\n return;\n }\n this.handlerSelectMultiKey({ keys: [key], mapKeys: [{ key, item, isClickManual: false }], isClickManual: false });\n this.listMultiKeySelected.set([key]);\n return;\n }\n if (type !== 'checkbox' && type !== 'group') {\n return;\n }\n const keys: Array<string> = [];\n const mapKeys: Array<IListDataEmitKey> = [];\n items.forEach(item => {\n const key = get(item, this.fieldKey());\n if (isNil(key)) {\n return;\n }\n keys.push(key);\n mapKeys.push({ key, item, isClickManual: false });\n });\n this.handlerSelectMultiKey({ keys, mapKeys, isClickManual: false });\n this.listMultiKeySelected.set(keys);\n }\n\n protected handlerEvent(type: TYPE_POPOVER_EVENT) {\n if (type === 'click') {\n return;\n }\n if (type === 'remove') {\n this.showList.set(false);\n this.outShowList.emit(this.showList());\n return;\n }\n this.showList.set(true);\n this.outShowList.emit(this.showList());\n }\n\n protected handlerDataChange(items: Array<unknown>) {\n this.items.set(items);\n this.popoverFunctionControl()?.updatePopoverOverlayPosition();\n this.outDataChange.emit(this.items());\n }\n\n protected handlerChangeFlagMouse(event: IFlagMouse) {\n this.flagMouseContent.set(event);\n this.mergeFlagMouse();\n }\n\n protected handlerClickButtonOther(button: IButton) {\n this.outClickButtonOther.emit(button);\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n\n protected handlerPopoverControlEvent(event: IPopoverFunctionControlEvent) {\n this.popoverFunctionControl.set(event);\n }\n\n protected async handlerSelectedKey(event: IListDataEmitKey | undefined, eventFromList = false) {\n const key = event?.key;\n const item = event?.item;\n this.lengthKeys.set(!(isNil(key) || (typeof key === 'string' && key === '')) ? 1 : 0);\n this.listKeySelected.set(key);\n if (!this.allowSelectItemMultiple() && this.itemsSelected() && get(this.itemsSelected(), this.fieldKey()) === key) {\n this.selectedKeyByInput.set(false);\n return;\n }\n if (!this.selectedKeyByInput()) {\n if (!(isNil(key) || (typeof key === 'string' && key === '')) && (item || this.itemsSelected())) {\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n }\n if (eventFromList) {\n this.selectedKeyByInput.set(false);\n }\n this.checkValid();\n if (this.lengthKeys() && !item && this.httpRequestDetailItemById()) {\n let itemSelected = await this.setItemSelectedByKey(key);\n if (!itemSelected) {\n itemSelected = {\n [this.fieldKey()]: key,\n [this.fieldLabel()]: CHARACTER_DATA_EMPTY\n };\n this.itemsSelected.set(itemSelected);\n }\n if (event) {\n event.item = itemSelected;\n }\n this.outSelectKey.emit({ ...event, tabKeyActive: this.tabKeyActive() });\n return;\n }\n this.itemsSelected.set(cloneDeep(item));\n this.buildDisplay();\n this.outSelectKey.emit({ ...event, tabKeyActive: this.tabKeyActive() });\n }\n\n protected async handlerSelectMultiKey(event: IListDataEmitMultiKey | undefined, isClickManual = false) {\n if (this.listConfig()?.configTemplateGroup?.()?.singleSelectItem && event?.mapKeys?.length) {\n const itemClickManual = event.mapKeys.find(mapKey => mapKey.item && mapKey.item.isCheckManual);\n if (itemClickManual) {\n setTimeout(() => itemClickManual.item.isCheckManual = false);\n event.keys = [itemClickManual.key];\n event.mapKeys = [itemClickManual];\n this.popoverFunctionControl()?.removePopoverOverlay();\n }\n }\n this.keysSelected.set([...(event?.keys || [])]);\n this.listMultiKeySelected.set([...(event?.keys || [])]);\n this.lengthKeys.set(event?.keys?.length || 0);\n this.checkValid();\n if (this.lengthKeys() > 1) {\n this.outSelectMultiKey.emit({ ...(event || {}), isClickManual, tabKeyActive: this.tabKeyActive() });\n return;\n }\n const key = event?.keys[0];\n let item = event?.mapKeys?.find(item => item.key === key)?.item;\n\n if (this.lengthKeys() && !item && this.httpRequestDetailItemById()) {\n item = await this.setItemSelectedByKey(key);\n this.outSelectMultiKey.emit({ keys: [key], mapKeys: [{ key, item }], isClickManual, tabKeyActive: this.tabKeyActive() });\n return;\n }\n this.itemsSelected.set(cloneDeep(item));\n this.buildDisplay();\n this.outSelectMultiKey.emit({ ...(event || {}), isClickManual, tabKeyActive: this.tabKeyActive() });\n }\n\n private async setItemSelectedByKey(key: unknown) {\n const httpRequestDetailItemById = this.httpRequestDetailItemById();\n if (!httpRequestDetailItemById || this.loadingDetail()) {\n return;\n }\n try {\n this.loadingDetail.set(true);\n const { argumentsValue, guideAutoUpdateArgumentsValue } = httpRequestDetailItemById;\n this.httpRequestService.updateArguments(argumentsValue, { key, dropdownTabKeyActive: this.tabKeyActive() }, {}, '', false, false, guideAutoUpdateArgumentsValue);\n const result = await this.httpRequestService.callApi(httpRequestDetailItemById);\n const item = cloneDeep(result.data[0] || result.data);\n this.itemsSelected.set(item);\n this.buildDisplay();\n this.loadingDetail.set(false);\n return item;\n } catch (error) {\n console.log(error);\n this.loadingDetail.set(false);\n return;\n }\n }\n\n protected handlerChangeTab() {\n this.outChangeTabKeyActive.emit(this.tabKeyActive());\n }\n\n protected handlerLoadingList(event: boolean) {\n this.loadingList.set(event);\n }\n\n private async setError(error: string) {\n this.error.set({ message: error });\n this.showBorderError.set(true);\n }\n\n private async valid() {\n if (this.error()?.message) {\n return false;\n }\n return this.checkValid();\n }\n\n private checkValid(validateDefault?: boolean): boolean {\n this.error.set(undefined);\n const valid = { required: true, limitMaxItemSelect: true };\n const validMaxItemSelected = this.validMaxItemSelected();\n if (this.validRequired() && !this.lengthKeys()) {\n valid.required = false;\n }\n if (validMaxItemSelected && this.lengthKeys() > validMaxItemSelected.value) {\n valid.limitMaxItemSelect = false;\n }\n if (!validateDefault && valid.required === false) {\n const validRequired = this.validRequired();\n this.error.set({ ...(validRequired || {}), message: validRequired?.message || ERROR_MESSAGE_EMPTY_VALID });\n }\n if (!validateDefault && !this.error() && valid.limitMaxItemSelect === false) {\n const validMaxItemSelected = this.validMaxItemSelected();\n this.error.set({ ...(validMaxItemSelected || {}), message: validMaxItemSelected?.message || ERROR_MESSAGE_MAX_VALID, interpolateParams: { value: validMaxItemSelected?.value } })\n }\n this.outValidEvent.emit(valid.required && valid.limitMaxItemSelect);\n return valid.required && valid.limitMaxItemSelect;\n }\n\n private async resetError() {\n this.error.set(undefined);\n this.showBorderError.set(false);\n }\n\n protected handlerListFunctionsControl(event: IListFunctionControlEvent) {\n this.listFunctionControl.set(event);\n }\n\n protected handlerChangStageFlagMouse(flag: IFlagMouse) {\n this.flagMouse.set(flag);\n this.mergeFlagMouse();\n }\n\n private async reset() {\n this.itemsSelected.set(undefined);\n this.lengthKeys.set(0);\n this.listFunctionControl()?.resetKeySelected();\n if (!this.showList() && this.onlyEmitDataWhenReset()) {\n this.outSelectKey.emit(undefined);\n this.outSelectMultiKey.emit(undefined);\n }\n this.listKeySelected.set(undefined);\n this.listMultiKeySelected.set(undefined);\n this.keysSelected.set([]);\n this.error.set(undefined);\n this.selectedKeyByInput.set(false);\n }\n\n private async buildDisplay() {\n if (this.itemsSelected()) {\n this.convertItemSelected()(this.itemsSelected(), this.translate);\n const getPopoverItemSelected = this.getPopoverItemSelected();\n if (getPopoverItemSelected) {\n this.popoverItemSelected.set(await getPopoverItemSelected(this.itemsSelected, this.translate));\n }\n }\n }\n\n private mergeFlagMouse() {\n const flag: IFlagMouse = { isMouseEnter: false, isMouseEnterContent: false, isContainerHasScroll: false };\n if (this.flagMouseContent()?.isMouseEnter || this.flagMouse().isMouseEnter) {\n flag.isMouseEnter = true;\n }\n if (this.flagMouseContent()?.isMouseEnterContent || this.flagMouse().isMouseEnterContent) {\n flag.isMouseEnterContent = true;\n }\n if (this.flagMouseContent()?.isContainerHasScroll || this.flagMouse().isContainerHasScroll) {\n flag.isContainerHasScroll = true;\n }\n this.outChangStageFlagMouse.emit(flag);\n }\n\n}\n","<div class=\"flex flex-col w-full\">\n @if (labelConfig(); as label) {\n <libs_ui-components-label [classInclude]=\"label.classInclude\"\n [labelLeft]=\"label.labelLeft\"\n [labelLeftClass]=\"label.labelLeftClass\"\n [required]=\"label.required \"\n [description]=\"label.description\"\n [descriptionClass]=\"label.descriptionClass\"\n [labelRight]=\"label.labelRight\"\n [labelRightClass]=\"label.labelRightClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [buttonsLeft]=\"label.buttonsLeft\"\n [buttonsRight]=\"label.buttonsRight\"\n [disableButtonsLeft]=\"label.disableButtonsLeft || disable() || loadingDetail()\"\n [disableButtonsRight]=\"label.disableButtonsRight || disable() || loadingDetail()\"\n [hasToggle]=\"label.hasToggle\"\n [toggleActive]=\"label.toggleActive\"\n [toggleDisable]=\"label.toggleDisable || disable() || loadingDetail()\"\n [popover]=\"label.popover\"\n [iconPopoverClass]=\"label.iconPopoverClass\"\n [onlyShowCount]=\"label.onlyShowCount\"\n [limitLength]=\"label.limitLength\"\n [buttonsDescription]=\"label.buttonsDescription\"\n [disableButtonsDescription]=\"label.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"label.buttonsDescriptionContainerClass\"\n [count]=\"label.count\" />\n }\n <libs_ui-components-popover [ignoreShowPopover]=\"disable() || readonly() || loadingDetail()\"\n [class]=\"classInclude() || 'w-full'\"\n [mode]=\"'click-toggle'\"\n [flagMouse]=\"flagMouse()\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreCursorPointerModeLikeClick]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [elementRefCustom]=\"popoverElementRefCustom()\"\n [config]=\"{\n animationConfig: popoverCustomConfig()?.animationConfig || {},\n zIndex: zIndex() ?? 1000,\n widthByParent: popoverCustomConfig()?.widthByParent ?? true,\n parentBorderWidth: popoverCustomConfig()?.parentBorderWidth ?? 0,\n maxHeight: popoverCustomConfig()?.maxHeight ?? 2048,\n maxWidth: popoverCustomConfig()?.maxWidth ?? 2048,\n direction: popoverCustomConfig()?.direction ?? 'bottom',\n template: listViewEl,\n whiteTheme: true,\n timerDestroy: popoverCustomConfig()?.timerDestroy ?? 0,\n ignoreArrow: popoverCustomConfig()?.ignoreArrow ?? true,\n directionDistance: 2,\n classInclude: 'rounded-[4px] ' + (popoverCustomConfig()?.classInclude ?? 'libs-ui-border-general ') + ((listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? ' overflow-hidden' : ''),\n position: popoverCustomConfig()?.position || { mode: 'start', distance: 0 },\n width: popoverCustomConfig()?.width\n }\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outEvent)=\"handlerEvent($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\">\n @if (!isNgContent()) {\n <div [class]=\"'libs-ui-dropdown ' + classIncludeContent()\"\n [class.libs-ui-border-general]=\"!error() && !showBorderError() && !showList()\"\n [class.libs-ui-border-primary-focus-general]=\"!error() && !showBorderError() && showList()\"\n [class.libs-ui-border-error-general]=\"error() || showBorderError()\"\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.cursor-pointer]=\"!(disable() || loadingDetail() || readonly())\"\n [class.libs-ui-disable]=\"disable() || loadingDetail()\"\n [class.libs-ui-disable-background]=\"disable() || loadingDetail()\"\n [class.pointer-events-none]=\"loadingDetail()\"\n [class.rounded-tr-0]=\"hasContentUnitRight()\"\n [class.rounded-br-0]=\"hasContentUnitRight()\"\n [class.text-[#071631]]=\"readonly()\"\n [class.bg-[#f8f9fa]]=\"disable() || loadingDetail() || readonly()\"\n [class.text-[#9ca2ad]]=\"disable() || loadingDetail() || readonly()\">\n <div class=\"flex items-center w-full\">\n <div class=\"flex items-center w-full relative\">\n <div class=\"flex items-center w-full absolute\">\n @if (lengthKeys() === 1) {\n @if (itemsSelected(); as itemsSelected) {\n @if (fieldGetImage(); as fieldGetImage) {\n <libs_ui-components-avatar [classInclude]=\"classAvatarInclude()\"\n [typeShape]=\"typeShape()\"\n [size]=\"imageSize()\"\n [linkAvatar]=\"itemsSelected[fieldGetImage]\"\n [linkAvatarError]=\"linkImageError()\"\n [idGenColor]=\"itemsSelected[fieldGetColorAvatar() || fieldGetTextAvatar()]\"\n [textAvatar]=\"itemsSelected[fieldGetTextAvatar()]\"\n [getLastTextAfterSpace]=\"getLastTextAfterSpace()\" />\n }\n @if (fieldGetIcon(); as fieldGetIcon) {\n <i [class]=\"itemsSelected[fieldGetIcon] + ' mr-[8px]'\"></i>\n }\n }\n }\n <libs_ui-components-popover [type]=\"'text'\"\n [classInclude]=\"(labelPopoverFullWidth() ? 'w-100 ' : '') + classIncludeTextDisplayWhenNoSelect()\"\n [innerHTML]=\"labelItemSelectedComputed() | translate:{value: lengthKeys()} | LibsUiPipesSecurityTrustPipe:'html':useXssFilter() | async\"\n [config]=\"{maxWidth: labelPopoverConfig()?.maxWidth || 250, direction: 'top', zIndex: labelPopoverConfig()?.zIndex, timerDestroy: labelPopoverConfig()?.timerDestroy || 0}\"\n [ignoreStopPropagationEvent]=\"true\" />\n @if (popoverItemSelected(); as popoverItemSelected) {\n <libs_ui-components-popover [type]=\"popoverItemSelected.type || 'other'\"\n [config]=\"popoverItemSelected.config || {}\">\n @if (popoverItemSelected.dataView) {\n <div [innerHtml]=\"popoverItemSelected.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline text-[16px] mx-[8px]\"> </i>\n }\n </libs_ui-components-popover>\n }\n </div>\n </div>\n <i class=\"text-[16px] libs-ui-icon-move-right rotate-90 {{ classIncludeIcon() }}\"\n [class.text-[#6a7383]]=\"!readonly() && !classIncludeIcon()\"\n [class.text-[#9ca2ad]]=\"(readonly() || disable()) && !classIncludeIcon()\"></i>\n </div>\n </div>\n } @else {\n <ng-content></ng-content>\n }\n </libs_ui-components-popover>\n @if (showError()) {\n @if (error(); as error) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\"\n [innerHtml]=\"(error.message || ' ') | translate:(error.interpolateParams || {})\">\n </div>\n }\n }\n</div>\n<ng-template #listViewEl>\n <div style=\"display: flex; flex-direction: column;\">\n @if (tabsConfig()) {\n <libs_ui-components-dropdown-tabs [tabsConfig]=\"tabsConfig()\"\n [(tabKeyActive)]=\"tabKeyActive\"\n [ignoreBorderBottom]=\"ignoreBorderBottom()\"\n [disable]=\"disable() || loadingDetail() || loadingList()\"\n (outChange)=\"handlerChangeTab()\" />\n }\n <libs_ui-components-list [searchConfig]=\"listSearchConfig()\"\n [isSearchOnline]=\"isSearchOnline()\"\n [dropdownTabKeyActive]=\"tabKeyActive()\"\n [keySearch]=\"listKeySearch()\"\n [config]=\"listConfig()\"\n [paddingLeftItem]=\"popoverCustomConfig()?.paddingLeftItem ?? true\"\n [disable]=\"disable() || loadingDetail()\"\n [hiddenInputSearch]=\"listHiddenInputSearch()\"\n [searchPadding]=\"listSearchPadding()\"\n [maxItemShow]=\"(listConfig()?.type === 'text' && listConfig()?.configTemplateText?.()?.notUseVirtualScroll) ? 0 : listMaxItemShow()\"\n [keySelected]=\"listKeySelected()\"\n [multiKeySelected]=\"listMultiKeySelected()\"\n [clickExactly]=\"popoverCustomConfig()?.clickExactly ?? false\"\n [dividerClassInclude]=\"listSearchConfig() ? listDividerClassInclude() : 'hidden'\"\n [buttonsOther]=\"listButtonsOther()\"\n [backgroundListCustom]=\"listBackgroundCustom()\"\n [keysDisableItem]=\"listKeysDisable()\"\n [keysHiddenItem]=\"listKeysHidden()\"\n [hasButtonUnSelectOption]=\"listHasButtonUnSelectOption() ?? (!popoverCustomConfig() && !labelConfig()?.required && (listConfig()?.type === 'text' || listConfig()?.type === 'radio'))\"\n [templateRefSearchNoData]=\"listSearchNoDataTemplateRef()\"\n [focusInputSearch]=\"focusInputSearch()\"\n [zIndex]=\"zIndex()\"\n [resetKeyWhenSelectAllKeyDropdown]=\"resetKeyWhenSelectAllKey()\"\n [ignoreClassDisableDefaultWhenUseKeysDisableItem]=\"listIgnoreClassDisableDefaultWhenUseKeysDisableItem()\"\n [hasDivider]=\"listConfigHasDivider()\"\n (outSelectKey)=\"handlerSelectedKey($event, true)\"\n (outSelectMultiKey)=\"handlerSelectMultiKey($event, true)\"\n (outChangeView)=\"handlerDataChange($event)\"\n (outClickButtonOther)=\"handlerClickButtonOther($event)\"\n (outFunctionsControl)=\"handlerListFunctionsControl($event)\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outLoading)=\"handlerLoadingList($event)\" />\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libs-ui/components-dropdown",
3
- "version": "0.2.67",
3
+ "version": "0.2.69",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0"