@ng-nest/ui 13.0.4 → 13.0.8

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 (167) hide show
  1. package/alert/alert.component.d.ts +2 -1
  2. package/core/config/config.d.ts +7 -1
  3. package/core/interfaces/layout.type.d.ts +1 -1
  4. package/dialog/{dialog-container.component.d.ts → dialog-portal.component.d.ts} +3 -3
  5. package/dialog/{dialog-container.directives.d.ts → dialog-portal.directives.d.ts} +0 -0
  6. package/dialog/dialog-ref.d.ts +3 -3
  7. package/dialog/dialog.module.d.ts +3 -3
  8. package/dialog/dialog.property.d.ts +3 -3
  9. package/dialog/public-api.d.ts +2 -2
  10. package/drawer/drawer-container.component.d.ts +3 -13
  11. package/drawer/drawer-portal.component.d.ts +18 -0
  12. package/drawer/{drawer-container.directives.d.ts → drawer-portal.directives.d.ts} +0 -0
  13. package/drawer/drawer-ref.d.ts +3 -3
  14. package/drawer/drawer.component.d.ts +10 -3
  15. package/drawer/drawer.module.d.ts +9 -8
  16. package/drawer/drawer.property.d.ts +16 -2
  17. package/drawer/examples/en_US/default/container/README.md +6 -0
  18. package/drawer/examples/zh_CN/default/container/README.md +6 -0
  19. package/drawer/public-api.d.ts +3 -2
  20. package/esm2020/alert/alert.component.mjs +9 -4
  21. package/esm2020/auto-complete/auto-complete.module.mjs +2 -3
  22. package/esm2020/cascade/cascade.module.mjs +2 -3
  23. package/esm2020/color-picker/color-picker.module.mjs +2 -3
  24. package/esm2020/core/config/config.mjs +1 -1
  25. package/esm2020/core/interfaces/layout.type.mjs +1 -1
  26. package/esm2020/date-picker/date-picker.module.mjs +2 -3
  27. package/esm2020/dialog/dialog-portal.component.mjs +52 -0
  28. package/esm2020/dialog/{dialog-container.directives.mjs → dialog-portal.directives.mjs} +7 -7
  29. package/esm2020/dialog/dialog-ref.mjs +1 -1
  30. package/esm2020/dialog/dialog.component.mjs +5 -5
  31. package/esm2020/dialog/dialog.module.mjs +7 -7
  32. package/esm2020/dialog/dialog.property.mjs +2 -2
  33. package/esm2020/dialog/dialog.service.mjs +3 -3
  34. package/esm2020/dialog/public-api.mjs +3 -3
  35. package/esm2020/drawer/drawer-container.component.mjs +16 -39
  36. package/esm2020/drawer/drawer-portal.component.mjs +52 -0
  37. package/esm2020/drawer/{drawer-container.directives.mjs → drawer-portal.directives.mjs} +5 -5
  38. package/esm2020/drawer/drawer-ref.mjs +1 -1
  39. package/esm2020/drawer/drawer.component.mjs +54 -18
  40. package/esm2020/drawer/drawer.module.mjs +23 -6
  41. package/esm2020/drawer/drawer.property.mjs +19 -1
  42. package/esm2020/drawer/drawer.service.mjs +4 -4
  43. package/esm2020/drawer/public-api.mjs +4 -3
  44. package/esm2020/dropdown/dropdown.module.mjs +2 -3
  45. package/esm2020/find/find.component.mjs +13 -4
  46. package/esm2020/find/find.property.mjs +18 -2
  47. package/esm2020/menu/menu.component.mjs +3 -3
  48. package/esm2020/menu/menu.property.mjs +7 -2
  49. package/esm2020/message/message-ref.mjs +12 -0
  50. package/esm2020/message/message.component.mjs +3 -3
  51. package/esm2020/message/message.property.mjs +1 -1
  52. package/esm2020/message/message.service.mjs +34 -13
  53. package/esm2020/message/public-api.mjs +2 -1
  54. package/esm2020/popconfirm/popconfirm.component.mjs +26 -5
  55. package/esm2020/popconfirm/popconfirm.property.mjs +10 -3
  56. package/esm2020/popover/popover.directive.mjs +8 -2
  57. package/esm2020/popover/popover.module.mjs +2 -3
  58. package/esm2020/popover/popover.property.mjs +7 -2
  59. package/esm2020/select/select.module.mjs +2 -3
  60. package/esm2020/table/table-body.component.mjs +4 -4
  61. package/esm2020/table/table.component.mjs +3 -3
  62. package/esm2020/table/table.property.mjs +7 -3
  63. package/esm2020/time-picker/time-picker.module.mjs +2 -3
  64. package/esm2020/tooltip/tooltip.directive.mjs +12 -4
  65. package/esm2020/tooltip/tooltip.module.mjs +2 -3
  66. package/esm2020/tooltip/tooltip.property.mjs +18 -2
  67. package/esm2020/tree/tree-node.component.mjs +3 -3
  68. package/esm2020/tree/tree.property.mjs +8 -2
  69. package/fesm2015/ng-nest-ui-alert.mjs +8 -3
  70. package/fesm2015/ng-nest-ui-alert.mjs.map +1 -1
  71. package/fesm2015/ng-nest-ui-auto-complete.mjs +1 -2
  72. package/fesm2015/ng-nest-ui-auto-complete.mjs.map +1 -1
  73. package/fesm2015/ng-nest-ui-cascade.mjs +1 -2
  74. package/fesm2015/ng-nest-ui-cascade.mjs.map +1 -1
  75. package/fesm2015/ng-nest-ui-color-picker.mjs +1 -2
  76. package/fesm2015/ng-nest-ui-color-picker.mjs.map +1 -1
  77. package/fesm2015/ng-nest-ui-core.mjs.map +1 -1
  78. package/fesm2015/ng-nest-ui-date-picker.mjs +1 -2
  79. package/fesm2015/ng-nest-ui-date-picker.mjs.map +1 -1
  80. package/fesm2015/ng-nest-ui-dialog.mjs +22 -22
  81. package/fesm2015/ng-nest-ui-dialog.mjs.map +1 -1
  82. package/fesm2015/ng-nest-ui-drawer.mjs +129 -32
  83. package/fesm2015/ng-nest-ui-drawer.mjs.map +1 -1
  84. package/fesm2015/ng-nest-ui-dropdown.mjs +1 -2
  85. package/fesm2015/ng-nest-ui-dropdown.mjs.map +1 -1
  86. package/fesm2015/ng-nest-ui-find.mjs +29 -4
  87. package/fesm2015/ng-nest-ui-find.mjs.map +1 -1
  88. package/fesm2015/ng-nest-ui-menu.mjs +8 -3
  89. package/fesm2015/ng-nest-ui-menu.mjs.map +1 -1
  90. package/fesm2015/ng-nest-ui-message.mjs +48 -15
  91. package/fesm2015/ng-nest-ui-message.mjs.map +1 -1
  92. package/fesm2015/ng-nest-ui-popconfirm.mjs +34 -6
  93. package/fesm2015/ng-nest-ui-popconfirm.mjs.map +1 -1
  94. package/fesm2015/ng-nest-ui-popover.mjs +14 -4
  95. package/fesm2015/ng-nest-ui-popover.mjs.map +1 -1
  96. package/fesm2015/ng-nest-ui-select.mjs +1 -2
  97. package/fesm2015/ng-nest-ui-select.mjs.map +1 -1
  98. package/fesm2015/ng-nest-ui-table.mjs +11 -7
  99. package/fesm2015/ng-nest-ui-table.mjs.map +1 -1
  100. package/fesm2015/ng-nest-ui-time-picker.mjs +1 -2
  101. package/fesm2015/ng-nest-ui-time-picker.mjs.map +1 -1
  102. package/fesm2015/ng-nest-ui-tooltip.mjs +29 -6
  103. package/fesm2015/ng-nest-ui-tooltip.mjs.map +1 -1
  104. package/fesm2015/ng-nest-ui-tree.mjs +9 -3
  105. package/fesm2015/ng-nest-ui-tree.mjs.map +1 -1
  106. package/fesm2020/ng-nest-ui-alert.mjs +8 -3
  107. package/fesm2020/ng-nest-ui-alert.mjs.map +1 -1
  108. package/fesm2020/ng-nest-ui-auto-complete.mjs +1 -2
  109. package/fesm2020/ng-nest-ui-auto-complete.mjs.map +1 -1
  110. package/fesm2020/ng-nest-ui-cascade.mjs +1 -2
  111. package/fesm2020/ng-nest-ui-cascade.mjs.map +1 -1
  112. package/fesm2020/ng-nest-ui-color-picker.mjs +1 -2
  113. package/fesm2020/ng-nest-ui-color-picker.mjs.map +1 -1
  114. package/fesm2020/ng-nest-ui-core.mjs.map +1 -1
  115. package/fesm2020/ng-nest-ui-date-picker.mjs +1 -2
  116. package/fesm2020/ng-nest-ui-date-picker.mjs.map +1 -1
  117. package/fesm2020/ng-nest-ui-dialog.mjs +22 -22
  118. package/fesm2020/ng-nest-ui-dialog.mjs.map +1 -1
  119. package/fesm2020/ng-nest-ui-drawer.mjs +127 -32
  120. package/fesm2020/ng-nest-ui-drawer.mjs.map +1 -1
  121. package/fesm2020/ng-nest-ui-dropdown.mjs +1 -2
  122. package/fesm2020/ng-nest-ui-dropdown.mjs.map +1 -1
  123. package/fesm2020/ng-nest-ui-find.mjs +29 -4
  124. package/fesm2020/ng-nest-ui-find.mjs.map +1 -1
  125. package/fesm2020/ng-nest-ui-menu.mjs +8 -3
  126. package/fesm2020/ng-nest-ui-menu.mjs.map +1 -1
  127. package/fesm2020/ng-nest-ui-message.mjs +47 -15
  128. package/fesm2020/ng-nest-ui-message.mjs.map +1 -1
  129. package/fesm2020/ng-nest-ui-popconfirm.mjs +34 -6
  130. package/fesm2020/ng-nest-ui-popconfirm.mjs.map +1 -1
  131. package/fesm2020/ng-nest-ui-popover.mjs +14 -4
  132. package/fesm2020/ng-nest-ui-popover.mjs.map +1 -1
  133. package/fesm2020/ng-nest-ui-select.mjs +1 -2
  134. package/fesm2020/ng-nest-ui-select.mjs.map +1 -1
  135. package/fesm2020/ng-nest-ui-table.mjs +11 -7
  136. package/fesm2020/ng-nest-ui-table.mjs.map +1 -1
  137. package/fesm2020/ng-nest-ui-time-picker.mjs +1 -2
  138. package/fesm2020/ng-nest-ui-time-picker.mjs.map +1 -1
  139. package/fesm2020/ng-nest-ui-tooltip.mjs +29 -6
  140. package/fesm2020/ng-nest-ui-tooltip.mjs.map +1 -1
  141. package/fesm2020/ng-nest-ui-tree.mjs +9 -3
  142. package/fesm2020/ng-nest-ui-tree.mjs.map +1 -1
  143. package/find/find.property.d.ts +31 -1
  144. package/menu/menu.property.d.ts +8 -3
  145. package/message/examples/en_US/default/loading/README.md +6 -0
  146. package/message/examples/zh_CN/default/loading/README.md +6 -0
  147. package/message/message-ref.d.ts +8 -0
  148. package/message/message.component.d.ts +3 -3
  149. package/message/message.property.d.ts +23 -3
  150. package/message/message.service.d.ts +4 -1
  151. package/message/public-api.d.ts +1 -0
  152. package/package.json +7 -7
  153. package/popconfirm/examples/en_US/default/async-close/README.md +6 -0
  154. package/popconfirm/examples/en_US/default/condition/README.md +6 -0
  155. package/popconfirm/examples/zh_CN/default/async-close/README.md +6 -0
  156. package/popconfirm/examples/zh_CN/default/condition/README.md +6 -0
  157. package/popconfirm/popconfirm.component.d.ts +6 -2
  158. package/popconfirm/popconfirm.property.d.ts +13 -2
  159. package/popover/popover.property.d.ts +6 -1
  160. package/steps/examples/zh_CN/default/node-status/README.md +1 -1
  161. package/table/examples/en_US/default/rowclass/README.md +6 -0
  162. package/table/examples/zh_CN/default/rowclass/README.md +6 -0
  163. package/table/table.property.d.ts +23 -2
  164. package/tooltip/tooltip.directive.d.ts +1 -0
  165. package/tooltip/tooltip.property.d.ts +11 -1
  166. package/tree/tree.property.d.ts +6 -1
  167. package/esm2020/dialog/dialog-container.component.mjs +0 -52
