@libs-ui/components-buttons-dropdown 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dropdown.component.d.ts +41 -0
- package/esm2022/dropdown.component.mjs +94 -0
- package/esm2022/index.mjs +2 -0
- package/esm2022/libs-ui-components-buttons-dropdown.mjs +5 -0
- package/fesm2022/libs-ui-components-buttons-dropdown.mjs +101 -0
- package/fesm2022/libs-ui-components-buttons-dropdown.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/package.json +25 -0
package/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { IPopupConfigButtonDropdown, TYPE_BUTTON, TYPE_SIZE_BUTTON } from '@libs-ui/components-buttons-button';
|
|
2
|
+
import { IPopoverFunctionControlEvent, TYPE_POPOVER_EVENT, TYPE_POPOVER_MODE } from '@libs-ui/components-popover';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class LibsUiComponentsButtonsDropdownComponent {
|
|
5
|
+
protected labelDisplay: import("@angular/core").Signal<any>;
|
|
6
|
+
readonly label: import("@angular/core").InputSignal<string | undefined>;
|
|
7
|
+
readonly fieldClass: import("@angular/core").InputSignal<string>;
|
|
8
|
+
readonly fieldClassIconLeft: import("@angular/core").InputSignal<string>;
|
|
9
|
+
readonly items: import("@angular/core").InputSignalWithTransform<any[], any[]>;
|
|
10
|
+
readonly fieldDisplay: import("@angular/core").InputSignal<string>;
|
|
11
|
+
readonly keyField: import("@angular/core").InputSignal<string>;
|
|
12
|
+
readonly keySelected: import("@angular/core").ModelSignal<string | undefined>;
|
|
13
|
+
readonly applyNow: import("@angular/core").InputSignal<boolean>;
|
|
14
|
+
readonly showBorderBottom: import("@angular/core").InputSignal<boolean>;
|
|
15
|
+
readonly disable: import("@angular/core").InputSignal<boolean>;
|
|
16
|
+
readonly sizeButton: import("@angular/core").InputSignal<TYPE_SIZE_BUTTON>;
|
|
17
|
+
readonly classLabel: import("@angular/core").InputSignal<string>;
|
|
18
|
+
readonly iconOnlyType: import("@angular/core").InputSignal<boolean>;
|
|
19
|
+
readonly classIconRight: import("@angular/core").InputSignal<string>;
|
|
20
|
+
readonly classIconLeft: import("@angular/core").InputSignal<string>;
|
|
21
|
+
readonly typeButton: import("@angular/core").InputSignal<TYPE_BUTTON>;
|
|
22
|
+
readonly popupConfig: import("@angular/core").InputSignal<IPopupConfigButtonDropdown>;
|
|
23
|
+
readonly ignoreHiddenPopoverContentWhenMouseLeave: import("@angular/core").InputSignal<boolean>;
|
|
24
|
+
readonly classInclude: import("@angular/core").InputSignal<string>;
|
|
25
|
+
readonly modePopover: import("@angular/core").InputSignal<TYPE_POPOVER_MODE>;
|
|
26
|
+
readonly classIncludeContainer: import("@angular/core").InputSignal<string | undefined>;
|
|
27
|
+
readonly outSelectItem: import("@angular/core").OutputEmitterRef<any>;
|
|
28
|
+
readonly outHover: import("@angular/core").OutputEmitterRef<boolean>;
|
|
29
|
+
readonly outApply: import("@angular/core").OutputEmitterRef<any>;
|
|
30
|
+
readonly outPopoverEvent: import("@angular/core").OutputEmitterRef<TYPE_POPOVER_EVENT>;
|
|
31
|
+
readonly outFunctionsControl: import("@angular/core").OutputEmitterRef<IPopoverFunctionControlEvent>;
|
|
32
|
+
readonly outIconEvent: import("@angular/core").OutputEmitterRef<MouseEvent>;
|
|
33
|
+
protected handlerApply(): Promise<void>;
|
|
34
|
+
protected handlerSelectItem(event: Event, data: any): Promise<void>;
|
|
35
|
+
protected handlerPopoverEvent(event: TYPE_POPOVER_EVENT): Promise<void>;
|
|
36
|
+
protected handlerPopoverControlEvent(control: IPopoverFunctionControlEvent): Promise<void>;
|
|
37
|
+
protected handlerClickButtonTemplate(event: Event, data: any, items: Array<any>): Promise<void>;
|
|
38
|
+
private labelComputed;
|
|
39
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsButtonsDropdownComponent, never>;
|
|
40
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsButtonsDropdownComponent, "libs_ui-components-buttons-dropdown", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "fieldClass": { "alias": "fieldClass"; "required": false; "isSignal": true; }; "fieldClassIconLeft": { "alias": "fieldClassIconLeft"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; "fieldDisplay": { "alias": "fieldDisplay"; "required": false; "isSignal": true; }; "keyField": { "alias": "keyField"; "required": false; "isSignal": true; }; "keySelected": { "alias": "keySelected"; "required": false; "isSignal": true; }; "applyNow": { "alias": "applyNow"; "required": false; "isSignal": true; }; "showBorderBottom": { "alias": "showBorderBottom"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "sizeButton": { "alias": "sizeButton"; "required": false; "isSignal": true; }; "classLabel": { "alias": "classLabel"; "required": false; "isSignal": true; }; "iconOnlyType": { "alias": "iconOnlyType"; "required": false; "isSignal": true; }; "classIconRight": { "alias": "classIconRight"; "required": false; "isSignal": true; }; "classIconLeft": { "alias": "classIconLeft"; "required": false; "isSignal": true; }; "typeButton": { "alias": "typeButton"; "required": false; "isSignal": true; }; "popupConfig": { "alias": "popupConfig"; "required": false; "isSignal": true; }; "ignoreHiddenPopoverContentWhenMouseLeave": { "alias": "ignoreHiddenPopoverContentWhenMouseLeave"; "required": false; "isSignal": true; }; "classInclude": { "alias": "classInclude"; "required": false; "isSignal": true; }; "modePopover": { "alias": "modePopover"; "required": false; "isSignal": true; }; "classIncludeContainer": { "alias": "classIncludeContainer"; "required": false; "isSignal": true; }; }, { "keySelected": "keySelectedChange"; "outSelectItem": "outSelectItem"; "outHover": "outHover"; "outApply": "outApply"; "outPopoverEvent": "outPopoverEvent"; "outFunctionsControl": "outFunctionsControl"; "outIconEvent": "outIconEvent"; }, never, never, true, never>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';
|
|
4
|
+
import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
|
|
5
|
+
import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
|
|
6
|
+
import { escapeHtml } from '@libs-ui/utils';
|
|
7
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@ngx-translate/core";
|
|
10
|
+
export class LibsUiComponentsButtonsDropdownComponent {
|
|
11
|
+
/* PROPERTY */
|
|
12
|
+
labelDisplay = computed(this.labelComputed.bind(this));
|
|
13
|
+
/* INPUT */
|
|
14
|
+
label = input();
|
|
15
|
+
fieldClass = input('class'); // change color label item of items
|
|
16
|
+
fieldClassIconLeft = input('classIconLeft'); // iconclass item of items
|
|
17
|
+
items = input.required({ transform: data => data.map(item => ({ ...item, [this.fieldDisplay()]: escapeHtml(item[this.fieldDisplay()]) })) }); // requried
|
|
18
|
+
fieldDisplay = input('label'); // requried
|
|
19
|
+
keyField = input('key');
|
|
20
|
+
keySelected = model();
|
|
21
|
+
applyNow = input(false); // if not applyNow: keyField is requried
|
|
22
|
+
showBorderBottom = input(false);
|
|
23
|
+
;
|
|
24
|
+
disable = input(false);
|
|
25
|
+
;
|
|
26
|
+
sizeButton = input('medium');
|
|
27
|
+
classLabel = input('');
|
|
28
|
+
iconOnlyType = input(false);
|
|
29
|
+
classIconRight = input('libs-ui-icon-move-right rotate-[90deg]');
|
|
30
|
+
classIconLeft = input('');
|
|
31
|
+
typeButton = input('button-primary');
|
|
32
|
+
popupConfig = input({ width: 205, maxWidth: 250, maxHeight: 140, zIndex: 1200, direction: 'top' });
|
|
33
|
+
ignoreHiddenPopoverContentWhenMouseLeave = input(true);
|
|
34
|
+
classInclude = input('');
|
|
35
|
+
modePopover = input('click-toggle');
|
|
36
|
+
classIncludeContainer = input();
|
|
37
|
+
;
|
|
38
|
+
/* OUTPUT */
|
|
39
|
+
outSelectItem = output();
|
|
40
|
+
outHover = output();
|
|
41
|
+
outApply = output(); // sử dụng cho bấm button left chế độ applyNow = false;
|
|
42
|
+
outPopoverEvent = output();
|
|
43
|
+
outFunctionsControl = output();
|
|
44
|
+
outIconEvent = output();
|
|
45
|
+
/* FUNCTIONS */
|
|
46
|
+
async handlerApply() {
|
|
47
|
+
if (!this.applyNow()) {
|
|
48
|
+
this.outApply.emit(this.items().find(item => item[this.keyField()] === this.keySelected()));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async handlerSelectItem(event, data) {
|
|
52
|
+
event.stopPropagation();
|
|
53
|
+
if (data.subTemplate) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (!this.applyNow()) {
|
|
57
|
+
this.keySelected.set(data[this.keyField()]);
|
|
58
|
+
}
|
|
59
|
+
this.outSelectItem.emit(data);
|
|
60
|
+
this.outHover.emit(false);
|
|
61
|
+
}
|
|
62
|
+
async handlerPopoverEvent(event) {
|
|
63
|
+
this.outPopoverEvent.emit(event);
|
|
64
|
+
}
|
|
65
|
+
async handlerPopoverControlEvent(control) {
|
|
66
|
+
this.outFunctionsControl.emit(control);
|
|
67
|
+
}
|
|
68
|
+
async handlerClickButtonTemplate(event, data, items) {
|
|
69
|
+
event.stopPropagation();
|
|
70
|
+
data.buttonTemplateConfig.action(data, items);
|
|
71
|
+
}
|
|
72
|
+
labelComputed() {
|
|
73
|
+
if (!this.keySelected() || !this.items() || !this.items().length || !this.keyField() || this.applyNow()) {
|
|
74
|
+
return this.label();
|
|
75
|
+
}
|
|
76
|
+
for (const item of this.items()) {
|
|
77
|
+
if (item[this.keyField()] === this.keySelected()) {
|
|
78
|
+
return item[this.fieldDisplay()];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return this.label();
|
|
82
|
+
}
|
|
83
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsButtonsDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
84
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsButtonsDropdownComponent, isStandalone: true, selector: "libs_ui-components-buttons-dropdown", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, fieldClass: { classPropertyName: "fieldClass", publicName: "fieldClass", isSignal: true, isRequired: false, transformFunction: null }, fieldClassIconLeft: { classPropertyName: "fieldClassIconLeft", publicName: "fieldClassIconLeft", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, fieldDisplay: { classPropertyName: "fieldDisplay", publicName: "fieldDisplay", isSignal: true, isRequired: false, transformFunction: null }, keyField: { classPropertyName: "keyField", publicName: "keyField", isSignal: true, isRequired: false, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: false, transformFunction: null }, applyNow: { classPropertyName: "applyNow", publicName: "applyNow", isSignal: true, isRequired: false, transformFunction: null }, showBorderBottom: { classPropertyName: "showBorderBottom", publicName: "showBorderBottom", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, sizeButton: { classPropertyName: "sizeButton", publicName: "sizeButton", isSignal: true, isRequired: false, transformFunction: null }, classLabel: { classPropertyName: "classLabel", publicName: "classLabel", isSignal: true, isRequired: false, transformFunction: null }, iconOnlyType: { classPropertyName: "iconOnlyType", publicName: "iconOnlyType", isSignal: true, isRequired: false, transformFunction: null }, classIconRight: { classPropertyName: "classIconRight", publicName: "classIconRight", isSignal: true, isRequired: false, transformFunction: null }, classIconLeft: { classPropertyName: "classIconLeft", publicName: "classIconLeft", isSignal: true, isRequired: false, transformFunction: null }, typeButton: { classPropertyName: "typeButton", publicName: "typeButton", isSignal: true, isRequired: false, transformFunction: null }, popupConfig: { classPropertyName: "popupConfig", publicName: "popupConfig", isSignal: true, isRequired: false, transformFunction: null }, ignoreHiddenPopoverContentWhenMouseLeave: { classPropertyName: "ignoreHiddenPopoverContentWhenMouseLeave", publicName: "ignoreHiddenPopoverContentWhenMouseLeave", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, modePopover: { classPropertyName: "modePopover", publicName: "modePopover", isSignal: true, isRequired: false, transformFunction: null }, classIncludeContainer: { classPropertyName: "classIncludeContainer", publicName: "classIncludeContainer", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keySelected: "keySelectedChange", outSelectItem: "outSelectItem", outHover: "outHover", outApply: "outApply", outPopoverEvent: "outPopoverEvent", outFunctionsControl: "outFunctionsControl", outIconEvent: "outIconEvent" }, ngImport: i0, template: "<div #buttonDropdownEl\n class=\"libs-ui-buttons-dropdown flex {{ classIncludeContainer() || '' }}\"\n [class.libs-ui-buttons-dropdown-un-apply-now]=\"!applyNow()\"\n [class.libs-ui-buttons-dropdown-apply-now-button-primary]=\"applyNow() && typeButton() === 'button-primary'\"\n [class.libs-ui-buttons-dropdown-apply-now-button-secondary]=\"applyNow() && typeButton() === 'button-secondary'\">\n <libs_ui-components-buttons-button [disable]=\"disable()\"\n [iconOnlyType]=\"iconOnlyType()\"\n [classIconLeft]=\"classIconLeft()\"\n [classIconRight]=\"!applyNow() ? '' : classIconRight()\"\n [type]=\"typeButton()\"\n [classLabel]=\"classLabel()\"\n [classInclude]=\"classInclude()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n elementRefCustom: buttonDropdownEl,\n mode: modePopover(),\n ignoreShowPopover: !applyNow(),\n ignoreHiddenPopoverContentWhenMouseLeave: true,\n config: {\n animationConfig: {\n time: .5\n },\n template: templateContentEl,\n whiteTheme: true,\n ignoreArrow: true,\n width: popupConfig().width,\n widthByParent: popupConfig().widthByParent ?? false,\n maxWidth: popupConfig().maxWidth,\n maxHeight: popupConfig().maxHeight,\n zIndex: popupConfig().zIndex,\n classInclude: 'rounded-[4px] ' + popupConfig().classInclude,\n direction: popupConfig().direction,\n timerDestroy: popupConfig().timeDestroy,\n directionDistance: 2,\n position: {\n mode: popupConfig().position?.mode || 'start',\n distance: popupConfig().position?.distance ?? 0\n }\n }\n }\"\n [label]=\"labelDisplay()\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outPopoverEvent)=\"handlerPopoverEvent($event)\"\n (outClick)=\"handlerApply()\" />\n @if (!applyNow()) {\n <div class=\"h-full w-[1px] bg-white\"></div>\n <libs_ui-components-buttons-button [type]=\"typeButton()\"\n [disable]=\"disable()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n elementRefCustom: buttonDropdownEl,\n mode: 'click-toggle',\n ignoreHiddenPopoverContentWhenMouseLeave: ignoreHiddenPopoverContentWhenMouseLeave(),\n config:{\n animationConfig: {\n time:.5\n },\n template: templateContentEl,\n whiteTheme: true,\n ignoreArrow: true,\n width: popupConfig().width,\n maxWidth: popupConfig().maxWidth,\n widthByParent: popupConfig().widthByParent ?? false,\n maxHeight: popupConfig().maxHeight,\n zIndex: popupConfig().zIndex,\n direction: popupConfig().direction,\n classInclude: popupConfig().classInclude,\n directionDistance:2,\n position: {\n mode: 'start',\n distance: 0\n }\n }\n }\"\n [iconOnlyType]=\"true\"\n [classIconRight]=\"classIconRight()\"\n [classInclude]=\"classInclude() || '!py-[9px]'\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outPopoverEvent)=\"handlerPopoverEvent($event)\" />\n }\n</div>\n<ng-template #templateContentEl>\n <div>\n @if (items() && items().length) {\n <div class=\"m-0 p-0\">\n @for (item of items(); track item) {\n <div class=\"{{ item.classRow || '' }}\">\n <div LibsUiComponentsPopoverDirective\n [config]=\"{content: item.popoverContent, zIndex: popupConfig().zIndex, directionDistance: -2}\"\n [ignoreShowPopover]=\"!item.showPopover\"\n class=\"libs-ui-bg-list-hover relative cursor-pointer py-[8px] {{ item.classInclude || '' }} {{ showBorderBottom() ? 'libs-ui-border-bottom-general' : '' }}\"\n [class.flex]=\"!item.ignoreFlex\"\n [class.px-[16px]]=\"applyNow()\"\n [class.pl-[16px]]=\"!applyNow()\"\n [class.pr-[40px]]=\"!applyNow()\"\n [class.libs-ui-disable]=\"item.disable\"\n [class.pointer-events-none]=\"item.disable\"\n (click)=\"handlerSelectItem($event,item)\">\n @if (item[fieldClassIconLeft()]) {\n <i [class]=\"item[fieldClassIconLeft()]\"></i>\n }\n <span [class]=\"item[fieldClass()]\"\n [innerHtml]=\"item[fieldDisplay()] | translate\">\n </span>\n @if (item.buttonTemplateConfig) {\n <libs_ui-components-buttons-button [classIconLeft]=\"item.buttonTemplateConfig.iconLeft\"\n [classIconRight]=\"item.buttonTemplateConfig.icon\"\n [label]=\"item.buttonTemplateConfig.label\"\n [classLabel]=\"item.buttonTemplateConfig.label\"\n (outClick)=\"handlerClickButtonTemplate($event, item, items())\"\n [type]=\"item.buttonTemplateConfig.type\" />\n }\n <ng-container *ngTemplateOutlet=\"item?.subTemplate || null;context:{item:item}\"></ng-container>\n @if (item[keyField()] === keySelected() && !applyNow()) {\n <i class=\"libs-ui-icon-check absolute right-[16px] top-[8px]\"></i>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"p-[20px]\"\n [innerHtml]=\"'i18n_no_data' | translate\"></div>\n }\n </div>\n</ng-template>\n", styles: [":host ::ng-deep .libs-ui-buttons-dropdown{max-width:max-content}:host ::ng-deep .libs-ui-buttons-dropdown .libs-ui-button{border-radius:0!important;height:100%}:host ::ng-deep .libs-ui-buttons-dropdown>:first-child libs_ui-components-popover .libs-ui-button{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;padding-right:8px}:host ::ng-deep .libs-ui-buttons-dropdown>:last-child libs_ui-components-popover .libs-ui-button{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important;padding-left:0}:host ::ng-deep .libs-ui-buttons-dropdown:hover>:first-child .libs-ui-button-primary{background:var(--libs-ui-color-light-1, #4E8CF7)!important}:host ::ng-deep .libs-ui-buttons-dropdown:hover>:last-child .libs-ui-button-primary{background:var(--libs-ui-color-light-1, #4E8CF7)!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-un-apply-now>:first-child libs_ui-components-popover .libs-ui-button{padding-right:12px}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-un-apply-now>:last-child libs_ui-components-popover .libs-ui-button{border-left:1px solid transparent!important;padding:4px 12px}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-primary>:first-child libs_ui-components-popover .libs-ui-button{border-right:1px solid transparent}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-primary>:last-child libs_ui-components-popover .libs-ui-button{border-left:1px solid transparent}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary>:first-child libs_ui-components-popover .libs-ui-button{border-right:none!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary>:last-child libs_ui-components-popover .libs-ui-button{border-left:none!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary:hover *>[class^=libs-ui-icon]:before{color:var(--libs-ui-color-light-1, #4E8CF7)}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary:hover .libs-ui-button{color:var(--libs-ui-color-light-1, #4E8CF7);background:var(--mo-button-other-color-background-hover, #E9F1FE)!important}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
85
|
+
}
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsButtonsDropdownComponent, decorators: [{
|
|
87
|
+
type: Component,
|
|
88
|
+
args: [{ selector: 'libs_ui-components-buttons-dropdown', standalone: true, imports: [
|
|
89
|
+
TranslateModule, NgTemplateOutlet,
|
|
90
|
+
LibsUiComponentsButtonsButtonComponent,
|
|
91
|
+
LibsUiComponentsPopoverComponent
|
|
92
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #buttonDropdownEl\n class=\"libs-ui-buttons-dropdown flex {{ classIncludeContainer() || '' }}\"\n [class.libs-ui-buttons-dropdown-un-apply-now]=\"!applyNow()\"\n [class.libs-ui-buttons-dropdown-apply-now-button-primary]=\"applyNow() && typeButton() === 'button-primary'\"\n [class.libs-ui-buttons-dropdown-apply-now-button-secondary]=\"applyNow() && typeButton() === 'button-secondary'\">\n <libs_ui-components-buttons-button [disable]=\"disable()\"\n [iconOnlyType]=\"iconOnlyType()\"\n [classIconLeft]=\"classIconLeft()\"\n [classIconRight]=\"!applyNow() ? '' : classIconRight()\"\n [type]=\"typeButton()\"\n [classLabel]=\"classLabel()\"\n [classInclude]=\"classInclude()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n elementRefCustom: buttonDropdownEl,\n mode: modePopover(),\n ignoreShowPopover: !applyNow(),\n ignoreHiddenPopoverContentWhenMouseLeave: true,\n config: {\n animationConfig: {\n time: .5\n },\n template: templateContentEl,\n whiteTheme: true,\n ignoreArrow: true,\n width: popupConfig().width,\n widthByParent: popupConfig().widthByParent ?? false,\n maxWidth: popupConfig().maxWidth,\n maxHeight: popupConfig().maxHeight,\n zIndex: popupConfig().zIndex,\n classInclude: 'rounded-[4px] ' + popupConfig().classInclude,\n direction: popupConfig().direction,\n timerDestroy: popupConfig().timeDestroy,\n directionDistance: 2,\n position: {\n mode: popupConfig().position?.mode || 'start',\n distance: popupConfig().position?.distance ?? 0\n }\n }\n }\"\n [label]=\"labelDisplay()\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outPopoverEvent)=\"handlerPopoverEvent($event)\"\n (outClick)=\"handlerApply()\" />\n @if (!applyNow()) {\n <div class=\"h-full w-[1px] bg-white\"></div>\n <libs_ui-components-buttons-button [type]=\"typeButton()\"\n [disable]=\"disable()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n elementRefCustom: buttonDropdownEl,\n mode: 'click-toggle',\n ignoreHiddenPopoverContentWhenMouseLeave: ignoreHiddenPopoverContentWhenMouseLeave(),\n config:{\n animationConfig: {\n time:.5\n },\n template: templateContentEl,\n whiteTheme: true,\n ignoreArrow: true,\n width: popupConfig().width,\n maxWidth: popupConfig().maxWidth,\n widthByParent: popupConfig().widthByParent ?? false,\n maxHeight: popupConfig().maxHeight,\n zIndex: popupConfig().zIndex,\n direction: popupConfig().direction,\n classInclude: popupConfig().classInclude,\n directionDistance:2,\n position: {\n mode: 'start',\n distance: 0\n }\n }\n }\"\n [iconOnlyType]=\"true\"\n [classIconRight]=\"classIconRight()\"\n [classInclude]=\"classInclude() || '!py-[9px]'\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outPopoverEvent)=\"handlerPopoverEvent($event)\" />\n }\n</div>\n<ng-template #templateContentEl>\n <div>\n @if (items() && items().length) {\n <div class=\"m-0 p-0\">\n @for (item of items(); track item) {\n <div class=\"{{ item.classRow || '' }}\">\n <div LibsUiComponentsPopoverDirective\n [config]=\"{content: item.popoverContent, zIndex: popupConfig().zIndex, directionDistance: -2}\"\n [ignoreShowPopover]=\"!item.showPopover\"\n class=\"libs-ui-bg-list-hover relative cursor-pointer py-[8px] {{ item.classInclude || '' }} {{ showBorderBottom() ? 'libs-ui-border-bottom-general' : '' }}\"\n [class.flex]=\"!item.ignoreFlex\"\n [class.px-[16px]]=\"applyNow()\"\n [class.pl-[16px]]=\"!applyNow()\"\n [class.pr-[40px]]=\"!applyNow()\"\n [class.libs-ui-disable]=\"item.disable\"\n [class.pointer-events-none]=\"item.disable\"\n (click)=\"handlerSelectItem($event,item)\">\n @if (item[fieldClassIconLeft()]) {\n <i [class]=\"item[fieldClassIconLeft()]\"></i>\n }\n <span [class]=\"item[fieldClass()]\"\n [innerHtml]=\"item[fieldDisplay()] | translate\">\n </span>\n @if (item.buttonTemplateConfig) {\n <libs_ui-components-buttons-button [classIconLeft]=\"item.buttonTemplateConfig.iconLeft\"\n [classIconRight]=\"item.buttonTemplateConfig.icon\"\n [label]=\"item.buttonTemplateConfig.label\"\n [classLabel]=\"item.buttonTemplateConfig.label\"\n (outClick)=\"handlerClickButtonTemplate($event, item, items())\"\n [type]=\"item.buttonTemplateConfig.type\" />\n }\n <ng-container *ngTemplateOutlet=\"item?.subTemplate || null;context:{item:item}\"></ng-container>\n @if (item[keyField()] === keySelected() && !applyNow()) {\n <i class=\"libs-ui-icon-check absolute right-[16px] top-[8px]\"></i>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"p-[20px]\"\n [innerHtml]=\"'i18n_no_data' | translate\"></div>\n }\n </div>\n</ng-template>\n", styles: [":host ::ng-deep .libs-ui-buttons-dropdown{max-width:max-content}:host ::ng-deep .libs-ui-buttons-dropdown .libs-ui-button{border-radius:0!important;height:100%}:host ::ng-deep .libs-ui-buttons-dropdown>:first-child libs_ui-components-popover .libs-ui-button{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;padding-right:8px}:host ::ng-deep .libs-ui-buttons-dropdown>:last-child libs_ui-components-popover .libs-ui-button{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important;padding-left:0}:host ::ng-deep .libs-ui-buttons-dropdown:hover>:first-child .libs-ui-button-primary{background:var(--libs-ui-color-light-1, #4E8CF7)!important}:host ::ng-deep .libs-ui-buttons-dropdown:hover>:last-child .libs-ui-button-primary{background:var(--libs-ui-color-light-1, #4E8CF7)!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-un-apply-now>:first-child libs_ui-components-popover .libs-ui-button{padding-right:12px}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-un-apply-now>:last-child libs_ui-components-popover .libs-ui-button{border-left:1px solid transparent!important;padding:4px 12px}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-primary>:first-child libs_ui-components-popover .libs-ui-button{border-right:1px solid transparent}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-primary>:last-child libs_ui-components-popover .libs-ui-button{border-left:1px solid transparent}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary>:first-child libs_ui-components-popover .libs-ui-button{border-right:none!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary>:last-child libs_ui-components-popover .libs-ui-button{border-left:none!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary:hover *>[class^=libs-ui-icon]:before{color:var(--libs-ui-color-light-1, #4E8CF7)}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary:hover .libs-ui-button{color:var(--libs-ui-color-light-1, #4E8CF7);background:var(--mo-button-other-color-background-hover, #E9F1FE)!important}\n"] }]
|
|
93
|
+
}] });
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2J1dHRvbnMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9idXR0b25zL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUE4QixzQ0FBc0MsRUFBaUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2SixPQUFPLEVBQWdDLGdDQUFnQyxFQUF5QyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BKLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQWV0RCxNQUFNLE9BQU8sd0NBQXdDO0lBRW5ELGNBQWM7SUFDSixZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFFaEUsV0FBVztJQUNGLEtBQUssR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN4QixVQUFVLEdBQUcsS0FBSyxDQUFTLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUNBQW1DO0lBQ3hFLGtCQUFrQixHQUFHLEtBQUssQ0FBUyxlQUFlLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUMvRSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBeUIsRUFBRSxTQUFTLEVB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RCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO3dHQS9FVSx3Q0FBd0M7NEZBQXhDLHdDQUF3Qyx3d0dDckJyRCxnMktBOEhBLGswRUQvR0ksZUFBZSw0RkFBRSxnQkFBZ0Isb0pBQ2pDLHNDQUFzQyxpZ0JBQ3RDLGdDQUFnQzs7NEZBSXZCLHdDQUF3QztrQkFicEQsU0FBUzsrQkFFRSxxQ0FBcUMsY0FHbkMsSUFBSSxXQUNQO3dCQUNQLGVBQWUsRUFBRSxnQkFBZ0I7d0JBQ2pDLHNDQUFzQzt3QkFDdEMsZ0NBQWdDO3FCQUNqQyxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBtb2RlbCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJUG9wdXBDb25maWdCdXR0b25Ecm9wZG93biwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsIFRZUEVfQlVUVE9OLCBUWVBFX1NJWkVfQlVUVE9OIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5ULCBUWVBFX1BPUE9WRVJfTU9ERSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0Ryb3Bkb3duQ29tcG9uZW50IHtcblxuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgbGFiZWxEaXNwbGF5ID0gY29tcHV0ZWQodGhpcy5sYWJlbENvbXB1dGVkLmJpbmQodGhpcykpXG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgbGFiZWwgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGZpZWxkQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCdjbGFzcycpOyAvLyBjaGFuZ2UgY29sb3IgbGFiZWwgaXRlbSBvZiBpdGVtc1xuICByZWFkb25seSBmaWVsZENsYXNzSWNvbkxlZnQgPSBpbnB1dDxzdHJpbmc+KCdjbGFzc0ljb25MZWZ0Jyk7IC8vIGljb25jbGFzcyBpdGVtIG9mIGl0ZW1zXG4gIHJlYWRvbmx5IGl0ZW1zID0gaW5wdXQucmVxdWlyZWQ8QXJyYXk8YW55PiwgQXJyYXk8YW55Pj4oeyB0cmFuc2Zvcm06IGRhdGEgPT4gZGF0YS5tYXAoaXRlbSA9PiAoeyAuLi5pdGVtLCBbdGhpcy5maWVsZERpc3BsYXkoKV06IGVzY2FwZUh0bWwoaXRlbVt0aGlzLmZpZWxkRGlzcGxheSgpXSkgfSkpIH0pOyAvLyByZXF1cmllZFxuICByZWFkb25seSBmaWVsZERpc3BsYXkgPSBpbnB1dDxzdHJpbmc+KCdsYWJlbCcpOyAvLyByZXF1cmllZFxuICByZWFkb25seSBrZXlGaWVsZCA9IGlucHV0PHN0cmluZz4oJ2tleScpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IG1vZGVsPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYXBwbHlOb3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7IC8vIGlmIG5vdCBhcHBseU5vdzoga2V5RmllbGQgaXMgcmVxdXJpZWRcbiAgcmVhZG9ubHkgc2hvd0JvcmRlckJvdHRvbSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTs7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7O1xuICByZWFkb25seSBzaXplQnV0dG9uID0gaW5wdXQ8VFlQRV9TSVpFX0JVVFRPTj4oJ21lZGl1bScpO1xuICByZWFkb25seSBjbGFzc0xhYmVsID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGljb25Pbmx5VHlwZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NJY29uUmlnaHQgPSBpbnB1dDxzdHJpbmc+KCdsaWJzLXVpLWljb24tbW92ZS1yaWdodCByb3RhdGUtWzkwZGVnXScpO1xuICByZWFkb25seSBjbGFzc0ljb25MZWZ0ID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IHR5cGVCdXR0b24gPSBpbnB1dDxUWVBFX0JVVFRPTj4oJ2J1dHRvbi1wcmltYXJ5Jyk7XG4gIHJlYWRvbmx5IHBvcHVwQ29uZmlnID0gaW5wdXQ8SVBvcHVwQ29uZmlnQnV0dG9uRHJvcGRvd24+KHsgd2lkdGg6IDIwNSwgbWF4V2lkdGg6IDI1MCwgbWF4SGVpZ2h0OiAxNDAsIHpJbmRleDogMTIwMCwgZGlyZWN0aW9uOiAndG9wJyB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgbW9kZVBvcG92ZXIgPSBpbnB1dDxUWVBFX1BPUE9WRVJfTU9ERT4oJ2NsaWNrLXRvZ2dsZScpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVDb250YWluZXIgPSBpbnB1dDxzdHJpbmc+KCk7O1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRTZWxlY3RJdGVtID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgb3V0SG92ZXIgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0QXBwbHkgPSBvdXRwdXQ8YW55PigpOyAvLyBz4butIGThu6VuZyBjaG8gYuG6pW0gYnV0dG9uIGxlZnQgY2jhur8gxJHhu5kgYXBwbHlOb3cgPSBmYWxzZTtcbiAgcmVhZG9ubHkgb3V0UG9wb3ZlckV2ZW50ID0gb3V0cHV0PFRZUEVfUE9QT1ZFUl9FVkVOVD4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXRJY29uRXZlbnQgPSBvdXRwdXQ8TW91c2VFdmVudD4oKTtcblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJBcHBseSgpIHtcbiAgICBpZiAoIXRoaXMuYXBwbHlOb3coKSkge1xuICAgICAgdGhpcy5vdXRBcHBseS5lbWl0KHRoaXMuaXRlbXMoKS5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLmtleUZpZWxkKCldID09PSB0aGlzLmtleVNlbGVjdGVkKCkpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNlbGVjdEl0ZW0oZXZlbnQ6IEV2ZW50LCBkYXRhOiBhbnkpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZGF0YS5zdWJUZW1wbGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXBwbHlOb3coKSkge1xuICAgICAgdGhpcy5rZXlTZWxlY3RlZC5zZXQoZGF0YVt0aGlzLmtleUZpZWxkKCldKTtcbiAgICB9XG4gICAgdGhpcy5vdXRTZWxlY3RJdGVtLmVtaXQoZGF0YSk7XG4gICAgdGhpcy5vdXRIb3Zlci5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUG9wb3ZlckV2ZW50KGV2ZW50OiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICB0aGlzLm91dFBvcG92ZXJFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUG9wb3ZlckNvbnRyb2xFdmVudChjb250cm9sOiBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoY29udHJvbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNsaWNrQnV0dG9uVGVtcGxhdGUoZXZlbnQ6IEV2ZW50LCBkYXRhOiBhbnksIGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZGF0YS5idXR0b25UZW1wbGF0ZUNvbmZpZy5hY3Rpb24oZGF0YSwgaXRlbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBsYWJlbENvbXB1dGVkKCkge1xuICAgIGlmICghdGhpcy5rZXlTZWxlY3RlZCgpIHx8ICF0aGlzLml0ZW1zKCkgfHwgIXRoaXMuaXRlbXMoKS5sZW5ndGggfHwgIXRoaXMua2V5RmllbGQoKSB8fCB0aGlzLmFwcGx5Tm93KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhYmVsKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKCkpIHtcbiAgICAgIGlmIChpdGVtW3RoaXMua2V5RmllbGQoKV0gPT09IHRoaXMua2V5U2VsZWN0ZWQoKSkge1xuICAgICAgICByZXR1cm4gaXRlbVt0aGlzLmZpZWxkRGlzcGxheSgpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sYWJlbCgpO1xuICB9XG5cbn0iLCI8ZGl2ICNidXR0b25Ecm9wZG93bkVsXG4gIGNsYXNzPVwibGlicy11aS1idXR0b25zLWRyb3Bkb3duIGZsZXgge3sgY2xhc3NJbmNsdWRlQ29udGFpbmVyKCkgfHwgJycgfX1cIlxuICBbY2xhc3MubGlicy11aS1idXR0b25zLWRyb3Bkb3duLXVuLWFwcGx5LW5vd109XCIhYXBwbHlOb3coKVwiXG4gIFtjbGFzcy5saWJzLXVpLWJ1dHRvbnMtZHJvcGRvd24tYXBwbHktbm93LWJ1dHRvbi1wcmltYXJ5XT1cImFwcGx5Tm93KCkgJiYgdHlwZUJ1dHRvbigpID09PSAnYnV0dG9uLXByaW1hcnknXCJcbiAgW2NsYXNzLmxpYnMtdWktYnV0dG9ucy1kcm9wZG93bi1hcHBseS1ub3ctYnV0dG9uLXNlY29uZGFyeV09XCJhcHBseU5vdygpICYmIHR5cGVCdXR0b24oKSA9PT0gJ2J1dHRvbi1zZWNvbmRhcnknXCI+XG4gIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICBbaWNvbk9ubHlUeXBlXT1cImljb25Pbmx5VHlwZSgpXCJcbiAgICBbY2xhc3NJY29uTGVmdF09XCJjbGFzc0ljb25MZWZ0KClcIlxuICAgIFtjbGFzc0ljb25SaWdodF09XCIhYXBwbHlOb3coKSA/ICcnIDogY2xhc3NJY29uUmlnaHQoKVwiXG4gICAgW3R5cGVdPVwidHlwZUJ1dHRvbigpXCJcbiAgICBbY2xhc3NMYWJlbF09XCJjbGFzc0xhYmVsKClcIlxuICAgIFtjbGFzc0luY2x1ZGVdPVwiY2xhc3NJbmNsdWRlKClcIlxuICAgIFtzaXplQnV0dG9uXT1cInNpemVCdXR0b24oKVwiXG4gICAgW3BvcG92ZXJdPVwie1xuICAgICAgZWxlbWVudFJlZkN1c3RvbTogYnV0dG9uRHJvcGRvd25FbCxcbiAgICAgIG1vZGU6IG1vZGVQb3BvdmVyKCksXG4gICAgICBpZ25vcmVTaG93UG9wb3ZlcjogIWFwcGx5Tm93KCksXG4gICAgICBpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlOiB0cnVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAgIHRpbWU6IC41XG4gICAgICAgIH0sXG4gICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUNvbnRlbnRFbCxcbiAgICAgICAgd2hpdGVUaGVtZTogdHJ1ZSxcbiAgICAgICAgaWdub3JlQXJyb3c6IHRydWUsXG4gICAgICAgIHdpZHRoOiBwb3B1cENvbmZpZygpLndpZHRoLFxuICAgICAgICB3aWR0aEJ5UGFyZW50OiBwb3B1cENvbmZpZygpLndpZHRoQnlQYXJlbnQgPz8gZmFsc2UsXG4gICAgICAgIG1heFdpZHRoOiBwb3B1cENvbmZpZygpLm1heFdpZHRoLFxuICAgICAgICBtYXhIZWlnaHQ6IHBvcHVwQ29uZmlnKCkubWF4SGVpZ2h0LFxuICAgICAgICB6SW5kZXg6IHBvcHVwQ29uZmlnKCkuekluZGV4LFxuICAgICAgICBjbGFzc0luY2x1ZGU6ICdyb3VuZGVkLVs0cHhdICcgKyBwb3B1cENvbmZpZygpLmNsYXNzSW5jbHVkZSxcbiAgICAgICAgZGlyZWN0aW9uOiBwb3B1cENvbmZpZygpLmRpcmVjdGlvbixcbiAgICAgICAgdGltZXJEZXN0cm95OiBwb3B1cENvbmZpZygpLnRpbWVEZXN0cm95LFxuICAgICAgICBkaXJlY3Rpb25EaXN0YW5jZTogMixcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBtb2RlOiBwb3B1cENvbmZpZygpLnBvc2l0aW9uPy5tb2RlIHx8ICdzdGFydCcsXG4gICAgICAgICAgZGlzdGFuY2U6IHBvcHVwQ29uZmlnKCkucG9zaXRpb24/LmRpc3RhbmNlID8/IDBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cIlxuICAgIFtsYWJlbF09XCJsYWJlbERpc3BsYXkoKVwiXG4gICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclBvcG92ZXJDb250cm9sRXZlbnQoJGV2ZW50KVwiXG4gICAgKG91dFBvcG92ZXJFdmVudCk9XCJoYW5kbGVyUG9wb3ZlckV2ZW50KCRldmVudClcIlxuICAgIChvdXRDbGljayk9XCJoYW5kbGVyQXBwbHkoKVwiIC8+XG4gIEBpZiAoIWFwcGx5Tm93KCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIHctWzFweF0gYmctd2hpdGVcIj48L2Rpdj5cbiAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cInR5cGVCdXR0b24oKVwiXG4gICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW3NpemVCdXR0b25dPVwic2l6ZUJ1dHRvbigpXCJcbiAgICAgIFtwb3BvdmVyXT1cIntcbiAgICAgICAgZWxlbWVudFJlZkN1c3RvbTogYnV0dG9uRHJvcGRvd25FbCxcbiAgICAgICAgbW9kZTogJ2NsaWNrLXRvZ2dsZScsXG4gICAgICAgIGlnbm9yZUhpZGRlblBvcG92ZXJDb250ZW50V2hlbk1vdXNlTGVhdmU6IGlnbm9yZUhpZGRlblBvcG92ZXJDb250ZW50V2hlbk1vdXNlTGVhdmUoKSxcbiAgICAgICAgY29uZmlnOntcbiAgICAgICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgICAgIHRpbWU6LjVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUNvbnRlbnRFbCxcbiAgICAgICAgICB3aGl0ZVRoZW1lOiB0cnVlLFxuICAgICAgICAgIGlnbm9yZUFycm93OiB0cnVlLFxuICAgICAgICAgIHdpZHRoOiBwb3B1cENvbmZpZygpLndpZHRoLFxuICAgICAgICAgIG1heFdpZHRoOiBwb3B1cENvbmZpZygpLm1heFdpZHRoLFxuICAgICAgICAgIHdpZHRoQnlQYXJlbnQ6IHBvcHVwQ29uZmlnKCkud2lkdGhCeVBhcmVudCA/PyBmYWxzZSxcbiAgICAgICAgICBtYXhIZWlnaHQ6IHBvcHVwQ29uZmlnKCkubWF4SGVpZ2h0LFxuICAgICAgICAgIHpJbmRleDogcG9wdXBDb25maWcoKS56SW5kZXgsXG4gICAgICAgICAgZGlyZWN0aW9uOiBwb3B1cENvbmZpZygpLmRpcmVjdGlvbixcbiAgICAgICAgICBjbGFzc0luY2x1ZGU6IHBvcHVwQ29uZmlnKCkuY2xhc3NJbmNsdWRlLFxuICAgICAgICAgIGRpcmVjdGlvbkRpc3RhbmNlOjIsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIG1vZGU6ICdzdGFydCcsXG4gICAgICAgICAgICBkaXN0YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVwiXG4gICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cImNsYXNzSWNvblJpZ2h0KClcIlxuICAgICAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0luY2x1ZGUoKSB8fCAnIXB5LVs5cHhdJ1wiXG4gICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyUG9wb3ZlckNvbnRyb2xFdmVudCgkZXZlbnQpXCJcbiAgICAgIChvdXRQb3BvdmVyRXZlbnQpPVwiaGFuZGxlclBvcG92ZXJFdmVudCgkZXZlbnQpXCIgLz5cbiAgfVxuPC9kaXY+XG48bmctdGVtcGxhdGUgI3RlbXBsYXRlQ29udGVudEVsPlxuICA8ZGl2PlxuICAgIEBpZiAoaXRlbXMoKSAmJiBpdGVtcygpLmxlbmd0aCkge1xuICAgICAgPGRpdiBjbGFzcz1cIm0tMCBwLTBcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtcygpOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInt7IGl0ZW0uY2xhc3NSb3cgfHwgJycgfX1cIj5cbiAgICAgICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7Y29udGVudDogaXRlbS5wb3BvdmVyQ29udGVudCwgekluZGV4OiBwb3B1cENvbmZpZygpLnpJbmRleCwgZGlyZWN0aW9uRGlzdGFuY2U6IC0yfVwiXG4gICAgICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhaXRlbS5zaG93UG9wb3ZlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1iZy1saXN0LWhvdmVyIHJlbGF0aXZlIGN1cnNvci1wb2ludGVyIHB5LVs4cHhdIHt7IGl0ZW0uY2xhc3NJbmNsdWRlIHx8ICcnIH19ICB7eyBzaG93Qm9yZGVyQm90dG9tKCkgPyAnbGlicy11aS1ib3JkZXItYm90dG9tLWdlbmVyYWwnIDogJycgfX1cIlxuICAgICAgICAgICAgICBbY2xhc3MuZmxleF09XCIhaXRlbS5pZ25vcmVGbGV4XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnB4LVsxNnB4XV09XCJhcHBseU5vdygpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBsLVsxNnB4XV09XCIhYXBwbHlOb3coKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wci1bNDBweF1dPVwiIWFwcGx5Tm93KClcIlxuICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cIml0ZW0uZGlzYWJsZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cIml0ZW0uZGlzYWJsZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyU2VsZWN0SXRlbSgkZXZlbnQsaXRlbSlcIj5cbiAgICAgICAgICAgICAgQGlmIChpdGVtW2ZpZWxkQ2xhc3NJY29uTGVmdCgpXSkge1xuICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJpdGVtW2ZpZWxkQ2xhc3NJY29uTGVmdCgpXVwiPjwvaT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaXRlbVtmaWVsZENsYXNzKCldXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIml0ZW1bZmllbGREaXNwbGF5KCldIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgQGlmIChpdGVtLmJ1dHRvblRlbXBsYXRlQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbY2xhc3NJY29uTGVmdF09XCJpdGVtLmJ1dHRvblRlbXBsYXRlQ29uZmlnLmljb25MZWZ0XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJpdGVtLmJ1dHRvblRlbXBsYXRlQ29uZmlnLmljb25cIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0uYnV0dG9uVGVtcGxhdGVDb25maWcubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzTGFiZWxdPVwiaXRlbS5idXR0b25UZW1wbGF0ZUNvbmZpZy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNsaWNrQnV0dG9uVGVtcGxhdGUoJGV2ZW50LCBpdGVtLCBpdGVtcygpKVwiXG4gICAgICAgICAgICAgICAgICBbdHlwZV09XCJpdGVtLmJ1dHRvblRlbXBsYXRlQ29uZmlnLnR5cGVcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtPy5zdWJUZW1wbGF0ZSB8fCBudWxsO2NvbnRleHQ6e2l0ZW06aXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgQGlmIChpdGVtW2tleUZpZWxkKCldID09PSBrZXlTZWxlY3RlZCgpICYmICFhcHBseU5vdygpKSB7XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hlY2sgYWJzb2x1dGUgcmlnaHQtWzE2cHhdIHRvcC1bOHB4XVwiPjwvaT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBjbGFzcz1cInAtWzIwcHhdXCJcbiAgICAgICAgW2lubmVySHRtbF09XCInaTE4bl9ub19kYXRhJyB8IHRyYW5zbGF0ZVwiPjwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './dropdown.component';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvYnV0dG9ucy9kcm9wZG93bi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZHJvcGRvd24uY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLWJ1dHRvbnMtZHJvcGRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvYnV0dG9ucy9kcm9wZG93bi9zcmMvbGlicy11aS1jb21wb25lbnRzLWJ1dHRvbnMtZHJvcGRvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { computed, input, model, output, Component, ChangeDetectionStrategy } from '@angular/core';
|
|
4
|
+
import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
|
|
5
|
+
import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
|
|
6
|
+
import { escapeHtml } from '@libs-ui/utils';
|
|
7
|
+
import * as i1 from '@ngx-translate/core';
|
|
8
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
9
|
+
|
|
10
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
11
|
+
class LibsUiComponentsButtonsDropdownComponent {
|
|
12
|
+
/* PROPERTY */
|
|
13
|
+
labelDisplay = computed(this.labelComputed.bind(this));
|
|
14
|
+
/* INPUT */
|
|
15
|
+
label = input();
|
|
16
|
+
fieldClass = input('class'); // change color label item of items
|
|
17
|
+
fieldClassIconLeft = input('classIconLeft'); // iconclass item of items
|
|
18
|
+
items = input.required({ transform: data => data.map(item => ({ ...item, [this.fieldDisplay()]: escapeHtml(item[this.fieldDisplay()]) })) }); // requried
|
|
19
|
+
fieldDisplay = input('label'); // requried
|
|
20
|
+
keyField = input('key');
|
|
21
|
+
keySelected = model();
|
|
22
|
+
applyNow = input(false); // if not applyNow: keyField is requried
|
|
23
|
+
showBorderBottom = input(false);
|
|
24
|
+
;
|
|
25
|
+
disable = input(false);
|
|
26
|
+
;
|
|
27
|
+
sizeButton = input('medium');
|
|
28
|
+
classLabel = input('');
|
|
29
|
+
iconOnlyType = input(false);
|
|
30
|
+
classIconRight = input('libs-ui-icon-move-right rotate-[90deg]');
|
|
31
|
+
classIconLeft = input('');
|
|
32
|
+
typeButton = input('button-primary');
|
|
33
|
+
popupConfig = input({ width: 205, maxWidth: 250, maxHeight: 140, zIndex: 1200, direction: 'top' });
|
|
34
|
+
ignoreHiddenPopoverContentWhenMouseLeave = input(true);
|
|
35
|
+
classInclude = input('');
|
|
36
|
+
modePopover = input('click-toggle');
|
|
37
|
+
classIncludeContainer = input();
|
|
38
|
+
;
|
|
39
|
+
/* OUTPUT */
|
|
40
|
+
outSelectItem = output();
|
|
41
|
+
outHover = output();
|
|
42
|
+
outApply = output(); // sử dụng cho bấm button left chế độ applyNow = false;
|
|
43
|
+
outPopoverEvent = output();
|
|
44
|
+
outFunctionsControl = output();
|
|
45
|
+
outIconEvent = output();
|
|
46
|
+
/* FUNCTIONS */
|
|
47
|
+
async handlerApply() {
|
|
48
|
+
if (!this.applyNow()) {
|
|
49
|
+
this.outApply.emit(this.items().find(item => item[this.keyField()] === this.keySelected()));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async handlerSelectItem(event, data) {
|
|
53
|
+
event.stopPropagation();
|
|
54
|
+
if (data.subTemplate) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (!this.applyNow()) {
|
|
58
|
+
this.keySelected.set(data[this.keyField()]);
|
|
59
|
+
}
|
|
60
|
+
this.outSelectItem.emit(data);
|
|
61
|
+
this.outHover.emit(false);
|
|
62
|
+
}
|
|
63
|
+
async handlerPopoverEvent(event) {
|
|
64
|
+
this.outPopoverEvent.emit(event);
|
|
65
|
+
}
|
|
66
|
+
async handlerPopoverControlEvent(control) {
|
|
67
|
+
this.outFunctionsControl.emit(control);
|
|
68
|
+
}
|
|
69
|
+
async handlerClickButtonTemplate(event, data, items) {
|
|
70
|
+
event.stopPropagation();
|
|
71
|
+
data.buttonTemplateConfig.action(data, items);
|
|
72
|
+
}
|
|
73
|
+
labelComputed() {
|
|
74
|
+
if (!this.keySelected() || !this.items() || !this.items().length || !this.keyField() || this.applyNow()) {
|
|
75
|
+
return this.label();
|
|
76
|
+
}
|
|
77
|
+
for (const item of this.items()) {
|
|
78
|
+
if (item[this.keyField()] === this.keySelected()) {
|
|
79
|
+
return item[this.fieldDisplay()];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return this.label();
|
|
83
|
+
}
|
|
84
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsButtonsDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
85
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsButtonsDropdownComponent, isStandalone: true, selector: "libs_ui-components-buttons-dropdown", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, fieldClass: { classPropertyName: "fieldClass", publicName: "fieldClass", isSignal: true, isRequired: false, transformFunction: null }, fieldClassIconLeft: { classPropertyName: "fieldClassIconLeft", publicName: "fieldClassIconLeft", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, fieldDisplay: { classPropertyName: "fieldDisplay", publicName: "fieldDisplay", isSignal: true, isRequired: false, transformFunction: null }, keyField: { classPropertyName: "keyField", publicName: "keyField", isSignal: true, isRequired: false, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: false, transformFunction: null }, applyNow: { classPropertyName: "applyNow", publicName: "applyNow", isSignal: true, isRequired: false, transformFunction: null }, showBorderBottom: { classPropertyName: "showBorderBottom", publicName: "showBorderBottom", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, sizeButton: { classPropertyName: "sizeButton", publicName: "sizeButton", isSignal: true, isRequired: false, transformFunction: null }, classLabel: { classPropertyName: "classLabel", publicName: "classLabel", isSignal: true, isRequired: false, transformFunction: null }, iconOnlyType: { classPropertyName: "iconOnlyType", publicName: "iconOnlyType", isSignal: true, isRequired: false, transformFunction: null }, classIconRight: { classPropertyName: "classIconRight", publicName: "classIconRight", isSignal: true, isRequired: false, transformFunction: null }, classIconLeft: { classPropertyName: "classIconLeft", publicName: "classIconLeft", isSignal: true, isRequired: false, transformFunction: null }, typeButton: { classPropertyName: "typeButton", publicName: "typeButton", isSignal: true, isRequired: false, transformFunction: null }, popupConfig: { classPropertyName: "popupConfig", publicName: "popupConfig", isSignal: true, isRequired: false, transformFunction: null }, ignoreHiddenPopoverContentWhenMouseLeave: { classPropertyName: "ignoreHiddenPopoverContentWhenMouseLeave", publicName: "ignoreHiddenPopoverContentWhenMouseLeave", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, modePopover: { classPropertyName: "modePopover", publicName: "modePopover", isSignal: true, isRequired: false, transformFunction: null }, classIncludeContainer: { classPropertyName: "classIncludeContainer", publicName: "classIncludeContainer", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keySelected: "keySelectedChange", outSelectItem: "outSelectItem", outHover: "outHover", outApply: "outApply", outPopoverEvent: "outPopoverEvent", outFunctionsControl: "outFunctionsControl", outIconEvent: "outIconEvent" }, ngImport: i0, template: "<div #buttonDropdownEl\n class=\"libs-ui-buttons-dropdown flex {{ classIncludeContainer() || '' }}\"\n [class.libs-ui-buttons-dropdown-un-apply-now]=\"!applyNow()\"\n [class.libs-ui-buttons-dropdown-apply-now-button-primary]=\"applyNow() && typeButton() === 'button-primary'\"\n [class.libs-ui-buttons-dropdown-apply-now-button-secondary]=\"applyNow() && typeButton() === 'button-secondary'\">\n <libs_ui-components-buttons-button [disable]=\"disable()\"\n [iconOnlyType]=\"iconOnlyType()\"\n [classIconLeft]=\"classIconLeft()\"\n [classIconRight]=\"!applyNow() ? '' : classIconRight()\"\n [type]=\"typeButton()\"\n [classLabel]=\"classLabel()\"\n [classInclude]=\"classInclude()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n elementRefCustom: buttonDropdownEl,\n mode: modePopover(),\n ignoreShowPopover: !applyNow(),\n ignoreHiddenPopoverContentWhenMouseLeave: true,\n config: {\n animationConfig: {\n time: .5\n },\n template: templateContentEl,\n whiteTheme: true,\n ignoreArrow: true,\n width: popupConfig().width,\n widthByParent: popupConfig().widthByParent ?? false,\n maxWidth: popupConfig().maxWidth,\n maxHeight: popupConfig().maxHeight,\n zIndex: popupConfig().zIndex,\n classInclude: 'rounded-[4px] ' + popupConfig().classInclude,\n direction: popupConfig().direction,\n timerDestroy: popupConfig().timeDestroy,\n directionDistance: 2,\n position: {\n mode: popupConfig().position?.mode || 'start',\n distance: popupConfig().position?.distance ?? 0\n }\n }\n }\"\n [label]=\"labelDisplay()\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outPopoverEvent)=\"handlerPopoverEvent($event)\"\n (outClick)=\"handlerApply()\" />\n @if (!applyNow()) {\n <div class=\"h-full w-[1px] bg-white\"></div>\n <libs_ui-components-buttons-button [type]=\"typeButton()\"\n [disable]=\"disable()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n elementRefCustom: buttonDropdownEl,\n mode: 'click-toggle',\n ignoreHiddenPopoverContentWhenMouseLeave: ignoreHiddenPopoverContentWhenMouseLeave(),\n config:{\n animationConfig: {\n time:.5\n },\n template: templateContentEl,\n whiteTheme: true,\n ignoreArrow: true,\n width: popupConfig().width,\n maxWidth: popupConfig().maxWidth,\n widthByParent: popupConfig().widthByParent ?? false,\n maxHeight: popupConfig().maxHeight,\n zIndex: popupConfig().zIndex,\n direction: popupConfig().direction,\n classInclude: popupConfig().classInclude,\n directionDistance:2,\n position: {\n mode: 'start',\n distance: 0\n }\n }\n }\"\n [iconOnlyType]=\"true\"\n [classIconRight]=\"classIconRight()\"\n [classInclude]=\"classInclude() || '!py-[9px]'\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outPopoverEvent)=\"handlerPopoverEvent($event)\" />\n }\n</div>\n<ng-template #templateContentEl>\n <div>\n @if (items() && items().length) {\n <div class=\"m-0 p-0\">\n @for (item of items(); track item) {\n <div class=\"{{ item.classRow || '' }}\">\n <div LibsUiComponentsPopoverDirective\n [config]=\"{content: item.popoverContent, zIndex: popupConfig().zIndex, directionDistance: -2}\"\n [ignoreShowPopover]=\"!item.showPopover\"\n class=\"libs-ui-bg-list-hover relative cursor-pointer py-[8px] {{ item.classInclude || '' }} {{ showBorderBottom() ? 'libs-ui-border-bottom-general' : '' }}\"\n [class.flex]=\"!item.ignoreFlex\"\n [class.px-[16px]]=\"applyNow()\"\n [class.pl-[16px]]=\"!applyNow()\"\n [class.pr-[40px]]=\"!applyNow()\"\n [class.libs-ui-disable]=\"item.disable\"\n [class.pointer-events-none]=\"item.disable\"\n (click)=\"handlerSelectItem($event,item)\">\n @if (item[fieldClassIconLeft()]) {\n <i [class]=\"item[fieldClassIconLeft()]\"></i>\n }\n <span [class]=\"item[fieldClass()]\"\n [innerHtml]=\"item[fieldDisplay()] | translate\">\n </span>\n @if (item.buttonTemplateConfig) {\n <libs_ui-components-buttons-button [classIconLeft]=\"item.buttonTemplateConfig.iconLeft\"\n [classIconRight]=\"item.buttonTemplateConfig.icon\"\n [label]=\"item.buttonTemplateConfig.label\"\n [classLabel]=\"item.buttonTemplateConfig.label\"\n (outClick)=\"handlerClickButtonTemplate($event, item, items())\"\n [type]=\"item.buttonTemplateConfig.type\" />\n }\n <ng-container *ngTemplateOutlet=\"item?.subTemplate || null;context:{item:item}\"></ng-container>\n @if (item[keyField()] === keySelected() && !applyNow()) {\n <i class=\"libs-ui-icon-check absolute right-[16px] top-[8px]\"></i>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"p-[20px]\"\n [innerHtml]=\"'i18n_no_data' | translate\"></div>\n }\n </div>\n</ng-template>\n", styles: [":host ::ng-deep .libs-ui-buttons-dropdown{max-width:max-content}:host ::ng-deep .libs-ui-buttons-dropdown .libs-ui-button{border-radius:0!important;height:100%}:host ::ng-deep .libs-ui-buttons-dropdown>:first-child libs_ui-components-popover .libs-ui-button{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;padding-right:8px}:host ::ng-deep .libs-ui-buttons-dropdown>:last-child libs_ui-components-popover .libs-ui-button{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important;padding-left:0}:host ::ng-deep .libs-ui-buttons-dropdown:hover>:first-child .libs-ui-button-primary{background:var(--libs-ui-color-light-1, #4E8CF7)!important}:host ::ng-deep .libs-ui-buttons-dropdown:hover>:last-child .libs-ui-button-primary{background:var(--libs-ui-color-light-1, #4E8CF7)!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-un-apply-now>:first-child libs_ui-components-popover .libs-ui-button{padding-right:12px}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-un-apply-now>:last-child libs_ui-components-popover .libs-ui-button{border-left:1px solid transparent!important;padding:4px 12px}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-primary>:first-child libs_ui-components-popover .libs-ui-button{border-right:1px solid transparent}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-primary>:last-child libs_ui-components-popover .libs-ui-button{border-left:1px solid transparent}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary>:first-child libs_ui-components-popover .libs-ui-button{border-right:none!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary>:last-child libs_ui-components-popover .libs-ui-button{border-left:none!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary:hover *>[class^=libs-ui-icon]:before{color:var(--libs-ui-color-light-1, #4E8CF7)}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary:hover .libs-ui-button{color:var(--libs-ui-color-light-1, #4E8CF7);background:var(--mo-button-other-color-background-hover, #E9F1FE)!important}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
86
|
+
}
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsButtonsDropdownComponent, decorators: [{
|
|
88
|
+
type: Component,
|
|
89
|
+
args: [{ selector: 'libs_ui-components-buttons-dropdown', standalone: true, imports: [
|
|
90
|
+
TranslateModule, NgTemplateOutlet,
|
|
91
|
+
LibsUiComponentsButtonsButtonComponent,
|
|
92
|
+
LibsUiComponentsPopoverComponent
|
|
93
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #buttonDropdownEl\n class=\"libs-ui-buttons-dropdown flex {{ classIncludeContainer() || '' }}\"\n [class.libs-ui-buttons-dropdown-un-apply-now]=\"!applyNow()\"\n [class.libs-ui-buttons-dropdown-apply-now-button-primary]=\"applyNow() && typeButton() === 'button-primary'\"\n [class.libs-ui-buttons-dropdown-apply-now-button-secondary]=\"applyNow() && typeButton() === 'button-secondary'\">\n <libs_ui-components-buttons-button [disable]=\"disable()\"\n [iconOnlyType]=\"iconOnlyType()\"\n [classIconLeft]=\"classIconLeft()\"\n [classIconRight]=\"!applyNow() ? '' : classIconRight()\"\n [type]=\"typeButton()\"\n [classLabel]=\"classLabel()\"\n [classInclude]=\"classInclude()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n elementRefCustom: buttonDropdownEl,\n mode: modePopover(),\n ignoreShowPopover: !applyNow(),\n ignoreHiddenPopoverContentWhenMouseLeave: true,\n config: {\n animationConfig: {\n time: .5\n },\n template: templateContentEl,\n whiteTheme: true,\n ignoreArrow: true,\n width: popupConfig().width,\n widthByParent: popupConfig().widthByParent ?? false,\n maxWidth: popupConfig().maxWidth,\n maxHeight: popupConfig().maxHeight,\n zIndex: popupConfig().zIndex,\n classInclude: 'rounded-[4px] ' + popupConfig().classInclude,\n direction: popupConfig().direction,\n timerDestroy: popupConfig().timeDestroy,\n directionDistance: 2,\n position: {\n mode: popupConfig().position?.mode || 'start',\n distance: popupConfig().position?.distance ?? 0\n }\n }\n }\"\n [label]=\"labelDisplay()\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outPopoverEvent)=\"handlerPopoverEvent($event)\"\n (outClick)=\"handlerApply()\" />\n @if (!applyNow()) {\n <div class=\"h-full w-[1px] bg-white\"></div>\n <libs_ui-components-buttons-button [type]=\"typeButton()\"\n [disable]=\"disable()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n elementRefCustom: buttonDropdownEl,\n mode: 'click-toggle',\n ignoreHiddenPopoverContentWhenMouseLeave: ignoreHiddenPopoverContentWhenMouseLeave(),\n config:{\n animationConfig: {\n time:.5\n },\n template: templateContentEl,\n whiteTheme: true,\n ignoreArrow: true,\n width: popupConfig().width,\n maxWidth: popupConfig().maxWidth,\n widthByParent: popupConfig().widthByParent ?? false,\n maxHeight: popupConfig().maxHeight,\n zIndex: popupConfig().zIndex,\n direction: popupConfig().direction,\n classInclude: popupConfig().classInclude,\n directionDistance:2,\n position: {\n mode: 'start',\n distance: 0\n }\n }\n }\"\n [iconOnlyType]=\"true\"\n [classIconRight]=\"classIconRight()\"\n [classInclude]=\"classInclude() || '!py-[9px]'\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outPopoverEvent)=\"handlerPopoverEvent($event)\" />\n }\n</div>\n<ng-template #templateContentEl>\n <div>\n @if (items() && items().length) {\n <div class=\"m-0 p-0\">\n @for (item of items(); track item) {\n <div class=\"{{ item.classRow || '' }}\">\n <div LibsUiComponentsPopoverDirective\n [config]=\"{content: item.popoverContent, zIndex: popupConfig().zIndex, directionDistance: -2}\"\n [ignoreShowPopover]=\"!item.showPopover\"\n class=\"libs-ui-bg-list-hover relative cursor-pointer py-[8px] {{ item.classInclude || '' }} {{ showBorderBottom() ? 'libs-ui-border-bottom-general' : '' }}\"\n [class.flex]=\"!item.ignoreFlex\"\n [class.px-[16px]]=\"applyNow()\"\n [class.pl-[16px]]=\"!applyNow()\"\n [class.pr-[40px]]=\"!applyNow()\"\n [class.libs-ui-disable]=\"item.disable\"\n [class.pointer-events-none]=\"item.disable\"\n (click)=\"handlerSelectItem($event,item)\">\n @if (item[fieldClassIconLeft()]) {\n <i [class]=\"item[fieldClassIconLeft()]\"></i>\n }\n <span [class]=\"item[fieldClass()]\"\n [innerHtml]=\"item[fieldDisplay()] | translate\">\n </span>\n @if (item.buttonTemplateConfig) {\n <libs_ui-components-buttons-button [classIconLeft]=\"item.buttonTemplateConfig.iconLeft\"\n [classIconRight]=\"item.buttonTemplateConfig.icon\"\n [label]=\"item.buttonTemplateConfig.label\"\n [classLabel]=\"item.buttonTemplateConfig.label\"\n (outClick)=\"handlerClickButtonTemplate($event, item, items())\"\n [type]=\"item.buttonTemplateConfig.type\" />\n }\n <ng-container *ngTemplateOutlet=\"item?.subTemplate || null;context:{item:item}\"></ng-container>\n @if (item[keyField()] === keySelected() && !applyNow()) {\n <i class=\"libs-ui-icon-check absolute right-[16px] top-[8px]\"></i>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"p-[20px]\"\n [innerHtml]=\"'i18n_no_data' | translate\"></div>\n }\n </div>\n</ng-template>\n", styles: [":host ::ng-deep .libs-ui-buttons-dropdown{max-width:max-content}:host ::ng-deep .libs-ui-buttons-dropdown .libs-ui-button{border-radius:0!important;height:100%}:host ::ng-deep .libs-ui-buttons-dropdown>:first-child libs_ui-components-popover .libs-ui-button{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;padding-right:8px}:host ::ng-deep .libs-ui-buttons-dropdown>:last-child libs_ui-components-popover .libs-ui-button{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important;padding-left:0}:host ::ng-deep .libs-ui-buttons-dropdown:hover>:first-child .libs-ui-button-primary{background:var(--libs-ui-color-light-1, #4E8CF7)!important}:host ::ng-deep .libs-ui-buttons-dropdown:hover>:last-child .libs-ui-button-primary{background:var(--libs-ui-color-light-1, #4E8CF7)!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-un-apply-now>:first-child libs_ui-components-popover .libs-ui-button{padding-right:12px}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-un-apply-now>:last-child libs_ui-components-popover .libs-ui-button{border-left:1px solid transparent!important;padding:4px 12px}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-primary>:first-child libs_ui-components-popover .libs-ui-button{border-right:1px solid transparent}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-primary>:last-child libs_ui-components-popover .libs-ui-button{border-left:1px solid transparent}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary>:first-child libs_ui-components-popover .libs-ui-button{border-right:none!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary>:last-child libs_ui-components-popover .libs-ui-button{border-left:none!important}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary:hover *>[class^=libs-ui-icon]:before{color:var(--libs-ui-color-light-1, #4E8CF7)}:host ::ng-deep .libs-ui-buttons-dropdown.libs-ui-buttons-dropdown-apply-now-button-secondary:hover .libs-ui-button{color:var(--libs-ui-color-light-1, #4E8CF7);background:var(--mo-button-other-color-background-hover, #E9F1FE)!important}\n"] }]
|
|
94
|
+
}] });
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Generated bundle index. Do not edit.
|
|
98
|
+
*/
|
|
99
|
+
|
|
100
|
+
export { LibsUiComponentsButtonsDropdownComponent };
|
|
101
|
+
//# sourceMappingURL=libs-ui-components-buttons-dropdown.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libs-ui-components-buttons-dropdown.mjs","sources":["../../../../../../libs-ui/components/buttons/dropdown/src/dropdown.component.ts","../../../../../../libs-ui/components/buttons/dropdown/src/dropdown.component.html","../../../../../../libs-ui/components/buttons/dropdown/src/libs-ui-components-buttons-dropdown.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\nimport { IPopupConfigButtonDropdown, LibsUiComponentsButtonsButtonComponent, TYPE_BUTTON, TYPE_SIZE_BUTTON } from '@libs-ui/components-buttons-button';\nimport { IPopoverFunctionControlEvent, LibsUiComponentsPopoverComponent, TYPE_POPOVER_EVENT, TYPE_POPOVER_MODE } from '@libs-ui/components-popover';\nimport { escapeHtml } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-buttons-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrl: './dropdown.component.scss',\n standalone: true,\n imports: [\n TranslateModule, NgTemplateOutlet,\n LibsUiComponentsButtonsButtonComponent,\n LibsUiComponentsPopoverComponent\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibsUiComponentsButtonsDropdownComponent {\n\n /* PROPERTY */\n protected labelDisplay = computed(this.labelComputed.bind(this))\n\n /* INPUT */\n readonly label = input<string>();\n readonly fieldClass = input<string>('class'); // change color label item of items\n readonly fieldClassIconLeft = input<string>('classIconLeft'); // iconclass item of items\n readonly items = input.required<Array<any>, Array<any>>({ transform: data => data.map(item => ({ ...item, [this.fieldDisplay()]: escapeHtml(item[this.fieldDisplay()]) })) }); // requried\n readonly fieldDisplay = input<string>('label'); // requried\n readonly keyField = input<string>('key');\n readonly keySelected = model<string>();\n readonly applyNow = input<boolean>(false); // if not applyNow: keyField is requried\n readonly showBorderBottom = input<boolean>(false);;\n readonly disable = input<boolean>(false);;\n readonly sizeButton = input<TYPE_SIZE_BUTTON>('medium');\n readonly classLabel = input<string>('');\n readonly iconOnlyType = input<boolean>(false);\n readonly classIconRight = input<string>('libs-ui-icon-move-right rotate-[90deg]');\n readonly classIconLeft = input<string>('');\n readonly typeButton = input<TYPE_BUTTON>('button-primary');\n readonly popupConfig = input<IPopupConfigButtonDropdown>({ width: 205, maxWidth: 250, maxHeight: 140, zIndex: 1200, direction: 'top' });\n readonly ignoreHiddenPopoverContentWhenMouseLeave = input<boolean>(true);\n readonly classInclude = input<string>('');\n readonly modePopover = input<TYPE_POPOVER_MODE>('click-toggle');\n readonly classIncludeContainer = input<string>();;\n\n /* OUTPUT */\n readonly outSelectItem = output<any>();\n readonly outHover = output<boolean>();\n readonly outApply = output<any>(); // sử dụng cho bấm button left chế độ applyNow = false;\n readonly outPopoverEvent = output<TYPE_POPOVER_EVENT>();\n readonly outFunctionsControl = output<IPopoverFunctionControlEvent>();\n readonly outIconEvent = output<MouseEvent>();\n\n /* FUNCTIONS */\n protected async handlerApply() {\n if (!this.applyNow()) {\n this.outApply.emit(this.items().find(item => item[this.keyField()] === this.keySelected()));\n }\n }\n\n protected async handlerSelectItem(event: Event, data: any) {\n event.stopPropagation();\n if (data.subTemplate) {\n return;\n }\n if (!this.applyNow()) {\n this.keySelected.set(data[this.keyField()]);\n }\n this.outSelectItem.emit(data);\n this.outHover.emit(false);\n }\n\n protected async handlerPopoverEvent(event: TYPE_POPOVER_EVENT) {\n this.outPopoverEvent.emit(event);\n }\n\n protected async handlerPopoverControlEvent(control: IPopoverFunctionControlEvent) {\n this.outFunctionsControl.emit(control);\n }\n\n protected async handlerClickButtonTemplate(event: Event, data: any, items: Array<any>) {\n event.stopPropagation();\n data.buttonTemplateConfig.action(data, items);\n }\n\n private labelComputed() {\n if (!this.keySelected() || !this.items() || !this.items().length || !this.keyField() || this.applyNow()) {\n return this.label();\n }\n for (const item of this.items()) {\n if (item[this.keyField()] === this.keySelected()) {\n return item[this.fieldDisplay()];\n }\n }\n\n return this.label();\n }\n\n}","<div #buttonDropdownEl\n class=\"libs-ui-buttons-dropdown flex {{ classIncludeContainer() || '' }}\"\n [class.libs-ui-buttons-dropdown-un-apply-now]=\"!applyNow()\"\n [class.libs-ui-buttons-dropdown-apply-now-button-primary]=\"applyNow() && typeButton() === 'button-primary'\"\n [class.libs-ui-buttons-dropdown-apply-now-button-secondary]=\"applyNow() && typeButton() === 'button-secondary'\">\n <libs_ui-components-buttons-button [disable]=\"disable()\"\n [iconOnlyType]=\"iconOnlyType()\"\n [classIconLeft]=\"classIconLeft()\"\n [classIconRight]=\"!applyNow() ? '' : classIconRight()\"\n [type]=\"typeButton()\"\n [classLabel]=\"classLabel()\"\n [classInclude]=\"classInclude()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n elementRefCustom: buttonDropdownEl,\n mode: modePopover(),\n ignoreShowPopover: !applyNow(),\n ignoreHiddenPopoverContentWhenMouseLeave: true,\n config: {\n animationConfig: {\n time: .5\n },\n template: templateContentEl,\n whiteTheme: true,\n ignoreArrow: true,\n width: popupConfig().width,\n widthByParent: popupConfig().widthByParent ?? false,\n maxWidth: popupConfig().maxWidth,\n maxHeight: popupConfig().maxHeight,\n zIndex: popupConfig().zIndex,\n classInclude: 'rounded-[4px] ' + popupConfig().classInclude,\n direction: popupConfig().direction,\n timerDestroy: popupConfig().timeDestroy,\n directionDistance: 2,\n position: {\n mode: popupConfig().position?.mode || 'start',\n distance: popupConfig().position?.distance ?? 0\n }\n }\n }\"\n [label]=\"labelDisplay()\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outPopoverEvent)=\"handlerPopoverEvent($event)\"\n (outClick)=\"handlerApply()\" />\n @if (!applyNow()) {\n <div class=\"h-full w-[1px] bg-white\"></div>\n <libs_ui-components-buttons-button [type]=\"typeButton()\"\n [disable]=\"disable()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n elementRefCustom: buttonDropdownEl,\n mode: 'click-toggle',\n ignoreHiddenPopoverContentWhenMouseLeave: ignoreHiddenPopoverContentWhenMouseLeave(),\n config:{\n animationConfig: {\n time:.5\n },\n template: templateContentEl,\n whiteTheme: true,\n ignoreArrow: true,\n width: popupConfig().width,\n maxWidth: popupConfig().maxWidth,\n widthByParent: popupConfig().widthByParent ?? false,\n maxHeight: popupConfig().maxHeight,\n zIndex: popupConfig().zIndex,\n direction: popupConfig().direction,\n classInclude: popupConfig().classInclude,\n directionDistance:2,\n position: {\n mode: 'start',\n distance: 0\n }\n }\n }\"\n [iconOnlyType]=\"true\"\n [classIconRight]=\"classIconRight()\"\n [classInclude]=\"classInclude() || '!py-[9px]'\"\n (outFunctionsControl)=\"handlerPopoverControlEvent($event)\"\n (outPopoverEvent)=\"handlerPopoverEvent($event)\" />\n }\n</div>\n<ng-template #templateContentEl>\n <div>\n @if (items() && items().length) {\n <div class=\"m-0 p-0\">\n @for (item of items(); track item) {\n <div class=\"{{ item.classRow || '' }}\">\n <div LibsUiComponentsPopoverDirective\n [config]=\"{content: item.popoverContent, zIndex: popupConfig().zIndex, directionDistance: -2}\"\n [ignoreShowPopover]=\"!item.showPopover\"\n class=\"libs-ui-bg-list-hover relative cursor-pointer py-[8px] {{ item.classInclude || '' }} {{ showBorderBottom() ? 'libs-ui-border-bottom-general' : '' }}\"\n [class.flex]=\"!item.ignoreFlex\"\n [class.px-[16px]]=\"applyNow()\"\n [class.pl-[16px]]=\"!applyNow()\"\n [class.pr-[40px]]=\"!applyNow()\"\n [class.libs-ui-disable]=\"item.disable\"\n [class.pointer-events-none]=\"item.disable\"\n (click)=\"handlerSelectItem($event,item)\">\n @if (item[fieldClassIconLeft()]) {\n <i [class]=\"item[fieldClassIconLeft()]\"></i>\n }\n <span [class]=\"item[fieldClass()]\"\n [innerHtml]=\"item[fieldDisplay()] | translate\">\n </span>\n @if (item.buttonTemplateConfig) {\n <libs_ui-components-buttons-button [classIconLeft]=\"item.buttonTemplateConfig.iconLeft\"\n [classIconRight]=\"item.buttonTemplateConfig.icon\"\n [label]=\"item.buttonTemplateConfig.label\"\n [classLabel]=\"item.buttonTemplateConfig.label\"\n (outClick)=\"handlerClickButtonTemplate($event, item, items())\"\n [type]=\"item.buttonTemplateConfig.type\" />\n }\n <ng-container *ngTemplateOutlet=\"item?.subTemplate || null;context:{item:item}\"></ng-container>\n @if (item[keyField()] === keySelected() && !applyNow()) {\n <i class=\"libs-ui-icon-check absolute right-[16px] top-[8px]\"></i>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"p-[20px]\"\n [innerHtml]=\"'i18n_no_data' | translate\"></div>\n }\n </div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './dropdown.component';
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@libs-ui/components-buttons-dropdown",
|
|
3
|
+
"version": "0.2.5",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^18.2.0",
|
|
6
|
+
"@angular/core": "^18.2.0"
|
|
7
|
+
},
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"module": "fesm2022/libs-ui-components-buttons-dropdown.mjs",
|
|
10
|
+
"typings": "index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
"./package.json": {
|
|
13
|
+
"default": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./index.d.ts",
|
|
17
|
+
"esm2022": "./esm2022/libs-ui-components-buttons-dropdown.mjs",
|
|
18
|
+
"esm": "./esm2022/libs-ui-components-buttons-dropdown.mjs",
|
|
19
|
+
"default": "./fesm2022/libs-ui-components-buttons-dropdown.mjs"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"tslib": "^2.3.0"
|
|
24
|
+
}
|
|
25
|
+
}
|