@libs-ui/components-table 0.2.10-6.2 → 0.2.30-6.2
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 +132 -2
- package/esm2022/index.mjs +1 -2
- package/esm2022/interfaces/function-control-event.interface.mjs +1 -1
- package/esm2022/interfaces/table-config.interface.mjs +1 -1
- package/esm2022/interfaces/template-config.interface.mjs +1 -1
- package/esm2022/pipes/calculator-column.pipe.mjs +80 -0
- package/esm2022/table.component.mjs +229 -127
- package/esm2022/templates/templates.component.mjs +49 -49
- package/fesm2022/libs-ui-components-table.mjs +343 -178
- package/fesm2022/libs-ui-components-table.mjs.map +1 -1
- package/index.d.ts +0 -1
- package/interfaces/function-control-event.interface.d.ts +2 -1
- package/interfaces/table-config.interface.d.ts +5 -1
- package/interfaces/template-config.interface.d.ts +10 -13
- package/package.json +30 -3
- package/pipes/calculator-column.pipe.d.ts +12 -0
- package/table.component.d.ts +51 -20
- package/templates/templates.component.d.ts +5 -2
- package/esm2022/templates/template.abstract.component.mjs +0 -16
- package/templates/template.abstract.component.d.ts +0 -7
package/README.md
CHANGED
|
@@ -1,3 +1,133 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Table
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Giới thiệu
|
|
4
|
+
|
|
5
|
+
`@libs-ui/components-table` là một component Table linh hoạt cho Angular, hỗ trợ:
|
|
6
|
+
|
|
7
|
+
- Cấu hình cột động với `ITableHeaderConfig`
|
|
8
|
+
- Hiển thị dữ liệu tĩnh hoặc tải dữ liệu động qua `newData` hoặc `httpRequestData`
|
|
9
|
+
- Tính năng phân trang, phân trang vô tận
|
|
10
|
+
- Tích chọn hàng với checkbox
|
|
11
|
+
- Sắp xếp cột và điều khiển nâng cao qua `outSort`, `outLoadMore`
|
|
12
|
+
- Hiển thị footer và các tính năng tùy chỉnh giao diện
|
|
13
|
+
|
|
14
|
+
## Tính năng
|
|
15
|
+
|
|
16
|
+
- Định nghĩa cột linh hoạt: tiêu đề, căn lề, tooltip, sort
|
|
17
|
+
- Tích hợp Selection (checkbox) và Select All
|
|
18
|
+
- Phân trang và load-more tự động với `outLoadMore`
|
|
19
|
+
- Tùy chỉnh template hàng và cột qua `colTemplateConfig`
|
|
20
|
+
- Bắt sự kiện (`outSort`, `outClickButtonAction`, ...)
|
|
21
|
+
|
|
22
|
+
## Cài đặt
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install @libs-ui/components-table
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
hoặc
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
yarn add @libs-ui/components-table
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Sử dụng
|
|
35
|
+
|
|
36
|
+
### Inline Template
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { Component } from '@angular/core';
|
|
40
|
+
import { LibsUiComponentsTableComponent } from '@libs-ui/components-table';
|
|
41
|
+
|
|
42
|
+
@Component({
|
|
43
|
+
selector: 'app-table-demo',
|
|
44
|
+
standalone: true,
|
|
45
|
+
imports: [LibsUiComponentsTableComponent],
|
|
46
|
+
template: `
|
|
47
|
+
<libs_ui-components-table
|
|
48
|
+
[headerLeft]="headers"
|
|
49
|
+
[newData]="newData"
|
|
50
|
+
[showFooter]="true"
|
|
51
|
+
[paginationSetting]="{ position: 'bottom', numberPageDispaly: 5 }">
|
|
52
|
+
</libs_ui-components-table>
|
|
53
|
+
`
|
|
54
|
+
})
|
|
55
|
+
export class TableDemoComponent {
|
|
56
|
+
headers = [
|
|
57
|
+
{ label: 'ID', orderby: 'id', hasSort: true },
|
|
58
|
+
{ label: 'Name', orderby: 'name', hasSort: true },
|
|
59
|
+
{ label: 'Age', orderby: 'age', hasSort: true }
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
data = [
|
|
63
|
+
{ id: 1, name: 'Alice', age: 30 },
|
|
64
|
+
{ id: 2, name: 'Bob', age: 28 },
|
|
65
|
+
{ id: 3, name: 'Charlie', age: 25 }
|
|
66
|
+
];
|
|
67
|
+
|
|
68
|
+
newData = { data: this.data, addToLastList: false };
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Sử dụng với file HTML
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
import { Component } from '@angular/core';
|
|
76
|
+
import { LibsUiComponentsTableComponent } from '@libs-ui/components-table';
|
|
77
|
+
|
|
78
|
+
@Component({
|
|
79
|
+
selector: 'app-table-demo',
|
|
80
|
+
standalone: true,
|
|
81
|
+
imports: [LibsUiComponentsTableComponent],
|
|
82
|
+
templateUrl: './table-demo.component.html'
|
|
83
|
+
})
|
|
84
|
+
export class TableDemoComponent {
|
|
85
|
+
// giống ví dụ trên
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
```html
|
|
90
|
+
<libs_ui-components-table
|
|
91
|
+
[headerLeft]="headers"
|
|
92
|
+
[newData]="newData"
|
|
93
|
+
[showFooter]="true"
|
|
94
|
+
[paginationSetting]="{ position: 'bottom', numberPageDispaly: 5 }">
|
|
95
|
+
</libs_ui-components-table>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Công nghệ sử dụng
|
|
99
|
+
|
|
100
|
+
- **Angular 18** với standalone components và Signals
|
|
101
|
+
- **Tailwind CSS** cho layout demo
|
|
102
|
+
|
|
103
|
+
## API Reference
|
|
104
|
+
|
|
105
|
+
### Inputs
|
|
106
|
+
|
|
107
|
+
| Tên | Kiểu | Mặc định | Mô tả |
|
|
108
|
+
|---------------------|---------------------------------|------------|-------------------------------------------------|
|
|
109
|
+
| headerLeft | `ITableHeaderConfig[]` | `[]` | Cấu hình header cột bên trái |
|
|
110
|
+
| newData | `TYPE_NEW_DATA_TABLE` | `{}` | Dữ liệu hiển thị (mảng item, có thể thêm vào) |
|
|
111
|
+
| showFooter | `boolean` | `false` | Hiển thị footer |
|
|
112
|
+
| paginationSetting | `object` | `{}` | Cấu hình phân trang (vị trí, số items) |
|
|
113
|
+
| disableCheckbox | `boolean` | `false` | Vô hiệu hóa checkbox |
|
|
114
|
+
| sortLocal | `boolean` | `false` | Sử dụng sắp xếp cục bộ |
|
|
115
|
+
| filterOrSortLocal | `TYPE_TABLE_FILTER` | `undefined`| Hàm lọc/sort cục bộ |
|
|
116
|
+
| httpRequestData | `IHttpRequestConfig` | `undefined`| Cấu hình gọi API lấy dữ liệu |
|
|
117
|
+
| templateNoData | `TYPE_TEMPLATE_REF` | `undefined`| Template hiển thị khi không có dữ liệu |
|
|
118
|
+
| templateNoResult | `TYPE_TEMPLATE_REF` | `undefined`| Template hiển thị khi tìm không ra kết quả |
|
|
119
|
+
|
|
120
|
+
### Outputs
|
|
121
|
+
|
|
122
|
+
| Tên | Kiểu | Mô tả |
|
|
123
|
+
|-------------------|-------------------------------------------|-----------------------------------------------------|
|
|
124
|
+
| outLoadMore | `(event: ILoadMoreEvent) => void` | Sự kiện load thêm dữ liệu |
|
|
125
|
+
| outSort | `(event: ISortEvent) => void` | Sự kiện sắp xếp |
|
|
126
|
+
| outClickButtonAction | `(event: ITabelButtonActionEvent) => void` | Sự kiện click button action |
|
|
127
|
+
| outHoverButtonAction | `(event: IHoverButtonActionEvent) => void` | Sự kiện hover button action |
|
|
128
|
+
| outKeysSelected | `(event: { keys: any[] }) => void` | Trả về mảng keys đã chọn |
|
|
129
|
+
| outLoadDataError | `(error: IHttpResponseError) => void` | Sự kiện khi API lỗi |
|
|
130
|
+
|
|
131
|
+
### Interfaces
|
|
132
|
+
|
|
133
|
+
Xem chi tiết trong `libs-ui/components/table/src/interfaces`.
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export * from './table.component';
|
|
2
2
|
export * from './interfaces';
|
|
3
|
-
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFibGUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3RlbXBsYXRlcy90ZW1wbGF0ZS5hYnN0cmFjdC5jb21wb25lbnQnOyJdfQ==
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFibGUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RhYmxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnOyJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFibGUvc3JjL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudCB9IGZyb20gJ0BpaGFyYmVjay9uZ3gtdmlydHVhbC1zY3JvbGxlcic7XG5pbXBvcnQgeyBUWVBFX0RBVEFfVEFCTEUgfSBmcm9tICcuL3RhYmxlLnR5cGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgcmVzZXQ6IChjbGVhclNvcnQ/OiBib29sZWFuKSA9PiB2b2lkO1xuICBjYWxsQXBpQnlTZXJ2aWNlOiAoZmlyc3RDYWxsOiBib29sZWFuLCByZXNldEFmdGVyQ2FsbEFwaT86IGJvb2xlYW4pID0+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFibGUvc3JjL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudCB9IGZyb20gJ0BpaGFyYmVjay9uZ3gtdmlydHVhbC1zY3JvbGxlcic7XG5pbXBvcnQgeyBUWVBFX0RBVEFfVEFCTEUgfSBmcm9tICcuL3RhYmxlLnR5cGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgcmVzZXQ6IChjbGVhclNvcnQ/OiBib29sZWFuKSA9PiB2b2lkO1xuICBjYWxsQXBpQnlTZXJ2aWNlOiAoZmlyc3RDYWxsOiBib29sZWFuLCByZXNldEFmdGVyQ2FsbEFwaT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHJlc2V0U2Nyb2xsOiAoc2Nyb2xsUG9zaXRpb25MZWZ0PzogbnVtYmVyLCBzY3JvbGxQb3NpdGlvblRvcD86IG51bWJlcikgPT4gdm9pZDtcbiAgcmVtb3ZlSXRlbXM6IChrZXlzOiBBcnJheTx1bmtub3duPiwgaWdub3JlUmVDYWxsRm9vdGVyPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgYWRkSXRlbXM6IChpdGVtczogVFlQRV9EQVRBX1RBQkxFLCBhZGRGaXJzdDogYm9vbGVhbiwgaWdub3JlSGlnaHRMaWdodD86IGJvb2xlYW4sIGlnbm9yZVJlQ2FsbEZvb3Rlcj86IGJvb2xlYW4sIGF1dG9Db3VudE5ld0l0ZW0/OiBib29sZWFuKSA9PiB2b2lkO1xuICBnZXRDb3VudDogKCkgPT4gbnVtYmVyO1xuICBnZXRTY3JvbGxDb250YWluZXI6ICgpID0+IFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudDtcbiAgaGlkZVRvb2xCYXJCb3R0b206ICgpID0+IHZvaWQ7XG4gIHJlc2V0S2V5U2VsZWN0ZWQ6ICgpID0+IHZvaWQ7XG4gIGRldGVjdENoYW5nZXM6ICgpID0+IHZvaWQ7XG59XG5cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJsZS9zcmMvaW50ZXJmYWNlcy90YWJsZS1jb25maWcuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBUWVBFX1NPUlRfVFlQRSB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtc29ydFwiO1xuaW1wb3J0IHsgSVBvcG92ZXIsIFRZUEVfUE9QT1ZFUl9UWVBFIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgVFlQRV9GVU5DVElPTiwgVFlQRV9PQkpFQ1QgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuaW1wb3J0IHsgSVRhYmxlVGVtcGxhdGVDb25maWcgfSBmcm9tIFwiLi90ZW1wbGF0ZS1jb25maWcuaW50ZXJmYWNlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlSGVhZGVyQ29uZmlnIHtcbiAgbmdTdHlsZT86IFRZUEVfT0JKRUNUO1xuICBrZWVwV2lkdGhJc1B4Q29sdW1uSWZUYWJsZVdpZHRoR3JhbmRUb3RhbENvbHVtbnNIZWFkZXI/OiBib29sZWFuO1xuICBuZ0NsYXNzPzogVFlQRV9PQkpFQ1Q7XG4gIHR5cGU/OiBUWVBFX1BPUE9WRVJfVFlQRTtcbiAgbGFiZWw/OiBzdHJpbmcgfCBUWVBFX09CSkVDVDtcbiAgbGFiZWxDb25maWc/OiBJUG9wb3ZlcjsgLy8gY29uZmlnIGRhdGFWaWV3IGtow7RuZyBjw7MgdMOhYyBk4bulbmcsIHPhu60gZOG7pW5nIGxhYmVsIMSR4buDIGNvbmZpZy5cbiAgcGFyc2VWYWx1ZT86IFRZUEVfRlVOQ1RJT047IC8vIGTDuW5nIGtoaSBtdeG7kW4gY3VzdG9tIGxhYmVsIGhlYWRlclxuICB0b29sdGlwc0xlZnQ/OiBBcnJheTxJUG9wb3Zlcj47IC8vIETDuW5nIGtoaSBoZWFkZXIgdGFibGUgY8OzIHRvb2x0aXBcbiAgdG9vbHRpcHNSaWdodD86IEFycmF5PElQb3BvdmVyPjsgLy8gRMO5bmcga2hpIGhlYWRlciB0YWJsZSBjw7MgdG9vbHRpcFxuICBoYXNDaGVja2JveD86IGJvb2xlYW47IC8vIETDuW5nIGtoaSBjw7MgY2hlY2tib3hcbiAgaGFzQ2hlY2tib3hBbGw/OiBib29sZWFuOyAvLyBEw7luZyBraGkgY8OzIGNoZWNrYm94XG4gIGNoZWNrYm94QWxpZ25DZW50ZXI/OiBib29sZWFuO1xuICBjb250ZW50SGVhZGVyQWxpZ25DZW50ZXI/OiBib29sZWFuOyAvLyBkw7luZyDEkeG7gyBjxINuIGdp4buvYSBu4buZaSBkdW5nIGtoaSBjw7MgdGjDqm0gdG9vbHRpcE90aGVyXG4gIGNvbnRlbnRIZWFkZXJKdXN0aWZ5Q29udGVudEVuZD86IGJvb2xlYW47IC8vIGTDuW5nIMSR4buDIGPEg24gbuG7mWkgZHVuZyB2ZSBiZW4gcGhhaVxuICBpZ25vcmVCb3JkZXJSaWdodD86IGJvb2xlYW47XG4gIGhhc1NvcnQ/OiBib29sZWFuO1xuICBvcmRlcmJ5Pzogc3RyaW5nOyAvLyBvcmRlciBjb3QgdGhlbyB0cnVvbmcgbmFvLlxuICBwYWRkaW5nTGVmdFJpZ2h0SGVhZGVyQ29udGFpbmVyPzogc3RyaW5nOyAvLyBwYWRkaW5nIGNobyBoZWFkZXJcbiAgaWdub3JlUHlEZWZhdWx0PzogYm9vbGVhbjsgLy8gdOG6r3QgcGFkZGluZyBkZWZhdWx0IGhlYWRlclxuICB0ZW1wbGF0ZUNzc1dyYXBwZXI/OiBzdHJpbmc7XG4gIHRlbXBsYXRlQ3NzV3JhcHBlckhvc3Q/OiBzdHJpbmc7XG4gIGNvbFRlbXBsYXRlQ29uZmlnPzogQXJyYXk8SVRhYmxlVGVtcGxhdGVDb25maWc+O1xuICBzb3J0SWdub3JlVG9vbHRpcENvbnRlbnQ/OiBib29sZWFuO1xuICBzb3J0VG9vbHRpcENvbnRlbnRBc2M/OiBzdHJpbmc7XG4gIHNvcnRUb29sdGlwQ29udGVudERlc2M/OiBzdHJpbmc7XG4gIHpJbmRleFRvb2x0aXBTb3J0PzogbnVtYmVyO1xuICBkZWZhdWx0TW9kZT86IFRZUEVfU09SVF9UWVBFO1xuICBsYWJlbERlc2NyaXB0aW9uPzoge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBjbGFzc0luY2x1ZGU/OiBzdHJpbmc7XG4gIH07XG4gIHJvd3NDb25maWc/OiB7XG4gICAgY2xhc3NDb250YWluZXJSb3dzPzogc3RyaW5nO1xuICAgIHJvd3M6IEFycmF5PHsgY2xhc3NSb3c/OiBzdHJpbmc7IGNvbHM6IEFycmF5PElUYWJsZUhlYWRlckNvbmZpZ0NvbD4gfT47XG4gIH07XG4gIGNoZWNrYm94Q2xhc3NJbmNsdWRlPzogc3RyaW5nO1xuICBjaGVja0NvbmRpdGlvbkNoZWNrQm94SGlkZGVuPzogVFlQRV9GVU5DVElPTjxib29sZWFuPjsgLy8gRMO5bmcga2hpIGPDsyBjaGVja2JveCBuaMawbmcgY8OzIMSRaeG7gXUga2nhu4duIGLhu5Ugc3VuZyDEkeG7gyDhuqluIMSRaSBjaGVja2JveCBj4bunYSAxIHbDoGkgaXRlbVxuICBjaGVja2JveEFsbENsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgaXNTaG93SW5kZXhPblJvdz86IGJvb2xlYW47XG4gIGNsYXNzSW5jbHVkZUluZGV4T25Sb3c/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlSGVhZGVyQ29uZmlnQ29sIHtcbiAgbmdTdHlsZT86IFRZUEVfT0JKRUNUO1xuICBuZ0NsYXNzPzogVFlQRV9PQkpFQ1Q7XG4gIHR5cGU/OiBUWVBFX1BPUE9WRVJfVFlQRTtcbiAgbGFiZWw/OiBzdHJpbmcgfCBUWVBFX09CSkVDVDtcbiAgbGFiZWxDb25maWc/OiBJUG9wb3ZlcjsgLy8gY29uZmlnIGRhdGFWaWV3IGtow7RuZyBjw7MgdMOhYyBk4bulbmcsIHPhu60gZOG7pW5nIGxhYmVsIMSR4buDIGNvbmZpZy5cbiAgcGFyc2VWYWx1ZT86IFRZUEVfRlVOQ1RJT047IC8vIGTDuW5nIGtoaSBtdeG7kW4gY3VzdG9tIGxhYmVsIGhlYWRlclxuICB0b29sdGlwT3RoZXI/OiBJUG9wb3ZlcjsgLy8gRMO5bmcga2hpIGhlYWRlciB0YWJsZSBjw7MgdG9vbHRpcFxuICBjb250ZW50SGVhZGVyQWxpZ25DZW50ZXI/OiBib29sZWFuOyAvLyBkw7luZyDEkeG7gyBjxINuIGdp4buvYSBu4buZaSBkdW5nIGtoaSBjw7MgdGjDqm0gdG9vbHRpcE90aGVyXG4gIGNvbnRlbnRIZWFkZXJKdXN0aWZ5Q29udGVudEVuZD86IGJvb2xlYW47IC8vIGTDuW5nIMSR4buDIGPEg24gbuG7mWkgZHVuZyB2ZSBiZW4gcGhhaVxuICBoYXNTb3J0PzogYm9vbGVhbjtcbiAgb3JkZXJieT86IHN0cmluZzsgLy8gb3JkZXIgY290IHRoZW8gdHJ1b25nIG5hby5cbiAgc29ydElnbm9yZVRvb2x0aXBDb250ZW50PzogYm9vbGVhbjtcbiAgc29ydFRvb2x0aXBDb250ZW50QXNjPzogc3RyaW5nO1xuICBzb3J0VG9vbHRpcENvbnRlbnREZXNjPzogc3RyaW5nO1xuICBkZWZhdWx0TW9kZT86IFRZUEVfU09SVF9UWVBFO1xuICBsYWJlbERlc2NyaXB0aW9uPzoge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBjbGFzc0luY2x1ZGU/OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmZpZ1RlbXBsYXRlSXRlbUNvbGxhcHNlRXhwYW5kIHtcbiAgZmllbGRHZXREYXRhRXhwYW5kPzogc3RyaW5nO1xuICBjc3NXcmFwcGVyPzogc3RyaW5nO1xuICB0ZW1wbGF0ZUNzc1dyYXBwZXI/OiBzdHJpbmc7XG4gIGNvbFRlbXBsYXRlQ29uZmlnPzogQXJyYXk8SVRhYmxlVGVtcGxhdGVDb25maWc+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUZvb3RlckNvbmZpZyB7XG4gIGlnbm9yZUJvcmRlclJpZ2h0PzogYm9vbGVhbjtcbiAgbmdTdHlsZT86IFRZUEVfT0JKRUNUO1xuICBuZ0NsYXNzPzogVFlQRV9PQkpFQ1Q7XG4gIHRlbXBsYXRlQ3NzV3JhcHBlcj86IHN0cmluZztcbiAgY29sVGVtcGxhdGVDb25maWc/OiBBcnJheTxJVGFibGVUZW1wbGF0ZUNvbmZpZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmZpZ1NlbGVjdE1vcmVJdGVtIHtcbiAga2V5UGVyUGFnZT86IHN0cmluZztcbiAgcGFnaW5nTnVtYmVyPzogYm9vbGVhbjtcbiAgZ2V0VmFsdWU6IChpdGVtOiBhbnkpID0+IHN0cmluZzsgLy8gbMOgIGjDoG0gZ2V0IHZhbHVlIGPhu6dhIGxpc3RWaWV3IHR5cGUgdGV4dFxuICBsaXN0T3B0aW9uOiBBcnJheTx7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyB9Pjtcbn0iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
export {};
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJsZS9zcmMvaW50ZXJmYWNlcy90ZW1wbGF0ZS1jb25maWcuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RCIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuaW1wb3J0IHsgV3JpdGFibGVTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUF2YXRhckNvbmZpZyB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWF2YXRhclwiO1xuaW1wb3J0IHsgSUJ1dHRvbiB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXCI7XG5pbXBvcnQgeyBJRHJvcGRvd24gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93blwiO1xuaW1wb3J0IHsgSUxpbmVDbGFtcENvbmZpZyB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxpbmUtY2xhbXBcIjtcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbSB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxpc3RcIjtcbmltcG9ydCB7IElQb3BvdmVyIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgSVN3aXRjaEV2ZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtc3dpdGNoXCI7XG5pbXBvcnQgeyBUWVBFX0ZVTkNUSU9OLCBUWVBFX09CSkVDVCB9IGZyb20gXCJAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNDb21wb25lbnRPdXRsZXRDb21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1jb21wb25lbnQtb3V0bGV0XCI7XG5pbXBvcnQgeyBUWVBFX0lURU1fREFUQV9UQUJMRSB9IGZyb20gXCIuL3RhYmxlLnR5cGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVUZW1wbGF0ZUNvbmZpZyB7XG4gIGNzc1dyYXBwZXI6IHN0cmluZztcbiAgZmllbGRzQ29uZmlnOiBBcnJheTxJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnIHtcbiAgaW5zdGFuY2U/OiAndG9vbHRpcCcgfCAnbGluZS1jbGFtcCcgfCAnYnV0dG9ucycgfCAnYnV0dG9uLXN0YXR1cycgfCAnc3dpdGNoJyB8ICdiYWRnZScgfCAnb3RoZXItYWN0aW9uLXNob3ctcG9wdXAnIHwgJ3NoYXBlLXN0eWxlJyB8ICdpbWFnZScgfCAnYXZhdGFyJyB8ICdidXR0b24tYWN0aW9uLXNob3ctcG9wdXAnO1xuICBmaWVsZDogc3RyaW5nO1xuICBwYXJzZVZhbHVlPzogVFlQRV9GVU5DVElPTjtcbiAgZ2V0VG9vbHRpcEljb25DbGFzcz86IFRZUEVfRlVOQ1RJT047IC8vIFPhu60gZOG7pW5nIGTDuW5nIGljb25DbGFzcyB0b29sdGlwIGNobyB0eXBlIHRvb2x0aXAuXG4gIGdldFRvb2x0aXBDb25maWc/OiBUWVBFX0ZVTkNUSU9OO1xuICBhY3Rpb24/OiAoZGF0YUZpZWxkOiBhbnksIGl0ZW06IFRZUEVfSVRFTV9EQVRBX1RBQkxFLCBpdGVtVGFibGVTZWxlY3RlZD86IFRZUEVfSVRFTV9EQVRBX1RBQkxFKSA9PiBhbnk7XG4gIHRvb2x0aXA/OiBJUG9wb3ZlcjsgLy8gbuG6v3UgbXXhu5FuIHPhu60gIGThu6VuZyBsaWJzLXVpY29tcG9uZW50cy10b29sdGlwLiB5w6p1IGPhuqd1IMSR4buDIHR5cGUgYuG6sW5nIHRvb2x0aXBcbiAgbmdTdHlsZT86IFRZUEVfT0JKRUNUO1xuICBnZXROZ1N0eWxlPzogVFlQRV9GVU5DVElPTjtcbiAgbmdDbGFzcz86IFRZUEVfT0JKRUNUO1xuICBnZXROZ0NsYXNzPzogVFlQRV9GVU5DVElPTjtcbiAgaWdub3JlQ2xhc3NNYXJnaW5MZWZ0PzogYm9vbGVhbjsgLy8gc+G7rSBk4bulbmcga2hpIG114buRbiBi4buPIGNsYXNzIG1hcmdpbiBjaG8gdHlwZSBvdGhlci1hY3Rpb24tc2hvdy1wb3B1cCwgYmFkZ2VcblxuICBsaW5lQ2xhbXBDb25maWc/OiBJTGluZUNsYW1wQ29uZmlnO1xuXG4gIGdldERpc2FibGVWYWx1ZVN3aXRjaD86IFRZUEVfRlVOQ1RJT047IC8vIHPhu60gZOG7pW5nIGtoaSBtdeG7kW4gxJFp4buDdSBjaOG7iW5oIGNo4bq/IMSR4buZIGVuYWJsZSBoYXkgZGlzYWJsZSBjaG8gdG9nZ2xlXG4gIGdldEFjdGl2ZVZhbHVlU3dpdGNoPzogVFlQRV9GVU5DVElPTjsgLy8gc+G7rSBk4bulbmcga2hpIG114buRbiDEkWnhu4N1IGNo4buJbmggY2jhur8gxJHhu5kgYWN0aXZlIGhheSBkZWFjdGl2ZSBjaG8gdG9nZ2xlXG4gIHN3aXRjaEFjdGlvbj86IChzd2l0Y2hEYXRhOiBJU3dpdGNoRXZlbnQsIGl0ZW06IFRZUEVfSVRFTV9EQVRBX1RBQkxFKSA9PiB2b2lkOyAvLyBC4bqvdCBideG7mWMga2hpIHPhu60gZOG7pW5nIHR5cGUgPSBzd2l0Y2hcbiAgYnV0dG9ucz86IEFycmF5PFdyaXRhYmxlU2lnbmFsPElCdXR0b24+PjtcbiAgZ2V0QnV0dG9uc0J5SXRlbT86IFRZUEVfRlVOQ1RJT048QXJyYXk8V3JpdGFibGVTaWduYWw8SUJ1dHRvbj4+PjtcbiAgc2hvd0J1dHRvbkhvdmVyTW9kZT86IGJvb2xlYW47XG4gIGdldERpc2FibGU/OiBUWVBFX0ZVTkNUSU9OOyAvLyBT4butIGThu6VuZyDEkeG7gyBkaXNhYmxlIGlucHV0LCBidXR0b24sIHFyLWNvZGVcbiAgZHJvcGRvd25Db25maWc/OiBJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnRHJvcGRvd247XG5cbiAgZ2V0QXZhdGFyQ29uZmlnPzogVFlQRV9GVU5DVElPTjxJQXZhdGFyQ29uZmlnPjtcblxuICBnZXRJbWFnZVNyYz86ICh2YWx1ZTogYW55LCBpdGVtPzogVFlQRV9PQkpFQ1QsIGxhbmc/OiBzdHJpbmcsIGlzRXJyb3I/OiBib29sZWFuKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHJvd3M/OiBBcnJheTxJVGFibGVUZW1wbGF0ZUNvbmZpZz47XG4gIHJvd3NUZW1wbGF0ZUNzc1dyYXBwZXI/OiBzdHJpbmc7XG5cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogKCkgPT4gT2JzZXJ2YWJsZTxMaWJzVWlDb21wb25lbnRzQ29tcG9uZW50T3V0bGV0Q29tcG9uZW50IHwgYW55PjtcbiAgZ2V0RGF0YUNvbXBvbmVudE91dGxldD86IFRZUEVfRlVOQ1RJT047XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlRmllbGRUZW1wbGF0ZUNvbmZpZ0Ryb3Bkb3duIGV4dGVuZHMgSURyb3Bkb3duIHtcbiAgYnV0dG9uPzogV3JpdGFibGVTaWduYWw8SUJ1dHRvbj47XG4gIGdldExpc3RDb25maWc/OiBUWVBFX0ZVTkNUSU9OPElMaXN0Q29uZmlnSXRlbT47XG4gIGxpc3RLZXlzRGlzYWJsZUl0ZW0/OiBBcnJheTxzdHJpbmc+O1xuICBsaXN0SGlkZGVuSW5wdXRTZWFyY2g/OiBib29sZWFuO1xuICBtYXhIZWlnaHQ/OiBudW1iZXI7XG4gIGlnbm9yZUFycm93PzogYm9vbGVhbjtcbiAgcG9zaXRpb24/OiB7XG4gICAgbW9kZTogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcsXG4gICAgZGlzdGFuY2U6IG51bWJlclxuICB9XG59Il19
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class LibsUiTableCalculatorColumnPipe {
|
|
4
|
+
transform(header, offsetWidth, headerLeftConfig, headerRightConfig) {
|
|
5
|
+
if (!header?.ngStyle) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
const mixHeaderConfig = [...(headerLeftConfig || []), ...(headerRightConfig || [])];
|
|
9
|
+
let totalPxWidthHeader = mixHeaderConfig.reduce((acc, curr) => acc + this.getWidthPxOfStyle(curr), 0);
|
|
10
|
+
const totalPercentWidthHeader = mixHeaderConfig.reduce((acc, curr) => acc + this.getWidthPercentOfStyle(curr), 0);
|
|
11
|
+
const totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader = mixHeaderConfig.reduce((acc, curr) => acc + (curr.keepWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader ? this.getWidthPxOfStyle(curr) : 0), 0);
|
|
12
|
+
if (mixHeaderConfig.some(header => header.isShowIndexOnRow)) {
|
|
13
|
+
offsetWidth -= 50;
|
|
14
|
+
}
|
|
15
|
+
if (totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader) {
|
|
16
|
+
offsetWidth -= totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader;
|
|
17
|
+
totalPxWidthHeader -= totalWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader;
|
|
18
|
+
}
|
|
19
|
+
let percent = this.getWidthPercentOfStyle(header);
|
|
20
|
+
if (percent) {
|
|
21
|
+
offsetWidth -= totalPxWidthHeader;
|
|
22
|
+
const percentDivide = (totalPercentWidthHeader - 100) / mixHeaderConfig.length;
|
|
23
|
+
percent -= percentDivide;
|
|
24
|
+
const widthCalculator = (percent / 100) * offsetWidth;
|
|
25
|
+
return this.getStyleUpdate(widthCalculator, header.ngStyle);
|
|
26
|
+
}
|
|
27
|
+
const width = this.getWidthPxOfStyle(header);
|
|
28
|
+
if (totalPxWidthHeader > offsetWidth || header.keepWidthIsPxColumnIfTableWidthGrandTotalColumnsHeader || totalPercentWidthHeader) {
|
|
29
|
+
return this.getStyleUpdate(width, header.ngStyle);
|
|
30
|
+
}
|
|
31
|
+
const widthCalculator = (width / totalPxWidthHeader) * offsetWidth;
|
|
32
|
+
return this.getStyleUpdate(widthCalculator, header.ngStyle);
|
|
33
|
+
}
|
|
34
|
+
getWidthPxOfStyle(headerGetWidth) {
|
|
35
|
+
let { flex, width, maxWidth } = headerGetWidth.ngStyle || {};
|
|
36
|
+
if (flex?.includes('%') || width?.includes('%') || maxWidth?.includes('%')) {
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
width = parseInt(width || '0');
|
|
40
|
+
maxWidth = parseInt(maxWidth || '0');
|
|
41
|
+
flex = parseInt((flex || '0').split(' ').pop() || '0');
|
|
42
|
+
if (!flex && !width && !maxWidth) {
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
const widthMax = Math.max(width, maxWidth, flex);
|
|
46
|
+
return widthMax;
|
|
47
|
+
}
|
|
48
|
+
getWidthPercentOfStyle(headerGetWidth) {
|
|
49
|
+
let { flex, width, maxWidth } = headerGetWidth.ngStyle || {};
|
|
50
|
+
if (flex?.includes('px') || width?.includes('px') || maxWidth?.includes('px')) {
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
width = parseInt(width || '0');
|
|
54
|
+
maxWidth = parseInt(maxWidth || '0');
|
|
55
|
+
flex = parseInt((flex || '0').split(' ').pop() || '0');
|
|
56
|
+
if (!flex && !width && !maxWidth) {
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
const widthMax = Math.max(width, maxWidth, flex);
|
|
60
|
+
return widthMax;
|
|
61
|
+
}
|
|
62
|
+
getStyleUpdate(widthCalculator, ngStyle) {
|
|
63
|
+
return {
|
|
64
|
+
...ngStyle,
|
|
65
|
+
flex: `0 0 ${widthCalculator}px`,
|
|
66
|
+
width: `${widthCalculator}px`,
|
|
67
|
+
maxWidth: `${widthCalculator}px`
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiTableCalculatorColumnPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
71
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: LibsUiTableCalculatorColumnPipe, isStandalone: true, name: "LibsUiTableCalculatorColumnPipe" });
|
|
72
|
+
}
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiTableCalculatorColumnPipe, decorators: [{
|
|
74
|
+
type: Pipe,
|
|
75
|
+
args: [{
|
|
76
|
+
name: 'LibsUiTableCalculatorColumnPipe',
|
|
77
|
+
standalone: true
|
|
78
|
+
}]
|
|
79
|
+
}] });
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRvci1jb2x1bW4ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJsZS9zcmMvcGlwZXMvY2FsY3VsYXRvci1jb2x1bW4ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFRcEQsTUFBTSxPQUFPLCtCQUErQjtJQUMxQyxTQUFTLENBQUMsTUFBc0MsRUFBRSxXQUFtQixFQUFFLGdCQUE0QyxFQUFFLGlCQUE2QztRQUNoSyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwRixJQUFJLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sdUJBQXVCLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEgsTUFBTSx1REFBdUQsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWpOLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDNUQsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsSUFBSSx1REFBdUQsRUFBRSxDQUFDO1lBQzVELFdBQVcsSUFBSSx1REFBdUQsQ0FBQztZQUN2RSxrQkFBa0IsSUFBSSx1REFBdUQsQ0FBQztRQUNoRixDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixXQUFXLElBQUksa0JBQWtCLENBQUM7WUFDbEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyx1QkFBdUIsR0FBRyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1lBQy9FLE9BQU8sSUFBSSxhQUFhLENBQUM7WUFDekIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDO1lBQ3RELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxrQkFBa0IsR0FBRyxXQUFXLElBQUksTUFBTSxDQUFDLHNEQUFzRCxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDakksT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTlELENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxjQUFrQztRQUMxRCxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxjQUFjLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUM3RCxJQUFJLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0UsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBQ0QsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUM7UUFDL0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sc0JBQXNCLENBQUMsY0FBa0M7UUFDL0QsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsY0FBYyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDN0QsSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlFLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxlQUF1QixFQUFFLE9BQW9CO1FBQ2xFLE9BQU87WUFDTCxHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsT0FBTyxlQUFlLElBQUk7WUFDaEMsS0FBSyxFQUFFLEdBQUcsZUFBZSxJQUFJO1lBQzdCLFFBQVEsRUFBRSxHQUFHLGVBQWUsSUFBSTtTQUNqQyxDQUFDO0lBQ0osQ0FBQzt3R0E3RVUsK0JBQStCO3NHQUEvQiwrQkFBK0I7OzRGQUEvQiwrQkFBK0I7a0JBTDNDLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGlDQUFpQztvQkFDdkMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVRhYmxlSGVhZGVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YWJsZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRZUEVfT0JKRUNUIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5AUGlwZSh7XG4gIG5hbWU6ICdMaWJzVWlUYWJsZUNhbGN1bGF0b3JDb2x1bW5QaXBlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcblxuZXhwb3J0IGNsYXNzIExpYnNVaVRhYmxlQ2FsY3VsYXRvckNvbHVtblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKGhlYWRlcjogSVRhYmxlSGVhZGVyQ29uZmlnIHwgdW5kZWZpbmVkLCBvZmZzZXRXaWR0aDogbnVtYmVyLCBoZWFkZXJMZWZ0Q29uZmlnPzogQXJyYXk8SVRhYmxlSGVhZGVyQ29uZmlnPiwgaGVhZGVyUmlnaHRDb25maWc/OiBBcnJheTxJVGFibGVIZWFkZXJDb25maWc+KTogVFlQRV9PQkpFQ1QgfCB1bmRlZmluZWQge1xuICAgIGlmICghaGVhZGVyPy5uZ1N0eWxlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG1peEhlYWRlckNvbmZpZyA9IFsuLi4oaGVhZGVyTGVmdENvbmZpZyB8fCBbXSksIC4uLihoZWFkZXJSaWdodENvbmZpZyB8fCBbXSldO1xuXG4gICAgbGV0IHRvdGFsUHhXaWR0aEhlYWRlciA9IG1peEhlYWRlckNvbmZpZy5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgdGhpcy5nZXRXaWR0aFB4T2ZTdHlsZShjdXJyKSwgMCk7XG4gICAgY29uc3QgdG90YWxQZXJjZW50V2lkdGhIZWFkZXIgPSBtaXhIZWFkZXJDb25maWcucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIHRoaXMuZ2V0V2lkdGhQZXJjZW50T2ZTdHlsZShjdXJyKSwgMCk7XG4gICAgY29uc3QgdG90YWxXaWR0aElzUHhDb2x1bW5JZlRhYmxlV2lkdGhHcmFuZFRvdGFsQ29sdW1uc0hlYWRlciA9IG1peEhlYWRlckNvbmZpZy5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgKGN1cnIua2VlcFdpZHRoSXNQeENvbHVtbklmVGFibGVXaWR0aEdyYW5kVG90YWxDb2x1bW5zSGVhZGVyID8gdGhpcy5nZXRXaWR0aFB4T2ZTdHlsZShjdXJyKSA6IDApLCAwKTtcblxuICAgIGlmIChtaXhIZWFkZXJDb25maWcuc29tZShoZWFkZXIgPT4gaGVhZGVyLmlzU2hvd0luZGV4T25Sb3cpKSB7XG4gICAgICBvZmZzZXRXaWR0aCAtPSA1MDtcbiAgICB9XG5cbiAgICBpZiAodG90YWxXaWR0aElzUHhDb2x1bW5JZlRhYmxlV2lkdGhHcmFuZFRvdGFsQ29sdW1uc0hlYWRlcikge1xuICAgICAgb2Zmc2V0V2lkdGggLT0gdG90YWxXaWR0aElzUHhDb2x1bW5JZlRhYmxlV2lkdGhHcmFuZFRvdGFsQ29sdW1uc0hlYWRlcjtcbiAgICAgIHRvdGFsUHhXaWR0aEhlYWRlciAtPSB0b3RhbFdpZHRoSXNQeENvbHVtbklmVGFibGVXaWR0aEdyYW5kVG90YWxDb2x1bW5zSGVhZGVyO1xuICAgIH1cblxuICAgIGxldCBwZXJjZW50ID0gdGhpcy5nZXRXaWR0aFBlcmNlbnRPZlN0eWxlKGhlYWRlcik7XG4gICAgaWYgKHBlcmNlbnQpIHtcbiAgICAgIG9mZnNldFdpZHRoIC09IHRvdGFsUHhXaWR0aEhlYWRlcjtcbiAgICAgIGNvbnN0IHBlcmNlbnREaXZpZGUgPSAodG90YWxQZXJjZW50V2lkdGhIZWFkZXIgLSAxMDApIC8gbWl4SGVhZGVyQ29uZmlnLmxlbmd0aDtcbiAgICAgIHBlcmNlbnQgLT0gcGVyY2VudERpdmlkZTtcbiAgICAgIGNvbnN0IHdpZHRoQ2FsY3VsYXRvciA9IChwZXJjZW50IC8gMTAwKSAqIG9mZnNldFdpZHRoO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3R5bGVVcGRhdGUod2lkdGhDYWxjdWxhdG9yLCBoZWFkZXIubmdTdHlsZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoUHhPZlN0eWxlKGhlYWRlcik7XG4gICAgaWYgKHRvdGFsUHhXaWR0aEhlYWRlciA+IG9mZnNldFdpZHRoIHx8IGhlYWRlci5rZWVwV2lkdGhJc1B4Q29sdW1uSWZUYWJsZVdpZHRoR3JhbmRUb3RhbENvbHVtbnNIZWFkZXIgfHwgdG90YWxQZXJjZW50V2lkdGhIZWFkZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0eWxlVXBkYXRlKHdpZHRoLCBoZWFkZXIubmdTdHlsZSk7XG4gICAgfVxuICAgIGNvbnN0IHdpZHRoQ2FsY3VsYXRvciA9ICh3aWR0aCAvIHRvdGFsUHhXaWR0aEhlYWRlcikgKiBvZmZzZXRXaWR0aDtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHlsZVVwZGF0ZSh3aWR0aENhbGN1bGF0b3IsIGhlYWRlci5uZ1N0eWxlKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBnZXRXaWR0aFB4T2ZTdHlsZShoZWFkZXJHZXRXaWR0aDogSVRhYmxlSGVhZGVyQ29uZmlnKTogbnVtYmVyIHtcbiAgICBsZXQgeyBmbGV4LCB3aWR0aCwgbWF4V2lkdGggfSA9IGhlYWRlckdldFdpZHRoLm5nU3R5bGUgfHwge307XG4gICAgaWYgKGZsZXg/LmluY2x1ZGVzKCclJykgfHwgd2lkdGg/LmluY2x1ZGVzKCclJykgfHwgbWF4V2lkdGg/LmluY2x1ZGVzKCclJykpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB3aWR0aCA9IHBhcnNlSW50KHdpZHRoIHx8ICcwJyk7XG4gICAgbWF4V2lkdGggPSBwYXJzZUludChtYXhXaWR0aCB8fCAnMCcpO1xuICAgIGZsZXggPSBwYXJzZUludCgoZmxleCB8fCAnMCcpLnNwbGl0KCcgJykucG9wKCkgfHwgJzAnKTtcblxuICAgIGlmICghZmxleCAmJiAhd2lkdGggJiYgIW1heFdpZHRoKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3Qgd2lkdGhNYXggPSBNYXRoLm1heCh3aWR0aCwgbWF4V2lkdGgsIGZsZXgpO1xuICAgIHJldHVybiB3aWR0aE1heDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0V2lkdGhQZXJjZW50T2ZTdHlsZShoZWFkZXJHZXRXaWR0aDogSVRhYmxlSGVhZGVyQ29uZmlnKTogbnVtYmVyIHtcbiAgICBsZXQgeyBmbGV4LCB3aWR0aCwgbWF4V2lkdGggfSA9IGhlYWRlckdldFdpZHRoLm5nU3R5bGUgfHwge307XG4gICAgaWYgKGZsZXg/LmluY2x1ZGVzKCdweCcpIHx8IHdpZHRoPy5pbmNsdWRlcygncHgnKSB8fCBtYXhXaWR0aD8uaW5jbHVkZXMoJ3B4JykpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB3aWR0aCA9IHBhcnNlSW50KHdpZHRoIHx8ICcwJyk7XG4gICAgbWF4V2lkdGggPSBwYXJzZUludChtYXhXaWR0aCB8fCAnMCcpO1xuICAgIGZsZXggPSBwYXJzZUludCgoZmxleCB8fCAnMCcpLnNwbGl0KCcgJykucG9wKCkgfHwgJzAnKTtcbiAgICBpZiAoIWZsZXggJiYgIXdpZHRoICYmICFtYXhXaWR0aCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHdpZHRoTWF4ID0gTWF0aC5tYXgod2lkdGgsIG1heFdpZHRoLCBmbGV4KTtcbiAgICByZXR1cm4gd2lkdGhNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldFN0eWxlVXBkYXRlKHdpZHRoQ2FsY3VsYXRvcjogbnVtYmVyLCBuZ1N0eWxlOiBUWVBFX09CSkVDVCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5uZ1N0eWxlLFxuICAgICAgZmxleDogYDAgMCAke3dpZHRoQ2FsY3VsYXRvcn1weGAsXG4gICAgICB3aWR0aDogYCR7d2lkdGhDYWxjdWxhdG9yfXB4YCxcbiAgICAgIG1heFdpZHRoOiBgJHt3aWR0aENhbGN1bGF0b3J9cHhgXG4gICAgfTtcbiAgfVxufVxuIl19
|