@@ -15,6 +15,11 @@ export declare const X_MESSAGE_CONFIG_NAME = "message";
15
15
  * Message Option
16
16
  */
17
17
  export interface XMessageOption extends XAlertOption {
18
+ /**
19
+ * @zh_CN 消息框的 id
20
+ * @en_US Message id
21
+ */
22
+ id?: string;
18
23
  /**
19
24
  * @zh_CN 方位,九宫格
20
25
  * @en_US Direction, nine grid
@@ -98,12 +103,27 @@ export interface XMessageOverlayRef extends XPortalOverlayRef<XMessageComponent>
98
103
  * @en_US Message object in Jiugongge
99
104
  */
100
105
  export interface XMessagePlacement {
101
- [property: string]: XMessageRef;
106
+ [property: string]: XMessagePlacementRef;
102
107
  }
103
- export interface XMessageRef {
108
+ /**
109
+ * @zh_CN 九宫格中的消息对象
110
+ * @en_US Message object in Jiugongge
111
+ */
112
+ export interface XMessagePlacementRef {
113
+ /**
114
+ * @zh_CN 方位对应的 overlayRef
115
+ * @en_US Placement overlayRef
116
+ */
104
117
  ref: XMessageOverlayRef;
118
+ /**
119
+ * @zh_CN 对应的消息 list 数据
120
+ * @en_US Corresponding message list data
121
+ */
105
122
  list: XMessageOption[];
106
- currentClose: () => void;
123
+ /**
124
+ * @zh_CN 关闭所有数据
125
+ * @en_US Close all data
126
+ */
107
127
  closeAll: () => void;
108
128
  }
109
129
  /**
@@ -1,6 +1,7 @@
1
1
  import { XTemplate, XConfigService, XMessageConfig } from '@ng-nest/ui/core';
2
- import { XMessageOverlayRef, XMessagePlacement, XMessageRef, XMessageOption } from './message.property';
2
+ import { XMessageOverlayRef, XMessagePlacement, XMessageOption } from './message.property';
3
3
  import { XPortalService } from '@ng-nest/ui/portal';
4
+ import { XMessageRef } from './message-ref';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare class XMessageService {
6
7
  portal: XPortalService;
@@ -13,6 +14,7 @@ export declare class XMessageService {
13
14
  success(option: XTemplate | XMessageOption): XMessageRef;
14
15
  warning(option: XTemplate | XMessageOption): XMessageRef;
15
16
  error(option: XTemplate | XMessageOption): XMessageRef;
17
+ loading(option: XTemplate | XMessageOption): XMessageRef;
16
18
  create(option: XMessageOption): XMessageOverlayRef;
17
19
  private createMessage;
18
20
  private closeAll;
@@ -20,6 +22,7 @@ export declare class XMessageService {
20
22
  private messageChange;
21
23
  private setDuration;
22
24
  private removeMessage;
25
+ private updateMessage;
23
26
  static ɵfac: i0.ɵɵFactoryDeclaration<XMessageService, never>;
24
27
  static ɵprov: i0.ɵɵInjectableDeclaration<XMessageService>;
25
28
  }
@@ -1,4 +1,5 @@
1
1
  export * from './message.component';
2
+ export * from './message-ref';
2
3
  export * from './message.service';
3
4
  export * from './message.module';
4
5
  export * from './message.property';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-nest/ui",
3
- "version": "13.0.4",
3
+ "version": "13.0.8",
4
4
  "homepage": "https://www.ngnest.com",
5
5
  "author": "ng-nest",
6
6
  "ng-update": {
@@ -13,14 +13,14 @@
13
13
  "url": "https://github.com/NG-NEST/ng-nest"
14
14
  },
15
15
  "dependencies": {
16
- "tslib": "~2.3.0",
17
- "@angular/cdk": "~13.0.0"
16
+ "tslib": "^2.3.0",
17
+ "@angular/cdk": "^13.0.0"
18
18
  },
19
19
  "peerDependencies": {
20
- "@angular/animations": "~13.0.0",
21
- "@angular/common": "~13.0.0",
22
- "@angular/core": "~13.0.0",
23
- "@angular/forms": "~13.0.0"
20
+ "@angular/animations": "^13.0.0",
21
+ "@angular/common": "^13.0.0",
22
+ "@angular/core": "^13.0.0",
23
+ "@angular/forms": "^13.0.0"
24
24
  },
25
25
  "module": "fesm2015/ng-nest-ui.mjs",
26
26
  "es2020": "fesm2020/ng-nest-ui.mjs",
@@ -0,0 +1,6 @@
1
+ ---
2
+ order: 2
3
+ label: 'Async'
4
+ ---
5
+
6
+ Use the `confirmAsync` property to use an asynchronous confirmation, pass a `Observable` object, trigger confirmation via `next()`.
@@ -0,0 +1,6 @@
1
+ ---
2
+ order: 3
3
+ label: 'Condition'
4
+ ---
5
+
6
+ Trigger the bubble box using the `condition` property, whether it is `ture` or `false` will execute `confirm`.
@@ -0,0 +1,6 @@
1
+ ---
2
+ order: 2
3
+ label: '异步确认'
4
+ ---
5
+
6
+ 使用 `confirmAsync` 属性来使用异步确认,传递一个 `Observable` 对象,通过 `next()` 来触发确认。
@@ -0,0 +1,6 @@
1
+ ---
2
+ order: 3
3
+ label: '条件触发'
4
+ ---
5
+
6
+ 使用 `condition` 属性来条件触发气泡框,不管是 `ture` 还是 `false` 都会执行 `confirm` 。
@@ -1,9 +1,9 @@
1
- import { Renderer2, ElementRef, ChangeDetectorRef } from '@angular/core';
1
+ import { Renderer2, ElementRef, ChangeDetectorRef, OnDestroy } from '@angular/core';
2
2
  import { XPopconfirmProperty } from './popconfirm.property';
3
3
  import { XBoolean, XConfigService } from '@ng-nest/ui/core';
4
4
  import { XI18nService, XI18nPopconfirm } from '@ng-nest/ui/i18n';
5
5
  import * as i0 from "@angular/core";
6
- export declare class XPopconfirmComponent extends XPopconfirmProperty {
6
+ export declare class XPopconfirmComponent extends XPopconfirmProperty implements OnDestroy {
7
7
  renderer: Renderer2;
8
8
  elementRef: ElementRef;
9
9
  cdr: ChangeDetectorRef;
@@ -11,13 +11,17 @@ export declare class XPopconfirmComponent extends XPopconfirmProperty {
11
11
  i18n: XI18nService;
12
12
  visible: XBoolean;
13
13
  locale: XI18nPopconfirm;
14
+ loading: boolean;
14
15
  private _unSubject;
16
+ private _asyncUnSub;
15
17
  get getCancelText(): string | undefined;
16
18
  get getConfirmText(): string | undefined;
17
19
  constructor(renderer: Renderer2, elementRef: ElementRef, cdr: ChangeDetectorRef, configService: XConfigService, i18n: XI18nService);
18
20
  ngOnInit(): void;
21
+ ngOnDestroy(): void;
19
22
  onCancel(): void;
20
23
  onConfirm(): void;
24
+ onClick(): void;
21
25
  static ɵfac: i0.ɵɵFactoryDeclaration<XPopconfirmComponent, never>;
22
26
  static ɵcmp: i0.ɵɵComponentDeclaration<XPopconfirmComponent, "x-popconfirm", never, {}, {}, never, ["*"]>;
23
27
  }
@@ -1,6 +1,7 @@
1
- import { XPlacement, XTemplate, XProperty } from '@ng-nest/ui/core';
1
+ import { XPlacement, XTemplate, XProperty, XBoolean } from '@ng-nest/ui/core';
2
2
  import { XPopoverTrigger } from '@ng-nest/ui/popover';
3
3
  import { EventEmitter } from '@angular/core';
4
+ import { Observable } from 'rxjs';
4
5
  import * as i0 from "@angular/core";
5
6
  /**
6
7
  * Popconfirm
@@ -57,6 +58,16 @@ export declare class XPopconfirmProperty extends XProperty {
57
58
  * @en_US Confirmed text
58
59
  */
59
60
  confirmText?: string;
61
+ /**
62
+ * @zh_CN 确认异步 Observable
63
+ * @en_US Confirm async
64
+ */
65
+ confirmAsync?: Observable<void>;
66
+ /**
67
+ * @zh_CN 条件触发
68
+ * @en_US condition trigger
69
+ */
70
+ condition?: XBoolean;
60
71
  /**
61
72
  * @zh_CN 取消的点击事件
62
73
  * @en_US Cancelled click event
@@ -68,5 +79,5 @@ export declare class XPopconfirmProperty extends XProperty {
68
79
  */
69
80
  confirm: EventEmitter<any>;
70
81
  static ɵfac: i0.ɵɵFactoryDeclaration<XPopconfirmProperty, never>;
71
- static ɵcmp: i0.ɵɵComponentDeclaration<XPopconfirmProperty, "ng-component", never, { "title": "title"; "content": "content"; "placement": "placement"; "trigger": "trigger"; "width": "width"; "icon": "icon"; "iconColor": "iconColor"; "cancelText": "cancelText"; "confirmText": "confirmText"; }, { "cancel": "cancel"; "confirm": "confirm"; }, never, never>;
82
+ static ɵcmp: i0.ɵɵComponentDeclaration<XPopconfirmProperty, "ng-component", never, { "title": "title"; "content": "content"; "placement": "placement"; "trigger": "trigger"; "width": "width"; "icon": "icon"; "iconColor": "iconColor"; "cancelText": "cancelText"; "confirmText": "confirmText"; "confirmAsync": "confirmAsync"; "condition": "condition"; }, { "cancel": "cancel"; "confirm": "confirm"; }, never, never>;
72
83
  }
@@ -46,13 +46,18 @@ export declare class XPopoverProperty extends XProperty {
46
46
  * @en_US Show/hide control
47
47
  */
48
48
  visible?: XBoolean;
49
+ /**
50
+ * @zh_CN 条件触发
51
+ * @en_US condition trigger
52
+ */
53
+ condition?: XBoolean;
49
54
  /**
50
55
  * @zh_CN 显示/隐藏改变的事件
51
56
  * @en_US Show/hide changed events
52
57
  */
53
58
  visibleChange: EventEmitter<XBoolean>;
54
59
  static ɵfac: i0.ɵɵFactoryDeclaration<XPopoverProperty, never>;
55
- static ɵdir: i0.ɵɵDirectiveDeclaration<XPopoverProperty, "[x-popover], x-popover", never, { "title": "title"; "content": "content"; "footer": "footer"; "placement": "placement"; "trigger": "trigger"; "width": "width"; "visible": "visible"; }, { "visibleChange": "visibleChange"; }, never>;
60
+ static ɵdir: i0.ɵɵDirectiveDeclaration<XPopoverProperty, "[x-popover], x-popover", never, { "title": "title"; "content": "content"; "footer": "footer"; "placement": "placement"; "trigger": "trigger"; "width": "width"; "visible": "visible"; "condition": "condition"; }, { "visibleChange": "visibleChange"; }, never>;
56
61
  }
57
62
  /**
58
63
  * @zh_CN 激活方式
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  order: 9
3
- label: '节点状态'
3
+ label: '节点状态优先'
4
4
  ---
5
5
 
6
6
  使用 `nodeStatus` 属性来启用单节点设置状态优先,`activatedIndex` 和 `status` 将失效,可以有多个相同状态的节点。
@@ -0,0 +1,6 @@
1
+ ---
2
+ order: 10
3
+ label: '行样式'
4
+ ---
5
+
6
+ - 使用 `rowClass` 属性定义行样式,样式名需要写在 `::ng-deep` 中。
@@ -0,0 +1,6 @@
1
+ ---
2
+ order: 10
3
+ label: '行样式'
4
+ ---
5
+
6
+ - 使用 `rowClass` 属性定义行样式,样式名需要写在 `::ng-deep` 中。
@@ -62,6 +62,13 @@ export declare class XTableProperty extends XPaginationProperty implements XTabl
62
62
  * @en_US Column content custom template
63
63
  */
64
64
  bodyColumnTpl: XTableTemplate;
65
+ /**
66
+ * @zh_CN 行条件样式
67
+ * @en_US Row condition class
68
+ */
69
+ rowClass?: (row: XTableRow, index: number) => {
70
+ [className: string]: boolean;
71
+ };
65
72
  /**
66
73
  * @zh_CN 排序点击的事件
67
74
  * @en_US Sort click events
@@ -143,7 +150,7 @@ export declare class XTableProperty extends XPaginationProperty implements XTabl
143
150
  */
144
151
  rowSize?: XSize;
145
152
  static ɵfac: i0.ɵɵFactoryDeclaration<XTableProperty, never>;
146
- static ɵcmp: i0.ɵɵComponentDeclaration<XTableProperty, "ng-component", never, { "data": "data"; "columns": "columns"; "rowHeight": "rowHeight"; "loading": "loading"; "bordered": "bordered"; "showHeader": "showHeader"; "activatedRow": "activatedRow"; "headColumnTpl": "headColumnTpl"; "bodyColumnTpl": "bodyColumnTpl"; "allowSelectRow": "allowSelectRow"; "virtualScroll": "virtualScroll"; "bodyHeight": "bodyHeight"; "itemSize": "itemSize"; "minBufferPx": "minBufferPx"; "maxBufferPx": "maxBufferPx"; "adaptionHeight": "adaptionHeight"; "docPercent": "docPercent"; "checkedRow": "checkedRow"; "manual": "manual"; "scroll": "scroll"; "cellConfig": "cellConfig"; "rowSize": "rowSize"; }, { "activatedRowChange": "activatedRowChange"; "sortChange": "sortChange"; "manualChange": "manualChange"; }, never, never>;
153
+ static ɵcmp: i0.ɵɵComponentDeclaration<XTableProperty, "ng-component", never, { "data": "data"; "columns": "columns"; "rowHeight": "rowHeight"; "loading": "loading"; "bordered": "bordered"; "showHeader": "showHeader"; "activatedRow": "activatedRow"; "headColumnTpl": "headColumnTpl"; "bodyColumnTpl": "bodyColumnTpl"; "rowClass": "rowClass"; "allowSelectRow": "allowSelectRow"; "virtualScroll": "virtualScroll"; "bodyHeight": "bodyHeight"; "itemSize": "itemSize"; "minBufferPx": "minBufferPx"; "maxBufferPx": "maxBufferPx"; "adaptionHeight": "adaptionHeight"; "docPercent": "docPercent"; "checkedRow": "checkedRow"; "manual": "manual"; "scroll": "scroll"; "cellConfig": "cellConfig"; "rowSize": "rowSize"; }, { "activatedRowChange": "activatedRowChange"; "sortChange": "sortChange"; "manualChange": "manualChange"; }, never, never>;
147
154
  }
