@libs-ui/components-pages-template-detail 0.2.30-6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # pages-template-detail
2
+
3
+ This library was generated with [Nx](https://nx.dev).
@@ -0,0 +1,43 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { IButton } from '@libs-ui/components-buttons-button';
3
+ import { IDropdownFunctionControlEvent, IEmitSelectKey } from '@libs-ui/components-dropdown';
4
+ import { IPopoverFunctionControlEvent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';
5
+ import { IRadioEvent } from '@libs-ui/components-radio-single';
6
+ import { ISwitch, ISwitchEvent } from '@libs-ui/components-switch';
7
+ import { IPagesTemplateDetailConfigCenter, IPagesTemplateDetailConfigRight, IPagesTemplateDetailConfigTitle } from './interfaces/config.interface';
8
+ import { IPageDetailFunctionControl } from './interfaces/function-control.interface';
9
+ import * as i0 from "@angular/core";
10
+ export declare class LibsUiComponentsPagesTemplateDetailComponent implements OnInit {
11
+ private dropdownFunctionControl;
12
+ protected configTitleComputed: import("@angular/core").Signal<import("@libs-ui/components-popover").IPopoverOverlay>;
13
+ readonly zIndex: import("@angular/core").InputSignalWithTransform<number, number | undefined>;
14
+ readonly configRight: import("@angular/core").InputSignal<IPagesTemplateDetailConfigRight[] | undefined>;
15
+ readonly configTitle: import("@angular/core").InputSignal<IPagesTemplateDetailConfigTitle | undefined>;
16
+ readonly configCenter: import("@angular/core").InputSignal<IPagesTemplateDetailConfigCenter | undefined>;
17
+ readonly classIncludeHeader: import("@angular/core").InputSignal<string | undefined>;
18
+ readonly classIncludeBody: import("@angular/core").InputSignal<string | undefined>;
19
+ readonly disable: import("@angular/core").ModelSignal<boolean>;
20
+ readonly isSplitHeaderRatio: import("@angular/core").InputSignal<boolean | undefined>;
21
+ readonly outScroll: import("@angular/core").OutputEmitterRef<Event>;
22
+ readonly outClose: import("@angular/core").OutputEmitterRef<boolean>;
23
+ readonly outSelectedMenuDropdown: import("@angular/core").OutputEmitterRef<IEmitSelectKey | undefined>;
24
+ readonly outSelectedButtonDropdown: import("@angular/core").OutputEmitterRef<IEmitSelectKey>;
25
+ readonly outFunctionControl: import("@angular/core").OutputEmitterRef<IPageDetailFunctionControl>;
26
+ readonly outSelectedRadio: import("@angular/core").OutputEmitterRef<IRadioEvent>;
27
+ readonly outStateDisable: import("@angular/core").OutputEmitterRef<boolean>;
28
+ readonly outTooltipButtonFunctionControl: import("@angular/core").OutputEmitterRef<IPopoverFunctionControlEvent>;
29
+ ngOnInit(): void;
30
+ protected handlerClickAction(event: IButton): void;
31
+ protected handlerSwitch(event: ISwitch, swicthEvent: ISwitchEvent): Promise<void>;
32
+ protected handlerClose(e: Event): void;
33
+ protected handlerPopoverEvent(event: TYPE_POPOVER_EVENT): void;
34
+ protected handlerSelectedKey(event?: IEmitSelectKey): void;
35
+ protected handlerSelectedButtonDropdownItem(event: any): void;
36
+ protected handlerDropdownFunctionControl(event: IDropdownFunctionControlEvent): void;
37
+ private setStateDisable;
38
+ protected handlerChangeRadio(event: IRadioEvent): void;
39
+ protected handlerFunctionControlTooltipButton(event: IPopoverFunctionControlEvent): void;
40
+ protected handlerScroll(event: Event): void;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsPagesTemplateDetailComponent, never>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsPagesTemplateDetailComponent, "libs_ui-components-pages_template-detail", never, { "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "configRight": { "alias": "configRight"; "required": false; "isSignal": true; }; "configTitle": { "alias": "configTitle"; "required": false; "isSignal": true; }; "configCenter": { "alias": "configCenter"; "required": false; "isSignal": true; }; "classIncludeHeader": { "alias": "classIncludeHeader"; "required": false; "isSignal": true; }; "classIncludeBody": { "alias": "classIncludeBody"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "isSplitHeaderRatio": { "alias": "isSplitHeaderRatio"; "required": false; "isSignal": true; }; }, { "disable": "disableChange"; "outScroll": "outScroll"; "outClose": "outClose"; "outSelectedMenuDropdown": "outSelectedMenuDropdown"; "outSelectedButtonDropdown": "outSelectedButtonDropdown"; "outFunctionControl": "outFunctionControl"; "outSelectedRadio": "outSelectedRadio"; "outStateDisable": "outStateDisable"; "outTooltipButtonFunctionControl": "outTooltipButtonFunctionControl"; }, never, ["*"], true, never>;
43
+ }
@@ -0,0 +1,111 @@
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import { Component, computed, input, model, output } from '@angular/core';
3
+ import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
4
+ import { LibsUiComponentsButtonsDropdownComponent } from '@libs-ui/components-buttons-dropdown';
5
+ import { LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';
6
+ import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
7
+ import { LibsUiComponentsRadioGroupComponent } from '@libs-ui/components-radio-group';
8
+ import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
9
+ import { LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';
10
+ import { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';
11
+ import { escapeHtml } from '@libs-ui/utils';
12
+ import { TranslateModule } from '@ngx-translate/core';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@ngx-translate/core";
15
+ export class LibsUiComponentsPagesTemplateDetailComponent {
16
+ dropdownFunctionControl;
17
+ configTitleComputed = computed(() => {
18
+ const config = this.configTitle()?.config;
19
+ if (!config) {
20
+ return { content: 'i18n_back_to_list' };
21
+ }
22
+ if (!config.content) {
23
+ config.content = 'i18n_back_to_list';
24
+ return config;
25
+ }
26
+ return { ...config, content: escapeHtml(config.content) };
27
+ });
28
+ zIndex = input(1000, { transform: val => val ?? 1000 });
29
+ configRight = input();
30
+ configTitle = input();
31
+ configCenter = input();
32
+ classIncludeHeader = input();
33
+ classIncludeBody = input();
34
+ disable = model(false);
35
+ isSplitHeaderRatio = input(); // dùng khi muốn chia header làm 3 phần theo tỉ lệ 24 52 24
36
+ outScroll = output();
37
+ outClose = output();
38
+ outSelectedMenuDropdown = output();
39
+ outSelectedButtonDropdown = output();
40
+ outFunctionControl = output();
41
+ outSelectedRadio = output();
42
+ outStateDisable = output();
43
+ outTooltipButtonFunctionControl = output();
44
+ ngOnInit() {
45
+ this.outFunctionControl.emit({
46
+ setStateDisable: this.setStateDisable.bind(this)
47
+ });
48
+ }
49
+ handlerClickAction(event) {
50
+ if (event && event.action) {
51
+ event.action();
52
+ }
53
+ }
54
+ async handlerSwitch(event, swicthEvent) {
55
+ if (event && event.action) {
56
+ await event.action(swicthEvent);
57
+ }
58
+ }
59
+ handlerClose(e) {
60
+ e.stopPropagation();
61
+ this.outClose.emit(true);
62
+ }
63
+ handlerPopoverEvent(event) {
64
+ if (event !== 'click') {
65
+ return;
66
+ }
67
+ this.outClose.emit(true);
68
+ }
69
+ handlerSelectedKey(event) {
70
+ this.outSelectedMenuDropdown.emit(event);
71
+ this.dropdownFunctionControl?.reset(); //lỗi chọn lần 2 (chưa reset thì keySelected chưa reset nên không chọn tiếp vào lựa chọn cũ)
72
+ this.dropdownFunctionControl?.removeList();
73
+ }
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
+ handlerSelectedButtonDropdownItem(event) {
76
+ this.outSelectedButtonDropdown.emit(event);
77
+ }
78
+ handlerDropdownFunctionControl(event) {
79
+ this.dropdownFunctionControl = event;
80
+ }
81
+ async setStateDisable(stateDisable) {
82
+ this.disable.set(stateDisable);
83
+ this.outStateDisable.emit(this.disable());
84
+ }
85
+ handlerChangeRadio(event) {
86
+ this.outSelectedRadio.emit(event);
87
+ }
88
+ handlerFunctionControlTooltipButton(event) {
89
+ this.outTooltipButtonFunctionControl.emit(event);
90
+ }
91
+ handlerScroll(event) {
92
+ this.outScroll.emit(event);
93
+ }
94
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsPagesTemplateDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
95
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsPagesTemplateDetailComponent, isStandalone: true, selector: "libs_ui-components-pages_template-detail", inputs: { zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, configRight: { classPropertyName: "configRight", publicName: "configRight", isSignal: true, isRequired: false, transformFunction: null }, configTitle: { classPropertyName: "configTitle", publicName: "configTitle", isSignal: true, isRequired: false, transformFunction: null }, configCenter: { classPropertyName: "configCenter", publicName: "configCenter", isSignal: true, isRequired: false, transformFunction: null }, classIncludeHeader: { classPropertyName: "classIncludeHeader", publicName: "classIncludeHeader", isSignal: true, isRequired: false, transformFunction: null }, classIncludeBody: { classPropertyName: "classIncludeBody", publicName: "classIncludeBody", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, isSplitHeaderRatio: { classPropertyName: "isSplitHeaderRatio", publicName: "isSplitHeaderRatio", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disable: "disableChange", outScroll: "outScroll", outClose: "outClose", outSelectedMenuDropdown: "outSelectedMenuDropdown", outSelectedButtonDropdown: "outSelectedButtonDropdown", outFunctionControl: "outFunctionControl", outSelectedRadio: "outSelectedRadio", outStateDisable: "outStateDisable", outTooltipButtonFunctionControl: "outTooltipButtonFunctionControl" }, ngImport: i0, template: "<div class=\"libs-ui-components-page_detail\"\n [style.zIndex]=\"zIndex()\">\n <div [class.row]=\"!isSplitHeaderRatio()\"\n class=\"flex items-center px-[16px] py-[8px] justify-between bg-white libs-ui-border-top-general {{ classIncludeHeader() || '' }}\">\n <div [class.columns-8]=\"!isSplitHeaderRatio()\"\n [class.w-[24%]]=\"isSplitHeaderRatio()\">\n <div class=\"flex items-center\">\n @if (!configTitle()?.ignoreButtonBack) {\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px] mr-[8px] cursor-pointer text-[var(--libs-ui-color-default)]\"\n (click)=\"handlerClose($event)\"></i>\n }\n <div class=\"flex w-full items-center\">\n @if (configTitle()?.isShowBackToListLabel) {\n <libs_ui-components-buttons-button [label]=\"'i18n_back_to_list'\"\n [classLabel]=\"'lib-ui-font-h6m'\"\n [type]=\"'button-link-primary'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerClose($event)\" />\n }\n @if (configTitle()?.config; as config) {\n <libs_ui-components-popover [config]=\"configTitleComputed()\"\n [type]=\"'text'\"\n [mode]=\"'hover'\"\n [classInclude]=\"'cursor-pointer ' + (config.classInclude || 'text-[var(--libs-ui-color-default)] libs-ui-font-h6m')\"\n [innerHtml]=\"config.content ? (!configTitle()?.ignoreEscapeHtml ? (config.content | LibsUiPipesEscapeHtmlPipe | translate) : (config.content | translate)) : '&mdash;'\"\n (outEvent)=\"handlerPopoverEvent($event)\" />\n }\n @if (configTitle()?.configDescription; as configDescription) {\n <libs_ui-components-popover [config]=\"configDescription.config\"\n [type]=\"'text'\"\n [mode]=\"'hover'\"\n [classInclude]=\"(configDescription.config.classInclude || 'libs-ui-font-h6r text-[#6a7383]')\"\n [innerHtml]=\"configDescription.innerView | LibsUiPipesEscapeHtmlPipe | translate\" />\n }\n </div>\n </div>\n </div>\n @if (isSplitHeaderRatio() && configCenter(); as configCenter) {\n <div class=\"w-[52%] flex items-center justify-center px-[48px]\">\n @if (!configCenter.template) {\n <libs_ui-components-popover type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1\n }\"\n [classInclude]=\"configCenter.classIncludeTitle ?? 'uppercase libs-ui-font-h4s'\"\n [innerHtml]=\"configCenter.title ? (configCenter.title | translate | LibsUiPipesEscapeHtmlPipe) : '&mdash'\" />\n }\n @else {\n <ng-container *ngTemplateOutlet=\"configCenter.template\" />\n }\n </div>\n }\n <div class=\"flex justify-end items-center\"\n [class.columns-4]=\"!isSplitHeaderRatio()\"\n [class.w-[24%]]=\"isSplitHeaderRatio()\">\n @for (item of configRight(); track $index; let last = $last) {\n <div [class.mr-[12px]]=\"!last\">\n @if (item.key === 'button' && item.configButton; as configButton) {\n <libs_ui-components-buttons-button [label]=\"configButton.label || ''\"\n [classLabel]=\"configButton.classLabel || ''\"\n [type]=\"configButton.type || 'button-primary'\"\n [classInclude]=\"configButton.classInclude || ''\"\n [classIconLeft]=\"configButton.classIconLeft || ''\"\n [iconOnlyType]=\"configButton.iconOnlyType || false\"\n [classIconRight]=\"configButton.classIconRight || ''\"\n [popover]=\"configButton.popover || {}\"\n [disable]=\"configButton.disable || disable()\"\n [isPending]=\"configButton.isPending || false\"\n (outClick)=\"handlerClickAction(configButton)\" />\n }\n @if (item.key === 'swicth' && !item.ignoreShowButton && item.configSwicth; as configSwicth) {\n <libs_ui-components-switch [active]=\"configSwicth.active || false\"\n [disable]=\"configSwicth.disable || disable()\"\n (outSwitch)=\"handlerSwitch(configSwicth, $event)\" />\n }\n @if (item.key === 'menu-dropdown' && item.configDropdown; as configDropdown) {\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"2004\"\n [listConfig]=\"configDropdown.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"configDropdown.popoverCustomConfig\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outFunctionsControl)=\"handlerDropdownFunctionControl($event)\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px] {{ configDropdown.classInclude }}'\"\n [classInclude]=\"'p-[7px] libs-ui-border-general'\"\n [type]=\"'button-third'\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n }\n @if (item.key === 'button-dropdown' && item.configButtonDropdown; as configDropdown) {\n <libs_ui-components-buttons-dropdown [applyNow]=\"true\"\n [label]=\"item.configButtonDropdown.label || ' '\"\n [classIconRight]=\"item.configButtonDropdown.classIconRight || ' ' \"\n [classIconLeft]=\"item.configButtonDropdown.classIconLeft || ' '\"\n [typeButton]=\"item.configButtonDropdown.type || 'button-secondary'\"\n [items]=\"item.configButtonDropdown.items || []\"\n [fieldDisplay]=\"item.configButtonDropdown.fieldDisplay\"\n [popupConfig]=\"item.configButtonDropdown.popupConfig || {width:205,maxWidth:408,maxHeight:48,zIndex:100,direction:'bottom'}\"\n (outSelectItem)=\"handlerSelectedButtonDropdownItem($event)\" />\n }\n\n @if (item.key === 'radio-group' && item.configRadioGroup; as configRadioGroup) {\n <libs_ui-components-radio-group [groups]=\"configRadioGroup\"\n [horizontal]=\"true\"\n [typeRadio]=\"'medium'\"\n [ignoreClassMarginLastItem]=\"true\"\n (outChange)=\"handlerChangeRadio($event)\" />\n }\n\n @if (item.key === 'tooltip-button' && item.configTooltipButton; as configTooltipButton) {\n <libs_ui-components-popover [type]=\"configTooltipButton.configTooltip?.type || 'other'\"\n [config]=\"configTooltipButton.configTooltip?.config\">\n <libs_ui-components-buttons-button [type]=\"configTooltipButton.configButton?.type || 'button-third'\"\n [classIconLeft]=\"configTooltipButton.configButton?.classIconLeft || 'libs-ui-icon-more-vertical rotate-[90deg] mr-0'\"\n [label]=\"configTooltipButton.configButton?.label || ''\"\n [iconOnlyType]=\"configTooltipButton.configButton?.iconOnlyType ?? false\"\n [popover]=\"configTooltipButton.configButton?.popover || {}\"\n (outFunctionsControl)=\"handlerFunctionControlTooltipButton($event)\"\n [ignoreStopPropagationEvent]=\"true\"\n [disable]=\"configTooltipButton.configButton?.disable ?? false\" />\n </libs_ui-components-popover>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"libs-ui-components-page_detail-body {{ classIncludeBody() }}\"\n LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"handlerScroll($event)\">\n <ng-content>\n </ng-content>\n </div>\n\n</div>\n", styles: [".libs-ui-components-page_detail{position:absolute;width:100%;height:100vh;left:0;top:0;background-color:#f4f5f7;margin-top:40px}.libs-ui-components-page_detail .libs-ui-components-page_detail-body{padding:0 16px;width:100%;height:100%;overflow-y:auto}\n"], dependencies: [{ 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", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsRadioGroupComponent, selector: "libs_ui-components-radio-group", inputs: ["fieldKey", "keyActive", "keysDisable", "groups", "disable", "clickExactly", "horizontal", "labelConfig", "validRequired", "ignoreClassMarginLastItem", "typeRadio", "classInclude", "classLabelInclude", "classItemInclude", "alwaysShowSubText", "horizontalClassInclude"], outputs: ["groupsChange", "outClickButton", "outChange", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "component", type: LibsUiComponentsButtonsDropdownComponent, selector: "libs_ui-components-buttons-dropdown", inputs: ["label", "fieldClass", "fieldClassIconLeft", "items", "fieldDisplay", "keyField", "keySelected", "applyNow", "showBorderBottom", "disable", "sizeButton", "classLabel", "iconOnlyType", "classIconRight", "classIconLeft", "typeButton", "popupConfig", "ignoreHiddenPopoverContentWhenMouseLeave", "classInclude", "modePopover", "classIncludeContainer"], outputs: ["keySelectedChange", "outSelectItem", "outHover", "outApply", "outPopoverEvent", "outFunctionsControl", "outIconEvent"] }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }] });
96
+ }
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsPagesTemplateDetailComponent, decorators: [{
98
+ type: Component,
99
+ args: [{ selector: 'libs_ui-components-pages_template-detail', standalone: true, imports: [
100
+ TranslateModule, NgTemplateOutlet,
101
+ LibsUiComponentsButtonsButtonComponent,
102
+ LibsUiComponentsPopoverComponent,
103
+ LibsUiComponentsRadioGroupComponent,
104
+ LibsUiComponentsSwitchComponent,
105
+ LibsUiComponentsDropdownComponent,
106
+ LibsUiComponentsScrollOverlayDirective,
107
+ LibsUiComponentsButtonsDropdownComponent,
108
+ LibsUiPipesEscapeHtmlPipe
109
+ ], template: "<div class=\"libs-ui-components-page_detail\"\n [style.zIndex]=\"zIndex()\">\n <div [class.row]=\"!isSplitHeaderRatio()\"\n class=\"flex items-center px-[16px] py-[8px] justify-between bg-white libs-ui-border-top-general {{ classIncludeHeader() || '' }}\">\n <div [class.columns-8]=\"!isSplitHeaderRatio()\"\n [class.w-[24%]]=\"isSplitHeaderRatio()\">\n <div class=\"flex items-center\">\n @if (!configTitle()?.ignoreButtonBack) {\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px] mr-[8px] cursor-pointer text-[var(--libs-ui-color-default)]\"\n (click)=\"handlerClose($event)\"></i>\n }\n <div class=\"flex w-full items-center\">\n @if (configTitle()?.isShowBackToListLabel) {\n <libs_ui-components-buttons-button [label]=\"'i18n_back_to_list'\"\n [classLabel]=\"'lib-ui-font-h6m'\"\n [type]=\"'button-link-primary'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerClose($event)\" />\n }\n @if (configTitle()?.config; as config) {\n <libs_ui-components-popover [config]=\"configTitleComputed()\"\n [type]=\"'text'\"\n [mode]=\"'hover'\"\n [classInclude]=\"'cursor-pointer ' + (config.classInclude || 'text-[var(--libs-ui-color-default)] libs-ui-font-h6m')\"\n [innerHtml]=\"config.content ? (!configTitle()?.ignoreEscapeHtml ? (config.content | LibsUiPipesEscapeHtmlPipe | translate) : (config.content | translate)) : '&mdash;'\"\n (outEvent)=\"handlerPopoverEvent($event)\" />\n }\n @if (configTitle()?.configDescription; as configDescription) {\n <libs_ui-components-popover [config]=\"configDescription.config\"\n [type]=\"'text'\"\n [mode]=\"'hover'\"\n [classInclude]=\"(configDescription.config.classInclude || 'libs-ui-font-h6r text-[#6a7383]')\"\n [innerHtml]=\"configDescription.innerView | LibsUiPipesEscapeHtmlPipe | translate\" />\n }\n </div>\n </div>\n </div>\n @if (isSplitHeaderRatio() && configCenter(); as configCenter) {\n <div class=\"w-[52%] flex items-center justify-center px-[48px]\">\n @if (!configCenter.template) {\n <libs_ui-components-popover type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1\n }\"\n [classInclude]=\"configCenter.classIncludeTitle ?? 'uppercase libs-ui-font-h4s'\"\n [innerHtml]=\"configCenter.title ? (configCenter.title | translate | LibsUiPipesEscapeHtmlPipe) : '&mdash'\" />\n }\n @else {\n <ng-container *ngTemplateOutlet=\"configCenter.template\" />\n }\n </div>\n }\n <div class=\"flex justify-end items-center\"\n [class.columns-4]=\"!isSplitHeaderRatio()\"\n [class.w-[24%]]=\"isSplitHeaderRatio()\">\n @for (item of configRight(); track $index; let last = $last) {\n <div [class.mr-[12px]]=\"!last\">\n @if (item.key === 'button' && item.configButton; as configButton) {\n <libs_ui-components-buttons-button [label]=\"configButton.label || ''\"\n [classLabel]=\"configButton.classLabel || ''\"\n [type]=\"configButton.type || 'button-primary'\"\n [classInclude]=\"configButton.classInclude || ''\"\n [classIconLeft]=\"configButton.classIconLeft || ''\"\n [iconOnlyType]=\"configButton.iconOnlyType || false\"\n [classIconRight]=\"configButton.classIconRight || ''\"\n [popover]=\"configButton.popover || {}\"\n [disable]=\"configButton.disable || disable()\"\n [isPending]=\"configButton.isPending || false\"\n (outClick)=\"handlerClickAction(configButton)\" />\n }\n @if (item.key === 'swicth' && !item.ignoreShowButton && item.configSwicth; as configSwicth) {\n <libs_ui-components-switch [active]=\"configSwicth.active || false\"\n [disable]=\"configSwicth.disable || disable()\"\n (outSwitch)=\"handlerSwitch(configSwicth, $event)\" />\n }\n @if (item.key === 'menu-dropdown' && item.configDropdown; as configDropdown) {\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"2004\"\n [listConfig]=\"configDropdown.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"configDropdown.popoverCustomConfig\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outFunctionsControl)=\"handlerDropdownFunctionControl($event)\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px] {{ configDropdown.classInclude }}'\"\n [classInclude]=\"'p-[7px] libs-ui-border-general'\"\n [type]=\"'button-third'\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n }\n @if (item.key === 'button-dropdown' && item.configButtonDropdown; as configDropdown) {\n <libs_ui-components-buttons-dropdown [applyNow]=\"true\"\n [label]=\"item.configButtonDropdown.label || ' '\"\n [classIconRight]=\"item.configButtonDropdown.classIconRight || ' ' \"\n [classIconLeft]=\"item.configButtonDropdown.classIconLeft || ' '\"\n [typeButton]=\"item.configButtonDropdown.type || 'button-secondary'\"\n [items]=\"item.configButtonDropdown.items || []\"\n [fieldDisplay]=\"item.configButtonDropdown.fieldDisplay\"\n [popupConfig]=\"item.configButtonDropdown.popupConfig || {width:205,maxWidth:408,maxHeight:48,zIndex:100,direction:'bottom'}\"\n (outSelectItem)=\"handlerSelectedButtonDropdownItem($event)\" />\n }\n\n @if (item.key === 'radio-group' && item.configRadioGroup; as configRadioGroup) {\n <libs_ui-components-radio-group [groups]=\"configRadioGroup\"\n [horizontal]=\"true\"\n [typeRadio]=\"'medium'\"\n [ignoreClassMarginLastItem]=\"true\"\n (outChange)=\"handlerChangeRadio($event)\" />\n }\n\n @if (item.key === 'tooltip-button' && item.configTooltipButton; as configTooltipButton) {\n <libs_ui-components-popover [type]=\"configTooltipButton.configTooltip?.type || 'other'\"\n [config]=\"configTooltipButton.configTooltip?.config\">\n <libs_ui-components-buttons-button [type]=\"configTooltipButton.configButton?.type || 'button-third'\"\n [classIconLeft]=\"configTooltipButton.configButton?.classIconLeft || 'libs-ui-icon-more-vertical rotate-[90deg] mr-0'\"\n [label]=\"configTooltipButton.configButton?.label || ''\"\n [iconOnlyType]=\"configTooltipButton.configButton?.iconOnlyType ?? false\"\n [popover]=\"configTooltipButton.configButton?.popover || {}\"\n (outFunctionsControl)=\"handlerFunctionControlTooltipButton($event)\"\n [ignoreStopPropagationEvent]=\"true\"\n [disable]=\"configTooltipButton.configButton?.disable ?? false\" />\n </libs_ui-components-popover>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"libs-ui-components-page_detail-body {{ classIncludeBody() }}\"\n LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"handlerScroll($event)\">\n <ng-content>\n </ng-content>\n </div>\n\n</div>\n", styles: [".libs-ui-components-page_detail{position:absolute;width:100%;height:100vh;left:0;top:0;background-color:#f4f5f7;margin-top:40px}.libs-ui-components-page_detail .libs-ui-components-page_detail-body{padding:0 16px;width:100%;height:100%;overflow-y:auto}\n"] }]
110
+ }] });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9wYWdlcy10ZW1wbGF0ZS9kZXRhaWwvc3JjL2RldGFpbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcGFnZXMtdGVtcGxhdGUvZGV0YWlsL3NyYy9kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFXLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckcsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDaEcsT0FBTyxFQUFpRCxpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hJLE9BQU8sRUFBZ0MsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFDakksT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEYsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUF5QiwrQkFBK0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQXFCdEQsTUFBTSxPQUFPLDRDQUE0QztJQUMvQyx1QkFBdUIsQ0FBaUM7SUFDdEQsbUJBQW1CLEdB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LGdDQUFnQzt3QkFDaEMsbUNBQW1DO3dCQUNuQywrQkFBK0I7d0JBQy9CLGlDQUFpQzt3QkFDakMsc0NBQXNDO3dCQUN0Qyx3Q0FBd0M7d0JBQ3hDLHlCQUF5QjtxQkFDMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBtb2RlbCwgT25Jbml0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElCdXR0b24sIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWRyb3Bkb3duJztcbmltcG9ydCB7IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJRW1pdFNlbGVjdEtleSwgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93bic7XG5pbXBvcnQgeyBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNSYWRpb0dyb3VwQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1yYWRpby1ncm91cCc7XG5pbXBvcnQgeyBJUmFkaW9FdmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcmFkaW8tc2luZ2xlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zY3JvbGwtb3ZlcmxheSc7XG5pbXBvcnQgeyBJU3dpdGNoLCBJU3dpdGNoRXZlbnQsIExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXN3aXRjaCc7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0VzY2FwZUh0bWxQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtZXNjYXBlLWh0bWwnO1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSVBhZ2VzVGVtcGxhdGVEZXRhaWxDb25maWdDZW50ZXIsIElQYWdlc1RlbXBsYXRlRGV0YWlsQ29uZmlnUmlnaHQsIElQYWdlc1RlbXBsYXRlRGV0YWlsQ29uZmlnVGl0bGUgfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUGFnZURldGFpbEZ1bmN0aW9uQ29udHJvbCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZSc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtcGFnZXNfdGVtcGxhdGUtZGV0YWlsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RldGFpbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLCBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNSYWRpb0dyb3VwQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zRHJvcGRvd25Db21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNQYWdlc1RlbXBsYXRlRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBkcm9wZG93bkZ1bmN0aW9uQ29udHJvbCE6IElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50O1xuICBwcm90ZWN0ZWQgY29uZmlnVGl0bGVDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1RpdGxlKCk/LmNvbmZpZztcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuIHsgY29udGVudDogJ2kxOG5fYmFja190b19saXN0JyB9O1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLmNvbnRlbnQpIHtcbiAgICAgIGNvbmZpZy5jb250ZW50ID0gJ2kxOG5fYmFja190b19saXN0JztcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uY29uZmlnLCBjb250ZW50OiBlc2NhcGVIdG1sKGNvbmZpZy5jb250ZW50KSB9O1xuICB9KTtcblxuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAwMCwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMTAwMCB9KTtcbiAgcmVhZG9ubHkgY29uZmlnUmlnaHQgPSBpbnB1dDxBcnJheTxJUGFnZXNUZW1wbGF0ZURldGFpbENvbmZpZ1JpZ2h0Pj4oKTtcbiAgcmVhZG9ubHkgY29uZmlnVGl0bGUgPSBpbnB1dDxJUGFnZXNUZW1wbGF0ZURldGFpbENvbmZpZ1RpdGxlPigpO1xuICByZWFkb25seSBjb25maWdDZW50ZXIgPSBpbnB1dDxJUGFnZXNUZW1wbGF0ZURldGFpbENvbmZpZ0NlbnRlcj4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlSGVhZGVyID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVCb2R5ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBpc1NwbGl0SGVhZGVyUmF0aW8gPSBpbnB1dDxib29sZWFuPigpOyAvLyBkw7luZyBraGkgbXXhu5FuIGNoaWEgaGVhZGVyIGzDoG0gMyBwaOG6p24gdGhlbyB04buJIGzhu4cgMjQgNTIgMjRcblxuICByZWFkb25seSBvdXRTY3JvbGwgPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdGVkTWVudURyb3Bkb3duID0gb3V0cHV0PElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBvdXRTZWxlY3RlZEJ1dHRvbkRyb3Bkb3duID0gb3V0cHV0PElFbWl0U2VsZWN0S2V5PigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbkNvbnRyb2wgPSBvdXRwdXQ8SVBhZ2VEZXRhaWxGdW5jdGlvbkNvbnRyb2w+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdGVkUmFkaW8gPSBvdXRwdXQ8SVJhZGlvRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFN0YXRlRGlzYWJsZSA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRUb29sdGlwQnV0dG9uRnVuY3Rpb25Db250cm9sID0gb3V0cHV0PElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uQ29udHJvbC5lbWl0KHtcbiAgICAgIHNldFN0YXRlRGlzYWJsZTogdGhpcy5zZXRTdGF0ZURpc2FibGUuYmluZCh0aGlzKVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0FjdGlvbihldmVudDogSUJ1dHRvbikge1xuICAgIGlmIChldmVudCAmJiBldmVudC5hY3Rpb24pIHtcbiAgICAgIGV2ZW50LmFjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU3dpdGNoKGV2ZW50OiBJU3dpdGNoLCBzd2ljdGhFdmVudDogSVN3aXRjaEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmFjdGlvbikge1xuICAgICAgYXdhaXQgZXZlbnQuYWN0aW9uKHN3aWN0aEV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsb3NlKGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm91dENsb3NlLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJFdmVudChldmVudDogVFlQRV9QT1BPVkVSX0VWRU5UKSB7XG4gICAgaWYgKGV2ZW50ICE9PSAnY2xpY2snKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0Q2xvc2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0ZWRLZXkoZXZlbnQ/OiBJRW1pdFNlbGVjdEtleSkge1xuICAgIHRoaXMub3V0U2VsZWN0ZWRNZW51RHJvcGRvd24uZW1pdChldmVudCk7XG4gICAgdGhpcy5kcm9wZG93bkZ1bmN0aW9uQ29udHJvbD8ucmVzZXQoKTsgLy9sw7TMg2kgY2hvzKNuIGzDosyAbiAyIChjaMawYSByZXNldCB0aGnMgCBrZXlTZWxlY3RlZCBjaMawYSByZXNldCBuw6puIGtow7RuZyBjaG/Mo24gdGnDqsyBcCB2YcyAbyBsxrDMo2EgY2hvzKNuIGN1zIMpXG4gICAgdGhpcy5kcm9wZG93bkZ1bmN0aW9uQ29udHJvbD8ucmVtb3ZlTGlzdCgpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEJ1dHRvbkRyb3Bkb3duSXRlbShldmVudDogYW55KSB7XG4gICAgdGhpcy5vdXRTZWxlY3RlZEJ1dHRvbkRyb3Bkb3duLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJEcm9wZG93bkZ1bmN0aW9uQ29udHJvbChldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmRyb3Bkb3duRnVuY3Rpb25Db250cm9sID0gZXZlbnQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFN0YXRlRGlzYWJsZShzdGF0ZURpc2FibGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGUuc2V0KHN0YXRlRGlzYWJsZSk7XG4gICAgdGhpcy5vdXRTdGF0ZURpc2FibGUuZW1pdCh0aGlzLmRpc2FibGUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVJhZGlvKGV2ZW50OiBJUmFkaW9FdmVudCkge1xuICAgIHRoaXMub3V0U2VsZWN0ZWRSYWRpby5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRnVuY3Rpb25Db250cm9sVG9vbHRpcEJ1dHRvbihldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMub3V0VG9vbHRpcEJ1dHRvbkZ1bmN0aW9uQ29udHJvbC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMub3V0U2Nyb2xsLmVtaXQoZXZlbnQpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudHMtcGFnZV9kZXRhaWxcIlxuICBbc3R5bGUuekluZGV4XT1cInpJbmRleCgpXCI+XG4gIDxkaXYgW2NsYXNzLnJvd109XCIhaXNTcGxpdEhlYWRlclJhdGlvKClcIlxuICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHgtWzE2cHhdIHB5LVs4cHhdIGp1c3RpZnktYmV0d2VlbiBiZy13aGl0ZSBsaWJzLXVpLWJvcmRlci10b3AtZ2VuZXJhbCB7eyBjbGFzc0luY2x1ZGVIZWFkZXIoKSB8fCAnJyB9fVwiPlxuICAgIDxkaXYgW2NsYXNzLmNvbHVtbnMtOF09XCIhaXNTcGxpdEhlYWRlclJhdGlvKClcIlxuICAgICAgW2NsYXNzLnctWzI0JV1dPVwiaXNTcGxpdEhlYWRlclJhdGlvKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICBAaWYgKCFjb25maWdUaXRsZSgpPy5pZ25vcmVCdXR0b25CYWNrKSB7XG4gICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCByb3RhdGUtWzE4MGRlZ10gYmVmb3JlOnRleHQtWzE2cHhdIG1yLVs4cHhdIGN1cnNvci1wb2ludGVyIHRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGVmYXVsdCldXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xvc2UoJGV2ZW50KVwiPjwvaT5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgQGlmIChjb25maWdUaXRsZSgpPy5pc1Nob3dCYWNrVG9MaXN0TGFiZWwpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW2xhYmVsXT1cIidpMThuX2JhY2tfdG9fbGlzdCdcIlxuICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCInbGliLXVpLWZvbnQtaDZtJ1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnXCJcbiAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbG9zZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChjb25maWdUaXRsZSgpPy5jb25maWc7IGFzIGNvbmZpZykge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFtjb25maWddPVwiY29uZmlnVGl0bGVDb21wdXRlZCgpXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW21vZGVdPVwiJ2hvdmVyJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ2N1cnNvci1wb2ludGVyICcgKyAoY29uZmlnLmNsYXNzSW5jbHVkZSB8fCAndGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kZWZhdWx0KV0gbGlicy11aS1mb250LWg2bScpXCJcbiAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJjb25maWcuY29udGVudCA/ICghY29uZmlnVGl0bGUoKT8uaWdub3JlRXNjYXBlSHRtbCA/IChjb25maWcuY29udGVudCB8IExpYnNVaVBpcGVzRXNjYXBlSHRtbFBpcGUgfCB0cmFuc2xhdGUpIDogKGNvbmZpZy5jb250ZW50IHwgdHJhbnNsYXRlKSkgOiAnJm1kYXNoOydcIlxuICAgICAgICAgICAgICAob3V0RXZlbnQpPVwiaGFuZGxlclBvcG92ZXJFdmVudCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChjb25maWdUaXRsZSgpPy5jb25maWdEZXNjcmlwdGlvbjsgYXMgY29uZmlnRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cImNvbmZpZ0Rlc2NyaXB0aW9uLmNvbmZpZ1wiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFttb2RlXT1cIidob3ZlcidcIlxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIihjb25maWdEZXNjcmlwdGlvbi5jb25maWcuY2xhc3NJbmNsdWRlIHx8ICdsaWJzLXVpLWZvbnQtaDZyIHRleHQtWyM2YTczODNdJylcIlxuICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cImNvbmZpZ0Rlc2NyaXB0aW9uLmlubmVyVmlldyB8IExpYnNVaVBpcGVzRXNjYXBlSHRtbFBpcGUgfCB0cmFuc2xhdGVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBAaWYgKGlzU3BsaXRIZWFkZXJSYXRpbygpICAmJiBjb25maWdDZW50ZXIoKTsgYXMgY29uZmlnQ2VudGVyKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidy1bNTIlXSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC1bNDhweF1cIj5cbiAgICAgICAgQGlmICghY29uZmlnQ2VudGVyLnRlbXBsYXRlKSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgICAgICBtYXhXaWR0aDogMjUwLFxuICAgICAgICAgICAgICB6SW5kZXg6IHpJbmRleCgpICsgMVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImNvbmZpZ0NlbnRlci5jbGFzc0luY2x1ZGVUaXRsZSAgPz8gJ3VwcGVyY2FzZSBsaWJzLXVpLWZvbnQtaDRzJ1wiXG4gICAgICAgICAgICBbaW5uZXJIdG1sXT1cImNvbmZpZ0NlbnRlci50aXRsZSA/IChjb25maWdDZW50ZXIudGl0bGUgfCB0cmFuc2xhdGUgfCBMaWJzVWlQaXBlc0VzY2FwZUh0bWxQaXBlKSA6ICcmbWRhc2gnXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbmZpZ0NlbnRlci50ZW1wbGF0ZVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXJcIlxuICAgICAgW2NsYXNzLmNvbHVtbnMtNF09XCIhaXNTcGxpdEhlYWRlclJhdGlvKClcIlxuICAgICAgW2NsYXNzLnctWzI0JV1dPVwiaXNTcGxpdEhlYWRlclJhdGlvKClcIj5cbiAgICAgIEBmb3IgKGl0ZW0gb2YgY29uZmlnUmlnaHQoKTsgdHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgIDxkaXYgW2NsYXNzLm1yLVsxMnB4XV09XCIhbGFzdFwiPlxuICAgICAgICAgIEBpZiAoaXRlbS5rZXkgPT09ICdidXR0b24nICYmIGl0ZW0uY29uZmlnQnV0dG9uOyBhcyBjb25maWdCdXR0b24pIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW2xhYmVsXT1cImNvbmZpZ0J1dHRvbi5sYWJlbCB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0xhYmVsXT1cImNvbmZpZ0J1dHRvbi5jbGFzc0xhYmVsIHx8ICcnXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiY29uZmlnQnV0dG9uLnR5cGUgfHwgJ2J1dHRvbi1wcmltYXJ5J1wiXG4gICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY29uZmlnQnV0dG9uLmNsYXNzSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cImNvbmZpZ0J1dHRvbi5jbGFzc0ljb25MZWZ0IHx8ICcnXCJcbiAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJjb25maWdCdXR0b24uaWNvbk9ubHlUeXBlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cImNvbmZpZ0J1dHRvbi5jbGFzc0ljb25SaWdodCB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtwb3BvdmVyXT1cImNvbmZpZ0J1dHRvbi5wb3BvdmVyIHx8IHt9XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiY29uZmlnQnV0dG9uLmRpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgW2lzUGVuZGluZ109XCJjb25maWdCdXR0b24uaXNQZW5kaW5nIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0FjdGlvbihjb25maWdCdXR0b24pXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChpdGVtLmtleSA9PT0gJ3N3aWN0aCcgJiYgIWl0ZW0uaWdub3JlU2hvd0J1dHRvbiAmJiBpdGVtLmNvbmZpZ1N3aWN0aDsgYXMgY29uZmlnU3dpY3RoKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXN3aXRjaCBbYWN0aXZlXT1cImNvbmZpZ1N3aWN0aC5hY3RpdmUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJjb25maWdTd2ljdGguZGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAob3V0U3dpdGNoKT1cImhhbmRsZXJTd2l0Y2goY29uZmlnU3dpY3RoLCAkZXZlbnQpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChpdGVtLmtleSA9PT0gJ21lbnUtZHJvcGRvd24nICYmIGl0ZW0uY29uZmlnRHJvcGRvd247IGFzIGNvbmZpZ0Ryb3Bkb3duKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3pJbmRleF09XCIyMDA0XCJcbiAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwiY29uZmlnRHJvcGRvd24ubGlzdENvbmZpZ1wiXG4gICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtwb3BvdmVyQ3VzdG9tQ29uZmlnXT1cImNvbmZpZ0Ryb3Bkb3duLnBvcG92ZXJDdXN0b21Db25maWdcIlxuICAgICAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZEtleSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckRyb3Bkb3duRnVuY3Rpb25Db250cm9sKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tbW9yZS12ZXJ0aWNhbCB0ZXh0LVsjMzMzMzMzXSB0ZXh0LVsxMnB4XSB7eyBjb25maWdEcm9wZG93bi5jbGFzc0luY2x1ZGUgfX0nXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidwLVs3cHhdIGxpYnMtdWktYm9yZGVyLWdlbmVyYWwnXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLXRoaXJkJ1wiXG4gICAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIiAvPlxuICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoaXRlbS5rZXkgPT09ICdidXR0b24tZHJvcGRvd24nICYmIGl0ZW0uY29uZmlnQnV0dG9uRHJvcGRvd247IGFzIGNvbmZpZ0Ryb3Bkb3duKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtZHJvcGRvd24gW2FwcGx5Tm93XT1cInRydWVcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5jb25maWdCdXR0b25Ecm9wZG93bi5sYWJlbCB8fCAnICdcIlxuICAgICAgICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiaXRlbS5jb25maWdCdXR0b25Ecm9wZG93bi5jbGFzc0ljb25SaWdodCB8fCAnICcgXCJcbiAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiaXRlbS5jb25maWdCdXR0b25Ecm9wZG93bi5jbGFzc0ljb25MZWZ0IHx8ICcgJ1wiXG4gICAgICAgICAgICAgIFt0eXBlQnV0dG9uXT1cIml0ZW0uY29uZmlnQnV0dG9uRHJvcGRvd24udHlwZSB8fCAnYnV0dG9uLXNlY29uZGFyeSdcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbS5jb25maWdCdXR0b25Ecm9wZG93bi5pdGVtcyB8fCBbXVwiXG4gICAgICAgICAgICAgIFtmaWVsZERpc3BsYXldPVwiaXRlbS5jb25maWdCdXR0b25Ecm9wZG93bi5maWVsZERpc3BsYXlcIlxuICAgICAgICAgICAgICBbcG9wdXBDb25maWddPVwiaXRlbS5jb25maWdCdXR0b25Ecm9wZG93bi5wb3B1cENvbmZpZyB8fCB7d2lkdGg6MjA1LG1heFdpZHRoOjQwOCxtYXhIZWlnaHQ6NDgsekluZGV4OjEwMCxkaXJlY3Rpb246J2JvdHRvbSd9XCJcbiAgICAgICAgICAgICAgKG91dFNlbGVjdEl0ZW0pPVwiaGFuZGxlclNlbGVjdGVkQnV0dG9uRHJvcGRvd25JdGVtKCRldmVudClcIiAvPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoaXRlbS5rZXkgPT09ICdyYWRpby1ncm91cCcgJiYgaXRlbS5jb25maWdSYWRpb0dyb3VwOyBhcyBjb25maWdSYWRpb0dyb3VwKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXJhZGlvLWdyb3VwIFtncm91cHNdPVwiY29uZmlnUmFkaW9Hcm91cFwiXG4gICAgICAgICAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgICAgICAgICAgICBbdHlwZVJhZGlvXT1cIidtZWRpdW0nXCJcbiAgICAgICAgICAgICAgW2lnbm9yZUNsYXNzTWFyZ2luTGFzdEl0ZW1dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVJhZGlvKCRldmVudClcIiAvPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoaXRlbS5rZXkgPT09ICd0b29sdGlwLWJ1dHRvbicgJiYgaXRlbS5jb25maWdUb29sdGlwQnV0dG9uOyBhcyBjb25maWdUb29sdGlwQnV0dG9uKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW3R5cGVdPVwiY29uZmlnVG9vbHRpcEJ1dHRvbi5jb25maWdUb29sdGlwPy50eXBlIHx8ICdvdGhlcidcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImNvbmZpZ1Rvb2x0aXBCdXR0b24uY29uZmlnVG9vbHRpcD8uY29uZmlnXCI+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiY29uZmlnVG9vbHRpcEJ1dHRvbi5jb25maWdCdXR0b24/LnR5cGUgfHwgJ2J1dHRvbi10aGlyZCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cImNvbmZpZ1Rvb2x0aXBCdXR0b24uY29uZmlnQnV0dG9uPy5jbGFzc0ljb25MZWZ0IHx8ICdsaWJzLXVpLWljb24tbW9yZS12ZXJ0aWNhbCByb3RhdGUtWzkwZGVnXSBtci0wJ1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ1Rvb2x0aXBCdXR0b24uY29uZmlnQnV0dG9uPy5sYWJlbCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJjb25maWdUb29sdGlwQnV0dG9uLmNvbmZpZ0J1dHRvbj8uaWNvbk9ubHlUeXBlID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJjb25maWdUb29sdGlwQnV0dG9uLmNvbmZpZ0J1dHRvbj8ucG9wb3ZlciB8fCB7fVwiXG4gICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbFRvb2x0aXBCdXR0b24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImNvbmZpZ1Rvb2x0aXBCdXR0b24uY29uZmlnQnV0dG9uPy5kaXNhYmxlID8/IGZhbHNlXCIgLz5cbiAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1wYWdlX2RldGFpbC1ib2R5IHt7IGNsYXNzSW5jbHVkZUJvZHkoKSB9fVwiXG4gICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAob3V0U2Nyb2xsKT1cImhhbmRsZXJTY3JvbGwoJGV2ZW50KVwiPlxuICAgIDxuZy1jb250ZW50PlxuICAgIDwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuIl19
@@ -0,0 +1,4 @@
1
+ export * from './detail.component';
2
+ export * from './interfaces/config.interface';
3
+ export * from './interfaces/function-control.interface';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcGFnZXMtdGVtcGxhdGUvZGV0YWlsL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGV0YWlsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2UnOyJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9wYWdlcy10ZW1wbGF0ZS9kZXRhaWwvc3JjL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuaW1wb3J0IHsgSVN3aXRjaCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXN3aXRjaFwiO1xuaW1wb3J0IHsgSUJ1dHRvbiB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXCI7XG5pbXBvcnQgeyBJUmFkaW9Hcm91cEl0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1yYWRpby1ncm91cFwiO1xuaW1wb3J0IHsgSURyb3Bkb3duIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtZHJvcGRvd25cIjtcbmltcG9ydCB7IElQb3BvdmVyLCBJUG9wb3Zlck92ZXJsYXkgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyXCI7XG5pbXBvcnQgeyBJQnV0dG9uRHJvcGRvd24gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWRyb3Bkb3duXCI7XG5leHBvcnQgdHlwZSBCdXR0b25LZXkgPSAnYnV0dG9uJyB8ICdzd2ljdGgnIHwgJ3JhZGlvLWdyb3VwJyB8ICdjaXJjbGUtYW5kLW51bWJlcicgfCAnYnV0dG9uLWRyb3Bkb3duJyB8ICdtZW51LWRyb3Bkb3duJyB8ICd0b29sdGlwLWJ1dHRvbicgfCAndG9vbHRpcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2VzVGVtcGxhdGVEZXRhaWxDb25maWdSaWdodCB7XG4gIGtleTogQnV0dG9uS2V5O1xuICBjbGFzc0luY2x1ZGU/OiBzdHJpbmc7XG4gIGRpc2FibGU/OiBib29sZWFuO1xuICBpc1BlbmRpbmc/OiBib29sZWFuO1xuICBjb25maWdCdXR0b24/OiBJQnV0dG9uO1xuICBjb25maWdCdXR0b25Ecm9wZG93bj86IElCdXR0b25Ecm9wZG93bjtcbiAgY29uZmlnUmFkaW9Hcm91cD86IEFycmF5PElSYWRpb0dyb3VwSXRlbT47XG4gIGNvbmZpZ1N3aWN0aD86IElTd2l0Y2g7XG4gIGlnbm9yZVNob3dCdXR0b24/OiBib29sZWFuO1xuICBjb25maWdEcm9wZG93bj86IElEcm9wZG93bjtcbiAgY29uZmlnVG9vbHRpcEJ1dHRvbj86IHtcbiAgICBjb25maWdUb29sdGlwPzogSVBvcG92ZXI7XG4gICAgY29uZmlnQnV0dG9uPzogSUJ1dHRvbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGFnZXNUZW1wbGF0ZURldGFpbENvbmZpZ1RpdGxlIGV4dGVuZHMgSVBvcG92ZXIge1xuICBpZ25vcmVCdXR0b25CYWNrPzogYm9vbGVhbjtcbiAgaWdub3JlRXNjYXBlSHRtbD86IGJvb2xlYW47XG4gIGlzU2hvd0Fycm93QmVnaW4/OiBib29sZWFuO1xuICBpc1Nob3dCYWNrVG9MaXN0TGFiZWw/OiBib29sZWFuO1xuICBjb25maWdEZXNjcmlwdGlvbj86IHtcbiAgICBpbm5lclZpZXc/OiBzdHJpbmc7XG4gICAgY29uZmlnOiBJUG9wb3Zlck92ZXJsYXk7XG4gIH1cblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQYWdlc1RlbXBsYXRlRGV0YWlsQ29uZmlnQ2VudGVyIHtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZVRpdGxlPzogc3RyaW5nO1xuICB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPiB8IHVuZGVmaW5lZDsgLy8gRMO5bmcga2hpIG114buRbiBjb25maWcgY2VudGVyIHRlbXBsYXRlXG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcGFnZXMtdGVtcGxhdGUvZGV0YWlsL3NyYy9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElQYWdlRGV0YWlsRnVuY3Rpb25Db250cm9sIHtcbiAgc2V0U3RhdGVEaXNhYmxlOiAoc3RhdGVEaXNhYmxlOiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLXBhZ2VzLXRlbXBsYXRlLWRldGFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9wYWdlcy10ZW1wbGF0ZS9kZXRhaWwvc3JjL2xpYnMtdWktY29tcG9uZW50cy1wYWdlcy10ZW1wbGF0ZS1kZXRhaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,118 @@
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { computed, input, model, output, Component } from '@angular/core';
4
+ import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
5
+ import { LibsUiComponentsButtonsDropdownComponent } from '@libs-ui/components-buttons-dropdown';
6
+ import { LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';
7
+ import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
8
+ import { LibsUiComponentsRadioGroupComponent } from '@libs-ui/components-radio-group';
9
+ import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
10
+ import { LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';
11
+ import { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';
12
+ import { escapeHtml } from '@libs-ui/utils';
13
+ import * as i1 from '@ngx-translate/core';
14
+ import { TranslateModule } from '@ngx-translate/core';
15
+
16
+ class LibsUiComponentsPagesTemplateDetailComponent {
17
+ dropdownFunctionControl;
18
+ configTitleComputed = computed(() => {
19
+ const config = this.configTitle()?.config;
20
+ if (!config) {
21
+ return { content: 'i18n_back_to_list' };
22
+ }
23
+ if (!config.content) {
24
+ config.content = 'i18n_back_to_list';
25
+ return config;
26
+ }
27
+ return { ...config, content: escapeHtml(config.content) };
28
+ });
29
+ zIndex = input(1000, { transform: val => val ?? 1000 });
30
+ configRight = input();
31
+ configTitle = input();
32
+ configCenter = input();
33
+ classIncludeHeader = input();
34
+ classIncludeBody = input();
35
+ disable = model(false);
36
+ isSplitHeaderRatio = input(); // dùng khi muốn chia header làm 3 phần theo tỉ lệ 24 52 24
37
+ outScroll = output();
38
+ outClose = output();
39
+ outSelectedMenuDropdown = output();
40
+ outSelectedButtonDropdown = output();
41
+ outFunctionControl = output();
42
+ outSelectedRadio = output();
43
+ outStateDisable = output();
44
+ outTooltipButtonFunctionControl = output();
45
+ ngOnInit() {
46
+ this.outFunctionControl.emit({
47
+ setStateDisable: this.setStateDisable.bind(this)
48
+ });
49
+ }
50
+ handlerClickAction(event) {
51
+ if (event && event.action) {
52
+ event.action();
53
+ }
54
+ }
55
+ async handlerSwitch(event, swicthEvent) {
56
+ if (event && event.action) {
57
+ await event.action(swicthEvent);
58
+ }
59
+ }
60
+ handlerClose(e) {
61
+ e.stopPropagation();
62
+ this.outClose.emit(true);
63
+ }
64
+ handlerPopoverEvent(event) {
65
+ if (event !== 'click') {
66
+ return;
67
+ }
68
+ this.outClose.emit(true);
69
+ }
70
+ handlerSelectedKey(event) {
71
+ this.outSelectedMenuDropdown.emit(event);
72
+ this.dropdownFunctionControl?.reset(); //lỗi chọn lần 2 (chưa reset thì keySelected chưa reset nên không chọn tiếp vào lựa chọn cũ)
73
+ this.dropdownFunctionControl?.removeList();
74
+ }
75
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
+ handlerSelectedButtonDropdownItem(event) {
77
+ this.outSelectedButtonDropdown.emit(event);
78
+ }
79
+ handlerDropdownFunctionControl(event) {
80
+ this.dropdownFunctionControl = event;
81
+ }
82
+ async setStateDisable(stateDisable) {
83
+ this.disable.set(stateDisable);
84
+ this.outStateDisable.emit(this.disable());
85
+ }
86
+ handlerChangeRadio(event) {
87
+ this.outSelectedRadio.emit(event);
88
+ }
89
+ handlerFunctionControlTooltipButton(event) {
90
+ this.outTooltipButtonFunctionControl.emit(event);
91
+ }
92
+ handlerScroll(event) {
93
+ this.outScroll.emit(event);
94
+ }
95
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsPagesTemplateDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
96
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsPagesTemplateDetailComponent, isStandalone: true, selector: "libs_ui-components-pages_template-detail", inputs: { zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, configRight: { classPropertyName: "configRight", publicName: "configRight", isSignal: true, isRequired: false, transformFunction: null }, configTitle: { classPropertyName: "configTitle", publicName: "configTitle", isSignal: true, isRequired: false, transformFunction: null }, configCenter: { classPropertyName: "configCenter", publicName: "configCenter", isSignal: true, isRequired: false, transformFunction: null }, classIncludeHeader: { classPropertyName: "classIncludeHeader", publicName: "classIncludeHeader", isSignal: true, isRequired: false, transformFunction: null }, classIncludeBody: { classPropertyName: "classIncludeBody", publicName: "classIncludeBody", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, isSplitHeaderRatio: { classPropertyName: "isSplitHeaderRatio", publicName: "isSplitHeaderRatio", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disable: "disableChange", outScroll: "outScroll", outClose: "outClose", outSelectedMenuDropdown: "outSelectedMenuDropdown", outSelectedButtonDropdown: "outSelectedButtonDropdown", outFunctionControl: "outFunctionControl", outSelectedRadio: "outSelectedRadio", outStateDisable: "outStateDisable", outTooltipButtonFunctionControl: "outTooltipButtonFunctionControl" }, ngImport: i0, template: "<div class=\"libs-ui-components-page_detail\"\n [style.zIndex]=\"zIndex()\">\n <div [class.row]=\"!isSplitHeaderRatio()\"\n class=\"flex items-center px-[16px] py-[8px] justify-between bg-white libs-ui-border-top-general {{ classIncludeHeader() || '' }}\">\n <div [class.columns-8]=\"!isSplitHeaderRatio()\"\n [class.w-[24%]]=\"isSplitHeaderRatio()\">\n <div class=\"flex items-center\">\n @if (!configTitle()?.ignoreButtonBack) {\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px] mr-[8px] cursor-pointer text-[var(--libs-ui-color-default)]\"\n (click)=\"handlerClose($event)\"></i>\n }\n <div class=\"flex w-full items-center\">\n @if (configTitle()?.isShowBackToListLabel) {\n <libs_ui-components-buttons-button [label]=\"'i18n_back_to_list'\"\n [classLabel]=\"'lib-ui-font-h6m'\"\n [type]=\"'button-link-primary'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerClose($event)\" />\n }\n @if (configTitle()?.config; as config) {\n <libs_ui-components-popover [config]=\"configTitleComputed()\"\n [type]=\"'text'\"\n [mode]=\"'hover'\"\n [classInclude]=\"'cursor-pointer ' + (config.classInclude || 'text-[var(--libs-ui-color-default)] libs-ui-font-h6m')\"\n [innerHtml]=\"config.content ? (!configTitle()?.ignoreEscapeHtml ? (config.content | LibsUiPipesEscapeHtmlPipe | translate) : (config.content | translate)) : '&mdash;'\"\n (outEvent)=\"handlerPopoverEvent($event)\" />\n }\n @if (configTitle()?.configDescription; as configDescription) {\n <libs_ui-components-popover [config]=\"configDescription.config\"\n [type]=\"'text'\"\n [mode]=\"'hover'\"\n [classInclude]=\"(configDescription.config.classInclude || 'libs-ui-font-h6r text-[#6a7383]')\"\n [innerHtml]=\"configDescription.innerView | LibsUiPipesEscapeHtmlPipe | translate\" />\n }\n </div>\n </div>\n </div>\n @if (isSplitHeaderRatio() && configCenter(); as configCenter) {\n <div class=\"w-[52%] flex items-center justify-center px-[48px]\">\n @if (!configCenter.template) {\n <libs_ui-components-popover type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1\n }\"\n [classInclude]=\"configCenter.classIncludeTitle ?? 'uppercase libs-ui-font-h4s'\"\n [innerHtml]=\"configCenter.title ? (configCenter.title | translate | LibsUiPipesEscapeHtmlPipe) : '&mdash'\" />\n }\n @else {\n <ng-container *ngTemplateOutlet=\"configCenter.template\" />\n }\n </div>\n }\n <div class=\"flex justify-end items-center\"\n [class.columns-4]=\"!isSplitHeaderRatio()\"\n [class.w-[24%]]=\"isSplitHeaderRatio()\">\n @for (item of configRight(); track $index; let last = $last) {\n <div [class.mr-[12px]]=\"!last\">\n @if (item.key === 'button' && item.configButton; as configButton) {\n <libs_ui-components-buttons-button [label]=\"configButton.label || ''\"\n [classLabel]=\"configButton.classLabel || ''\"\n [type]=\"configButton.type || 'button-primary'\"\n [classInclude]=\"configButton.classInclude || ''\"\n [classIconLeft]=\"configButton.classIconLeft || ''\"\n [iconOnlyType]=\"configButton.iconOnlyType || false\"\n [classIconRight]=\"configButton.classIconRight || ''\"\n [popover]=\"configButton.popover || {}\"\n [disable]=\"configButton.disable || disable()\"\n [isPending]=\"configButton.isPending || false\"\n (outClick)=\"handlerClickAction(configButton)\" />\n }\n @if (item.key === 'swicth' && !item.ignoreShowButton && item.configSwicth; as configSwicth) {\n <libs_ui-components-switch [active]=\"configSwicth.active || false\"\n [disable]=\"configSwicth.disable || disable()\"\n (outSwitch)=\"handlerSwitch(configSwicth, $event)\" />\n }\n @if (item.key === 'menu-dropdown' && item.configDropdown; as configDropdown) {\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"2004\"\n [listConfig]=\"configDropdown.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"configDropdown.popoverCustomConfig\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outFunctionsControl)=\"handlerDropdownFunctionControl($event)\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px] {{ configDropdown.classInclude }}'\"\n [classInclude]=\"'p-[7px] libs-ui-border-general'\"\n [type]=\"'button-third'\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n }\n @if (item.key === 'button-dropdown' && item.configButtonDropdown; as configDropdown) {\n <libs_ui-components-buttons-dropdown [applyNow]=\"true\"\n [label]=\"item.configButtonDropdown.label || ' '\"\n [classIconRight]=\"item.configButtonDropdown.classIconRight || ' ' \"\n [classIconLeft]=\"item.configButtonDropdown.classIconLeft || ' '\"\n [typeButton]=\"item.configButtonDropdown.type || 'button-secondary'\"\n [items]=\"item.configButtonDropdown.items || []\"\n [fieldDisplay]=\"item.configButtonDropdown.fieldDisplay\"\n [popupConfig]=\"item.configButtonDropdown.popupConfig || {width:205,maxWidth:408,maxHeight:48,zIndex:100,direction:'bottom'}\"\n (outSelectItem)=\"handlerSelectedButtonDropdownItem($event)\" />\n }\n\n @if (item.key === 'radio-group' && item.configRadioGroup; as configRadioGroup) {\n <libs_ui-components-radio-group [groups]=\"configRadioGroup\"\n [horizontal]=\"true\"\n [typeRadio]=\"'medium'\"\n [ignoreClassMarginLastItem]=\"true\"\n (outChange)=\"handlerChangeRadio($event)\" />\n }\n\n @if (item.key === 'tooltip-button' && item.configTooltipButton; as configTooltipButton) {\n <libs_ui-components-popover [type]=\"configTooltipButton.configTooltip?.type || 'other'\"\n [config]=\"configTooltipButton.configTooltip?.config\">\n <libs_ui-components-buttons-button [type]=\"configTooltipButton.configButton?.type || 'button-third'\"\n [classIconLeft]=\"configTooltipButton.configButton?.classIconLeft || 'libs-ui-icon-more-vertical rotate-[90deg] mr-0'\"\n [label]=\"configTooltipButton.configButton?.label || ''\"\n [iconOnlyType]=\"configTooltipButton.configButton?.iconOnlyType ?? false\"\n [popover]=\"configTooltipButton.configButton?.popover || {}\"\n (outFunctionsControl)=\"handlerFunctionControlTooltipButton($event)\"\n [ignoreStopPropagationEvent]=\"true\"\n [disable]=\"configTooltipButton.configButton?.disable ?? false\" />\n </libs_ui-components-popover>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"libs-ui-components-page_detail-body {{ classIncludeBody() }}\"\n LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"handlerScroll($event)\">\n <ng-content>\n </ng-content>\n </div>\n\n</div>\n", styles: [".libs-ui-components-page_detail{position:absolute;width:100%;height:100vh;left:0;top:0;background-color:#f4f5f7;margin-top:40px}.libs-ui-components-page_detail .libs-ui-components-page_detail-body{padding:0 16px;width:100%;height:100%;overflow-y:auto}\n"], dependencies: [{ 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", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsRadioGroupComponent, selector: "libs_ui-components-radio-group", inputs: ["fieldKey", "keyActive", "keysDisable", "groups", "disable", "clickExactly", "horizontal", "labelConfig", "validRequired", "ignoreClassMarginLastItem", "typeRadio", "classInclude", "classLabelInclude", "classItemInclude", "alwaysShowSubText", "horizontalClassInclude"], outputs: ["groupsChange", "outClickButton", "outChange", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "component", type: LibsUiComponentsButtonsDropdownComponent, selector: "libs_ui-components-buttons-dropdown", inputs: ["label", "fieldClass", "fieldClassIconLeft", "items", "fieldDisplay", "keyField", "keySelected", "applyNow", "showBorderBottom", "disable", "sizeButton", "classLabel", "iconOnlyType", "classIconRight", "classIconLeft", "typeButton", "popupConfig", "ignoreHiddenPopoverContentWhenMouseLeave", "classInclude", "modePopover", "classIncludeContainer"], outputs: ["keySelectedChange", "outSelectItem", "outHover", "outApply", "outPopoverEvent", "outFunctionsControl", "outIconEvent"] }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }] });
97
+ }
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsPagesTemplateDetailComponent, decorators: [{
99
+ type: Component,
100
+ args: [{ selector: 'libs_ui-components-pages_template-detail', standalone: true, imports: [
101
+ TranslateModule, NgTemplateOutlet,
102
+ LibsUiComponentsButtonsButtonComponent,
103
+ LibsUiComponentsPopoverComponent,
104
+ LibsUiComponentsRadioGroupComponent,
105
+ LibsUiComponentsSwitchComponent,
106
+ LibsUiComponentsDropdownComponent,
107
+ LibsUiComponentsScrollOverlayDirective,
108
+ LibsUiComponentsButtonsDropdownComponent,
109
+ LibsUiPipesEscapeHtmlPipe
110
+ ], template: "<div class=\"libs-ui-components-page_detail\"\n [style.zIndex]=\"zIndex()\">\n <div [class.row]=\"!isSplitHeaderRatio()\"\n class=\"flex items-center px-[16px] py-[8px] justify-between bg-white libs-ui-border-top-general {{ classIncludeHeader() || '' }}\">\n <div [class.columns-8]=\"!isSplitHeaderRatio()\"\n [class.w-[24%]]=\"isSplitHeaderRatio()\">\n <div class=\"flex items-center\">\n @if (!configTitle()?.ignoreButtonBack) {\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px] mr-[8px] cursor-pointer text-[var(--libs-ui-color-default)]\"\n (click)=\"handlerClose($event)\"></i>\n }\n <div class=\"flex w-full items-center\">\n @if (configTitle()?.isShowBackToListLabel) {\n <libs_ui-components-buttons-button [label]=\"'i18n_back_to_list'\"\n [classLabel]=\"'lib-ui-font-h6m'\"\n [type]=\"'button-link-primary'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerClose($event)\" />\n }\n @if (configTitle()?.config; as config) {\n <libs_ui-components-popover [config]=\"configTitleComputed()\"\n [type]=\"'text'\"\n [mode]=\"'hover'\"\n [classInclude]=\"'cursor-pointer ' + (config.classInclude || 'text-[var(--libs-ui-color-default)] libs-ui-font-h6m')\"\n [innerHtml]=\"config.content ? (!configTitle()?.ignoreEscapeHtml ? (config.content | LibsUiPipesEscapeHtmlPipe | translate) : (config.content | translate)) : '&mdash;'\"\n (outEvent)=\"handlerPopoverEvent($event)\" />\n }\n @if (configTitle()?.configDescription; as configDescription) {\n <libs_ui-components-popover [config]=\"configDescription.config\"\n [type]=\"'text'\"\n [mode]=\"'hover'\"\n [classInclude]=\"(configDescription.config.classInclude || 'libs-ui-font-h6r text-[#6a7383]')\"\n [innerHtml]=\"configDescription.innerView | LibsUiPipesEscapeHtmlPipe | translate\" />\n }\n </div>\n </div>\n </div>\n @if (isSplitHeaderRatio() && configCenter(); as configCenter) {\n <div class=\"w-[52%] flex items-center justify-center px-[48px]\">\n @if (!configCenter.template) {\n <libs_ui-components-popover type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1\n }\"\n [classInclude]=\"configCenter.classIncludeTitle ?? 'uppercase libs-ui-font-h4s'\"\n [innerHtml]=\"configCenter.title ? (configCenter.title | translate | LibsUiPipesEscapeHtmlPipe) : '&mdash'\" />\n }\n @else {\n <ng-container *ngTemplateOutlet=\"configCenter.template\" />\n }\n </div>\n }\n <div class=\"flex justify-end items-center\"\n [class.columns-4]=\"!isSplitHeaderRatio()\"\n [class.w-[24%]]=\"isSplitHeaderRatio()\">\n @for (item of configRight(); track $index; let last = $last) {\n <div [class.mr-[12px]]=\"!last\">\n @if (item.key === 'button' && item.configButton; as configButton) {\n <libs_ui-components-buttons-button [label]=\"configButton.label || ''\"\n [classLabel]=\"configButton.classLabel || ''\"\n [type]=\"configButton.type || 'button-primary'\"\n [classInclude]=\"configButton.classInclude || ''\"\n [classIconLeft]=\"configButton.classIconLeft || ''\"\n [iconOnlyType]=\"configButton.iconOnlyType || false\"\n [classIconRight]=\"configButton.classIconRight || ''\"\n [popover]=\"configButton.popover || {}\"\n [disable]=\"configButton.disable || disable()\"\n [isPending]=\"configButton.isPending || false\"\n (outClick)=\"handlerClickAction(configButton)\" />\n }\n @if (item.key === 'swicth' && !item.ignoreShowButton && item.configSwicth; as configSwicth) {\n <libs_ui-components-switch [active]=\"configSwicth.active || false\"\n [disable]=\"configSwicth.disable || disable()\"\n (outSwitch)=\"handlerSwitch(configSwicth, $event)\" />\n }\n @if (item.key === 'menu-dropdown' && item.configDropdown; as configDropdown) {\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"2004\"\n [listConfig]=\"configDropdown.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"configDropdown.popoverCustomConfig\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outFunctionsControl)=\"handlerDropdownFunctionControl($event)\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px] {{ configDropdown.classInclude }}'\"\n [classInclude]=\"'p-[7px] libs-ui-border-general'\"\n [type]=\"'button-third'\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n }\n @if (item.key === 'button-dropdown' && item.configButtonDropdown; as configDropdown) {\n <libs_ui-components-buttons-dropdown [applyNow]=\"true\"\n [label]=\"item.configButtonDropdown.label || ' '\"\n [classIconRight]=\"item.configButtonDropdown.classIconRight || ' ' \"\n [classIconLeft]=\"item.configButtonDropdown.classIconLeft || ' '\"\n [typeButton]=\"item.configButtonDropdown.type || 'button-secondary'\"\n [items]=\"item.configButtonDropdown.items || []\"\n [fieldDisplay]=\"item.configButtonDropdown.fieldDisplay\"\n [popupConfig]=\"item.configButtonDropdown.popupConfig || {width:205,maxWidth:408,maxHeight:48,zIndex:100,direction:'bottom'}\"\n (outSelectItem)=\"handlerSelectedButtonDropdownItem($event)\" />\n }\n\n @if (item.key === 'radio-group' && item.configRadioGroup; as configRadioGroup) {\n <libs_ui-components-radio-group [groups]=\"configRadioGroup\"\n [horizontal]=\"true\"\n [typeRadio]=\"'medium'\"\n [ignoreClassMarginLastItem]=\"true\"\n (outChange)=\"handlerChangeRadio($event)\" />\n }\n\n @if (item.key === 'tooltip-button' && item.configTooltipButton; as configTooltipButton) {\n <libs_ui-components-popover [type]=\"configTooltipButton.configTooltip?.type || 'other'\"\n [config]=\"configTooltipButton.configTooltip?.config\">\n <libs_ui-components-buttons-button [type]=\"configTooltipButton.configButton?.type || 'button-third'\"\n [classIconLeft]=\"configTooltipButton.configButton?.classIconLeft || 'libs-ui-icon-more-vertical rotate-[90deg] mr-0'\"\n [label]=\"configTooltipButton.configButton?.label || ''\"\n [iconOnlyType]=\"configTooltipButton.configButton?.iconOnlyType ?? false\"\n [popover]=\"configTooltipButton.configButton?.popover || {}\"\n (outFunctionsControl)=\"handlerFunctionControlTooltipButton($event)\"\n [ignoreStopPropagationEvent]=\"true\"\n [disable]=\"configTooltipButton.configButton?.disable ?? false\" />\n </libs_ui-components-popover>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"libs-ui-components-page_detail-body {{ classIncludeBody() }}\"\n LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"handlerScroll($event)\">\n <ng-content>\n </ng-content>\n </div>\n\n</div>\n", styles: [".libs-ui-components-page_detail{position:absolute;width:100%;height:100vh;left:0;top:0;background-color:#f4f5f7;margin-top:40px}.libs-ui-components-page_detail .libs-ui-components-page_detail-body{padding:0 16px;width:100%;height:100%;overflow-y:auto}\n"] }]
111
+ }] });
112
+
113
+ /**
114
+ * Generated bundle index. Do not edit.
115
+ */
116
+
117
+ export { LibsUiComponentsPagesTemplateDetailComponent };
118
+ //# sourceMappingURL=libs-ui-components-pages-template-detail.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libs-ui-components-pages-template-detail.mjs","sources":["../../../../../../libs-ui/components/pages-template/detail/src/detail.component.ts","../../../../../../libs-ui/components/pages-template/detail/src/detail.component.html","../../../../../../libs-ui/components/pages-template/detail/src/libs-ui-components-pages-template-detail.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, input, model, OnInit, output } from '@angular/core';\nimport { IButton, LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsDropdownComponent } from '@libs-ui/components-buttons-dropdown';\nimport { IDropdownFunctionControlEvent, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { IPopoverFunctionControlEvent, LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { LibsUiComponentsRadioGroupComponent } from '@libs-ui/components-radio-group';\nimport { IRadioEvent } from '@libs-ui/components-radio-single';\nimport { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';\nimport { ISwitch, ISwitchEvent, LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';\nimport { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';\nimport { escapeHtml } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { IPagesTemplateDetailConfigCenter, IPagesTemplateDetailConfigRight, IPagesTemplateDetailConfigTitle } from './interfaces/config.interface';\nimport { IPageDetailFunctionControl } from './interfaces/function-control.interface';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-pages_template-detail',\n templateUrl: './detail.component.html',\n styleUrls: ['./detail.component.scss'],\n standalone: true,\n imports: [\n TranslateModule, NgTemplateOutlet,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsRadioGroupComponent,\n LibsUiComponentsSwitchComponent,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsScrollOverlayDirective,\n LibsUiComponentsButtonsDropdownComponent,\n LibsUiPipesEscapeHtmlPipe\n ]\n})\nexport class LibsUiComponentsPagesTemplateDetailComponent implements OnInit {\n private dropdownFunctionControl!: IDropdownFunctionControlEvent;\n protected configTitleComputed = computed(() => {\n const config = this.configTitle()?.config;\n if (!config) {\n return { content: 'i18n_back_to_list' };\n }\n\n if (!config.content) {\n config.content = 'i18n_back_to_list';\n return config;\n }\n\n return { ...config, content: escapeHtml(config.content) };\n });\n\n readonly zIndex = input<number, number | undefined>(1000, { transform: val => val ?? 1000 });\n readonly configRight = input<Array<IPagesTemplateDetailConfigRight>>();\n readonly configTitle = input<IPagesTemplateDetailConfigTitle>();\n readonly configCenter = input<IPagesTemplateDetailConfigCenter>();\n readonly classIncludeHeader = input<string>();\n readonly classIncludeBody = input<string>();\n readonly disable = model<boolean>(false);\n readonly isSplitHeaderRatio = input<boolean>(); // dùng khi muốn chia header làm 3 phần theo tỉ lệ 24 52 24\n\n readonly outScroll = output<Event>();\n readonly outClose = output<boolean>();\n readonly outSelectedMenuDropdown = output<IEmitSelectKey | undefined>();\n readonly outSelectedButtonDropdown = output<IEmitSelectKey>();\n readonly outFunctionControl = output<IPageDetailFunctionControl>();\n readonly outSelectedRadio = output<IRadioEvent>();\n readonly outStateDisable = output<boolean>();\n readonly outTooltipButtonFunctionControl = output<IPopoverFunctionControlEvent>();\n\n\n ngOnInit() {\n this.outFunctionControl.emit({\n setStateDisable: this.setStateDisable.bind(this)\n });\n }\n\n protected handlerClickAction(event: IButton) {\n if (event && event.action) {\n event.action();\n }\n }\n\n protected async handlerSwitch(event: ISwitch, swicthEvent: ISwitchEvent) {\n if (event && event.action) {\n await event.action(swicthEvent);\n }\n }\n\n protected handlerClose(e: Event) {\n e.stopPropagation();\n this.outClose.emit(true);\n }\n\n protected handlerPopoverEvent(event: TYPE_POPOVER_EVENT) {\n if (event !== 'click') {\n return;\n }\n this.outClose.emit(true);\n }\n\n protected handlerSelectedKey(event?: IEmitSelectKey) {\n this.outSelectedMenuDropdown.emit(event);\n this.dropdownFunctionControl?.reset(); //lỗi chọn lần 2 (chưa reset thì keySelected chưa reset nên không chọn tiếp vào lựa chọn cũ)\n this.dropdownFunctionControl?.removeList();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected handlerSelectedButtonDropdownItem(event: any) {\n this.outSelectedButtonDropdown.emit(event);\n }\n\n protected handlerDropdownFunctionControl(event: IDropdownFunctionControlEvent) {\n this.dropdownFunctionControl = event;\n }\n\n private async setStateDisable(stateDisable: boolean) {\n this.disable.set(stateDisable);\n this.outStateDisable.emit(this.disable());\n }\n\n protected handlerChangeRadio(event: IRadioEvent) {\n this.outSelectedRadio.emit(event);\n }\n\n protected handlerFunctionControlTooltipButton(event: IPopoverFunctionControlEvent) {\n this.outTooltipButtonFunctionControl.emit(event);\n }\n\n protected handlerScroll(event: Event) {\n this.outScroll.emit(event);\n }\n\n}\n","<div class=\"libs-ui-components-page_detail\"\n [style.zIndex]=\"zIndex()\">\n <div [class.row]=\"!isSplitHeaderRatio()\"\n class=\"flex items-center px-[16px] py-[8px] justify-between bg-white libs-ui-border-top-general {{ classIncludeHeader() || '' }}\">\n <div [class.columns-8]=\"!isSplitHeaderRatio()\"\n [class.w-[24%]]=\"isSplitHeaderRatio()\">\n <div class=\"flex items-center\">\n @if (!configTitle()?.ignoreButtonBack) {\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px] mr-[8px] cursor-pointer text-[var(--libs-ui-color-default)]\"\n (click)=\"handlerClose($event)\"></i>\n }\n <div class=\"flex w-full items-center\">\n @if (configTitle()?.isShowBackToListLabel) {\n <libs_ui-components-buttons-button [label]=\"'i18n_back_to_list'\"\n [classLabel]=\"'lib-ui-font-h6m'\"\n [type]=\"'button-link-primary'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerClose($event)\" />\n }\n @if (configTitle()?.config; as config) {\n <libs_ui-components-popover [config]=\"configTitleComputed()\"\n [type]=\"'text'\"\n [mode]=\"'hover'\"\n [classInclude]=\"'cursor-pointer ' + (config.classInclude || 'text-[var(--libs-ui-color-default)] libs-ui-font-h6m')\"\n [innerHtml]=\"config.content ? (!configTitle()?.ignoreEscapeHtml ? (config.content | LibsUiPipesEscapeHtmlPipe | translate) : (config.content | translate)) : '&mdash;'\"\n (outEvent)=\"handlerPopoverEvent($event)\" />\n }\n @if (configTitle()?.configDescription; as configDescription) {\n <libs_ui-components-popover [config]=\"configDescription.config\"\n [type]=\"'text'\"\n [mode]=\"'hover'\"\n [classInclude]=\"(configDescription.config.classInclude || 'libs-ui-font-h6r text-[#6a7383]')\"\n [innerHtml]=\"configDescription.innerView | LibsUiPipesEscapeHtmlPipe | translate\" />\n }\n </div>\n </div>\n </div>\n @if (isSplitHeaderRatio() && configCenter(); as configCenter) {\n <div class=\"w-[52%] flex items-center justify-center px-[48px]\">\n @if (!configCenter.template) {\n <libs_ui-components-popover type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1\n }\"\n [classInclude]=\"configCenter.classIncludeTitle ?? 'uppercase libs-ui-font-h4s'\"\n [innerHtml]=\"configCenter.title ? (configCenter.title | translate | LibsUiPipesEscapeHtmlPipe) : '&mdash'\" />\n }\n @else {\n <ng-container *ngTemplateOutlet=\"configCenter.template\" />\n }\n </div>\n }\n <div class=\"flex justify-end items-center\"\n [class.columns-4]=\"!isSplitHeaderRatio()\"\n [class.w-[24%]]=\"isSplitHeaderRatio()\">\n @for (item of configRight(); track $index; let last = $last) {\n <div [class.mr-[12px]]=\"!last\">\n @if (item.key === 'button' && item.configButton; as configButton) {\n <libs_ui-components-buttons-button [label]=\"configButton.label || ''\"\n [classLabel]=\"configButton.classLabel || ''\"\n [type]=\"configButton.type || 'button-primary'\"\n [classInclude]=\"configButton.classInclude || ''\"\n [classIconLeft]=\"configButton.classIconLeft || ''\"\n [iconOnlyType]=\"configButton.iconOnlyType || false\"\n [classIconRight]=\"configButton.classIconRight || ''\"\n [popover]=\"configButton.popover || {}\"\n [disable]=\"configButton.disable || disable()\"\n [isPending]=\"configButton.isPending || false\"\n (outClick)=\"handlerClickAction(configButton)\" />\n }\n @if (item.key === 'swicth' && !item.ignoreShowButton && item.configSwicth; as configSwicth) {\n <libs_ui-components-switch [active]=\"configSwicth.active || false\"\n [disable]=\"configSwicth.disable || disable()\"\n (outSwitch)=\"handlerSwitch(configSwicth, $event)\" />\n }\n @if (item.key === 'menu-dropdown' && item.configDropdown; as configDropdown) {\n <libs_ui-components-dropdown [isNgContent]=\"true\"\n [zIndex]=\"2004\"\n [listConfig]=\"configDropdown.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"configDropdown.popoverCustomConfig\"\n (outSelectKey)=\"handlerSelectedKey($event)\"\n (outFunctionsControl)=\"handlerDropdownFunctionControl($event)\">\n <libs_ui-components-buttons-button [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px] {{ configDropdown.classInclude }}'\"\n [classInclude]=\"'p-[7px] libs-ui-border-general'\"\n [type]=\"'button-third'\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n }\n @if (item.key === 'button-dropdown' && item.configButtonDropdown; as configDropdown) {\n <libs_ui-components-buttons-dropdown [applyNow]=\"true\"\n [label]=\"item.configButtonDropdown.label || ' '\"\n [classIconRight]=\"item.configButtonDropdown.classIconRight || ' ' \"\n [classIconLeft]=\"item.configButtonDropdown.classIconLeft || ' '\"\n [typeButton]=\"item.configButtonDropdown.type || 'button-secondary'\"\n [items]=\"item.configButtonDropdown.items || []\"\n [fieldDisplay]=\"item.configButtonDropdown.fieldDisplay\"\n [popupConfig]=\"item.configButtonDropdown.popupConfig || {width:205,maxWidth:408,maxHeight:48,zIndex:100,direction:'bottom'}\"\n (outSelectItem)=\"handlerSelectedButtonDropdownItem($event)\" />\n }\n\n @if (item.key === 'radio-group' && item.configRadioGroup; as configRadioGroup) {\n <libs_ui-components-radio-group [groups]=\"configRadioGroup\"\n [horizontal]=\"true\"\n [typeRadio]=\"'medium'\"\n [ignoreClassMarginLastItem]=\"true\"\n (outChange)=\"handlerChangeRadio($event)\" />\n }\n\n @if (item.key === 'tooltip-button' && item.configTooltipButton; as configTooltipButton) {\n <libs_ui-components-popover [type]=\"configTooltipButton.configTooltip?.type || 'other'\"\n [config]=\"configTooltipButton.configTooltip?.config\">\n <libs_ui-components-buttons-button [type]=\"configTooltipButton.configButton?.type || 'button-third'\"\n [classIconLeft]=\"configTooltipButton.configButton?.classIconLeft || 'libs-ui-icon-more-vertical rotate-[90deg] mr-0'\"\n [label]=\"configTooltipButton.configButton?.label || ''\"\n [iconOnlyType]=\"configTooltipButton.configButton?.iconOnlyType ?? false\"\n [popover]=\"configTooltipButton.configButton?.popover || {}\"\n (outFunctionsControl)=\"handlerFunctionControlTooltipButton($event)\"\n [ignoreStopPropagationEvent]=\"true\"\n [disable]=\"configTooltipButton.configButton?.disable ?? false\" />\n </libs_ui-components-popover>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"libs-ui-components-page_detail-body {{ classIncludeBody() }}\"\n LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"handlerScroll($event)\">\n <ng-content>\n </ng-content>\n </div>\n\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './detail.component';
2
+ export * from './interfaces/config.interface';
3
+ export * from './interfaces/function-control.interface';
@@ -0,0 +1,40 @@
1
+ import { TemplateRef } from "@angular/core";
2
+ import { TYPE_TEMPLATE_REF } from "@libs-ui/interfaces-types";
3
+ import { ISwitch } from "@libs-ui/components-switch";
4
+ import { IButton } from "@libs-ui/components-buttons-button";
5
+ import { IRadioGroupItem } from "@libs-ui/components-radio-group";
6
+ import { IDropdown } from "@libs-ui/components-dropdown";
7
+ import { IPopover, IPopoverOverlay } from "@libs-ui/components-popover";
8
+ import { IButtonDropdown } from "@libs-ui/components-buttons-dropdown";
9
+ export type ButtonKey = 'button' | 'swicth' | 'radio-group' | 'circle-and-number' | 'button-dropdown' | 'menu-dropdown' | 'tooltip-button' | 'tooltip';
10
+ export interface IPagesTemplateDetailConfigRight {
11
+ key: ButtonKey;
12
+ classInclude?: string;
13
+ disable?: boolean;
14
+ isPending?: boolean;
15
+ configButton?: IButton;
16
+ configButtonDropdown?: IButtonDropdown;
17
+ configRadioGroup?: Array<IRadioGroupItem>;
18
+ configSwicth?: ISwitch;
19
+ ignoreShowButton?: boolean;
20
+ configDropdown?: IDropdown;
21
+ configTooltipButton?: {
22
+ configTooltip?: IPopover;
23
+ configButton?: IButton;
24
+ };
25
+ }
26
+ export interface IPagesTemplateDetailConfigTitle extends IPopover {
27
+ ignoreButtonBack?: boolean;
28
+ ignoreEscapeHtml?: boolean;
29
+ isShowArrowBegin?: boolean;
30
+ isShowBackToListLabel?: boolean;
31
+ configDescription?: {
32
+ innerView?: string;
33
+ config: IPopoverOverlay;
34
+ };
35
+ }
36
+ export interface IPagesTemplateDetailConfigCenter {
37
+ title?: string;
38
+ classIncludeTitle?: string;
39
+ template?: TemplateRef<TYPE_TEMPLATE_REF> | undefined;
40
+ }
@@ -0,0 +1,3 @@
1
+ export interface IPageDetailFunctionControl {
2
+ setStateDisable: (stateDisable: boolean) => Promise<void>;
3
+ }
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@libs-ui/components-pages-template-detail",
3
+ "version": "0.2.306.1",
4
+ "peerDependencies": {
5
+ "@angular/common": ">=18.0.0",
6
+ "@angular/core": ">=18.0.0",
7
+ "@libs-ui/components-buttons-button": "0.2.306.1",
8
+ "@libs-ui/components-buttons-dropdown": "0.2.306.1",
9
+ "@libs-ui/components-dropdown": "0.2.306.1",
10
+ "@libs-ui/components-popover": "0.2.306.1",
11
+ "@libs-ui/components-radio-group": "0.2.306.1",
12
+ "@libs-ui/components-radio-single": "0.2.306.1",
13
+ "@libs-ui/components-scroll-overlay": "0.2.306.1",
14
+ "@libs-ui/components-switch": "0.2.306.1",
15
+ "@libs-ui/pipes-escape-html": "0.2.306.1",
16
+ "@libs-ui/utils": "0.2.306.1",
17
+ "@ngx-translate/core": "^15.0.0",
18
+ "@libs-ui/interfaces-types": "0.2.306.1"
19
+ },
20
+ "sideEffects": false,
21
+ "module": "fesm2022/libs-ui-components-pages-template-detail.mjs",
22
+ "typings": "index.d.ts",
23
+ "exports": {
24
+ "./package.json": {
25
+ "default": "./package.json"
26
+ },
27
+ ".": {
28
+ "types": "./index.d.ts",
29
+ "esm2022": "./esm2022/libs-ui-components-pages-template-detail.mjs",
30
+ "esm": "./esm2022/libs-ui-components-pages-template-detail.mjs",
31
+ "default": "./fesm2022/libs-ui-components-pages-template-detail.mjs"
32
+ }
33
+ },
34
+ "dependencies": {
35
+ "tslib": "^2.3.0"
36
+ }
37
+ }