@geoit/ui 0.0.2 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +12 -8
- package/README.md +140 -17
- package/ai/AGENTS.md +43 -32
- package/ai/README.md +36 -2
- package/ai/catalog.json +5585 -437
- package/ai/components/geo-alert.md +75 -21
- package/ai/components/geo-back-button.md +64 -18
- package/ai/components/geo-breadcrumb.md +71 -12
- package/ai/components/geo-button.md +90 -27
- package/ai/components/geo-chart.md +103 -0
- package/ai/components/geo-checkbox.md +67 -20
- package/ai/components/geo-column-picker.md +91 -18
- package/ai/components/geo-confirm-modal.md +92 -27
- package/ai/components/geo-dashboard.md +91 -0
- package/ai/components/geo-date-picker.md +105 -29
- package/ai/components/geo-date-range-picker.md +101 -28
- package/ai/components/geo-empty-state.md +75 -0
- package/ai/components/geo-feedback-form.md +97 -0
- package/ai/components/geo-file-picker.md +99 -26
- package/ai/components/geo-forgot-password.md +78 -0
- package/ai/components/geo-form-modal.md +111 -44
- package/ai/components/geo-icon.md +70 -16
- package/ai/components/geo-input.md +94 -29
- package/ai/components/geo-layout-footer.md +70 -0
- package/ai/components/geo-layout-header-actions.md +82 -0
- package/ai/components/geo-layout-header.md +89 -0
- package/ai/components/geo-layout-sidebar.md +86 -0
- package/ai/components/geo-layout.md +155 -0
- package/ai/components/geo-list-page.md +72 -0
- package/ai/components/geo-login.md +94 -0
- package/ai/components/geo-map-admin-filter.md +80 -0
- package/ai/components/geo-map-basemap-switcher.md +75 -0
- package/ai/components/geo-map-help.md +72 -0
- package/ai/components/geo-map-layer-card.md +73 -0
- package/ai/components/geo-map-layer-panel.md +75 -0
- package/ai/components/geo-map-layers-drawer.md +78 -0
- package/ai/components/geo-map-legend.md +74 -0
- package/ai/components/geo-map-locate.md +75 -0
- package/ai/components/geo-map-location-chip.md +71 -0
- package/ai/components/geo-map-measure.md +74 -0
- package/ai/components/geo-map-opacity.md +75 -0
- package/ai/components/geo-map-parcel-popup.md +79 -0
- package/ai/components/geo-map-search.md +83 -0
- package/ai/components/geo-map-shell.md +110 -0
- package/ai/components/geo-map-snapshot.md +75 -0
- package/ai/components/geo-map-swipe.md +73 -0
- package/ai/components/geo-map-toolbar.md +76 -0
- package/ai/components/geo-map-zoom.md +74 -0
- package/ai/components/geo-map.md +205 -0
- package/ai/components/geo-overlap-result.md +88 -0
- package/ai/components/geo-page-header.md +72 -0
- package/ai/components/geo-page-title.md +62 -16
- package/ai/components/geo-pagination.md +76 -24
- package/ai/components/geo-radio.md +110 -27
- package/ai/components/geo-row-actions.md +87 -19
- package/ai/components/geo-select.md +108 -28
- package/ai/components/geo-slider.md +70 -21
- package/ai/components/geo-stat-card.md +98 -0
- package/ai/components/geo-status-tag.md +67 -15
- package/ai/components/geo-step-form-layout.md +121 -38
- package/ai/components/geo-stepper.md +81 -19
- package/ai/components/geo-table-filter.md +90 -29
- package/ai/components/geo-table-pagination.md +70 -23
- package/ai/components/geo-table-toolbar.md +84 -29
- package/ai/components/geo-table.md +191 -59
- package/ai/components/geo-tabs.md +99 -27
- package/ai/components/geo-textarea.md +84 -23
- package/ai/components/geo-toast.md +138 -27
- package/ai/components/geo-tree.md +94 -22
- package/ai/components/geo-typography.md +70 -19
- package/ai/components/geo-upload.md +109 -39
- package/ai/mockup.html +1194 -0
- package/ai/recipes.md +132 -47
- package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +19 -36
- package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +14 -24
- package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +8 -11
- package/esm2022/lib/figma/geo-button/geo-button.component.mjs +30 -59
- package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +88 -0
- package/esm2022/lib/figma/geo-chart/geo-chart.types.mjs +2 -0
- package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +11 -22
- package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +22 -54
- package/esm2022/lib/figma/geo-dashboard/geo-dashboard.component.mjs +49 -0
- package/esm2022/lib/figma/geo-dashboard/geo-dashboard.types.mjs +2 -0
- package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +48 -78
- package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +47 -75
- package/esm2022/lib/figma/geo-empty-state/geo-empty-state.component.mjs +25 -0
- package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.component.mjs +75 -0
- package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.types.mjs +2 -0
- package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +59 -81
- package/esm2022/lib/figma/geo-forgot-password/geo-forgot-password.component.mjs +51 -0
- package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +45 -112
- package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +22 -32
- package/esm2022/lib/figma/geo-input/geo-input.component.mjs +41 -70
- package/esm2022/lib/figma/geo-layout/footer/geo-layout-footer.component.mjs +18 -0
- package/esm2022/lib/figma/geo-layout/geo-layout-actions.directive.mjs +15 -0
- package/esm2022/lib/figma/geo-layout/geo-layout.component.mjs +79 -0
- package/esm2022/lib/figma/geo-layout/geo-layout.types.mjs +42 -0
- package/esm2022/lib/figma/geo-layout/header/geo-layout-header.component.mjs +60 -0
- package/esm2022/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.mjs +70 -0
- package/esm2022/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.mjs +90 -0
- package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +22 -0
- package/esm2022/lib/figma/geo-login/geo-login.component.mjs +58 -0
- package/esm2022/lib/figma/geo-login/geo-login.types.mjs +2 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +52 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +61 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.mjs +26 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.mjs +24 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.mjs +146 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +37 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +30 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +72 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.mjs +21 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.mjs +375 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +94 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +136 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +182 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +577 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +93 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.mjs +129 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +64 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +295 -0
- package/esm2022/lib/figma/geo-map/geo-map-toolbar.icons.mjs +18 -0
- package/esm2022/lib/figma/geo-map/geo-map.component.mjs +144 -0
- package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +497 -0
- package/esm2022/lib/figma/geo-map/geo-map.controller.mjs +71 -0
- package/esm2022/lib/figma/geo-map/geo-map.types.mjs +2 -0
- package/esm2022/lib/figma/geo-map/services/geo-map-layer.service.mjs +368 -0
- package/esm2022/lib/figma/geo-map/services/geo-map-projection.service.mjs +110 -0
- package/esm2022/lib/figma/geo-map/services/geo-map.service.mjs +540 -0
- package/esm2022/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.mjs +47 -0
- package/esm2022/lib/figma/geo-map/utils/geo-map-interactions.util.mjs +30 -0
- package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.component.mjs +25 -0
- package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.types.mjs +2 -0
- package/esm2022/lib/figma/geo-page-header/geo-page-header.component.mjs +23 -0
- package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +20 -35
- package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +13 -43
- package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +32 -52
- package/esm2022/lib/figma/geo-select/geo-select.component.mjs +46 -72
- package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +12 -28
- package/esm2022/lib/figma/geo-stat-card/geo-stat-card.component.mjs +163 -0
- package/esm2022/lib/figma/geo-stat-card/geo-stat-card.types.mjs +2 -0
- package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +23 -27
- package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +39 -96
- package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +18 -33
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +14 -24
- package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +18 -36
- package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +41 -98
- package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +40 -73
- package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +26 -56
- package/esm2022/lib/figma/geo-table/geo-table.component.mjs +110 -210
- package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +33 -63
- package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +28 -44
- package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +18 -39
- package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +12 -40
- package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +49 -64
- package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +50 -101
- package/esm2022/lib/figma/index.mjs +50 -1
- package/esm2022/lib/styles/tokens.mjs +56 -24
- package/fesm2022/geoit-ui.mjs +5981 -1825
- package/fesm2022/geoit-ui.mjs.map +1 -1
- package/lib/figma/geo-alert/geo-alert.component.d.ts +10 -11
- package/lib/figma/geo-back-button/geo-back-button.component.d.ts +6 -7
- package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +2 -2
- package/lib/figma/geo-button/geo-button.component.d.ts +21 -17
- package/lib/figma/geo-chart/geo-chart.component.d.ts +40 -0
- package/lib/figma/geo-chart/geo-chart.types.d.ts +13 -0
- package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +6 -7
- package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +15 -17
- package/lib/figma/geo-dashboard/geo-dashboard.component.d.ts +29 -0
- package/lib/figma/geo-dashboard/geo-dashboard.types.d.ts +7 -0
- package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +26 -21
- package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +25 -20
- package/lib/figma/geo-empty-state/geo-empty-state.component.d.ts +17 -0
- package/lib/figma/geo-feedback-form/geo-feedback-form.component.d.ts +36 -0
- package/lib/figma/geo-feedback-form/geo-feedback-form.types.d.ts +8 -0
- package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +23 -20
- package/lib/figma/geo-forgot-password/geo-forgot-password.component.d.ts +24 -0
- package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +33 -35
- package/lib/figma/geo-icon/geo-icon.component.d.ts +7 -7
- package/lib/figma/geo-input/geo-input.component.d.ts +23 -21
- package/lib/figma/geo-layout/footer/geo-layout-footer.component.d.ts +10 -0
- package/lib/figma/geo-layout/geo-layout-actions.directive.d.ts +6 -0
- package/lib/figma/geo-layout/geo-layout.component.d.ts +48 -0
- package/lib/figma/geo-layout/geo-layout.types.d.ts +44 -0
- package/lib/figma/geo-layout/header/geo-layout-header.component.d.ts +31 -0
- package/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.d.ts +32 -0
- package/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.d.ts +34 -0
- package/lib/figma/geo-list-page/geo-list-page.component.d.ts +16 -0
- package/lib/figma/geo-login/geo-login.component.d.ts +27 -0
- package/lib/figma/geo-login/geo-login.types.d.ts +6 -0
- package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +28 -0
- package/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.d.ts +26 -0
- package/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.d.ts +20 -0
- package/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.d.ts +15 -0
- package/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.d.ts +40 -0
- package/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.d.ts +25 -0
- package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +18 -0
- package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.d.ts +24 -0
- package/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.d.ts +14 -0
- package/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.d.ts +49 -0
- package/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.d.ts +30 -0
- package/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.d.ts +44 -0
- package/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.d.ts +56 -0
- package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +103 -0
- package/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.d.ts +21 -0
- package/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.d.ts +33 -0
- package/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.d.ts +30 -0
- package/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.d.ts +67 -0
- package/lib/figma/geo-map/geo-map-toolbar.icons.d.ts +17 -0
- package/lib/figma/geo-map/geo-map.component.d.ts +53 -0
- package/lib/figma/geo-map/geo-map.constants.d.ts +73 -0
- package/lib/figma/geo-map/geo-map.controller.d.ts +49 -0
- package/lib/figma/geo-map/geo-map.types.d.ts +224 -0
- package/lib/figma/geo-map/services/geo-map-layer.service.d.ts +42 -0
- package/lib/figma/geo-map/services/geo-map-projection.service.d.ts +32 -0
- package/lib/figma/geo-map/services/geo-map.service.d.ts +99 -0
- package/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.d.ts +13 -0
- package/lib/figma/geo-map/utils/geo-map-interactions.util.d.ts +9 -0
- package/lib/figma/geo-overlap-result/geo-overlap-result.component.d.ts +18 -0
- package/lib/figma/geo-overlap-result/geo-overlap-result.types.d.ts +7 -0
- package/lib/figma/geo-page-header/geo-page-header.component.d.ts +16 -0
- package/lib/figma/geo-page-title/geo-page-title.component.d.ts +9 -9
- package/lib/figma/geo-pagination/geo-pagination.component.d.ts +9 -14
- package/lib/figma/geo-radio/geo-radio.component.d.ts +17 -15
- package/lib/figma/geo-select/geo-select.component.d.ts +24 -19
- package/lib/figma/geo-slider/geo-slider.component.d.ts +7 -9
- package/lib/figma/geo-stat-card/geo-stat-card.component.d.ts +50 -0
- package/lib/figma/geo-stat-card/geo-stat-card.types.d.ts +11 -0
- package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +7 -7
- package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +27 -29
- package/lib/figma/geo-stepper/geo-stepper.component.d.ts +6 -8
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +6 -7
- package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +11 -12
- package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +21 -28
- package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +17 -20
- package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +17 -18
- package/lib/figma/geo-table/geo-table.component.d.ts +58 -62
- package/lib/figma/geo-tabs/geo-tabs.component.d.ts +14 -17
- package/lib/figma/geo-textarea/geo-textarea.component.d.ts +15 -13
- package/lib/figma/geo-toast/geo-toast.component.d.ts +11 -12
- package/lib/figma/geo-tree/geo-tree.component.d.ts +8 -13
- package/lib/figma/geo-typography/geo-typography.component.d.ts +13 -13
- package/lib/figma/geo-upload/geo-upload.component.d.ts +26 -28
- package/lib/figma/index.d.ts +49 -0
- package/lib/styles/tokens.d.ts +56 -23
- package/package.json +4 -2
- package/src/lib/figma/geo-map/assets/toolbar/fullscreen.svg +8 -0
- package/src/lib/figma/geo-map/assets/toolbar/home.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/layers.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/measure-area.svg +12 -0
- package/src/lib/figma/geo-map/assets/toolbar/measure-distance.svg +5 -0
- package/src/lib/figma/geo-map/assets/toolbar/pan.svg +13 -0
- package/src/lib/figma/geo-map/assets/toolbar/search.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/zoom-in.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/zoom-out.svg +5 -0
- package/src/lib/styles/design-tokens.scss +108 -35
- package/src/lib/styles/scrollbar.scss +2 -2
- package/src/lib/styles/theme.scss +1 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Component,
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, effect, input, model, output, signal, } from '@angular/core';
|
|
3
2
|
import { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';
|
|
4
3
|
import { GeoRowActionsComponent } from './geo-row-actions/geo-row-actions.component';
|
|
5
4
|
import { pickInlineRowActions, pickOverflowRowActions, } from './geo-row-actions/geo-row-actions.types';
|
|
@@ -10,128 +9,117 @@ import { DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS, } from './geo-table.types';
|
|
|
10
9
|
import * as i0 from "@angular/core";
|
|
11
10
|
import * as i1 from "ng-zorro-antd/table";
|
|
12
11
|
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;
|
|
12
|
+
columns = input([]);
|
|
13
|
+
data = input([]);
|
|
14
|
+
loading = input(false);
|
|
15
|
+
bordered = input(true);
|
|
16
|
+
outerBordered = input(false);
|
|
17
|
+
size = input('middle');
|
|
18
|
+
striped = input(true);
|
|
19
|
+
clickable = input(true);
|
|
20
|
+
tableLayout = input('auto');
|
|
21
|
+
showPagination = input(true);
|
|
22
|
+
frontPagination = input(true);
|
|
23
|
+
pageIndex = model(1);
|
|
24
|
+
pageSize = model(10);
|
|
25
|
+
total = input(undefined);
|
|
26
|
+
pageSizeOptions = input(DEFAULT_UI_TABLE_PAGE_SIZE_OPTIONS);
|
|
27
|
+
showSizeChanger = input(false);
|
|
28
|
+
showQuickJumper = input(false);
|
|
29
|
+
hideOnSinglePage = input(false);
|
|
30
|
+
simplePagination = input(false);
|
|
31
|
+
paginationPosition = input('bottom');
|
|
32
|
+
scroll = input({});
|
|
33
|
+
scrollY = input(undefined);
|
|
35
34
|
/**
|
|
36
35
|
* Tự bật scroll ngang theo tổng width cột.
|
|
37
36
|
* Khi có cột `fixed`, scroll.x luôn được tính (bắt buộc với nz-table fixed).
|
|
38
37
|
*/
|
|
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 = [];
|
|
38
|
+
autoScroll = input(false);
|
|
39
|
+
tableTitle = input(undefined);
|
|
40
|
+
footer = input(undefined);
|
|
41
|
+
emptyText = input('Không có dữ liệu');
|
|
42
|
+
showTotalRange = input(false);
|
|
43
|
+
selectable = input(false);
|
|
44
|
+
rowKey = input('id');
|
|
45
|
+
selectedKeys = model([]);
|
|
47
46
|
/**
|
|
48
47
|
* Mobile card: key cột làm tiêu đề.
|
|
49
48
|
* Ưu tiên hơn `column.mobileTitle`; nếu không set thì lấy cột dữ liệu đầu tiên.
|
|
50
49
|
*/
|
|
51
|
-
mobileTitleKey;
|
|
50
|
+
mobileTitleKey = input(undefined);
|
|
52
51
|
/** Bật/tắt chuyển card trên mobile (mặc định bật). */
|
|
53
|
-
mobileCardView = true;
|
|
54
|
-
rowClick =
|
|
55
|
-
rowEdit =
|
|
56
|
-
rowMore =
|
|
57
|
-
rowAction =
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
selectionChange = new EventEmitter();
|
|
64
|
-
allChecked = false;
|
|
65
|
-
indeterminate = false;
|
|
52
|
+
mobileCardView = input(true);
|
|
53
|
+
rowClick = output();
|
|
54
|
+
rowEdit = output();
|
|
55
|
+
rowMore = output();
|
|
56
|
+
rowAction = output();
|
|
57
|
+
queryParams = output();
|
|
58
|
+
currentPageDataChange = output();
|
|
59
|
+
selectionChange = output();
|
|
60
|
+
allChecked = signal(false);
|
|
61
|
+
indeterminate = signal(false);
|
|
66
62
|
sortFnCache = new Map();
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
constructor() {
|
|
64
|
+
effect(() => {
|
|
65
|
+
this.columns();
|
|
69
66
|
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;
|
|
67
|
+
});
|
|
77
68
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
69
|
+
visibleColumns = computed(() => this.columns().filter((col) => col.visible !== false));
|
|
70
|
+
computedTotal = computed(() => this.total() ?? this.data().length);
|
|
71
|
+
paginatedData = computed(() => {
|
|
72
|
+
if (!this.showPagination() || !this.frontPagination()) {
|
|
73
|
+
return this.data();
|
|
81
74
|
}
|
|
82
|
-
const start = (this.pageIndex - 1) * this.pageSize;
|
|
83
|
-
return this.data.slice(start, start + this.pageSize);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
get hasFixedColumns() {
|
|
89
|
-
return this.visibleColumns.some((col) => col.fixed === 'left' || col.fixed === 'right');
|
|
90
|
-
}
|
|
75
|
+
const start = (this.pageIndex() - 1) * this.pageSize();
|
|
76
|
+
return this.data().slice(start, start + this.pageSize());
|
|
77
|
+
});
|
|
78
|
+
shouldShowPagination = computed(() => this.showPagination());
|
|
79
|
+
hasFixedColumns = computed(() => this.visibleColumns().some((col) => col.fixed === 'left' || col.fixed === 'right'));
|
|
91
80
|
/** Có cột fixed → table-layout fixed để header/body cùng width cột. */
|
|
92
|
-
|
|
93
|
-
return this.hasFixedColumns ? 'fixed' : this.tableLayout;
|
|
94
|
-
}
|
|
81
|
+
computedTableLayout = computed(() => this.hasFixedColumns() ? 'fixed' : this.tableLayout());
|
|
95
82
|
/** Đồng bộ width cột khi scrollY tách header/body thành 2 bảng. */
|
|
96
|
-
|
|
97
|
-
const widths = this.visibleColumns.map((col) => col.width ?? null);
|
|
98
|
-
return this.selectable ? ['48px', ...widths] : widths;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const scroll = { ...this.scroll };
|
|
102
|
-
|
|
103
|
-
|
|
83
|
+
widthConfig = computed(() => {
|
|
84
|
+
const widths = this.visibleColumns().map((col) => col.width ?? null);
|
|
85
|
+
return this.selectable() ? ['48px', ...widths] : widths;
|
|
86
|
+
});
|
|
87
|
+
computedScroll = computed(() => {
|
|
88
|
+
const scroll = { ...this.scroll() };
|
|
89
|
+
const scrollY = this.scrollY();
|
|
90
|
+
if (scrollY) {
|
|
91
|
+
scroll.y = scrollY;
|
|
104
92
|
}
|
|
105
93
|
// nz-table cần scroll.x để fixed left/right hoạt động.
|
|
106
|
-
if (!scroll.x && (this.autoScroll || this.hasFixedColumns)) {
|
|
94
|
+
if (!scroll.x && (this.autoScroll() || this.hasFixedColumns())) {
|
|
107
95
|
const minWidth = this.computeMinTableWidth();
|
|
108
96
|
if (minWidth > 0) {
|
|
109
97
|
scroll.x = `${minWidth}px`;
|
|
110
98
|
}
|
|
111
99
|
}
|
|
112
100
|
return scroll;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
101
|
+
});
|
|
102
|
+
mobileTitleColumn = computed(() => {
|
|
103
|
+
const mobileTitleKey = this.mobileTitleKey();
|
|
104
|
+
const visibleColumns = this.visibleColumns();
|
|
105
|
+
if (mobileTitleKey) {
|
|
106
|
+
return visibleColumns.find((col) => col.key === mobileTitleKey) ?? null;
|
|
117
107
|
}
|
|
118
|
-
const marked =
|
|
108
|
+
const marked = visibleColumns.find((col) => col.mobileTitle);
|
|
119
109
|
if (marked)
|
|
120
110
|
return marked;
|
|
121
|
-
return (
|
|
111
|
+
return (visibleColumns.find((col) => col.renderAs !== 'index' &&
|
|
122
112
|
col.renderAs !== 'actions' &&
|
|
123
113
|
!col.mobileHidden) ?? null);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const titleKey = this.mobileTitleColumn?.key;
|
|
127
|
-
return this.visibleColumns.filter((col) => col.renderAs !== 'actions' &&
|
|
114
|
+
});
|
|
115
|
+
mobileBodyColumns = computed(() => {
|
|
116
|
+
const titleKey = this.mobileTitleColumn()?.key;
|
|
117
|
+
return this.visibleColumns().filter((col) => col.renderAs !== 'actions' &&
|
|
128
118
|
col.renderAs !== 'index' &&
|
|
129
119
|
!col.mobileHidden &&
|
|
130
120
|
col.key !== titleKey);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
return this.visibleColumns.find((col) => col.renderAs === 'actions') ?? null;
|
|
134
|
-
}
|
|
121
|
+
});
|
|
122
|
+
mobileActionsColumn = computed(() => this.visibleColumns().find((col) => col.renderAs === 'actions') ?? null);
|
|
135
123
|
getRowActions(col, row) {
|
|
136
124
|
if (col.resolveActions) {
|
|
137
125
|
return col.resolveActions(row) ?? [];
|
|
@@ -194,46 +182,44 @@ export class GeoTableComponent {
|
|
|
194
182
|
return 'left';
|
|
195
183
|
}
|
|
196
184
|
getRowIndex(rowIndex) {
|
|
197
|
-
return (this.pageIndex - 1) * this.pageSize + rowIndex + 1;
|
|
185
|
+
return (this.pageIndex() - 1) * this.pageSize() + rowIndex + 1;
|
|
198
186
|
}
|
|
199
187
|
trackRow(index, row) {
|
|
200
|
-
const key = row[this.rowKey];
|
|
188
|
+
const key = row[this.rowKey()];
|
|
201
189
|
return key != null ? String(key) : String(index);
|
|
202
190
|
}
|
|
203
191
|
isRowSelected(row) {
|
|
204
|
-
const key = String(row[this.rowKey] ?? '');
|
|
205
|
-
return this.selectedKeys.includes(key);
|
|
192
|
+
const key = String(row[this.rowKey()] ?? '');
|
|
193
|
+
return this.selectedKeys().includes(key);
|
|
206
194
|
}
|
|
207
195
|
onAllChecked(checked) {
|
|
208
|
-
const rows = this.selectionRows;
|
|
209
|
-
const keys = rows.map((row) => String(row[this.rowKey] ?? ''));
|
|
196
|
+
const rows = this.selectionRows();
|
|
197
|
+
const keys = rows.map((row) => String(row[this.rowKey()] ?? ''));
|
|
210
198
|
if (checked) {
|
|
211
|
-
this.selectedKeys
|
|
199
|
+
this.selectedKeys.set([...new Set([...this.selectedKeys(), ...keys])]);
|
|
212
200
|
}
|
|
213
201
|
else {
|
|
214
|
-
this.selectedKeys
|
|
202
|
+
this.selectedKeys.set(this.selectedKeys().filter((key) => !keys.includes(key)));
|
|
215
203
|
}
|
|
216
204
|
this.refreshSelectionState();
|
|
217
205
|
this.emitSelection();
|
|
218
206
|
}
|
|
219
207
|
onItemChecked(row, checked) {
|
|
220
|
-
const key = String(row[this.rowKey] ?? '');
|
|
221
|
-
this.selectedKeys
|
|
222
|
-
? [...this.selectedKeys, key]
|
|
223
|
-
: this.selectedKeys.filter((k) => k !== key);
|
|
208
|
+
const key = String(row[this.rowKey()] ?? '');
|
|
209
|
+
this.selectedKeys.set(checked
|
|
210
|
+
? [...this.selectedKeys(), key]
|
|
211
|
+
: this.selectedKeys().filter((k) => k !== key));
|
|
224
212
|
this.refreshSelectionState();
|
|
225
213
|
this.emitSelection();
|
|
226
214
|
}
|
|
227
215
|
onPageIndexChange(index) {
|
|
228
|
-
this.pageIndex
|
|
216
|
+
this.pageIndex.set(index);
|
|
229
217
|
this.refreshSelectionState();
|
|
230
|
-
this.pageIndexChange.emit(index);
|
|
231
218
|
}
|
|
232
219
|
onPageSizeChange(size) {
|
|
233
|
-
this.pageSize
|
|
234
|
-
this.pageIndex
|
|
220
|
+
this.pageSize.set(size);
|
|
221
|
+
this.pageIndex.set(1);
|
|
235
222
|
this.refreshSelectionState();
|
|
236
|
-
this.pageSizeChange.emit(size);
|
|
237
223
|
}
|
|
238
224
|
onRowActionClick(row, actionKey) {
|
|
239
225
|
this.rowAction.emit({ row, action: actionKey });
|
|
@@ -245,7 +231,7 @@ export class GeoTableComponent {
|
|
|
245
231
|
}
|
|
246
232
|
}
|
|
247
233
|
onMobileCardClick(row, event) {
|
|
248
|
-
if (!this.clickable)
|
|
234
|
+
if (!this.clickable())
|
|
249
235
|
return;
|
|
250
236
|
const target = event.target;
|
|
251
237
|
if (target?.closest('button, a, .geo-row-actions, .geo-checkbox, .geo-table-card__footer')) {
|
|
@@ -254,8 +240,8 @@ export class GeoTableComponent {
|
|
|
254
240
|
this.rowClick.emit(row);
|
|
255
241
|
}
|
|
256
242
|
computeMinTableWidth() {
|
|
257
|
-
let total = this.selectable ? 48 : 0;
|
|
258
|
-
for (const col of this.visibleColumns) {
|
|
243
|
+
let total = this.selectable() ? 48 : 0;
|
|
244
|
+
for (const col of this.visibleColumns()) {
|
|
259
245
|
const width = col.width;
|
|
260
246
|
if (width?.endsWith('px')) {
|
|
261
247
|
total += Number.parseInt(width, 10);
|
|
@@ -267,115 +253,29 @@ export class GeoTableComponent {
|
|
|
267
253
|
return total;
|
|
268
254
|
}
|
|
269
255
|
refreshSelectionState() {
|
|
270
|
-
const rows = this.selectionRows;
|
|
271
|
-
const selectedOnPage = rows.filter((row) => this.selectedKeys.includes(String(row[this.rowKey] ?? ''))).length;
|
|
272
|
-
this.allChecked
|
|
273
|
-
this.indeterminate
|
|
274
|
-
this.selectedKeysChange.emit([...this.selectedKeys]);
|
|
256
|
+
const rows = this.selectionRows();
|
|
257
|
+
const selectedOnPage = rows.filter((row) => this.selectedKeys().includes(String(row[this.rowKey()] ?? ''))).length;
|
|
258
|
+
this.allChecked.set(selectedOnPage > 0 && selectedOnPage === rows.length);
|
|
259
|
+
this.indeterminate.set(selectedOnPage > 0 && selectedOnPage < rows.length);
|
|
275
260
|
}
|
|
276
|
-
|
|
277
|
-
return this.showPagination && this.frontPagination ? this.paginatedData : this.data;
|
|
261
|
+
selectionRows() {
|
|
262
|
+
return this.showPagination() && this.frontPagination() ? this.paginatedData() : this.data();
|
|
278
263
|
}
|
|
279
264
|
emitSelection() {
|
|
280
|
-
const selected = this.data.filter((row) => this.selectedKeys.includes(String(row[this.rowKey] ?? '')));
|
|
265
|
+
const selected = this.data().filter((row) => this.selectedKeys().includes(String(row[this.rowKey()] ?? '')));
|
|
281
266
|
this.selectionChange.emit(selected);
|
|
282
267
|
}
|
|
283
268
|
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"] }] });
|
|
269
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoTableComponent, isStandalone: true, selector: "geo-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, outerBordered: { classPropertyName: "outerBordered", publicName: "outerBordered", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, tableLayout: { classPropertyName: "tableLayout", publicName: "tableLayout", isSignal: true, isRequired: false, transformFunction: null }, showPagination: { classPropertyName: "showPagination", publicName: "showPagination", isSignal: true, isRequired: false, transformFunction: null }, frontPagination: { classPropertyName: "frontPagination", publicName: "frontPagination", isSignal: true, isRequired: false, transformFunction: null }, pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, showSizeChanger: { classPropertyName: "showSizeChanger", publicName: "showSizeChanger", isSignal: true, isRequired: false, transformFunction: null }, showQuickJumper: { classPropertyName: "showQuickJumper", publicName: "showQuickJumper", isSignal: true, isRequired: false, transformFunction: null }, hideOnSinglePage: { classPropertyName: "hideOnSinglePage", publicName: "hideOnSinglePage", isSignal: true, isRequired: false, transformFunction: null }, simplePagination: { classPropertyName: "simplePagination", publicName: "simplePagination", isSignal: true, isRequired: false, transformFunction: null }, paginationPosition: { classPropertyName: "paginationPosition", publicName: "paginationPosition", isSignal: true, isRequired: false, transformFunction: null }, scroll: { classPropertyName: "scroll", publicName: "scroll", isSignal: true, isRequired: false, transformFunction: null }, scrollY: { classPropertyName: "scrollY", publicName: "scrollY", isSignal: true, isRequired: false, transformFunction: null }, autoScroll: { classPropertyName: "autoScroll", publicName: "autoScroll", isSignal: true, isRequired: false, transformFunction: null }, tableTitle: { classPropertyName: "tableTitle", publicName: "tableTitle", isSignal: true, isRequired: false, transformFunction: null }, footer: { classPropertyName: "footer", publicName: "footer", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, showTotalRange: { classPropertyName: "showTotalRange", publicName: "showTotalRange", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, rowKey: { classPropertyName: "rowKey", publicName: "rowKey", isSignal: true, isRequired: false, transformFunction: null }, selectedKeys: { classPropertyName: "selectedKeys", publicName: "selectedKeys", isSignal: true, isRequired: false, transformFunction: null }, mobileTitleKey: { classPropertyName: "mobileTitleKey", publicName: "mobileTitleKey", isSignal: true, isRequired: false, transformFunction: null }, mobileCardView: { classPropertyName: "mobileCardView", publicName: "mobileCardView", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageIndex: "pageIndexChange", pageSize: "pageSizeChange", selectedKeys: "selectedKeysChange", rowClick: "rowClick", rowEdit: "rowEdit", rowMore: "rowMore", rowAction: "rowAction", queryParams: "queryParams", currentPageDataChange: "currentPageDataChange", selectionChange: "selectionChange" }, 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: 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
285
270
|
}
|
|
286
271
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoTableComponent, decorators: [{
|
|
287
272
|
type: Component,
|
|
288
273
|
args: [{ selector: 'geo-table', standalone: true, imports: [
|
|
289
|
-
CommonModule,
|
|
290
274
|
NgZorroAntdModule,
|
|
291
275
|
GeoStatusTagComponent,
|
|
292
276
|
GeoRowActionsComponent,
|
|
293
277
|
GeoCheckboxComponent,
|
|
294
278
|
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
|
-
}],
|
|
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=
|
|
279
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, 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"] }]
|
|
280
|
+
}], ctorParameters: () => [] });
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby10YWJsZS9nZW8tdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXRhYmxlL2dlby10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHNCQUFzQixHQUV2QixNQUFNLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3BHLE9BQU8sRUFDTCxrQ0FBa0MsR0FHbkMsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBZ0IzQixNQUFNLE9BQU8saUJBQWlCO0lBQ25CLE9BQU8sR0FBRyxLQUFLLENBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLElBQUksR0FBRyxLQUFLLENBQTRCLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJ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LENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDMUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQy9ELENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QyxDQUFDO3dHQXpWVSxpQkFBaUI7NEZBQWpCLGlCQUFpQiw0b0pDekM5QixtOFRBMFBBLHkzU0QzTkksaUJBQWlCLHl4RUFDakIscUJBQXFCLG1HQUNyQixzQkFBc0IsK0lBQ3RCLG9CQUFvQixnSkFDcEIsMkJBQTJCOzs0RkFNbEIsaUJBQWlCO2tCQWQ3QixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1A7d0JBQ1AsaUJBQWlCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLHNCQUFzQjt3QkFDdEIsb0JBQW9CO3dCQUNwQiwyQkFBMkI7cUJBQzVCLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ1pvcnJvQW50ZE1vZHVsZSB9IGZyb20gJy4uLy4uL25nLXpvcnJvL25nLXpvcnJvLWFudGQubW9kdWxlJztcbmltcG9ydCB7IE56VGFibGVRdWVyeVBhcmFtcywgTnpUYWJsZVNpemUgfSBmcm9tICduZy16b3Jyby1hbnRkL3RhYmxlJztcbmltcG9ydCB7IEdlb1Jvd0FjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL2dlby1yb3ctYWN0aW9ucy9nZW8tcm93LWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIHBpY2tJbmxpbmVSb3dBY3Rpb25zLFxuICBwaWNrT3ZlcmZsb3dSb3dBY3Rpb25zLFxuICB0eXBlIEdlb1Jvd0FjdGlvbixcbn0gZnJvbSAnLi9nZW8tcm93LWFjdGlvbnMvZ2VvLXJvdy1hY3Rpb25zLnR5cGVzJztcbmltcG9ydCB7IEdlb1N0YXR1c1RhZ0NvbXBvbmVudCB9IGZyb20gJy4uL2dlby1zdGF0dXMtdGFnL2dlby1zdGF0dXMtdGFnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9DaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2dlby1jaGVja2JveC9nZW8tY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IEdlb1RhYmxlUGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vZ2VvLXRhYmxlLXBhZ2luYXRpb24vZ2VvLXRhYmxlLXBhZ2luYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7XG4gIERFRkFVTFRfVUlfVEFCTEVfUEFHRV9TSVpFX09QVElPTlMsXG4gIEdlb1RhYmxlQ29sdW1uLFxuICBHZW9UYWJsZVBhZ2luYXRpb25Qb3NpdGlvbixcbn0gZnJvbSAnLi9nZW8tdGFibGUudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdab3Jyb0FudGRNb2R1bGUsXG4gICAgR2VvU3RhdHVzVGFnQ29tcG9uZW50LFxuICAgIEdlb1Jvd0FjdGlvbnNDb21wb25lbnQsXG4gICAgR2VvQ2hlY2tib3hDb21wb25lbnQsXG4gICAgR2VvVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby10YWJsZS5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBHZW9UYWJsZUNvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGNvbHVtbnMgPSBpbnB1dDxHZW9UYWJsZUNvbHVtbltdPihbXSk7XG4gIHJlYWRvbmx5IGRhdGEgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPihbXSk7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IGJvcmRlcmVkID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IG91dGVyQm9yZGVyZWQgPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IHNpemUgPSBpbnB1dDxOelRhYmxlU2l6ZT4oJ21pZGRsZScpO1xuICByZWFkb25seSBzdHJpcGVkID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IGNsaWNrYWJsZSA9IGlucHV0KHRydWUpO1xuICByZWFkb25seSB0YWJsZUxheW91dCA9IGlucHV0PCdhdXRvJyB8ICdmaXhlZCc+KCdhdXRvJyk7XG5cbiAgcmVhZG9ubHkgc2hvd1BhZ2luYXRpb24gPSBpbnB1dCh0cnVlKTtcbiAgcmVhZG9ubHkgZnJvbnRQYWdpbmF0aW9uID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IHBhZ2VJbmRleCA9IG1vZGVsKDEpO1xuICByZWFkb25seSBwYWdlU2l6ZSA9IG1vZGVsKDEwKTtcbiAgcmVhZG9ubHkgdG90YWwgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IHBhZ2VTaXplT3B0aW9ucyA9IGlucHV0PG51bWJlcltdPihERUZBVUxUX1VJX1RBQkxFX1BBR0VfU0laRV9PUFRJT05TKTtcbiAgcmVhZG9ubHkgc2hvd1NpemVDaGFuZ2VyID0gaW5wdXQoZmFsc2UpO1xuICByZWFkb25seSBzaG93UXVpY2tKdW1wZXIgPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IGhpZGVPblNpbmdsZVBhZ2UgPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IHNpbXBsZVBhZ2luYXRpb24gPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IHBhZ2luYXRpb25Qb3NpdGlvbiA9IGlucHV0PEdlb1RhYmxlUGFnaW5hdGlvblBvc2l0aW9uPignYm90dG9tJyk7XG5cbiAgcmVhZG9ubHkgc2Nyb2xsID0gaW5wdXQ8eyB4Pzogc3RyaW5nOyB5Pzogc3RyaW5nIH0+KHt9KTtcbiAgcmVhZG9ubHkgc2Nyb2xsWSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIFThu7EgYuG6rXQgc2Nyb2xsIG5nYW5nIHRoZW8gdOG7lW5nIHdpZHRoIGPhu5l0LlxuICAgKiBLaGkgY8OzIGPhu5l0IGBmaXhlZGAsIHNjcm9sbC54IGx1w7RuIMSRxrDhu6NjIHTDrW5oIChi4bqvdCBideG7mWMgduG7m2kgbnotdGFibGUgZml4ZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b1Njcm9sbCA9IGlucHV0KGZhbHNlKTtcblxuICByZWFkb25seSB0YWJsZVRpdGxlID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBmb290ZXIgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGVtcHR5VGV4dCA9IGlucHV0KCdLaMO0bmcgY8OzIGThu68gbGnhu4d1Jyk7XG5cbiAgcmVhZG9ubHkgc2hvd1RvdGFsUmFuZ2UgPSBpbnB1dChmYWxzZSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0YWJsZSA9IGlucHV0KGZhbHNlKTtcbiAgcmVhZG9ubHkgcm93S2V5ID0gaW5wdXQoJ2lkJyk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkS2V5cyA9IG1vZGVsPHN0cmluZ1tdPihbXSk7XG5cbiAgLyoqXG4gICAqIE1vYmlsZSBjYXJkOiBrZXkgY+G7mXQgbMOgbSB0acOqdSDEkeG7gS5cbiAgICogxq91IHRpw6puIGjGoW4gYGNvbHVtbi5tb2JpbGVUaXRsZWA7IG7hur91IGtow7RuZyBzZXQgdGjDrCBs4bqleSBj4buZdCBk4buvIGxp4buHdSDEkeG6p3UgdGnDqm4uXG4gICAqL1xuICByZWFkb25seSBtb2JpbGVUaXRsZUtleSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIELhuq10L3Thuq90IGNodXnhu4NuIGNhcmQgdHLDqm4gbW9iaWxlICht4bq3YyDEkeG7i25oIGLhuq10KS4gKi9cbiAgcmVhZG9ubHkgbW9iaWxlQ2FyZFZpZXcgPSBpbnB1dCh0cnVlKTtcblxuICByZWFkb25seSByb3dDbGljayA9IG91dHB1dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgcm93RWRpdCA9IG91dHB1dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgcm93TW9yZSA9IG91dHB1dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgcm93QWN0aW9uID0gb3V0cHV0PHsgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgYWN0aW9uOiBzdHJpbmcgfT4oKTtcbiAgcmVhZG9ubHkgcXVlcnlQYXJhbXMgPSBvdXRwdXQ8TnpUYWJsZVF1ZXJ5UGFyYW1zPigpO1xuICByZWFkb25seSBjdXJyZW50UGFnZURhdGFDaGFuZ2UgPSBvdXRwdXQ8cmVhZG9ubHkgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+KCk7XG5cbiAgcmVhZG9ubHkgYWxsQ2hlY2tlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGluZGV0ZXJtaW5hdGUgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgc29ydEZuQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgKGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBiOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gbnVtYmVyPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMoKTtcbiAgICAgIHRoaXMuc29ydEZuQ2FjaGUuY2xlYXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRvbmx5IHZpc2libGVDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb2x1bW5zKCkuZmlsdGVyKChjb2wpID0+IGNvbC52aXNpYmxlICE9PSBmYWxzZSkpO1xuXG4gIHJlYWRvbmx5IGNvbXB1dGVkVG90YWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRvdGFsKCkgPz8gdGhpcy5kYXRhKCkubGVuZ3RoKTtcblxuICByZWFkb25seSBwYWdpbmF0ZWREYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5zaG93UGFnaW5hdGlvbigpIHx8ICF0aGlzLmZyb250UGFnaW5hdGlvbigpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5wYWdlSW5kZXgoKSAtIDEpICogdGhpcy5wYWdlU2l6ZSgpO1xuICAgIHJldHVybiB0aGlzLmRhdGEoKS5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLnBhZ2VTaXplKCkpO1xuICB9KTtcblxuICByZWFkb25seSBzaG91bGRTaG93UGFnaW5hdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2hvd1BhZ2luYXRpb24oKSk7XG5cbiAgcmVhZG9ubHkgaGFzRml4ZWRDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoY29sKSA9PiBjb2wuZml4ZWQgPT09ICdsZWZ0JyB8fCBjb2wuZml4ZWQgPT09ICdyaWdodCcpXG4gICk7XG5cbiAgLyoqIEPDsyBj4buZdCBmaXhlZCDihpIgdGFibGUtbGF5b3V0IGZpeGVkIMSR4buDIGhlYWRlci9ib2R5IGPDuW5nIHdpZHRoIGPhu5l0LiAqL1xuICByZWFkb25seSBjb21wdXRlZFRhYmxlTGF5b3V0ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmhhc0ZpeGVkQ29sdW1ucygpID8gJ2ZpeGVkJyA6IHRoaXMudGFibGVMYXlvdXQoKVxuICApO1xuXG4gIC8qKiDEkOG7k25nIGLhu5kgd2lkdGggY+G7mXQga2hpIHNjcm9sbFkgdMOhY2ggaGVhZGVyL2JvZHkgdGjDoG5oIDIgYuG6o25nLiAqL1xuICByZWFkb25seSB3aWR0aENvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB3aWR0aHMgPSB0aGlzLnZpc2libGVDb2x1bW5zKCkubWFwKChjb2wpID0+IGNvbC53aWR0aCA/PyBudWxsKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlKCkgPyBbJzQ4cHgnLCAuLi53aWR0aHNdIDogd2lkdGhzO1xuICB9KTtcblxuICByZWFkb25seSBjb21wdXRlZFNjcm9sbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzY3JvbGwgPSB7IC4uLnRoaXMuc2Nyb2xsKCkgfTtcbiAgICBjb25zdCBzY3JvbGxZID0gdGhpcy5zY3JvbGxZKCk7XG5cbiAgICBpZiAoc2Nyb2xsWSkge1xuICAgICAgc2Nyb2xsLnkgPSBzY3JvbGxZO1xuICAgIH1cblxuICAgIC8vIG56LXRhYmxlIGPhuqduIHNjcm9sbC54IMSR4buDIGZpeGVkIGxlZnQvcmlnaHQgaG/huqF0IMSR4buZbmcuXG4gICAgaWYgKCFzY3JvbGwueCAmJiAodGhpcy5hdXRvU2Nyb2xsKCkgfHwgdGhpcy5oYXNGaXhlZENvbHVtbnMoKSkpIHtcbiAgICAgIGNvbnN0IG1pbldpZHRoID0gdGhpcy5jb21wdXRlTWluVGFibGVXaWR0aCgpO1xuICAgICAgaWYgKG1pbldpZHRoID4gMCkge1xuICAgICAgICBzY3JvbGwueCA9IGAke21pbldpZHRofXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2Nyb2xsO1xuICB9KTtcblxuICByZWFkb25seSBtb2JpbGVUaXRsZUNvbHVtbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtb2JpbGVUaXRsZUtleSA9IHRoaXMubW9iaWxlVGl0bGVLZXkoKTtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKTtcbiAgICBpZiAobW9iaWxlVGl0bGVLZXkpIHtcbiAgICAgIHJldHVybiB2aXNpYmxlQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5rZXkgPT09IG1vYmlsZVRpdGxlS2V5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcmtlZCA9IHZpc2libGVDb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm1vYmlsZVRpdGxlKTtcbiAgICBpZiAobWFya2VkKSByZXR1cm4gbWFya2VkO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHZpc2libGVDb2x1bW5zLmZpbmQoXG4gICAgICAgIChjb2wpID0+XG4gICAgICAgICAgY29sLnJlbmRlckFzICE9PSAnaW5kZXgnICYmXG4gICAgICAgICAgY29sLnJlbmRlckFzICE9PSAnYWN0aW9ucycgJiZcbiAgICAgICAgICAhY29sLm1vYmlsZUhpZGRlblxuICAgICAgKSA/PyBudWxsXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbW9iaWxlQm9keUNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdGl0bGVLZXkgPSB0aGlzLm1vYmlsZVRpdGxlQ29sdW1uKCk/LmtleTtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucygpLmZpbHRlcihcbiAgICAgIChjb2wpID0+XG4gICAgICAgIGNvbC5yZW5kZXJBcyAhPT0gJ2FjdGlvbnMnICYmXG4gICAgICAgIGNvbC5yZW5kZXJBcyAhPT0gJ2luZGV4JyAmJlxuICAgICAgICAhY29sLm1vYmlsZUhpZGRlbiAmJlxuICAgICAgICBjb2wua2V5ICE9PSB0aXRsZUtleVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IG1vYmlsZUFjdGlvbnNDb2x1bW4gPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnZpc2libGVDb2x1bW5zKCkuZmluZCgoY29sKSA9PiBjb2wucmVuZGVyQXMgPT09ICdhY3Rpb25zJykgPz8gbnVsbFxuICApO1xuXG4gIGdldFJvd0FjdGlvbnMoY29sOiBHZW9UYWJsZUNvbHVtbiwgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEdlb1Jvd0FjdGlvbltdIHtcbiAgICBpZiAoY29sLnJlc29sdmVBY3Rpb25zKSB7XG4gICAgICByZXR1cm4gY29sLnJlc29sdmVBY3Rpb25zKHJvdykgPz8gW107XG4gICAgfVxuICAgIHJldHVybiBjb2wuYWN0aW9ucyA/PyBbXTtcbiAgfVxuXG4gIGdldE1vYmlsZUhlYWRlckFjdGlvbnMoXG4gICAgY29sOiBHZW9UYWJsZUNvbHVtbixcbiAgICByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IEdlb1Jvd0FjdGlvbltdIHtcbiAgICByZXR1cm4gcGlja0lubGluZVJvd0FjdGlvbnMoXG4gICAgICB0aGlzLmdldFJvd0FjdGlvbnMoY29sLCByb3cpLFxuICAgICAgY29sLnByaW1hcnlBY3Rpb25LZXkgPz8gJ2VkaXQnXG4gICAgKTtcbiAgfVxuXG4gIGdldE1vYmlsZUZvb3RlckFjdGlvbnMoXG4gICAgY29sOiBHZW9UYWJsZUNvbHVtbixcbiAgICByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IEdlb1Jvd0FjdGlvbltdIHtcbiAgICByZXR1cm4gcGlja092ZXJmbG93Um93QWN0aW9ucyhcbiAgICAgIHRoaXMuZ2V0Um93QWN0aW9ucyhjb2wsIHJvdyksXG4gICAgICBjb2wucHJpbWFyeUFjdGlvbktleSA/PyAnZWRpdCdcbiAgICApO1xuICB9XG5cbiAgaGFzRmlsdGVycyhjb2w6IEdlb1RhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChjb2wuZmlsdGVycz8ubGVuZ3RoID8/IDApID4gMDtcbiAgfVxuXG4gIGdldFNvcnRGbihjb2w6IEdlb1RhYmxlQ29sdW1uKTogKGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBiOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gbnVtYmVyIHtcbiAgICBpZiAoY29sLnNvcnRGbikge1xuICAgICAgcmV0dXJuIGNvbC5zb3J0Rm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5zb3J0Rm5DYWNoZS5nZXQoY29sLmtleSk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG5cbiAgICBjb25zdCBmbiA9IChhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGNvbnN0IGF2ID0gYVtjb2wua2V5XTtcbiAgICAgIGNvbnN0IGJ2ID0gYltjb2wua2V5XTtcbiAgICAgIGlmIChhdiA9PSBudWxsIHx8IGJ2ID09IG51bGwpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIFN0cmluZyhhdikubG9jYWxlQ29tcGFyZShTdHJpbmcoYnYpLCAndmknKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zb3J0Rm5DYWNoZS5zZXQoY29sLmtleSwgZm4pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIGdldENlbGxWYWx1ZShyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWUgPSByb3dba2V5XTtcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUacOqdSDEkeG7gSBj4buZdCBsdcO0biBjxINuIGdp4buvYSB0aGVvIHF1eSB04bqvYyBhY2Nlc3NpYmlsaXR5ICovXG4gIGdldEhlYWRlckFsaWduKF9jb2w6IEdlb1RhYmxlQ29sdW1uKTogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnIHtcbiAgICByZXR1cm4gJ2NlbnRlcic7XG4gIH1cblxuICAvKipcbiAgICogQ8SDbiBs4buBIMO0IGThu68gbGnhu4d1OlxuICAgKiAtIHRleHQg4oaSIHRyw6FpLCBudW1iZXIg4oaSIHBo4bqjaSwgZGF0ZSDihpIgZ2nhu69hXG4gICAqIC0gaW5kZXggLyBzdGF0dXMgLyBhY3Rpb25zIOKGkiBnaeG7r2FcbiAgICovXG4gIGdldENlbGxBbGlnbihjb2w6IEdlb1RhYmxlQ29sdW1uKTogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnIHtcbiAgICBpZiAoY29sLmFsaWduKSB7XG4gICAgICByZXR1cm4gY29sLmFsaWduO1xuICAgIH1cblxuICAgIGlmIChjb2wucmVuZGVyQXMgPT09ICdpbmRleCcgfHwgY29sLnJlbmRlckFzID09PSAnc3RhdHVzJyB8fCBjb2wucmVuZGVyQXMgPT09ICdhY3Rpb25zJykge1xuICAgICAgcmV0dXJuICdjZW50ZXInO1xuICAgIH1cblxuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9XG5cbiAgICBpZiAoY29sLmRhdGFUeXBlID09PSAnZGF0ZScpIHtcbiAgICAgIHJldHVybiAnY2VudGVyJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9XG5cbiAgZ2V0Um93SW5kZXgocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnBhZ2VJbmRleCgpIC0gMSkgKiB0aGlzLnBhZ2VTaXplKCkgKyByb3dJbmRleCArIDE7XG4gIH1cblxuICB0cmFja1JvdyhpbmRleDogbnVtYmVyLCByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgICBjb25zdCBrZXkgPSByb3dbdGhpcy5yb3dLZXkoKV07XG4gICAgcmV0dXJuIGtleSAhPSBudWxsID8gU3RyaW5nKGtleSkgOiBTdHJpbmcoaW5kZXgpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gU3RyaW5nKHJvd1t0aGlzLnJvd0tleSgpXSA/PyAnJyk7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRLZXlzKCkuaW5jbHVkZXMoa2V5KTtcbiAgfVxuXG4gIG9uQWxsQ2hlY2tlZChjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuc2VsZWN0aW9uUm93cygpO1xuICAgIGNvbnN0IGtleXMgPSByb3dzLm1hcCgocm93KSA9PiBTdHJpbmcocm93W3RoaXMucm93S2V5KCldID8/ICcnKSk7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleXMuc2V0KFsuLi5uZXcgU2V0KFsuLi50aGlzLnNlbGVjdGVkS2V5cygpLCAuLi5rZXlzXSldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleXMuc2V0KHRoaXMuc2VsZWN0ZWRLZXlzKCkuZmlsdGVyKChrZXkpID0+ICFrZXlzLmluY2x1ZGVzKGtleSkpKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbigpO1xuICB9XG5cbiAgb25JdGVtQ2hlY2tlZChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gU3RyaW5nKHJvd1t0aGlzLnJvd0tleSgpXSA/PyAnJyk7XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuc2V0KFxuICAgICAgY2hlY2tlZFxuICAgICAgICA/IFsuLi50aGlzLnNlbGVjdGVkS2V5cygpLCBrZXldXG4gICAgICAgIDogdGhpcy5zZWxlY3RlZEtleXMoKS5maWx0ZXIoKGspID0+IGsgIT09IGtleSlcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaFNlbGVjdGlvblN0YXRlKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBvblBhZ2VJbmRleENoYW5nZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXguc2V0KGluZGV4KTtcbiAgICB0aGlzLnJlZnJlc2hTZWxlY3Rpb25TdGF0ZSgpO1xuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplLnNldChzaXplKTtcbiAgICB0aGlzLnBhZ2VJbmRleC5zZXQoMSk7XG4gICAgdGhpcy5yZWZyZXNoU2VsZWN0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIG9uUm93QWN0aW9uQ2xpY2socm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYWN0aW9uS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvd0FjdGlvbi5lbWl0KHsgcm93LCBhY3Rpb246IGFjdGlvbktleSB9KTtcblxuICAgIGlmIChhY3Rpb25LZXkgPT09ICdlZGl0Jykge1xuICAgICAgdGhpcy5yb3dFZGl0LmVtaXQocm93KTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uS2V5ID09PSAnbW9yZScpIHtcbiAgICAgIHRoaXMucm93TW9yZS5lbWl0KHJvdyk7XG4gICAgfVxuICB9XG5cbiAgb25Nb2JpbGVDYXJkQ2xpY2socm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNsaWNrYWJsZSgpKSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAodGFyZ2V0Py5jbG9zZXN0KCdidXR0b24sIGEsIC5nZW8tcm93LWFjdGlvbnMsIC5nZW8tY2hlY2tib3gsIC5nZW8tdGFibGUtY2FyZF9fZm9vdGVyJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHJvdyk7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVNaW5UYWJsZVdpZHRoKCk6IG51bWJlciB7XG4gICAgbGV0IHRvdGFsID0gdGhpcy5zZWxlY3RhYmxlKCkgPyA0OCA6IDA7XG5cbiAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnZpc2libGVDb2x1bW5zKCkpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gY29sLndpZHRoO1xuICAgICAgaWYgKHdpZHRoPy5lbmRzV2l0aCgncHgnKSkge1xuICAgICAgICB0b3RhbCArPSBOdW1iZXIucGFyc2VJbnQod2lkdGgsIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvdGFsICs9IDE2MDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG90YWw7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hTZWxlY3Rpb25TdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCByb3dzID0gdGhpcy5zZWxlY3Rpb25Sb3dzKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRPblBhZ2UgPSByb3dzLmZpbHRlcigocm93KSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMoKS5pbmNsdWRlcyhTdHJpbmcocm93W3RoaXMucm93S2V5KCldID8/ICcnKSlcbiAgICApLmxlbmd0aDtcblxuICAgIHRoaXMuYWxsQ2hlY2tlZC5zZXQoc2VsZWN0ZWRPblBhZ2UgPiAwICYmIHNlbGVjdGVkT25QYWdlID09PSByb3dzLmxlbmd0aCk7XG4gICAgdGhpcy5pbmRldGVybWluYXRlLnNldChzZWxlY3RlZE9uUGFnZSA+IDAgJiYgc2VsZWN0ZWRPblBhZ2UgPCByb3dzLmxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdGlvblJvd3MoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1BhZ2luYXRpb24oKSAmJiB0aGlzLmZyb250UGFnaW5hdGlvbigpID8gdGhpcy5wYWdpbmF0ZWREYXRhKCkgOiB0aGlzLmRhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZGF0YSgpLmZpbHRlcigocm93KSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZEtleXMoKS5pbmNsdWRlcyhTdHJpbmcocm93W3RoaXMucm93S2V5KCldID8/ICcnKSlcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZ2VvLXRhYmxlXCJcbiAgW2NsYXNzLmdlby10YWJsZS0tc3RyaXBlZF09XCJzdHJpcGVkKClcIlxuICBbY2xhc3MuZ2VvLXRhYmxlLS1tb2JpbGUtY2FyZHNdPVwibW9iaWxlQ2FyZFZpZXcoKVwiXG4+XG4gIEBpZiAoc2hvdWxkU2hvd1BhZ2luYXRpb24oKSAmJiAocGFnaW5hdGlvblBvc2l0aW9uKCkgPT09ICd0b3AnIHx8IHBhZ2luYXRpb25Qb3NpdGlvbigpID09PSAnYm90aCcpKSB7XG4gICAgPGdlby10YWJsZS1wYWdpbmF0aW9uXG4gICAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleCgpXCJcbiAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCJcbiAgICAgIFt0b3RhbF09XCJjb21wdXRlZFRvdGFsKClcIlxuICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnMoKVwiXG4gICAgICBbc2hvd1NpemVDaGFuZ2VyXT1cInNob3dTaXplQ2hhbmdlcigpXCJcbiAgICAgIFtoaWRlT25TaW5nbGVQYWdlXT1cImhpZGVPblNpbmdsZVBhZ2UoKVwiXG4gICAgICBbc2hvd1RvdGFsUmFuZ2VdPVwic2hvd1RvdGFsUmFuZ2UoKVwiXG4gICAgICAocGFnZUluZGV4Q2hhbmdlKT1cIm9uUGFnZUluZGV4Q2hhbmdlKCRldmVudClcIlxuICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvZ2VvLXRhYmxlLXBhZ2luYXRpb24+XG4gIH1cblxuICA8ZGl2IGNsYXNzPVwiZ2VvLXRhYmxlX19kZXNrdG9wXCI+XG4gICAgPG56LXRhYmxlXG4gICAgICAjdWlUYWJsZVxuICAgICAgW256RGF0YV09XCJwYWdpbmF0ZWREYXRhKClcIlxuICAgICAgW256TG9hZGluZ109XCJsb2FkaW5nKClcIlxuICAgICAgW256Qm9yZGVyZWRdPVwiYm9yZGVyZWQoKVwiXG4gICAgICBbbnpPdXRlckJvcmRlcmVkXT1cIm91dGVyQm9yZGVyZWQoKVwiXG4gICAgICBbbnpTaXplXT1cInNpemUoKVwiXG4gICAgICBbbnpUaXRsZV09XCJ0YWJsZVRpdGxlKCkgPz8gbnVsbFwiXG4gICAgICBbbnpGb290ZXJdPVwiZm9vdGVyKCkgPz8gbnVsbFwiXG4gICAgICBbbnpTaG93UGFnaW5hdGlvbl09XCJmYWxzZVwiXG4gICAgICBbbnpGcm9udFBhZ2luYXRpb25dPVwiZmFsc2VcIlxuICAgICAgW256U2Nyb2xsXT1cImNvbXB1dGVkU2Nyb2xsKClcIlxuICAgICAgW256Tm9SZXN1bHRdPVwiZW1wdHlUZXh0KClcIlxuICAgICAgW256VGFibGVMYXlvdXRdPVwiY29tcHV0ZWRUYWJsZUxheW91dCgpXCJcbiAgICAgIFtueldpZHRoQ29uZmlnXT1cIndpZHRoQ29uZmlnKClcIlxuICAgICAgKG56UXVlcnlQYXJhbXMpPVwicXVlcnlQYXJhbXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChuekN1cnJlbnRQYWdlRGF0YUNoYW5nZSk9XCJjdXJyZW50UGFnZURhdGFDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICBAaWYgKHNlbGVjdGFibGUoKSkge1xuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgIGNsYXNzPVwiZ2VvLXRhYmxlX19jaGVja2JveC1jZWxsXCJcbiAgICAgICAgICAgICAgbnpXaWR0aD1cIjQ4cHhcIlxuICAgICAgICAgICAgICBbbnpMZWZ0XT1cImhhc0ZpeGVkQ29sdW1ucygpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGdlby1jaGVja2JveFxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbENoZWNrZWQoKVwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaW5kZXRlcm1pbmF0ZSgpXCJcbiAgICAgICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJvbkFsbENoZWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2dlby1jaGVja2JveD5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wua2V5KSB7XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgW256V2lkdGhdPVwiY29sLndpZHRoID8/IG51bGxcIlxuICAgICAgICAgICAgICBbbnpBbGlnbl09XCJnZXRIZWFkZXJBbGlnbihjb2wpXCJcbiAgICAgICAgICAgICAgW256Q29sdW1uS2V5XT1cImNvbC5rZXlcIlxuICAgICAgICAgICAgICBbbnpTaG93U29ydF09XCJjb2wuc29ydGFibGUgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICBbbnpTb3J0T3JkZXJdPVwiY29sLnNvcnRPcmRlciA/PyBudWxsXCJcbiAgICAgICAgICAgICAgW256U29ydEZuXT1cImNvbC5zb3J0YWJsZSA/IGdldFNvcnRGbihjb2wpIDogbnVsbFwiXG4gICAgICAgICAgICAgIFtuelNob3dGaWx0ZXJdPVwiaGFzRmlsdGVycyhjb2wpXCJcbiAgICAgICAgICAgICAgW256RmlsdGVyc109XCJjb2wuZmlsdGVycyA/PyBbXVwiXG4gICAgICAgICAgICAgIFtuekZpbHRlck11bHRpcGxlXT1cImNvbC5maWx0ZXJNdWx0aXBsZSA/PyB0cnVlXCJcbiAgICAgICAgICAgICAgW256TGVmdF09XCJjb2wuZml4ZWQgPT09ICdsZWZ0J1wiXG4gICAgICAgICAgICAgIFtuelJpZ2h0XT1cImNvbC5maXhlZCA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICA+e3sgY29sLnRpdGxlIH19PC90aD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICBAZm9yIChyb3cgb2YgdWlUYWJsZS5kYXRhOyB0cmFjayB0cmFja1JvdygkaW5kZXgsIHJvdyk7IGxldCByb3dJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgIDx0clxuICAgICAgICAgICAgY2xhc3M9XCJnZW8tdGFibGVfX3Jvd1wiXG4gICAgICAgICAgICBbY2xhc3MuZ2VvLXRhYmxlX19yb3ctLXNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICBbY2xhc3MuZ2VvLXRhYmxlX19yb3ctLWNsaWNrYWJsZV09XCJjbGlja2FibGUoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xpY2thYmxlKCkgJiYgcm93Q2xpY2suZW1pdChyb3cpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKHNlbGVjdGFibGUoKSkge1xuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImdlby10YWJsZV9fY2hlY2tib3gtY2VsbFwiXG4gICAgICAgICAgICAgICAgW256TGVmdF09XCJoYXNGaXhlZENvbHVtbnMoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Z2VvLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwib25JdGVtQ2hlY2tlZChyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2dlby1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wua2V5KSB7XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIFtuekFsaWduXT1cImdldENlbGxBbGlnbihjb2wpXCJcbiAgICAgICAgICAgICAgICBbbnpFbGxpcHNpc109XCJjb2wud3JhcCA/IGZhbHNlIDogKGNvbC5lbGxpcHNpcyA/PyBmYWxzZSlcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5nZW8tdGFibGVfX2NlbGwtLXdyYXBdPVwiY29sLndyYXBcIlxuICAgICAgICAgICAgICAgIFtuekxlZnRdPVwiY29sLmZpeGVkID09PSAnbGVmdCdcIlxuICAgICAgICAgICAgICAgIFtuelJpZ2h0XT1cImNvbC5maXhlZCA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aCB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWluV2lkdGhdPVwiY29sLndpZHRoIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXhXaWR0aF09XCJjb2wuZml4ZWQgPyAoY29sLndpZHRoIHx8IG51bGwpIDogbnVsbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKGNvbC5yZW5kZXJBcyA9PT0gJ2luZGV4Jykge1xuICAgICAgICAgICAgICAgICAge3sgZ2V0Um93SW5kZXgocm93SW5kZXgpIH19XG4gICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoY29sLnJlbmRlckFzID09PSAnc3RhdHVzJykge1xuICAgICAgICAgICAgICAgICAgPGdlby1zdGF0dXMtdGFnXG4gICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwiZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sLnN0YXR1c0xhYmVsS2V5ID8gZ2V0Q2VsbFZhbHVlKHJvdywgY29sLnN0YXR1c0xhYmVsS2V5KSB8fCB1bmRlZmluZWQgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgPjwvZ2VvLXN0YXR1cy10YWc+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoY29sLnJlbmRlckFzID09PSAnYWN0aW9ucycpIHtcbiAgICAgICAgICAgICAgICAgIDxnZW8tcm93LWFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbnNdPVwiZ2V0Um93QWN0aW9ucyhjb2wsIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbcHJpbWFyeUFjdGlvbktleV09XCJjb2wucHJpbWFyeUFjdGlvbktleSA/PyAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwib25Sb3dBY3Rpb25DbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgPjwvZ2VvLXJvdy1hY3Rpb25zPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAge3sgZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmtleSkgfX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgPC90Ym9keT5cbiAgICA8L256LXRhYmxlPlxuICA8L2Rpdj5cblxuICBAaWYgKG1vYmlsZUNhcmRWaWV3KCkpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImdlby10YWJsZV9fbW9iaWxlXCJcbiAgICAgIFtjbGFzcy5nZW8tdGFibGVfX21vYmlsZS0tbG9hZGluZ109XCJsb2FkaW5nKClcIlxuICAgICAgW2F0dHIuYXJpYS1idXN5XT1cImxvYWRpbmcoKSA/ICd0cnVlJyA6IG51bGxcIlxuICAgID5cbiAgICAgIEBpZiAoc2VsZWN0YWJsZSgpICYmIHBhZ2luYXRlZERhdGEoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImdlby10YWJsZS1jYXJkX19zZWxlY3QtYWxsXCI+XG4gICAgICAgICAgPGdlby1jaGVja2JveFxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsQ2hlY2tlZCgpXCJcbiAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGUoKVwiXG4gICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJvbkFsbENoZWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvZ2VvLWNoZWNrYm94PlxuICAgICAgICAgIDxzcGFuPkNo4buNbiB04bqldCBj4bqjIHRyw6puIHRyYW5nPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmICghcGFnaW5hdGVkRGF0YSgpLmxlbmd0aCAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnZW8tdGFibGVfX21vYmlsZS1lbXB0eVwiPnt7IGVtcHR5VGV4dCgpIH19PC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBmb3IgKHJvdyBvZiBwYWdpbmF0ZWREYXRhKCk7IHRyYWNrIHRyYWNrUm93KCRpbmRleCwgcm93KTsgbGV0IHJvd0luZGV4ID0gJGluZGV4KSB7XG4gICAgICAgIDxhcnRpY2xlXG4gICAgICAgICAgY2xhc3M9XCJnZW8tdGFibGUtY2FyZFwiXG4gICAgICAgICAgW2NsYXNzLmdlby10YWJsZS1jYXJkLS1zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgIFtjbGFzcy5nZW8tdGFibGUtY2FyZC0tY2xpY2thYmxlXT1cImNsaWNrYWJsZSgpXCJcbiAgICAgICAgICAoY2xpY2spPVwib25Nb2JpbGVDYXJkQ2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9faGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2VvLXRhYmxlLWNhcmRfX3RpdGxlLXdyYXBcIj5cbiAgICAgICAgICAgICAgQGlmIChzZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICA8Z2VvLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImdlby10YWJsZS1jYXJkX19jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwib25JdGVtQ2hlY2tlZChyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgPjwvZ2VvLWNoZWNrYm94PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAobW9iaWxlVGl0bGVDb2x1bW4oKTsgYXMgdGl0bGVDb2wpIHtcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLXRhYmxlLWNhcmRfX3RpdGxlLWxhYmVsXCI+e3sgdGl0bGVDb2wudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdlby10YWJsZS1jYXJkX190aXRsZS1zZXBcIj46PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fdGl0bGUtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0aXRsZUNvbC5yZW5kZXJBcyA9PT0gJ2luZGV4Jykge1xuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFJvd0luZGV4KHJvd0luZGV4KSB9fVxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRDZWxsVmFsdWUocm93LCB0aXRsZUNvbC5rZXkpIH19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgQGlmIChtb2JpbGVBY3Rpb25zQ29sdW1uKCk7IGFzIGFjdGlvbnNDb2wpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdlby10YWJsZS1jYXJkX19hY3Rpb25zXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxnZW8tcm93LWFjdGlvbnNcbiAgICAgICAgICAgICAgICAgIFthY3Rpb25zXT1cImdldE1vYmlsZUhlYWRlckFjdGlvbnMoYWN0aW9uc0NvbCwgcm93KVwiXG4gICAgICAgICAgICAgICAgICBbcHJpbWFyeUFjdGlvbktleV09XCJhY3Rpb25zQ29sLnByaW1hcnlBY3Rpb25LZXkgPz8gJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvblJvd0FjdGlvbkNsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPjwvZ2VvLXJvdy1hY3Rpb25zPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICAgIEBpZiAobW9iaWxlQm9keUNvbHVtbnMoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fYm9keVwiPlxuICAgICAgICAgICAgICBAZm9yIChjb2wgb2YgbW9iaWxlQm9keUNvbHVtbnMoKTsgdHJhY2sgY29sLmtleSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZW8tdGFibGUtY2FyZF9fcm93XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdlby10YWJsZS1jYXJkX19sYWJlbFwiPnt7IGNvbC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLXRhYmxlLWNhcmRfX3NlcFwiPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdlby10YWJsZS1jYXJkX192YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5yZW5kZXJBcyA9PT0gJ2luZGV4Jykge1xuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFJvd0luZGV4KHJvd0luZGV4KSB9fVxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChjb2wucmVuZGVyQXMgPT09ICdzdGF0dXMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGdlby1zdGF0dXMtdGFnXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cImdldENlbGxWYWx1ZShyb3csIGNvbC5rZXkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb2wuc3RhdHVzTGFiZWxLZXkgPyBnZXRDZWxsVmFsdWUocm93LCBjb2wuc3RhdHVzTGFiZWxLZXkpIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvZ2VvLXN0YXR1cy10YWc+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3csIGNvbC5rZXkpIH19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChtb2JpbGVBY3Rpb25zQ29sdW1uKCk7IGFzIGFjdGlvbnNDb2wpIHtcbiAgICAgICAgICAgIEBpZiAoZ2V0TW9iaWxlRm9vdGVyQWN0aW9ucyhhY3Rpb25zQ29sLCByb3cpOyBhcyBmb290ZXJBY3Rpb25zKSB7XG4gICAgICAgICAgICAgIEBpZiAoZm9vdGVyQWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICA8Zm9vdGVyIGNsYXNzPVwiZ2VvLXRhYmxlLWNhcmRfX2Zvb3RlclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBmb290ZXJBY3Rpb25zOyB0cmFjayBhY3Rpb24ua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdlby10YWJsZS1jYXJkX19mb290ZXItYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZ2VvLXRhYmxlLWNhcmRfX2Zvb3Rlci1idG4tLWRhbmdlcl09XCJhY3Rpb24uZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dBY3Rpb25DbGljayhyb3csIGFjdGlvbi5rZXkpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5sYWJlbCA/PyBhY3Rpb24udGl0bGUgPz8gYWN0aW9uLmtleSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG5cbiAgQGlmIChzaG91bGRTaG93UGFnaW5hdGlvbigpICYmIChwYWdpbmF0aW9uUG9zaXRpb24oKSA9PT0gJ2JvdHRvbScgfHwgcGFnaW5hdGlvblBvc2l0aW9uKCkgPT09ICdib3RoJykpIHtcbiAgICA8Z2VvLXRhYmxlLXBhZ2luYXRpb25cbiAgICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4KClcIlxuICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplKClcIlxuICAgICAgW3RvdGFsXT1cImNvbXB1dGVkVG90YWwoKVwiXG4gICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9ucygpXCJcbiAgICAgIFtzaG93U2l6ZUNoYW5nZXJdPVwic2hvd1NpemVDaGFuZ2VyKClcIlxuICAgICAgW2hpZGVPblNpbmdsZVBhZ2VdPVwiaGlkZU9uU2luZ2xlUGFnZSgpXCJcbiAgICAgIFtzaG93VG90YWxSYW5nZV09XCJzaG93VG90YWxSYW5nZSgpXCJcbiAgICAgIChwYWdlSW5kZXhDaGFuZ2UpPVwib25QYWdlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9nZW8tdGFibGUtcGFnaW5hdGlvbj5cbiAgfVxuPC9kaXY+XG4iXX0=
|