148
155
  /**
149
156
  * Table Option
@@ -185,6 +192,13 @@ export interface XTableOption extends XPaginationOption {
185
192
  * @en_US Column content custom template
186
193
  */
187
194
  bodyColumnTpl?: XTableTemplate;
195
+ /**
196
+ * @zh_CN 行条件样式
197
+ * @en_US Row condition class
198
+ */
199
+ rowClass?: (row: XTableRow, index: number) => {
200
+ [className: string]: boolean;
201
+ };
188
202
  /**
189
203
  * @zh_CN 开启虚拟滚动
190
204
  * @en_US Turn on virtual scrolling
@@ -524,8 +538,15 @@ export declare class XTableBodyProperty extends XProperty {
524
538
  * @en_US Cell config rules
525
539
  */
526
540
  cellConfig?: XTableCellConfigRule;
541
+ /**
542
+ * @zh_CN 行条件样式
543
+ * @en_US Row condition class
544
+ */
545
+ rowClass?: (row: XTableRow, index: number) => {
546
+ [className: string]: boolean;
547
+ };
527
548
  static ɵfac: i0.ɵɵFactoryDeclaration<XTableBodyProperty, never>;
528
- static ɵcmp: i0.ɵɵComponentDeclaration<XTableBodyProperty, "ng-component", never, { "data": "data"; "columns": "columns"; "columnTpl": "columnTpl"; "activatedRow": "activatedRow"; "rowHeight": "rowHeight"; "bodyHeight": "bodyHeight"; "allowSelectRow": "allowSelectRow"; "virtualScroll": "virtualScroll"; "itemSize": "itemSize"; "minBufferPx": "minBufferPx"; "maxBufferPx": "maxBufferPx"; "adaptionHeight": "adaptionHeight"; "docPercent": "docPercent"; "scroll": "scroll"; "cellConfig": "cellConfig"; }, { "activatedRowChange": "activatedRowChange"; }, never, never>;
549
+ static ɵcmp: i0.ɵɵComponentDeclaration<XTableBodyProperty, "ng-component", never, { "data": "data"; "columns": "columns"; "columnTpl": "columnTpl"; "activatedRow": "activatedRow"; "rowHeight": "rowHeight"; "bodyHeight": "bodyHeight"; "allowSelectRow": "allowSelectRow"; "virtualScroll": "virtualScroll"; "itemSize": "itemSize"; "minBufferPx": "minBufferPx"; "maxBufferPx": "maxBufferPx"; "adaptionHeight": "adaptionHeight"; "docPercent": "docPercent"; "scroll": "scroll"; "cellConfig": "cellConfig"; "rowClass": "rowClass"; }, { "activatedRowChange": "activatedRowChange"; }, never, never>;
529
550
  }
