@libs-ui/components-list 0.2.147 → 0.2.148
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/defines/list.define.d.ts +1 -1
- package/esm2022/templates/checkbox/checkbox.component.mjs +6 -4
- package/esm2022/templates/radio/radio.component.mjs +6 -4
- package/fesm2022/libs-ui-components-list.mjs +9 -6
- package/fesm2022/libs-ui-components-list.mjs.map +1 -1
- package/list.component.d.ts +1 -1
- package/package.json +1 -1
- package/templates/rows/rows.component.d.ts +1 -1
- package/templates/templates.component.abstract.d.ts +1 -1
|
@@ -11,6 +11,7 @@ import { TranslateModule } from '@ngx-translate/core';
|
|
|
11
11
|
import { LibsUiCheckSelectedByKeyPipe } from '../../pipes/check-selected-by-key.pipe';
|
|
12
12
|
import { LibsUiComponentsListRowsComponent } from '../rows/rows.component';
|
|
13
13
|
import { LibsUiComponentsListTemplatesComponentAbstract } from '../templates.component.abstract';
|
|
14
|
+
import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
|
|
14
15
|
import * as i0 from "@angular/core";
|
|
15
16
|
import * as i1 from "@iharbeck/ngx-virtual-scroller";
|
|
16
17
|
import * as i2 from "@ngx-translate/core";
|
|
@@ -173,7 +174,7 @@ export class LibsUiComponentsListRadioComponent extends LibsUiComponentsListTemp
|
|
|
173
174
|
return this.items().length;
|
|
174
175
|
}
|
|
175
176
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListRadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
176
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListRadioComponent, isStandalone: true, selector: "libs_ui-components-list-templates_radio", viewQueries: [{ propertyName: "virtualScrollerComponent", first: true, predicate: VirtualScrollerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (configTemplateRadio(); as configTemplateRadio) {\n <div class=\"relative h-full w-full\">\n @if (items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]) {\n <div #itemRef\n [class]=\"'libs-ui-list-template-radio-item flex ' + (configTemplateRadio.classItemInclude || '')\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.bg-[#ffffff]]=\"clickExactly()\"\n [class.!py-[2px]]=\"clickExactly()\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-radio-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [active]=\"keySelected() === item()[fieldKey()]\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateRadio.hasAvatarGroupSocial\"\n [linkImage]=\"configTemplateRadio.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateRadio.getImageError ? configTemplateRadio.getImageError : configTemplateRadio.getImage):item()) | async) : item()[configTemplateRadio.fieldGetImage || '']\"\n [classImageInclude]=\"configTemplateRadio.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [classLabelInclude]=\"item().classLabelInclude || ''\"\n [popover]=\"item().dataPopover\"\n [clickExactly]=\"clickExactly()\"\n [disableLabel]=\"disableLabel()\"\n [zIndexLabel]=\"configTemplateRadio.zIndexPopover ?? 1200\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('radio',item())\"\n (outClickLabel)=\"handlerChange('radio',item())\" />\n }\n @if (configTemplateRadio?.rows?.()) {\n <libs_ui-components-list-templates_rows class=\"w-full {{ configTemplateRadio.classRows ?? '' }}\"\n [item]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"keySelected()\"\n [configTemplate]=\"configTemplateRadio\"\n (outEvent)=\"handlerChange('radio',$event.item)\" />\n }\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if (!items().length) {\n <div [class]=\"'libs-ui-font-h4r text-[#c1c1c1] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span> </span>\n }\n </div>\n }\n\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n}\n", styles: [".libs-ui-list-template-radio-item{padding:4px 22px 4px 1px;font-size:12px;line-height:18px;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i1.VirtualScrollerComponent, selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "RTL", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "component", type: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabel", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "component", type: LibsUiComponentsListRowsComponent, selector: "libs_ui-components-list-templates_rows", inputs: ["configTemplate", "item", "keySelected", "fieldKey", "zIndex"], outputs: ["outChangStageFlagMousePopover", "outEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
177
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListRadioComponent, isStandalone: true, selector: "libs_ui-components-list-templates_radio", viewQueries: [{ propertyName: "virtualScrollerComponent", first: true, predicate: VirtualScrollerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (configTemplateRadio(); as configTemplateRadio) {\n <div class=\"relative h-full w-full\">\n @if (items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]) {\n <div #itemRef\n [class]=\"'libs-ui-list-template-radio-item flex ' + (configTemplateRadio.classItemInclude || '')\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.bg-[#ffffff]]=\"clickExactly()\"\n [class.!py-[2px]]=\"clickExactly()\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-radio-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [active]=\"keySelected() === item()[fieldKey()]\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateRadio.hasAvatarGroupSocial\"\n [linkImage]=\"configTemplateRadio.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateRadio.getImageError ? configTemplateRadio.getImageError : configTemplateRadio.getImage):item()) | async) : item()[configTemplateRadio.fieldGetImage || '']\"\n [classImageInclude]=\"configTemplateRadio.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [classLabelInclude]=\"item().classLabelInclude || ''\"\n [popover]=\"item().dataPopover|LibsUiPipesConvertSignalToObjectPipe\"\n [clickExactly]=\"clickExactly()\"\n [disableLabel]=\"disableLabel()\"\n [zIndexLabel]=\"configTemplateRadio.zIndexPopover ?? 1200\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('radio',item())\"\n (outClickLabel)=\"handlerChange('radio',item())\" />\n }\n @if (configTemplateRadio?.rows?.()) {\n <libs_ui-components-list-templates_rows class=\"w-full {{ configTemplateRadio.classRows ?? '' }}\"\n [item]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"keySelected()\"\n [configTemplate]=\"configTemplateRadio\"\n (outEvent)=\"handlerChange('radio',$event.item)\" />\n }\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if (!items().length) {\n <div [class]=\"'libs-ui-font-h4r text-[#c1c1c1] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span> </span>\n }\n </div>\n }\n\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n}\n", styles: [".libs-ui-list-template-radio-item{padding:4px 22px 4px 1px;font-size:12px;line-height:18px;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i1.VirtualScrollerComponent, selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "RTL", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "component", type: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabel", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "component", type: LibsUiComponentsListRowsComponent, selector: "libs_ui-components-list-templates_rows", inputs: ["configTemplate", "item", "keySelected", "fieldKey", "zIndex"], outputs: ["outChangStageFlagMousePopover", "outEvent"] }, { kind: "pipe", type: LibsUiPipesConvertSignalToObjectPipe, name: "LibsUiPipesConvertSignalToObjectPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
177
178
|
}
|
|
178
179
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListRadioComponent, decorators: [{
|
|
179
180
|
type: Component,
|
|
@@ -184,7 +185,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
184
185
|
LibsUiComponentsRadioSingleComponent,
|
|
185
186
|
LibsUiPipesCallFunctionInTemplatePipe,
|
|
186
187
|
LibsUiCheckSelectedByKeyPipe,
|
|
187
|
-
LibsUiComponentsListRowsComponent
|
|
188
|
-
|
|
188
|
+
LibsUiComponentsListRowsComponent,
|
|
189
|
+
LibsUiPipesConvertSignalToObjectPipe
|
|
190
|
+
], template: "@if (configTemplateRadio(); as configTemplateRadio) {\n <div class=\"relative h-full w-full\">\n @if (items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]) {\n <div #itemRef\n [class]=\"'libs-ui-list-template-radio-item flex ' + (configTemplateRadio.classItemInclude || '')\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.bg-[#ffffff]]=\"clickExactly()\"\n [class.!py-[2px]]=\"clickExactly()\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-radio-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [active]=\"keySelected() === item()[fieldKey()]\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateRadio.hasAvatarGroupSocial\"\n [linkImage]=\"configTemplateRadio.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateRadio.getImageError ? configTemplateRadio.getImageError : configTemplateRadio.getImage):item()) | async) : item()[configTemplateRadio.fieldGetImage || '']\"\n [classImageInclude]=\"configTemplateRadio.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [classLabelInclude]=\"item().classLabelInclude || ''\"\n [popover]=\"item().dataPopover|LibsUiPipesConvertSignalToObjectPipe\"\n [clickExactly]=\"clickExactly()\"\n [disableLabel]=\"disableLabel()\"\n [zIndexLabel]=\"configTemplateRadio.zIndexPopover ?? 1200\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('radio',item())\"\n (outClickLabel)=\"handlerChange('radio',item())\" />\n }\n @if (configTemplateRadio?.rows?.()) {\n <libs_ui-components-list-templates_rows class=\"w-full {{ configTemplateRadio.classRows ?? '' }}\"\n [item]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"keySelected()\"\n [configTemplate]=\"configTemplateRadio\"\n (outEvent)=\"handlerChange('radio',$event.item)\" />\n }\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if (!items().length) {\n <div [class]=\"'libs-ui-font-h4r text-[#c1c1c1] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span> </span>\n }\n </div>\n }\n\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n}\n", styles: [".libs-ui-list-template-radio-item{padding:4px 22px 4px 1px;font-size:12px;line-height:18px;position:relative}\n"] }]
|
|
189
191
|
}] });
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2xpc3Qvc3JjL3RlbXBsYXRlcy9yYWRpby9yYWRpby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3JhZGlvL3JhZGlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxpQ0FBaUMs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QyxRQUFRLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRWxGLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBRVMsYUFBYTtRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQzt3R0F6TFUsa0NBQWtDOzRGQUFsQyxrQ0FBa0MsNkpBS1csd0JBQXdCLHVGQ3JDbEYsdWlJQTZFQSx3S0R0REkscUJBQXFCLGt0QkFBRSxTQUFTLDZDQUFFLGVBQWUsNEZBQUUsZ0JBQWdCLG9KQUNuRSxnQ0FBZ0MsaUdBQ2hDLHNDQUFzQyw4UUFDdEMsb0NBQW9DLDRlQUNwQyxxQ0FBcUMseUVBQ3JDLDRCQUE0QixxRUFDNUIsaUNBQWlDOzs0RkFHeEIsa0NBQWtDO2tCQWpCOUMsU0FBUzsrQkFFRSx5Q0FBeUMsY0FHdkMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCO3dCQUNuRSxnQ0FBZ0M7d0JBQ2hDLHNDQUFzQzt3QkFDdEMsb0NBQW9DO3dCQUNwQyxxQ0FBcUM7d0JBQ3JDLDRCQUE0Qjt3QkFDNUIsaUNBQWlDO3FCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQsIHNpZ25hbCwgdmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbGVyQ29tcG9uZW50LCBWaXJ0dWFsU2Nyb2xsZXJNb2R1bGUgfSBmcm9tICdAaWhhcmJlY2svbmd4LXZpcnR1YWwtc2Nyb2xsZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1JhZGlvU2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1yYWRpby1zaW5nbGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zcGlubmVyJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZGVsZXRlVW5pY29kZSwgZXNjYXBlSHRtbCwgaXNFbXB0eSwgaXNOaWwgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9jaGVjay1zZWxlY3RlZC1ieS1rZXkucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGlzdFJvd3NDb21wb25lbnQgfSBmcm9tICcuLi9yb3dzL3Jvd3MuY29tcG9uZW50JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgfSBmcm9tICcuLi90ZW1wbGF0ZXMuY29tcG9uZW50LmFic3RyYWN0JztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbVJhZGlvIH0gZnJvbSAnLi8uLi8uLi9pbnRlcmZhY2VzL2NvbmZpZy1pdGVtLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc19yYWRpbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYWRpby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhZGlvLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgVmlydHVhbFNjcm9sbGVyTW9kdWxlLCBBc3luY1BpcGUsIFRyYW5zbGF0ZU1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDb21wb25lbnRzUmFkaW9TaW5nbGVDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSxcbiAgICBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMaXN0Um93c0NvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNMaXN0UmFkaW9Db21wb25lbnQgZXh0ZW5kcyBMaWJzVWlDb21wb25lbnRzTGlzdFRlbXBsYXRlc0NvbXBvbmVudEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgY29uZmlnVGVtcGxhdGVSYWRpbyA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1SYWRpbyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByb3RlY3RlZCByZWFkb25seSB2aXJ0dWFsU2Nyb2xsZXJDb21wb25lbnQgPSB2aWV3Q2hpbGQoVmlydHVhbFNjcm9sbGVyQ29tcG9uZW50KTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVJhZGlvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuY29uZmlnVGVtcGxhdGVSYWRpby5zZXQodGhpcy5jb25maWcoKT8uY29uZmlnVGVtcGxhdGVSYWRpbz8uKCkpO1xuICAgIHRoaXMuZmllbGRLZXkuc2V0KHRoaXMuY29uZmlnVGVtcGxhdGVSYWRpbygpPy5maWVsZEtleSA/PyB0aGlzLmZpZWxkS2V5RGVmYXVsdCgpKTtcbiAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlclNjcm9sbEJvdHRvbSgpIHtcbiAgICBpZiAodGhpcy5sb2FkZWRMYXN0SXRlbSgpKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkaW5nKCkgfHwgdGhpcy5sb2FkZWRMYXN0SXRlbSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZShmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1NlYXJjaCgpIHtcbiAgICBpZiAoIXRoaXMuaXNTZWFyY2hPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzS2V5Q2hhbmdlVW5TZWxlY3QoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKGlzTmlsKGl0ZW1bdGhpcy5maWVsZEtleSgpXSkgfHwgaXRlbVt0aGlzLmZpZWxkS2V5KCldID09PSAnJyB8fCB0aGlzLmtleVNlbGVjdGVkKCkgIT09IGl0ZW1bdGhpcy5maWVsZEtleSgpXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmtleVNlbGVjdGVkLnNldCgnJyk7XG4gICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2UoZXZlbnQ6IGFueSwgaXRlbTogYW55LCBpZ25vcmVEaXNhYmxlPzogYm9vbGVhbiwgaXNDbGlja01hbnVhbCA9IHRydWUpIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZSgpICYmICFpZ25vcmVEaXNhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5jbGlja0V4YWN0bHkoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMua2V5U2VsZWN0ZWQuc2V0KGl0ZW1bdGhpcy5maWVsZEtleSgpXSk7XG4gICAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHsga2V5OiB0aGlzLmtleVNlbGVjdGVkKCksIGl0ZW0sIGlzQ2xpY2tNYW51YWwgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5rZXlTZWxlY3RlZC5zZXQoaXRlbVt0aGlzLmZpZWxkS2V5KCldKTtcbiAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHsga2V5OiB0aGlzLmtleVNlbGVjdGVkKCksIGl0ZW0sIGlzQ2xpY2tNYW51YWwgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc0RhdGEocmVwbGFjZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQnlLZXlTZWFyY2g6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+ID0gW107XG4gICAgY29uc3Qga2V5c0hpZGRlbiA9IHRoaXMua2V5c0hpZGRlbkl0ZW0oKSB8fCBbXTtcblxuICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICB0aGlzLml0ZW1zLnNldChbXSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZSgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGRhdGFTdG9yZSA9IGNsb25lRGVlcChpdGVtKSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+O1xuXG4gICAgICBkYXRhU3RvcmUudXBkYXRlKHN0b3JlID0+IHsgcmV0dXJuIHsgLi4uc3RvcmUsIHJlZjogaXRlbSgpIH0gfSk7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzSGlkZGVuLmZpbmQoa2V5ID0+IGRhdGFTdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gZGVsZXRlVW5pY29kZSh0aGlzLmJ1aWxkVmFsdWVCeUNvbmZpZyhkYXRhU3RvcmUsIHRoaXMuY29uZmlnVGVtcGxhdGVSYWRpbygpKSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGV4dEVzY2FwZSA9IGVzY2FwZUh0bWwodGV4dCk7XG4gICAgICAgIGNvbnN0IGtleVNlYXJjaCA9IGRlbGV0ZVVuaWNvZGUoZXNjYXBlSHRtbCh0aGlzLmtleVNlYXJjaCgpLnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcblxuICAgICAgICBpZiAoKCh0aGlzLmlzU2VhcmNoT25saW5lKCkgJiYgdGhpcy5jb25maWcoKT8uaHR0cFJlcXVlc3REYXRhPy4oKT8uc2VydmljZU5hbWUgJiYgIXRoaXMuY29uZmlnKCk/Lmh0dHBSZXF1ZXN0RGF0YT8uKCk/LnNlcnZpY2VPdGhlcikgfHxcbiAgICAgICAgICAodGV4dCAmJiAodGV4dC5pbmNsdWRlcyhrZXlTZWFyY2gpIHx8IHRleHRFc2NhcGUuaW5jbHVkZXMoa2V5U2VhcmNoKSkpKSAmJiAocmVwbGFjZSB8fCAoIXJlcGxhY2UgJiYgIXRoaXMuaXRlbXMoKS5maW5kKGRhdGFJdGVtID0+IGRhdGFJdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gZGF0YVN0b3JlKClbdGhpcy5maWVsZEtleSgpXSkpKSAmJiAhaXRlbUJ5S2V5U2VhcmNoLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldKSkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1RlbXBsYXRlUmFkaW8oKT8uZ2V0UG9wb3Zlcikge1xuICAgICAgICAgICAgZGF0YVN0b3JlLnVwZGF0ZShjdXJyZW50U3RvcmUgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5jdXJyZW50U3RvcmUsIGRhdGFUb29sdGlwOiB0aGlzLmNvbmZpZ1RlbXBsYXRlUmFkaW8oKT8uZ2V0UG9wb3Zlcj8uKGRhdGFTdG9yZSkgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkYXRhU3RvcmUudXBkYXRlKGN1cnJlbnRTdG9yZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jdXJyZW50U3RvcmUsXG4gICAgICAgICAgICAgIGNsYXNzTGFiZWxJbmNsdWRlOiB0aGlzLmNvbmZpZ1RlbXBsYXRlUmFkaW8oKT8uZ2V0Q2xhc3NJdGVtPy4oZGF0YVN0b3JlKCkpLFxuICAgICAgICAgICAgICBhdmF0YXJDb25maWc6IHRoaXMuY29uZmlnVGVtcGxhdGVSYWRpbygpPy5nZXRBdmF0YXJDb25maWc/LihkYXRhU3RvcmUoKSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaXRlbUJ5S2V5U2VhcmNoLnB1c2goZGF0YVN0b3JlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4SXRlbVJlbW92ZSA9IHRoaXMuaXRlbXMoKS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0ga2V5KTtcblxuICAgICAgaWYgKGluZGV4SXRlbVJlbW92ZSA+IC0xKSB7XG4gICAgICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXhJdGVtUmVtb3ZlLCAxKTtcblxuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBjYWxsYmFja0NoZWNrU2Nyb2xsID0gKHByZVN0YXRlSGFzU2Nyb2xsOiBib29sZWFuLCBjdXJyZW50SGFzU2Nyb2xsOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnNjcm9sbFRvSXRlbVNlbGVjdGVkKCk7XG4gICAgICBpZiAodGhpcy5rZXlzSGlkZGVuSXRlbSgpPy5sZW5ndGggJiYgcHJlU3RhdGVIYXNTY3JvbGwgJiYgIWN1cnJlbnRIYXNTY3JvbGwgJiYgKHRoaXMuaXNTZWFyY2hPbmxpbmUoKSkpIHtcbiAgICAgICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIHRoaXMuaXRlbXMuc2V0KGl0ZW1CeUtleVNlYXJjaCk7XG4gICAgICB0aGlzLmNvbmZpZygpPy5zb3J0Py4odGhpcy5pdGVtcygpKTtcbiAgICAgIHRoaXMuZW1pdEtleVNlbGVjdGVkRGVmYXVsdElmRXhpc3RJdGVtKHRoaXMuaXRlbXMoKSk7XG4gICAgICB0aGlzLmF1dG9TZWxlY3RGaXJzdEl0ZW0odGhpcy5pdGVtcygpKTtcbiAgICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgICAgdGhpcy5vdXRMb2FkSXRlbXNDb21wbGV0ZS5lbWl0KHsgaXRlbXM6IHRoaXMuaXRlbXMoKSwgcGFnaW5nOiB0aGlzLnBhZ2luZ1N0b3JlKCkgfSk7XG4gICAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2FsbGJhY2tDaGVja1Njcm9sbCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIC4uLml0ZW1CeUtleVNlYXJjaF0pO1xuICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgdGhpcy5vdXRMb2FkSXRlbXNDb21wbGV0ZS5lbWl0KHsgaXRlbXM6IHRoaXMuaXRlbXMoKSwgcGFnaW5nOiB0aGlzLnBhZ2luZ1N0b3JlKCkgfSk7XG4gICAgdGhpcy5jaGVja1ZpZXdQb3J0U2Nyb2xsKGNhbGxiYWNrQ2hlY2tTY3JvbGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0l0ZW1TZWxlY3RlZCgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnVGVtcGxhdGVSYWRpbygpPy5hdXRvU2Nyb2xsVG9JdGVtU2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZUF1dG9TY3JvbGxJdGVtU2VsZWN0ZWQoKSk7XG4gICAgdGhpcy50aW1lQXV0b1Njcm9sbEl0ZW1TZWxlY3RlZC5zZXQoKHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmtleVNlbGVjdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcygpLmZpbmRJbmRleChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSB0aGlzLmtleVNlbGVjdGVkKCkpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldENvbnRhaW5lciA9ICh0aGlzLmVsZW1lbnRTY3JvbGwoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk/Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbE9mZnNldCA9ICgob2Zmc2V0Q29udGFpbmVyID8gb2Zmc2V0Q29udGFpbmVyIC0gdGhpcy5oZWlnaHRJdGVtKCkgOiAwKSAvIDIpICogLTE7XG5cbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsZXJDb21wb25lbnQoKT8uc2Nyb2xsVG9JbmRleChpbmRleCwgdHJ1ZSwgYWRkaXRpb25hbE9mZnNldCwgdGhpcy50aW1lQW5pbWF0aW9uU2Nyb2xsVG9JbmRleEl0ZW0oKSk7XG4gICAgICB9XG4gICAgfSkgYXMgdW5rbm93bikgYXMgbnVtYmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdXRvU2VsZWN0Rmlyc3RJdGVtKGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuYXV0b1NlbGVjdGVkRmlyc3RJdGVtQ2FsbE91dHNpZGVCZWZvcmUoKSB8fCB0aGlzLmtleVNlbGVjdGVkKCkgfHwgIXRoaXMuY29uZmlnKCk/LmF1dG9TZWxlY3RGaXJzdEl0ZW0gfHwgIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2hhbmdlKCdyYWRpbycsIGl0ZW1zWzBdLCB0cnVlLCBmYWxzZSk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBlbWl0S2V5U2VsZWN0ZWREZWZhdWx0SWZFeGlzdEl0ZW0oaXRlbXM6IEFycmF5PGFueT4pIHtcbiAgICBjb25zdCBpdGVtID0gaXRlbXMuZmluZChzdG9yZSA9PiBzdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IHRoaXMua2V5U2VsZWN0ZWQoKSk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5oYW5kbGVyQ2hhbmdlKCdyYWRpbycsIGl0ZW0sIHRydWUsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGVuZ3RoSXRlbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLml0ZW1zKCkubGVuZ3RoO1xuICB9XG59IiwiQGlmIChjb25maWdUZW1wbGF0ZVJhZGlvKCk7IGFzIGNvbmZpZ1RlbXBsYXRlUmFkaW8pIHtcbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGxcIj5cbiAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICA8ZGl2ICNlbGVtZW50U2Nyb2xsXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXG4gICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRWaWV3UG9ydCgpID8gaGVpZ2h0Vmlld1BvcnQoKSsncHgnOicxMDAlJ1wiXG4gICAgICAgIChvdXRTY3JvbGxCb3R0b20pPVwiaGFuZGxlclNjcm9sbEJvdHRvbSgpXCI+XG4gICAgICAgIDx2aXJ0dWFsLXNjcm9sbGVyICNzY3JvbGxcbiAgICAgICAgICBbcGFyZW50U2Nyb2xsXT1cImVsZW1lbnRTY3JvbGxcIlxuICAgICAgICAgIFtpdGVtc109XCJpdGVtcygpXCJcbiAgICAgICAgICBjbGFzcz1cImgtZnVsbFwiPlxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc2Nyb2xsLnZpZXdQb3J0SXRlbXM7IHRyYWNrIGl0ZW0oKVtmaWVsZEtleSgpXSkge1xuICAgICAgICAgICAgPGRpdiAjaXRlbVJlZlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktbGlzdC10ZW1wbGF0ZS1yYWRpby1pdGVtIGZsZXggJyArIChjb25maWdUZW1wbGF0ZVJhZGlvLmNsYXNzSXRlbUluY2x1ZGUgfHwgJycpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktYmctbGlzdC1ob3Zlcl09XCIhY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWhvdmVyLWFjdGl2ZV09XCIhY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgICAgICBbY2xhc3MuIXBsLVsxMnB4XV09XCJwYWRkaW5nTGVmdEl0ZW0oKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5iZy1bI2ZmZmZmZl1dPVwiY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgICAgICBbY2xhc3MuIXB5LVsycHhdXT1cImNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDaGFuZ2UoJGV2ZW50LGl0ZW0oKSlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtKCkuZmllbGRMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1yYWRpby1zaW5nbGUgW2xhYmVsXT1cIml0ZW0oKS5maWVsZExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F2YXRhckNvbmZpZ109XCJpdGVtKCkuYXZhdGFyQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJrZXlTZWxlY3RlZCgpID09PSBpdGVtKClbZmllbGRLZXkoKV1cIlxuICAgICAgICAgICAgICAgICAgICBba2V5XT1cIml0ZW0oKVtmaWVsZEtleSgpXVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbWdUeXBlSWNvbl09XCJjb25maWdUZW1wbGF0ZVJhZGlvLmhhc0F2YXRhckdyb3VwU29jaWFsXCJcbiAgICAgICAgICAgICAgICAgICAgW2xpbmtJbWFnZV09XCJjb25maWdUZW1wbGF0ZVJhZGlvLmdldEltYWdlID8gKCgnYXZhdGFyJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6KGl0ZW0oKS5zcGVjaWZpY19sb2FkSW1nRXJyb3IgJiYgY29uZmlnVGVtcGxhdGVSYWRpby5nZXRJbWFnZUVycm9yID8gY29uZmlnVGVtcGxhdGVSYWRpby5nZXRJbWFnZUVycm9yIDogY29uZmlnVGVtcGxhdGVSYWRpby5nZXRJbWFnZSk6aXRlbSgpKSB8IGFzeW5jKSA6IGl0ZW0oKVtjb25maWdUZW1wbGF0ZVJhZGlvLmZpZWxkR2V0SW1hZ2UgfHwgJyddXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzSW1hZ2VJbmNsdWRlXT1cImNvbmZpZ1RlbXBsYXRlUmFkaW8uY2xhc3NJbmNsdWRlSW1hZ2UgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBbYnVsbGV0XT1cIml0ZW0oKS5idWxsZXQ/LigpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTprZXlzRGlzYWJsZUl0ZW0oKTprZXlzRGlzYWJsZUl0ZW0oKT8ubGVuZ3RoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCJpdGVtKCkuY2xhc3NMYWJlbEluY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xpY2tFeGFjdGx5XT1cImNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVMYWJlbF09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt6SW5kZXhMYWJlbF09XCJjb25maWdUZW1wbGF0ZVJhZGlvLnpJbmRleFBvcG92ZXIgPz8gMTIwMFwiXG4gICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZSgncmFkaW8nLGl0ZW0oKSlcIlxuICAgICAgICAgICAgICAgICAgICAob3V0Q2xpY2tMYWJlbCk9XCJoYW5kbGVyQ2hhbmdlKCdyYWRpbycsaXRlbSgpKVwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoY29uZmlnVGVtcGxhdGVSYWRpbz8ucm93cz8uKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGlzdC10ZW1wbGF0ZXNfcm93cyBjbGFzcz1cInctZnVsbCB7eyBjb25maWdUZW1wbGF0ZVJhZGlvLmNsYXNzUm93cyA/PyAnJyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW0oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZEtleV09XCJmaWVsZEtleSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2tleVNlbGVjdGVkXT1cImtleVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnVGVtcGxhdGVdPVwiY29uZmlnVGVtcGxhdGVSYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgIChvdXRFdmVudCk9XCJoYW5kbGVyQ2hhbmdlKCdyYWRpbycsJGV2ZW50Lml0ZW0pXCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L3ZpcnR1YWwtc2Nyb2xsZXI+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmICghaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cIidsaWJzLXVpLWZvbnQtaDRyIHRleHQtWyNjMWMxYzFdICcrIChjb25maWcoKT8udGV4dE5vRGF0YUNsYXNzSW5jbHVkZSA/PyAncHktWzRweF0gcHgtWzEycHhdJylcIj5cbiAgICAgICAgQGlmICgha2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgIDxzcGFuPnt7IChjb25maWcoKT8udGV4dE5vRGF0YSA/PyAnaTE4bl9oYXZlX25vX3NlbGVjdGlvbicpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAodGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEoKSAmJiBrZXlTZWFyY2goKSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgfHwgbnVsbDtjb250ZXh0OntrZXlTZWFyY2g6a2V5U2VhcmNoKCl9XCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCF0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpICYmIGtleVNlYXJjaCgpICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICA8c3Bhbj57eyAoY29uZmlnKCk/LnRleHRTZWFyY2hOb0RhdGEgPz8gJ2kxOG5fbm9fcmVzdWx0JykgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgICA8c3Bhbj4mbmJzcDs8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2xpc3Qvc3JjL3RlbXBsYXRlcy9yYWRpby9yYWRpby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3JhZGlvL3JhZGlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxpQ0FBaUMs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QyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRWxGLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBRVMsYUFBYTtRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQzt3R0F6TFUsa0NBQWtDOzRGQUFsQyxrQ0FBa0MsNkpBS1csd0JBQXdCLHVGQ3ZDbEYsNGtJQTZFQSx3S0RyREkscUJBQXFCLGt0QkFBRSxTQUFTLDZDQUFFLGVBQWUsNEZBQUUsZ0JBQWdCLG9KQUNuRSxnQ0FBZ0MsaUdBQ2hDLHNDQUFzQyw4UUFDdEMsb0NBQW9DLDRlQUNwQyxxQ0FBcUMseUVBQ3JDLDRCQUE0QixxRUFDNUIsaUNBQWlDLCtNQUNqQyxvQ0FBb0M7OzRGQUczQixrQ0FBa0M7a0JBbEI5QyxTQUFTOytCQUVFLHlDQUF5QyxjQUd2QyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AscUJBQXFCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0I7d0JBQ25FLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0QyxvQ0FBb0M7d0JBQ3BDLHFDQUFxQzt3QkFDckMsNEJBQTRCO3dCQUM1QixpQ0FBaUM7d0JBQ2pDLG9DQUFvQztxQkFDckMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBzaWduYWwsIHZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudCwgVmlydHVhbFNjcm9sbGVyTW9kdWxlIH0gZnJvbSAnQGloYXJiZWNrL25neC12aXJ0dWFsLXNjcm9sbGVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcmFkaW8tc2luZ2xlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zY3JvbGwtb3ZlcmxheSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3Bpbm5lcic7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtY2FsbC1mdW5jdGlvbi1pbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGRlbGV0ZVVuaWNvZGUsIGVzY2FwZUh0bWwsIGlzRW1wdHksIGlzTmlsIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvY2hlY2stc2VsZWN0ZWQtYnkta2V5LnBpcGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RSb3dzQ29tcG9uZW50IH0gZnJvbSAnLi4vcm93cy9yb3dzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGlzdFRlbXBsYXRlc0NvbXBvbmVudEFic3RyYWN0IH0gZnJvbSAnLi4vdGVtcGxhdGVzLmNvbXBvbmVudC5hYnN0cmFjdCc7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW1SYWRpbyB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9jb25maWctaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNDb252ZXJ0U2lnbmFsVG9PYmplY3RQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtY29udmVydC1zaWduYWwtdG8tb2JqZWN0JztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX3JhZGlvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFkaW8uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBWaXJ0dWFsU2Nyb2xsZXJNb2R1bGUsIEFzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNSYWRpb1NpbmdsZUNvbXBvbmVudCxcbiAgICBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlLFxuICAgIExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RSb3dzQ29tcG9uZW50LFxuICAgIExpYnNVaVBpcGVzQ29udmVydFNpZ25hbFRvT2JqZWN0UGlwZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNMaXN0UmFkaW9Db21wb25lbnQgZXh0ZW5kcyBMaWJzVWlDb21wb25lbnRzTGlzdFRlbXBsYXRlc0NvbXBvbmVudEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgY29uZmlnVGVtcGxhdGVSYWRpbyA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1SYWRpbyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByb3RlY3RlZCByZWFkb25seSB2aXJ0dWFsU2Nyb2xsZXJDb21wb25lbnQgPSB2aWV3Q2hpbGQoVmlydHVhbFNjcm9sbGVyQ29tcG9uZW50KTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVJhZGlvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuY29uZmlnVGVtcGxhdGVSYWRpby5zZXQodGhpcy5jb25maWcoKT8uY29uZmlnVGVtcGxhdGVSYWRpbz8uKCkpO1xuICAgIHRoaXMuZmllbGRLZXkuc2V0KHRoaXMuY29uZmlnVGVtcGxhdGVSYWRpbygpPy5maWVsZEtleSA/PyB0aGlzLmZpZWxkS2V5RGVmYXVsdCgpKTtcbiAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlclNjcm9sbEJvdHRvbSgpIHtcbiAgICBpZiAodGhpcy5sb2FkZWRMYXN0SXRlbSgpKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkaW5nKCkgfHwgdGhpcy5sb2FkZWRMYXN0SXRlbSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZShmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1NlYXJjaCgpIHtcbiAgICBpZiAoIXRoaXMuaXNTZWFyY2hPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzS2V5Q2hhbmdlVW5TZWxlY3QoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKGlzTmlsKGl0ZW1bdGhpcy5maWVsZEtleSgpXSkgfHwgaXRlbVt0aGlzLmZpZWxkS2V5KCldID09PSAnJyB8fCB0aGlzLmtleVNlbGVjdGVkKCkgIT09IGl0ZW1bdGhpcy5maWVsZEtleSgpXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmtleVNlbGVjdGVkLnNldCgnJyk7XG4gICAgdGhpcy5vdXRTZWxlY3RLZXkuZW1pdCh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2UoZXZlbnQ6IGFueSwgaXRlbTogYW55LCBpZ25vcmVEaXNhYmxlPzogYm9vbGVhbiwgaXNDbGlja01hbnVhbCA9IHRydWUpIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZSgpICYmICFpZ25vcmVEaXNhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5jbGlja0V4YWN0bHkoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMua2V5U2VsZWN0ZWQuc2V0KGl0ZW1bdGhpcy5maWVsZEtleSgpXSk7XG4gICAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHsga2V5OiB0aGlzLmtleVNlbGVjdGVkKCksIGl0ZW0sIGlzQ2xpY2tNYW51YWwgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5rZXlTZWxlY3RlZC5zZXQoaXRlbVt0aGlzLmZpZWxkS2V5KCldKTtcbiAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHsga2V5OiB0aGlzLmtleVNlbGVjdGVkKCksIGl0ZW0sIGlzQ2xpY2tNYW51YWwgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc0RhdGEocmVwbGFjZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQnlLZXlTZWFyY2g6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+ID0gW107XG4gICAgY29uc3Qga2V5c0hpZGRlbiA9IHRoaXMua2V5c0hpZGRlbkl0ZW0oKSB8fCBbXTtcblxuICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICB0aGlzLml0ZW1zLnNldChbXSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZSgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGRhdGFTdG9yZSA9IGNsb25lRGVlcChpdGVtKSBhcyBXcml0YWJsZVNpZ25hbDxhbnk+O1xuXG4gICAgICBkYXRhU3RvcmUudXBkYXRlKHN0b3JlID0+IHsgcmV0dXJuIHsgLi4uc3RvcmUsIHJlZjogaXRlbSgpIH0gfSk7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzSGlkZGVuLmZpbmQoa2V5ID0+IGRhdGFTdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gZGVsZXRlVW5pY29kZSh0aGlzLmJ1aWxkVmFsdWVCeUNvbmZpZyhkYXRhU3RvcmUsIHRoaXMuY29uZmlnVGVtcGxhdGVSYWRpbygpKSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGV4dEVzY2FwZSA9IGVzY2FwZUh0bWwodGV4dCk7XG4gICAgICAgIGNvbnN0IGtleVNlYXJjaCA9IGRlbGV0ZVVuaWNvZGUoZXNjYXBlSHRtbCh0aGlzLmtleVNlYXJjaCgpLnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcblxuICAgICAgICBpZiAoKCh0aGlzLmlzU2VhcmNoT25saW5lKCkgJiYgdGhpcy5jb25maWcoKT8uaHR0cFJlcXVlc3REYXRhPy4oKT8uc2VydmljZU5hbWUgJiYgIXRoaXMuY29uZmlnKCk/Lmh0dHBSZXF1ZXN0RGF0YT8uKCk/LnNlcnZpY2VPdGhlcikgfHxcbiAgICAgICAgICAodGV4dCAmJiAodGV4dC5pbmNsdWRlcyhrZXlTZWFyY2gpIHx8IHRleHRFc2NhcGUuaW5jbHVkZXMoa2V5U2VhcmNoKSkpKSAmJiAocmVwbGFjZSB8fCAoIXJlcGxhY2UgJiYgIXRoaXMuaXRlbXMoKS5maW5kKGRhdGFJdGVtID0+IGRhdGFJdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gZGF0YVN0b3JlKClbdGhpcy5maWVsZEtleSgpXSkpKSAmJiAhaXRlbUJ5S2V5U2VhcmNoLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldKSkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1RlbXBsYXRlUmFkaW8oKT8uZ2V0UG9wb3Zlcikge1xuICAgICAgICAgICAgZGF0YVN0b3JlLnVwZGF0ZShjdXJyZW50U3RvcmUgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5jdXJyZW50U3RvcmUsIGRhdGFUb29sdGlwOiB0aGlzLmNvbmZpZ1RlbXBsYXRlUmFkaW8oKT8uZ2V0UG9wb3Zlcj8uKGRhdGFTdG9yZSkgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkYXRhU3RvcmUudXBkYXRlKGN1cnJlbnRTdG9yZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jdXJyZW50U3RvcmUsXG4gICAgICAgICAgICAgIGNsYXNzTGFiZWxJbmNsdWRlOiB0aGlzLmNvbmZpZ1RlbXBsYXRlUmFkaW8oKT8uZ2V0Q2xhc3NJdGVtPy4oZGF0YVN0b3JlKCkpLFxuICAgICAgICAgICAgICBhdmF0YXJDb25maWc6IHRoaXMuY29uZmlnVGVtcGxhdGVSYWRpbygpPy5nZXRBdmF0YXJDb25maWc/LihkYXRhU3RvcmUoKSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaXRlbUJ5S2V5U2VhcmNoLnB1c2goZGF0YVN0b3JlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4SXRlbVJlbW92ZSA9IHRoaXMuaXRlbXMoKS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0ga2V5KTtcblxuICAgICAgaWYgKGluZGV4SXRlbVJlbW92ZSA+IC0xKSB7XG4gICAgICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXhJdGVtUmVtb3ZlLCAxKTtcblxuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBjYWxsYmFja0NoZWNrU2Nyb2xsID0gKHByZVN0YXRlSGFzU2Nyb2xsOiBib29sZWFuLCBjdXJyZW50SGFzU2Nyb2xsOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnNjcm9sbFRvSXRlbVNlbGVjdGVkKCk7XG4gICAgICBpZiAodGhpcy5rZXlzSGlkZGVuSXRlbSgpPy5sZW5ndGggJiYgcHJlU3RhdGVIYXNTY3JvbGwgJiYgIWN1cnJlbnRIYXNTY3JvbGwgJiYgKHRoaXMuaXNTZWFyY2hPbmxpbmUoKSkpIHtcbiAgICAgICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIHRoaXMuaXRlbXMuc2V0KGl0ZW1CeUtleVNlYXJjaCk7XG4gICAgICB0aGlzLmNvbmZpZygpPy5zb3J0Py4odGhpcy5pdGVtcygpKTtcbiAgICAgIHRoaXMuZW1pdEtleVNlbGVjdGVkRGVmYXVsdElmRXhpc3RJdGVtKHRoaXMuaXRlbXMoKSk7XG4gICAgICB0aGlzLmF1dG9TZWxlY3RGaXJzdEl0ZW0odGhpcy5pdGVtcygpKTtcbiAgICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgICAgdGhpcy5vdXRMb2FkSXRlbXNDb21wbGV0ZS5lbWl0KHsgaXRlbXM6IHRoaXMuaXRlbXMoKSwgcGFnaW5nOiB0aGlzLnBhZ2luZ1N0b3JlKCkgfSk7XG4gICAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2FsbGJhY2tDaGVja1Njcm9sbCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIC4uLml0ZW1CeUtleVNlYXJjaF0pO1xuICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgdGhpcy5vdXRMb2FkSXRlbXNDb21wbGV0ZS5lbWl0KHsgaXRlbXM6IHRoaXMuaXRlbXMoKSwgcGFnaW5nOiB0aGlzLnBhZ2luZ1N0b3JlKCkgfSk7XG4gICAgdGhpcy5jaGVja1ZpZXdQb3J0U2Nyb2xsKGNhbGxiYWNrQ2hlY2tTY3JvbGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0l0ZW1TZWxlY3RlZCgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnVGVtcGxhdGVSYWRpbygpPy5hdXRvU2Nyb2xsVG9JdGVtU2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZUF1dG9TY3JvbGxJdGVtU2VsZWN0ZWQoKSk7XG4gICAgdGhpcy50aW1lQXV0b1Njcm9sbEl0ZW1TZWxlY3RlZC5zZXQoKHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmtleVNlbGVjdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcygpLmZpbmRJbmRleChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSB0aGlzLmtleVNlbGVjdGVkKCkpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldENvbnRhaW5lciA9ICh0aGlzLmVsZW1lbnRTY3JvbGwoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk/Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbE9mZnNldCA9ICgob2Zmc2V0Q29udGFpbmVyID8gb2Zmc2V0Q29udGFpbmVyIC0gdGhpcy5oZWlnaHRJdGVtKCkgOiAwKSAvIDIpICogLTE7XG5cbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsZXJDb21wb25lbnQoKT8uc2Nyb2xsVG9JbmRleChpbmRleCwgdHJ1ZSwgYWRkaXRpb25hbE9mZnNldCwgdGhpcy50aW1lQW5pbWF0aW9uU2Nyb2xsVG9JbmRleEl0ZW0oKSk7XG4gICAgICB9XG4gICAgfSkgYXMgdW5rbm93bikgYXMgbnVtYmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdXRvU2VsZWN0Rmlyc3RJdGVtKGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuYXV0b1NlbGVjdGVkRmlyc3RJdGVtQ2FsbE91dHNpZGVCZWZvcmUoKSB8fCB0aGlzLmtleVNlbGVjdGVkKCkgfHwgIXRoaXMuY29uZmlnKCk/LmF1dG9TZWxlY3RGaXJzdEl0ZW0gfHwgIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2hhbmdlKCdyYWRpbycsIGl0ZW1zWzBdLCB0cnVlLCBmYWxzZSk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBlbWl0S2V5U2VsZWN0ZWREZWZhdWx0SWZFeGlzdEl0ZW0oaXRlbXM6IEFycmF5PGFueT4pIHtcbiAgICBjb25zdCBpdGVtID0gaXRlbXMuZmluZChzdG9yZSA9PiBzdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IHRoaXMua2V5U2VsZWN0ZWQoKSk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgdGhpcy5oYW5kbGVyQ2hhbmdlKCdyYWRpbycsIGl0ZW0sIHRydWUsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGVuZ3RoSXRlbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLml0ZW1zKCkubGVuZ3RoO1xuICB9XG59IiwiQGlmIChjb25maWdUZW1wbGF0ZVJhZGlvKCk7IGFzIGNvbmZpZ1RlbXBsYXRlUmFkaW8pIHtcbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGgtZnVsbCB3LWZ1bGxcIj5cbiAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICA8ZGl2ICNlbGVtZW50U2Nyb2xsXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXG4gICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRWaWV3UG9ydCgpID8gaGVpZ2h0Vmlld1BvcnQoKSsncHgnOicxMDAlJ1wiXG4gICAgICAgIChvdXRTY3JvbGxCb3R0b20pPVwiaGFuZGxlclNjcm9sbEJvdHRvbSgpXCI+XG4gICAgICAgIDx2aXJ0dWFsLXNjcm9sbGVyICNzY3JvbGxcbiAgICAgICAgICBbcGFyZW50U2Nyb2xsXT1cImVsZW1lbnRTY3JvbGxcIlxuICAgICAgICAgIFtpdGVtc109XCJpdGVtcygpXCJcbiAgICAgICAgICBjbGFzcz1cImgtZnVsbFwiPlxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc2Nyb2xsLnZpZXdQb3J0SXRlbXM7IHRyYWNrIGl0ZW0oKVtmaWVsZEtleSgpXSkge1xuICAgICAgICAgICAgPGRpdiAjaXRlbVJlZlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktbGlzdC10ZW1wbGF0ZS1yYWRpby1pdGVtIGZsZXggJyArIChjb25maWdUZW1wbGF0ZVJhZGlvLmNsYXNzSXRlbUluY2x1ZGUgfHwgJycpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktYmctbGlzdC1ob3Zlcl09XCIhY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWhvdmVyLWFjdGl2ZV09XCIhY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgICAgICBbY2xhc3MuIXBsLVsxMnB4XV09XCJwYWRkaW5nTGVmdEl0ZW0oKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5iZy1bI2ZmZmZmZl1dPVwiY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgICAgICBbY2xhc3MuIXB5LVsycHhdXT1cImNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDaGFuZ2UoJGV2ZW50LGl0ZW0oKSlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtKCkuZmllbGRMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1yYWRpby1zaW5nbGUgW2xhYmVsXT1cIml0ZW0oKS5maWVsZExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F2YXRhckNvbmZpZ109XCJpdGVtKCkuYXZhdGFyQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJrZXlTZWxlY3RlZCgpID09PSBpdGVtKClbZmllbGRLZXkoKV1cIlxuICAgICAgICAgICAgICAgICAgICBba2V5XT1cIml0ZW0oKVtmaWVsZEtleSgpXVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbWdUeXBlSWNvbl09XCJjb25maWdUZW1wbGF0ZVJhZGlvLmhhc0F2YXRhckdyb3VwU29jaWFsXCJcbiAgICAgICAgICAgICAgICAgICAgW2xpbmtJbWFnZV09XCJjb25maWdUZW1wbGF0ZVJhZGlvLmdldEltYWdlID8gKCgnYXZhdGFyJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6KGl0ZW0oKS5zcGVjaWZpY19sb2FkSW1nRXJyb3IgJiYgY29uZmlnVGVtcGxhdGVSYWRpby5nZXRJbWFnZUVycm9yID8gY29uZmlnVGVtcGxhdGVSYWRpby5nZXRJbWFnZUVycm9yIDogY29uZmlnVGVtcGxhdGVSYWRpby5nZXRJbWFnZSk6aXRlbSgpKSB8IGFzeW5jKSA6IGl0ZW0oKVtjb25maWdUZW1wbGF0ZVJhZGlvLmZpZWxkR2V0SW1hZ2UgfHwgJyddXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzSW1hZ2VJbmNsdWRlXT1cImNvbmZpZ1RlbXBsYXRlUmFkaW8uY2xhc3NJbmNsdWRlSW1hZ2UgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBbYnVsbGV0XT1cIml0ZW0oKS5idWxsZXQ/LigpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTprZXlzRGlzYWJsZUl0ZW0oKTprZXlzRGlzYWJsZUl0ZW0oKT8ubGVuZ3RoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCJpdGVtKCkuY2xhc3NMYWJlbEluY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJ8TGlic1VpUGlwZXNDb252ZXJ0U2lnbmFsVG9PYmplY3RQaXBlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsaWNrRXhhY3RseV09XCJjbGlja0V4YWN0bHkoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlTGFiZWxdPVwiZGlzYWJsZUxhYmVsKClcIlxuICAgICAgICAgICAgICAgICAgICBbekluZGV4TGFiZWxdPVwiY29uZmlnVGVtcGxhdGVSYWRpby56SW5kZXhQb3BvdmVyID8/IDEyMDBcIlxuICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPSdoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpJ1xuICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2UoJ3JhZGlvJyxpdGVtKCkpXCJcbiAgICAgICAgICAgICAgICAgICAgKG91dENsaWNrTGFiZWwpPVwiaGFuZGxlckNoYW5nZSgncmFkaW8nLGl0ZW0oKSlcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlUmFkaW8/LnJvd3M/LigpKSB7XG4gICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX3Jvd3MgY2xhc3M9XCJ3LWZ1bGwge3sgY29uZmlnVGVtcGxhdGVSYWRpby5jbGFzc1Jvd3MgPz8gJycgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtKClcIlxuICAgICAgICAgICAgICAgICAgICBbZmllbGRLZXldPVwiZmllbGRLZXkoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtrZXlTZWxlY3RlZF09XCJrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ1RlbXBsYXRlXT1cImNvbmZpZ1RlbXBsYXRlUmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAob3V0RXZlbnQpPVwiaGFuZGxlckNoYW5nZSgncmFkaW8nLCRldmVudC5pdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC92aXJ0dWFsLXNjcm9sbGVyPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoIWl0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCInbGlicy11aS1mb250LWg0ciB0ZXh0LVsjYzFjMWMxXSAnKyAoY29uZmlnKCk/LnRleHROb0RhdGFDbGFzc0luY2x1ZGUgPz8gJ3B5LVs0cHhdIHB4LVsxMnB4XScpXCI+XG4gICAgICAgIEBpZiAoIWtleVNlYXJjaCgpICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICA8c3Bhbj57eyAoY29uZmlnKCk/LnRleHROb0RhdGEgPz8gJ2kxOG5faGF2ZV9ub19zZWxlY3Rpb24nKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgJiYga2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpIHx8IG51bGw7Y29udGV4dDp7a2V5U2VhcmNoOmtleVNlYXJjaCgpfVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghdGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEoKSAmJiBrZXlTZWFyY2goKSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgPHNwYW4+e3sgKGNvbmZpZygpPy50ZXh0U2VhcmNoTm9EYXRhID8/ICdpMThuX25vX3Jlc3VsdCcpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgICAgPHNwYW4+Jm5ic3A7PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zcGlubmVyIFtzaXplXT1cIidtZWRpdW0nXCIgLz5cbiAgICB9XG4gIDwvZGl2PlxufVxuIl19
|
|
@@ -21,6 +21,7 @@ import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
|
|
|
21
21
|
import { LibsUiComponentsBadgeComponent } from '@libs-ui/components-badge';
|
|
22
22
|
import { LibsUiHttpRequestService } from '@libs-ui/services-http-request';
|
|
23
23
|
import { takeUntil, skipWhile, take } from 'rxjs/operators';
|
|
24
|
+
import { LibsUiPipesConvertSignalToObjectPipe } from '@libs-ui/pipes-convert-signal-to-object';
|
|
24
25
|
import { LibsUiComponentsRadioSingleComponent } from '@libs-ui/components-radio-single';
|
|
25
26
|
import { LibsUiComponentsButtonsSortArrowComponent } from '@libs-ui/components-buttons-sort';
|
|
26
27
|
import { LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';
|
|
@@ -792,7 +793,7 @@ class LibsUiComponentsListCheckboxComponent extends LibsUiComponentsListTemplate
|
|
|
792
793
|
return this.items().length;
|
|
793
794
|
}
|
|
794
795
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListCheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
795
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListCheckboxComponent, isStandalone: true, selector: "libs_ui-components-list-templates_checkbox", viewQueries: [{ propertyName: "virtualScrollerComponent", first: true, predicate: VirtualScrollerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (configTemplateCheckbox(); as configTemplateCheckbox) {\n <div class=\"flex flex-col w-full h-full\">\n @if (items().length && configTemplateCheckbox.configButtonSelectAndUndSelectItem?.(); as configButtonSelectItem) {\n <div [class]=\"'flex items-center bg-[#ffffff] '+(configButtonSelectItem.classInclude ?? 'libs-ui-border-bottom-general')\">\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonCheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonCheckAll?.label ?? 'i18n_select_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonCheckAll?.classInclude || 'pr-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonCheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(true)\" />\n <div class=\"text-[#e6e7ea]\">|</div>\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonUncheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonUncheckAll?.label ?? 'i18n_unselect_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonUncheckAll?.classInclude || 'pl-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonUncheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(false)\" />\n </div>\n }\n @if (items().length && configTemplateCheckbox.configCheckboxCheckAll?.(); as configCheckBox) {\n <div [class]=\"'flex libs-ui-border-bottom-general bg-[#ffffff] pl-[12px] '+(configTemplateCheckbox.classIncludeHasConfigCheckBoxAll ?? 'py-[6px] libs-ui-border-bottom-general')\">\n <libs_ui-components-checkbox-single [label]=\"configCheckBox.label ?? 'i18n_all'\"\n [classLabelInclude]=\"configCheckBox.classLabelInclude || ''\"\n [checked]=\"(multiKeySelected()?.length && (multiKeySelected()?.length ||0) >= (store().length || -1)) || false\"\n [stillOtherOptions]=\"!!multiKeySelected()?.length && (multiKeySelected()?.length ||0) < (store().length || -1)\"\n [disable]=\"loading() || disable() || false\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerSelect($event.checked)\" />\n </div>\n }\n <div [class]=\"'relative h-full w-full ' +((!items() || !items().length) ? 'bg-[#ffffff]': configTemplateCheckbox.classListInclude || '')\">\n @if (items() && items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() && !config()?.ignoreShowDataWhenNotSearch ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]; let last = $last) {\n <div [class]=\"last ? (configTemplateCheckbox.classIncludeLastViewItem || '') : ''\">\n <div #itemRef\n LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [attr.clickExactly]=\"clickExactly\"\n [class]=\"'libs-ui-list-template-checkbox-item flex ' + (configTemplateCheckbox.classItemInclude || '')\"\n [class.w-full]=\"!configTemplateCheckbox.ignoreItemWidth100\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.!py-[6px]]=\"clickExactly()\"\n [class.!pr-[4px]]=\"hasScroll() && configTemplateCheckbox.rows\"\n [class.!pr-[12px]]=\"!hasScroll() && configTemplateCheckbox.rows\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-checkbox-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [linkImage]=\"configTemplateCheckbox.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImage:item()) | async) : item()[configTemplateCheckbox.fieldGetImage || '']\"\n [linkImageError]=\"configTemplateCheckbox.getImageError ? (('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImageError:item()) | async) : item()[configTemplateCheckbox.fieldGetLinkImageError || '']\"\n [classLabelInclude]=\"item().classLabelInclude || configTemplateCheckbox.classLabelInclude || 'libs-ui-font-h5r'\"\n [zIndexLabel]=\"configTemplateCheckbox.zIndexPopover ?? 1200\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateCheckbox.hasAvatarGroupSocial\"\n [classInclude]=\"configTemplateCheckbox.classInclude || ''\"\n [classImageInclude]=\"configTemplateCheckbox.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [popover]=\"item().dataPopover\"\n [clickExactly]=\"clickExactly()\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('checkbox',item())\" />\n }\n @if (configTemplateCheckbox?.rows) {\n <libs_ui-components-list-templates_rows class=\"{{ !configTemplateCheckbox.ignoreItemWidth100 ? 'w-full' : '' }} {{ configTemplateCheckbox.classRowsWrapper || configTemplateCheckbox.classRows ?? '' }}\"\n [item]=\"item()\"\n [zIndex]=\"zIndex()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) ? item()[fieldKey()] : undefined\"\n [configTemplate]=\"configTemplateCheckbox\"\n (outEvent)=\"handlerChange('checkbox',$event.item)\" />\n }\n </div>\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (config()?.hasIconNoData && !loading()) {\n <div class=\"mb-[16px]\">\n <div *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\">\n </div>\n </div>\n }\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span> </span>\n }\n\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n </div>\n}\n", styles: [".libs-ui-list-template-checkbox-item{padding:6px 0 6px 16px;margin-right:8px;font-size:12px;line-height:18px;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i1$1.VirtualScrollerComponent, selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "RTL", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }, { kind: "directive", type: LibsUiComponentsListHighlightKeySearchDirective, selector: "[LibsUiComponentsListHighlightKeySearchDirective]", inputs: ["isHighlight", "keySearch", "classHighlight"] }, { kind: "component", type: LibsUiComponentsListRowsComponent, selector: "libs_ui-components-list-templates_rows", inputs: ["configTemplate", "item", "keySelected", "fieldKey", "zIndex"], outputs: ["outChangStageFlagMousePopover", "outEvent"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
796
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListCheckboxComponent, isStandalone: true, selector: "libs_ui-components-list-templates_checkbox", viewQueries: [{ propertyName: "virtualScrollerComponent", first: true, predicate: VirtualScrollerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (configTemplateCheckbox(); as configTemplateCheckbox) {\n <div class=\"flex flex-col w-full h-full\">\n @if (items().length && configTemplateCheckbox.configButtonSelectAndUndSelectItem?.(); as configButtonSelectItem) {\n <div\n [class]=\"'flex items-center bg-[#ffffff] '+(configButtonSelectItem.classInclude ?? 'libs-ui-border-bottom-general')\">\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonCheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonCheckAll?.label ?? 'i18n_select_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonCheckAll?.classInclude || 'pr-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonCheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(true)\" />\n <div class=\"text-[#e6e7ea]\">|</div>\n <libs_ui-components-buttons-button\n [type]=\"configButtonSelectItem.buttonUncheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonUncheckAll?.label ?? 'i18n_unselect_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonUncheckAll?.classInclude || 'pl-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonUncheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(false)\" />\n </div>\n }\n @if (items().length && configTemplateCheckbox.configCheckboxCheckAll?.(); as configCheckBox) {\n <div\n [class]=\"'flex libs-ui-border-bottom-general bg-[#ffffff] pl-[12px] '+(configTemplateCheckbox.classIncludeHasConfigCheckBoxAll ?? 'py-[6px] libs-ui-border-bottom-general')\">\n <libs_ui-components-checkbox-single [label]=\"configCheckBox.label ?? 'i18n_all'\"\n [classLabelInclude]=\"configCheckBox.classLabelInclude || ''\"\n [checked]=\"(multiKeySelected()?.length && (multiKeySelected()?.length ||0) >= (store().length || -1)) || false\"\n [stillOtherOptions]=\"!!multiKeySelected()?.length && (multiKeySelected()?.length ||0) < (store().length || -1)\"\n [disable]=\"loading() || disable() || false\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerSelect($event.checked)\" />\n </div>\n }\n <div\n [class]=\"'relative h-full w-full ' +((!items() || !items().length) ? 'bg-[#ffffff]': configTemplateCheckbox.classListInclude || '')\">\n @if (items() && items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() && !config()?.ignoreShowDataWhenNotSearch ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]; let last = $last) {\n <div [class]=\"last ? (configTemplateCheckbox.classIncludeLastViewItem || '') : ''\">\n <div #itemRef\n LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [attr.clickExactly]=\"clickExactly\"\n [class]=\"'libs-ui-list-template-checkbox-item flex ' + (configTemplateCheckbox.classItemInclude || '')\"\n [class.w-full]=\"!configTemplateCheckbox.ignoreItemWidth100\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.!py-[6px]]=\"clickExactly()\"\n [class.!pr-[4px]]=\"hasScroll() && configTemplateCheckbox.rows\"\n [class.!pr-[12px]]=\"!hasScroll() && configTemplateCheckbox.rows\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-checkbox-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig|LibsUiPipesConvertSignalToObjectPipe\"\n [linkImage]=\"configTemplateCheckbox.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImage:item()) | async) : item()[configTemplateCheckbox.fieldGetImage || '']\"\n [linkImageError]=\"configTemplateCheckbox.getImageError ? (('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImageError:item()) | async) : item()[configTemplateCheckbox.fieldGetLinkImageError || '']\"\n [classLabelInclude]=\"item().classLabelInclude || configTemplateCheckbox.classLabelInclude || 'libs-ui-font-h5r'\"\n [zIndexLabel]=\"configTemplateCheckbox.zIndexPopover ?? 1200\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateCheckbox.hasAvatarGroupSocial\"\n [classInclude]=\"configTemplateCheckbox.classInclude || ''\"\n [classImageInclude]=\"configTemplateCheckbox.classIncludeImage || ''\"\n [bullet]=\"item().bullet|LibsUiPipesConvertSignalToObjectPipe\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [popover]=\"item().dataPopover|LibsUiPipesConvertSignalToObjectPipe\"\n [clickExactly]=\"clickExactly()\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('checkbox',item())\" />\n }\n @if (configTemplateCheckbox?.rows) {\n <libs_ui-components-list-templates_rows\n class=\"{{ !configTemplateCheckbox.ignoreItemWidth100 ? 'w-full' : '' }} {{ configTemplateCheckbox.classRowsWrapper || configTemplateCheckbox.classRows ?? '' }}\"\n [item]=\"item()\"\n [zIndex]=\"zIndex()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) ? item()[fieldKey()] : undefined\"\n [configTemplate]=\"configTemplateCheckbox\"\n (outEvent)=\"handlerChange('checkbox',$event.item)\" />\n }\n </div>\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (config()?.hasIconNoData && !loading()) {\n <div class=\"mb-[16px]\">\n <div\n *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\">\n </div>\n </div>\n }\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span> </span>\n }\n\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n </div>\n}\n", styles: [".libs-ui-list-template-checkbox-item{padding:6px 0 6px 16px;margin-right:8px;font-size:12px;line-height:18px;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i1$1.VirtualScrollerComponent, selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "RTL", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }, { kind: "directive", type: LibsUiComponentsListHighlightKeySearchDirective, selector: "[LibsUiComponentsListHighlightKeySearchDirective]", inputs: ["isHighlight", "keySearch", "classHighlight"] }, { kind: "component", type: LibsUiComponentsListRowsComponent, selector: "libs_ui-components-list-templates_rows", inputs: ["configTemplate", "item", "keySelected", "fieldKey", "zIndex"], outputs: ["outChangStageFlagMousePopover", "outEvent"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiPipesConvertSignalToObjectPipe, name: "LibsUiPipesConvertSignalToObjectPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
796
797
|
}
|
|
797
798
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListCheckboxComponent, decorators: [{
|
|
798
799
|
type: Component,
|
|
@@ -806,8 +807,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
806
807
|
LibsUiIconsGetIconComponentPipe,
|
|
807
808
|
LibsUiComponentsListHighlightKeySearchDirective,
|
|
808
809
|
LibsUiComponentsListRowsComponent,
|
|
809
|
-
LibsUiPipesCallFunctionInTemplatePipe
|
|
810
|
-
|
|
810
|
+
LibsUiPipesCallFunctionInTemplatePipe,
|
|
811
|
+
LibsUiPipesConvertSignalToObjectPipe
|
|
812
|
+
], template: "@if (configTemplateCheckbox(); as configTemplateCheckbox) {\n <div class=\"flex flex-col w-full h-full\">\n @if (items().length && configTemplateCheckbox.configButtonSelectAndUndSelectItem?.(); as configButtonSelectItem) {\n <div\n [class]=\"'flex items-center bg-[#ffffff] '+(configButtonSelectItem.classInclude ?? 'libs-ui-border-bottom-general')\">\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonCheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonCheckAll?.label ?? 'i18n_select_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonCheckAll?.classInclude || 'pr-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonCheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(true)\" />\n <div class=\"text-[#e6e7ea]\">|</div>\n <libs_ui-components-buttons-button\n [type]=\"configButtonSelectItem.buttonUncheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonUncheckAll?.label ?? 'i18n_unselect_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonUncheckAll?.classInclude || 'pl-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonUncheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(false)\" />\n </div>\n }\n @if (items().length && configTemplateCheckbox.configCheckboxCheckAll?.(); as configCheckBox) {\n <div\n [class]=\"'flex libs-ui-border-bottom-general bg-[#ffffff] pl-[12px] '+(configTemplateCheckbox.classIncludeHasConfigCheckBoxAll ?? 'py-[6px] libs-ui-border-bottom-general')\">\n <libs_ui-components-checkbox-single [label]=\"configCheckBox.label ?? 'i18n_all'\"\n [classLabelInclude]=\"configCheckBox.classLabelInclude || ''\"\n [checked]=\"(multiKeySelected()?.length && (multiKeySelected()?.length ||0) >= (store().length || -1)) || false\"\n [stillOtherOptions]=\"!!multiKeySelected()?.length && (multiKeySelected()?.length ||0) < (store().length || -1)\"\n [disable]=\"loading() || disable() || false\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerSelect($event.checked)\" />\n </div>\n }\n <div\n [class]=\"'relative h-full w-full ' +((!items() || !items().length) ? 'bg-[#ffffff]': configTemplateCheckbox.classListInclude || '')\">\n @if (items() && items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() && !config()?.ignoreShowDataWhenNotSearch ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]; let last = $last) {\n <div [class]=\"last ? (configTemplateCheckbox.classIncludeLastViewItem || '') : ''\">\n <div #itemRef\n LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [attr.clickExactly]=\"clickExactly\"\n [class]=\"'libs-ui-list-template-checkbox-item flex ' + (configTemplateCheckbox.classItemInclude || '')\"\n [class.w-full]=\"!configTemplateCheckbox.ignoreItemWidth100\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.!py-[6px]]=\"clickExactly()\"\n [class.!pr-[4px]]=\"hasScroll() && configTemplateCheckbox.rows\"\n [class.!pr-[12px]]=\"!hasScroll() && configTemplateCheckbox.rows\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-checkbox-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig|LibsUiPipesConvertSignalToObjectPipe\"\n [linkImage]=\"configTemplateCheckbox.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImage:item()) | async) : item()[configTemplateCheckbox.fieldGetImage || '']\"\n [linkImageError]=\"configTemplateCheckbox.getImageError ? (('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImageError:item()) | async) : item()[configTemplateCheckbox.fieldGetLinkImageError || '']\"\n [classLabelInclude]=\"item().classLabelInclude || configTemplateCheckbox.classLabelInclude || 'libs-ui-font-h5r'\"\n [zIndexLabel]=\"configTemplateCheckbox.zIndexPopover ?? 1200\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateCheckbox.hasAvatarGroupSocial\"\n [classInclude]=\"configTemplateCheckbox.classInclude || ''\"\n [classImageInclude]=\"configTemplateCheckbox.classIncludeImage || ''\"\n [bullet]=\"item().bullet|LibsUiPipesConvertSignalToObjectPipe\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [popover]=\"item().dataPopover|LibsUiPipesConvertSignalToObjectPipe\"\n [clickExactly]=\"clickExactly()\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('checkbox',item())\" />\n }\n @if (configTemplateCheckbox?.rows) {\n <libs_ui-components-list-templates_rows\n class=\"{{ !configTemplateCheckbox.ignoreItemWidth100 ? 'w-full' : '' }} {{ configTemplateCheckbox.classRowsWrapper || configTemplateCheckbox.classRows ?? '' }}\"\n [item]=\"item()\"\n [zIndex]=\"zIndex()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) ? item()[fieldKey()] : undefined\"\n [configTemplate]=\"configTemplateCheckbox\"\n (outEvent)=\"handlerChange('checkbox',$event.item)\" />\n }\n </div>\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (config()?.hasIconNoData && !loading()) {\n <div class=\"mb-[16px]\">\n <div\n *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\">\n </div>\n </div>\n }\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span> </span>\n }\n\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n </div>\n}\n", styles: [".libs-ui-list-template-checkbox-item{padding:6px 0 6px 16px;margin-right:8px;font-size:12px;line-height:18px;position:relative}\n"] }]
|
|
811
813
|
}] });
|
|
812
814
|
|
|
813
815
|
class LibsUiComponentsListGroupCalculatorLeftLineVerticalItemPipe {
|
|
@@ -1902,7 +1904,7 @@ class LibsUiComponentsListRadioComponent extends LibsUiComponentsListTemplatesCo
|
|
|
1902
1904
|
return this.items().length;
|
|
1903
1905
|
}
|
|
1904
1906
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListRadioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1905
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListRadioComponent, isStandalone: true, selector: "libs_ui-components-list-templates_radio", viewQueries: [{ propertyName: "virtualScrollerComponent", first: true, predicate: VirtualScrollerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (configTemplateRadio(); as configTemplateRadio) {\n <div class=\"relative h-full w-full\">\n @if (items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]) {\n <div #itemRef\n [class]=\"'libs-ui-list-template-radio-item flex ' + (configTemplateRadio.classItemInclude || '')\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.bg-[#ffffff]]=\"clickExactly()\"\n [class.!py-[2px]]=\"clickExactly()\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-radio-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [active]=\"keySelected() === item()[fieldKey()]\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateRadio.hasAvatarGroupSocial\"\n [linkImage]=\"configTemplateRadio.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateRadio.getImageError ? configTemplateRadio.getImageError : configTemplateRadio.getImage):item()) | async) : item()[configTemplateRadio.fieldGetImage || '']\"\n [classImageInclude]=\"configTemplateRadio.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [classLabelInclude]=\"item().classLabelInclude || ''\"\n [popover]=\"item().dataPopover\"\n [clickExactly]=\"clickExactly()\"\n [disableLabel]=\"disableLabel()\"\n [zIndexLabel]=\"configTemplateRadio.zIndexPopover ?? 1200\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('radio',item())\"\n (outClickLabel)=\"handlerChange('radio',item())\" />\n }\n @if (configTemplateRadio?.rows?.()) {\n <libs_ui-components-list-templates_rows class=\"w-full {{ configTemplateRadio.classRows ?? '' }}\"\n [item]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"keySelected()\"\n [configTemplate]=\"configTemplateRadio\"\n (outEvent)=\"handlerChange('radio',$event.item)\" />\n }\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if (!items().length) {\n <div [class]=\"'libs-ui-font-h4r text-[#c1c1c1] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span> </span>\n }\n </div>\n }\n\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n}\n", styles: [".libs-ui-list-template-radio-item{padding:4px 22px 4px 1px;font-size:12px;line-height:18px;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i1$1.VirtualScrollerComponent, selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "RTL", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "component", type: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabel", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "component", type: LibsUiComponentsListRowsComponent, selector: "libs_ui-components-list-templates_rows", inputs: ["configTemplate", "item", "keySelected", "fieldKey", "zIndex"], outputs: ["outChangStageFlagMousePopover", "outEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1907
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListRadioComponent, isStandalone: true, selector: "libs_ui-components-list-templates_radio", viewQueries: [{ propertyName: "virtualScrollerComponent", first: true, predicate: VirtualScrollerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (configTemplateRadio(); as configTemplateRadio) {\n <div class=\"relative h-full w-full\">\n @if (items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]) {\n <div #itemRef\n [class]=\"'libs-ui-list-template-radio-item flex ' + (configTemplateRadio.classItemInclude || '')\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.bg-[#ffffff]]=\"clickExactly()\"\n [class.!py-[2px]]=\"clickExactly()\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-radio-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [active]=\"keySelected() === item()[fieldKey()]\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateRadio.hasAvatarGroupSocial\"\n [linkImage]=\"configTemplateRadio.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateRadio.getImageError ? configTemplateRadio.getImageError : configTemplateRadio.getImage):item()) | async) : item()[configTemplateRadio.fieldGetImage || '']\"\n [classImageInclude]=\"configTemplateRadio.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [classLabelInclude]=\"item().classLabelInclude || ''\"\n [popover]=\"item().dataPopover|LibsUiPipesConvertSignalToObjectPipe\"\n [clickExactly]=\"clickExactly()\"\n [disableLabel]=\"disableLabel()\"\n [zIndexLabel]=\"configTemplateRadio.zIndexPopover ?? 1200\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('radio',item())\"\n (outClickLabel)=\"handlerChange('radio',item())\" />\n }\n @if (configTemplateRadio?.rows?.()) {\n <libs_ui-components-list-templates_rows class=\"w-full {{ configTemplateRadio.classRows ?? '' }}\"\n [item]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"keySelected()\"\n [configTemplate]=\"configTemplateRadio\"\n (outEvent)=\"handlerChange('radio',$event.item)\" />\n }\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if (!items().length) {\n <div [class]=\"'libs-ui-font-h4r text-[#c1c1c1] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span> </span>\n }\n </div>\n }\n\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n}\n", styles: [".libs-ui-list-template-radio-item{padding:4px 22px 4px 1px;font-size:12px;line-height:18px;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i1$1.VirtualScrollerComponent, selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "RTL", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "component", type: LibsUiComponentsRadioSingleComponent, selector: "libs_ui-components-radio-single", inputs: ["key", "active", "classInclude", "label", "labelInterpolateParams", "ignorePopoverLabel", "classLabelInclude", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "popover", "disable", "disableLabel", "clickExactly", "typeRadio", "ignoreRadio", "zIndexLabel", "classIncludeIcon"], outputs: ["activeChange", "outClickLabel", "outChange", "outChangStageFlagMousePopover"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "component", type: LibsUiComponentsListRowsComponent, selector: "libs_ui-components-list-templates_rows", inputs: ["configTemplate", "item", "keySelected", "fieldKey", "zIndex"], outputs: ["outChangStageFlagMousePopover", "outEvent"] }, { kind: "pipe", type: LibsUiPipesConvertSignalToObjectPipe, name: "LibsUiPipesConvertSignalToObjectPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1906
1908
|
}
|
|
1907
1909
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListRadioComponent, decorators: [{
|
|
1908
1910
|
type: Component,
|
|
@@ -1913,8 +1915,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1913
1915
|
LibsUiComponentsRadioSingleComponent,
|
|
1914
1916
|
LibsUiPipesCallFunctionInTemplatePipe,
|
|
1915
1917
|
LibsUiCheckSelectedByKeyPipe,
|
|
1916
|
-
LibsUiComponentsListRowsComponent
|
|
1917
|
-
|
|
1918
|
+
LibsUiComponentsListRowsComponent,
|
|
1919
|
+
LibsUiPipesConvertSignalToObjectPipe
|
|
1920
|
+
], template: "@if (configTemplateRadio(); as configTemplateRadio) {\n <div class=\"relative h-full w-full\">\n @if (items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]) {\n <div #itemRef\n [class]=\"'libs-ui-list-template-radio-item flex ' + (configTemplateRadio.classItemInclude || '')\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.bg-[#ffffff]]=\"clickExactly()\"\n [class.!py-[2px]]=\"clickExactly()\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-radio-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [active]=\"keySelected() === item()[fieldKey()]\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateRadio.hasAvatarGroupSocial\"\n [linkImage]=\"configTemplateRadio.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateRadio.getImageError ? configTemplateRadio.getImageError : configTemplateRadio.getImage):item()) | async) : item()[configTemplateRadio.fieldGetImage || '']\"\n [classImageInclude]=\"configTemplateRadio.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [classLabelInclude]=\"item().classLabelInclude || ''\"\n [popover]=\"item().dataPopover|LibsUiPipesConvertSignalToObjectPipe\"\n [clickExactly]=\"clickExactly()\"\n [disableLabel]=\"disableLabel()\"\n [zIndexLabel]=\"configTemplateRadio.zIndexPopover ?? 1200\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('radio',item())\"\n (outClickLabel)=\"handlerChange('radio',item())\" />\n }\n @if (configTemplateRadio?.rows?.()) {\n <libs_ui-components-list-templates_rows class=\"w-full {{ configTemplateRadio.classRows ?? '' }}\"\n [item]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"keySelected()\"\n [configTemplate]=\"configTemplateRadio\"\n (outEvent)=\"handlerChange('radio',$event.item)\" />\n }\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if (!items().length) {\n <div [class]=\"'libs-ui-font-h4r text-[#c1c1c1] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span> </span>\n }\n </div>\n }\n\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n}\n", styles: [".libs-ui-list-template-radio-item{padding:4px 22px 4px 1px;font-size:12px;line-height:18px;position:relative}\n"] }]
|
|
1918
1921
|
}] });
|
|
1919
1922
|
|
|
1920
1923
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|