@libs-ui/components-table 0.2.356-4 → 0.2.356-40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,6 +12,7 @@
12
12
  - ✅ **Virtual Scrolling**: Tối ưu hiệu năng cho danh sách hàng ngàn bản ghi.
13
13
  - ✅ **Phân trang (Pagination)**: Hỗ trợ cả `scroll-infinity` và `click-pagination`.
14
14
  - ✅ **Custom Template**: Tùy biến hiển thị từng row và cell thông qua cấu hình `colTemplateConfig`.
15
+ - ✅ **Collapse/Expand Row**: Hỗ trợ mở rộng xem chi tiết dữ liệu cấp dưới (Hierarchical/Sub-table) bằng giao diện có thể tuỳ biến cao.
15
16
  - ✅ **Sorting**: Tích hợp sẵn logic sắp xếp dữ liệu.
16
17
  - ✅ **Checkbox Selection**: Hỗ trợ chọn một hoặc nhiều hàng cùng lúc.
17
18
  - ✅ **Angular Signals**: Hoạt động mượt mà với Signal-based state management.
@@ -78,6 +79,57 @@ Ghim các cột quan trọng bên trái bằng cách sử dụng `headerLeft`. C
78
79
  [httpRequestData]="userRequestConfig" />
79
80
  ```
80
81
 
82
+ ### 3. Hierarchical Data (Collapse/Expand Row)
83
+
84
+ Sử dụng `configTemplateItemCollapseExpand` để cấu hình hiển thị nội dung chi tiết mở rộng bên dưới mỗi hàng. Rất hữu ích cho các Sub-table (bảng con), Report nhiều lớp, v.v.
85
+
86
+ ```html
87
+ <libs_ui-components-table
88
+ [headerRight]="headerConfig"
89
+ [newData]="tableData"
90
+ [configTemplateItemCollapseExpand]="configCollapseExpand" />
91
+ ```
92
+
93
+ ```typescript
94
+ // Cấu hình Collapse/Expand Template
95
+ readonly configCollapseExpand: IConfigTemplateItemCollapseExpand = {
96
+ // Biến dùng để nhận diện nội dung mở rộng mảng object chứa dữ liệu
97
+ fieldGetDataExpand: 'expand_data',
98
+ colTemplateConfig: [
99
+ {
100
+ cssWrapper: 'flex w-full',
101
+ fieldsConfig: [
102
+ {
103
+ field: 'details',
104
+ parseValue: (data) => {
105
+ // Un-wrap Signal và trả về HTML động tuỳ ý hoặc Component con
106
+ const details = data.value() || [];
107
+ let htmlInner = '';
108
+ details.forEach(d => {
109
+ htmlInner += `<div>Row Child Detail: \${d.name}</div>`;
110
+ });
111
+ return of(\`<div class="p-4 bg-gray-50">\${htmlInner}</div>\`);
112
+ }
113
+ }
114
+ ]
115
+ }
116
+ ]
117
+ };
118
+
119
+ // Dữ liệu cần có cờ \`specificExpand\` để điều hướng state ẩn/hiện,
120
+ // và trường thông tin \`expand_data\` như đã định nghĩa ở trên.
121
+ readonly tableData = {
122
+ data: convertObjectToSignal([
123
+ {
124
+ id: 1,
125
+ name: 'Task Parent 1',
126
+ specificExpand: false, // Quản lý state đóng mở
127
+ expand_data: [{ details: [ {name: 'Sub Task A'}, {name: 'Sub Task B'} ] }]
128
+ }
129
+ ])
130
+ };
131
+ ```
132
+
81
133
  ## API Documentation
82
134
 
83
135
  ### Inputs
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFibGUvc3JjL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudCB9IGZyb20gJ0BpaGFyYmVjay9uZ3gtdmlydHVhbC1zY3JvbGxlcic7XG5pbXBvcnQgeyBUWVBFX0RBVEFfVEFCTEUsIFRZUEVfSVRFTV9EQVRBX1RBQkxFIH0gZnJvbSAnLi90YWJsZS50eXBlJztcbmltcG9ydCB7IFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUWVBFX09CSkVDVCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgcmVzZXQ6IChjbGVhclNvcnQ/OiBib29sZWFuKSA9PiB2b2lkO1xuICBjYWxsQXBpQnlTZXJ2aWNlOiAoZmlyc3RDYWxsOiBib29sZWFuLCByZXNldEFmdGVyQ2FsbEFwaT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHJlc2V0U2Nyb2xsOiAoc2Nyb2xsUG9zaXRpb25MZWZ0PzogbnVtYmVyLCBzY3JvbGxQb3NpdGlvblRvcD86IG51bWJlcikgPT4gdm9pZDtcbiAgcmVtb3ZlSXRlbXM6IChrZXlzOiBBcnJheTx1bmtub3duPiwgaWdub3JlUmVDYWxsRm9vdGVyPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgYWRkSXRlbXM6IChpdGVtczogVFlQRV9EQVRBX1RBQkxFLCBhZGRGaXJzdDogYm9vbGVhbiwgaWdub3JlSGlnaHRMaWdodD86IGJvb2xlYW4sIGlnbm9yZVJlQ2FsbEZvb3Rlcj86IGJvb2xlYW4sIGF1dG9Db3VudE5ld0l0ZW0/OiBib29sZWFuKSA9PiB2b2lkO1xuICBnZXRTY3JvbGxDb250YWluZXI6ICgpID0+IFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudDtcbiAgaGlkZVRvb2xCYXJCb3R0b206ICgpID0+IHZvaWQ7XG4gIHJlc2V0S2V5U2VsZWN0ZWQ6ICgpID0+IHZvaWQ7XG4gIGRldGVjdENoYW5nZXM6ICgpID0+IHZvaWQ7XG4gIHNldENvdW50UGFnaW5nU3RvcmU6IChjb3VudDogbnVtYmVyKSA9PiB2b2lkO1xuICBnZXRDb3VudDogKCkgPT4gbnVtYmVyO1xuICBnZXRTdG9yZTogKCkgPT4gQXJyYXk8V3JpdGFibGVTaWduYWw8VFlQRV9PQkpFQ1Q+PjtcbiAgaGlnaHRMaWdodEl0ZW06IChpdGVtczogQXJyYXk8VFlQRV9JVEVNX0RBVEFfVEFCTEU+KSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFibGUvc3JjL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWaXJ0dWFsU2Nyb2xsZXJDb21wb25lbnQgfSBmcm9tICdAaWhhcmJlY2svbmd4LXZpcnR1YWwtc2Nyb2xsZXInO1xuaW1wb3J0IHsgVFlQRV9PQkpFQ1QgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IFRZUEVfREFUQV9UQUJMRSwgVFlQRV9JVEVNX0RBVEFfVEFCTEUgfSBmcm9tICcuL3RhYmxlLnR5cGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgcmVzZXQ6IChjbGVhclNvcnQ/OiBib29sZWFuKSA9PiB2b2lkO1xuICBjYWxsQXBpQnlTZXJ2aWNlOiAoZmlyc3RDYWxsOiBib29sZWFuLCByZXNldEFmdGVyQ2FsbEFwaT86IGJvb2xlYW4sIGlzQ2hhbmdlUGFnZT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHJlc2V0U2Nyb2xsOiAoc2Nyb2xsUG9zaXRpb25MZWZ0PzogbnVtYmVyLCBzY3JvbGxQb3NpdGlvblRvcD86IG51bWJlcikgPT4gdm9pZDtcbiAgcmVtb3ZlSXRlbXM6IChrZXlzOiBBcnJheTx1bmtub3duPiwgaWdub3JlUmVDYWxsRm9vdGVyPzogYm9vbGVhbiwgYXV0b0NvdW50TmV3SXRlbT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGFkZEl0ZW1zOiAoaXRlbXM6IFRZUEVfREFUQV9UQUJMRSwgYWRkRmlyc3Q6IGJvb2xlYW4sIGlnbm9yZUhpZ2h0TGlnaHQ/OiBib29sZWFuLCBpZ25vcmVSZUNhbGxGb290ZXI/OiBib29sZWFuLCBhdXRvQ291bnROZXdJdGVtPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgZ2V0U2Nyb2xsQ29udGFpbmVyOiAoKSA9PiBWaXJ0dWFsU2Nyb2xsZXJDb21wb25lbnQ7XG4gIGhpZGVUb29sQmFyQm90dG9tOiAoKSA9PiB2b2lkO1xuICByZXNldEtleVNlbGVjdGVkOiAoKSA9PiB2b2lkO1xuICBkZXRlY3RDaGFuZ2VzOiAoKSA9PiB2b2lkO1xuICBzZXRDb3VudFBhZ2luZ1N0b3JlOiAoY291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgZ2V0Q291bnQ6ICgpID0+IG51bWJlcjtcbiAgZ2V0U3RvcmU6ICgpID0+IEFycmF5PFdyaXRhYmxlU2lnbmFsPFRZUEVfT0JKRUNUPj47XG4gIGdldEl0ZW1zOiAoKSA9PiBBcnJheTxXcml0YWJsZVNpZ25hbDxUWVBFX09CSkVDVD4+O1xuICBoaWdodExpZ2h0SXRlbTogKGl0ZW1zOiBBcnJheTxUWVBFX0lURU1fREFUQV9UQUJMRT4pID0+IFByb21pc2U8dm9pZD47XG4gIGNoYW5nZVBhZ2luYXRpb246IChwYWdlPzpudW1iZXIpID0+IFByb21pc2U8dm9pZD47XG59XG4iXX0=
@@ -1,3 +1,3 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  export {};
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJsZS9zcmMvaW50ZXJmYWNlcy90ZW1wbGF0ZS1jb25maWcuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RCIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuaW1wb3J0IHsgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElBdmF0YXJDb25maWcgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWF2YXRhcic7XG5pbXBvcnQgeyBJQnV0dG9uIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJRHJvcGRvd24gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duJztcbmltcG9ydCB7IElMaW5lQ2xhbXBDb25maWcgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpbmUtY2xhbXAnO1xuaW1wb3J0IHsgSUxpc3RDb25maWdJdGVtIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1saXN0JztcbmltcG9ydCB7IElQb3BvdmVyIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElTd2l0Y2hFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc3dpdGNoJztcbmltcG9ydCB7IFRZUEVfRlVOQ1RJT04sIFRZUEVfT0JKRUNUIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQ29tcG9uZW50T3V0bGV0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1jb21wb25lbnQtb3V0bGV0JztcbmltcG9ydCB7IFRZUEVfSVRFTV9EQVRBX1RBQkxFIH0gZnJvbSAnLi90YWJsZS50eXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVUZW1wbGF0ZUNvbmZpZyB7XG4gIGNzc1dyYXBwZXI6IHN0cmluZztcbiAgZmllbGRzQ29uZmlnOiBBcnJheTxJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnIHtcbiAgaW5zdGFuY2U/OiAndG9vbHRpcCcgfCAnbGluZS1jbGFtcCcgfCAnYnV0dG9ucycgfCAnYnV0dG9uLXN0YXR1cycgfCAnc3dpdGNoJyB8ICdiYWRnZScgfCAnb3RoZXItYWN0aW9uLXNob3ctcG9wdXAnIHwgJ3NoYXBlLXN0eWxlJyB8ICdpbWFnZScgfCAnYXZhdGFyJyB8ICdidXR0b24tYWN0aW9uLXNob3ctcG9wdXAnO1xuICBmaWVsZDogc3RyaW5nO1xuICBwYXJzZVZhbHVlPzogVFlQRV9GVU5DVElPTjtcbiAgZ2V0VG9vbHRpcEljb25DbGFzcz86IFRZUEVfRlVOQ1RJT047IC8vIFPhu60gZOG7pW5nIGTDuW5nIGljb25DbGFzcyB0b29sdGlwIGNobyB0eXBlIHRvb2x0aXAuXG4gIGdldFRvb2x0aXBDb25maWc/OiBUWVBFX0ZVTkNUSU9OO1xuICBhY3Rpb24/OiAoZGF0YUZpZWxkOiBhbnksIGl0ZW06IFRZUEVfSVRFTV9EQVRBX1RBQkxFLCBpdGVtVGFibGVTZWxlY3RlZD86IFRZUEVfSVRFTV9EQVRBX1RBQkxFKSA9PiBhbnk7XG4gIHRvb2x0aXA/OiBJUG9wb3ZlcjsgLy8gbuG6v3UgbXXhu5FuIHPhu60gIGThu6VuZyBsaWJzLXVpY29tcG9uZW50cy10b29sdGlwLiB5w6p1IGPhuqd1IMSR4buDIHR5cGUgYuG6sW5nIHRvb2x0aXBcbiAgbmdTdHlsZT86IFRZUEVfT0JKRUNUO1xuICBnZXROZ1N0eWxlPzogVFlQRV9GVU5DVElPTjtcbiAgbmdDbGFzcz86IFRZUEVfT0JKRUNUO1xuICBnZXROZ0NsYXNzPzogVFlQRV9GVU5DVElPTjtcbiAgaWdub3JlQ2xhc3NNYXJnaW5MZWZ0PzogYm9vbGVhbjsgLy8gc+G7rSBk4bulbmcga2hpIG114buRbiBi4buPIGNsYXNzIG1hcmdpbiBjaG8gdHlwZSBvdGhlci1hY3Rpb24tc2hvdy1wb3B1cCwgYmFkZ2VcblxuICBsaW5lQ2xhbXBDb25maWc/OiBJTGluZUNsYW1wQ29uZmlnO1xuXG4gIGdldERpc2FibGVWYWx1ZVN3aXRjaD86IFRZUEVfRlVOQ1RJT047IC8vIHPhu60gZOG7pW5nIGtoaSBtdeG7kW4gxJFp4buDdSBjaOG7iW5oIGNo4bq/IMSR4buZIGVuYWJsZSBoYXkgZGlzYWJsZSBjaG8gdG9nZ2xlXG4gIGdldEFjdGl2ZVZhbHVlU3dpdGNoPzogVFlQRV9GVU5DVElPTjsgLy8gc+G7rSBk4bulbmcga2hpIG114buRbiDEkWnhu4N1IGNo4buJbmggY2jhur8gxJHhu5kgYWN0aXZlIGhheSBkZWFjdGl2ZSBjaG8gdG9nZ2xlXG4gIHN3aXRjaEFjdGlvbj86IChzd2l0Y2hEYXRhOiBJU3dpdGNoRXZlbnQsIGl0ZW06IFRZUEVfSVRFTV9EQVRBX1RBQkxFKSA9PiB2b2lkOyAvLyBC4bqvdCBideG7mWMga2hpIHPhu60gZOG7pW5nIHR5cGUgPSBzd2l0Y2hcbiAgYnV0dG9ucz86IEFycmF5PFdyaXRhYmxlU2lnbmFsPElCdXR0b24+PjtcbiAgZ2V0QnV0dG9uc0J5SXRlbT86IFRZUEVfRlVOQ1RJT048QXJyYXk8V3JpdGFibGVTaWduYWw8SUJ1dHRvbj4+PjtcbiAgc2hvd0J1dHRvbkhvdmVyTW9kZT86IGJvb2xlYW47XG4gIGdldERpc2FibGU/OiBUWVBFX0ZVTkNUSU9OOyAvLyBT4butIGThu6VuZyDEkeG7gyBkaXNhYmxlIGlucHV0LCBidXR0b24sIHFyLWNvZGVcbiAgZHJvcGRvd25Db25maWc/OiBJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnRHJvcGRvd247XG5cbiAgZ2V0QXZhdGFyQ29uZmlnPzogVFlQRV9GVU5DVElPTjxJQXZhdGFyQ29uZmlnPjtcblxuICBnZXRJbWFnZVNyYz86ICh2YWx1ZTogYW55LCBpdGVtPzogVFlQRV9PQkpFQ1QsIGxhbmc/OiBzdHJpbmcsIGlzRXJyb3I/OiBib29sZWFuKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHJvd3M/OiBBcnJheTxJVGFibGVUZW1wbGF0ZUNvbmZpZz47XG4gIHJvd3NUZW1wbGF0ZUNzc1dyYXBwZXI/OiBzdHJpbmc7XG5cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogKCkgPT4gT2JzZXJ2YWJsZTxMaWJzVWlDb21wb25lbnRzQ29tcG9uZW50T3V0bGV0Q29tcG9uZW50IHwgYW55PjtcbiAgZ2V0RGF0YUNvbXBvbmVudE91dGxldD86IFRZUEVfRlVOQ1RJT047XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlRmllbGRUZW1wbGF0ZUNvbmZpZ0Ryb3Bkb3duIGV4dGVuZHMgT21pdDxJRHJvcGRvd24sICdsaXN0Q29uZmlnJz4ge1xuICBidXR0b24/OiBXcml0YWJsZVNpZ25hbDxJQnV0dG9uPjtcbiAgZ2V0TGlzdENvbmZpZz86IFRZUEVfRlVOQ1RJT048SUxpc3RDb25maWdJdGVtPjtcbiAgbGlzdEtleXNEaXNhYmxlSXRlbT86IEFycmF5PHN0cmluZz47XG4gIGxpc3RIaWRkZW5JbnB1dFNlYXJjaD86IGJvb2xlYW47XG4gIG1heEhlaWdodD86IG51bWJlcjtcbiAgaWdub3JlQXJyb3c/OiBib29sZWFuO1xuICBwb3NpdGlvbj86IHtcbiAgICBtb2RlOiAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJztcbiAgICBkaXN0YW5jZTogbnVtYmVyO1xuICB9O1xuICBsaXN0Q29uZmlnPzogSUxpc3RDb25maWdJdGVtO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJsZS9zcmMvaW50ZXJmYWNlcy90ZW1wbGF0ZS1jb25maWcuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RCIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cblxuaW1wb3J0IHsgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElBdmF0YXJDb25maWcgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWF2YXRhcic7XG5pbXBvcnQgeyBJQnV0dG9uIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQ29tcG9uZW50T3V0bGV0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1jb21wb25lbnQtb3V0bGV0JztcbmltcG9ydCB7IElEcm9wZG93biB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJvcGRvd24nO1xuaW1wb3J0IHsgSUxpbmVDbGFtcENvbmZpZyB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGluZS1jbGFtcCc7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpc3QnO1xuaW1wb3J0IHsgSVBvcG92ZXIgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgSVN3aXRjaEV2ZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zd2l0Y2gnO1xuaW1wb3J0IHsgVFlQRV9GVU5DVElPTiwgVFlQRV9PQkpFQ1QgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRZUEVfSVRFTV9EQVRBX1RBQkxFIH0gZnJvbSAnLi90YWJsZS50eXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVUZW1wbGF0ZUNvbmZpZyB7XG4gIGNzc1dyYXBwZXI6IHN0cmluZztcbiAgZmllbGRzQ29uZmlnOiBBcnJheTxJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnIHtcbiAgaW5zdGFuY2U/OiAndG9vbHRpcCcgfCAnbGluZS1jbGFtcCcgfCAnYnV0dG9ucycgfCAnYnV0dG9uLXN0YXR1cycgfCAnc3dpdGNoJyB8ICdiYWRnZScgfCAnb3RoZXItYWN0aW9uLXNob3ctcG9wdXAnIHwgJ3NoYXBlLXN0eWxlJyB8ICdpbWFnZScgfCAnYXZhdGFyJyB8ICdidXR0b24tYWN0aW9uLXNob3ctcG9wdXAnO1xuICBmaWVsZDogc3RyaW5nO1xuICBwYXJzZVZhbHVlPzogVFlQRV9GVU5DVElPTjtcbiAgZ2V0VG9vbHRpcEljb25DbGFzcz86IFRZUEVfRlVOQ1RJT047IC8vIFPhu60gZOG7pW5nIGTDuW5nIGljb25DbGFzcyB0b29sdGlwIGNobyB0eXBlIHRvb2x0aXAuXG4gIGdldFRvb2x0aXBDb25maWc/OiBUWVBFX0ZVTkNUSU9OO1xuICBhY3Rpb24/OiAoZGF0YUZpZWxkOiBhbnksIGl0ZW06IFRZUEVfSVRFTV9EQVRBX1RBQkxFLCBpdGVtVGFibGVTZWxlY3RlZD86IFRZUEVfSVRFTV9EQVRBX1RBQkxFKSA9PiBhbnk7XG4gIHRvb2x0aXA/OiBJUG9wb3ZlcjsgLy8gbuG6v3UgbXXhu5FuIHPhu60gIGThu6VuZyBsaWJzLXVpY29tcG9uZW50cy10b29sdGlwLiB5w6p1IGPhuqd1IMSR4buDIHR5cGUgYuG6sW5nIHRvb2x0aXBcbiAgbmdTdHlsZT86IFRZUEVfT0JKRUNUO1xuICBnZXROZ1N0eWxlPzogVFlQRV9GVU5DVElPTjtcbiAgbmdDbGFzcz86IFRZUEVfT0JKRUNUO1xuICBnZXROZ0NsYXNzPzogVFlQRV9GVU5DVElPTjtcbiAgaWdub3JlQ2xhc3NNYXJnaW5MZWZ0PzogYm9vbGVhbjsgLy8gc+G7rSBk4bulbmcga2hpIG114buRbiBi4buPIGNsYXNzIG1hcmdpbiBjaG8gdHlwZSBvdGhlci1hY3Rpb24tc2hvdy1wb3B1cCwgYmFkZ2VcblxuICBsaW5lQ2xhbXBDb25maWc/OiBJTGluZUNsYW1wQ29uZmlnO1xuXG4gIGdldERpc2FibGVWYWx1ZVN3aXRjaD86IFRZUEVfRlVOQ1RJT047IC8vIHPhu60gZOG7pW5nIGtoaSBtdeG7kW4gxJFp4buDdSBjaOG7iW5oIGNo4bq/IMSR4buZIGVuYWJsZSBoYXkgZGlzYWJsZSBjaG8gdG9nZ2xlXG4gIGdldEFjdGl2ZVZhbHVlU3dpdGNoPzogVFlQRV9GVU5DVElPTjsgLy8gc+G7rSBk4bulbmcga2hpIG114buRbiDEkWnhu4N1IGNo4buJbmggY2jhur8gxJHhu5kgYWN0aXZlIGhheSBkZWFjdGl2ZSBjaG8gdG9nZ2xlXG4gIHN3aXRjaEFjdGlvbj86IChzd2l0Y2hEYXRhOiBJU3dpdGNoRXZlbnQsIGl0ZW06IFRZUEVfSVRFTV9EQVRBX1RBQkxFKSA9PiB2b2lkOyAvLyBC4bqvdCBideG7mWMga2hpIHPhu60gZOG7pW5nIHR5cGUgPSBzd2l0Y2hcbiAgYnV0dG9ucz86IEFycmF5PFdyaXRhYmxlU2lnbmFsPElCdXR0b24+PjtcbiAgZ2V0QnV0dG9uc0J5SXRlbT86IFRZUEVfRlVOQ1RJT048QXJyYXk8V3JpdGFibGVTaWduYWw8SUJ1dHRvbj4+PjtcbiAgc2hvd0J1dHRvbkhvdmVyTW9kZT86IGJvb2xlYW47XG4gIGdldERpc2FibGU/OiBUWVBFX0ZVTkNUSU9OOyAvLyBT4butIGThu6VuZyDEkeG7gyBkaXNhYmxlIGlucHV0LCBidXR0b24sIHFyLWNvZGVcbiAgZHJvcGRvd25Db25maWc/OiBJVGFibGVGaWVsZFRlbXBsYXRlQ29uZmlnRHJvcGRvd247XG5cbiAgZ2V0QXZhdGFyQ29uZmlnPzogVFlQRV9GVU5DVElPTjxJQXZhdGFyQ29uZmlnIHwgdW5kZWZpbmVkPjtcblxuICBnZXRJbWFnZVNyYz86ICh2YWx1ZTogYW55LCBpdGVtPzogVFlQRV9PQkpFQ1QsIGxhbmc/OiBzdHJpbmcsIGlzRXJyb3I/OiBib29sZWFuKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHJvd3M/OiBBcnJheTxJVGFibGVUZW1wbGF0ZUNvbmZpZz47XG4gIHJvd3NUZW1wbGF0ZUNzc1dyYXBwZXI/OiBzdHJpbmc7XG5cbiAgZ2V0Q29tcG9uZW50T3V0bGV0PzogKCkgPT4gT2JzZXJ2YWJsZTxMaWJzVWlDb21wb25lbnRzQ29tcG9uZW50T3V0bGV0Q29tcG9uZW50IHwgYW55PjtcbiAgZ2V0RGF0YUNvbXBvbmVudE91dGxldD86IFRZUEVfRlVOQ1RJT047XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlRmllbGRUZW1wbGF0ZUNvbmZpZ0Ryb3Bkb3duIGV4dGVuZHMgT21pdDxJRHJvcGRvd24sICdsaXN0Q29uZmlnJz4ge1xuICBidXR0b24/OiBXcml0YWJsZVNpZ25hbDxJQnV0dG9uPjtcbiAgZ2V0TGlzdENvbmZpZz86IFRZUEVfRlVOQ1RJT048SUxpc3RDb25maWdJdGVtPjtcbiAgbGlzdEtleXNEaXNhYmxlSXRlbT86IEFycmF5PHN0cmluZz47XG4gIGxpc3RIaWRkZW5JbnB1dFNlYXJjaD86IGJvb2xlYW47XG4gIG1heEhlaWdodD86IG51bWJlcjtcbiAgaWdub3JlQXJyb3c/OiBib29sZWFuO1xuICBwb3NpdGlvbj86IHtcbiAgICBtb2RlOiAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJztcbiAgICBkaXN0YW5jZTogbnVtYmVyO1xuICB9O1xuICBsaXN0Q29uZmlnPzogSUxpc3RDb25maWdJdGVtO1xufVxuIl19