530
551
  /**
531
552
  * Table Foot
@@ -15,6 +15,7 @@ export declare class XTooltipDirective extends XTooltipProperty implements OnCha
15
15
  contentChange: BehaviorSubject<any>;
16
16
  positionChange: Subject<any>;
17
17
  timeoutHide: any;
18
+ timeoutShow: any;
18
19
  private _unSubject;
19
20
  constructor(elementRef: ElementRef, portalService: XPortalService, viewContainerRef: ViewContainerRef, overlay: Overlay);
20
21
  mouseenter(): void;
@@ -40,8 +40,18 @@ export declare class XTooltipProperty {
40
40
  * @en_US Manually handle the shutdown event
41
41
  */
42
42
  manual?: XBoolean;
43
+ /**
44
+ * @zh_CN 鼠标移入后延时多少才显示
45
+ * @en_US How much is the mouse transfer after transfer
46
+ */
47
+ mouseEnterDelay: number;
48
+ /**
49
+ * @zh_CN 鼠标移出后延时多少才隐藏
50
+ * @en_US How much hidden is hidden after the mouse is removed
51
+ */
52
+ mouseLeaveDelay: number;
43
53
  static ɵfac: i0.ɵɵFactoryDeclaration<XTooltipProperty, never>;
44
- static ɵdir: i0.ɵɵDirectiveDeclaration<XTooltipProperty, "[x-tooltip], x-tooltip", never, { "content": "content"; "placement": "placement"; "visible": "visible"; "backgroundColor": "backgroundColor"; "color": "color"; "manual": "manual"; }, {}, never>;
54
+ static ɵdir: i0.ɵɵDirectiveDeclaration<XTooltipProperty, "[x-tooltip], x-tooltip", never, { "content": "content"; "placement": "placement"; "visible": "visible"; "backgroundColor": "backgroundColor"; "color": "color"; "manual": "manual"; "mouseEnterDelay": "mouseEnterDelay"; "mouseLeaveDelay": "mouseLeaveDelay"; }, {}, never>;
45
55
  }
