@geoit/ui 0.0.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/AGENTS.md +25 -0
- package/README.md +46 -0
- package/ai/AGENTS.md +86 -0
- package/ai/README.md +44 -0
- package/ai/catalog.json +882 -0
- package/ai/components/geo-alert.md +56 -0
- package/ai/components/geo-back-button.md +54 -0
- package/ai/components/geo-breadcrumb.md +52 -0
- package/ai/components/geo-button.md +63 -0
- package/ai/components/geo-checkbox.md +54 -0
- package/ai/components/geo-column-picker.md +54 -0
- package/ai/components/geo-confirm-modal.md +70 -0
- package/ai/components/geo-date-picker.md +65 -0
- package/ai/components/geo-date-range-picker.md +64 -0
- package/ai/components/geo-file-picker.md +62 -0
- package/ai/components/geo-form-modal.md +88 -0
- package/ai/components/geo-icon.md +53 -0
- package/ai/components/geo-input.md +65 -0
- package/ai/components/geo-page-title.md +53 -0
- package/ai/components/geo-pagination.md +59 -0
- package/ai/components/geo-radio.md +67 -0
- package/ai/components/geo-row-actions.md +54 -0
- package/ai/components/geo-select.md +68 -0
- package/ai/components/geo-slider.md +56 -0
- package/ai/components/geo-status-tag.md +51 -0
- package/ai/components/geo-step-form-layout.md +81 -0
- package/ai/components/geo-stepper.md +63 -0
- package/ai/components/geo-table-filter.md +65 -0
- package/ai/components/geo-table-pagination.md +59 -0
- package/ai/components/geo-table-toolbar.md +64 -0
- package/ai/components/geo-table.md +98 -0
- package/ai/components/geo-tabs.md +62 -0
- package/ai/components/geo-textarea.md +59 -0
- package/ai/components/geo-toast.md +61 -0
- package/ai/components/geo-tree.md +58 -0
- package/ai/components/geo-typography.md +57 -0
- package/ai/components/geo-upload.md +78 -0
- package/ai/recipes.md +111 -0
- package/esm2022/geoit-ui.mjs +5 -0
- package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +58 -0
- package/esm2022/lib/figma/geo-alert/geo-alert.types.mjs +7 -0
- package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +48 -0
- package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +33 -0
- package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.types.mjs +2 -0
- package/esm2022/lib/figma/geo-button/geo-button.component.mjs +77 -0
- package/esm2022/lib/figma/geo-button/geo-button.types.mjs +2 -0
- package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +34 -0
- package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +76 -0
- package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.types.mjs +2 -0
- package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +119 -0
- package/esm2022/lib/figma/geo-date-picker/geo-date-picker.types.mjs +2 -0
- package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +116 -0
- package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.types.mjs +2 -0
- package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +145 -0
- package/esm2022/lib/figma/geo-file-picker/geo-file-picker.types.mjs +2 -0
- package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +153 -0
- package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +51 -0
- package/esm2022/lib/figma/geo-icon/geo-icon.types.mjs +8 -0
- package/esm2022/lib/figma/geo-input/geo-input.component.mjs +118 -0
- package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +51 -0
- package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +54 -0
- package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +95 -0
- package/esm2022/lib/figma/geo-radio/geo-radio.types.mjs +2 -0
- package/esm2022/lib/figma/geo-select/geo-select.component.mjs +113 -0
- package/esm2022/lib/figma/geo-select/geo-select.types.mjs +2 -0
- package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +43 -0
- package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +62 -0
- package/esm2022/lib/figma/geo-status-tag/geo-status-tag.types.mjs +30 -0
- package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +157 -0
- package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.types.mjs +2 -0
- package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +77 -0
- package/esm2022/lib/figma/geo-stepper/geo-stepper.types.mjs +2 -0
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +65 -0
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.storage.mjs +31 -0
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.types.mjs +2 -0
- package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +64 -0
- package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.types.mjs +24 -0
- package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +195 -0
- package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +118 -0
- package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +68 -0
- package/esm2022/lib/figma/geo-table/geo-table.component.mjs +381 -0
- package/esm2022/lib/figma/geo-table/geo-table.types.mjs +4 -0
- package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +94 -0
- package/esm2022/lib/figma/geo-tabs/geo-tabs.types.mjs +2 -0
- package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +85 -0
- package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +57 -0
- package/esm2022/lib/figma/geo-toast/geo-toast.service.mjs +116 -0
- package/esm2022/lib/figma/geo-toast/geo-toast.types.mjs +13 -0
- package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +52 -0
- package/esm2022/lib/figma/geo-tree/geo-tree.types.mjs +2 -0
- package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +112 -0
- package/esm2022/lib/figma/geo-typography/geo-typography.types.mjs +96 -0
- package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +218 -0
- package/esm2022/lib/figma/geo-upload/geo-upload.types.mjs +30 -0
- package/esm2022/lib/figma/index.mjs +56 -0
- package/esm2022/lib/ng-zorro/ng-zorro-antd.module.mjs +293 -0
- package/esm2022/lib/styles/tokens.mjs +144 -0
- package/esm2022/public-api.mjs +7 -0
- package/fesm2022/geoit-ui.mjs +3805 -0
- package/fesm2022/geoit-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/figma/geo-alert/geo-alert.component.d.ts +17 -0
- package/lib/figma/geo-alert/geo-alert.types.d.ts +2 -0
- package/lib/figma/geo-back-button/geo-back-button.component.d.ts +18 -0
- package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +12 -0
- package/lib/figma/geo-breadcrumb/geo-breadcrumb.types.d.ts +10 -0
- package/lib/figma/geo-button/geo-button.component.d.ts +27 -0
- package/lib/figma/geo-button/geo-button.types.d.ts +4 -0
- package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +12 -0
- package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +24 -0
- package/lib/figma/geo-confirm-modal/geo-confirm-modal.types.d.ts +5 -0
- package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +35 -0
- package/lib/figma/geo-date-picker/geo-date-picker.types.d.ts +2 -0
- package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +34 -0
- package/lib/figma/geo-date-range-picker/geo-date-range-picker.types.d.ts +2 -0
- package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +39 -0
- package/lib/figma/geo-file-picker/geo-file-picker.types.d.ts +4 -0
- package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +57 -0
- package/lib/figma/geo-icon/geo-icon.component.d.ts +19 -0
- package/lib/figma/geo-icon/geo-icon.types.d.ts +3 -0
- package/lib/figma/geo-input/geo-input.component.d.ts +37 -0
- package/lib/figma/geo-page-title/geo-page-title.component.d.ts +22 -0
- package/lib/figma/geo-pagination/geo-pagination.component.d.ts +21 -0
- package/lib/figma/geo-radio/geo-radio.component.d.ts +31 -0
- package/lib/figma/geo-radio/geo-radio.types.d.ts +9 -0
- package/lib/figma/geo-select/geo-select.component.d.ts +33 -0
- package/lib/figma/geo-select/geo-select.types.d.ts +7 -0
- package/lib/figma/geo-slider/geo-slider.component.d.ts +17 -0
- package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +18 -0
- package/lib/figma/geo-status-tag/geo-status-tag.types.d.ts +13 -0
- package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +67 -0
- package/lib/figma/geo-step-form-layout/geo-step-form-layout.types.d.ts +9 -0
- package/lib/figma/geo-stepper/geo-stepper.component.d.ts +42 -0
- package/lib/figma/geo-stepper/geo-stepper.types.d.ts +9 -0
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +20 -0
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.storage.d.ts +5 -0
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.types.d.ts +17 -0
- package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +21 -0
- package/lib/figma/geo-table/geo-row-actions/geo-row-actions.types.d.ts +13 -0
- package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +75 -0
- package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +33 -0
- package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +24 -0
- package/lib/figma/geo-table/geo-table.component.d.ts +113 -0
- package/lib/figma/geo-table/geo-table.types.d.ts +47 -0
- package/lib/figma/geo-tabs/geo-tabs.component.d.ts +31 -0
- package/lib/figma/geo-tabs/geo-tabs.types.d.ts +7 -0
- package/lib/figma/geo-textarea/geo-textarea.component.d.ts +27 -0
- package/lib/figma/geo-toast/geo-toast.component.d.ts +23 -0
- package/lib/figma/geo-toast/geo-toast.service.d.ts +33 -0
- package/lib/figma/geo-toast/geo-toast.types.d.ts +45 -0
- package/lib/figma/geo-tree/geo-tree.component.d.ts +23 -0
- package/lib/figma/geo-tree/geo-tree.types.d.ts +12 -0
- package/lib/figma/geo-typography/geo-typography.component.d.ts +35 -0
- package/lib/figma/geo-typography/geo-typography.types.d.ts +12 -0
- package/lib/figma/geo-upload/geo-upload.component.d.ts +59 -0
- package/lib/figma/geo-upload/geo-upload.types.d.ts +13 -0
- package/lib/figma/index.d.ts +55 -0
- package/lib/ng-zorro/ng-zorro-antd.module.d.ts +76 -0
- package/lib/styles/tokens.d.ts +184 -0
- package/package.json +38 -0
- package/public-api.d.ts +3 -0
- package/src/lib/styles/design-tokens.scss +143 -0
- package/src/lib/styles/geo-toast-notification.scss +129 -0
- package/src/lib/styles/scrollbar.scss +38 -0
- package/src/lib/styles/theme.scss +153 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';
|
|
4
|
+
import { GeoRowActionsComponent } from './geo-row-actions/geo-row-actions.component';
|
|
5
|
+
import { pickInlineRowActions, pickOverflowRowActions, } from './geo-row-actions/geo-row-actions.types';
|
|
6
|
+
import { GeoStatusTagComponent } from '../geo-status-tag/geo-status-tag.component';
|
|
7
|
+
import { GeoCheckboxComponent } from '../geo-checkbox/geo-checkbox.component';
|
|
8
|
+
import { GeoTablePaginationComponent } from './geo-table-pagination/geo-table-pagination.component';
|
|
9
|
+
import { DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS, } from './geo-table.types';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "ng-zorro-antd/table";
|
|
12
|
+
export class GeoTableComponent {
|
|
13
|
+
columns = [];
|
|
14
|
+
data = [];
|
|
15
|
+
loading = false;
|
|
16
|
+
bordered = true;
|
|
17
|
+
outerBordered = false;
|
|
18
|
+
size = 'middle';
|
|
19
|
+
striped = true;
|
|
20
|
+
clickable = true;
|
|
21
|
+
tableLayout = 'auto';
|
|
22
|
+
showPagination = true;
|
|
23
|
+
frontPagination = true;
|
|
24
|
+
pageIndex = 1;
|
|
25
|
+
pageSize = 10;
|
|
26
|
+
total;
|
|
27
|
+
pageSizeOptions = DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS;
|
|
28
|
+
showSizeChanger = false;
|
|
29
|
+
showQuickJumper = false;
|
|
30
|
+
hideOnSinglePage = false;
|
|
31
|
+
simplePagination = false;
|
|
32
|
+
paginationPosition = 'bottom';
|
|
33
|
+
scroll = {};
|
|
34
|
+
scrollY;
|
|
35
|
+
/**
|
|
36
|
+
* Tự bật scroll ngang theo tổng width cột.
|
|
37
|
+
* Khi có cột `fixed`, scroll.x luôn được tính (bắt buộc với nz-table fixed).
|
|
38
|
+
*/
|
|
39
|
+
autoScroll = false;
|
|
40
|
+
tableTitle;
|
|
41
|
+
footer;
|
|
42
|
+
emptyText = 'Không có dữ liệu';
|
|
43
|
+
showTotalRange = false;
|
|
44
|
+
selectable = false;
|
|
45
|
+
rowKey = 'id';
|
|
46
|
+
selectedKeys = [];
|
|
47
|
+
/**
|
|
48
|
+
* Mobile card: key cột làm tiêu đề.
|
|
49
|
+
* Ưu tiên hơn `column.mobileTitle`; nếu không set thì lấy cột dữ liệu đầu tiên.
|
|
50
|
+
*/
|
|
51
|
+
mobileTitleKey;
|
|
52
|
+
/** Bật/tắt chuyển card trên mobile (mặc định bật). */
|
|
53
|
+
mobileCardView = true;
|
|
54
|
+
rowClick = new EventEmitter();
|
|
55
|
+
rowEdit = new EventEmitter();
|
|
56
|
+
rowMore = new EventEmitter();
|
|
57
|
+
rowAction = new EventEmitter();
|
|
58
|
+
pageIndexChange = new EventEmitter();
|
|
59
|
+
pageSizeChange = new EventEmitter();
|
|
60
|
+
queryParams = new EventEmitter();
|
|
61
|
+
currentPageDataChange = new EventEmitter();
|
|
62
|
+
selectedKeysChange = new EventEmitter();
|
|
63
|
+
selectionChange = new EventEmitter();
|
|
64
|
+
allChecked = false;
|
|
65
|
+
indeterminate = false;
|
|
66
|
+
sortFnCache = new Map();
|
|
67
|
+
ngOnChanges(changes) {
|
|
68
|
+
if (changes['columns']) {
|
|
69
|
+
this.sortFnCache.clear();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
get visibleColumns() {
|
|
73
|
+
return this.columns.filter((col) => col.visible !== false);
|
|
74
|
+
}
|
|
75
|
+
get computedTotal() {
|
|
76
|
+
return this.total ?? this.data.length;
|
|
77
|
+
}
|
|
78
|
+
get paginatedData() {
|
|
79
|
+
if (!this.showPagination || !this.frontPagination) {
|
|
80
|
+
return this.data;
|
|
81
|
+
}
|
|
82
|
+
const start = (this.pageIndex - 1) * this.pageSize;
|
|
83
|
+
return this.data.slice(start, start + this.pageSize);
|
|
84
|
+
}
|
|
85
|
+
get shouldShowPagination() {
|
|
86
|
+
return this.showPagination;
|
|
87
|
+
}
|
|
88
|
+
get hasFixedColumns() {
|
|
89
|
+
return this.visibleColumns.some((col) => col.fixed === 'left' || col.fixed === 'right');
|
|
90
|
+
}
|
|
91
|
+
/** Có cột fixed → table-layout fixed để header/body cùng width cột. */
|
|
92
|
+
get computedTableLayout() {
|
|
93
|
+
return this.hasFixedColumns ? 'fixed' : this.tableLayout;
|
|
94
|
+
}
|
|
95
|
+
/** Đồng bộ width cột khi scrollY tách header/body thành 2 bảng. */
|
|
96
|
+
get widthConfig() {
|
|
97
|
+
const widths = this.visibleColumns.map((col) => col.width ?? null);
|
|
98
|
+
return this.selectable ? ['48px', ...widths] : widths;
|
|
99
|
+
}
|
|
100
|
+
get computedScroll() {
|
|
101
|
+
const scroll = { ...this.scroll };
|
|
102
|
+
if (this.scrollY) {
|
|
103
|
+
scroll.y = this.scrollY;
|
|
104
|
+
}
|
|
105
|
+
// nz-table cần scroll.x để fixed left/right hoạt động.
|
|
106
|
+
if (!scroll.x && (this.autoScroll || this.hasFixedColumns)) {
|
|
107
|
+
const minWidth = this.computeMinTableWidth();
|
|
108
|
+
if (minWidth > 0) {
|
|
109
|
+
scroll.x = `${minWidth}px`;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return scroll;
|
|
113
|
+
}
|
|
114
|
+
get mobileTitleColumn() {
|
|
115
|
+
if (this.mobileTitleKey) {
|
|
116
|
+
return this.visibleColumns.find((col) => col.key === this.mobileTitleKey) ?? null;
|
|
117
|
+
}
|
|
118
|
+
const marked = this.visibleColumns.find((col) => col.mobileTitle);
|
|
119
|
+
if (marked)
|
|
120
|
+
return marked;
|
|
121
|
+
return (this.visibleColumns.find((col) => col.renderAs !== 'index' &&
|
|
122
|
+
col.renderAs !== 'actions' &&
|
|
123
|
+
!col.mobileHidden) ?? null);
|
|
124
|
+
}
|
|
125
|
+
get mobileBodyColumns() {
|
|
126
|
+
const titleKey = this.mobileTitleColumn?.key;
|
|
127
|
+
return this.visibleColumns.filter((col) => col.renderAs !== 'actions' &&
|
|
128
|
+
col.renderAs !== 'index' &&
|
|
129
|
+
!col.mobileHidden &&
|
|
130
|
+
col.key !== titleKey);
|
|
131
|
+
}
|
|
132
|
+
get mobileActionsColumn() {
|
|
133
|
+
return this.visibleColumns.find((col) => col.renderAs === 'actions') ?? null;
|
|
134
|
+
}
|
|
135
|
+
getRowActions(col, row) {
|
|
136
|
+
if (col.resolveActions) {
|
|
137
|
+
return col.resolveActions(row) ?? [];
|
|
138
|
+
}
|
|
139
|
+
return col.actions ?? [];
|
|
140
|
+
}
|
|
141
|
+
getMobileHeaderActions(col, row) {
|
|
142
|
+
return pickInlineRowActions(this.getRowActions(col, row), col.primaryActionKey ?? 'edit');
|
|
143
|
+
}
|
|
144
|
+
getMobileFooterActions(col, row) {
|
|
145
|
+
return pickOverflowRowActions(this.getRowActions(col, row), col.primaryActionKey ?? 'edit');
|
|
146
|
+
}
|
|
147
|
+
hasFilters(col) {
|
|
148
|
+
return (col.filters?.length ?? 0) > 0;
|
|
149
|
+
}
|
|
150
|
+
getSortFn(col) {
|
|
151
|
+
if (col.sortFn) {
|
|
152
|
+
return col.sortFn;
|
|
153
|
+
}
|
|
154
|
+
const cached = this.sortFnCache.get(col.key);
|
|
155
|
+
if (cached) {
|
|
156
|
+
return cached;
|
|
157
|
+
}
|
|
158
|
+
const fn = (a, b) => {
|
|
159
|
+
const av = a[col.key];
|
|
160
|
+
const bv = b[col.key];
|
|
161
|
+
if (av == null || bv == null)
|
|
162
|
+
return 0;
|
|
163
|
+
return String(av).localeCompare(String(bv), 'vi');
|
|
164
|
+
};
|
|
165
|
+
this.sortFnCache.set(col.key, fn);
|
|
166
|
+
return fn;
|
|
167
|
+
}
|
|
168
|
+
getCellValue(row, key) {
|
|
169
|
+
const value = row[key];
|
|
170
|
+
return value == null ? '' : String(value);
|
|
171
|
+
}
|
|
172
|
+
/** Tiêu đề cột luôn căn giữa theo quy tắc accessibility */
|
|
173
|
+
getHeaderAlign(_col) {
|
|
174
|
+
return 'center';
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Căn lề ô dữ liệu:
|
|
178
|
+
* - text → trái, number → phải, date → giữa
|
|
179
|
+
* - index / status / actions → giữa
|
|
180
|
+
*/
|
|
181
|
+
getCellAlign(col) {
|
|
182
|
+
if (col.align) {
|
|
183
|
+
return col.align;
|
|
184
|
+
}
|
|
185
|
+
if (col.renderAs === 'index' || col.renderAs === 'status' || col.renderAs === 'actions') {
|
|
186
|
+
return 'center';
|
|
187
|
+
}
|
|
188
|
+
if (col.dataType === 'number') {
|
|
189
|
+
return 'right';
|
|
190
|
+
}
|
|
191
|
+
if (col.dataType === 'date') {
|
|
192
|
+
return 'center';
|
|
193
|
+
}
|
|
194
|
+
return 'left';
|
|
195
|
+
}
|
|
196
|
+
getRowIndex(rowIndex) {
|
|
197
|
+
return (this.pageIndex - 1) * this.pageSize + rowIndex + 1;
|
|
198
|
+
}
|
|
199
|
+
trackRow(index, row) {
|
|
200
|
+
const key = row[this.rowKey];
|
|
201
|
+
return key != null ? String(key) : String(index);
|
|
202
|
+
}
|
|
203
|
+
isRowSelected(row) {
|
|
204
|
+
const key = String(row[this.rowKey] ?? '');
|
|
205
|
+
return this.selectedKeys.includes(key);
|
|
206
|
+
}
|
|
207
|
+
onAllChecked(checked) {
|
|
208
|
+
const rows = this.selectionRows;
|
|
209
|
+
const keys = rows.map((row) => String(row[this.rowKey] ?? ''));
|
|
210
|
+
if (checked) {
|
|
211
|
+
this.selectedKeys = [...new Set([...this.selectedKeys, ...keys])];
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
this.selectedKeys = this.selectedKeys.filter((key) => !keys.includes(key));
|
|
215
|
+
}
|
|
216
|
+
this.refreshSelectionState();
|
|
217
|
+
this.emitSelection();
|
|
218
|
+
}
|
|
219
|
+
onItemChecked(row, checked) {
|
|
220
|
+
const key = String(row[this.rowKey] ?? '');
|
|
221
|
+
this.selectedKeys = checked
|
|
222
|
+
? [...this.selectedKeys, key]
|
|
223
|
+
: this.selectedKeys.filter((k) => k !== key);
|
|
224
|
+
this.refreshSelectionState();
|
|
225
|
+
this.emitSelection();
|
|
226
|
+
}
|
|
227
|
+
onPageIndexChange(index) {
|
|
228
|
+
this.pageIndex = index;
|
|
229
|
+
this.refreshSelectionState();
|
|
230
|
+
this.pageIndexChange.emit(index);
|
|
231
|
+
}
|
|
232
|
+
onPageSizeChange(size) {
|
|
233
|
+
this.pageSize = size;
|
|
234
|
+
this.pageIndex = 1;
|
|
235
|
+
this.refreshSelectionState();
|
|
236
|
+
this.pageSizeChange.emit(size);
|
|
237
|
+
}
|
|
238
|
+
onRowActionClick(row, actionKey) {
|
|
239
|
+
this.rowAction.emit({ row, action: actionKey });
|
|
240
|
+
if (actionKey === 'edit') {
|
|
241
|
+
this.rowEdit.emit(row);
|
|
242
|
+
}
|
|
243
|
+
if (actionKey === 'more') {
|
|
244
|
+
this.rowMore.emit(row);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
onMobileCardClick(row, event) {
|
|
248
|
+
if (!this.clickable)
|
|
249
|
+
return;
|
|
250
|
+
const target = event.target;
|
|
251
|
+
if (target?.closest('button, a, .geo-row-actions, .geo-checkbox, .geo-table-card__footer')) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
this.rowClick.emit(row);
|
|
255
|
+
}
|
|
256
|
+
computeMinTableWidth() {
|
|
257
|
+
let total = this.selectable ? 48 : 0;
|
|
258
|
+
for (const col of this.visibleColumns) {
|
|
259
|
+
const width = col.width;
|
|
260
|
+
if (width?.endsWith('px')) {
|
|
261
|
+
total += Number.parseInt(width, 10);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
total += 160;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return total;
|
|
268
|
+
}
|
|
269
|
+
refreshSelectionState() {
|
|
270
|
+
const rows = this.selectionRows;
|
|
271
|
+
const selectedOnPage = rows.filter((row) => this.selectedKeys.includes(String(row[this.rowKey] ?? ''))).length;
|
|
272
|
+
this.allChecked = selectedOnPage > 0 && selectedOnPage === rows.length;
|
|
273
|
+
this.indeterminate = selectedOnPage > 0 && selectedOnPage < rows.length;
|
|
274
|
+
this.selectedKeysChange.emit([...this.selectedKeys]);
|
|
275
|
+
}
|
|
276
|
+
get selectionRows() {
|
|
277
|
+
return this.showPagination && this.frontPagination ? this.paginatedData : this.data;
|
|
278
|
+
}
|
|
279
|
+
emitSelection() {
|
|
280
|
+
const selected = this.data.filter((row) => this.selectedKeys.includes(String(row[this.rowKey] ?? '')));
|
|
281
|
+
this.selectionChange.emit(selected);
|
|
282
|
+
}
|
|
283
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
284
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoTableComponent, isStandalone: true, selector: "geo-table", inputs: { columns: "columns", data: "data", loading: "loading", bordered: "bordered", outerBordered: "outerBordered", size: "size", striped: "striped", clickable: "clickable", tableLayout: "tableLayout", showPagination: "showPagination", frontPagination: "frontPagination", pageIndex: "pageIndex", pageSize: "pageSize", total: "total", pageSizeOptions: "pageSizeOptions", showSizeChanger: "showSizeChanger", showQuickJumper: "showQuickJumper", hideOnSinglePage: "hideOnSinglePage", simplePagination: "simplePagination", paginationPosition: "paginationPosition", scroll: "scroll", scrollY: "scrollY", autoScroll: "autoScroll", tableTitle: "tableTitle", footer: "footer", emptyText: "emptyText", showTotalRange: "showTotalRange", selectable: "selectable", rowKey: "rowKey", selectedKeys: "selectedKeys", mobileTitleKey: "mobileTitleKey", mobileCardView: "mobileCardView" }, outputs: { rowClick: "rowClick", rowEdit: "rowEdit", rowMore: "rowMore", rowAction: "rowAction", pageIndexChange: "pageIndexChange", pageSizeChange: "pageSizeChange", queryParams: "queryParams", currentPageDataChange: "currentPageDataChange", selectedKeysChange: "selectedKeysChange", selectionChange: "selectionChange" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"geo-table\"\n [class.geo-table--striped]=\"striped\"\n [class.geo-table--mobile-cards]=\"mobileCardView\"\n>\n @if (shouldShowPagination && (paginationPosition === 'top' || paginationPosition === 'both')) {\n <geo-table-pagination\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [total]=\"computedTotal\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showSizeChanger]=\"showSizeChanger\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [showTotalRange]=\"showTotalRange\"\n (pageIndexChange)=\"onPageIndexChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n ></geo-table-pagination>\n }\n\n <div class=\"geo-table__desktop\">\n <nz-table\n #uiTable\n [nzData]=\"paginatedData\"\n [nzLoading]=\"loading\"\n [nzBordered]=\"bordered\"\n [nzOuterBordered]=\"outerBordered\"\n [nzSize]=\"size\"\n [nzTitle]=\"tableTitle ?? null\"\n [nzFooter]=\"footer ?? null\"\n [nzShowPagination]=\"false\"\n [nzFrontPagination]=\"false\"\n [nzScroll]=\"computedScroll\"\n [nzNoResult]=\"emptyText\"\n [nzTableLayout]=\"computedTableLayout\"\n [nzWidthConfig]=\"widthConfig\"\n (nzQueryParams)=\"queryParams.emit($event)\"\n (nzCurrentPageDataChange)=\"currentPageDataChange.emit($event)\"\n >\n <thead>\n <tr>\n @if (selectable) {\n <th\n class=\"geo-table__checkbox-cell\"\n nzWidth=\"48px\"\n [nzLeft]=\"hasFixedColumns\"\n >\n <geo-checkbox\n [checked]=\"allChecked\"\n [indeterminate]=\"indeterminate\"\n (checkedChange)=\"onAllChecked($event)\"\n ></geo-checkbox>\n </th>\n }\n @for (col of visibleColumns; track col.key) {\n <th\n [nzWidth]=\"col.width ?? null\"\n [nzAlign]=\"getHeaderAlign(col)\"\n [nzColumnKey]=\"col.key\"\n [nzShowSort]=\"col.sortable ?? false\"\n [nzSortOrder]=\"col.sortOrder ?? null\"\n [nzSortFn]=\"col.sortable ? getSortFn(col) : null\"\n [nzShowFilter]=\"hasFilters(col)\"\n [nzFilters]=\"col.filters ?? []\"\n [nzFilterMultiple]=\"col.filterMultiple ?? true\"\n [nzLeft]=\"col.fixed === 'left'\"\n [nzRight]=\"col.fixed === 'right'\"\n >{{ col.title }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of uiTable.data; track trackRow($index, row); let rowIndex = $index) {\n <tr\n class=\"geo-table__row\"\n [class.geo-table__row--selected]=\"isRowSelected(row)\"\n [class.geo-table__row--clickable]=\"clickable\"\n (click)=\"clickable && rowClick.emit(row)\"\n >\n @if (selectable) {\n <td\n class=\"geo-table__checkbox-cell\"\n [nzLeft]=\"hasFixedColumns\"\n (click)=\"$event.stopPropagation()\"\n >\n <geo-checkbox\n [checked]=\"isRowSelected(row)\"\n (checkedChange)=\"onItemChecked(row, $event)\"\n ></geo-checkbox>\n </td>\n }\n @for (col of visibleColumns; track col.key) {\n <td\n [nzAlign]=\"getCellAlign(col)\"\n [nzEllipsis]=\"col.wrap ? false : (col.ellipsis ?? false)\"\n [class.geo-table__cell--wrap]=\"col.wrap\"\n [nzLeft]=\"col.fixed === 'left'\"\n [nzRight]=\"col.fixed === 'right'\"\n [style.width]=\"col.width || null\"\n [style.minWidth]=\"col.width || null\"\n [style.maxWidth]=\"col.fixed ? (col.width || null) : null\"\n >\n @if (col.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else if (col.renderAs === 'status') {\n <geo-status-tag\n [status]=\"getCellValue(row, col.key)\"\n [label]=\"col.statusLabelKey ? getCellValue(row, col.statusLabelKey) || undefined : undefined\"\n ></geo-status-tag>\n } @else if (col.renderAs === 'actions') {\n <geo-row-actions\n [actions]=\"getRowActions(col, row)\"\n [primaryActionKey]=\"col.primaryActionKey ?? 'edit'\"\n (actionClick)=\"onRowActionClick(row, $event)\"\n ></geo-row-actions>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </nz-table>\n </div>\n\n @if (mobileCardView) {\n <div\n class=\"geo-table__mobile\"\n [class.geo-table__mobile--loading]=\"loading\"\n [attr.aria-busy]=\"loading ? 'true' : null\"\n >\n @if (selectable && paginatedData.length) {\n <div class=\"geo-table-card__select-all\">\n <geo-checkbox\n [checked]=\"allChecked\"\n [indeterminate]=\"indeterminate\"\n (checkedChange)=\"onAllChecked($event)\"\n ></geo-checkbox>\n <span>Ch\u1ECDn t\u1EA5t c\u1EA3 tr\u00EAn trang</span>\n </div>\n }\n\n @if (!paginatedData.length && !loading) {\n <div class=\"geo-table__mobile-empty\">{{ emptyText }}</div>\n }\n\n @for (row of paginatedData; track trackRow($index, row); let rowIndex = $index) {\n <article\n class=\"geo-table-card\"\n [class.geo-table-card--selected]=\"isRowSelected(row)\"\n [class.geo-table-card--clickable]=\"clickable\"\n (click)=\"onMobileCardClick(row, $event)\"\n >\n <header class=\"geo-table-card__header\">\n <div class=\"geo-table-card__title-wrap\">\n @if (selectable) {\n <geo-checkbox\n class=\"geo-table-card__checkbox\"\n [checked]=\"isRowSelected(row)\"\n (checkedChange)=\"onItemChecked(row, $event)\"\n (click)=\"$event.stopPropagation()\"\n ></geo-checkbox>\n }\n @if (mobileTitleColumn; as titleCol) {\n <h3 class=\"geo-table-card__title\">\n <span class=\"geo-table-card__title-label\">{{ titleCol.title }}</span>\n <span class=\"geo-table-card__title-sep\">:</span>\n <span class=\"geo-table-card__title-value\">\n @if (titleCol.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else {\n {{ getCellValue(row, titleCol.key) }}\n }\n </span>\n </h3>\n }\n </div>\n\n @if (mobileActionsColumn; as actionsCol) {\n <div class=\"geo-table-card__actions\" (click)=\"$event.stopPropagation()\">\n <geo-row-actions\n [actions]=\"getMobileHeaderActions(actionsCol, row)\"\n [primaryActionKey]=\"actionsCol.primaryActionKey ?? 'edit'\"\n (actionClick)=\"onRowActionClick(row, $event)\"\n ></geo-row-actions>\n </div>\n }\n </header>\n\n @if (mobileBodyColumns.length) {\n <div class=\"geo-table-card__body\">\n @for (col of mobileBodyColumns; track col.key) {\n <div class=\"geo-table-card__row\">\n <span class=\"geo-table-card__label\">{{ col.title }}</span>\n <span class=\"geo-table-card__sep\">:</span>\n <span class=\"geo-table-card__value\">\n @if (col.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else if (col.renderAs === 'status') {\n <geo-status-tag\n [status]=\"getCellValue(row, col.key)\"\n [label]=\"col.statusLabelKey ? getCellValue(row, col.statusLabelKey) || undefined : undefined\"\n ></geo-status-tag>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </span>\n </div>\n }\n </div>\n }\n\n @if (mobileActionsColumn; as actionsCol) {\n @if (getMobileFooterActions(actionsCol, row); as footerActions) {\n @if (footerActions.length) {\n <footer class=\"geo-table-card__footer\" (click)=\"$event.stopPropagation()\">\n @for (action of footerActions; track action.key) {\n <button\n type=\"button\"\n class=\"geo-table-card__footer-btn\"\n [class.geo-table-card__footer-btn--danger]=\"action.danger\"\n [disabled]=\"action.disabled\"\n (click)=\"onRowActionClick(row, action.key)\"\n >\n {{ action.label ?? action.title ?? action.key }}\n </button>\n }\n </footer>\n }\n }\n }\n </article>\n }\n </div>\n }\n\n @if (shouldShowPagination && (paginationPosition === 'bottom' || paginationPosition === 'both')) {\n <geo-table-pagination\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [total]=\"computedTotal\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showSizeChanger]=\"showSizeChanger\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [showTotalRange]=\"showTotalRange\"\n (pageIndexChange)=\"onPageIndexChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n ></geo-table-pagination>\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;max-width:100%;min-width:0}.geo-table{width:100%;max-width:100%;min-width:0;border-radius:var(--geo-radius);overflow:clip}.geo-table__row--clickable{cursor:pointer}.geo-table__row--selected>td{background:var(--geo-color-primary-background)}:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row)>td{background:var(--geo-color-neutral-100)}:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row)>td.ant-table-cell-fix-left,:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row)>td.ant-table-cell-fix-right{background:var(--geo-color-neutral-100)}:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row):hover>td,:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row):hover>td.ant-table-cell-fix-left,:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row):hover>td.ant-table-cell-fix-right{background:var(--geo-color-primary-background)}:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row--selected>td,:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row--selected>td.ant-table-cell-fix-left,:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row--selected>td.ant-table-cell-fix-right{background:var(--geo-color-primary-background)}.geo-table__checkbox-cell{text-align:center;vertical-align:middle;padding-left:12px!important;padding-right:12px!important}.geo-table__cell--wrap{white-space:normal;word-break:break-word;overflow-wrap:anywhere}:host ::ng-deep .geo-table .ant-table{background:var(--geo-color-neutral-white);border-radius:var(--geo-radius)}:host ::ng-deep .geo-table .ant-table-container{border-radius:var(--geo-radius)}:host ::ng-deep .geo-table .ant-table-thead>tr>th{background:var(--geo-color-neutral-100)!important;color:var(--geo-color-neutral-900)!important;font-weight:600;font-size:14px;line-height:20px;height:44px;padding:12px 10px!important;white-space:nowrap;text-align:center;border-bottom:1px solid var(--geo-color-primary-border)!important;box-sizing:border-box}:host ::ng-deep .geo-table .ant-table-body>table>thead{display:none!important}:host ::ng-deep .geo-table .ant-table-tbody>tr.ant-table-measure-now,:host ::ng-deep .geo-table .ant-table-tbody>tr[nz-table-measure-row]{height:0!important;font-size:0!important;line-height:0!important}:host ::ng-deep .geo-table .ant-table-tbody>tr.ant-table-measure-now>td,:host ::ng-deep .geo-table .ant-table-tbody>tr[nz-table-measure-row]>td{padding:0!important;border:0!important;height:0!important;min-height:0!important;line-height:0!important;font-size:0!important}:host ::ng-deep .geo-table .ant-table-tbody>tr>td{color:var(--geo-color-neutral-900);font-size:14px;line-height:normal;min-height:48px;padding:12px 10px!important;vertical-align:middle;border-bottom:1px solid var(--geo-color-primary-border)!important;box-sizing:border-box}:host ::ng-deep .geo-table .ant-table-tbody>tr:hover>td{background:var(--geo-color-primary-background)}:host ::ng-deep .geo-table .ant-table-bordered .ant-table-container{border-color:var(--geo-color-primary-border)}:host ::ng-deep .geo-table .geo-table__row-actions{display:inline-flex;align-items:center;justify-content:center;gap:10px}:host ::ng-deep .geo-table .geo-table__action-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-500);cursor:pointer;transition:color .15s ease,background-color .15s ease}:host ::ng-deep .geo-table .geo-table__action-icon:hover{color:var(--geo-color-primary-default);background:color-mix(in srgb,var(--geo-color-primary-default) 10%,transparent)}:host ::ng-deep .geo-table .ant-table-wrapper,:host ::ng-deep .geo-table .ant-spin-nested-loading,:host ::ng-deep .geo-table .ant-spin-container{width:100%;max-width:100%}:host ::ng-deep .geo-table .ant-table{width:100%}:host ::ng-deep .geo-table .ant-table-container{border-radius:var(--geo-radius);overflow:clip}:host ::ng-deep .geo-table .ant-table-body{overflow-x:auto!important;-webkit-overflow-scrolling:touch}:host ::ng-deep .geo-table .ant-table-content{overflow-x:auto;-webkit-overflow-scrolling:touch}:host ::ng-deep .geo-table .ant-table-header.nz-table-hide-scrollbar{overflow-x:hidden!important;overflow-y:scroll!important;scrollbar-gutter:stable}:host ::ng-deep .geo-table .ant-table-body{scrollbar-gutter:stable}:host ::ng-deep .geo-table .ant-table-cell-fix-left,:host ::ng-deep .geo-table .ant-table-cell-fix-right{background:var(--geo-color-neutral-white)}:host ::ng-deep .geo-table .ant-table-thead>tr>th.ant-table-cell-fix-left,:host ::ng-deep .geo-table .ant-table-thead>tr>th.ant-table-cell-fix-right{background:var(--geo-color-neutral-100)!important}:host ::ng-deep .geo-table .ant-table-tbody>tr:hover>td.ant-table-cell-fix-left,:host ::ng-deep .geo-table .ant-table-tbody>tr:hover>td.ant-table-cell-fix-right{background:var(--geo-color-primary-background)}:host ::ng-deep .geo-table .ant-table-thead>tr>th.ant-table-cell-fix-left,:host ::ng-deep .geo-table .ant-table-thead>tr>th.ant-table-cell-fix-right,:host ::ng-deep .geo-table .ant-table-tbody>tr>td.ant-table-cell-fix-left,:host ::ng-deep .geo-table .ant-table-tbody>tr>td.ant-table-cell-fix-right{box-sizing:border-box}:host ::ng-deep .geo-table .ant-table-ping-left:not(.ant-table-ping-right) .ant-table-cell-fix-left-last:after{box-shadow:inset 10px 0 8px -8px #0000001f}:host ::ng-deep .geo-table .ant-table-ping-right:not(.ant-table-ping-left) .ant-table-cell-fix-right-first:after{box-shadow:inset -10px 0 8px -8px #0000001f}.geo-table__mobile{display:none}@media (max-width: 767.98px){.geo-table--mobile-cards{overflow:visible}.geo-table--mobile-cards .geo-table__desktop{display:none}.geo-table--mobile-cards .geo-table__mobile{display:flex;flex-direction:column;gap:12px;padding:0}}.geo-table__mobile--loading{opacity:.55;pointer-events:none}.geo-table__mobile-empty{padding:32px 16px;text-align:center;color:var(--geo-color-neutral-500);font-size:14px;background:var(--geo-color-neutral-white);border:1px solid var(--geo-color-primary-border);border-radius:var(--geo-radius)}.geo-table-card__select-all{display:flex;align-items:center;gap:8px;padding:8px 4px;font-size:14px;color:var(--geo-color-neutral-700)}.geo-table-card{background:var(--geo-color-neutral-white);border:1px solid var(--geo-color-primary-border);border-radius:var(--geo-radius);box-shadow:0 1px 2px #0000000a;overflow:hidden}.geo-table-card--clickable{cursor:pointer}.geo-table-card--selected{border-color:var(--geo-color-primary-light);box-shadow:0 0 0 1px color-mix(in srgb,var(--geo-color-primary-default) 25%,transparent)}.geo-table-card__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px 14px 10px}.geo-table-card__title-wrap{display:flex;align-items:flex-start;gap:8px;min-width:0;flex:1}.geo-table-card__checkbox{flex-shrink:0;margin-top:2px}.geo-table-card__title{margin:0;min-width:0;font-size:15px;font-weight:700;line-height:1.4;color:var(--geo-color-neutral-900);word-break:break-word}.geo-table-card__title-label,.geo-table-card__title-sep,.geo-table-card__title-value{font-weight:700;color:var(--geo-color-neutral-900)}.geo-table-card__title-sep{margin-inline:4px}.geo-table-card__actions{flex-shrink:0}:host ::ng-deep .geo-table-card__actions .geo-row-actions{gap:8px}:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn{width:32px;height:32px;border-radius:var(--geo-radius);background:#1890ff1a;color:var(--geo-color-info-default)}:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn:hover:not(:disabled){background:#1890ff2e;color:var(--geo-color-info-dark)}:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn--danger{background:#ee003314;color:var(--geo-color-error-default)}:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn--danger:hover:not(:disabled){background:#ee003324;color:var(--geo-color-error-dark)}:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn :deep(.anticon),:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn .anticon{font-size:16px}.geo-table-card__body{display:flex;flex-direction:column;gap:10px;padding:4px 14px 14px}.geo-table-card__row{display:flex;align-items:flex-start;flex-wrap:wrap;column-gap:4px;row-gap:2px;font-size:14px;line-height:1.45}.geo-table-card__label,.geo-table-card__sep{color:var(--geo-color-neutral-700);font-weight:400;flex-shrink:0}.geo-table-card__value{color:var(--geo-color-neutral-900);font-weight:700;min-width:0;word-break:break-word}.geo-table-card__footer{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;padding:12px 14px;background:var(--geo-color-info-light);border-top:1px solid var(--geo-color-info-light)}.geo-table-card__footer-btn{appearance:none;border:0;background:transparent;padding:0 8px;min-height:24px;font-size:14px;font-weight:600;line-height:1.4;color:var(--geo-color-info-default);cursor:pointer}.geo-table-card__footer-btn:hover:not(:disabled){color:var(--geo-color-info-dark);text-decoration:underline}.geo-table-card__footer-btn:disabled{opacity:.45;cursor:not-allowed}.geo-table-card__footer-btn--danger{color:var(--geo-color-error-default)}.geo-table-card__footer-btn--danger:hover:not(:disabled){color:var(--geo-color-error-dark)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgZorroAntdModule }, { kind: "component", type: i1.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i1.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i1.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i1.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i1.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i1.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i1.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i1.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "directive", type: i1.NzCellAlignDirective, selector: "th[nzAlign],td[nzAlign]", inputs: ["nzAlign"] }, { kind: "directive", type: i1.NzCellEllipsisDirective, selector: "th[nzEllipsis],td[nzEllipsis]", inputs: ["nzEllipsis"] }, { kind: "component", type: GeoStatusTagComponent, selector: "geo-status-tag", inputs: ["status", "label", "showDot"] }, { kind: "component", type: GeoRowActionsComponent, selector: "geo-row-actions", inputs: ["actions", "primaryActionKey"], outputs: ["actionClick", "edit", "more"] }, { kind: "component", type: GeoCheckboxComponent, selector: "geo-checkbox", inputs: ["label", "checked", "disabled", "indeterminate"], outputs: ["checkedChange"] }, { kind: "component", type: GeoTablePaginationComponent, selector: "geo-table-pagination", inputs: ["pageIndex", "pageSize", "total", "pageSizeOptions", "showSizeChanger", "hideOnSinglePage", "showTotalRange", "sizeLabel"], outputs: ["pageIndexChange", "pageSizeChange"] }] });
|
|
285
|
+
}
|
|
286
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoTableComponent, decorators: [{
|
|
287
|
+
type: Component,
|
|
288
|
+
args: [{ selector: 'geo-table', standalone: true, imports: [
|
|
289
|
+
CommonModule,
|
|
290
|
+
NgZorroAntdModule,
|
|
291
|
+
GeoStatusTagComponent,
|
|
292
|
+
GeoRowActionsComponent,
|
|
293
|
+
GeoCheckboxComponent,
|
|
294
|
+
GeoTablePaginationComponent,
|
|
295
|
+
], template: "<div\n class=\"geo-table\"\n [class.geo-table--striped]=\"striped\"\n [class.geo-table--mobile-cards]=\"mobileCardView\"\n>\n @if (shouldShowPagination && (paginationPosition === 'top' || paginationPosition === 'both')) {\n <geo-table-pagination\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [total]=\"computedTotal\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showSizeChanger]=\"showSizeChanger\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [showTotalRange]=\"showTotalRange\"\n (pageIndexChange)=\"onPageIndexChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n ></geo-table-pagination>\n }\n\n <div class=\"geo-table__desktop\">\n <nz-table\n #uiTable\n [nzData]=\"paginatedData\"\n [nzLoading]=\"loading\"\n [nzBordered]=\"bordered\"\n [nzOuterBordered]=\"outerBordered\"\n [nzSize]=\"size\"\n [nzTitle]=\"tableTitle ?? null\"\n [nzFooter]=\"footer ?? null\"\n [nzShowPagination]=\"false\"\n [nzFrontPagination]=\"false\"\n [nzScroll]=\"computedScroll\"\n [nzNoResult]=\"emptyText\"\n [nzTableLayout]=\"computedTableLayout\"\n [nzWidthConfig]=\"widthConfig\"\n (nzQueryParams)=\"queryParams.emit($event)\"\n (nzCurrentPageDataChange)=\"currentPageDataChange.emit($event)\"\n >\n <thead>\n <tr>\n @if (selectable) {\n <th\n class=\"geo-table__checkbox-cell\"\n nzWidth=\"48px\"\n [nzLeft]=\"hasFixedColumns\"\n >\n <geo-checkbox\n [checked]=\"allChecked\"\n [indeterminate]=\"indeterminate\"\n (checkedChange)=\"onAllChecked($event)\"\n ></geo-checkbox>\n </th>\n }\n @for (col of visibleColumns; track col.key) {\n <th\n [nzWidth]=\"col.width ?? null\"\n [nzAlign]=\"getHeaderAlign(col)\"\n [nzColumnKey]=\"col.key\"\n [nzShowSort]=\"col.sortable ?? false\"\n [nzSortOrder]=\"col.sortOrder ?? null\"\n [nzSortFn]=\"col.sortable ? getSortFn(col) : null\"\n [nzShowFilter]=\"hasFilters(col)\"\n [nzFilters]=\"col.filters ?? []\"\n [nzFilterMultiple]=\"col.filterMultiple ?? true\"\n [nzLeft]=\"col.fixed === 'left'\"\n [nzRight]=\"col.fixed === 'right'\"\n >{{ col.title }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of uiTable.data; track trackRow($index, row); let rowIndex = $index) {\n <tr\n class=\"geo-table__row\"\n [class.geo-table__row--selected]=\"isRowSelected(row)\"\n [class.geo-table__row--clickable]=\"clickable\"\n (click)=\"clickable && rowClick.emit(row)\"\n >\n @if (selectable) {\n <td\n class=\"geo-table__checkbox-cell\"\n [nzLeft]=\"hasFixedColumns\"\n (click)=\"$event.stopPropagation()\"\n >\n <geo-checkbox\n [checked]=\"isRowSelected(row)\"\n (checkedChange)=\"onItemChecked(row, $event)\"\n ></geo-checkbox>\n </td>\n }\n @for (col of visibleColumns; track col.key) {\n <td\n [nzAlign]=\"getCellAlign(col)\"\n [nzEllipsis]=\"col.wrap ? false : (col.ellipsis ?? false)\"\n [class.geo-table__cell--wrap]=\"col.wrap\"\n [nzLeft]=\"col.fixed === 'left'\"\n [nzRight]=\"col.fixed === 'right'\"\n [style.width]=\"col.width || null\"\n [style.minWidth]=\"col.width || null\"\n [style.maxWidth]=\"col.fixed ? (col.width || null) : null\"\n >\n @if (col.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else if (col.renderAs === 'status') {\n <geo-status-tag\n [status]=\"getCellValue(row, col.key)\"\n [label]=\"col.statusLabelKey ? getCellValue(row, col.statusLabelKey) || undefined : undefined\"\n ></geo-status-tag>\n } @else if (col.renderAs === 'actions') {\n <geo-row-actions\n [actions]=\"getRowActions(col, row)\"\n [primaryActionKey]=\"col.primaryActionKey ?? 'edit'\"\n (actionClick)=\"onRowActionClick(row, $event)\"\n ></geo-row-actions>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </nz-table>\n </div>\n\n @if (mobileCardView) {\n <div\n class=\"geo-table__mobile\"\n [class.geo-table__mobile--loading]=\"loading\"\n [attr.aria-busy]=\"loading ? 'true' : null\"\n >\n @if (selectable && paginatedData.length) {\n <div class=\"geo-table-card__select-all\">\n <geo-checkbox\n [checked]=\"allChecked\"\n [indeterminate]=\"indeterminate\"\n (checkedChange)=\"onAllChecked($event)\"\n ></geo-checkbox>\n <span>Ch\u1ECDn t\u1EA5t c\u1EA3 tr\u00EAn trang</span>\n </div>\n }\n\n @if (!paginatedData.length && !loading) {\n <div class=\"geo-table__mobile-empty\">{{ emptyText }}</div>\n }\n\n @for (row of paginatedData; track trackRow($index, row); let rowIndex = $index) {\n <article\n class=\"geo-table-card\"\n [class.geo-table-card--selected]=\"isRowSelected(row)\"\n [class.geo-table-card--clickable]=\"clickable\"\n (click)=\"onMobileCardClick(row, $event)\"\n >\n <header class=\"geo-table-card__header\">\n <div class=\"geo-table-card__title-wrap\">\n @if (selectable) {\n <geo-checkbox\n class=\"geo-table-card__checkbox\"\n [checked]=\"isRowSelected(row)\"\n (checkedChange)=\"onItemChecked(row, $event)\"\n (click)=\"$event.stopPropagation()\"\n ></geo-checkbox>\n }\n @if (mobileTitleColumn; as titleCol) {\n <h3 class=\"geo-table-card__title\">\n <span class=\"geo-table-card__title-label\">{{ titleCol.title }}</span>\n <span class=\"geo-table-card__title-sep\">:</span>\n <span class=\"geo-table-card__title-value\">\n @if (titleCol.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else {\n {{ getCellValue(row, titleCol.key) }}\n }\n </span>\n </h3>\n }\n </div>\n\n @if (mobileActionsColumn; as actionsCol) {\n <div class=\"geo-table-card__actions\" (click)=\"$event.stopPropagation()\">\n <geo-row-actions\n [actions]=\"getMobileHeaderActions(actionsCol, row)\"\n [primaryActionKey]=\"actionsCol.primaryActionKey ?? 'edit'\"\n (actionClick)=\"onRowActionClick(row, $event)\"\n ></geo-row-actions>\n </div>\n }\n </header>\n\n @if (mobileBodyColumns.length) {\n <div class=\"geo-table-card__body\">\n @for (col of mobileBodyColumns; track col.key) {\n <div class=\"geo-table-card__row\">\n <span class=\"geo-table-card__label\">{{ col.title }}</span>\n <span class=\"geo-table-card__sep\">:</span>\n <span class=\"geo-table-card__value\">\n @if (col.renderAs === 'index') {\n {{ getRowIndex(rowIndex) }}\n } @else if (col.renderAs === 'status') {\n <geo-status-tag\n [status]=\"getCellValue(row, col.key)\"\n [label]=\"col.statusLabelKey ? getCellValue(row, col.statusLabelKey) || undefined : undefined\"\n ></geo-status-tag>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </span>\n </div>\n }\n </div>\n }\n\n @if (mobileActionsColumn; as actionsCol) {\n @if (getMobileFooterActions(actionsCol, row); as footerActions) {\n @if (footerActions.length) {\n <footer class=\"geo-table-card__footer\" (click)=\"$event.stopPropagation()\">\n @for (action of footerActions; track action.key) {\n <button\n type=\"button\"\n class=\"geo-table-card__footer-btn\"\n [class.geo-table-card__footer-btn--danger]=\"action.danger\"\n [disabled]=\"action.disabled\"\n (click)=\"onRowActionClick(row, action.key)\"\n >\n {{ action.label ?? action.title ?? action.key }}\n </button>\n }\n </footer>\n }\n }\n }\n </article>\n }\n </div>\n }\n\n @if (shouldShowPagination && (paginationPosition === 'bottom' || paginationPosition === 'both')) {\n <geo-table-pagination\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [total]=\"computedTotal\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showSizeChanger]=\"showSizeChanger\"\n [hideOnSinglePage]=\"hideOnSinglePage\"\n [showTotalRange]=\"showTotalRange\"\n (pageIndexChange)=\"onPageIndexChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n ></geo-table-pagination>\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;max-width:100%;min-width:0}.geo-table{width:100%;max-width:100%;min-width:0;border-radius:var(--geo-radius);overflow:clip}.geo-table__row--clickable{cursor:pointer}.geo-table__row--selected>td{background:var(--geo-color-primary-background)}:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row)>td{background:var(--geo-color-neutral-100)}:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row)>td.ant-table-cell-fix-left,:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row)>td.ant-table-cell-fix-right{background:var(--geo-color-neutral-100)}:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row):hover>td,:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row):hover>td.ant-table-cell-fix-left,:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row:nth-child(2n of.geo-table__row):hover>td.ant-table-cell-fix-right{background:var(--geo-color-primary-background)}:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row--selected>td,:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row--selected>td.ant-table-cell-fix-left,:host ::ng-deep .geo-table--striped .ant-table-tbody>tr.geo-table__row--selected>td.ant-table-cell-fix-right{background:var(--geo-color-primary-background)}.geo-table__checkbox-cell{text-align:center;vertical-align:middle;padding-left:12px!important;padding-right:12px!important}.geo-table__cell--wrap{white-space:normal;word-break:break-word;overflow-wrap:anywhere}:host ::ng-deep .geo-table .ant-table{background:var(--geo-color-neutral-white);border-radius:var(--geo-radius)}:host ::ng-deep .geo-table .ant-table-container{border-radius:var(--geo-radius)}:host ::ng-deep .geo-table .ant-table-thead>tr>th{background:var(--geo-color-neutral-100)!important;color:var(--geo-color-neutral-900)!important;font-weight:600;font-size:14px;line-height:20px;height:44px;padding:12px 10px!important;white-space:nowrap;text-align:center;border-bottom:1px solid var(--geo-color-primary-border)!important;box-sizing:border-box}:host ::ng-deep .geo-table .ant-table-body>table>thead{display:none!important}:host ::ng-deep .geo-table .ant-table-tbody>tr.ant-table-measure-now,:host ::ng-deep .geo-table .ant-table-tbody>tr[nz-table-measure-row]{height:0!important;font-size:0!important;line-height:0!important}:host ::ng-deep .geo-table .ant-table-tbody>tr.ant-table-measure-now>td,:host ::ng-deep .geo-table .ant-table-tbody>tr[nz-table-measure-row]>td{padding:0!important;border:0!important;height:0!important;min-height:0!important;line-height:0!important;font-size:0!important}:host ::ng-deep .geo-table .ant-table-tbody>tr>td{color:var(--geo-color-neutral-900);font-size:14px;line-height:normal;min-height:48px;padding:12px 10px!important;vertical-align:middle;border-bottom:1px solid var(--geo-color-primary-border)!important;box-sizing:border-box}:host ::ng-deep .geo-table .ant-table-tbody>tr:hover>td{background:var(--geo-color-primary-background)}:host ::ng-deep .geo-table .ant-table-bordered .ant-table-container{border-color:var(--geo-color-primary-border)}:host ::ng-deep .geo-table .geo-table__row-actions{display:inline-flex;align-items:center;justify-content:center;gap:10px}:host ::ng-deep .geo-table .geo-table__action-icon{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-500);cursor:pointer;transition:color .15s ease,background-color .15s ease}:host ::ng-deep .geo-table .geo-table__action-icon:hover{color:var(--geo-color-primary-default);background:color-mix(in srgb,var(--geo-color-primary-default) 10%,transparent)}:host ::ng-deep .geo-table .ant-table-wrapper,:host ::ng-deep .geo-table .ant-spin-nested-loading,:host ::ng-deep .geo-table .ant-spin-container{width:100%;max-width:100%}:host ::ng-deep .geo-table .ant-table{width:100%}:host ::ng-deep .geo-table .ant-table-container{border-radius:var(--geo-radius);overflow:clip}:host ::ng-deep .geo-table .ant-table-body{overflow-x:auto!important;-webkit-overflow-scrolling:touch}:host ::ng-deep .geo-table .ant-table-content{overflow-x:auto;-webkit-overflow-scrolling:touch}:host ::ng-deep .geo-table .ant-table-header.nz-table-hide-scrollbar{overflow-x:hidden!important;overflow-y:scroll!important;scrollbar-gutter:stable}:host ::ng-deep .geo-table .ant-table-body{scrollbar-gutter:stable}:host ::ng-deep .geo-table .ant-table-cell-fix-left,:host ::ng-deep .geo-table .ant-table-cell-fix-right{background:var(--geo-color-neutral-white)}:host ::ng-deep .geo-table .ant-table-thead>tr>th.ant-table-cell-fix-left,:host ::ng-deep .geo-table .ant-table-thead>tr>th.ant-table-cell-fix-right{background:var(--geo-color-neutral-100)!important}:host ::ng-deep .geo-table .ant-table-tbody>tr:hover>td.ant-table-cell-fix-left,:host ::ng-deep .geo-table .ant-table-tbody>tr:hover>td.ant-table-cell-fix-right{background:var(--geo-color-primary-background)}:host ::ng-deep .geo-table .ant-table-thead>tr>th.ant-table-cell-fix-left,:host ::ng-deep .geo-table .ant-table-thead>tr>th.ant-table-cell-fix-right,:host ::ng-deep .geo-table .ant-table-tbody>tr>td.ant-table-cell-fix-left,:host ::ng-deep .geo-table .ant-table-tbody>tr>td.ant-table-cell-fix-right{box-sizing:border-box}:host ::ng-deep .geo-table .ant-table-ping-left:not(.ant-table-ping-right) .ant-table-cell-fix-left-last:after{box-shadow:inset 10px 0 8px -8px #0000001f}:host ::ng-deep .geo-table .ant-table-ping-right:not(.ant-table-ping-left) .ant-table-cell-fix-right-first:after{box-shadow:inset -10px 0 8px -8px #0000001f}.geo-table__mobile{display:none}@media (max-width: 767.98px){.geo-table--mobile-cards{overflow:visible}.geo-table--mobile-cards .geo-table__desktop{display:none}.geo-table--mobile-cards .geo-table__mobile{display:flex;flex-direction:column;gap:12px;padding:0}}.geo-table__mobile--loading{opacity:.55;pointer-events:none}.geo-table__mobile-empty{padding:32px 16px;text-align:center;color:var(--geo-color-neutral-500);font-size:14px;background:var(--geo-color-neutral-white);border:1px solid var(--geo-color-primary-border);border-radius:var(--geo-radius)}.geo-table-card__select-all{display:flex;align-items:center;gap:8px;padding:8px 4px;font-size:14px;color:var(--geo-color-neutral-700)}.geo-table-card{background:var(--geo-color-neutral-white);border:1px solid var(--geo-color-primary-border);border-radius:var(--geo-radius);box-shadow:0 1px 2px #0000000a;overflow:hidden}.geo-table-card--clickable{cursor:pointer}.geo-table-card--selected{border-color:var(--geo-color-primary-light);box-shadow:0 0 0 1px color-mix(in srgb,var(--geo-color-primary-default) 25%,transparent)}.geo-table-card__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px 14px 10px}.geo-table-card__title-wrap{display:flex;align-items:flex-start;gap:8px;min-width:0;flex:1}.geo-table-card__checkbox{flex-shrink:0;margin-top:2px}.geo-table-card__title{margin:0;min-width:0;font-size:15px;font-weight:700;line-height:1.4;color:var(--geo-color-neutral-900);word-break:break-word}.geo-table-card__title-label,.geo-table-card__title-sep,.geo-table-card__title-value{font-weight:700;color:var(--geo-color-neutral-900)}.geo-table-card__title-sep{margin-inline:4px}.geo-table-card__actions{flex-shrink:0}:host ::ng-deep .geo-table-card__actions .geo-row-actions{gap:8px}:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn{width:32px;height:32px;border-radius:var(--geo-radius);background:#1890ff1a;color:var(--geo-color-info-default)}:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn:hover:not(:disabled){background:#1890ff2e;color:var(--geo-color-info-dark)}:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn--danger{background:#ee003314;color:var(--geo-color-error-default)}:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn--danger:hover:not(:disabled){background:#ee003324;color:var(--geo-color-error-dark)}:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn :deep(.anticon),:host ::ng-deep .geo-table-card__actions .geo-row-actions__btn .anticon{font-size:16px}.geo-table-card__body{display:flex;flex-direction:column;gap:10px;padding:4px 14px 14px}.geo-table-card__row{display:flex;align-items:flex-start;flex-wrap:wrap;column-gap:4px;row-gap:2px;font-size:14px;line-height:1.45}.geo-table-card__label,.geo-table-card__sep{color:var(--geo-color-neutral-700);font-weight:400;flex-shrink:0}.geo-table-card__value{color:var(--geo-color-neutral-900);font-weight:700;min-width:0;word-break:break-word}.geo-table-card__footer{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;padding:12px 14px;background:var(--geo-color-info-light);border-top:1px solid var(--geo-color-info-light)}.geo-table-card__footer-btn{appearance:none;border:0;background:transparent;padding:0 8px;min-height:24px;font-size:14px;font-weight:600;line-height:1.4;color:var(--geo-color-info-default);cursor:pointer}.geo-table-card__footer-btn:hover:not(:disabled){color:var(--geo-color-info-dark);text-decoration:underline}.geo-table-card__footer-btn:disabled{opacity:.45;cursor:not-allowed}.geo-table-card__footer-btn--danger{color:var(--geo-color-error-default)}.geo-table-card__footer-btn--danger:hover:not(:disabled){color:var(--geo-color-error-dark)}\n"] }]
|
|
296
|
+
}], propDecorators: { columns: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], data: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], loading: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], bordered: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], outerBordered: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], size: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], striped: [{
|
|
309
|
+
type: Input
|
|
310
|
+
}], clickable: [{
|
|
311
|
+
type: Input
|
|
312
|
+
}], tableLayout: [{
|
|
313
|
+
type: Input
|
|
314
|
+
}], showPagination: [{
|
|
315
|
+
type: Input
|
|
316
|
+
}], frontPagination: [{
|
|
317
|
+
type: Input
|
|
318
|
+
}], pageIndex: [{
|
|
319
|
+
type: Input
|
|
320
|
+
}], pageSize: [{
|
|
321
|
+
type: Input
|
|
322
|
+
}], total: [{
|
|
323
|
+
type: Input
|
|
324
|
+
}], pageSizeOptions: [{
|
|
325
|
+
type: Input
|
|
326
|
+
}], showSizeChanger: [{
|
|
327
|
+
type: Input
|
|
328
|
+
}], showQuickJumper: [{
|
|
329
|
+
type: Input
|
|
330
|
+
}], hideOnSinglePage: [{
|
|
331
|
+
type: Input
|
|
332
|
+
}], simplePagination: [{
|
|
333
|
+
type: Input
|
|
334
|
+
}], paginationPosition: [{
|
|
335
|
+
type: Input
|
|
336
|
+
}], scroll: [{
|
|
337
|
+
type: Input
|
|
338
|
+
}], scrollY: [{
|
|
339
|
+
type: Input
|
|
340
|
+
}], autoScroll: [{
|
|
341
|
+
type: Input
|
|
342
|
+
}], tableTitle: [{
|
|
343
|
+
type: Input
|
|
344
|
+
}], footer: [{
|
|
345
|
+
type: Input
|
|
346
|
+
}], emptyText: [{
|
|
347
|
+
type: Input
|
|
348
|
+
}], showTotalRange: [{
|
|
349
|
+
type: Input
|
|
350
|
+
}], selectable: [{
|
|
351
|
+
type: Input
|
|
352
|
+
}], rowKey: [{
|
|
353
|
+
type: Input
|
|
354
|
+
}], selectedKeys: [{
|
|
355
|
+
type: Input
|
|
356
|
+
}], mobileTitleKey: [{
|
|
357
|
+
type: Input
|
|
358
|
+
}], mobileCardView: [{
|
|
359
|
+
type: Input
|
|
360
|
+
}], rowClick: [{
|
|
361
|
+
type: Output
|
|
362
|
+
}], rowEdit: [{
|
|
363
|
+
type: Output
|
|
364
|
+
}], rowMore: [{
|
|
365
|
+
type: Output
|
|
366
|
+
}], rowAction: [{
|
|
367
|
+
type: Output
|
|
368
|
+
}], pageIndexChange: [{
|
|
369
|
+
type: Output
|
|
370
|
+
}], pageSizeChange: [{
|
|
371
|
+
type: Output
|
|
372
|
+
}], queryParams: [{
|
|
373
|
+
type: Output
|
|
374
|
+
}], currentPageDataChange: [{
|
|
375
|
+
type: Output
|
|
376
|
+
}], selectedKeysChange: [{
|
|
377
|
+
type: Output
|
|
378
|
+
}], selectionChange: [{
|
|
379
|
+
type: Output
|
|
380
|
+
}] } });
|
|
381
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby10YWJsZS9nZW8tdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXRhYmxlL2dlby10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixzQkFBc0IsR0FFdkIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNwRyxPQUFPLEVBQ0wsa0NBQWtDLEdBR25DLE1BQU0sbUJBQW1CLENBQUM7OztBQWdCM0IsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixPQUFPLEdBQXFCLEVBQUUsQ0FBQztJQUMvQixJQUFJLEdBQThCLEVBQUUsQ0FBQztJQUNyQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDaEIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixJQUFJLEdBQWdCLFFBQVEsQ0FBQztJQUM3QixP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QjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdab3Jyb0FudGRNb2R1bGUgfSBmcm9tICcuLi8uLi9uZy16b3Jyby9uZy16b3Jyby1hbnRkLm1vZHVsZSc7XG5pbXBvcnQgeyBOelRhYmxlUXVlcnlQYXJhbXMsIE56VGFibGVTaXplIH0gZnJvbSAnbmctem9ycm8tYW50ZC90YWJsZSc7XG5pbXBvcnQgeyBHZW9Sb3dBY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9nZW8tcm93LWFjdGlvbnMvZ2VvLXJvdy1hY3Rpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBwaWNrSW5saW5lUm93QWN0aW9ucyxcbiAgcGlja092ZXJmbG93Um93QWN0aW9ucyxcbiAgdHlwZSBHZW9Sb3dBY3Rpb24sXG59IGZyb20gJy4vZ2VvLXJvdy1hY3Rpb25zL2dlby1yb3ctYWN0aW9ucy50eXBlcyc7XG5pbXBvcnQgeyBHZW9TdGF0dXNUYWdDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tc3RhdHVzLXRhZy9nZW8tc3RhdHVzLXRhZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tY2hlY2tib3gvZ2VvLWNoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9UYWJsZVBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2dlby10YWJsZS1wYWdpbmF0aW9uL2dlby10YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBERUZBVUxUX1VJX1RBQkxFX1BBR0VfU0laRV9PUFRJT05TLFxuICBHZW9UYWJsZUNvbHVtbixcbiAgR2VvVGFibGVQYWdpbmF0aW9uUG9zaXRpb24sXG59IGZyb20gJy4vZ2VvLXRhYmxlLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2VvLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBOZ1pvcnJvQW50ZE1vZHVsZSxcbiAgICBHZW9TdGF0dXNUYWdDb21wb25lbnQsXG4gICAgR2VvUm93QWN0aW9uc0NvbXBvbmVudCxcbiAgICBHZW9DaGVja2JveENvbXBvbmVudCxcbiAgICBHZW9UYWJsZVBhZ2luYXRpb25Db21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2VvLXRhYmxlLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgR2VvVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjb2x1bW5zOiBHZW9UYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBib3JkZXJlZCA9IHRydWU7XG4gIEBJbnB1dCgpIG91dGVyQm9yZGVyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2l6ZTogTnpUYWJsZVNpemUgPSAnbWlkZGxlJztcbiAgQElucHV0KCkgc3RyaXBlZCA9IHRydWU7XG4gIEBJbnB1dCgpIGNsaWNrYWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHRhYmxlTGF5b3V0OiAnYXV0bycgfCAnZml4ZWQnID0gJ2F1dG8nO1xuXG4gIEBJbnB1dCgpIHNob3dQYWdpbmF0aW9uID0gdHJ1ZTtcbiAgQElucHV0KCkgZnJvbnRQYWdpbmF0aW9uID0gdHJ1ZTtcbiAgQElucHV0KCkgcGFnZUluZGV4ID0gMTtcbiAgQElucHV0KCkgcGFnZVNpemUgPSAxMDtcbiAgQElucHV0KCkgdG90YWw/OiBudW1iZXI7XG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBERUZBVUxUX1VJX1RBQkxFX1BBR0VfU0laRV9PUFRJT05TO1xuICBASW5wdXQoKSBzaG93U2l6ZUNoYW5nZXIgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1F1aWNrSnVtcGVyID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVPblNpbmdsZVBhZ2UgPSBmYWxzZTtcbiAgQElucHV0KCkgc2ltcGxlUGFnaW5hdGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwYWdpbmF0aW9uUG9zaXRpb246IEdlb1RhYmxlUGFnaW5hdGlvblBvc2l0aW9uID0gJ2JvdHRvbSc7XG5cbiAgQElucHV0KCkgc2Nyb2xsOiB7IHg/OiBzdHJpbmc7IHk/OiBzdHJpbmcgfSA9IHt9O1xuICBASW5wdXQoKSBzY3JvbGxZPzogc3RyaW5nO1xuICAvKipcbiAgICogVOG7sSBi4bqtdCBzY3JvbGwgbmdhbmcgdGhlbyB04buVbmcgd2lkdGggY+G7mXQuXG4gICAqIEtoaSBjw7MgY+G7mXQgYGZpeGVkYCwgc2Nyb2xsLnggbHXDtG4gxJHGsOG7o2MgdMOtbmggKGLhuq90IGJ14buZYyB24bubaSBuei10YWJsZSBmaXhlZCkuXG4gICAqL1xuICBASW5wdXQoKSBhdXRvU2Nyb2xsID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdGFibGVUaXRsZT86IHN0cmluZztcbiAgQElucHV0KCkgZm9vdGVyPzogc3RyaW5nO1xuICBASW5wdXQoKSBlbXB0eVRleHQgPSAnS2jDtG5nIGPDsyBk4buvIGxp4buHdSc7XG5cbiAgQElucHV0KCkgc2hvd1RvdGFsUmFuZ2UgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJvd0tleSA9ICdpZCc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogTW9iaWxlIGNhcmQ6IGtleSBj4buZdCBsw6BtIHRpw6p1IMSR4buBLlxuICAgKiDGr3UgdGnDqm4gaMahbiBgY29sdW1uLm1vYmlsZVRpdGxlYDsgbuG6v3Uga2jDtG5nIHNldCB0aMOsIGzhuqV5IGPhu5l0IGThu68gbGnhu4d1IMSR4bqndSB0acOqbi5cbiAgICovXG4gIEBJbnB1dCgpIG1vYmlsZVRpdGxlS2V5Pzogc3RyaW5nO1xuICAvKiogQuG6rXQvdOG6r3QgY2h1eeG7g24gY2FyZCB0csOqbiBtb2JpbGUgKG3hurdjIMSR4buLbmggYuG6rXQpLiAqL1xuICBASW5wdXQoKSBtb2JpbGVDYXJkVmlldyA9IHRydWU7XG5cbiAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTtcbiAgQE91dHB1dCgpIHJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpO1xuICBAT3V0cHV0KCkgcm93TW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCk7XG4gIEBPdXRwdXQoKSByb3dBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgYWN0aW9uOiBzdHJpbmcgfT4oKTtcbiAgQE91dHB1dCgpIHBhZ2VJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHF1ZXJ5UGFyYW1zID0gbmV3IEV2ZW50RW1pdHRlcjxOelRhYmxlUXVlcnlQYXJhbXM+KCk7XG4gIEBPdXRwdXQoKSBjdXJyZW50UGFnZURhdGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHJlYWRvbmx5IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZEtleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPigpO1xuXG4gIGFsbENoZWNrZWQgPSBmYWxzZTtcbiAgaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc29ydEZuQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgKGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBiOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gbnVtYmVyPigpO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICB0aGlzLnNvcnRGbkNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZpc2libGVDb2x1bW5zKCk6IEdlb1RhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC52aXNpYmxlICE9PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRUb3RhbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRvdGFsID8/IHRoaXMuZGF0YS5sZW5ndGg7XG4gIH1cblxuICBnZXQgcGFnaW5hdGVkRGF0YSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHtcbiAgICBpZiAoIXRoaXMuc2hvd1BhZ2luYXRpb24gfHwgIXRoaXMuZnJvbnRQYWdpbmF0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMucGFnZUluZGV4IC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xuICAgIHJldHVybiB0aGlzLmRhdGEuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZSk7XG4gIH1cblxuICBnZXQgc2hvdWxkU2hvd1BhZ2luYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1BhZ2luYXRpb247XG4gIH1cblxuICBnZXQgaGFzRml4ZWRDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLmZpeGVkID09PSAnbGVmdCcgfHwgY29sLmZpeGVkID09PSAncmlnaHQnKTtcbiAgfVxuXG4gIC8qKiBDw7MgY+G7mXQgZml4ZWQg4oaSIHRhYmxlLWxheW91dCBmaXhlZCDEkeG7gyBoZWFkZXIvYm9keSBjw7luZyB3aWR0aCBj4buZdC4gKi9cbiAgZ2V0IGNvbXB1dGVkVGFibGVMYXlvdXQoKTogJ2F1dG8nIHwgJ2ZpeGVkJyB7XG4gICAgcmV0dXJuIHRoaXMuaGFzRml4ZWRDb2x1bW5zID8gJ2ZpeGVkJyA6IHRoaXMudGFibGVMYXlvdXQ7XG4gIH1cblxuICAvKiogxJDhu5NuZyBi4buZIHdpZHRoIGPhu5l0IGtoaSBzY3JvbGxZIHTDoWNoIGhlYWRlci9ib2R5IHRow6BuaCAyIGLhuqNuZy4gKi9cbiAgZ2V0IHdpZHRoQ29uZmlnKCk6IEFycmF5PHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCB3aWR0aHMgPSB0aGlzLnZpc2libGVDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wud2lkdGggPz8gbnVsbCk7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZSA/IFsnNDhweCcsIC4uLndpZHRoc10gOiB3aWR0aHM7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRTY3JvbGwoKTogeyB4Pzogc3RyaW5nOyB5Pzogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHNjcm9sbCA9IHsgLi4udGhpcy5zY3JvbGwgfTtcblxuICAgIGlmICh0aGlzLnNjcm9sbFkpIHtcbiAgICAgIHNjcm9sbC55ID0gdGhpcy5zY3JvbGxZO1xuICAgIH1cblxuICAgIC8vIG56LXRhYmxlIGPhuqduIHNjcm9sbC54IMSR4buDIGZpeGVkIGxlZnQvcmlnaHQgaG/huqF0IMSR4buZbmcuXG4gICAgaWYgKCFzY3JvbGwueCAmJiAodGhpcy5hdXRvU2Nyb2xsIHx8IHRoaXMuaGFzRml4ZWRDb2x1bW5zKSkge1xuICAgICAgY29uc3QgbWluV2lkdGggPSB0aGlzLmNvbXB1dGVNaW5UYWJsZVdpZHRoKCk7XG4gICAgICBpZiAobWluV2lkdGggPiAwKSB7XG4gICAgICAgIHNjcm9sbC54ID0gYCR7bWluV2lkdGh9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzY3JvbGw7XG4gIH1cblxuICBnZXQgbW9iaWxlVGl0bGVDb2x1bW4oKTogR2VvVGFibGVDb2x1bW4gfCBudWxsIHtcbiAgICBpZiAodGhpcy5tb2JpbGVUaXRsZUtleSkge1xuICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wua2V5ID09PSB0aGlzLm1vYmlsZVRpdGxlS2V5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcmtlZCA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubW9iaWxlVGl0bGUpO1xuICAgIGlmIChtYXJrZWQpIHJldHVybiBtYXJrZWQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucy5maW5kKFxuICAgICAgICAoY29sKSA9PlxuICAgICAgICAgIGNvbC5yZW5kZXJBcyAhPT0gJ2luZGV4JyAmJlxuICAgICAgICAgIGNvbC5yZW5kZXJBcyAhPT0gJ2FjdGlvbnMnICYmXG4gICAgICAgICAgIWNvbC5tb2JpbGVIaWRkZW5cbiAgICAgICkgPz8gbnVsbFxuICAgICk7XG4gIH1cblxuICBnZXQgbW9iaWxlQm9keUNvbHVtbnMoKTogR2VvVGFibGVDb2x1bW5bXSB7XG4gICAgY29uc3QgdGl0bGVLZXkgPSB0aGlzLm1vYmlsZVRpdGxlQ29sdW1uPy5rZXk7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGNvbCkgPT5cbiAgICAgICAgY29sLnJlbmRlckFzICE9PSAnYWN0aW9ucycgJiZcbiAgICAgICAgY29sLnJlbmRlckFzICE9PSAnaW5kZXgnICYmXG4gICAgICAgICFjb2wubW9iaWxlSGlkZGVuICYmXG4gICAgICAgIGNvbC5rZXkgIT09IHRpdGxlS2V5XG4gICAgKTtcbiAgfVxuXG4gIGdldCBtb2JpbGVBY3Rpb25zQ29sdW1uKCk6IEdlb1RhYmxlQ29sdW1uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wucmVuZGVyQXMgPT09ICdhY3Rpb25zJykgPz8gbnVsbDtcbiAgfVxuXG4gIGdldFJvd0FjdGlvbnMoY29sOiBHZW9UYWJsZUNvbHVtbiwgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEdlb1Jvd0FjdGlvbltdIHtcbiAgICBpZiAoY29sLnJlc29sdmVBY3Rpb25zKSB7XG4gICAgICByZXR1cm4gY29sLnJlc29sdmVBY3Rpb25zKHJvdykgPz8gW107XG4gICAgfVxuICAgIHJldHVybiBjb2wuYWN0aW9ucyA/PyBbXTtcbiAgfVxuXG4gIGdldE1vYmlsZUhlYWRlckFjdGlvbnMoXG4gICAgY29sOiBHZW9UYWJsZUNvbHVtbixcbiAgICByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IEdlb1Jvd0FjdGlvbltdIHtcbiAgICByZXR1cm4gcGlja0lubGluZVJvd0FjdGlvbnMoXG4gICAgICB0aGlzLmdldFJvd0FjdGlvbnMoY29sLCByb3cpLFxuICAgICAgY29sLnByaW1hcnlBY3Rpb25LZXkgPz8gJ2VkaXQnXG4gICAgKTtcbiAgfVxuXG4gIGdldE1vYmlsZUZvb3RlckFjdGlvbnMoXG4gICAgY29sOiBHZW9UYWJsZUNvbHVtbixcbiAgICByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IEdlb1Jvd0FjdGlvbltdIHtcbiAgICByZXR1cm4gcGlja092ZXJmbG93Um93QWN0aW9ucyhcbiAgICAgIHRoaXMuZ2V0Um93QWN0aW9ucyhjb2wsIHJvdyksXG4gICAgICBjb2wucHJpbWFyeUFjdGlvbktleSA/PyAnZWRpdCdcbiAgICApO1xuICB9XG5cbiAgaGFzRmlsdGVycyhjb2w6IEdlb1RhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChjb2wuZmlsdGVycz8ubGVuZ3RoID8/IDApID4gMDtcbiAgfVxuXG4gIGdldFNvcnRGbihjb2w6IEdlb1RhYmxlQ29sdW1uKTogKGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBiOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gbnVtYmVyIHtcbiAgICBpZiAoY29sLnNvcnRGbikge1xuICAgICAgcmV0dXJuIGNvbC5zb3J0Rm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5zb3J0Rm5DYWNoZS5nZXQoY29sLmtleSk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG5cbiAgICBjb25zdCBmbiA9IChhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGNvbnN0IGF2ID0gYVtjb2wua2V5XTtcbiAgICAgIGNvbnN0IGJ2ID0gYltjb2wua2V5XTtcbiAgICAgIGlmIChhdiA9PSBudWxsIHx8IGJ2ID09IG51bGwpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIFN0cmluZyhhdikubG9jYWxlQ29tcGFyZShTdHJpbmcoYnYpLCAndmknKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zb3J0Rm5DYWNoZS5zZXQoY29sLmtleSwgZm4pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIGdldENlbGxWYWx1ZShyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSByb3dba2V5XTtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUacOqdSDEkeG7gSBj4buZdCBsdcO0biBjxINuIGdp4buvYSB0aGVvIHF1eSB04bqvYyBhY2Nlc3NpYmlsaXR5ICovXG4gIGdldEhlYWRlckFsaWduKF9jb2w6IEdlb1RhYmxlQ29sdW1uKTogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnIHtcbiAgICByZXR1cm4gJ2NlbnRlcic7XG4gIH1cblxuICAvKipcbiAgICogQ8SDbiBs4buBIMO0IGThu68gbGnhu4d1OlxuICAgKiAtIHRleHQg4oaSIHRyw6FpLCBudW1iZXIg4oaSIHBo4bqjaSwgZGF0ZSDihpIgZ2nhu69hXG4gICAqIC0gaW5kZXggLyBzdGF0dXMgLyBhY3Rpb25zIOKGkiBnaeG7r2FcbiAgICovXG4gIGdldENlbGxBbGlnbihjb2w6IEdlb1RhYmxlQ29sdW1uKTogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnIHtcbiAgICBpZiAoY29sLmFsaWduKSB7XG4gICAgICByZXR1cm4gY29sLmFsaWduO1xuICAgIH1cblxuICAgIGlmIChjb2wucmVuZGVyQXMgPT09ICdpbmRleCcgfHwgY29sLnJlbmRlckFzID09PSAnc3RhdHVzJyB8fCBjb2wucmVuZGVyQXMgPT09ICdhY3Rpb25zJykge1xuICAgICAgcmV0dXJuICdjZW50ZXInO1xuICAgIH1cblxuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9XG5cbiAgICBpZiAoY29sLmRhdGFUeXBlID09PSAnZGF0ZScpIHtcbiAgICAgIHJldHVybiAnY2VudGVyJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9XG5cbiAgZ2V0Um93SW5kZXgocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnBhZ2VJbmRleCAtIDEpICogdGhpcy5wYWdlU2l6ZSArIHJvd0luZGV4ICsgMTtcbiAgfVxuXG4gIHRyYWNrUm93KGluZGV4OiBudW1iZXIsIHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleSA9IHJvd1t0aGlzLnJvd0tleV07XG4gICAgcmV0dXJuIGtleSAhPSBudWxsID8gU3RyaW5nKGtleSkgOiBTdHJpbmcoaW5kZXgpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gU3RyaW5nKHJvd1t0aGlzLnJvd0tleV0gPz8gJycpO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkS2V5cy5pbmNsdWRlcyhrZXkpO1xuICB9XG5cbiAgb25BbGxDaGVja2VkKGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCByb3dzID0gdGhpcy5zZWxlY3Rpb25Sb3dzO1xuICAgIGNvbnN0IGtleXMgPSByb3dzLm1hcCgocm93KSA9PiBTdHJpbmcocm93W3RoaXMucm93S2V5XSA/PyAnJykpO1xuXG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gWy4uLm5ldyBTZXQoWy4uLnRoaXMuc2VsZWN0ZWRLZXlzLCAuLi5rZXlzXSldO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IHRoaXMuc2VsZWN0ZWRLZXlzLmZpbHRlcigoa2V5KSA9PiAha2V5cy5pbmNsdWRlcyhrZXkpKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbigpO1xuICB9XG5cbiAgb25JdGVtQ2hlY2tlZChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gU3RyaW5nKHJvd1t0aGlzLnJvd0tleV0gPz8gJycpO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gY2hlY2tlZFxuICAgICAgPyBbLi4udGhpcy5zZWxlY3RlZEtleXMsIGtleV1cbiAgICAgIDogdGhpcy5zZWxlY3RlZEtleXMuZmlsdGVyKChrKSA9PiBrICE9PSBrZXkpO1xuICAgIHRoaXMucmVmcmVzaFNlbGVjdGlvblN0YXRlKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBvblBhZ2VJbmRleENoYW5nZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnJlZnJlc2hTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIHRoaXMucGFnZUluZGV4Q2hhbmdlLmVtaXQoaW5kZXgpO1xuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplID0gc2l6ZTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XG4gICAgdGhpcy5yZWZyZXNoU2VsZWN0aW9uU3RhdGUoKTtcbiAgICB0aGlzLnBhZ2VTaXplQ2hhbmdlLmVtaXQoc2l6ZSk7XG4gIH1cblxuICBvblJvd0FjdGlvbkNsaWNrKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGFjdGlvbktleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb3dBY3Rpb24uZW1pdCh7IHJvdywgYWN0aW9uOiBhY3Rpb25LZXkgfSk7XG5cbiAgICBpZiAoYWN0aW9uS2V5ID09PSAnZWRpdCcpIHtcbiAgICAgIHRoaXMucm93RWRpdC5lbWl0KHJvdyk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbktleSA9PT0gJ21vcmUnKSB7XG4gICAgICB0aGlzLnJvd01vcmUuZW1pdChyb3cpO1xuICAgIH1cbiAgfVxuXG4gIG9uTW9iaWxlQ2FyZENsaWNrKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jbGlja2FibGUpIHJldHVybjtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICh0YXJnZXQ/LmNsb3Nlc3QoJ2J1dHRvbiwgYSwgLmdlby1yb3ctYWN0aW9ucywgLmdlby1jaGVja2JveCwgLmdlby10YWJsZS1jYXJkX19mb290ZXInKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJvd0NsaWNrLmVtaXQocm93KTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU1pblRhYmxlV2lkdGgoKTogbnVtYmVyIHtcbiAgICBsZXQgdG90YWwgPSB0aGlzLnNlbGVjdGFibGUgPyA0OCA6IDA7XG5cbiAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnZpc2libGVDb2x1bW5zKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IGNvbC53aWR0aDtcbiAgICAgIGlmICh3aWR0aD8uZW5kc1dpdGgoJ3B4JykpIHtcbiAgICAgICAgdG90YWwgKz0gTnVtYmVyLnBhcnNlSW50KHdpZHRoLCAxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3RhbCArPSAxNjA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvdGFsO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoU2VsZWN0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuc2VsZWN0aW9uUm93cztcbiAgICBjb25zdCBzZWxlY3RlZE9uUGFnZSA9IHJvd3MuZmlsdGVyKChyb3cpID0+XG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cy5pbmNsdWRlcyhTdHJpbmcocm93W3RoaXMucm93S2V5XSA/PyAnJykpXG4gICAgKS5sZW5ndGg7XG5cbiAgICB0aGlzLmFsbENoZWNrZWQgPSBzZWxlY3RlZE9uUGFnZSA+IDAgJiYgc2VsZWN0ZWRPblBhZ2UgPT09IHJvd3MubGVuZ3RoO1xuICAgIHRoaXMuaW5kZXRlcm1pbmF0ZSA9IHNlbGVjdGVkT25QYWdlID4gMCAmJiBzZWxlY3RlZE9uUGFnZSA8IHJvd3MubGVuZ3RoO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzQ2hhbmdlLmVtaXQoWy4uLnRoaXMuc2VsZWN0ZWRLZXlzXSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBzZWxlY3Rpb25Sb3dzKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10ge1xuICAgIHJldHVybiB0aGlzLnNob3dQYWdpbmF0aW9uICYmIHRoaXMuZnJvbnRQYWdpbmF0aW9uID8gdGhpcy5wYWdpbmF0ZWREYXRhIDogdGhpcy5kYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5kYXRhLmZpbHRlcigocm93KSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMuaW5jbHVkZXMoU3RyaW5nKHJvd1t0aGlzLnJvd0tleV0gPz8gJycpKVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChzZWxlY3RlZCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJnZW8tdGFibGVcIlxuICBbY2xhc3MuZ2VvLXRhYmxlLS1zdHJpcGVkXT1cInN0cmlwZWRcIlxuICBbY2xhc3MuZ2VvLXRhYmxlLS1tb2JpbGUtY2FyZHNdPVwibW9iaWxlQ2FyZFZpZXdcIlxuPlxuICBAaWYgKHNob3VsZFNob3dQYWdpbmF0aW9uICYmIChwYWdpbmF0aW9uUG9zaXRpb24gPT09ICd0b3AnIHx8IHBhZ2luYXRpb25Qb3NpdGlvbiA9PT0gJ2JvdGgnKSkge1xuICAgIDxnZW8tdGFibGUtcGFnaW5hdGlvblxuICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgIFt0b3RhbF09XCJjb21wdXRlZFRvdGFsXCJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgIFtzaG93U2l6ZUNoYW5nZXJdPVwic2hvd1NpemVDaGFuZ2VyXCJcbiAgICAgIFtoaWRlT25TaW5nbGVQYWdlXT1cImhpZGVPblNpbmdsZVBhZ2VcIlxuICAgICAgW3Nob3dUb3RhbFJhbmdlXT1cInNob3dUb3RhbFJhbmdlXCJcbiAgICAgIChwYWdlSW5kZXhDaGFuZ2UpPVwib25QYWdlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9nZW8tdGFibGUtcGFnaW5hdGlvbj5cbiAgfVxuXG4gIDxkaXYgY2xhc3M9XCJnZW8tdGFibGVfX2Rlc2t0b3BcIj5cbiAgICA8bnotdGFibGVcbiAgICAgICN1aVRhYmxlXG4gICAgICBbbnpEYXRhXT1cInBhZ2luYXRlZERhdGFcIlxuICAgICAgW256TG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICAgIFtuekJvcmRlcmVkXT1cImJvcmRlcmVkXCJcbiAgICAgIFtuek91dGVyQm9yZGVyZWRdPVwib3V0ZXJCb3JkZXJlZFwiXG4gICAgICBbbnpTaXplXT1cInNpemVcIlxuICAgICAgW256VGl0bGVdPVwidGFibGVUaXRsZSA/PyBudWxsXCJcbiAgICAgIFtuekZvb3Rlcl09XCJmb290ZXIgPz8gbnVsbFwiXG4gICAgICBbbnpTaG93UGFnaW5hdGlvbl09XCJmYWxzZVwiXG4gICAgICBbbnpGcm9udFBhZ2luYXRpb25dPVwiZmFsc2VcIlxuICAgICAgW256U2Nyb2xsXT1cImNvbXB1dGVkU2Nyb2xsXCJcbiAgICAgIFtuek5vUmVzdWx0XT1cImVtcHR5VGV4dFwiXG4gICAgICBbbnpUYWJsZUxheW91dF09XCJjb21wdXRlZFRhYmxlTGF5b3V0XCJcbiAgICAgIFtueldpZHRoQ29uZmlnXT1cIndpZHRoQ29uZmlnXCJcbiAgICAgIChuelF1ZXJ5UGFyYW1zKT1cInF1ZXJ5UGFyYW1zLmVtaXQoJGV2ZW50KVwiXG4gICAgICAobnpDdXJyZW50UGFnZURhdGFDaGFuZ2UpPVwiY3VycmVudFBhZ2VEYXRhQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgQGlmIChzZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgY2xhc3M9XCJnZW8tdGFibGVfX2NoZWNrYm94LWNlbGxcIlxuICAgICAgICAgICAgICBueldpZHRoPVwiNDhweFwiXG4gICAgICAgICAgICAgIFtuekxlZnRdPVwiaGFzRml4ZWRDb2x1bW5zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGdlby1jaGVja2JveFxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbENoZWNrZWRcIlxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uQWxsQ2hlY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvZ2VvLWNoZWNrYm94PlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zOyB0cmFjayBjb2wua2V5KSB7XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgW256V2lkdGhdPVwiY29sLndpZHRoID8/IG51bGxcIlxuICAgICAgICAgICAgICBbbnpBbGlnbl09XCJnZXRIZWFkZXJBbGlnbihjb2wpXCJcbiAgICAgICAgICAgICAgW256Q29sdW1uS2V5XT1cImNvbC5rZXlcIlxuICAgICAgICAgICAgICBbbnpTaG93U29ydF09XCJjb2wuc29ydGFibGUgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICBbbnpTb3J0T3JkZXJdPVwiY29sLnNvcnRPcmRlciA/PyBudWxsXCJcbiAgICAgICAgICAgICAgW256U29ydEZuXT1cImNvbC5zb3J0YWJsZSA/IGdldFNvcnRGbihjb2wpIDogbnVsbFwiXG4gICAgICAgICAgICAgIFtuelNob3dGaWx0ZXJdPVwiaGFzRmlsdGVycyhjb2wpXCJcbiAgICAgICAgICAgICAgW256RmlsdGVyc109XCJjb2wuZmlsdGVycyA/PyBbXVwiXG4gICAgICAgICAgICAgIFtuekZpbHRlck11bHRpcGxlXT1cImNvbC5maWx0ZXJNdWx0aXBsZSA/PyB0cnVlXCJcbiAgICAgICAgICAgICAgW256TGVmdF09XCJjb2wuZml4ZWQgPT09ICdsZWZ0J1wiXG4gICAgICAgICAgICAgIFtuelJpZ2h0XT1cImNvbC5maXhlZCA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICA+e3sgY29sLnRpdGxlIH19PC90aD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICBAZm9yIChyb3cgb2YgdWlUYWJsZS5kYXRhOyB0cmFjayB0cmFja1JvdygkaW5kZXgsIHJvdyk7IGxldCByb3dJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgIDx0clxuICAgICAgICAgICAgY2xhc3M9XCJnZW8tdGFibGVfX3Jvd1wiXG4gICAgICAgICAgICBbY2xhc3MuZ2VvLXRhYmxlX19yb3ctLXNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICBbY2xhc3MuZ2VvLXRhYmxlX19yb3ctLWNsaWNrYWJsZV09XCJjbGlja2FibGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrYWJsZSAmJiByb3dDbGljay5lbWl0KHJvdylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImdlby10YWJsZV9fY2hlY2tib3gtY2VsbFwiXG4gICAgICAgICAgICAgICAgW256TGVmdF09XCJoYXNGaXhlZENvbHVtbnNcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGdlby1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uSXRlbUNoZWNrZWQocm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9nZW8tY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZm9yIChjb2wgb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbC5rZXkpIHtcbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgW256QWxpZ25dPVwiZ2V0Q2VsbEFsaWduKGNvbClcIlxuICAgICAgICAgICAgICAgIFtuekVsbGlwc2lzXT1cImNvbC53cmFwID8gZmFsc2UgOiAoY29sLmVsbGlwc2lzID8/IGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmdlby10YWJsZV9fY2VsbC0td3JhcF09XCJjb2wud3JhcFwiXG4gICAgICAgICAgICAgICAgW256TGVmdF09XCJjb2wuZml4ZWQgPT09ICdsZWZ0J1wiXG4gICAgICAgICAgICAgICAgW256UmlnaHRdPVwiY29sLmZpeGVkID09PSAncmlnaHQnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW5XaWR0aF09XCJjb2wud2lkdGggfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heFdpZHRoXT1cImNvbC5maXhlZCA/IChjb2wud2lkdGggfHwgbnVsbCkgOiBudWxsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAoY29sLnJlbmRlckFzID09PSAnaW5kZXgnKSB7XG4gICAgICAgICAgICAgICAgICB7eyBnZXRSb3dJbmRleChyb3dJbmRleCkgfX1cbiAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChjb2wucmVuZGVyQXMgPT09ICdzdGF0dXMnKSB7XG4gICAgICAgICAgICAgICAgICA8Z2VvLXN0YXR1cy10YWdcbiAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJnZXRDZWxsVmFsdWUocm93LCBjb2wua2V5KVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb2wuc3RhdHVzTGFiZWxLZXkgPyBnZXRDZWxsVmFsdWUocm93LCBjb2wuc3RhdHVzTGFiZWxLZXkpIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICA+PC9nZW8tc3RhdHVzLXRhZz5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChjb2wucmVuZGVyQXMgPT09ICdhY3Rpb25zJykge1xuICAgICAgICAgICAgICAgICAgPGdlby1yb3ctYWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uc109XCJnZXRSb3dBY3Rpb25zKGNvbCwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFtwcmltYXJ5QWN0aW9uS2V5XT1cImNvbC5wcmltYXJ5QWN0aW9uS2V5ID8/ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvblJvd0FjdGlvbkNsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+PC9nZW8tcm93LWFjdGlvbnM+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICB7eyBnZXRDZWxsVmFsdWUocm93LCBjb2wua2V5KSB9fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgICA8L3Rib2R5PlxuICAgIDwvbnotdGFibGU+XG4gIDwvZGl2PlxuXG4gIEBpZiAobW9iaWxlQ2FyZFZpZXcpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImdlby10YWJsZV9fbW9iaWxlXCJcbiAgICAgIFtjbGFzcy5nZW8tdGFibGVfX21vYmlsZS0tbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJsb2FkaW5nID8gJ3RydWUnIDogbnVsbFwiXG4gICAgPlxuICAgICAgQGlmIChzZWxlY3RhYmxlICYmIHBhZ2luYXRlZERhdGEubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fc2VsZWN0LWFsbFwiPlxuICAgICAgICAgIDxnZW8tY2hlY2tib3hcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbENoZWNrZWRcIlxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJvbkFsbENoZWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvZ2VvLWNoZWNrYm94PlxuICAgICAgICAgIDxzcGFuPkNo4buNbiB04bqldCBj4bqjIHRyw6puIHRyYW5nPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmICghcGFnaW5hdGVkRGF0YS5sZW5ndGggJiYgIWxvYWRpbmcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImdlby10YWJsZV9fbW9iaWxlLWVtcHR5XCI+e3sgZW1wdHlUZXh0IH19PC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBmb3IgKHJvdyBvZiBwYWdpbmF0ZWREYXRhOyB0cmFjayB0cmFja1JvdygkaW5kZXgsIHJvdyk7IGxldCByb3dJbmRleCA9ICRpbmRleCkge1xuICAgICAgICA8YXJ0aWNsZVxuICAgICAgICAgIGNsYXNzPVwiZ2VvLXRhYmxlLWNhcmRcIlxuICAgICAgICAgIFtjbGFzcy5nZW8tdGFibGUtY2FyZC0tc2VsZWN0ZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICBbY2xhc3MuZ2VvLXRhYmxlLWNhcmQtLWNsaWNrYWJsZV09XCJjbGlja2FibGVcIlxuICAgICAgICAgIChjbGljayk9XCJvbk1vYmlsZUNhcmRDbGljayhyb3csICRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGhlYWRlciBjbGFzcz1cImdlby10YWJsZS1jYXJkX19oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fdGl0bGUtd3JhcFwiPlxuICAgICAgICAgICAgICBAaWYgKHNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgICAgICA8Z2VvLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImdlby10YWJsZS1jYXJkX19jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwib25JdGVtQ2hlY2tlZChyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgPjwvZ2VvLWNoZWNrYm94PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAobW9iaWxlVGl0bGVDb2x1bW47IGFzIHRpdGxlQ29sKSB7XG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiZ2VvLXRhYmxlLWNhcmRfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdlby10YWJsZS1jYXJkX190aXRsZS1sYWJlbFwiPnt7IHRpdGxlQ29sLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fdGl0bGUtc2VwXCI+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLXRhYmxlLWNhcmRfX3RpdGxlLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAodGl0bGVDb2wucmVuZGVyQXMgPT09ICdpbmRleCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb3dJbmRleChyb3dJbmRleCkgfX1cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0Q2VsbFZhbHVlKHJvdywgdGl0bGVDb2wua2V5KSB9fVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQWN0aW9uc0NvbHVtbjsgYXMgYWN0aW9uc0NvbCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2VvLXRhYmxlLWNhcmRfX2FjdGlvbnNcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPGdlby1yb3ctYWN0aW9uc1xuICAgICAgICAgICAgICAgICAgW2FjdGlvbnNdPVwiZ2V0TW9iaWxlSGVhZGVyQWN0aW9ucyhhY3Rpb25zQ29sLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIFtwcmltYXJ5QWN0aW9uS2V5XT1cImFjdGlvbnNDb2wucHJpbWFyeUFjdGlvbktleSA/PyAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uUm93QWN0aW9uQ2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+PC9nZW8tcm93LWFjdGlvbnM+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgICAgQGlmIChtb2JpbGVCb2R5Q29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fYm9keVwiPlxuICAgICAgICAgICAgICBAZm9yIChjb2wgb2YgbW9iaWxlQm9keUNvbHVtbnM7IHRyYWNrIGNvbC5rZXkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2VvLXRhYmxlLWNhcmRfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fbGFiZWxcIj57eyBjb2wudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdlby10YWJsZS1jYXJkX19zZXBcIj46PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wucmVuZGVyQXMgPT09ICdpbmRleCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb3dJbmRleChyb3dJbmRleCkgfX1cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoY29sLnJlbmRlckFzID09PSAnc3RhdHVzJykge1xuICAgICAgICAgICAgICAgICAgICAgIDxnZW8tc3RhdHVzLXRhZ1xuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJnZXRDZWxsVmFsdWUocm93LCBjb2wua2V5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sLnN0YXR1c0xhYmVsS2V5ID8gZ2V0Q2VsbFZhbHVlKHJvdywgY29sLnN0YXR1c0xhYmVsS2V5KSB8fCB1bmRlZmluZWQgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2dlby1zdGF0dXMtdGFnPlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRDZWxsVmFsdWUocm93LCBjb2wua2V5KSB9fVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAobW9iaWxlQWN0aW9uc0NvbHVtbjsgYXMgYWN0aW9uc0NvbCkge1xuICAgICAgICAgICAgQGlmIChnZXRNb2JpbGVGb290ZXJBY3Rpb25zKGFjdGlvbnNDb2wsIHJvdyk7IGFzIGZvb3RlckFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgQGlmIChmb290ZXJBY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIDxmb290ZXIgY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fZm9vdGVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGZvb3RlckFjdGlvbnM7IHRyYWNrIGFjdGlvbi5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ2VvLXRhYmxlLWNhcmRfX2Zvb3Rlci1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5nZW8tdGFibGUtY2FyZF9fZm9vdGVyLWJ0bi0tZGFuZ2VyXT1cImFjdGlvbi5kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0FjdGlvbkNsaWNrKHJvdywgYWN0aW9uLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLmxhYmVsID8/IGFjdGlvbi50aXRsZSA/PyBhY3Rpb24ua2V5IH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZm9vdGVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2FydGljbGU+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cblxuICBAaWYgKHNob3VsZFNob3dQYWdpbmF0aW9uICYmIChwYWdpbmF0aW9uUG9zaXRpb24gPT09ICdib3R0b20nIHx8IHBhZ2luYXRpb25Qb3NpdGlvbiA9PT0gJ2JvdGgnKSkge1xuICAgIDxnZW8tdGFibGUtcGFnaW5hdGlvblxuICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgIFt0b3RhbF09XCJjb21wdXRlZFRvdGFsXCJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgIFtzaG93U2l6ZUNoYW5nZXJdPVwic2hvd1NpemVDaGFuZ2VyXCJcbiAgICAgIFtoaWRlT25TaW5nbGVQYWdlXT1cImhpZGVPblNpbmdsZVBhZ2VcIlxuICAgICAgW3Nob3dUb3RhbFJhbmdlXT1cInNob3dUb3RhbFJhbmdlXCJcbiAgICAgIChwYWdlSW5kZXhDaGFuZ2UpPVwib25QYWdlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9nZW8tdGFibGUtcGFnaW5hdGlvbj5cbiAgfVxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Breakpoint chuyển bảng → danh sách card (khớp layout mobile). */
|
|
2
|
+
export const UI_TABLE_MOBILE_BREAKPOINT = 767.98;
|
|
3
|
+
export const DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLXRhYmxlLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXRhYmxlL2dlby10YWJsZS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnREEsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUlqRCxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBHZW9Sb3dBY3Rpb24gfSBmcm9tICcuL2dlby1yb3ctYWN0aW9ucy9nZW8tcm93LWFjdGlvbnMudHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlb1RhYmxlRmlsdGVyIHtcbiAgdGV4dDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBHZW9UYWJsZUNlbGxSZW5kZXIgPSAndGV4dCcgfCAnaW5kZXgnIHwgJ3N0YXR1cycgfCAnYWN0aW9ucyc7XG5cbi8qKiBRdXkgdOG6r2MgY8SDbiBs4buBIGThu68gbGnhu4d1OiB0ZXh0IOKGkiB0csOhaSwgbnVtYmVyIOKGkiBwaOG6o2ksIGRhdGUg4oaSIGdp4buvYSAqL1xuZXhwb3J0IHR5cGUgR2VvVGFibGVDb2x1bW5EYXRhVHlwZSA9ICd0ZXh0JyB8ICdudW1iZXInIHwgJ2RhdGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlb1RhYmxlQ29sdW1uIHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHdpZHRoPzogc3RyaW5nO1xuICAvKiogQ8SDbiBs4buBIMO0IGThu68gbGnhu4d1IOKAlCBu4bq/dSBraMO0bmcgc2V0IHPhur0gc3V5IHJhIHThu6sgYGRhdGFUeXBlYCAvIGByZW5kZXJBc2AgKi9cbiAgYWxpZ24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG4gIC8qKiBLaeG7g3UgZOG7ryBsaeG7h3UgxJHhu4Mgw6FwIGThu6VuZyBxdXkgdOG6r2MgY8SDbiBs4buBIG3hurdjIMSR4buLbmggKi9cbiAgZGF0YVR5cGU/OiBHZW9UYWJsZUNvbHVtbkRhdGFUeXBlO1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIHNvcnRPcmRlcj86ICdhc2NlbmQnIHwgJ2Rlc2NlbmQnIHwgbnVsbDtcbiAgc29ydEZuPzogKGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBiOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gbnVtYmVyO1xuICBmaWx0ZXJzPzogR2VvVGFibGVGaWx0ZXJbXTtcbiAgZmlsdGVyTXVsdGlwbGU/OiBib29sZWFuO1xuICBmaXhlZD86ICdsZWZ0JyB8ICdyaWdodCc7XG4gIGVsbGlwc2lzPzogYm9vbGVhbjtcbiAgd3JhcD86IGJvb2xlYW47XG4gIHJlbmRlckFzPzogR2VvVGFibGVDZWxsUmVuZGVyO1xuICBzdGF0dXNMYWJlbEtleT86IHN0cmluZztcbiAgYWN0aW9ucz86IEdlb1Jvd0FjdGlvbltdO1xuICAvKipcbiAgICogUmVzb2x2ZSBhY3Rpb25zIHRoZW8gdOG7q25nIGTDsm5nICh2ZC4g4bqpbi9oaeG7h24gdGhlbyB0cuG6oW5nIHRow6FpKS5cbiAgICogTuG6v3UgY8OzIHRow6wgxrB1IHRpw6puIGjGoW4gYGFjdGlvbnNgLlxuICAgKi9cbiAgcmVzb2x2ZUFjdGlvbnM/OiAocm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gR2VvUm93QWN0aW9uW107XG4gIC8qKiBBY3Rpb24ga2V5IMawdSB0acOqbiBoaeG7g24gdGjhu4sga2hpIGPDsyA+IDIgdGhhbyB0w6FjICht4bq3YyDEkeG7i25oOiBlZGl0KSAqL1xuICBwcmltYXJ5QWN0aW9uS2V5Pzogc3RyaW5nO1xuICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1vYmlsZSBjYXJkOiBkw7luZyBj4buZdCBuw6B5IGzDoG0gdGnDqnUgxJHhu4EgY2FyZC5cbiAgICogTuG6v3Uga2jDtG5nIGPhu5l0IG7DoG8gc2V0LCBs4bqleSBj4buZdCBk4buvIGxp4buHdSDEkeG6p3UgdGnDqm4gKGtow7RuZyBwaOG6o2kgaW5kZXgvYWN0aW9ucykuXG4gICAqL1xuICBtb2JpbGVUaXRsZT86IGJvb2xlYW47XG4gIC8qKiBNb2JpbGUgY2FyZDog4bqpbiBj4buZdCBraOG7j2kgYm9keSBjYXJkLiAqL1xuICBtb2JpbGVIaWRkZW4/OiBib29sZWFuO1xufVxuXG4vKiogQnJlYWtwb2ludCBjaHV54buDbiBi4bqjbmcg4oaSIGRhbmggc8OhY2ggY2FyZCAoa2jhu5twIGxheW91dCBtb2JpbGUpLiAqL1xuZXhwb3J0IGNvbnN0IFVJX1RBQkxFX01PQklMRV9CUkVBS1BPSU5UID0gNzY3Ljk4O1xuXG5leHBvcnQgdHlwZSBHZW9UYWJsZVBhZ2luYXRpb25Qb3NpdGlvbiA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnYm90aCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1VJX1RBQkxFX1BBR0VfU0laRV9PUFRJT05TID0gWzEwLCAyMCwgNTAsIDEwMF07XG4iXX0=
|