atr-components 2.2.2 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +24 -24
  2. package/fesm2022/atr-components.mjs +191 -576
  3. package/fesm2022/atr-components.mjs.map +1 -1
  4. package/index.d.ts +1371 -5
  5. package/package.json +2 -4
  6. package/atr-components.module.d.ts +0 -9
  7. package/atr-public-api.d.ts +0 -53
  8. package/core/animations/animations.d.ts +0 -1
  9. package/core/animations/fly-in.d.ts +0 -1
  10. package/core/animations/scroll-screen.d.ts +0 -1
  11. package/core/auth/auth.guard.d.ts +0 -11
  12. package/core/base/atr-common.d.ts +0 -361
  13. package/core/directive/Infinite-scroll.directive.d.ts +0 -12
  14. package/core/directive/debounce-click.directive.d.ts +0 -14
  15. package/core/directive/error-img.directive.d.ts +0 -10
  16. package/core/directive/hq-spin.directive.d.ts +0 -13
  17. package/core/directive/role.directive.d.ts +0 -16
  18. package/core/interceptor/base.interceptor.d.ts +0 -17
  19. package/core/ngz-module/cus-zorro-antd.module.d.ts +0 -75
  20. package/core/pipe/china-num.pipe.d.ts +0 -7
  21. package/core/pipe/count.pipe.d.ts +0 -7
  22. package/core/pipe/day.pipe.d.ts +0 -8
  23. package/core/pipe/defaultVal.pipe.d.ts +0 -7
  24. package/core/pipe/dicts.pipe.d.ts +0 -10
  25. package/core/pipe/image-pipe.pipe.d.ts +0 -8
  26. package/core/pipe/is-empty.pipe.d.ts +0 -7
  27. package/core/pipe/is-not-empty.pipe.d.ts +0 -7
  28. package/core/pipe/oss.pipe.d.ts +0 -7
  29. package/core/pipe/ossStatic.pipe.d.ts +0 -7
  30. package/core/pipe/pipe-module.module.d.ts +0 -21
  31. package/core/pipe/remove-html.pipe.d.ts +0 -10
  32. package/core/pipe/safe-compute.pipe.d.ts +0 -7
  33. package/core/pipe/safe-html.pipe.d.ts +0 -10
  34. package/core/pipe/safe-url.pipe.d.ts +0 -10
  35. package/core/routereuse/atr-reuse-strategy.d.ts +0 -19
  36. package/core/services/dict/dict.service.d.ts +0 -20
  37. package/core/services/http.service.d.ts +0 -31
  38. package/core/services/menu.service.d.ts +0 -30
  39. package/core/services/upload-oss.service.d.ts +0 -14
  40. package/core/utils/ToolsUtil.d.ts +0 -180
  41. package/core/utils/localstorage.util.d.ts +0 -15
  42. package/core/utils/sessionstorage.util.d.ts +0 -15
  43. package/esm2022/atr-components.mjs +0 -5
  44. package/esm2022/atr-components.module.mjs +0 -36
  45. package/esm2022/atr-public-api.mjs +0 -55
  46. package/esm2022/core/animations/animations.mjs +0 -10
  47. package/esm2022/core/animations/fly-in.mjs +0 -19
  48. package/esm2022/core/animations/scroll-screen.mjs +0 -23
  49. package/esm2022/core/auth/auth.guard.mjs +0 -37
  50. package/esm2022/core/base/atr-common.mjs +0 -48
  51. package/esm2022/core/directive/Infinite-scroll.directive.mjs +0 -36
  52. package/esm2022/core/directive/debounce-click.directive.mjs +0 -41
  53. package/esm2022/core/directive/error-img.directive.mjs +0 -31
  54. package/esm2022/core/directive/hq-spin.directive.mjs +0 -48
  55. package/esm2022/core/directive/role.directive.mjs +0 -69
  56. package/esm2022/core/interceptor/base.interceptor.mjs +0 -165
  57. package/esm2022/core/ngz-module/cus-zorro-antd.module.mjs +0 -292
  58. package/esm2022/core/pipe/china-num.pipe.mjs +0 -36
  59. package/esm2022/core/pipe/count.pipe.mjs +0 -34
  60. package/esm2022/core/pipe/day.pipe.mjs +0 -24
  61. package/esm2022/core/pipe/defaultVal.pipe.mjs +0 -23
  62. package/esm2022/core/pipe/dicts.pipe.mjs +0 -28
  63. package/esm2022/core/pipe/image-pipe.pipe.mjs +0 -17
  64. package/esm2022/core/pipe/is-empty.pipe.mjs +0 -20
  65. package/esm2022/core/pipe/is-not-empty.pipe.mjs +0 -17
  66. package/esm2022/core/pipe/oss.pipe.mjs +0 -17
  67. package/esm2022/core/pipe/ossStatic.pipe.mjs +0 -17
  68. package/esm2022/core/pipe/pipe-module.module.mjs +0 -78
  69. package/esm2022/core/pipe/remove-html.pipe.mjs +0 -21
  70. package/esm2022/core/pipe/safe-compute.pipe.mjs +0 -23
  71. package/esm2022/core/pipe/safe-html.pipe.mjs +0 -20
  72. package/esm2022/core/pipe/safe-url.pipe.mjs +0 -20
  73. package/esm2022/core/routereuse/atr-reuse-strategy.mjs +0 -79
  74. package/esm2022/core/services/dict/dict.service.mjs +0 -152
  75. package/esm2022/core/services/http.service.mjs +0 -316
  76. package/esm2022/core/services/menu.service.mjs +0 -130
  77. package/esm2022/core/services/upload-oss.service.mjs +0 -74
  78. package/esm2022/core/utils/ToolsUtil.mjs +0 -622
  79. package/esm2022/core/utils/localstorage.util.mjs +0 -94
  80. package/esm2022/core/utils/sessionstorage.util.mjs +0 -73
  81. package/esm2022/lib/shared/atr-shared.module.mjs +0 -248
  82. package/esm2022/lib/shared/echarts/echarts.component.mjs +0 -77
  83. package/esm2022/lib/shared/form/form.component.mjs +0 -624
  84. package/esm2022/lib/shared/img-canvas/img-canvas.component.mjs +0 -132
  85. package/esm2022/lib/shared/local-upload/local-upload.component.mjs +0 -68
  86. package/esm2022/lib/shared/quill-editor/quill-editor.component.mjs +0 -254
  87. package/esm2022/lib/shared/select-icons/select-icons.component.mjs +0 -90
  88. package/esm2022/lib/shared/select-tree/select-tree.component.mjs +0 -55
  89. package/esm2022/lib/shared/service/busi.service.mjs +0 -69
  90. package/esm2022/lib/shared/share.service.mjs +0 -107
  91. package/esm2022/lib/shared/table/table-form-item/table-form-item.component.mjs +0 -96
  92. package/esm2022/lib/shared/table/table-td/table-td.component.mjs +0 -165
  93. package/esm2022/lib/shared/table/table.component.mjs +0 -766
  94. package/esm2022/lib/shared/upload/upload.component.mjs +0 -273
  95. package/esm2022/lib/shared/validators/atr-validtors.mjs +0 -9
  96. package/esm2022/lib/shared/video/video.component.mjs +0 -16
  97. package/esm2022/lib/shared/view-form/view-form.component.mjs +0 -186
  98. package/lib/shared/atr-shared.module.d.ts +0 -39
  99. package/lib/shared/echarts/echarts.component.d.ts +0 -34
  100. package/lib/shared/form/form.component.d.ts +0 -49
  101. package/lib/shared/img-canvas/img-canvas.component.d.ts +0 -28
  102. package/lib/shared/local-upload/local-upload.component.d.ts +0 -22
  103. package/lib/shared/quill-editor/quill-editor.component.d.ts +0 -45
  104. package/lib/shared/select-icons/select-icons.component.d.ts +0 -24
  105. package/lib/shared/select-tree/select-tree.component.d.ts +0 -23
  106. package/lib/shared/service/busi.service.d.ts +0 -20
  107. package/lib/shared/share.service.d.ts +0 -14
  108. package/lib/shared/table/table-form-item/table-form-item.component.d.ts +0 -25
  109. package/lib/shared/table/table-td/table-td.component.d.ts +0 -26
  110. package/lib/shared/table/table.component.d.ts +0 -94
  111. package/lib/shared/upload/upload.component.d.ts +0 -53
  112. package/lib/shared/validators/atr-validtors.d.ts +0 -2
  113. package/lib/shared/video/video.component.d.ts +0 -7
  114. package/lib/shared/view-form/view-form.component.d.ts +0 -27