46
56
  /**
47
57
  * Tooltip Portal
@@ -111,13 +111,18 @@ export declare class XTreeProperty extends XProperty {
111
111
  * @en_US Tree node operation buttons
112
112
  */
113
113
  actions: XTreeAction[];
114
+ /**
115
+ * @zh_CN 开启虚拟滚动
116
+ * @en_US Turn on virtual scrolling
117
+ */
118
+ virtualScroll: XBoolean;
114
119
  /**
115
120
  * @zh_CN 参数控制请求改变事件
116
121
  * @en_US Parameter control request change event
117
122
  */
118
123
  manualChange: EventEmitter<boolean>;
119
124
  static ɵfac: i0.ɵɵFactoryDeclaration<XTreeProperty, never>;
120
- static ɵcmp: i0.ɵɵComponentDeclaration<XTreeProperty, "ng-component", never, { "data": "data"; "checkbox": "checkbox"; "lazy": "lazy"; "activatedId": "activatedId"; "expanded": "expanded"; "checked": "checked"; "expandedAll": "expandedAll"; "expandedLevel": "expandedLevel"; "nodeOpen": "nodeOpen"; "spacing": "spacing"; "labelTpl": "labelTpl"; "nodeHeight": "nodeHeight"; "allowManyActivated": "allowManyActivated"; "manual": "manual"; "levelCheck": "levelCheck"; "nodeNowrap": "nodeNowrap"; "nodeAlignItems": "nodeAlignItems"; "actions": "actions"; }, { "activatedChange": "activatedChange"; "checkboxChange": "checkboxChange"; "manualChange": "manualChange"; }, never, never>;
125
+ static ɵcmp: i0.ɵɵComponentDeclaration<XTreeProperty, "ng-component", never, { "data": "data"; "checkbox": "checkbox"; "lazy": "lazy"; "activatedId": "activatedId"; "expanded": "expanded"; "checked": "checked"; "expandedAll": "expandedAll"; "expandedLevel": "expandedLevel"; "nodeOpen": "nodeOpen"; "spacing": "spacing"; "labelTpl": "labelTpl"; "nodeHeight": "nodeHeight"; "allowManyActivated": "allowManyActivated"; "manual": "manual"; "levelCheck": "levelCheck"; "nodeNowrap": "nodeNowrap"; "nodeAlignItems": "nodeAlignItems"; "actions": "actions"; "virtualScroll": "virtualScroll"; }, { "activatedChange": "activatedChange"; "checkboxChange": "checkboxChange"; "manualChange": "manualChange"; }, never, never>;
121
126
  }
