@libs-ui/components-pages-template-full-screen 0.2.356-1 → 0.2.356-11

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.
@@ -1,16 +1,154 @@
1
- import { NgTemplateOutlet } from '@angular/common';
1
+ import { NgComponentOutlet, AsyncPipe, NgTemplateOutlet } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { signal, input, output, Component } from '@angular/core';
3
+ import { input, output, signal, inject, DestroyRef, computed, ChangeDetectionStrategy, Component } from '@angular/core';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
5
  import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
5
6
  import { LibsUiComponentsButtonsStatusComponent } from '@libs-ui/components-buttons-status';
6
7
  import { LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';
7
8
  import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
8
9
  import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
10
+ import { LibsUiComponentsSkeletonComponent } from '@libs-ui/components-skeleton';
9
11
  import { LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';
12
+ import { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';
10
13
  import { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';
11
- import { uuid, getDayjs, UtilsCommunicateMicroKeyGlobal, UtilsCommunicateMicro } from '@libs-ui/utils';
14
+ import { uuid, get, UtilsCommunicateMicroKeyGlobal, getDayjs, UtilsCommunicateMicro } from '@libs-ui/utils';
12
15
  import { TranslateModule } from '@ngx-translate/core';
13
- import { Subject, interval, takeUntil } from 'rxjs';
16
+ import { interval, Subject, takeUntil } from 'rxjs';
17
+
18
+ /**
19
+ * Full Screen Template V2 — Kế thừa toàn bộ V1, bổ sung lazy loading cho body.
20
+ * Header giữ nguyên 100%. Body hỗ trợ dynamic component injection với skeleton tự động.
21
+ */
22
+ class LibsUiComponentsPagesTemplateFullScreenV2Component {
23
+ // #region --- INPUTS (kế thừa từ V1) ---
24
+ classHeaderInclude = input();
25
+ labelLeft = input('i18n_back_to_list', { transform: (val) => val ?? 'i18n_back_to_list' });
26
+ title = input();
27
+ buttonCenter = input();
28
+ buttonRight = input();
29
+ hasEdit = input(false);
30
+ menuDropDownConfigs = input();
31
+ zIndex = input(1000, { transform: (val) => val ?? 1000 });
32
+ ignoreClosePageFullEvent = input(false, { transform: (val) => val ?? false });
33
+ ignoreBackgroundColor = input();
34
+ divideClassHeader = input();
35
+ centerTemplate = input();
36
+ templateRight = input();
37
+ leftTemplate = input();
38
+ disable = input(false, { transform: (val) => val ?? false });
39
+ // #endregion
40
+ // #region --- INPUTS (mới trong V2) ---
41
+ /** Config lazy load component vào body. Nếu không truyền getComponentOutlet → tự động dùng ng-content. */
42
+ bodyConfig = input({}, { transform: (v) => v || {} });
43
+ // #endregion
44
+ // #region --- OUTPUTS ---
45
+ outClose = output();
46
+ outEdit = output();
47
+ outSelectedMenuDropdown = output();
48
+ outClickButton = output();
49
+ // #endregion
50
+ // #region --- INTERNAL STATE ---
51
+ idOverlay = signal(uuid()).asReadonly();
52
+ destroyRef = inject(DestroyRef);
53
+ functionControlMenu;
54
+ // #endregion
55
+ // #region --- COMPUTED ---
56
+ /** State reactive để truyền vào component outlet */
57
+ sectionData = computed(() => ({
58
+ disable: this.disable(),
59
+ }));
60
+ /** Skeleton body — fallback về config mặc định nếu không được truyền */
61
+ resolvedSkeletonBody = computed(() => {
62
+ return (get(this.bodyConfig, 'skeletonConfig') ?? {
63
+ repeat: 3,
64
+ styleMarginBottom: 16,
65
+ rows: [{ item: { classInclude: 'w-full h-[120px] rounded-[8px]' } }],
66
+ });
67
+ });
68
+ // #endregion
69
+ ngOnInit() {
70
+ if (!this.ignoreClosePageFullEvent()) {
71
+ const data = {
72
+ type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
73
+ response: {
74
+ message: 'open',
75
+ state: true,
76
+ idOverlay: this.idOverlay(),
77
+ timeLiveUpdate: getDayjs().unix(),
78
+ ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,
79
+ },
80
+ };
81
+ UtilsCommunicateMicro.PostMessageToParent(data);
82
+ if (!UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL) {
83
+ interval(2000)
84
+ .pipe(takeUntilDestroyed(this.destroyRef))
85
+ .subscribe(() => {
86
+ data.response.timeLiveUpdate = getDayjs().unix();
87
+ UtilsCommunicateMicro.PostMessageToParent(data);
88
+ });
89
+ }
90
+ }
91
+ }
92
+ // #region --- EVENT HANDLERS ---
93
+ handlerEdit() {
94
+ this.outEdit.emit();
95
+ }
96
+ cancel() {
97
+ this.outClose.emit();
98
+ }
99
+ async handlerClickButton(button) {
100
+ if (button && button.action) {
101
+ await button.action();
102
+ }
103
+ this.outClickButton.emit(button);
104
+ }
105
+ async handlerSwitch(event, button) {
106
+ if (button && button.action) {
107
+ await button.action(event);
108
+ }
109
+ }
110
+ handlerSelectedKey(event) {
111
+ this.outSelectedMenuDropdown.emit(event);
112
+ this.functionControlMenu?.reset();
113
+ }
114
+ handlerControlDropdownMenu(event) {
115
+ this.functionControlMenu = event;
116
+ }
117
+ // #endregion
118
+ ngOnDestroy() {
119
+ if (!this.ignoreClosePageFullEvent()) {
120
+ const data = {
121
+ type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,
122
+ response: {
123
+ message: 'close',
124
+ state: false,
125
+ idOverlay: this.idOverlay(),
126
+ },
127
+ };
128
+ UtilsCommunicateMicro.PostMessageToParent(data);
129
+ }
130
+ }
131
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPagesTemplateFullScreenV2Component, deps: [], target: i0.ɵɵFactoryTarget.Component });
132
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPagesTemplateFullScreenV2Component, isStandalone: true, selector: "libs_ui-components-pages_template_full_screen_v2", inputs: { classHeaderInclude: { classPropertyName: "classHeaderInclude", publicName: "classHeaderInclude", isSignal: true, isRequired: false, transformFunction: null }, labelLeft: { classPropertyName: "labelLeft", publicName: "labelLeft", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, buttonCenter: { classPropertyName: "buttonCenter", publicName: "buttonCenter", isSignal: true, isRequired: false, transformFunction: null }, buttonRight: { classPropertyName: "buttonRight", publicName: "buttonRight", isSignal: true, isRequired: false, transformFunction: null }, hasEdit: { classPropertyName: "hasEdit", publicName: "hasEdit", isSignal: true, isRequired: false, transformFunction: null }, menuDropDownConfigs: { classPropertyName: "menuDropDownConfigs", publicName: "menuDropDownConfigs", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, ignoreClosePageFullEvent: { classPropertyName: "ignoreClosePageFullEvent", publicName: "ignoreClosePageFullEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreBackgroundColor: { classPropertyName: "ignoreBackgroundColor", publicName: "ignoreBackgroundColor", isSignal: true, isRequired: false, transformFunction: null }, divideClassHeader: { classPropertyName: "divideClassHeader", publicName: "divideClassHeader", isSignal: true, isRequired: false, transformFunction: null }, centerTemplate: { classPropertyName: "centerTemplate", publicName: "centerTemplate", isSignal: true, isRequired: false, transformFunction: null }, templateRight: { classPropertyName: "templateRight", publicName: "templateRight", isSignal: true, isRequired: false, transformFunction: null }, leftTemplate: { classPropertyName: "leftTemplate", publicName: "leftTemplate", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, bodyConfig: { classPropertyName: "bodyConfig", publicName: "bodyConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outClose: "outClose", outEdit: "outEdit", outSelectedMenuDropdown: "outSelectedMenuDropdown", outClickButton: "outClickButton" }, ngImport: i0, template: "<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <!-- ===================== HEADER (gi\u1EEF nguy\u00EAn 100% t\u1EEB V1) ===================== -->\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, zIndex: zIndex() + 1 }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{ config: { content: 'i18n_4x_other_operations' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n\n <!-- ===================== BODY (V2: Lazy Load ho\u1EB7c ng-content) ===================== -->\n @if (bodyConfig().getComponentOutlet; as getBodyComponentOutlet) {\n <!-- Lazy load mode -->\n <div [class]=\"'libs-ui-components-page_full-body ' + (bodyConfig().classInclude || '')\">\n @let constHtmlCompBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: getBodyComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @let constHtmlInputsBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: bodyConfig().getDataComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @if (constHtmlCompBody) {\n @defer {\n <ng-container *ngComponentOutlet=\"constHtmlCompBody; inputs: constHtmlInputsBody\" />\n } @loading {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n } @else {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n </div>\n }\n</div>\n", styles: ["@-webkit-keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:0;opacity:1}}.libs-ui-components-page_full{position:absolute;width:100vw;height:100vh;left:0;top:0;display:flex;flex-direction:column;animation:animation-slide-to-left ease-out .3s}.libs-ui-components-page_full .libs-ui-components-page_full-header{height:50px;padding:14px 16px;border-bottom:solid 1px #e6e7ea;background-color:#fff;width:100%;display:flex;align-items:center}.libs-ui-components-page_full .libs-ui-components-page_full-body{height:100%}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { 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", "dropdownTemplateRefNotSearchNoData", "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: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { 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: LibsUiComponentsButtonsStatusComponent, selector: "libs_ui-components-buttons-status", inputs: ["config"] }, { 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: LibsUiComponentsSkeletonComponent, selector: "libs_ui-components-skeleton", inputs: ["config"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [NgComponentOutlet]] });
133
+ }
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPagesTemplateFullScreenV2Component, decorators: [{
135
+ type: Component,
136
+ args: [{ selector: 'libs_ui-components-pages_template_full_screen_v2', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
137
+ AsyncPipe,
138
+ NgComponentOutlet,
139
+ NgTemplateOutlet,
140
+ TranslateModule,
141
+ LibsUiComponentsDropdownComponent,
142
+ LibsUiComponentsSwitchComponent,
143
+ LibsUiComponentsButtonsButtonComponent,
144
+ LibsUiComponentsButtonsStatusComponent,
145
+ LibsUiComponentsPopoverComponent,
146
+ LibsUiComponentsSkeletonComponent,
147
+ LibsUiPipesCallFunctionInTemplatePipe,
148
+ LibsUiPipesEscapeHtmlPipe,
149
+ LibsUiComponentsLabelComponent,
150
+ ], template: "<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <!-- ===================== HEADER (gi\u1EEF nguy\u00EAn 100% t\u1EEB V1) ===================== -->\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, zIndex: zIndex() + 1 }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{ config: { content: 'i18n_4x_other_operations' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n\n <!-- ===================== BODY (V2: Lazy Load ho\u1EB7c ng-content) ===================== -->\n @if (bodyConfig().getComponentOutlet; as getBodyComponentOutlet) {\n <!-- Lazy load mode -->\n <div [class]=\"'libs-ui-components-page_full-body ' + (bodyConfig().classInclude || '')\">\n @let constHtmlCompBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: getBodyComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @let constHtmlInputsBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: bodyConfig().getDataComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @if (constHtmlCompBody) {\n @defer {\n <ng-container *ngComponentOutlet=\"constHtmlCompBody; inputs: constHtmlInputsBody\" />\n } @loading {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n } @else {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n </div>\n }\n</div>\n", styles: ["@-webkit-keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:0;opacity:1}}.libs-ui-components-page_full{position:absolute;width:100vw;height:100vh;left:0;top:0;display:flex;flex-direction:column;animation:animation-slide-to-left ease-out .3s}.libs-ui-components-page_full .libs-ui-components-page_full-header{height:50px;padding:14px 16px;border-bottom:solid 1px #e6e7ea;background-color:#fff;width:100%;display:flex;align-items:center}.libs-ui-components-page_full .libs-ui-components-page_full-body{height:100%}\n"] }]
151
+ }] });
14
152
 
15
153
  class LibsUiComponentsPagesTemplateFullScreenComponent {
16
154
  idOverlay = signal(uuid());
@@ -45,6 +183,7 @@ class LibsUiComponentsPagesTemplateFullScreenComponent {
45
183
  state: true,
46
184
  idOverlay: this.idOverlay(),
47
185
  timeLiveUpdate: getDayjs().unix(),
186
+ ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,
48
187
  },
49
188
  };
50
189
  UtilsCommunicateMicro.PostMessageToParent(data);
@@ -99,7 +238,7 @@ class LibsUiComponentsPagesTemplateFullScreenComponent {
99
238
  }
100
239
  }
101
240
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPagesTemplateFullScreenComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
102
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPagesTemplateFullScreenComponent, isStandalone: true, selector: "libs_ui-components-pages_template_full_screen", inputs: { classHeaderInclude: { classPropertyName: "classHeaderInclude", publicName: "classHeaderInclude", isSignal: true, isRequired: false, transformFunction: null }, labelLeft: { classPropertyName: "labelLeft", publicName: "labelLeft", isSignal: true, isRequired: false, transformFunction: null }, classBodyInclude: { classPropertyName: "classBodyInclude", publicName: "classBodyInclude", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, buttonCenter: { classPropertyName: "buttonCenter", publicName: "buttonCenter", isSignal: true, isRequired: false, transformFunction: null }, buttonRight: { classPropertyName: "buttonRight", publicName: "buttonRight", isSignal: true, isRequired: false, transformFunction: null }, hasEdit: { classPropertyName: "hasEdit", publicName: "hasEdit", isSignal: true, isRequired: false, transformFunction: null }, menuDropDownConfigs: { classPropertyName: "menuDropDownConfigs", publicName: "menuDropDownConfigs", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, ignoreClosePageFullEvent: { classPropertyName: "ignoreClosePageFullEvent", publicName: "ignoreClosePageFullEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreBackgroundColor: { classPropertyName: "ignoreBackgroundColor", publicName: "ignoreBackgroundColor", isSignal: true, isRequired: false, transformFunction: null }, divideClassHeader: { classPropertyName: "divideClassHeader", publicName: "divideClassHeader", isSignal: true, isRequired: false, transformFunction: null }, centerTemplate: { classPropertyName: "centerTemplate", publicName: "centerTemplate", isSignal: true, isRequired: false, transformFunction: null }, templateRight: { classPropertyName: "templateRight", publicName: "templateRight", isSignal: true, isRequired: false, transformFunction: null }, leftTemplate: { classPropertyName: "leftTemplate", publicName: "leftTemplate", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outClose: "outClose", outEdit: "outEdit", outSelectedMenuDropdown: "outSelectedMenuDropdown", outClickButton: "outClickButton" }, providers: [], ngImport: i0, template: "<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1,\n }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n <!-- th\u00EAm \u0111\u01B0\u1EDDng ph\u00E2n c\u00E1ch -->\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{\n config: {\n content: 'i18n_4x_other_operations',\n },\n }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n <div [class]=\"'libs-ui-components-page_full-body ' + classBodyInclude()\">\n <ng-content />\n </div>\n</div>\n", styles: ["@-webkit-keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:0;opacity:1}}.libs-ui-components-page_full{position:absolute;width:100vw;height:100vh;left:0;top:0;display:flex;flex-direction:column;animation:animation-slide-to-left ease-out .3s}.libs-ui-components-page_full .libs-ui-components-page_full-header{height:50px;padding:14px 16px;border-bottom:solid 1px #e6e7ea;background-color:#fff;width:100%;display:flex;align-items:center}.libs-ui-components-page_full .libs-ui-components-page_full-body{height:100%}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { 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: LibsUiComponentsButtonsStatusComponent, selector: "libs_ui-components-buttons-status", inputs: ["config"] }, { 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: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }] });
241
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPagesTemplateFullScreenComponent, isStandalone: true, selector: "libs_ui-components-pages_template_full_screen", inputs: { classHeaderInclude: { classPropertyName: "classHeaderInclude", publicName: "classHeaderInclude", isSignal: true, isRequired: false, transformFunction: null }, labelLeft: { classPropertyName: "labelLeft", publicName: "labelLeft", isSignal: true, isRequired: false, transformFunction: null }, classBodyInclude: { classPropertyName: "classBodyInclude", publicName: "classBodyInclude", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, buttonCenter: { classPropertyName: "buttonCenter", publicName: "buttonCenter", isSignal: true, isRequired: false, transformFunction: null }, buttonRight: { classPropertyName: "buttonRight", publicName: "buttonRight", isSignal: true, isRequired: false, transformFunction: null }, hasEdit: { classPropertyName: "hasEdit", publicName: "hasEdit", isSignal: true, isRequired: false, transformFunction: null }, menuDropDownConfigs: { classPropertyName: "menuDropDownConfigs", publicName: "menuDropDownConfigs", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, ignoreClosePageFullEvent: { classPropertyName: "ignoreClosePageFullEvent", publicName: "ignoreClosePageFullEvent", isSignal: true, isRequired: false, transformFunction: null }, ignoreBackgroundColor: { classPropertyName: "ignoreBackgroundColor", publicName: "ignoreBackgroundColor", isSignal: true, isRequired: false, transformFunction: null }, divideClassHeader: { classPropertyName: "divideClassHeader", publicName: "divideClassHeader", isSignal: true, isRequired: false, transformFunction: null }, centerTemplate: { classPropertyName: "centerTemplate", publicName: "centerTemplate", isSignal: true, isRequired: false, transformFunction: null }, templateRight: { classPropertyName: "templateRight", publicName: "templateRight", isSignal: true, isRequired: false, transformFunction: null }, leftTemplate: { classPropertyName: "leftTemplate", publicName: "leftTemplate", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outClose: "outClose", outEdit: "outEdit", outSelectedMenuDropdown: "outSelectedMenuDropdown", outClickButton: "outClickButton" }, providers: [], ngImport: i0, template: "<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1,\n }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n <!-- th\u00EAm \u0111\u01B0\u1EDDng ph\u00E2n c\u00E1ch -->\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{\n config: {\n content: 'i18n_4x_other_operations',\n },\n }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n <div [class]=\"'libs-ui-components-page_full-body ' + classBodyInclude()\">\n <ng-content />\n </div>\n</div>\n", styles: ["@-webkit-keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:12px;opacity:1}}@keyframes animation-slide-to-left{0%{right:-200px;opacity:0}to{right:0;opacity:1}}.libs-ui-components-page_full{position:absolute;width:100vw;height:100vh;left:0;top:0;display:flex;flex-direction:column;animation:animation-slide-to-left ease-out .3s}.libs-ui-components-page_full .libs-ui-components-page_full-header{height:50px;padding:14px 16px;border-bottom:solid 1px #e6e7ea;background-color:#fff;width:100%;display:flex;align-items:center}.libs-ui-components-page_full .libs-ui-components-page_full-body{height:100%}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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", "dropdownTemplateRefNotSearchNoData", "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: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { 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: LibsUiComponentsButtonsStatusComponent, selector: "libs_ui-components-buttons-status", inputs: ["config"] }, { 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: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }] });
103
242
  }
104
243
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPagesTemplateFullScreenComponent, decorators: [{
105
244
  type: Component,
@@ -120,5 +259,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
120
259
  * Generated bundle index. Do not edit.
121
260
  */
122
261
 
123
- export { LibsUiComponentsPagesTemplateFullScreenComponent };
262
+ export { LibsUiComponentsPagesTemplateFullScreenComponent, LibsUiComponentsPagesTemplateFullScreenV2Component };
124
263
  //# sourceMappingURL=libs-ui-components-pages-template-full-screen.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-pages-template-full-screen.mjs","sources":["../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen.component.ts","../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen.component.html","../../../../../../libs-ui/components/pages-template/full-screen/src/libs-ui-components-pages-template-full-screen.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport { Component, input, OnDestroy, OnInit, output, signal, TemplateRef } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsStatusComponent } from '@libs-ui/components-buttons-status';\nimport { IDropdown, IDropdownFunctionControlEvent, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { ISwitchEvent, LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';\nimport { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';\nimport { getDayjs, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { interval, Subject, takeUntil } from 'rxjs';\nimport { IPagesTemplateFullScreenButton } from './interfaces/config.interface';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-pages_template_full_screen',\n templateUrl: './full-screen.component.html',\n styleUrls: ['./full-screen.component.scss'],\n standalone: true,\n imports: [\n TranslateModule,\n NgTemplateOutlet,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsSwitchComponent,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsButtonsStatusComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiPipesEscapeHtmlPipe,\n LibsUiComponentsLabelComponent,\n ],\n providers: [],\n})\nexport class LibsUiComponentsPagesTemplateFullScreenComponent implements OnInit, OnDestroy {\n private idOverlay = signal<string>(uuid());\n private functionControlMenu: IDropdownFunctionControlEvent | undefined;\n private onDestroy = new Subject<void>();\n\n readonly classHeaderInclude = input<string>();\n readonly labelLeft = input<string, string | undefined>('i18n_back_to_list', { transform: (val) => val ?? 'i18n_back_to_list' });\n readonly classBodyInclude = input<string>();\n readonly title = input<string>();\n readonly buttonCenter = input<Array<IPagesTemplateFullScreenButton> | undefined>();\n readonly buttonRight = input<Array<IPagesTemplateFullScreenButton>>();\n readonly hasEdit = input<boolean>(false);\n readonly menuDropDownConfigs = input<IDropdown>();\n readonly zIndex = input<number, number | undefined>(1000, { transform: (val) => val ?? 1000 });\n readonly ignoreClosePageFullEvent = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly ignoreBackgroundColor = input<boolean>();\n readonly divideClassHeader = input<{ classButtonCancel: string; classButtonCenter: string; classButtonRight: string } | undefined>();\n readonly centerTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly templateRight = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly leftTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly disable = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n\n readonly outClose = output<void>();\n readonly outEdit = output<void>();\n readonly outSelectedMenuDropdown = output<IEmitSelectKey | undefined>();\n readonly outClickButton = output<IPagesTemplateFullScreenButton>();\n\n ngOnInit(): void {\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'open',\n state: true,\n idOverlay: this.idOverlay(),\n timeLiveUpdate: getDayjs().unix(),\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n\n if (UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL) {\n return;\n }\n\n interval(2000)\n .pipe(takeUntil(this.onDestroy))\n .subscribe(() => {\n data.response.timeLiveUpdate = getDayjs().unix();\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n });\n }\n }\n\n protected handlerEdit() {\n this.outEdit.emit();\n }\n\n protected cancel() {\n this.outClose.emit();\n }\n\n protected async handlerClickButton(button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action();\n }\n this.outClickButton.emit(button);\n }\n\n protected async handlerSwitch(event: ISwitchEvent, button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action(event);\n }\n }\n\n protected handlerSelectedKey(event: IEmitSelectKey | undefined) {\n this.outSelectedMenuDropdown.emit(event);\n this.functionControlMenu?.reset();\n }\n\n protected handlerControlDropdownMenu(event: IDropdownFunctionControlEvent) {\n this.functionControlMenu = event;\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'close',\n state: false,\n idOverlay: this.idOverlay(),\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n }\n}\n","<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1,\n }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n <!-- thêm đường phân cách -->\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{\n config: {\n content: 'i18n_4x_other_operations',\n },\n }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n <div [class]=\"'libs-ui-components-page_full-body ' + classBodyInclude()\">\n <ng-content />\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-pages-template-full-screen.mjs","sources":["../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen-v2/full-screen-v2.component.ts","../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen-v2/full-screen-v2.component.html","../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen.component.ts","../../../../../../libs-ui/components/pages-template/full-screen/src/full-screen.component.html","../../../../../../libs-ui/components/pages-template/full-screen/src/libs-ui-components-pages-template-full-screen.ts"],"sourcesContent":["import { AsyncPipe, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, input, OnDestroy, OnInit, output, Signal, signal, TemplateRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsStatusComponent } from '@libs-ui/components-buttons-status';\nimport { IDropdown, IDropdownFunctionControlEvent, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { ISkeletonConfig, LibsUiComponentsSkeletonComponent } from '@libs-ui/components-skeleton';\nimport { ISwitchEvent, LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';\nimport { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiPipesCallFunctionInTemplatePipe } from '@libs-ui/pipes-call-function-in-template';\nimport { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';\nimport { get, getDayjs, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { interval } from 'rxjs';\nimport { IPagesTemplateFullScreenButton } from '../interfaces/config.interface';\nimport { IFullScreenV2BodyConfig, IFullScreenV2SectionData } from './interfaces/full-screen-v2.interface';\n\n/**\n * Full Screen Template V2 — Kế thừa toàn bộ V1, bổ sung lazy loading cho body.\n * Header giữ nguyên 100%. Body hỗ trợ dynamic component injection với skeleton tự động.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-pages_template_full_screen_v2',\n templateUrl: './full-screen-v2.component.html',\n styleUrls: ['./full-screen-v2.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgComponentOutlet,\n NgTemplateOutlet,\n TranslateModule,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsSwitchComponent,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsButtonsStatusComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsSkeletonComponent,\n LibsUiPipesCallFunctionInTemplatePipe,\n LibsUiPipesEscapeHtmlPipe,\n LibsUiComponentsLabelComponent,\n ],\n})\nexport class LibsUiComponentsPagesTemplateFullScreenV2Component implements OnInit, OnDestroy {\n // #region --- INPUTS (kế thừa từ V1) ---\n readonly classHeaderInclude = input<string>();\n readonly labelLeft = input<string, string | undefined>('i18n_back_to_list', { transform: (val) => val ?? 'i18n_back_to_list' });\n readonly title = input<string>();\n readonly buttonCenter = input<Array<IPagesTemplateFullScreenButton> | undefined>();\n readonly buttonRight = input<Array<IPagesTemplateFullScreenButton>>();\n readonly hasEdit = input<boolean>(false);\n readonly menuDropDownConfigs = input<IDropdown>();\n readonly zIndex = input<number, number | undefined>(1000, { transform: (val) => val ?? 1000 });\n readonly ignoreClosePageFullEvent = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly ignoreBackgroundColor = input<boolean>();\n readonly divideClassHeader = input<{ classButtonCancel: string; classButtonCenter: string; classButtonRight: string } | undefined>();\n readonly centerTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly templateRight = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly leftTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly disable = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n // #endregion\n\n // #region --- INPUTS (mới trong V2) ---\n /** Config lazy load component vào body. Nếu không truyền getComponentOutlet → tự động dùng ng-content. */\n readonly bodyConfig = input<IFullScreenV2BodyConfig, IFullScreenV2BodyConfig | undefined>({}, { transform: (v) => v || {} });\n // #endregion\n\n // #region --- OUTPUTS ---\n readonly outClose = output<void>();\n readonly outEdit = output<void>();\n readonly outSelectedMenuDropdown = output<IEmitSelectKey | undefined>();\n readonly outClickButton = output<IPagesTemplateFullScreenButton>();\n // #endregion\n\n // #region --- INTERNAL STATE ---\n private readonly idOverlay = signal<string>(uuid()).asReadonly();\n private readonly destroyRef = inject(DestroyRef);\n private functionControlMenu: IDropdownFunctionControlEvent | undefined;\n // #endregion\n\n // #region --- COMPUTED ---\n /** State reactive để truyền vào component outlet */\n protected readonly sectionData = computed<IFullScreenV2SectionData>(() => ({\n disable: this.disable(),\n }));\n\n /** Skeleton body — fallback về config mặc định nếu không được truyền */\n protected readonly resolvedSkeletonBody: Signal<ISkeletonConfig> = computed(() => {\n return (\n get(this.bodyConfig, 'skeletonConfig') ?? {\n repeat: 3,\n styleMarginBottom: 16,\n rows: [{ item: { classInclude: 'w-full h-[120px] rounded-[8px]' } }],\n }\n );\n });\n // #endregion\n\n ngOnInit(): void {\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'open',\n state: true,\n idOverlay: this.idOverlay(),\n timeLiveUpdate: getDayjs().unix(),\n ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n\n if (!UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL) {\n interval(2000)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n data.response.timeLiveUpdate = getDayjs().unix();\n UtilsCommunicateMicro.PostMessageToParent(data);\n });\n }\n }\n }\n\n // #region --- EVENT HANDLERS ---\n protected handlerEdit() {\n this.outEdit.emit();\n }\n\n protected cancel() {\n this.outClose.emit();\n }\n\n protected async handlerClickButton(button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action();\n }\n this.outClickButton.emit(button);\n }\n\n protected async handlerSwitch(event: ISwitchEvent, button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action(event);\n }\n }\n\n protected handlerSelectedKey(event: IEmitSelectKey | undefined) {\n this.outSelectedMenuDropdown.emit(event);\n this.functionControlMenu?.reset();\n }\n\n protected handlerControlDropdownMenu(event: IDropdownFunctionControlEvent) {\n this.functionControlMenu = event;\n }\n // #endregion\n\n ngOnDestroy(): void {\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'close',\n state: false,\n idOverlay: this.idOverlay(),\n },\n };\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n }\n}\n","<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <!-- ===================== HEADER (giữ nguyên 100% từ V1) ===================== -->\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{ maxWidth: 250, zIndex: zIndex() + 1 }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{ config: { content: 'i18n_4x_other_operations' } }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n\n <!-- ===================== BODY (V2: Lazy Load hoặc ng-content) ===================== -->\n @if (bodyConfig().getComponentOutlet; as getBodyComponentOutlet) {\n <!-- Lazy load mode -->\n <div [class]=\"'libs-ui-components-page_full-body ' + (bodyConfig().classInclude || '')\">\n @let constHtmlCompBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: getBodyComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @let constHtmlInputsBody = undefined | LibsUiPipesCallFunctionInTemplatePipe: bodyConfig().getDataComponentOutlet : sectionData() : null : { valueIsEmpty: null } | async;\n @if (constHtmlCompBody) {\n @defer {\n <ng-container *ngComponentOutlet=\"constHtmlCompBody; inputs: constHtmlInputsBody\" />\n } @loading {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n } @else {\n <libs_ui-components-skeleton [config]=\"resolvedSkeletonBody()\" />\n }\n </div>\n }\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, input, OnDestroy, OnInit, output, signal, TemplateRef } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsButtonsStatusComponent } from '@libs-ui/components-buttons-status';\nimport { IDropdown, IDropdownFunctionControlEvent, IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { ISwitchEvent, LibsUiComponentsSwitchComponent } from '@libs-ui/components-switch';\nimport { TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';\nimport { getDayjs, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, uuid } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { interval, Subject, takeUntil } from 'rxjs';\nimport { IPagesTemplateFullScreenButton } from './interfaces/config.interface';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-pages_template_full_screen',\n templateUrl: './full-screen.component.html',\n styleUrls: ['./full-screen.component.scss'],\n standalone: true,\n imports: [\n TranslateModule,\n NgTemplateOutlet,\n LibsUiComponentsDropdownComponent,\n LibsUiComponentsSwitchComponent,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsButtonsStatusComponent,\n LibsUiComponentsPopoverComponent,\n LibsUiPipesEscapeHtmlPipe,\n LibsUiComponentsLabelComponent,\n ],\n providers: [],\n})\nexport class LibsUiComponentsPagesTemplateFullScreenComponent implements OnInit, OnDestroy {\n private idOverlay = signal<string>(uuid());\n private functionControlMenu: IDropdownFunctionControlEvent | undefined;\n private onDestroy = new Subject<void>();\n\n readonly classHeaderInclude = input<string>();\n readonly labelLeft = input<string, string | undefined>('i18n_back_to_list', { transform: (val) => val ?? 'i18n_back_to_list' });\n readonly classBodyInclude = input<string>();\n readonly title = input<string>();\n readonly buttonCenter = input<Array<IPagesTemplateFullScreenButton> | undefined>();\n readonly buttonRight = input<Array<IPagesTemplateFullScreenButton>>();\n readonly hasEdit = input<boolean>(false);\n readonly menuDropDownConfigs = input<IDropdown>();\n readonly zIndex = input<number, number | undefined>(1000, { transform: (val) => val ?? 1000 });\n readonly ignoreClosePageFullEvent = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly ignoreBackgroundColor = input<boolean>();\n readonly divideClassHeader = input<{ classButtonCancel: string; classButtonCenter: string; classButtonRight: string } | undefined>();\n readonly centerTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly templateRight = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly leftTemplate = input<TemplateRef<TYPE_TEMPLATE_REF> | undefined>();\n readonly disable = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n\n readonly outClose = output<void>();\n readonly outEdit = output<void>();\n readonly outSelectedMenuDropdown = output<IEmitSelectKey | undefined>();\n readonly outClickButton = output<IPagesTemplateFullScreenButton>();\n\n ngOnInit(): void {\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'open',\n state: true,\n idOverlay: this.idOverlay(),\n timeLiveUpdate: getDayjs().unix(),\n ignoreIntervalUpdateTimeLiveEvent: UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL,\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n\n if (UtilsCommunicateMicroKeyGlobal.IGNORE_INTERVAL_UPDATE_TIME_LIVE_EVENT_MODAL) {\n return;\n }\n\n interval(2000)\n .pipe(takeUntil(this.onDestroy))\n .subscribe(() => {\n data.response.timeLiveUpdate = getDayjs().unix();\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n });\n }\n }\n\n protected handlerEdit() {\n this.outEdit.emit();\n }\n\n protected cancel() {\n this.outClose.emit();\n }\n\n protected async handlerClickButton(button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action();\n }\n this.outClickButton.emit(button);\n }\n\n protected async handlerSwitch(event: ISwitchEvent, button: IPagesTemplateFullScreenButton) {\n if (button && button.action) {\n await button.action(event);\n }\n }\n\n protected handlerSelectedKey(event: IEmitSelectKey | undefined) {\n this.outSelectedMenuDropdown.emit(event);\n this.functionControlMenu?.reset();\n }\n\n protected handlerControlDropdownMenu(event: IDropdownFunctionControlEvent) {\n this.functionControlMenu = event;\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n if (!this.ignoreClosePageFullEvent()) {\n const data = {\n type: UtilsCommunicateMicroKeyGlobal.KEY_MESSAGE_MODAL,\n response: {\n message: 'close',\n state: false,\n idOverlay: this.idOverlay(),\n },\n };\n\n UtilsCommunicateMicro.PostMessageToParent(data);\n }\n }\n}\n","<div\n class=\"libs-ui-components-page_full overflow-hidden\"\n [style.zIndex]=\"zIndex()\"\n [style.background-color]=\"ignoreBackgroundColor() ? 'transparent' : '#f2f5f7'\">\n <div [class]=\"'libs-ui-components-page_full-header ' + classHeaderInclude()\">\n <div class=\"{{ divideClassHeader()?.classButtonCancel || 'w-[25%]' }}\">\n @if (leftTemplate(); as leftTemplate) {\n <ng-container *ngTemplateOutlet=\"leftTemplate\" />\n }\n @if (labelLeft(); as labelLeft) {\n <libs_ui-components-buttons-button\n [label]=\"labelLeft\"\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-chevron-right rotate-[180deg] before:text-[16px]'\"\n [classLabel]=\"'libs-ui-font-h4r'\"\n (outClick)=\"cancel()\" />\n }\n </div>\n\n @if (centerTemplate(); as centerTemplate) {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <ng-container *ngTemplateOutlet=\"centerTemplate\" />\n </div>\n } @else {\n <div class=\"{{ divideClassHeader()?.classButtonCenter || 'w-[40%]' }} flex items-center justify-center\">\n <libs_ui-components-popover\n type=\"text\"\n [config]=\"{\n maxWidth: 250,\n zIndex: zIndex() + 1,\n }\"\n [classInclude]=\"'libs-ui-font-h2s'\"\n [innerHtml]=\"title() ? (title() | LibsUiPipesEscapeHtmlPipe) : '&mdash;'\" />\n\n @if (hasEdit(); as hasEdit) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n (outClick)=\"handlerEdit()\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-edit-line'\"\n [classInclude]=\"'ml-[4px]'\" />\n }\n @for (button of buttonCenter(); track button.key) {\n <div class=\"ml-[12px] flex items-center\">\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-head-4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n @if (button.key === 'button-status' && button.configButtonStatus) {\n <libs_ui-components-buttons-status\n [class]=\"button.classInclude\"\n [config]=\"button.configButtonStatus\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0 text-white'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n </div>\n }\n </div>\n }\n\n <div class=\"{{ divideClassHeader()?.classButtonRight || 'w-[35%]' }} flex justify-end items-center\">\n @for (button of buttonRight(); track button.key) {\n <div [class.ml-[12px]]=\"!$first\">\n @if (button.key === 'label' && button.labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"button.labelConfig.classInclude + ' pb-0'\"\n [labelLeft]=\"button.labelConfig.labelLeft\"\n [labelLeftClass]=\"button.labelConfig.labelLeftClass\"\n [required]=\"button.labelConfig.required\"\n [description]=\"button.labelConfig.description\"\n [labelRight]=\"button.labelConfig.labelRight\"\n [labelRightClass]=\"button.labelConfig.labelRightClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [buttonsLeft]=\"button.labelConfig.buttonsLeft\"\n [disableButtonsLeft]=\"button.labelConfig.disableButtonsLeft\"\n [buttonsRight]=\"button.labelConfig.buttonsRight\"\n [disableButtonsRight]=\"button.labelConfig.disableButtonsRight\"\n [hasToggle]=\"button.labelConfig.hasToggle\"\n [toggleActive]=\"button.labelConfig.toggleActive\"\n [toggleDisable]=\"button.labelConfig.toggleDisable\"\n [popover]=\"button.labelConfig.popover\"\n [iconPopoverClass]=\"button.labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"button.labelConfig.onlyShowCount\"\n [limitLength]=\"button.labelConfig.limitLength\"\n [buttonsDescription]=\"button.labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"button.labelConfig.disableButtonsDescription\"\n [buttonsDescriptionContainerClass]=\"button.labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"button.labelConfig.count\" />\n }\n @if (button.key === 'switch') {\n <libs_ui-components-switch\n [active]=\"button.active || false\"\n [disable]=\"button.disable || disable()\"\n class=\"{{ button.classInclude }}\"\n (outSwitch)=\"handlerSwitch($event, button)\" />\n }\n\n @if (button.key === 'button') {\n <libs_ui-components-buttons-button\n [label]=\"button?.label || ''\"\n [classLabel]=\"(button.classLabel || '') + ' libs-ui-font-h4s'\"\n [type]=\"button.type || 'button-primary'\"\n [classInclude]=\"button.classInclude || ''\"\n [classIconLeft]=\"button.classIconLeft || ''\"\n [classIconRight]=\"button.classIconRight || ''\"\n [popover]=\"button.popover || {}\"\n [disable]=\"button.disable || disable()\"\n [isPending]=\"button.isPending || false\"\n [iconOnlyType]=\"button.iconOnlyType || false\"\n (outClick)=\"handlerClickButton(button)\" />\n }\n <!-- thêm đường phân cách -->\n @if (button.key === 'line-space') {\n <div\n class=\"bg-[#666b79] w-[1px] h-[28px]\"\n [class]=\"button.classInclude\">\n &nbsp;\n </div>\n }\n </div>\n }\n @if (menuDropDownConfigs(); as menuDropDownConfigs) {\n <div class=\"ml-[12px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [listConfig]=\"menuDropDownConfigs.listConfig\"\n [listHiddenInputSearch]=\"true\"\n [popoverCustomConfig]=\"menuDropDownConfigs.popoverCustomConfig\"\n (outFunctionsControl)=\"handlerControlDropdownMenu($event)\"\n (outSelectKey)=\"handlerSelectedKey($event)\">\n <libs_ui-components-buttons-button\n [classInclude]=\"'p-[8px]'\"\n [type]=\"'button-third'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical text-[#333333] text-[12px]'\"\n [popover]=\"{\n config: {\n content: 'i18n_4x_other_operations',\n },\n }\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-dropdown>\n </div>\n }\n @if (templateRight(); as templateRight) {\n <ng-container *ngTemplateOutlet=\"templateRight\" />\n }\n </div>\n </div>\n <div [class]=\"'libs-ui-components-page_full-body ' + classBodyInclude()\">\n <ng-content />\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { OnDestroy, OnInit, Signal, TemplateRef } from '@angular/core';
2
+ import { IDropdown, IDropdownFunctionControlEvent, IEmitSelectKey } from '@libs-ui/components-dropdown';
3
+ import { ISkeletonConfig } from '@libs-ui/components-skeleton';
4
+ import { ISwitchEvent } from '@libs-ui/components-switch';
5
+ import { IPagesTemplateFullScreenButton } from '../interfaces/config.interface';
6
+ import { IFullScreenV2BodyConfig, IFullScreenV2SectionData } from './interfaces/full-screen-v2.interface';
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * Full Screen Template V2 — Kế thừa toàn bộ V1, bổ sung lazy loading cho body.
10
+ * Header giữ nguyên 100%. Body hỗ trợ dynamic component injection với skeleton tự động.
11
+ */
12
+ export declare class LibsUiComponentsPagesTemplateFullScreenV2Component implements OnInit, OnDestroy {
13
+ readonly classHeaderInclude: import("@angular/core").InputSignal<string | undefined>;
14
+ readonly labelLeft: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
15
+ readonly title: import("@angular/core").InputSignal<string | undefined>;
16
+ readonly buttonCenter: import("@angular/core").InputSignal<IPagesTemplateFullScreenButton[] | undefined>;
17
+ readonly buttonRight: import("@angular/core").InputSignal<IPagesTemplateFullScreenButton[] | undefined>;
18
+ readonly hasEdit: import("@angular/core").InputSignal<boolean>;
19
+ readonly menuDropDownConfigs: import("@angular/core").InputSignal<IDropdown | undefined>;
20
+ readonly zIndex: import("@angular/core").InputSignalWithTransform<number, number | undefined>;
21
+ readonly ignoreClosePageFullEvent: import("@angular/core").InputSignalWithTransform<boolean, boolean | undefined>;
22
+ readonly ignoreBackgroundColor: import("@angular/core").InputSignal<boolean | undefined>;
23
+ readonly divideClassHeader: import("@angular/core").InputSignal<{
24
+ classButtonCancel: string;
25
+ classButtonCenter: string;
26
+ classButtonRight: string;
27
+ } | undefined>;
28
+ readonly centerTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
29
+ readonly templateRight: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
30
+ readonly leftTemplate: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
31
+ readonly disable: import("@angular/core").InputSignalWithTransform<boolean, boolean | undefined>;
32
+ /** Config lazy load component vào body. Nếu không truyền getComponentOutlet → tự động dùng ng-content. */
33
+ readonly bodyConfig: import("@angular/core").InputSignalWithTransform<IFullScreenV2BodyConfig, IFullScreenV2BodyConfig | undefined>;
34
+ readonly outClose: import("@angular/core").OutputEmitterRef<void>;
35
+ readonly outEdit: import("@angular/core").OutputEmitterRef<void>;
36
+ readonly outSelectedMenuDropdown: import("@angular/core").OutputEmitterRef<IEmitSelectKey | undefined>;
37
+ readonly outClickButton: import("@angular/core").OutputEmitterRef<IPagesTemplateFullScreenButton>;
38
+ private readonly idOverlay;
39
+ private readonly destroyRef;
40
+ private functionControlMenu;
41
+ /** State reactive để truyền vào component outlet */
42
+ protected readonly sectionData: Signal<IFullScreenV2SectionData>;
43
+ /** Skeleton body — fallback về config mặc định nếu không được truyền */
44
+ protected readonly resolvedSkeletonBody: Signal<ISkeletonConfig>;
45
+ ngOnInit(): void;
46
+ protected handlerEdit(): void;
47
+ protected cancel(): void;
48
+ protected handlerClickButton(button: IPagesTemplateFullScreenButton): Promise<void>;
49
+ protected handlerSwitch(event: ISwitchEvent, button: IPagesTemplateFullScreenButton): Promise<void>;
50
+ protected handlerSelectedKey(event: IEmitSelectKey | undefined): void;
51
+ protected handlerControlDropdownMenu(event: IDropdownFunctionControlEvent): void;
52
+ ngOnDestroy(): void;
53
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsPagesTemplateFullScreenV2Component, never>;
54
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsPagesTemplateFullScreenV2Component, "libs_ui-components-pages_template_full_screen_v2", never, { "classHeaderInclude": { "alias": "classHeaderInclude"; "required": false; "isSignal": true; }; "labelLeft": { "alias": "labelLeft"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "buttonCenter": { "alias": "buttonCenter"; "required": false; "isSignal": true; }; "buttonRight": { "alias": "buttonRight"; "required": false; "isSignal": true; }; "hasEdit": { "alias": "hasEdit"; "required": false; "isSignal": true; }; "menuDropDownConfigs": { "alias": "menuDropDownConfigs"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "ignoreClosePageFullEvent": { "alias": "ignoreClosePageFullEvent"; "required": false; "isSignal": true; }; "ignoreBackgroundColor": { "alias": "ignoreBackgroundColor"; "required": false; "isSignal": true; }; "divideClassHeader": { "alias": "divideClassHeader"; "required": false; "isSignal": true; }; "centerTemplate": { "alias": "centerTemplate"; "required": false; "isSignal": true; }; "templateRight": { "alias": "templateRight"; "required": false; "isSignal": true; }; "leftTemplate": { "alias": "leftTemplate"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "bodyConfig": { "alias": "bodyConfig"; "required": false; "isSignal": true; }; }, { "outClose": "outClose"; "outEdit": "outEdit"; "outSelectedMenuDropdown": "outSelectedMenuDropdown"; "outClickButton": "outClickButton"; }, never, never, true, never>;
55
+ }