@libs-ui/components-buttons-dropdown 0.1.1-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +161 -0
- package/dropdown.component.d.ts +44 -0
- package/dropdown.interface.d.ts +40 -0
- package/esm2022/dropdown.component.mjs +92 -0
- package/esm2022/dropdown.interface.mjs +2 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/libs-ui-components-buttons-dropdown.mjs +5 -0
- package/fesm2022/libs-ui-components-buttons-dropdown.mjs +99 -0
- package/fesm2022/libs-ui-components-buttons-dropdown.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/package.json +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Button Dropdown
|
|
2
|
+
|
|
3
|
+
## Giới thiệu
|
|
4
|
+
|
|
5
|
+
`@libs-ui/components-buttons-dropdown` là một component Dropdown Button dùng cho Angular, cho phép hiển thị danh sách các tùy chọn khi nhấn vào button, hỗ trợ custom templates, binding lựa chọn và nhiều tùy chỉnh linh hoạt.
|
|
6
|
+
|
|
7
|
+
## Tính năng
|
|
8
|
+
|
|
9
|
+
- Hiển thị danh sách items dưới dạng popover khi click (hoặc hover)
|
|
10
|
+
- Hỗ trợ custom label và key cho items
|
|
11
|
+
- Two-way binding giá trị chọn (`keySelected`)
|
|
12
|
+
- Tuỳ chọn auto apply (`applyNow`) hoặc yêu cầu click nút Áp dụng
|
|
13
|
+
- Hỗ trợ vô hiệu hóa và tuỳ chỉnh kích thước, kiểu button
|
|
14
|
+
- Cấu hình popover (kích thước, vị trí, z-index, direction)
|
|
15
|
+
- Hỗ trợ custom CSS classes cho container và items
|
|
16
|
+
|
|
17
|
+
## Cài đặt
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @libs-ui/components-buttons-dropdown
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
hoặc
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
yarn add @libs-ui/components-buttons-dropdown
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Sử dụng
|
|
30
|
+
|
|
31
|
+
### Inline Template
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { Component } from '@angular/core';
|
|
35
|
+
import { LibsUiComponentsButtonsDropdownComponent } from '@libs-ui/components-buttons-dropdown';
|
|
36
|
+
|
|
37
|
+
@Component({
|
|
38
|
+
selector: 'app-example',
|
|
39
|
+
standalone: true,
|
|
40
|
+
imports: [LibsUiComponentsButtonsDropdownComponent],
|
|
41
|
+
template: `
|
|
42
|
+
<libs_ui-components-buttons-dropdown
|
|
43
|
+
[label]="'Chọn mục'"
|
|
44
|
+
[items]="items"
|
|
45
|
+
[(keySelected)]="selectedKey"
|
|
46
|
+
(outSelectItem)="onSelect($event)"></libs_ui-components-buttons-dropdown>
|
|
47
|
+
`,
|
|
48
|
+
})
|
|
49
|
+
export class ExampleComponent {
|
|
50
|
+
items = [
|
|
51
|
+
{ id: '1', label: 'Option 1' },
|
|
52
|
+
{ id: '2', label: 'Option 2' },
|
|
53
|
+
{ id: '3', label: 'Option 3' },
|
|
54
|
+
];
|
|
55
|
+
selectedKey = '1';
|
|
56
|
+
onSelect(item: any) {
|
|
57
|
+
console.log('Selected:', item);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### File HTML riêng
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import { Component } from '@angular/core';
|
|
66
|
+
import { LibsUiComponentsButtonsDropdownComponent } from '@libs-ui/components-buttons-dropdown';
|
|
67
|
+
|
|
68
|
+
@Component({
|
|
69
|
+
selector: 'app-example',
|
|
70
|
+
standalone: true,
|
|
71
|
+
imports: [LibsUiComponentsButtonsDropdownComponent],
|
|
72
|
+
templateUrl: './example.component.html',
|
|
73
|
+
})
|
|
74
|
+
export class ExampleComponent {
|
|
75
|
+
items = [
|
|
76
|
+
/* ... */
|
|
77
|
+
];
|
|
78
|
+
selectedKey = '';
|
|
79
|
+
onSelect(item: any) {}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```html
|
|
84
|
+
<libs_ui-components-buttons-dropdown
|
|
85
|
+
[label]="'Chọn mục'"
|
|
86
|
+
[items]="items"
|
|
87
|
+
[(keySelected)]="selectedKey"
|
|
88
|
+
(outSelectItem)="onSelect($event)"></libs_ui-components-buttons-dropdown>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## API Reference
|
|
92
|
+
|
|
93
|
+
### Inputs
|
|
94
|
+
|
|
95
|
+
| Tên | Kiểu | Mặc định | Mô tả |
|
|
96
|
+
| ---------------------------------------- | ---------------------------- | ---------------------------------------- | ---------------------------------------------------------------- |
|
|
97
|
+
| label | `string` | `''` | Text hiển thị trên nút (ví dụ: "Chọn mục"). |
|
|
98
|
+
| items | `Array<any>` | required | Danh sách các mục sẽ hiển thị trong menu. |
|
|
99
|
+
| fieldDisplay | `string` | `label` | Trường của mục để hiển thị nội dung. |
|
|
100
|
+
| keyField | `string` | `id` | Trường của mục dùng làm giá trị key. |
|
|
101
|
+
| keySelected | `string` | undefined | Giá trị key đang được chọn (hỗ trợ two-way binding). |
|
|
102
|
+
| applyNow | `boolean` | `false` | Nếu true: chọn xong tự emit sự kiện; false: cần bấm nút Áp dụng. |
|
|
103
|
+
| showBorderBottom | `boolean` | `false` | Hiện đường kẻ dưới menu khi mở. |
|
|
104
|
+
| disable | `boolean` | `false` | Khóa dropdown, không cho chọn mục. |
|
|
105
|
+
| sizeButton | `TYPE_SIZE_BUTTON` | `medium` | Kích thước nút (.small/.medium/.large). |
|
|
106
|
+
| typeButton | `TYPE_BUTTON` | `button-primary` | Kiểu style của nút (primary, secondary,...). |
|
|
107
|
+
| classLabel | `string` | `''` | Class CSS thêm cho nhãn (text). |
|
|
108
|
+
| classInclude | `string` | `''` | Class CSS thêm cho phần container chính. |
|
|
109
|
+
| classIncludeContainer | `string` | undefined | Class CSS thêm cho phần container nội dung. |
|
|
110
|
+
| fieldClass | `string` | `class` | Trường trong mục chứa class CSS khi cần. |
|
|
111
|
+
| classIconLeft | `string` | `''` | Class CSS thêm cho icon bên trái. |
|
|
112
|
+
| classIconRight | `string` | `libs-ui-icon-move-right rotate-[90deg]` | Class CSS thêm cho icon bên phải. |
|
|
113
|
+
| iconOnlyType | `boolean` | `false` | Chỉ hiện icon, không hiển thị nhãn. |
|
|
114
|
+
| popupConfig | `IPopupConfigButtonDropdown` | default cấu hình popover | Cấu hình chi tiết cho popover (vị trí, kích thước). |
|
|
115
|
+
| ignoreHiddenPopoverContentWhenMouseLeave | `boolean` | `true` | Giữ popover mở khi chuột rời khỏi nội dung. |
|
|
116
|
+
| modePopover | `TYPE_POPOVER_MODE` | `click-toggle` | Cách hiển thị popover (click, hover,...). |
|
|
117
|
+
|
|
118
|
+
### Outputs
|
|
119
|
+
|
|
120
|
+
| Tên | Kiểu | Mô tả |
|
|
121
|
+
| ------------------- | ------------------------------------------------- | --------------------------------------------------------- |
|
|
122
|
+
| outSelectItem | `(item: any) => void` | Trả về mục (item) bạn vừa chọn. |
|
|
123
|
+
| outHover | `(isHover: boolean) => void` | Phát ra khi rê chuột lên/xuống trên một mục. |
|
|
124
|
+
| outApply | `(item: any) => void` | Phát ra khi bạn bấm nút Áp dụng (với applyNow=false). |
|
|
125
|
+
| outPopoverEvent | `(event: TYPE_POPOVER_EVENT) => void` | Phát ra các sự kiện của popover (show, hide, click, ...). |
|
|
126
|
+
| outFunctionsControl | `(control: IPopoverFunctionControlEvent) => void` | Cung cấp control API để điều khiển popover. |
|
|
127
|
+
| outIconEvent | `(event: MouseEvent) => void` | Phát ra khi bạn nhấn vào icon. |
|
|
128
|
+
|
|
129
|
+
### Interfaces
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
export interface IButtonDropdown extends IButton {
|
|
133
|
+
items: any[];
|
|
134
|
+
fieldDisplay?: string;
|
|
135
|
+
keyField?: string;
|
|
136
|
+
keySelected?: string;
|
|
137
|
+
applyNow?: boolean;
|
|
138
|
+
showBorderBottom?: boolean;
|
|
139
|
+
popupConfig?: IPopupConfigButtonDropdown;
|
|
140
|
+
ignoreHiddenPopoverContentWhenMouseLeave?: boolean;
|
|
141
|
+
modePopover?: TYPE_POPOVER_MODE;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export interface IPopupConfigButtonDropdown {
|
|
145
|
+
width?: number;
|
|
146
|
+
maxWidth?: number;
|
|
147
|
+
maxHeight?: number;
|
|
148
|
+
zIndex?: number;
|
|
149
|
+
direction?: TYPE_POPOVER_DIRECTION;
|
|
150
|
+
timeDestroy?: number;
|
|
151
|
+
widthByParent?: boolean;
|
|
152
|
+
position?: {
|
|
153
|
+
mode: 'start' | 'center' | 'end';
|
|
154
|
+
distance: number;
|
|
155
|
+
};
|
|
156
|
+
classInclude?: string;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export type TYPE_POPOVER_DIRECTION = 'top' | 'right' | 'bottom' | 'left';
|
|
160
|
+
export type TYPE_POPOVER_MODE = 'hover' | 'click' | 'click-toggle' | 'click_open_and_click_panel_content_hidden';
|
|
161
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { 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 { IPopupConfigButtonDropdown } from './dropdown.interface';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class LibsUiComponentsButtonsDropdownComponent {
|
|
6
|
+
private functionsControlPopover;
|
|
7
|
+
protected labelDisplay: import("@angular/core").Signal<any>;
|
|
8
|
+
readonly label: import("@angular/core").InputSignal<string | undefined>;
|
|
9
|
+
readonly fieldClass: import("@angular/core").InputSignal<string>;
|
|
10
|
+
readonly fieldClassIconLeft: import("@angular/core").InputSignal<string>;
|
|
11
|
+
readonly items: import("@angular/core").InputSignalWithTransform<any[], any[]>;
|
|
12
|
+
readonly fieldDisplay: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
|
|
13
|
+
readonly keyField: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
|
|
14
|
+
readonly keySelected: import("@angular/core").ModelSignal<string | undefined>;
|
|
15
|
+
readonly applyNow: import("@angular/core").InputSignal<boolean>;
|
|
16
|
+
readonly showBorderBottom: import("@angular/core").InputSignal<boolean>;
|
|
17
|
+
readonly disable: import("@angular/core").InputSignal<boolean>;
|
|
18
|
+
readonly sizeButton: import("@angular/core").InputSignal<TYPE_SIZE_BUTTON>;
|
|
19
|
+
readonly classLabel: import("@angular/core").InputSignal<string>;
|
|
20
|
+
readonly iconOnlyType: import("@angular/core").InputSignal<boolean>;
|
|
21
|
+
readonly classIconRight: import("@angular/core").InputSignal<string>;
|
|
22
|
+
readonly classIconLeft: import("@angular/core").InputSignal<string>;
|
|
23
|
+
readonly typeButton: import("@angular/core").InputSignal<string>;
|
|
24
|
+
readonly popupConfig: import("@angular/core").InputSignal<IPopupConfigButtonDropdown>;
|
|
25
|
+
readonly ignoreHiddenPopoverContentWhenMouseLeave: import("@angular/core").InputSignal<boolean>;
|
|
26
|
+
readonly classInclude: import("@angular/core").InputSignal<string>;
|
|
27
|
+
readonly modePopover: import("@angular/core").InputSignal<TYPE_POPOVER_MODE>;
|
|
28
|
+
readonly classIncludeContainer: import("@angular/core").InputSignal<string | undefined>;
|
|
29
|
+
readonly outSelectItem: import("@angular/core").OutputEmitterRef<any>;
|
|
30
|
+
readonly outHover: import("@angular/core").OutputEmitterRef<boolean>;
|
|
31
|
+
readonly outApply: import("@angular/core").OutputEmitterRef<any>;
|
|
32
|
+
readonly outPopoverEvent: import("@angular/core").OutputEmitterRef<TYPE_POPOVER_EVENT>;
|
|
33
|
+
readonly outFunctionsControl: import("@angular/core").OutputEmitterRef<IPopoverFunctionControlEvent>;
|
|
34
|
+
readonly outIconEvent: import("@angular/core").OutputEmitterRef<MouseEvent>;
|
|
35
|
+
protected handlerApply(): Promise<void>;
|
|
36
|
+
protected handlerSelectItem(event: Event, data: any): Promise<void>;
|
|
37
|
+
protected handlerPopoverEvent(event: TYPE_POPOVER_EVENT): Promise<void>;
|
|
38
|
+
protected handlerPopoverControlEvent(control: IPopoverFunctionControlEvent): Promise<void>;
|
|
39
|
+
get FunctionsControl(): IPopoverFunctionControlEvent | undefined;
|
|
40
|
+
protected handlerClickButtonTemplate(event: Event, data: any, items: Array<any>): Promise<void>;
|
|
41
|
+
private labelComputed;
|
|
42
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsButtonsDropdownComponent, never>;
|
|
43
|
+
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>;
|
|
44
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { IButton } from '@libs-ui/components-buttons-button';
|
|
2
|
+
import { TYPE_POPOVER_DIRECTION, TYPE_POPOVER_MODE } from '@libs-ui/components-popover';
|
|
3
|
+
/**
|
|
4
|
+
* Interface for Dropdown Button component inputs.
|
|
5
|
+
*/
|
|
6
|
+
export interface IButtonDropdown extends IButton {
|
|
7
|
+
/** Danh sách các mục sẽ hiển thị trong menu. */
|
|
8
|
+
items: any[];
|
|
9
|
+
/** Tên trường dùng để hiển thị nội dung của mỗi mục. */
|
|
10
|
+
fieldDisplay?: string;
|
|
11
|
+
/** Tên trường dùng làm giá trị key của mỗi mục. */
|
|
12
|
+
keyField?: string;
|
|
13
|
+
/** Giá trị key đang được chọn (hỗ trợ two-way binding). */
|
|
14
|
+
keySelected?: string;
|
|
15
|
+
/** Nếu true: chọn xong tự emit sự kiện; false: cần bấm nút Áp dụng. */
|
|
16
|
+
applyNow?: boolean;
|
|
17
|
+
/** Hiển thị đường kẻ dưới menu khi mở. */
|
|
18
|
+
showBorderBottom?: boolean;
|
|
19
|
+
/** Cấu hình chi tiết cho popover (vị trí, kích thước). */
|
|
20
|
+
popupConfig?: IPopupConfigButtonDropdown;
|
|
21
|
+
/** Giữ popover mở khi chuột rời khỏi nội dung. */
|
|
22
|
+
ignoreHiddenPopoverContentWhenMouseLeave?: boolean;
|
|
23
|
+
/** Cách hiển thị popover (click, hover,...). */
|
|
24
|
+
modePopover?: TYPE_POPOVER_MODE;
|
|
25
|
+
}
|
|
26
|
+
/** Configuration options for Dropdown popover. */
|
|
27
|
+
export interface IPopupConfigButtonDropdown {
|
|
28
|
+
width?: number;
|
|
29
|
+
maxWidth?: number;
|
|
30
|
+
maxHeight?: number;
|
|
31
|
+
zIndex?: number;
|
|
32
|
+
direction?: TYPE_POPOVER_DIRECTION;
|
|
33
|
+
timeDestroy?: number;
|
|
34
|
+
widthByParent?: boolean;
|
|
35
|
+
position?: {
|
|
36
|
+
mode: 'start' | 'center' | 'end';
|
|
37
|
+
distance: number;
|
|
38
|
+
};
|
|
39
|
+
classInclude?: string;
|
|
40
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, computed, input, model, output, signal } 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
|
+
// #region PROPERTY
|
|
12
|
+
functionsControlPopover = signal(undefined);
|
|
13
|
+
labelDisplay = computed(this.labelComputed.bind(this));
|
|
14
|
+
// #region 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', { transform: (value) => value ?? 'label' });
|
|
20
|
+
keyField = input('key', { transform: (value) => value ?? 'key' });
|
|
21
|
+
keySelected = model();
|
|
22
|
+
applyNow = input(false); // if not applyNow: keyField is requried
|
|
23
|
+
showBorderBottom = input(false);
|
|
24
|
+
disable = input(false);
|
|
25
|
+
sizeButton = input('medium');
|
|
26
|
+
classLabel = input('');
|
|
27
|
+
iconOnlyType = input(false);
|
|
28
|
+
classIconRight = input('libs-ui-icon-move-right rotate-[90deg]');
|
|
29
|
+
classIconLeft = input('');
|
|
30
|
+
typeButton = input('button-primary');
|
|
31
|
+
popupConfig = input({ width: 205, maxWidth: 250, maxHeight: 140, zIndex: 1200, direction: 'top' });
|
|
32
|
+
ignoreHiddenPopoverContentWhenMouseLeave = input(true);
|
|
33
|
+
classInclude = input('');
|
|
34
|
+
modePopover = input('click-toggle');
|
|
35
|
+
classIncludeContainer = input();
|
|
36
|
+
// #region OUTPUT
|
|
37
|
+
outSelectItem = output();
|
|
38
|
+
outHover = output();
|
|
39
|
+
outApply = output(); // sử dụng cho bấm button left chế độ applyNow = false;
|
|
40
|
+
outPopoverEvent = output();
|
|
41
|
+
outFunctionsControl = output();
|
|
42
|
+
outIconEvent = output();
|
|
43
|
+
/* FUNCTIONS */
|
|
44
|
+
async handlerApply() {
|
|
45
|
+
if (!this.applyNow()) {
|
|
46
|
+
this.outApply.emit(this.items().find((item) => item[this.keyField()] === this.keySelected()));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async handlerSelectItem(event, data) {
|
|
50
|
+
event.stopPropagation();
|
|
51
|
+
if (data.subTemplate) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (!this.applyNow()) {
|
|
55
|
+
this.keySelected.set(data[this.keyField()]);
|
|
56
|
+
}
|
|
57
|
+
this.outSelectItem.emit(data);
|
|
58
|
+
this.outHover.emit(false);
|
|
59
|
+
}
|
|
60
|
+
async handlerPopoverEvent(event) {
|
|
61
|
+
this.outPopoverEvent.emit(event);
|
|
62
|
+
}
|
|
63
|
+
async handlerPopoverControlEvent(control) {
|
|
64
|
+
this.outFunctionsControl.emit(control);
|
|
65
|
+
this.functionsControlPopover.set(control);
|
|
66
|
+
}
|
|
67
|
+
get FunctionsControl() {
|
|
68
|
+
return this.functionsControlPopover();
|
|
69
|
+
}
|
|
70
|
+
async handlerClickButtonTemplate(event, data, items) {
|
|
71
|
+
event.stopPropagation();
|
|
72
|
+
data.buttonTemplateConfig.action(data, items);
|
|
73
|
+
}
|
|
74
|
+
labelComputed() {
|
|
75
|
+
if (!this.keySelected() || !this.items() || !this.items().length || !this.keyField() || this.applyNow()) {
|
|
76
|
+
return this.label();
|
|
77
|
+
}
|
|
78
|
+
for (const item of this.items()) {
|
|
79
|
+
if (item[this.keyField()] === this.keySelected()) {
|
|
80
|
+
return item[this.fieldDisplay()];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return this.label();
|
|
84
|
+
}
|
|
85
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsButtonsDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
86
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", 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\n #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\n [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: 0.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\n [type]=\"typeButton()\"\n [disable]=\"disable()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n mode: 'click-toggle',\n ignoreHiddenPopoverContentWhenMouseLeave: ignoreHiddenPopoverContentWhenMouseLeave(),\n config: {\n animationConfig: {\n time: 0.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\n LibsUiComponentsPopoverDirective\n [config]=\"{ content: item.popoverContent, zIndex: popupConfig().zIndex, directionDistance: -2 }\"\n [ignoreShowPopover]=\"!item.showPopover\"\n [ignoreStopPropagationEvent]=\"true\"\n class=\"libs-ui-bg-list-hover relative cursor-pointer py-[7px] {{ 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\n [class]=\"item[fieldClass()] ?? 'libs-ui-font-h5r'\"\n [innerHtml]=\"item[fieldDisplay()] | translate\"></span>\n @if (item.buttonTemplateConfig) {\n <libs_ui-components-buttons-button\n [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\n 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", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
87
|
+
}
|
|
88
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsButtonsDropdownComponent, decorators: [{
|
|
89
|
+
type: Component,
|
|
90
|
+
args: [{ selector: 'libs_ui-components-buttons-dropdown', standalone: true, imports: [TranslateModule, NgTemplateOutlet, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsPopoverComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #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\n [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: 0.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\n [type]=\"typeButton()\"\n [disable]=\"disable()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n mode: 'click-toggle',\n ignoreHiddenPopoverContentWhenMouseLeave: ignoreHiddenPopoverContentWhenMouseLeave(),\n config: {\n animationConfig: {\n time: 0.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\n LibsUiComponentsPopoverDirective\n [config]=\"{ content: item.popoverContent, zIndex: popupConfig().zIndex, directionDistance: -2 }\"\n [ignoreShowPopover]=\"!item.showPopover\"\n [ignoreStopPropagationEvent]=\"true\"\n class=\"libs-ui-bg-list-hover relative cursor-pointer py-[7px] {{ 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\n [class]=\"item[fieldClass()] ?? 'libs-ui-font-h5r'\"\n [innerHtml]=\"item[fieldDisplay()] | translate\"></span>\n @if (item.buttonTemplateConfig) {\n <libs_ui-components-buttons-button\n [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\n 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"] }]
|
|
91
|
+
}] });
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2J1dHRvbnMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9idXR0b25zL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxzQ0FBc0MsRUFBaUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzSCxPQUFPLEVBQWdDLGdDQUFnQyxFQUF5QyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BKLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQVl0RCxNQUFNLE9BQU8sd0NBQXdDO0lBQ25ELG1CQUFtQjtJQUNYLHVCQUF1QixHQUFHLE1BQU0sQ0FBMkMsU0FBUyxDQUFDLENBQUM7SUFDcEYsWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRWpFLGdCQUFnQjtJQUNQLEtBQUssR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN4QixVQUFVLEdBQUcsS0FBSyxDQUFTLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUNBQW1DO0lBQ3hFLGtCQUFrQixHQUFHLEtBQUssQ0FBUyxlQUFlLENBQUMsQ0FBQyxDQUFD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LENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN4RyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDakQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO3dHQXBGVSx3Q0FBd0M7NEZBQXhDLHdDQUF3Qyx3d0dDbEJyRCw4OEtBb0lBLGswRURySFksZUFBZSw0RkFBRSxnQkFBZ0Isb0pBQUUsc0NBQXNDLHNqQkFBRSxnQ0FBZ0M7OzRGQUcxRyx3Q0FBd0M7a0JBVHBELFNBQVM7K0JBRUUscUNBQXFDLGNBR25DLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxzQ0FBc0MsRUFBRSxnQ0FBZ0MsQ0FBQyxtQkFDckcsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LCBUWVBFX0JVVFRPTiwgVFlQRV9TSVpFX0JVVFRPTiB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9FVkVOVCwgVFlQRV9QT1BPVkVSX01PREUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSVBvcHVwQ29uZmlnQnV0dG9uRHJvcGRvd24gfSBmcm9tICcuL2Ryb3Bkb3duLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNCdXR0b25zRHJvcGRvd25Db21wb25lbnQge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByaXZhdGUgZnVuY3Rpb25zQ29udHJvbFBvcG92ZXIgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxhYmVsRGlzcGxheSA9IGNvbXB1dGVkKHRoaXMubGFiZWxDb21wdXRlZC5iaW5kKHRoaXMpKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGxhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBmaWVsZENsYXNzID0gaW5wdXQ8c3RyaW5nPignY2xhc3MnKTsgLy8gY2hhbmdlIGNvbG9yIGxhYmVsIGl0ZW0gb2YgaXRlbXNcbiAgcmVhZG9ubHkgZmllbGRDbGFzc0ljb25MZWZ0ID0gaW5wdXQ8c3RyaW5nPignY2xhc3NJY29uTGVmdCcpOyAvLyBpY29uY2xhc3MgaXRlbSBvZiBpdGVtc1xuICByZWFkb25seSBpdGVtcyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PGFueT4sIEFycmF5PGFueT4+KHsgdHJhbnNmb3JtOiAoZGF0YSkgPT4gZGF0YS5tYXAoKGl0ZW0pID0+ICh7IC4uLml0ZW0sIFt0aGlzLmZpZWxkRGlzcGxheSgpXTogZXNjYXBlSHRtbChpdGVtW3RoaXMuZmllbGREaXNwbGF5KCldKSB9KSkgfSk7IC8vIHJlcXVyaWVkXG4gIHJlYWRvbmx5IGZpZWxkRGlzcGxheSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignbGFiZWwnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnbGFiZWwnIH0pO1xuICByZWFkb25seSBrZXlGaWVsZCA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPigna2V5JywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ2tleScgfSk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkID0gbW9kZWw8c3RyaW5nPigpO1xuICByZWFkb25seSBhcHBseU5vdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTsgLy8gaWYgbm90IGFwcGx5Tm93OiBrZXlGaWVsZCBpcyByZXF1cmllZFxuICByZWFkb25seSBzaG93Qm9yZGVyQm90dG9tID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzaXplQnV0dG9uID0gaW5wdXQ8VFlQRV9TSVpFX0JVVFRPTj4oJ21lZGl1bScpO1xuICByZWFkb25seSBjbGFzc0xhYmVsID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGljb25Pbmx5VHlwZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NJY29uUmlnaHQgPSBpbnB1dDxzdHJpbmc+KCdsaWJzLXVpLWljb24tbW92ZS1yaWdodCByb3RhdGUtWzkwZGVnXScpO1xuICByZWFkb25seSBjbGFzc0ljb25MZWZ0ID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IHR5cGVCdXR0b24gPSBpbnB1dDxUWVBFX0JVVFRPTj4oJ2J1dHRvbi1wcmltYXJ5Jyk7XG4gIHJlYWRvbmx5IHBvcHVwQ29uZmlnID0gaW5wdXQ8SVBvcHVwQ29uZmlnQnV0dG9uRHJvcGRvd24+KHsgd2lkdGg6IDIwNSwgbWF4V2lkdGg6IDI1MCwgbWF4SGVpZ2h0OiAxNDAsIHpJbmRleDogMTIwMCwgZGlyZWN0aW9uOiAndG9wJyB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgbW9kZVBvcG92ZXIgPSBpbnB1dDxUWVBFX1BPUE9WRVJfTU9ERT4oJ2NsaWNrLXRvZ2dsZScpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVDb250YWluZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0U2VsZWN0SXRlbSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IG91dEhvdmVyID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dEFwcGx5ID0gb3V0cHV0PGFueT4oKTsgLy8gc+G7rSBk4bulbmcgY2hvIGLhuqVtIGJ1dHRvbiBsZWZ0IGNo4bq/IMSR4buZIGFwcGx5Tm93ID0gZmFsc2U7XG4gIHJlYWRvbmx5IG91dFBvcG92ZXJFdmVudCA9IG91dHB1dDxUWVBFX1BPUE9WRVJfRVZFTlQ+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0SWNvbkV2ZW50ID0gb3V0cHV0PE1vdXNlRXZlbnQ+KCk7XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQXBwbHkoKSB7XG4gICAgaWYgKCF0aGlzLmFwcGx5Tm93KCkpIHtcbiAgICAgIHRoaXMub3V0QXBwbHkuZW1pdCh0aGlzLml0ZW1zKCkuZmluZCgoaXRlbSkgPT4gaXRlbVt0aGlzLmtleUZpZWxkKCldID09PSB0aGlzLmtleVNlbGVjdGVkKCkpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNlbGVjdEl0ZW0oZXZlbnQ6IEV2ZW50LCBkYXRhOiBhbnkpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZGF0YS5zdWJUZW1wbGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXBwbHlOb3coKSkge1xuICAgICAgdGhpcy5rZXlTZWxlY3RlZC5zZXQoZGF0YVt0aGlzLmtleUZpZWxkKCldKTtcbiAgICB9XG4gICAgdGhpcy5vdXRTZWxlY3RJdGVtLmVtaXQoZGF0YSk7XG4gICAgdGhpcy5vdXRIb3Zlci5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUG9wb3ZlckV2ZW50KGV2ZW50OiBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICB0aGlzLm91dFBvcG92ZXJFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUG9wb3ZlckNvbnRyb2xFdmVudChjb250cm9sOiBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoY29udHJvbCk7XG4gICAgdGhpcy5mdW5jdGlvbnNDb250cm9sUG9wb3Zlci5zZXQoY29udHJvbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25zQ29udHJvbFBvcG92ZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2tCdXR0b25UZW1wbGF0ZShldmVudDogRXZlbnQsIGRhdGE6IGFueSwgaXRlbXM6IEFycmF5PGFueT4pIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBkYXRhLmJ1dHRvblRlbXBsYXRlQ29uZmlnLmFjdGlvbihkYXRhLCBpdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIGxhYmVsQ29tcHV0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLmtleVNlbGVjdGVkKCkgfHwgIXRoaXMuaXRlbXMoKSB8fCAhdGhpcy5pdGVtcygpLmxlbmd0aCB8fCAhdGhpcy5rZXlGaWVsZCgpIHx8IHRoaXMuYXBwbHlOb3coKSkge1xuICAgICAgcmV0dXJuIHRoaXMubGFiZWwoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMoKSkge1xuICAgICAgaWYgKGl0ZW1bdGhpcy5rZXlGaWVsZCgpXSA9PT0gdGhpcy5rZXlTZWxlY3RlZCgpKSB7XG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMuZmllbGREaXNwbGF5KCldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxhYmVsKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2J1dHRvbkRyb3Bkb3duRWxcbiAgY2xhc3M9XCJsaWJzLXVpLWJ1dHRvbnMtZHJvcGRvd24gZmxleCB7eyBjbGFzc0luY2x1ZGVDb250YWluZXIoKSB8fCAnJyB9fVwiXG4gIFtjbGFzcy5saWJzLXVpLWJ1dHRvbnMtZHJvcGRvd24tdW4tYXBwbHktbm93XT1cIiFhcHBseU5vdygpXCJcbiAgW2NsYXNzLmxpYnMtdWktYnV0dG9ucy1kcm9wZG93bi1hcHBseS1ub3ctYnV0dG9uLXByaW1hcnldPVwiYXBwbHlOb3coKSAmJiB0eXBlQnV0dG9uKCkgPT09ICdidXR0b24tcHJpbWFyeSdcIlxuICBbY2xhc3MubGlicy11aS1idXR0b25zLWRyb3Bkb3duLWFwcGx5LW5vdy1idXR0b24tc2Vjb25kYXJ5XT1cImFwcGx5Tm93KCkgJiYgdHlwZUJ1dHRvbigpID09PSAnYnV0dG9uLXNlY29uZGFyeSdcIj5cbiAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgW2ljb25Pbmx5VHlwZV09XCJpY29uT25seVR5cGUoKVwiXG4gICAgW2NsYXNzSWNvbkxlZnRdPVwiY2xhc3NJY29uTGVmdCgpXCJcbiAgICBbY2xhc3NJY29uUmlnaHRdPVwiIWFwcGx5Tm93KCkgPyAnJyA6IGNsYXNzSWNvblJpZ2h0KClcIlxuICAgIFt0eXBlXT1cInR5cGVCdXR0b24oKVwiXG4gICAgW2NsYXNzTGFiZWxdPVwiY2xhc3NMYWJlbCgpXCJcbiAgICBbY2xhc3NJbmNsdWRlXT1cImNsYXNzSW5jbHVkZSgpXCJcbiAgICBbc2l6ZUJ1dHRvbl09XCJzaXplQnV0dG9uKClcIlxuICAgIFtwb3BvdmVyXT1cIntcbiAgICAgIGVsZW1lbnRSZWZDdXN0b206IGJ1dHRvbkRyb3Bkb3duRWwsXG4gICAgICBtb2RlOiBtb2RlUG9wb3ZlcigpLFxuICAgICAgaWdub3JlU2hvd1BvcG92ZXI6ICFhcHBseU5vdygpLFxuICAgICAgaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZTogdHJ1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgICB0aW1lOiAwLjUsXG4gICAgICAgIH0sXG4gICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUNvbnRlbnRFbCxcbiAgICAgICAgd2hpdGVUaGVtZTogdHJ1ZSxcbiAgICAgICAgaWdub3JlQXJyb3c6IHRydWUsXG4gICAgICAgIHdpZHRoOiBwb3B1cENvbmZpZygpLndpZHRoLFxuICAgICAgICB3aWR0aEJ5UGFyZW50OiBwb3B1cENvbmZpZygpLndpZHRoQnlQYXJlbnQgPz8gZmFsc2UsXG4gICAgICAgIG1heFdpZHRoOiBwb3B1cENvbmZpZygpLm1heFdpZHRoLFxuICAgICAgICBtYXhIZWlnaHQ6IHBvcHVwQ29uZmlnKCkubWF4SGVpZ2h0LFxuICAgICAgICB6SW5kZXg6IHBvcHVwQ29uZmlnKCkuekluZGV4LFxuICAgICAgICBjbGFzc0luY2x1ZGU6ICdyb3VuZGVkLVs0cHhdICcgKyBwb3B1cENvbmZpZygpLmNsYXNzSW5jbHVkZSxcbiAgICAgICAgZGlyZWN0aW9uOiBwb3B1cENvbmZpZygpLmRpcmVjdGlvbixcbiAgICAgICAgdGltZXJEZXN0cm95OiBwb3B1cENvbmZpZygpLnRpbWVEZXN0cm95LFxuICAgICAgICBkaXJlY3Rpb25EaXN0YW5jZTogMixcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBtb2RlOiBwb3B1cENvbmZpZygpLnBvc2l0aW9uPy5tb2RlIHx8ICdzdGFydCcsXG4gICAgICAgICAgZGlzdGFuY2U6IHBvcHVwQ29uZmlnKCkucG9zaXRpb24/LmRpc3RhbmNlID8/IDAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1cIlxuICAgIFtsYWJlbF09XCJsYWJlbERpc3BsYXkoKVwiXG4gICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclBvcG92ZXJDb250cm9sRXZlbnQoJGV2ZW50KVwiXG4gICAgKG91dFBvcG92ZXJFdmVudCk9XCJoYW5kbGVyUG9wb3ZlckV2ZW50KCRldmVudClcIlxuICAgIChvdXRDbGljayk9XCJoYW5kbGVyQXBwbHkoKVwiIC8+XG4gIEBpZiAoIWFwcGx5Tm93KCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIHctWzFweF0gYmctd2hpdGVcIj48L2Rpdj5cbiAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICBbdHlwZV09XCJ0eXBlQnV0dG9uKClcIlxuICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtzaXplQnV0dG9uXT1cInNpemVCdXR0b24oKVwiXG4gICAgICBbcG9wb3Zlcl09XCJ7XG4gICAgICAgIG1vZGU6ICdjbGljay10b2dnbGUnLFxuICAgICAgICBpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlOiBpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlKCksXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAgICAgdGltZTogMC41LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlQ29udGVudEVsLFxuICAgICAgICAgIHdoaXRlVGhlbWU6IHRydWUsXG4gICAgICAgICAgaWdub3JlQXJyb3c6IHRydWUsXG4gICAgICAgICAgd2lkdGg6IHBvcHVwQ29uZmlnKCkud2lkdGgsXG4gICAgICAgICAgbWF4V2lkdGg6IHBvcHVwQ29uZmlnKCkubWF4V2lkdGgsXG4gICAgICAgICAgd2lkdGhCeVBhcmVudDogcG9wdXBDb25maWcoKS53aWR0aEJ5UGFyZW50ID8/IGZhbHNlLFxuICAgICAgICAgIG1heEhlaWdodDogcG9wdXBDb25maWcoKS5tYXhIZWlnaHQsXG4gICAgICAgICAgekluZGV4OiBwb3B1cENvbmZpZygpLnpJbmRleCxcbiAgICAgICAgICBkaXJlY3Rpb246IHBvcHVwQ29uZmlnKCkuZGlyZWN0aW9uLFxuICAgICAgICAgIGNsYXNzSW5jbHVkZTogcG9wdXBDb25maWcoKS5jbGFzc0luY2x1ZGUsXG4gICAgICAgICAgZGlyZWN0aW9uRGlzdGFuY2U6IDIsXG4gICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIG1vZGU6ICdzdGFydCcsXG4gICAgICAgICAgICBkaXN0YW5jZTogMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVwiXG4gICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cImNsYXNzSWNvblJpZ2h0KClcIlxuICAgICAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0luY2x1ZGUoKSB8fCAnIXB5LVs5cHhdJ1wiXG4gICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyUG9wb3ZlckNvbnRyb2xFdmVudCgkZXZlbnQpXCJcbiAgICAgIChvdXRQb3BvdmVyRXZlbnQpPVwiaGFuZGxlclBvcG92ZXJFdmVudCgkZXZlbnQpXCIgLz5cbiAgfVxuPC9kaXY+XG48bmctdGVtcGxhdGUgI3RlbXBsYXRlQ29udGVudEVsPlxuICA8ZGl2PlxuICAgIEBpZiAoaXRlbXMoKSAmJiBpdGVtcygpLmxlbmd0aCkge1xuICAgICAgPGRpdiBjbGFzcz1cIm0tMCBwLTBcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtcygpOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInt7IGl0ZW0uY2xhc3NSb3cgfHwgJycgfX1cIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IGNvbnRlbnQ6IGl0ZW0ucG9wb3ZlckNvbnRlbnQsIHpJbmRleDogcG9wdXBDb25maWcoKS56SW5kZXgsIGRpcmVjdGlvbkRpc3RhbmNlOiAtMiB9XCJcbiAgICAgICAgICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cIiFpdGVtLnNob3dQb3BvdmVyXCJcbiAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktYmctbGlzdC1ob3ZlciByZWxhdGl2ZSBjdXJzb3ItcG9pbnRlciBweS1bN3B4XSB7eyBpdGVtLmNsYXNzSW5jbHVkZSB8fCAnJyB9fSAge3sgc2hvd0JvcmRlckJvdHRvbSgpID8gJ2xpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsJyA6ICcnIH19XCJcbiAgICAgICAgICAgICAgW2NsYXNzLmZsZXhdPVwiIWl0ZW0uaWdub3JlRmxleFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5weC1bMTZweF1dPVwiYXBwbHlOb3coKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5wbC1bMTZweF1dPVwiIWFwcGx5Tm93KClcIlxuICAgICAgICAgICAgICBbY2xhc3MucHItWzQwcHhdXT1cIiFhcHBseU5vdygpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpdGVtLmRpc2FibGVcIlxuICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpdGVtLmRpc2FibGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclNlbGVjdEl0ZW0oJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICAgICAgICBAaWYgKGl0ZW1bZmllbGRDbGFzc0ljb25MZWZ0KCldKSB7XG4gICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIml0ZW1bZmllbGRDbGFzc0ljb25MZWZ0KCldXCI+PC9pPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW1bZmllbGRDbGFzcygpXSA/PyAnbGlicy11aS1mb250LWg1cidcIlxuICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiaXRlbVtmaWVsZERpc3BsYXkoKV0gfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAoaXRlbS5idXR0b25UZW1wbGF0ZUNvbmZpZykge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIml0ZW0uYnV0dG9uVGVtcGxhdGVDb25maWcuaWNvbkxlZnRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cIml0ZW0uYnV0dG9uVGVtcGxhdGVDb25maWcuaWNvblwiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5idXR0b25UZW1wbGF0ZUNvbmZpZy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCJpdGVtLmJ1dHRvblRlbXBsYXRlQ29uZmlnLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tCdXR0b25UZW1wbGF0ZSgkZXZlbnQsIGl0ZW0sIGl0ZW1zKCkpXCJcbiAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIml0ZW0uYnV0dG9uVGVtcGxhdGVDb25maWcudHlwZVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW0/LnN1YlRlbXBsYXRlIHx8IG51bGw7IGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIEBpZiAoaXRlbVtrZXlGaWVsZCgpXSA9PT0ga2V5U2VsZWN0ZWQoKSAmJiAhYXBwbHlOb3coKSkge1xuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNoZWNrIGFic29sdXRlIHJpZ2h0LVsxNnB4XSB0b3AtWzhweF1cIj48L2k+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwLVsyMHB4XVwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwiJ2kxOG5fbm9fZGF0YScgfCB0cmFuc2xhdGVcIj48L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2J1dHRvbnMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSUJ1dHRvbiB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgVFlQRV9QT1BPVkVSX0RJUkVDVElPTiwgVFlQRV9QT1BPVkVSX01PREUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgRHJvcGRvd24gQnV0dG9uIGNvbXBvbmVudCBpbnB1dHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUJ1dHRvbkRyb3Bkb3duIGV4dGVuZHMgSUJ1dHRvbiB7XG4gIC8qKiBEYW5oIHPDoWNoIGPDoWMgbeG7pWMgc+G6vSBoaeG7g24gdGjhu4sgdHJvbmcgbWVudS4gKi9cbiAgaXRlbXM6IGFueVtdO1xuICAvKiogVMOqbiB0csaw4budbmcgZMO5bmcgxJHhu4MgaGnhu4NuIHRo4buLIG7hu5lpIGR1bmcgY+G7p2EgbeG7l2kgbeG7pWMuICovXG4gIGZpZWxkRGlzcGxheT86IHN0cmluZztcbiAgLyoqIFTDqm4gdHLGsOG7nW5nIGTDuW5nIGzDoG0gZ2nDoSB0cuG7iyBrZXkgY+G7p2EgbeG7l2kgbeG7pWMuICovXG4gIGtleUZpZWxkPzogc3RyaW5nO1xuICAvKiogR2nDoSB0cuG7iyBrZXkgxJFhbmcgxJHGsOG7o2MgY2jhu41uICho4buXIHRy4bujIHR3by13YXkgYmluZGluZykuICovXG4gIGtleVNlbGVjdGVkPzogc3RyaW5nO1xuICAvKiogTuG6v3UgdHJ1ZTogY2jhu41uIHhvbmcgdOG7sSBlbWl0IHPhu7Ega2nhu4duOyBmYWxzZTogY+G6p24gYuG6pW0gbsO6dCDDgXAgZOG7pW5nLiAqL1xuICBhcHBseU5vdz86IGJvb2xlYW47XG4gIC8qKiBIaeG7g24gdGjhu4sgxJHGsOG7nW5nIGvhursgZMaw4bubaSBtZW51IGtoaSBt4bufLiAqL1xuICBzaG93Qm9yZGVyQm90dG9tPzogYm9vbGVhbjtcbiAgLyoqIEPhuqV1IGjDrG5oIGNoaSB0aeG6v3QgY2hvIHBvcG92ZXIgKHbhu4sgdHLDrSwga8OtY2ggdGjGsOG7m2MpLiAqL1xuICBwb3B1cENvbmZpZz86IElQb3B1cENvbmZpZ0J1dHRvbkRyb3Bkb3duO1xuICAvKiogR2nhu68gcG9wb3ZlciBt4bufIGtoaSBjaHXhu5l0IHLhu51pIGto4buPaSBu4buZaSBkdW5nLiAqL1xuICBpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlPzogYm9vbGVhbjtcbiAgLyoqIEPDoWNoIGhp4buDbiB0aOG7iyBwb3BvdmVyIChjbGljaywgaG92ZXIsLi4uKS4gKi9cbiAgbW9kZVBvcG92ZXI/OiBUWVBFX1BPUE9WRVJfTU9ERTtcbn1cblxuLyoqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRHJvcGRvd24gcG9wb3Zlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBvcHVwQ29uZmlnQnV0dG9uRHJvcGRvd24ge1xuICB3aWR0aD86IG51bWJlcjtcbiAgbWF4V2lkdGg/OiBudW1iZXI7XG4gIG1heEhlaWdodD86IG51bWJlcjtcbiAgekluZGV4PzogbnVtYmVyO1xuICBkaXJlY3Rpb24/OiBUWVBFX1BPUE9WRVJfRElSRUNUSU9OO1xuICB0aW1lRGVzdHJveT86IG51bWJlcjtcbiAgd2lkdGhCeVBhcmVudD86IGJvb2xlYW47XG4gIHBvc2l0aW9uPzoge1xuICAgIG1vZGU6ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnO1xuICAgIGRpc3RhbmNlOiBudW1iZXI7XG4gIH07XG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './dropdown.component';
|
|
2
|
+
export * from './dropdown.interface';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvYnV0dG9ucy9kcm9wZG93bi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kcm9wZG93bi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kcm9wZG93bi5pbnRlcmZhY2UnO1xuIl19
|
|
@@ -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,99 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { signal, computed, input, model, output, ChangeDetectionStrategy, Component } 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
|
+
// #region PROPERTY
|
|
13
|
+
functionsControlPopover = signal(undefined);
|
|
14
|
+
labelDisplay = computed(this.labelComputed.bind(this));
|
|
15
|
+
// #region INPUT
|
|
16
|
+
label = input();
|
|
17
|
+
fieldClass = input('class'); // change color label item of items
|
|
18
|
+
fieldClassIconLeft = input('classIconLeft'); // iconclass item of items
|
|
19
|
+
items = input.required({ transform: (data) => data.map((item) => ({ ...item, [this.fieldDisplay()]: escapeHtml(item[this.fieldDisplay()]) })) }); // requried
|
|
20
|
+
fieldDisplay = input('label', { transform: (value) => value ?? 'label' });
|
|
21
|
+
keyField = input('key', { transform: (value) => value ?? 'key' });
|
|
22
|
+
keySelected = model();
|
|
23
|
+
applyNow = input(false); // if not applyNow: keyField is requried
|
|
24
|
+
showBorderBottom = input(false);
|
|
25
|
+
disable = input(false);
|
|
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
|
+
// #region OUTPUT
|
|
38
|
+
outSelectItem = output();
|
|
39
|
+
outHover = output();
|
|
40
|
+
outApply = output(); // sử dụng cho bấm button left chế độ applyNow = false;
|
|
41
|
+
outPopoverEvent = output();
|
|
42
|
+
outFunctionsControl = output();
|
|
43
|
+
outIconEvent = output();
|
|
44
|
+
/* FUNCTIONS */
|
|
45
|
+
async handlerApply() {
|
|
46
|
+
if (!this.applyNow()) {
|
|
47
|
+
this.outApply.emit(this.items().find((item) => item[this.keyField()] === this.keySelected()));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async handlerSelectItem(event, data) {
|
|
51
|
+
event.stopPropagation();
|
|
52
|
+
if (data.subTemplate) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!this.applyNow()) {
|
|
56
|
+
this.keySelected.set(data[this.keyField()]);
|
|
57
|
+
}
|
|
58
|
+
this.outSelectItem.emit(data);
|
|
59
|
+
this.outHover.emit(false);
|
|
60
|
+
}
|
|
61
|
+
async handlerPopoverEvent(event) {
|
|
62
|
+
this.outPopoverEvent.emit(event);
|
|
63
|
+
}
|
|
64
|
+
async handlerPopoverControlEvent(control) {
|
|
65
|
+
this.outFunctionsControl.emit(control);
|
|
66
|
+
this.functionsControlPopover.set(control);
|
|
67
|
+
}
|
|
68
|
+
get FunctionsControl() {
|
|
69
|
+
return this.functionsControlPopover();
|
|
70
|
+
}
|
|
71
|
+
async handlerClickButtonTemplate(event, data, items) {
|
|
72
|
+
event.stopPropagation();
|
|
73
|
+
data.buttonTemplateConfig.action(data, items);
|
|
74
|
+
}
|
|
75
|
+
labelComputed() {
|
|
76
|
+
if (!this.keySelected() || !this.items() || !this.items().length || !this.keyField() || this.applyNow()) {
|
|
77
|
+
return this.label();
|
|
78
|
+
}
|
|
79
|
+
for (const item of this.items()) {
|
|
80
|
+
if (item[this.keyField()] === this.keySelected()) {
|
|
81
|
+
return item[this.fieldDisplay()];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return this.label();
|
|
85
|
+
}
|
|
86
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsButtonsDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
87
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", 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\n #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\n [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: 0.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\n [type]=\"typeButton()\"\n [disable]=\"disable()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n mode: 'click-toggle',\n ignoreHiddenPopoverContentWhenMouseLeave: ignoreHiddenPopoverContentWhenMouseLeave(),\n config: {\n animationConfig: {\n time: 0.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\n LibsUiComponentsPopoverDirective\n [config]=\"{ content: item.popoverContent, zIndex: popupConfig().zIndex, directionDistance: -2 }\"\n [ignoreShowPopover]=\"!item.showPopover\"\n [ignoreStopPropagationEvent]=\"true\"\n class=\"libs-ui-bg-list-hover relative cursor-pointer py-[7px] {{ 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\n [class]=\"item[fieldClass()] ?? 'libs-ui-font-h5r'\"\n [innerHtml]=\"item[fieldDisplay()] | translate\"></span>\n @if (item.buttonTemplateConfig) {\n <libs_ui-components-buttons-button\n [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\n 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", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
88
|
+
}
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsButtonsDropdownComponent, decorators: [{
|
|
90
|
+
type: Component,
|
|
91
|
+
args: [{ selector: 'libs_ui-components-buttons-dropdown', standalone: true, imports: [TranslateModule, NgTemplateOutlet, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsPopoverComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #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\n [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: 0.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\n [type]=\"typeButton()\"\n [disable]=\"disable()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n mode: 'click-toggle',\n ignoreHiddenPopoverContentWhenMouseLeave: ignoreHiddenPopoverContentWhenMouseLeave(),\n config: {\n animationConfig: {\n time: 0.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\n LibsUiComponentsPopoverDirective\n [config]=\"{ content: item.popoverContent, zIndex: popupConfig().zIndex, directionDistance: -2 }\"\n [ignoreShowPopover]=\"!item.showPopover\"\n [ignoreStopPropagationEvent]=\"true\"\n class=\"libs-ui-bg-list-hover relative cursor-pointer py-[7px] {{ 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\n [class]=\"item[fieldClass()] ?? 'libs-ui-font-h5r'\"\n [innerHtml]=\"item[fieldDisplay()] | translate\"></span>\n @if (item.buttonTemplateConfig) {\n <libs_ui-components-buttons-button\n [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\n 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"] }]
|
|
92
|
+
}] });
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Generated bundle index. Do not edit.
|
|
96
|
+
*/
|
|
97
|
+
|
|
98
|
+
export { LibsUiComponentsButtonsDropdownComponent };
|
|
99
|
+
//# 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, signal } from '@angular/core';\nimport { 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';\nimport { IPopupConfigButtonDropdown } from './dropdown.interface';\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: [TranslateModule, NgTemplateOutlet, LibsUiComponentsButtonsButtonComponent, LibsUiComponentsPopoverComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsButtonsDropdownComponent {\n // #region PROPERTY\n private functionsControlPopover = signal<IPopoverFunctionControlEvent | undefined>(undefined);\n protected labelDisplay = computed(this.labelComputed.bind(this));\n\n // #region 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, string | undefined>('label', { transform: (value) => value ?? 'label' });\n readonly keyField = input<string, string | undefined>('key', { transform: (value) => value ?? '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 // #region 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 this.functionsControlPopover.set(control);\n }\n\n public get FunctionsControl(): IPopoverFunctionControlEvent | undefined {\n return this.functionsControlPopover();\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\n #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\n [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: 0.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\n [type]=\"typeButton()\"\n [disable]=\"disable()\"\n [sizeButton]=\"sizeButton()\"\n [popover]=\"{\n mode: 'click-toggle',\n ignoreHiddenPopoverContentWhenMouseLeave: ignoreHiddenPopoverContentWhenMouseLeave(),\n config: {\n animationConfig: {\n time: 0.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\n LibsUiComponentsPopoverDirective\n [config]=\"{ content: item.popoverContent, zIndex: popupConfig().zIndex, directionDistance: -2 }\"\n [ignoreShowPopover]=\"!item.showPopover\"\n [ignoreStopPropagationEvent]=\"true\"\n class=\"libs-ui-bg-list-hover relative cursor-pointer py-[7px] {{ 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\n [class]=\"item[fieldClass()] ?? 'libs-ui-font-h5r'\"\n [innerHtml]=\"item[fieldDisplay()] | translate\"></span>\n @if (item.buttonTemplateConfig) {\n <libs_ui-components-buttons-button\n [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\n 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
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@libs-ui/components-buttons-dropdown",
|
|
3
|
+
"version": "0.1.1-1",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": ">=18.0.0",
|
|
6
|
+
"@angular/core": ">=18.0.0",
|
|
7
|
+
"@libs-ui/components-buttons-button": "0.1.1-1",
|
|
8
|
+
"@libs-ui/components-popover": "0.1.1-1",
|
|
9
|
+
"@libs-ui/utils": "0.1.1-1",
|
|
10
|
+
"@ngx-translate/core": "^15.0.0",
|
|
11
|
+
"@libs-ui/interfaces-types": "0.1.1-1"
|
|
12
|
+
},
|
|
13
|
+
"sideEffects": false,
|
|
14
|
+
"module": "fesm2022/libs-ui-components-buttons-dropdown.mjs",
|
|
15
|
+
"typings": "index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
"./package.json": {
|
|
18
|
+
"default": "./package.json"
|
|
19
|
+
},
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./index.d.ts",
|
|
22
|
+
"esm2022": "./esm2022/libs-ui-components-buttons-dropdown.mjs",
|
|
23
|
+
"esm": "./esm2022/libs-ui-components-buttons-dropdown.mjs",
|
|
24
|
+
"default": "./fesm2022/libs-ui-components-buttons-dropdown.mjs"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"tslib": "^2.3.0"
|
|
29
|
+
}
|
|
30
|
+
}
|