122
127
  /**
123
128
  * @zh_CN Tree 数据对象
@@ -1,52 +0,0 @@
1
- import { BasePortalOutlet, CdkPortalOutlet } from '@angular/cdk/portal';
2
- import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, ViewChild, ViewEncapsulation } from '@angular/core';
3
- import { XMoveBoxAnimation } from '@ng-nest/ui/core';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/cdk/portal";
6
- export class XDialogContainerComponent extends BasePortalOutlet {
7
- constructor() {
8
- super();
9
- this._has = true;
10
- this.animationChanged = new EventEmitter();
11
- }
12
- done({ toState, totalTime }) {
13
- this.animationChanged.next({ action: 'done', state: toState, totalTime });
14
- }
15
- start({ toState, totalTime }) {
16
- this.animationChanged.next({ action: 'start', state: toState, totalTime });
17
- }
18
- attachComponentPortal(portal) {
19
- if (this.portalOutlet.hasAttached()) {
20
- throw Error('dialog portal has attached');
21
- }
22
- return this.portalOutlet.attachComponentPortal(portal);
23
- }
24
- attachTemplatePortal(portal) {
25
- if (this.portalOutlet.hasAttached()) {
26
- throw Error('dialog portal has attached');
27
- }
28
- return this.portalOutlet.attachTemplatePortal(portal);
29
- }
30
- }
31
- /** @nocollapse */ /** @nocollapse */ XDialogContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDialogContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
- /** @nocollapse */ /** @nocollapse */ XDialogContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: XDialogContainerComponent, selector: "x-dialog-container", host: { listeners: { "@x-move-box-animation.done": "done($event)", "@x-move-box-animation.start": "start($event)" }, properties: { "class.x-dialog-container": "this._has", "@x-move-box-animation": "this.placement" } }, viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template cdkPortalOutlet></ng-template>\r\n", styles: [".x-dialog-container{margin:0;padding:0;width:100%;height:100%;overflow:auto;display:block;padding:1rem;box-sizing:border-box;min-height:inherit;max-height:inherit;background-color:var(--x-background);box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);border:.0625rem solid transparent;border-radius:var(--x-border-radius)}.x-dialog-container-title{display:block;margin:0 0 .5rem;font-weight:600;color:var(--x-text-300);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.x-dialog-container-content{display:block;margin:0 -1rem;padding:0 1rem;max-height:70vh;overflow:auto;color:var(--x-text-300);font-size:calc(var(--x-font-size) - .0625rem);line-height:1.325rem}.x-dialog-container-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;box-sizing:content-box;margin-bottom:-1rem;min-height:4rem}.x-dialog-container-actions[align=center]{justify-content:center}.x-dialog-container-actions[align=start]{justify-content:flex-start}.x-dialog-container-actions x-button:not(:first-child){margin-left:1rem}\n"], directives: [{ type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], animations: [XMoveBoxAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: XDialogContainerComponent, decorators: [{
34
- type: Component,
35
- args: [{ selector: 'x-dialog-container', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [XMoveBoxAnimation], template: "<ng-template cdkPortalOutlet></ng-template>\r\n", styles: [".x-dialog-container{margin:0;padding:0;width:100%;height:100%;overflow:auto;display:block;padding:1rem;box-sizing:border-box;min-height:inherit;max-height:inherit;background-color:var(--x-background);box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);border:.0625rem solid transparent;border-radius:var(--x-border-radius)}.x-dialog-container-title{display:block;margin:0 0 .5rem;font-weight:600;color:var(--x-text-300);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.x-dialog-container-content{display:block;margin:0 -1rem;padding:0 1rem;max-height:70vh;overflow:auto;color:var(--x-text-300);font-size:calc(var(--x-font-size) - .0625rem);line-height:1.325rem}.x-dialog-container-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;box-sizing:content-box;margin-bottom:-1rem;min-height:4rem}.x-dialog-container-actions[align=center]{justify-content:center}.x-dialog-container-actions[align=start]{justify-content:flex-start}.x-dialog-container-actions x-button:not(:first-child){margin-left:1rem}\n"] }]
36
- }], ctorParameters: function () { return []; }, propDecorators: { _has: [{
37
- type: HostBinding,
38
- args: ['class.x-dialog-container']
39
- }], placement: [{
40
- type: HostBinding,
41
- args: ['@x-move-box-animation']
42
- }], done: [{
43
- type: HostListener,
44
- args: ['@x-move-box-animation.done', ['$event']]
45
- }], start: [{
46
- type: HostListener,
47
- args: ['@x-move-box-animation.start', ['$event']]
48
- }], portalOutlet: [{
49
- type: ViewChild,
50
- args: [CdkPortalOutlet, { static: true }]
51
- }] } });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS9kaWFsb2cvZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS9kaWFsb2cvZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFtQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3pHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUdULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQVlyRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsZ0JBQWdCO0lBYTdEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFiK0IsU0FBSSxHQUFHLElBQUksQ0FBQztRQVVyRCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztJQUk3RCxDQUFDO0lBWnVELElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWtCO1FBQ2pHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFnQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUN3RCxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFrQjtRQUNuRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBZ0MsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFTRCxxQkFBcUIsQ0FBSSxNQUEwQjtRQUNqRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUMzQztRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUksTUFBeUI7UUFDL0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ25DLE1BQU0sS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDM0M7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7NEpBNUJVLHlCQUF5QjtnSkFBekIseUJBQXlCLG1VQVN6QixlQUFlLHFGQ2pDNUIsaURBQ0Esa3RDRHFCYyxDQUFDLGlCQUFpQixDQUFDOzJGQUVwQix5QkFBeUI7a0JBUnJDLFNBQVM7K0JBQ0Usb0JBQW9CLGlCQUdmLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsQ0FBQyxpQkFBaUIsQ0FBQzswRUFHVSxJQUFJO3NCQUE1QyxXQUFXO3VCQUFDLDBCQUEwQjtnQkFDTSxTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFDb0IsSUFBSTtzQkFBM0QsWUFBWTt1QkFBQyw0QkFBNEIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFHRyxLQUFLO3NCQUE3RCxZQUFZO3VCQUFDLDZCQUE2QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUdULFlBQVk7c0JBQXpELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VQb3J0YWxPdXRsZXQsIENka1BvcnRhbE91dGxldCwgQ29tcG9uZW50UG9ydGFsLCBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgRW1iZWRkZWRWaWV3UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhNb3ZlQm94QW5pbWF0aW9uIH0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7IFhEaWFsb2dBbmltYXRpb25FdmVudCwgWERpYWxvZ0FuaW1hdGlvblN0YXRlIH0gZnJvbSAnLi9kaWFsb2cucHJvcGVydHknO1xyXG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd4LWRpYWxvZy1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2ctY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2ctY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBhbmltYXRpb25zOiBbWE1vdmVCb3hBbmltYXRpb25dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZVBvcnRhbE91dGxldCB7XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy54LWRpYWxvZy1jb250YWluZXInKSBfaGFzID0gdHJ1ZTtcclxuICBASG9zdEJpbmRpbmcoJ0B4LW1vdmUtYm94LWFuaW1hdGlvbicpIHB1YmxpYyBwbGFjZW1lbnQ/OiBYRGlhbG9nQW5pbWF0aW9uU3RhdGU7XHJcbiAgQEhvc3RMaXN0ZW5lcignQHgtbW92ZS1ib3gtYW5pbWF0aW9uLmRvbmUnLCBbJyRldmVudCddKSBkb25lKHsgdG9TdGF0ZSwgdG90YWxUaW1lIH06IEFuaW1hdGlvbkV2ZW50KSB7XHJcbiAgICB0aGlzLmFuaW1hdGlvbkNoYW5nZWQubmV4dCh7IGFjdGlvbjogJ2RvbmUnLCBzdGF0ZTogdG9TdGF0ZSBhcyBYRGlhbG9nQW5pbWF0aW9uU3RhdGUsIHRvdGFsVGltZSB9KTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignQHgtbW92ZS1ib3gtYW5pbWF0aW9uLnN0YXJ0JywgWyckZXZlbnQnXSkgc3RhcnQoeyB0b1N0YXRlLCB0b3RhbFRpbWUgfTogQW5pbWF0aW9uRXZlbnQpIHtcclxuICAgIHRoaXMuYW5pbWF0aW9uQ2hhbmdlZC5uZXh0KHsgYWN0aW9uOiAnc3RhcnQnLCBzdGF0ZTogdG9TdGF0ZSBhcyBYRGlhbG9nQW5pbWF0aW9uU3RhdGUsIHRvdGFsVGltZSB9KTtcclxuICB9XHJcbiAgQFZpZXdDaGlsZChDZGtQb3J0YWxPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIHBvcnRhbE91dGxldCE6IENka1BvcnRhbE91dGxldDtcclxuXHJcbiAgYW5pbWF0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8WERpYWxvZ0FuaW1hdGlvbkV2ZW50PigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBhdHRhY2hDb21wb25lbnRQb3J0YWw8VD4ocG9ydGFsOiBDb21wb25lbnRQb3J0YWw8VD4pOiBDb21wb25lbnRSZWY8VD4ge1xyXG4gICAgaWYgKHRoaXMucG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ2RpYWxvZyBwb3J0YWwgaGFzIGF0dGFjaGVkJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHBvcnRhbCk7XHJcbiAgfVxyXG4gIGF0dGFjaFRlbXBsYXRlUG9ydGFsPEM+KHBvcnRhbDogVGVtcGxhdGVQb3J0YWw8Qz4pOiBFbWJlZGRlZFZpZXdSZWY8Qz4ge1xyXG4gICAgaWYgKHRoaXMucG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ2RpYWxvZyBwb3J0YWwgaGFzIGF0dGFjaGVkJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwocG9ydGFsKTtcclxuICB9XHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlIGNka1BvcnRhbE91dGxldD48L25nLXRlbXBsYXRlPlxyXG4iXX0=