@@ -1,165 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { atr_static_datas } from "../../../../core/base/atr-common";
3
- import { ToolsUtil } from "../../../../core/utils/ToolsUtil";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- import * as i2 from "@angular/forms";
7
- import * as i3 from "ng-zorro-antd/button";
8
- import * as i4 from "ng-zorro-antd/core/transition-patch";
9
- import * as i5 from "ng-zorro-antd/core/wave";
10
- import * as i6 from "ng-zorro-antd/grid";
11
- import * as i7 from "ng-zorro-antd/icon";
12
- import * as i8 from "ng-zorro-antd/popover";
13
- import * as i9 from "ng-zorro-antd/switch";
14
- import * as i10 from "ng-zorro-antd/image";
15
- import * as i11 from "../../../../core/directive/role.directive";
16
- import * as i12 from "../../../../core/directive/error-img.directive";
17
- import * as i13 from "../../../../core/pipe/defaultVal.pipe";
18
- import * as i14 from "../../../../core/pipe/dicts.pipe";
19
- import * as i15 from "../../../../core/pipe/image-pipe.pipe";
20
- import * as i16 from "../../../../core/pipe/safe-html.pipe";
21
- export class TableTdComponent {
22
- set data(d) {
23
- this.result = d;
24
- setTimeout(() => {
25
- this.value = this.getValue(d);
26
- });
27
- }
28
- constructor() {
29
- this.doActionByRowAction = new EventEmitter();
30
- this.popoverTrigger = 'hover';
31
- this.imagePrefix = atr_static_datas.OSS_URL;
32
- }
33
- getValue(data) {
34
- let key = this.item.key;
35
- if (key && key.indexOf('.') > 0) {
36
- let keys = key.split('.');
37
- let value = data;
38
- keys.forEach((k) => {
39
- if (value) {
40
- value = value[k];
41
- }
42
- });
43
- return value;
44
- }
45
- return data[key];
46
- }
47
- getStyleCallBack(item, data) {
48
- let style = {};
49
- if (item.styleCallBack) {
50
- style = item.styleCallBack(data);
51
- }
52
- if (item.color) {
53
- style['color'] = item.color;
54
- }
55
- return style;
56
- }
57
- doActionSwitch(data, code, event, index) {
58
- this.doActionByRowAction.emit({ data: data, code: code, event: event, index: index });
59
- }
60
- change(value) {
61
- console.log(value);
62
- }
63
- ngOnInit() {
64
- }
65
- doActionByRow(data, code, event, index) {
66
- this.doActionByRowAction.emit({ data: data, code: code, event: event, index: index });
67
- }
68
- enter(e) {
69
- this.popoverTrigger = e.toElement.clientWidth < e.toElement.scrollWidth ? 'hover' : null;
70
- }
71
- isShowBtn(data, operator, action) {
72
- let isShow = false;
73
- if (!operator || operator == null || operator == "") {
74
- isShow = true;
75
- }
76
- else if (operator.indexOf('&&') > 0) {
77
- // a|eq|b &&c|eq|d
78
- const ops = operator.split('&&');
79
- if (ops.length > 1) {
80
- // tslint:disable-next-line:prefer-for-of
81
- for (let i = 0; i < ops.length; i++) {
82
- isShow = true;
83
- if (!this.checkIsShowBase(ops[i].split('|'), data)) {
84
- isShow = false;
85
- break;
86
- }
87
- }
88
- }
89
- }
90
- else if (operator.indexOf('||') > 0) {
91
- // a|eq|b||c|eq|d
92
- const ops = operator.split('||');
93
- if (ops.length > 1) {
94
- for (let i = 0; i < ops.length; i++) {
95
- isShow = false;
96
- if (this.checkIsShowBase(ops[i].split('|'), data)) {
97
- isShow = true;
98
- break;
99
- }
100
- }
101
- }
102
- }
103
- else {
104
- let op = operator.split("|");
105
- isShow = this.checkIsShowBase(op, data);
106
- }
107
- return isShow;
108
- }
109
- checkIsShowBase(op, data) {
110
- let isShow = false;
111
- if (op.length > 1) {
112
- let value = data[op[0]];
113
- isShow = this.compare(value, op[1], op[2]);
114
- }
115
- else {
116
- isShow = false;
117
- }
118
- return isShow;
119
- }
120
- compare(value, operator, target) {
121
- let isRight = false;
122
- switch (operator) {
123
- case 'eq':
124
- if (value == target) {
125
- isRight = true;
126
- }
127
- break;
128
- case 'gh':
129
- if (value >= target) {
130
- isRight = true;
131
- }
132
- break;
133
- case 'ne':
134
- if (value != target) {
135
- isRight = true;
136
- }
137
- break;
138
- case 'notEmpty':
139
- isRight = !ToolsUtil.isEmpty(value);
140
- break;
141
- case 'empty':
142
- isRight = ToolsUtil.isEmpty(value);
143
- break;
144
- default:
145
- isRight = false;
146
- break;
147
- }
148
- return isRight;
149
- }
150
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableTdComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
151
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableTdComponent, selector: "app-table-td", inputs: { data: "data", item: "item", i: "i" }, outputs: { doActionByRowAction: "doActionByRowAction" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"item.type\">\r\n\r\n <ng-container *ngSwitchCase=\"'innerHtml'\">\r\n <div [ngStyle]=\"getStyleCallBack(item,result)\" [innerHTML]=\"item.innerHtmlBack((value| defVal:item.defaultVal),result) | safeHtml\" ></div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textcolor'\">\r\n <div [innerHTML]=\"value | defVal:item.defaultVal\" [ngStyle]=\"{'color':item.color}\"\r\n *ngIf=\"item.colorShow == value\"></div>\r\n <div [innerHTML]=\"value | defVal:item.defaultVal\" *ngIf=\"item.colorShow != value\"></div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <span nz-popover (mouseenter)=\"enter($event)\"\r\n [nzPopoverTrigger]=\"popoverTrigger\"\r\n [ngStyle]=\"getStyleCallBack(item,result)\"\r\n [nzPopoverContent]=\"value | date:'yyyy-MM-dd' | defVal:item.defaultVal\"\r\n class=\"view-text\">{{ value | date:'yyyy-MM-dd' | defVal:item.defaultVal}}</span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dateTime'\">\r\n <span nz-popover (mouseenter)=\"enter($event)\"\r\n [nzPopoverTrigger]=\"popoverTrigger\"\r\n [ngStyle]=\"getStyleCallBack(item,result)\"\r\n [nzPopoverContent]=\"value | date:'yyyy-MM-dd HH:mm:ss' | defVal:item.defaultVal\"\r\n class=\"view-text\"> {{ value | date:'yyyy-MM-dd HH:mm:ss' | defVal:item.defaultVal}}</span>\r\n </ng-container>\r\n <nz-switch *ngSwitchCase=\"'switch'\" [(ngModel)]=\"value\" [nzDisabled]=\"item.disabled\"\r\n [ngStyle]=\"getStyleCallBack(item,result)\"\r\n (ngModelChange)=\"doActionSwitch(result,item.key)\" nzCheckedChildren=\"\u662F\" nzUnCheckedChildren=\"\u5426\">\r\n </nz-switch>\r\n <ng-container *ngSwitchCase=\"'sDateTime'\">\r\n <span nz-popover (mouseenter)=\"enter($event)\"\r\n [nzPopoverTrigger]=\"popoverTrigger\" [ngStyle]=\"getStyleCallBack(item,result)\"\r\n [nzPopoverContent]=\"value | date:'MM-dd HH:mm' | defVal:item.defaultVal\"\r\n class=\"view-text\"> {{ value | date:'MM-dd HH:mm' | defVal:item.defaultVal}}</span>\r\n </ng-container>\r\n <div *ngSwitchCase=\"'fixedText'\" [ngStyle]=\"getStyleCallBack(item,result)\" [innerHTML]=\"item.key\"></div>\r\n\r\n <img *ngSwitchCase=\"'image'\" [ngStyle]=\"getStyleCallBack(item,result)\" width=\"35px\" nzSrc=\"{{(value | defVal:item.defaultVal) | ossImg}}\"\r\n nz-image atrErrorImg/>\r\n <img *ngSwitchCase=\"'image64'\" [ngStyle]=\"getStyleCallBack(item,result)\" width=\"35px\" nzSrc=\"{{(value | defVal:item.defaultVal)}}\"\r\n nz-image atrErrorImg/>\r\n <div nz-row *ngSwitchCase=\"'action'\">\r\n <div class=\"action-area\" nz-col [nzSpan]=\"24\">\r\n <ng-container *ngFor=\"let action of item.actions\">\r\n <ng-container *ngIf=\"isShowBtn(result,action.operator,action)\">\r\n <ng-container *ngIf=\"!action.withoutRole\">\r\n <button nz-button\r\n [nzType]=\"action.buttonType&&action.buttonType != 'danger'? action.buttonType : 'primary'\"\r\n [nzDanger]=\"action.buttonType == 'danger'\"\r\n nzSize=\"small\" *atrRole=\"action.code\"\r\n (click)=\"doActionByRow(result,action.code,$event,i)\">\r\n <i nz-icon *ngIf=\"action.icon\" [nzType]=\"action.icon\"></i>\r\n {{action.name}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"action.withoutRole\">\r\n <button nz-button\r\n [nzType]=\"action.buttonType&&action.buttonType != 'danger'? action.buttonType : 'primary'\"\r\n [nzDanger]=\"action.buttonType == 'danger'\"\r\n nzSize=\"small\" (click)=\"doActionByRow(result,action.code,$event,i)\">\r\n <i nz-icon *ngIf=\"action.icon\" [nzType]=\"action.icon\"></i>\r\n {{action.name}}</button>\r\n </ng-container>\r\n <!-- <button nz-button [nzType]=\"'primary'\" nzSize=\"small\" *atrRole=\"action.code\" (click)=\"doActionByRow(result,action.code,$event)\">{{action.name\r\n }}</button> -->\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div [ngStyle]=\"getStyleCallBack(item,result)\" *ngSwitchCase=\"'dict'\" [innerHTML]=\"value | dicts:item.dictCode:',' | async | defVal:item.defaultVal\"></div>\r\n <div [ngStyle]=\"getStyleCallBack(item,result)\" nz-popover (mouseenter)=\"enter($event)\"\r\n [nzPopoverTrigger]=\"popoverTrigger\" [nzPopoverContent]='value | defVal:item.defaultVal'\r\n class=\"view-text\" *ngSwitchDefault [innerHTML]=\"value | defVal:item.defaultVal\"></div>\r\n</ng-container>\r\n\r\n", styles: [":host{cursor:default}:host .view-text{display:inline-block;white-space:nowrap;width:100%;overflow:hidden;text-overflow:ellipsis}\n", ":host{width:100%;height:100%;display:-webkit-flex;display:flex;flex-direction:column}:host ::ng-deep .ant-modal{top:50px;padding:0}:host .ant-advanced-search-form{padding:10px 6px 6px;background:#fbfbfb;border:1px solid #d9d9d9;border-radius:6px;margin-bottom:5px}:host .select-icon:hover{color:#1890ff}:host ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:5px}:host ::ng-deep .ant-table-column-title{font-size:.65rem}:host ::ng-deep .ant-table-tbody>tr.ant-table-row:hover>td{background:#d0eeea}:host ::ng-deep .ant-modal-header,:host ::ng-deep .ant-modal-content{border-radius:4px}:host ::ng-deep .ant-table-tbody>tr.selected:hover>td{background-color:#cfe1d0!important}:host ::ng-deep .ant-table{height:100%}:host ::ng-deep nz-pagination{position:absolute;bottom:0;right:0}:host .search-result-list{padding:1px;border:1px dashed #e9e9e9;border-radius:6px;background-color:#fff;flex:1;text-align:center;position:relative}:host [nz-form-label]{overflow:visible}:host button{margin:2px 4px}:host .collapse{margin-left:6px;font-size:12px}:host .action-area{text-align:left}:host .search-area{text-align:right}:host ::ng-deep .main-table{position:absolute;inset:0}:host ::ng-deep .main-table .ant-spin-nested-loading{height:100%}:host ::ng-deep .main-table .ant-spin-container{height:100%}:host ::ng-deep .ant-table-tbody>tr.selected>td{background-color:#cfe1d0}:host ::ng-deep .ant-table-tbody>tr>td>img{display:block;width:40%;margin:0 auto}:host ::ng-deep .ant-table-body{-ms-overflow-style:none;overflow:-moz-scrollbars-none}:host ::ng-deep .ant-table-body::-webkit-scrollbar,:host ::ng-deep .ant-table-header::-webkit-scrollbar{width:6px!important;height:6px!important}:host ::ng-deep .ant-table-body::-webkit-scrollbar-track,:host ::ng-deep .ant-table-header::-webkit-scrollbar-track{width:6px!important;cursor:pointer}:host ::ng-deep .ant-table-body::-webkit-scrollbar-thumb,:host ::ng-deep .ant-table-header::-webkit-scrollbar-thumb{background:#1890ff;border-radius:3px;cursor:pointer}:host ::ng-deep .ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #ddd}:host ::ng-deep .ant-table-header{-ms-overflow-style:none;overflow:-moz-scrollbars-none;margin-bottom:-5px!important}:host ::ng-deep .ant-table-placeholder{border-bottom:none!important;border-top:none!important}:host .tabel-colunmn{display:block;width:160px;height:300px;background:#fff;border:1px solid #ddd;padding:10px;border-radius:5px;overflow-x:hidden;overflow-y:auto;position:relative}:host .tabel-colunmn-header{position:fixed;top:0;left:0;right:0;height:30px;z-index:999;line-height:30px;border-bottom:1px solid #ddd;text-align:left;font-size:13px;padding-left:10px}:host .t-tr{background:#fff}:host .t-tr:nth-child(odd){background:#f8f9fa}:host ::ng-deep .ant-table-thead>tr>th{background:#e7ebef!important;border-radius:0;word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-tbody>tr>td{word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-header{background:#e7ebef!important}:host td{font-size:.65rem}:host .resize-trigger{height:100%}:host .nz-resizable-preview{border-width:0;border-right-width:1px}:host ::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}:host ::ng-deep .ant-table-tbody>tr>td{padding:5px}:host ::ng-deep .ant-table{line-height:15px}:host ::ng-deep .ant-table-middle .ant-table-footer,:host .ant-table-middle .ant-table-tbody>tr>td,:host .ant-table-middle .ant-table-thead>tr>th,:host .ant-table-middle .ant-table-title{padding:5px}:host ::ng-deep .ant-table-tbody>tr>td>img{width:35px}:host ::ng-deep .ant-modal-body{padding:10px}:host ::ng-deep .ant-table.ant-table-bordered tbody>tr>td{font-size:13px}:host ::ng-deep th{z-index:80!important}:host .left-zindex-header{z-index:90!important}:host .left-zindex{z-index:80!important}:host ::ng-deep input,:host ::ng-deep .ant-select-single:not(.ant-select-customize-input) .ant-select-selector,:host ::ng-deep .ant-picker{border-radius:5px}:host .border-text{width:100%;height:36px;line-height:36px;display:flex}:host .border-text .border-text-line{display:inline-block;border-top:1px solid #cccccc;margin-top:18px}:host .border-text .border-text-line-left{width:10px;border-left:1px solid #cccccc}:host .border-text .border-text-line-right{flex:1;border-right:1px solid #cccccc}:host .border-text .border-text-span{margin-left:5px;margin-right:5px}:host ::ng-deep .tabel-colunmn-header{position:absolute!important;top:0!important}:host ::ng-deep .ant-table-cell-fix-left,:host .ant-table-cell-fix-right{position:-webkit-sticky!important;position:sticky!important}.label-title{position:absolute;display:block;top:-7px;left:10px;background-color:#fff;color:#000;font-weight:600;font-size:12px;line-height:12px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i5.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "directive", type: i6.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i6.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "directive", type: i7.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "directive", type: i8.NzPopoverDirective, selector: "[nz-popover]", inputs: ["nzPopoverArrowPointAtCenter", "nzPopoverTitle", "nzPopoverContent", "nz-popover", "nzPopoverTrigger", "nzPopoverPlacement", "nzPopoverOrigin", "nzPopoverVisible", "nzPopoverMouseEnterDelay", "nzPopoverMouseLeaveDelay", "nzPopoverOverlayClassName", "nzPopoverOverlayStyle", "nzPopoverBackdrop"], outputs: ["nzPopoverVisibleChange"], exportAs: ["nzPopover"] }, { kind: "component", type: i9.NzSwitchComponent, selector: "nz-switch", inputs: ["nzLoading", "nzDisabled", "nzControl", "nzCheckedChildren", "nzUnCheckedChildren", "nzSize", "nzId"], exportAs: ["nzSwitch"] }, { kind: "directive", type: i10.NzImageDirective, selector: "img[nz-image]", inputs: ["nzSrc", "nzSrcset", "nzDisablePreview", "nzFallback", "nzPlaceholder", "nzScaleStep"], exportAs: ["nzImage"] }, { kind: "directive", type: i11.AtrRoleDirective, selector: "[atrRole]", inputs: ["atrRole"] }, { kind: "directive", type: i12.AtrErrorImgDirective, selector: "[atrErrorImg]", inputs: ["atrErrorImg"] }, { kind: "pipe", type: i13.DefaultValPipe, name: "defVal" }, { kind: "pipe", type: i14.DictsPipe, name: "dicts" }, { kind: "pipe", type: i15.OssImgPipe, name: "ossImg" }, { kind: "pipe", type: i16.SafeHtmlPipe, name: "safeHtml" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DatePipe, name: "date" }] }); }
152
- }
153
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableTdComponent, decorators: [{
154
- type: Component,
155
- args: [{ selector: 'app-table-td', template: "<ng-container [ngSwitch]=\"item.type\">\r\n\r\n <ng-container *ngSwitchCase=\"'innerHtml'\">\r\n <div [ngStyle]=\"getStyleCallBack(item,result)\" [innerHTML]=\"item.innerHtmlBack((value| defVal:item.defaultVal),result) | safeHtml\" ></div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textcolor'\">\r\n <div [innerHTML]=\"value | defVal:item.defaultVal\" [ngStyle]=\"{'color':item.color}\"\r\n *ngIf=\"item.colorShow == value\"></div>\r\n <div [innerHTML]=\"value | defVal:item.defaultVal\" *ngIf=\"item.colorShow != value\"></div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <span nz-popover (mouseenter)=\"enter($event)\"\r\n [nzPopoverTrigger]=\"popoverTrigger\"\r\n [ngStyle]=\"getStyleCallBack(item,result)\"\r\n [nzPopoverContent]=\"value | date:'yyyy-MM-dd' | defVal:item.defaultVal\"\r\n class=\"view-text\">{{ value | date:'yyyy-MM-dd' | defVal:item.defaultVal}}</span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dateTime'\">\r\n <span nz-popover (mouseenter)=\"enter($event)\"\r\n [nzPopoverTrigger]=\"popoverTrigger\"\r\n [ngStyle]=\"getStyleCallBack(item,result)\"\r\n [nzPopoverContent]=\"value | date:'yyyy-MM-dd HH:mm:ss' | defVal:item.defaultVal\"\r\n class=\"view-text\"> {{ value | date:'yyyy-MM-dd HH:mm:ss' | defVal:item.defaultVal}}</span>\r\n </ng-container>\r\n <nz-switch *ngSwitchCase=\"'switch'\" [(ngModel)]=\"value\" [nzDisabled]=\"item.disabled\"\r\n [ngStyle]=\"getStyleCallBack(item,result)\"\r\n (ngModelChange)=\"doActionSwitch(result,item.key)\" nzCheckedChildren=\"\u662F\" nzUnCheckedChildren=\"\u5426\">\r\n </nz-switch>\r\n <ng-container *ngSwitchCase=\"'sDateTime'\">\r\n <span nz-popover (mouseenter)=\"enter($event)\"\r\n [nzPopoverTrigger]=\"popoverTrigger\" [ngStyle]=\"getStyleCallBack(item,result)\"\r\n [nzPopoverContent]=\"value | date:'MM-dd HH:mm' | defVal:item.defaultVal\"\r\n class=\"view-text\"> {{ value | date:'MM-dd HH:mm' | defVal:item.defaultVal}}</span>\r\n </ng-container>\r\n <div *ngSwitchCase=\"'fixedText'\" [ngStyle]=\"getStyleCallBack(item,result)\" [innerHTML]=\"item.key\"></div>\r\n\r\n <img *ngSwitchCase=\"'image'\" [ngStyle]=\"getStyleCallBack(item,result)\" width=\"35px\" nzSrc=\"{{(value | defVal:item.defaultVal) | ossImg}}\"\r\n nz-image atrErrorImg/>\r\n <img *ngSwitchCase=\"'image64'\" [ngStyle]=\"getStyleCallBack(item,result)\" width=\"35px\" nzSrc=\"{{(value | defVal:item.defaultVal)}}\"\r\n nz-image atrErrorImg/>\r\n <div nz-row *ngSwitchCase=\"'action'\">\r\n <div class=\"action-area\" nz-col [nzSpan]=\"24\">\r\n <ng-container *ngFor=\"let action of item.actions\">\r\n <ng-container *ngIf=\"isShowBtn(result,action.operator,action)\">\r\n <ng-container *ngIf=\"!action.withoutRole\">\r\n <button nz-button\r\n [nzType]=\"action.buttonType&&action.buttonType != 'danger'? action.buttonType : 'primary'\"\r\n [nzDanger]=\"action.buttonType == 'danger'\"\r\n nzSize=\"small\" *atrRole=\"action.code\"\r\n (click)=\"doActionByRow(result,action.code,$event,i)\">\r\n <i nz-icon *ngIf=\"action.icon\" [nzType]=\"action.icon\"></i>\r\n {{action.name}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"action.withoutRole\">\r\n <button nz-button\r\n [nzType]=\"action.buttonType&&action.buttonType != 'danger'? action.buttonType : 'primary'\"\r\n [nzDanger]=\"action.buttonType == 'danger'\"\r\n nzSize=\"small\" (click)=\"doActionByRow(result,action.code,$event,i)\">\r\n <i nz-icon *ngIf=\"action.icon\" [nzType]=\"action.icon\"></i>\r\n {{action.name}}</button>\r\n </ng-container>\r\n <!-- <button nz-button [nzType]=\"'primary'\" nzSize=\"small\" *atrRole=\"action.code\" (click)=\"doActionByRow(result,action.code,$event)\">{{action.name\r\n }}</button> -->\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div [ngStyle]=\"getStyleCallBack(item,result)\" *ngSwitchCase=\"'dict'\" [innerHTML]=\"value | dicts:item.dictCode:',' | async | defVal:item.defaultVal\"></div>\r\n <div [ngStyle]=\"getStyleCallBack(item,result)\" nz-popover (mouseenter)=\"enter($event)\"\r\n [nzPopoverTrigger]=\"popoverTrigger\" [nzPopoverContent]='value | defVal:item.defaultVal'\r\n class=\"view-text\" *ngSwitchDefault [innerHTML]=\"value | defVal:item.defaultVal\"></div>\r\n</ng-container>\r\n\r\n", styles: [":host{cursor:default}:host .view-text{display:inline-block;white-space:nowrap;width:100%;overflow:hidden;text-overflow:ellipsis}\n", ":host{width:100%;height:100%;display:-webkit-flex;display:flex;flex-direction:column}:host ::ng-deep .ant-modal{top:50px;padding:0}:host .ant-advanced-search-form{padding:10px 6px 6px;background:#fbfbfb;border:1px solid #d9d9d9;border-radius:6px;margin-bottom:5px}:host .select-icon:hover{color:#1890ff}:host ::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:5px}:host ::ng-deep .ant-table-column-title{font-size:.65rem}:host ::ng-deep .ant-table-tbody>tr.ant-table-row:hover>td{background:#d0eeea}:host ::ng-deep .ant-modal-header,:host ::ng-deep .ant-modal-content{border-radius:4px}:host ::ng-deep .ant-table-tbody>tr.selected:hover>td{background-color:#cfe1d0!important}:host ::ng-deep .ant-table{height:100%}:host ::ng-deep nz-pagination{position:absolute;bottom:0;right:0}:host .search-result-list{padding:1px;border:1px dashed #e9e9e9;border-radius:6px;background-color:#fff;flex:1;text-align:center;position:relative}:host [nz-form-label]{overflow:visible}:host button{margin:2px 4px}:host .collapse{margin-left:6px;font-size:12px}:host .action-area{text-align:left}:host .search-area{text-align:right}:host ::ng-deep .main-table{position:absolute;inset:0}:host ::ng-deep .main-table .ant-spin-nested-loading{height:100%}:host ::ng-deep .main-table .ant-spin-container{height:100%}:host ::ng-deep .ant-table-tbody>tr.selected>td{background-color:#cfe1d0}:host ::ng-deep .ant-table-tbody>tr>td>img{display:block;width:40%;margin:0 auto}:host ::ng-deep .ant-table-body{-ms-overflow-style:none;overflow:-moz-scrollbars-none}:host ::ng-deep .ant-table-body::-webkit-scrollbar,:host ::ng-deep .ant-table-header::-webkit-scrollbar{width:6px!important;height:6px!important}:host ::ng-deep .ant-table-body::-webkit-scrollbar-track,:host ::ng-deep .ant-table-header::-webkit-scrollbar-track{width:6px!important;cursor:pointer}:host ::ng-deep .ant-table-body::-webkit-scrollbar-thumb,:host ::ng-deep .ant-table-header::-webkit-scrollbar-thumb{background:#1890ff;border-radius:3px;cursor:pointer}:host ::ng-deep .ant-table-bordered .ant-table-thead>tr>th{border-right:1px solid #ddd}:host ::ng-deep .ant-table-header{-ms-overflow-style:none;overflow:-moz-scrollbars-none;margin-bottom:-5px!important}:host ::ng-deep .ant-table-placeholder{border-bottom:none!important;border-top:none!important}:host .tabel-colunmn{display:block;width:160px;height:300px;background:#fff;border:1px solid #ddd;padding:10px;border-radius:5px;overflow-x:hidden;overflow-y:auto;position:relative}:host .tabel-colunmn-header{position:fixed;top:0;left:0;right:0;height:30px;z-index:999;line-height:30px;border-bottom:1px solid #ddd;text-align:left;font-size:13px;padding-left:10px}:host .t-tr{background:#fff}:host .t-tr:nth-child(odd){background:#f8f9fa}:host ::ng-deep .ant-table-thead>tr>th{background:#e7ebef!important;border-radius:0;word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-tbody>tr>td{word-break:break-all;white-space:pre-wrap}:host ::ng-deep .ant-table-header{background:#e7ebef!important}:host td{font-size:.65rem}:host .resize-trigger{height:100%}:host .nz-resizable-preview{border-width:0;border-right-width:1px}:host ::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}:host ::ng-deep .ant-table-tbody>tr>td{padding:5px}:host ::ng-deep .ant-table{line-height:15px}:host ::ng-deep .ant-table-middle .ant-table-footer,:host .ant-table-middle .ant-table-tbody>tr>td,:host .ant-table-middle .ant-table-thead>tr>th,:host .ant-table-middle .ant-table-title{padding:5px}:host ::ng-deep .ant-table-tbody>tr>td>img{width:35px}:host ::ng-deep .ant-modal-body{padding:10px}:host ::ng-deep .ant-table.ant-table-bordered tbody>tr>td{font-size:13px}:host ::ng-deep th{z-index:80!important}:host .left-zindex-header{z-index:90!important}:host .left-zindex{z-index:80!important}:host ::ng-deep input,:host ::ng-deep .ant-select-single:not(.ant-select-customize-input) .ant-select-selector,:host ::ng-deep .ant-picker{border-radius:5px}:host .border-text{width:100%;height:36px;line-height:36px;display:flex}:host .border-text .border-text-line{display:inline-block;border-top:1px solid #cccccc;margin-top:18px}:host .border-text .border-text-line-left{width:10px;border-left:1px solid #cccccc}:host .border-text .border-text-line-right{flex:1;border-right:1px solid #cccccc}:host .border-text .border-text-span{margin-left:5px;margin-right:5px}:host ::ng-deep .tabel-colunmn-header{position:absolute!important;top:0!important}:host ::ng-deep .ant-table-cell-fix-left,:host .ant-table-cell-fix-right{position:-webkit-sticky!important;position:sticky!important}.label-title{position:absolute;display:block;top:-7px;left:10px;background-color:#fff;color:#000;font-weight:600;font-size:12px;line-height:12px}\n"] }]
156
- }], ctorParameters: () => [], propDecorators: { data: [{
157
- type: Input
158
- }], item: [{
159
- type: Input
160
- }], i: [{
161
- type: Input
162
- }], doActionByRowAction: [{
163
- type: Output
164
- }] } });
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC90YWJsZS90YWJsZS10ZC90YWJsZS10ZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3RhYmxlL3RhYmxlLXRkL3RhYmxlLXRkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFxQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3RGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzNELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsSUFBYSxJQUFJLENBQUMsQ0FBTTtRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQy9CLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQVlEO1FBTFUsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN4RCxtQkFBYyxHQUFRLE9BQU8sQ0FBQTtRQUU3QixnQkFBVyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztJQUd2QyxDQUFDO0lBR0QsUUFBUSxDQUFDLElBQVM7UUFDaEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDeEIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFH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LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7ZW52aXJvbm1lbnR9IGZyb20gXCJuZy16b3Jyby1hbnRkL2NvcmUvZW52aXJvbm1lbnRzXCI7XHJcbmltcG9ydCB7YXRyX3N0YXRpY19kYXRhcywgVGFibGUsIFRhYmxlQWN0aW9ufSBmcm9tIFwiLi4vLi4vLi4vLi4vY29yZS9iYXNlL2F0ci1jb21tb25cIjtcclxuaW1wb3J0IHtUb29sc1V0aWx9IGZyb20gXCIuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL1Rvb2xzVXRpbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdGFibGUtdGQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS10ZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtdGQuY29tcG9uZW50LnNjc3MnLCAnLi4vdGFibGUuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVUZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgc2V0IGRhdGEoZDogYW55KSB7XHJcbiAgICB0aGlzLnJlc3VsdCA9IGQ7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBpdGVtOiBUYWJsZSB8IGFueTtcclxuICBASW5wdXQoKSBpOiBhbnlcclxuICB2YWx1ZTogYW55O1xyXG4gIHJlc3VsdDogYW55XHJcblxyXG4gIEBPdXRwdXQoKSBkb0FjdGlvbkJ5Um93QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgcG9wb3ZlclRyaWdnZXI6IGFueSA9ICdob3ZlcidcclxuXHJcbiAgaW1hZ2VQcmVmaXggPSBhdHJfc3RhdGljX2RhdGFzLk9TU19VUkw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFZhbHVlKGRhdGE6IGFueSkge1xyXG4gICAgbGV0IGtleSA9IHRoaXMuaXRlbS5rZXk7XHJcbiAgICBpZiAoa2V5ICYmIGtleS5pbmRleE9mKCcuJykgPiAwKSB7XHJcbiAgICAgIGxldCBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICAgIGxldCB2YWx1ZSA9IGRhdGE7XHJcbiAgICAgIGtleXMuZm9yRWFjaCgoazogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2tdXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm4gdmFsdWVcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhW2tleV07XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGdldFN0eWxlQ2FsbEJhY2soaXRlbTogVGFibGUsIGRhdGE6IGFueSkge1xyXG4gICAgbGV0IHN0eWxlOiBhbnkgPSB7fVxyXG4gICAgaWYgKGl0ZW0uc3R5bGVDYWxsQmFjaykge1xyXG4gICAgICBzdHlsZSA9IGl0ZW0uc3R5bGVDYWxsQmFjayhkYXRhKVxyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0uY29sb3IpIHtcclxuICAgICAgc3R5bGVbJ2NvbG9yJ10gPSBpdGVtLmNvbG9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlXHJcbiAgfVxyXG5cclxuICBkb0FjdGlvblN3aXRjaChkYXRhOiBhbnksIGNvZGU6IGFueSwgZXZlbnQ/OiBNb3VzZUV2ZW50LCBpbmRleD86IGFueSkge1xyXG4gICAgdGhpcy5kb0FjdGlvbkJ5Um93QWN0aW9uLmVtaXQoe2RhdGE6IGRhdGEsIGNvZGU6IGNvZGUsIGV2ZW50OiBldmVudCwgaW5kZXg6IGluZGV4fSlcclxuICB9XHJcblxyXG4gIGNoYW5nZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBkb0FjdGlvbkJ5Um93KGRhdGE6IGFueSwgY29kZTogYW55LCBldmVudDogTW91c2VFdmVudCwgaW5kZXg6IGFueSkge1xyXG4gICAgdGhpcy5kb0FjdGlvbkJ5Um93QWN0aW9uLmVtaXQoe2RhdGE6IGRhdGEsIGNvZGU6IGNvZGUsIGV2ZW50OiBldmVudCwgaW5kZXg6IGluZGV4fSlcclxuICB9XHJcblxyXG4gIGVudGVyKGU6IGFueSkge1xyXG4gICAgdGhpcy5wb3BvdmVyVHJpZ2dlciA9IGUudG9FbGVtZW50LmNsaWVudFdpZHRoIDwgZS50b0VsZW1lbnQuc2Nyb2xsV2lkdGggPyAnaG92ZXInIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGlzU2hvd0J0bihkYXRhOiBhbnksIG9wZXJhdG9yOiBzdHJpbmcsIGFjdGlvbj86IFRhYmxlQWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNTaG93ID0gZmFsc2U7XHJcbiAgICBpZiAoIW9wZXJhdG9yIHx8IG9wZXJhdG9yID09IG51bGwgfHwgb3BlcmF0b3IgPT0gXCJcIikge1xyXG4gICAgICBpc1Nob3cgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChvcGVyYXRvci5pbmRleE9mKCcmJicpID4gMCkge1xyXG4gICAgICAvLyBhfGVxfGIgJiZjfGVxfGRcclxuICAgICAgY29uc3Qgb3BzID0gb3BlcmF0b3Iuc3BsaXQoJyYmJyk7XHJcbiAgICAgIGlmIChvcHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlzU2hvdyA9IHRydWVcclxuICAgICAgICAgIGlmICghdGhpcy5jaGVja0lzU2hvd0Jhc2Uob3BzW2ldLnNwbGl0KCd8JyksIGRhdGEpKSB7XHJcbiAgICAgICAgICAgIGlzU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAob3BlcmF0b3IuaW5kZXhPZignfHwnKSA+IDApIHtcclxuICAgICAgLy8gYXxlcXxifHxjfGVxfGRcclxuICAgICAgY29uc3Qgb3BzID0gb3BlcmF0b3Iuc3BsaXQoJ3x8Jyk7XHJcbiAgICAgIGlmIChvcHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpc1Nob3cgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLmNoZWNrSXNTaG93QmFzZShvcHNbaV0uc3BsaXQoJ3wnKSwgZGF0YSkpIHtcclxuICAgICAgICAgICAgaXNTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgb3AgPSBvcGVyYXRvci5zcGxpdChcInxcIik7XHJcbiAgICAgIGlzU2hvdyA9IHRoaXMuY2hlY2tJc1Nob3dCYXNlKG9wLCBkYXRhKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc1Nob3c7XHJcbiAgfVxyXG5cclxuICBjaGVja0lzU2hvd0Jhc2Uob3A6IGFueSwgZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNTaG93ID0gZmFsc2U7XHJcbiAgICBpZiAob3AubGVuZ3RoID4gMSkge1xyXG4gICAgICBsZXQgdmFsdWUgPSBkYXRhW29wWzBdXTtcclxuICAgICAgaXNTaG93ID0gdGhpcy5jb21wYXJlKHZhbHVlLCBvcFsxXSwgb3BbMl0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpc1Nob3cgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1Nob3c7XHJcbiAgfVxyXG5cclxuICBjb21wYXJlKHZhbHVlOiBhbnksIG9wZXJhdG9yOiBhbnksIHRhcmdldDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNSaWdodCA9IGZhbHNlO1xyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlICdlcScgOlxyXG4gICAgICAgIGlmICh2YWx1ZSA9PSB0YXJnZXQpIHtcclxuICAgICAgICAgIGlzUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZ2gnIDpcclxuICAgICAgICBpZiAodmFsdWUgPj0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ25lJzpcclxuICAgICAgICBpZiAodmFsdWUgIT0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnbm90RW1wdHknOlxyXG4gICAgICAgIGlzUmlnaHQgPSAhVG9vbHNVdGlsLmlzRW1wdHkodmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdlbXB0eSc6XHJcbiAgICAgICAgaXNSaWdodCA9IFRvb2xzVXRpbC5pc0VtcHR5KHZhbHVlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0IDpcclxuICAgICAgICBpc1JpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNSaWdodDtcclxuICB9XHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIml0ZW0udHlwZVwiPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW5uZXJIdG1sJ1wiPlxyXG4gICAgPGRpdiBbbmdTdHlsZV09XCJnZXRTdHlsZUNhbGxCYWNrKGl0ZW0scmVzdWx0KVwiIFtpbm5lckhUTUxdPVwiaXRlbS5pbm5lckh0bWxCYWNrKCh2YWx1ZXwgZGVmVmFsOml0ZW0uZGVmYXVsdFZhbCkscmVzdWx0KSB8IHNhZmVIdG1sXCIgID48L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGNvbG9yJ1wiPlxyXG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cInZhbHVlIHwgZGVmVmFsOml0ZW0uZGVmYXVsdFZhbFwiIFtuZ1N0eWxlXT1cInsnY29sb3InOml0ZW0uY29sb3J9XCJcclxuICAgICAgICAgKm5nSWY9XCJpdGVtLmNvbG9yU2hvdyA9PSB2YWx1ZVwiPjwvZGl2PlxyXG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cInZhbHVlIHwgZGVmVmFsOml0ZW0uZGVmYXVsdFZhbFwiICpuZ0lmPVwiaXRlbS5jb2xvclNob3cgIT0gdmFsdWVcIj48L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cclxuICAgICAgIDxzcGFuIG56LXBvcG92ZXIgKG1vdXNlZW50ZXIpPVwiZW50ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICBbbnpQb3BvdmVyVHJpZ2dlcl09XCJwb3BvdmVyVHJpZ2dlclwiXHJcbiAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZUNhbGxCYWNrKGl0ZW0scmVzdWx0KVwiXHJcbiAgICAgICAgICAgICBbbnpQb3BvdmVyQ29udGVudF09XCJ2YWx1ZSB8IGRhdGU6J3l5eXktTU0tZGQnIHwgZGVmVmFsOml0ZW0uZGVmYXVsdFZhbFwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cInZpZXctdGV4dFwiPnt7IHZhbHVlIHwgZGF0ZToneXl5eS1NTS1kZCcgfCBkZWZWYWw6aXRlbS5kZWZhdWx0VmFsfX08L3NwYW4+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVUaW1lJ1wiPlxyXG4gICAgICA8c3BhbiBuei1wb3BvdmVyIChtb3VzZWVudGVyKT1cImVudGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICBbbnpQb3BvdmVyVHJpZ2dlcl09XCJwb3BvdmVyVHJpZ2dlclwiXHJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlQ2FsbEJhY2soaXRlbSxyZXN1bHQpXCJcclxuICAgICAgICAgICAgW256UG9wb3ZlckNvbnRlbnRdPVwidmFsdWUgfCBkYXRlOid5eXl5LU1NLWRkIEhIOm1tOnNzJyB8IGRlZlZhbDppdGVtLmRlZmF1bHRWYWxcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInZpZXctdGV4dFwiPiB7eyB2YWx1ZSB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW06c3MnIHwgZGVmVmFsOml0ZW0uZGVmYXVsdFZhbH19PC9zcGFuPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxuei1zd2l0Y2ggKm5nU3dpdGNoQ2FzZT1cIidzd2l0Y2gnXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIFtuekRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGVDYWxsQmFjayhpdGVtLHJlc3VsdClcIlxyXG4gICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZG9BY3Rpb25Td2l0Y2gocmVzdWx0LGl0ZW0ua2V5KVwiIG56Q2hlY2tlZENoaWxkcmVuPVwi5pivXCIgbnpVbkNoZWNrZWRDaGlsZHJlbj1cIuWQplwiPlxyXG4gIDwvbnotc3dpdGNoPlxyXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzRGF0ZVRpbWUnXCI+XHJcbiAgICAgIDxzcGFuIG56LXBvcG92ZXIgKG1vdXNlZW50ZXIpPVwiZW50ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtuelBvcG92ZXJUcmlnZ2VyXT1cInBvcG92ZXJUcmlnZ2VyXCIgW25nU3R5bGVdPVwiZ2V0U3R5bGVDYWxsQmFjayhpdGVtLHJlc3VsdClcIlxyXG4gICAgICAgICAgICBbbnpQb3BvdmVyQ29udGVudF09XCJ2YWx1ZSB8IGRhdGU6J01NLWRkIEhIOm1tJyB8IGRlZlZhbDppdGVtLmRlZmF1bHRWYWxcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInZpZXctdGV4dFwiPiAge3sgdmFsdWUgfCBkYXRlOidNTS1kZCBISDptbScgfCBkZWZWYWw6aXRlbS5kZWZhdWx0VmFsfX08L3NwYW4+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpeGVkVGV4dCdcIiBbbmdTdHlsZV09XCJnZXRTdHlsZUNhbGxCYWNrKGl0ZW0scmVzdWx0KVwiIFtpbm5lckhUTUxdPVwiaXRlbS5rZXlcIj48L2Rpdj5cclxuXHJcbiAgPGltZyAqbmdTd2l0Y2hDYXNlPVwiJ2ltYWdlJ1wiIFtuZ1N0eWxlXT1cImdldFN0eWxlQ2FsbEJhY2soaXRlbSxyZXN1bHQpXCIgd2lkdGg9XCIzNXB4XCIgbnpTcmM9XCJ7eyh2YWx1ZSB8IGRlZlZhbDppdGVtLmRlZmF1bHRWYWwpIHwgb3NzSW1nfX1cIlxyXG4gICAgICAgbnotaW1hZ2UgYXRyRXJyb3JJbWcvPlxyXG4gIDxpbWcgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZTY0J1wiIFtuZ1N0eWxlXT1cImdldFN0eWxlQ2FsbEJhY2soaXRlbSxyZXN1bHQpXCIgd2lkdGg9XCIzNXB4XCIgbnpTcmM9XCJ7eyh2YWx1ZSB8IGRlZlZhbDppdGVtLmRlZmF1bHRWYWwpfX1cIlxyXG4gICAgICAgbnotaW1hZ2UgYXRyRXJyb3JJbWcvPlxyXG4gIDxkaXYgbnotcm93ICpuZ1N3aXRjaENhc2U9XCInYWN0aW9uJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbi1hcmVhXCIgbnotY29sIFtuelNwYW5dPVwiMjRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGl0ZW0uYWN0aW9uc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Nob3dCdG4ocmVzdWx0LGFjdGlvbi5vcGVyYXRvcixhY3Rpb24pXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi53aXRob3V0Um9sZVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG56LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIFtuelR5cGVdPVwiYWN0aW9uLmJ1dHRvblR5cGUmJmFjdGlvbi5idXR0b25UeXBlICE9ICdkYW5nZXInPyBhY3Rpb24uYnV0dG9uVHlwZSA6ICdwcmltYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW256RGFuZ2VyXT1cImFjdGlvbi5idXR0b25UeXBlID09ICdkYW5nZXInXCJcclxuICAgICAgICAgICAgICAgICAgICBuelNpemU9XCJzbWFsbFwiICphdHJSb2xlPVwiYWN0aW9uLmNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkb0FjdGlvbkJ5Um93KHJlc3VsdCxhY3Rpb24uY29kZSwkZXZlbnQsaSlcIj5cclxuICAgICAgICAgICAgICA8aSBuei1pY29uICpuZ0lmPVwiYWN0aW9uLmljb25cIiBbbnpUeXBlXT1cImFjdGlvbi5pY29uXCI+PC9pPlxyXG4gICAgICAgICAgICAgIHt7YWN0aW9uLm5hbWV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uLndpdGhvdXRSb2xlXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbnotYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgW256VHlwZV09XCJhY3Rpb24uYnV0dG9uVHlwZSYmYWN0aW9uLmJ1dHRvblR5cGUgIT0gJ2Rhbmdlcic/IGFjdGlvbi5idXR0b25UeXBlIDogJ3ByaW1hcnknXCJcclxuICAgICAgICAgICAgICAgICAgICBbbnpEYW5nZXJdPVwiYWN0aW9uLmJ1dHRvblR5cGUgPT0gJ2RhbmdlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgIG56U2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cImRvQWN0aW9uQnlSb3cocmVzdWx0LGFjdGlvbi5jb2RlLCRldmVudCxpKVwiPlxyXG4gICAgICAgICAgICAgIDxpIG56LWljb24gKm5nSWY9XCJhY3Rpb24uaWNvblwiIFtuelR5cGVdPVwiYWN0aW9uLmljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAge3thY3Rpb24ubmFtZX19PC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gPGJ1dHRvbiBuei1idXR0b24gW256VHlwZV09XCIncHJpbWFyeSdcIiBuelNpemU9XCJzbWFsbFwiICphdHJSb2xlPVwiYWN0aW9uLmNvZGVcIiAoY2xpY2spPVwiZG9BY3Rpb25CeVJvdyhyZXN1bHQsYWN0aW9uLmNvZGUsJGV2ZW50KVwiPnt7YWN0aW9uLm5hbWVcclxuICAgICAgICAgIH19PC9idXR0b24+IC0tPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgW25nU3R5bGVdPVwiZ2V0U3R5bGVDYWxsQmFjayhpdGVtLHJlc3VsdClcIiAqbmdTd2l0Y2hDYXNlPVwiJ2RpY3QnXCIgW2lubmVySFRNTF09XCJ2YWx1ZSB8IGRpY3RzOml0ZW0uZGljdENvZGU6JywnIHwgYXN5bmMgfCBkZWZWYWw6aXRlbS5kZWZhdWx0VmFsXCI+PC9kaXY+XHJcbiAgPGRpdiBbbmdTdHlsZV09XCJnZXRTdHlsZUNhbGxCYWNrKGl0ZW0scmVzdWx0KVwiIG56LXBvcG92ZXIgKG1vdXNlZW50ZXIpPVwiZW50ZXIoJGV2ZW50KVwiXHJcbiAgICAgICBbbnpQb3BvdmVyVHJpZ2dlcl09XCJwb3BvdmVyVHJpZ2dlclwiIFtuelBvcG92ZXJDb250ZW50XT0ndmFsdWUgfCBkZWZWYWw6aXRlbS5kZWZhdWx0VmFsJ1xyXG4gICAgICAgY2xhc3M9XCJ2aWV3LXRleHRcIiAqbmdTd2l0Y2hEZWZhdWx0IFtpbm5lckhUTUxdPVwidmFsdWUgfCBkZWZWYWw6aXRlbS5kZWZhdWx0VmFsXCI+PC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuIl19