@ng-nest/ui 15.0.12 → 15.0.14

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 (118) hide show
  1. package/anchor/anchor-inner.component.d.ts +6 -0
  2. package/anchor/anchor.component.d.ts +5 -2
  3. package/anchor/anchor.module.d.ts +5 -4
  4. package/anchor/anchor.property.d.ts +13 -0
  5. package/anchor/public-api.d.ts +1 -0
  6. package/core/config/config.d.ts +2 -0
  7. package/core/functions/date.d.ts +3 -0
  8. package/core/functions/parent-path.d.ts +1 -0
  9. package/core/functions/public-api.d.ts +1 -0
  10. package/date-picker/date-picker-portal.component.d.ts +7 -2
  11. package/date-picker/date-picker.property.d.ts +87 -6
  12. package/date-picker/date-range-portal.component.d.ts +6 -2
  13. package/date-picker/picker-date.component.d.ts +6 -0
  14. package/date-picker/picker-month.component.d.ts +1 -0
  15. package/date-picker/picker-year.component.d.ts +1 -0
  16. package/esm2020/anchor/anchor-inner.component.mjs +17 -0
  17. package/esm2020/anchor/anchor.component.mjs +25 -11
  18. package/esm2020/anchor/anchor.module.mjs +6 -5
  19. package/esm2020/anchor/anchor.property.mjs +18 -1
  20. package/esm2020/anchor/public-api.mjs +2 -1
  21. package/esm2020/core/config/config.mjs +1 -1
  22. package/esm2020/core/functions/date.mjs +73 -1
  23. package/esm2020/core/functions/parent-path.mjs +10 -0
  24. package/esm2020/core/functions/public-api.mjs +2 -1
  25. package/esm2020/date-picker/date-picker-portal.component.mjs +34 -6
  26. package/esm2020/date-picker/date-picker.component.mjs +14 -4
  27. package/esm2020/date-picker/date-picker.property.mjs +20 -6
  28. package/esm2020/date-picker/date-range-portal.component.mjs +33 -18
  29. package/esm2020/date-picker/date-range.component.mjs +24 -7
  30. package/esm2020/date-picker/picker-date.component.mjs +54 -6
  31. package/esm2020/date-picker/picker-month.component.mjs +13 -4
  32. package/esm2020/date-picker/picker-year.component.mjs +15 -4
  33. package/esm2020/i18n/i18n.property.mjs +1 -1
  34. package/esm2020/i18n/languages/en_GB.mjs +6 -2
  35. package/esm2020/i18n/languages/en_US.mjs +6 -2
  36. package/esm2020/i18n/languages/zh_CN.mjs +6 -2
  37. package/esm2020/i18n/languages/zh_TW.mjs +6 -2
  38. package/esm2020/list/list-option.component.mjs +2 -2
  39. package/esm2020/list/list.component.mjs +2 -2
  40. package/esm2020/slider/slider.component.mjs +3 -3
  41. package/esm2020/slider/slider.property.mjs +8 -2
  42. package/esm2020/table/table-body.component.mjs +6 -6
  43. package/esm2020/table/table.component.mjs +4 -3
  44. package/esm2020/table/table.property.mjs +9 -2
  45. package/esm2020/time-picker/time-picker-frame.component.mjs +48 -14
  46. package/esm2020/time-picker/time-picker-portal.component.mjs +3 -3
  47. package/esm2020/time-picker/time-picker.component.mjs +2 -1
  48. package/esm2020/time-picker/time-picker.property.mjs +4 -2
  49. package/esm2020/transfer/transfer.component.mjs +2 -2
  50. package/esm2020/tree/tree-node.component.mjs +98 -15
  51. package/esm2020/tree/tree.component.mjs +126 -29
  52. package/esm2020/tree/tree.module.mjs +31 -4
  53. package/esm2020/tree/tree.property.mjs +37 -3
  54. package/esm2020/tree/tree.service.mjs +77 -0
  55. package/esm2020/tree-file/tree-file.component.mjs +14 -3
  56. package/fesm2015/ng-nest-ui-anchor.mjs +60 -15
  57. package/fesm2015/ng-nest-ui-anchor.mjs.map +1 -1
  58. package/fesm2015/ng-nest-ui-core.mjs +83 -1
  59. package/fesm2015/ng-nest-ui-core.mjs.map +1 -1
  60. package/fesm2015/ng-nest-ui-date-picker.mjs +193 -42
  61. package/fesm2015/ng-nest-ui-date-picker.mjs.map +1 -1
  62. package/fesm2015/ng-nest-ui-i18n.mjs +20 -4
  63. package/fesm2015/ng-nest-ui-i18n.mjs.map +1 -1
  64. package/fesm2015/ng-nest-ui-list.mjs +4 -4
  65. package/fesm2015/ng-nest-ui-list.mjs.map +1 -1
  66. package/fesm2015/ng-nest-ui-slider.mjs +9 -3
  67. package/fesm2015/ng-nest-ui-slider.mjs.map +1 -1
  68. package/fesm2015/ng-nest-ui-table.mjs +16 -8
  69. package/fesm2015/ng-nest-ui-table.mjs.map +1 -1
  70. package/fesm2015/ng-nest-ui-time-picker.mjs +53 -16
  71. package/fesm2015/ng-nest-ui-time-picker.mjs.map +1 -1
  72. package/fesm2015/ng-nest-ui-transfer.mjs +1 -1
  73. package/fesm2015/ng-nest-ui-transfer.mjs.map +1 -1
  74. package/fesm2015/ng-nest-ui-tree-file.mjs +13 -2
  75. package/fesm2015/ng-nest-ui-tree-file.mjs.map +1 -1
  76. package/fesm2015/ng-nest-ui-tree.mjs +359 -45
  77. package/fesm2015/ng-nest-ui-tree.mjs.map +1 -1
  78. package/fesm2020/ng-nest-ui-anchor.mjs +60 -15
  79. package/fesm2020/ng-nest-ui-anchor.mjs.map +1 -1
  80. package/fesm2020/ng-nest-ui-core.mjs +83 -1
  81. package/fesm2020/ng-nest-ui-core.mjs.map +1 -1
  82. package/fesm2020/ng-nest-ui-date-picker.mjs +193 -42
  83. package/fesm2020/ng-nest-ui-date-picker.mjs.map +1 -1
  84. package/fesm2020/ng-nest-ui-i18n.mjs +20 -4
  85. package/fesm2020/ng-nest-ui-i18n.mjs.map +1 -1
  86. package/fesm2020/ng-nest-ui-list.mjs +4 -4
  87. package/fesm2020/ng-nest-ui-list.mjs.map +1 -1
  88. package/fesm2020/ng-nest-ui-slider.mjs +9 -3
  89. package/fesm2020/ng-nest-ui-slider.mjs.map +1 -1
  90. package/fesm2020/ng-nest-ui-table.mjs +16 -8
  91. package/fesm2020/ng-nest-ui-table.mjs.map +1 -1
  92. package/fesm2020/ng-nest-ui-time-picker.mjs +53 -16
  93. package/fesm2020/ng-nest-ui-time-picker.mjs.map +1 -1
  94. package/fesm2020/ng-nest-ui-transfer.mjs +1 -1
  95. package/fesm2020/ng-nest-ui-transfer.mjs.map +1 -1
  96. package/fesm2020/ng-nest-ui-tree-file.mjs +13 -2
  97. package/fesm2020/ng-nest-ui-tree-file.mjs.map +1 -1
  98. package/fesm2020/ng-nest-ui-tree.mjs +356 -45
  99. package/fesm2020/ng-nest-ui-tree.mjs.map +1 -1
  100. package/i18n/i18n.property.d.ts +3 -0
  101. package/i18n/languages/en_GB.d.ts +4 -0
  102. package/i18n/languages/en_US.d.ts +4 -0
  103. package/i18n/languages/zh_CN.d.ts +4 -0
  104. package/i18n/languages/zh_TW.d.ts +4 -0
  105. package/package.json +1 -1
  106. package/slider/slider.property.d.ts +6 -1
  107. package/table/table.component.d.ts +1 -1
  108. package/table/table.property.d.ts +25 -4
  109. package/time-picker/time-picker-frame.component.d.ts +6 -2
  110. package/time-picker/time-picker-portal.component.d.ts +2 -1
  111. package/time-picker/time-picker.property.d.ts +32 -1
  112. package/transfer/transfer.component.d.ts +2 -4
  113. package/tree/tree-node.component.d.ts +35 -4
  114. package/tree/tree.component.d.ts +24 -3
  115. package/tree/tree.module.d.ts +8 -7
  116. package/tree/tree.property.d.ts +63 -1
  117. package/tree/tree.service.d.ts +10 -0
  118. package/tree-file/tree-file.component.d.ts +1 -0
@@ -0,0 +1,6 @@
1
+ import { XAnchorInnerProperty } from './anchor.property';
2
+ import * as i0 from "@angular/core";
3
+ export declare class XAnchorInnerComponent extends XAnchorInnerProperty {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<XAnchorInnerComponent, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<XAnchorInnerComponent, "x-anchor-inner", never, {}, {}, never, ["*"], false, never>;
6
+ }
@@ -1,9 +1,10 @@
1
- import { OnInit, Renderer2, ElementRef, ChangeDetectorRef, AfterViewInit, OnDestroy } from '@angular/core';
1
+ import { OnInit, Renderer2, ElementRef, ChangeDetectorRef, AfterViewInit, OnDestroy, AfterContentChecked } from '@angular/core';
2
2
  import { XAnchorProperty } from './anchor.property';
3
3
  import { XConfigService } from '@ng-nest/ui/core';
4
4
  import { XSliderNode } from '@ng-nest/ui/slider';
5
+ import { Subject } from 'rxjs';
5
6
  import * as i0 from "@angular/core";
6
- export declare class XAnchorComponent extends XAnchorProperty implements OnInit, AfterViewInit, OnDestroy {
7
+ export declare class XAnchorComponent extends XAnchorProperty implements OnInit, AfterViewInit, OnDestroy, AfterContentChecked {
7
8
  renderer: Renderer2;
8
9
  elementRef: ElementRef<HTMLElement>;
9
10
  cdr: ChangeDetectorRef;
@@ -15,10 +16,12 @@ export declare class XAnchorComponent extends XAnchorProperty implements OnInit,
15
16
  activatedIndex: number;
16
17
  sliderHeight?: number;
17
18
  document: Document;
19
+ contentChange: Subject<unknown>;
18
20
  private _scrolling;
19
21
  private _fontSize;
20
22
  private _unSubject;
21
23
  constructor(renderer: Renderer2, elementRef: ElementRef<HTMLElement>, cdr: ChangeDetectorRef, doc: any, configService: XConfigService);
24
+ ngAfterContentChecked(): void;
22
25
  ngOnInit(): void;
23
26
  ngAfterViewInit(): void;
24
27
  ngOnDestroy(): void;
@@ -1,11 +1,12 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./anchor.component";
3
3
  import * as i2 from "./anchor.property";
4
- import * as i3 from "@angular/common";
5
- import * as i4 from "@ng-nest/ui/affix";
6
- import * as i5 from "@ng-nest/ui/slider";
4
+ import * as i3 from "./anchor-inner.component";
5
+ import * as i4 from "@angular/common";
6
+ import * as i5 from "@ng-nest/ui/affix";
7
+ import * as i6 from "@ng-nest/ui/slider";
7
8
  export declare class XAnchorModule {
8
9
  static ɵfac: i0.ɵɵFactoryDeclaration<XAnchorModule, never>;
9
- static ɵmod: i0.ɵɵNgModuleDeclaration<XAnchorModule, [typeof i1.XAnchorComponent, typeof i2.XAnchorProperty], [typeof i3.CommonModule, typeof i4.XAffixModule, typeof i5.XSliderModule], [typeof i1.XAnchorComponent]>;
10
+ static ɵmod: i0.ɵɵNgModuleDeclaration<XAnchorModule, [typeof i1.XAnchorComponent, typeof i2.XAnchorProperty, typeof i3.XAnchorInnerComponent, typeof i2.XAnchorInnerProperty], [typeof i4.CommonModule, typeof i5.XAffixModule, typeof i6.XSliderModule], [typeof i1.XAnchorComponent, typeof i3.XAnchorInnerComponent]>;
10
11
  static ɵinj: i0.ɵɵInjectorDeclaration<XAnchorModule>;
11
12
  }
@@ -33,6 +33,19 @@ export declare class XAnchorProperty extends XProperty {
33
33
  static ɵfac: i0.ɵɵFactoryDeclaration<XAnchorProperty, never>;
34
34
  static ɵcmp: i0.ɵɵComponentDeclaration<XAnchorProperty, "ng-component", never, { "scroll": "scroll"; "affixTop": "affixTop"; "layout": "layout"; "justify": "justify"; }, {}, never, never, false, never>;
35
35
  }
36
+ /**
37
+ * Anchor inner
38
+ * @selector x-anchor-inner
39
+ * @decorator component
40
+ */
41
+ export declare const XAnchorInnerPrefix = "x-anchor-inner";
42
+ /**
43
+ * Anchor inner Property
44
+ */
45
+ export declare class XAnchorInnerProperty {
46
+ static ɵfac: i0.ɵɵFactoryDeclaration<XAnchorInnerProperty, never>;
47
+ static ɵcmp: i0.ɵɵComponentDeclaration<XAnchorInnerProperty, "ng-component", never, {}, {}, never, never, false, never>;
48
+ }
36
49
  /**
37
50
  * Anchor Node
38
51
  */
@@ -1,3 +1,4 @@
1
1
  export * from './anchor.component';
2
+ export * from './anchor-inner.component';
2
3
  export * from './anchor.module';
3
4
  export * from './anchor.property';
@@ -425,6 +425,7 @@ export interface XSliderConfig {
425
425
  animated?: XBoolean;
426
426
  size?: XSize;
427
427
  showExpand?: XBoolean;
428
+ autoShowArrow?: XBoolean;
428
429
  }
429
430
  export interface XSliderSelectConfig {
430
431
  }
@@ -501,6 +502,7 @@ export interface XTreeConfig {
501
502
  nodeAlignItems?: XAlign;
502
503
  virtualScroll?: boolean;
503
504
  onlyLeaf?: boolean;
505
+ showLine?: boolean;
504
506
  }
505
507
  export interface XTextareaConfig {
506
508
  clearable?: XBoolean;
@@ -7,3 +7,6 @@ export declare function XAddHours(date: XDate, amount: number): Date;
7
7
  export declare function XAddDays(date: XDate, amount: number): Date;
8
8
  export declare function XAddMonths(date: XDate, amount: number): Date;
9
9
  export declare function XAddYears(date: XDate, amount: number): Date;
10
+ export declare function XDateWeek(date: XDate): number | undefined;
11
+ export declare function XDateWeekYear(date: XDate): number | undefined;
12
+ export declare function XDateYearWeek(date: XDate): string | undefined;
@@ -0,0 +1 @@
1
+ export declare function XParentPath(ele: HTMLElement): string[];
@@ -10,4 +10,5 @@ export * from './chunk';
10
10
  export * from './guid';
11
11
  export * from './group-by';
12
12
  export * from './resize';
13
+ export * from './parent-path';
13
14
  export * from './property';
@@ -1,10 +1,11 @@
1
1
  import { ChangeDetectorRef, OnInit, OnDestroy, AfterViewInit } from '@angular/core';
2
- import { XDatePickerPreset, XDatePickerType } from './date-picker.property';
2
+ import { XDatePickerDisabledDate, XDatePickerDisabledTime, XDatePickerPreset, XDatePickerType } from './date-picker.property';
3
3
  import { XPositionTopBottom, XTemplate } from '@ng-nest/ui/core';
4
4
  import { Subject } from 'rxjs';
5
5
  import { DatePipe, LowerCasePipe } from '@angular/common';
6
6
  import { XI18nService, XI18nDatePicker } from '@ng-nest/ui/i18n';
7
7
  import { XInputComponent } from '@ng-nest/ui/input';
8
+ import { XTimePickerFrameComponent } from '@ng-nest/ui/time-picker';
8
9
  import * as i0 from "@angular/core";
9
10
  export declare class XDatePickerPortalComponent implements OnInit, OnDestroy, AfterViewInit {
10
11
  datePipe: DatePipe;
@@ -16,6 +17,7 @@ export declare class XDatePickerPortalComponent implements OnInit, OnDestroy, Af
16
17
  toState: any;
17
18
  }): void;
18
19
  start(): void;
20
+ timePickerFrame?: XTimePickerFrameComponent;
19
21
  type: XDatePickerType;
20
22
  display: Date;
21
23
  model: Date;
@@ -27,13 +29,16 @@ export declare class XDatePickerPortalComponent implements OnInit, OnDestroy, Af
27
29
  destroyPortal: Function;
28
30
  nodeEmit: (date: Date, sure?: boolean) => void;
29
31
  locale: XI18nDatePicker;
30
- time: number;
32
+ time: number | null;
31
33
  preset: XDatePickerPreset[];
32
34
  extraFooter?: XTemplate;
33
35
  inputCom: XInputComponent;
36
+ disabledDate: XDatePickerDisabledDate;
37
+ disabledTime: XDatePickerDisabledTime;
34
38
  private _type;
35
39
  private _unSubject;
36
40
  get isDatePicker(): boolean;
41
+ get sureDisabled(): boolean;
37
42
  constructor(datePipe: DatePipe, lowerCasePipe: LowerCasePipe, cdr: ChangeDetectorRef, i18n: XI18nService);
38
43
  ngOnInit(): void;
39
44
  ngAfterViewInit(): void;
@@ -52,13 +52,23 @@ export declare class XDatePickerProperty extends XControlValueAccessor<any> impl
52
52
  * @en_US Footer
53
53
  */
54
54
  extraFooter?: XTemplate;
55
+ /**
56
+ * @zh_CN 禁用的日期
57
+ * @en_US Disabled date
58
+ */
59
+ disabledDate?: XDatePickerDisabledDate;
60
+ /**
61
+ * @zh_CN 禁用的时间
62
+ * @en_US Disabled time
63
+ */
64
+ disabledTime?: XDatePickerDisabledTime;
55
65
  /**
56
66
  * @zh_CN 节点点击的事件
57
67
  * @en_US Node click event
58
68
  */
59
69
  nodeEmit: EventEmitter<number>;
60
70
  static ɵfac: i0.ɵɵFactoryDeclaration<XDatePickerProperty, never>;
61
- static ɵcmp: i0.ɵɵComponentDeclaration<XDatePickerProperty, "ng-component", never, { "type": "type"; "format": "format"; "clearable": "clearable"; "placement": "placement"; "size": "size"; "bordered": "bordered"; "preset": "preset"; "extraFooter": "extraFooter"; }, { "nodeEmit": "nodeEmit"; }, never, never, false, never>;
71
+ static ɵcmp: i0.ɵɵComponentDeclaration<XDatePickerProperty, "ng-component", never, { "type": "type"; "format": "format"; "clearable": "clearable"; "placement": "placement"; "size": "size"; "bordered": "bordered"; "preset": "preset"; "extraFooter": "extraFooter"; "disabledDate": "disabledDate"; "disabledTime": "disabledTime"; }, { "nodeEmit": "nodeEmit"; }, never, never, false, never>;
62
72
  }
63
73
  /**
64
74
  * DatePicker Option
@@ -166,13 +176,23 @@ export declare class XDateRangeProperty extends XControlValueAccessor<any> imple
166
176
  * @en_US Footer
167
177
  */
168
178
  extraFooter?: XTemplate;
179
+ /**
180
+ * @zh_CN 禁用的日期
181
+ * @en_US Disabled date
182
+ */
183
+ disabledDate?: XDatePickerDisabledDate;
184
+ /**
185
+ * @zh_CN 禁用的时间
186
+ * @en_US Disabled time
187
+ */
188
+ disabledTime?: XDatePickerDisabledTime;
169
189
  /**
170
190
  * @zh_CN 节点点击的事件
171
191
  * @en_US Node click event
172
192
  */
173
193
  nodeEmit: EventEmitter<number[]>;
174
194
  static ɵfac: i0.ɵɵFactoryDeclaration<XDateRangeProperty, never>;
175
- static ɵcmp: i0.ɵɵComponentDeclaration<XDateRangeProperty, "ng-component", never, { "type": "type"; "format": "format"; "clearable": "clearable"; "placement": "placement"; "size": "size"; "bordered": "bordered"; "preset": "preset"; "placeholder": "placeholder"; "extraFooter": "extraFooter"; }, { "nodeEmit": "nodeEmit"; }, never, never, false, never>;
195
+ static ɵcmp: i0.ɵɵComponentDeclaration<XDateRangeProperty, "ng-component", never, { "type": "type"; "format": "format"; "clearable": "clearable"; "placement": "placement"; "size": "size"; "bordered": "bordered"; "preset": "preset"; "placeholder": "placeholder"; "extraFooter": "extraFooter"; "disabledDate": "disabledDate"; "disabledTime": "disabledTime"; }, { "nodeEmit": "nodeEmit"; }, never, never, false, never>;
176
196
  }
177
197
  /**
178
198
  * DateRange Option
@@ -190,6 +210,37 @@ export interface XDateRangeOption extends XFormOption {
190
210
  */
191
211
  placeholder?: string[];
192
212
  }
213
+ /**
214
+ * @zh_CN 禁用日期的自定义类型
215
+ * @en_US 禁用日期的自定义类型
216
+ */
217
+ export declare type XDatePickerDisabledDate = (current: Date) => boolean;
218
+ /**
219
+ * @zh_CN 禁用时间的自定义类型
220
+ * @en_US 禁用时间的自定义类型
221
+ */
222
+ export declare type XDatePickerDisabledTime = (type?: XDatePickerRangType) => XDatePickerDisabledTimeFn;
223
+ /**
224
+ * @zh_CN 禁用时间的自定义函数
225
+ * @en_US 禁用时间的自定义函数
226
+ */
227
+ export declare type XDatePickerDisabledTimeFn = {
228
+ /**
229
+ * @zh_CN 禁用小时的自定义函数
230
+ * @en_US 禁用小时的自定义函数
231
+ */
232
+ disabledHours?: () => number[];
233
+ /**
234
+ * @zh_CN 禁用分钟的自定义函数
235
+ * @en_US 禁用分钟的自定义函数
236
+ */
237
+ disabledMinutes?: () => number[];
238
+ /**
239
+ * @zh_CN 禁用秒的自定义函数
240
+ * @en_US 禁用秒的自定义函数
241
+ */
242
+ disabledSeconds?: () => number[];
243
+ };
193
244
  /**
194
245
  * @zh_CN 快捷选择按钮
195
246
  * @en_US Quick selection button
@@ -216,7 +267,7 @@ export interface XDateRangePreset extends XIdentityProperty {
216
267
  * @zh_CN 日期选择类型
217
268
  * @en_US Date selection type
218
269
  */
219
- export declare type XDatePickerType = 'date' | 'month' | 'year' | 'date-time' | 'date-hour' | 'date-minute';
270
+ export declare type XDatePickerType = 'date' | 'week' | 'month' | 'year' | 'date-time' | 'date-hour' | 'date-minute';
220
271
  /**
221
272
  * @zh_CN 日期数据类型
222
273
  * @en_US Date data type
@@ -309,6 +360,11 @@ export declare class XPickerDateProperty extends XProperty {
309
360
  * @en_US The current choice is the start / end date
310
361
  */
311
362
  rangeType: XDatePickerRangType;
363
+ /**
364
+ * @zh_CN 禁用的日期
365
+ * @en_US Disabled date
366
+ */
367
+ disabledDate?: XDatePickerDisabledDate;
312
368
  /**
313
369
  * @zh_CN 选择类型
314
370
  * @en_US Select type
@@ -355,7 +411,7 @@ export declare class XPickerDateProperty extends XProperty {
355
411
  */
356
412
  rangeDateClick: EventEmitter<XDateCell>;
357
413
  static ɵfac: i0.ɵɵFactoryDeclaration<XPickerDateProperty, never>;
358
- static ɵcmp: i0.ɵɵComponentDeclaration<XPickerDateProperty, "ng-component", never, { "type": "type"; "display": "display"; "model": "model"; "dateTemp": "dateTemp"; "showHeader": "showHeader"; "rangePicker": "rangePicker"; "lastYearBtn": "lastYearBtn"; "lastMonthBtn": "lastMonthBtn"; "nextYearBtn": "nextYearBtn"; "nextMonthBtn": "nextMonthBtn"; "rangeHover": "rangeHover"; "rangeValue": "rangeValue"; "rangeType": "rangeType"; }, { "typeChange": "typeChange"; "modelChange": "modelChange"; "rangeChange": "rangeChange"; "yearChange": "yearChange"; "monthChange": "monthChange"; "displayChange": "displayChange"; "rangeTdMouseenter": "rangeTdMouseenter"; "rangeTdMouseleave": "rangeTdMouseleave"; "rangeDateClick": "rangeDateClick"; }, never, never, false, never>;
414
+ static ɵcmp: i0.ɵɵComponentDeclaration<XPickerDateProperty, "ng-component", never, { "type": "type"; "display": "display"; "model": "model"; "dateTemp": "dateTemp"; "showHeader": "showHeader"; "rangePicker": "rangePicker"; "lastYearBtn": "lastYearBtn"; "lastMonthBtn": "lastMonthBtn"; "nextYearBtn": "nextYearBtn"; "nextMonthBtn": "nextMonthBtn"; "rangeHover": "rangeHover"; "rangeValue": "rangeValue"; "rangeType": "rangeType"; "disabledDate": "disabledDate"; }, { "typeChange": "typeChange"; "modelChange": "modelChange"; "rangeChange": "rangeChange"; "yearChange": "yearChange"; "monthChange": "monthChange"; "displayChange": "displayChange"; "rangeTdMouseenter": "rangeTdMouseenter"; "rangeTdMouseleave": "rangeTdMouseleave"; "rangeDateClick": "rangeDateClick"; }, never, never, false, never>;
359
415
  }
360
416
  /**
361
417
  * @zh_CN 单个日期数据对象
@@ -467,6 +523,21 @@ export interface XDateCell {
467
523
  * @en_US Current selected date
468
524
  */
469
525
  isActive?: boolean;
526
+ /**
527
+ * @zh_CN 禁用日期
528
+ * @en_US Disabled date
529
+ */
530
+ isDisabled?: boolean;
531
+ /**
532
+ * @zh_CN 类型
533
+ * @en_US Type
534
+ */
535
+ type?: XDatePickerType;
536
+ /**
537
+ * @zh_CN 第几周
538
+ * @en_US Week
539
+ */
540
+ week?: number;
470
541
  }
471
542
  /**
472
543
  * @zh_CN 当前选择的是开始/结束日期
@@ -533,6 +604,11 @@ export declare class XPickerMonthProperty extends XProperty {
533
604
  * @en_US The current choice is the start / end date
534
605
  */
535
606
  rangeType: XDatePickerRangType;
607
+ /**
608
+ * @zh_CN 禁用的日期
609
+ * @en_US Disabled date
610
+ */
611
+ disabledDate?: XDatePickerDisabledDate;
536
612
  /**
537
613
  * @zh_CN 选中的事件
538
614
  * @en_US Selected event
@@ -579,7 +655,7 @@ export declare class XPickerMonthProperty extends XProperty {
579
655
  */
580
656
  rangeDateClick: EventEmitter<XDateCell>;
581
657
  static ɵfac: i0.ɵɵFactoryDeclaration<XPickerMonthProperty, never>;
582
- static ɵcmp: i0.ɵɵComponentDeclaration<XPickerMonthProperty, "ng-component", never, { "type": "type"; "display": "display"; "model": "model"; "monthTemp": "monthTemp"; "showHeader": "showHeader"; "rangePicker": "rangePicker"; "lastYearBtn": "lastYearBtn"; "nextYearBtn": "nextYearBtn"; "rangeValue": "rangeValue"; "rangeType": "rangeType"; }, { "modelChange": "modelChange"; "typeChange": "typeChange"; "rangeChange": "rangeChange"; "yearChange": "yearChange"; "monthChange": "monthChange"; "displayChange": "displayChange"; "rangeTdMouseenter": "rangeTdMouseenter"; "rangeTdMouseleave": "rangeTdMouseleave"; "rangeDateClick": "rangeDateClick"; }, never, never, false, never>;
658
+ static ɵcmp: i0.ɵɵComponentDeclaration<XPickerMonthProperty, "ng-component", never, { "type": "type"; "display": "display"; "model": "model"; "monthTemp": "monthTemp"; "showHeader": "showHeader"; "rangePicker": "rangePicker"; "lastYearBtn": "lastYearBtn"; "nextYearBtn": "nextYearBtn"; "rangeValue": "rangeValue"; "rangeType": "rangeType"; "disabledDate": "disabledDate"; }, { "modelChange": "modelChange"; "typeChange": "typeChange"; "rangeChange": "rangeChange"; "yearChange": "yearChange"; "monthChange": "monthChange"; "displayChange": "displayChange"; "rangeTdMouseenter": "rangeTdMouseenter"; "rangeTdMouseleave": "rangeTdMouseleave"; "rangeDateClick": "rangeDateClick"; }, never, never, false, never>;
583
659
  }
584
660
  /**
585
661
  * PickerYear
@@ -641,6 +717,11 @@ export declare class XPickerYearProperty extends XProperty {
641
717
  * @en_US The current choice is the start / end date
642
718
  */
643
719
  rangeType: XDatePickerRangType;
720
+ /**
721
+ * @zh_CN 禁用的日期
722
+ * @en_US Disabled date
723
+ */
724
+ disabledDate?: XDatePickerDisabledDate;
644
725
  /**
645
726
  * @zh_CN 选中的事件
646
727
  * @en_US Selected event
@@ -692,5 +773,5 @@ export declare class XPickerYearProperty extends XProperty {
692
773
  */
693
774
  rangeDateClick: EventEmitter<XDateCell>;
694
775
  static ɵfac: i0.ɵɵFactoryDeclaration<XPickerYearProperty, never>;
695
- static ɵcmp: i0.ɵɵComponentDeclaration<XPickerYearProperty, "ng-component", never, { "type": "type"; "display": "display"; "model": "model"; "yearTemp": "yearTemp"; "showHeader": "showHeader"; "rangePicker": "rangePicker"; "lastYearBtn": "lastYearBtn"; "nextYearBtn": "nextYearBtn"; "rangeValue": "rangeValue"; "rangeType": "rangeType"; }, { "modelChange": "modelChange"; "typeChange": "typeChange"; "startChange": "startChange"; "rangeChange": "rangeChange"; "yearChange": "yearChange"; "monthChange": "monthChange"; "displayChange": "displayChange"; "rangeTdMouseenter": "rangeTdMouseenter"; "rangeTdMouseleave": "rangeTdMouseleave"; "rangeDateClick": "rangeDateClick"; }, never, never, false, never>;
776
+ static ɵcmp: i0.ɵɵComponentDeclaration<XPickerYearProperty, "ng-component", never, { "type": "type"; "display": "display"; "model": "model"; "yearTemp": "yearTemp"; "showHeader": "showHeader"; "rangePicker": "rangePicker"; "lastYearBtn": "lastYearBtn"; "nextYearBtn": "nextYearBtn"; "rangeValue": "rangeValue"; "rangeType": "rangeType"; "disabledDate": "disabledDate"; }, { "modelChange": "modelChange"; "typeChange": "typeChange"; "startChange": "startChange"; "rangeChange": "rangeChange"; "yearChange": "yearChange"; "monthChange": "monthChange"; "displayChange": "displayChange"; "rangeTdMouseenter": "rangeTdMouseenter"; "rangeTdMouseleave": "rangeTdMouseleave"; "rangeDateClick": "rangeDateClick"; }, never, never, false, never>;
696
777
  }
@@ -1,5 +1,5 @@
1
1
  import { ChangeDetectorRef, OnInit, OnDestroy, AfterViewInit } from '@angular/core';
2
- import { XDatePickerType, XDateCell, XDateRangePreset } from './date-picker.property';
2
+ import { XDatePickerType, XDateCell, XDateRangePreset, XDatePickerDisabledDate, XDatePickerDisabledTime } from './date-picker.property';
3
3
  import { XPositionTopBottom, XTemplate } from '@ng-nest/ui/core';
4
4
  import { Subject } from 'rxjs';
5
5
  import { DatePipe, LowerCasePipe } from '@angular/common';
@@ -7,6 +7,7 @@ import { XI18nService, XI18nDatePicker } from '@ng-nest/ui/i18n';
7
7
  import { XPickerMonthComponent } from './picker-month.component';
8
8
  import { XPickerYearComponent } from './picker-year.component';
9
9
  import { XPickerDateComponent } from './picker-date.component';
10
+ import { XTimePickerFrameComponent } from '@ng-nest/ui/time-picker';
10
11
  import * as i0 from "@angular/core";
11
12
  export declare class XDateRangePortalComponent implements OnInit, OnDestroy, AfterViewInit {
12
13
  datePipe: DatePipe;
@@ -20,6 +21,7 @@ export declare class XDateRangePortalComponent implements OnInit, OnDestroy, Aft
20
21
  start(): void;
21
22
  startPicker: XPickerDateComponent | XPickerMonthComponent | XPickerYearComponent;
22
23
  endPicker: XPickerDateComponent | XPickerMonthComponent | XPickerYearComponent;
24
+ timePickerFrame?: XTimePickerFrameComponent;
23
25
  type: XDatePickerType;
24
26
  display: Date;
25
27
  model: Date;
@@ -36,6 +38,8 @@ export declare class XDateRangePortalComponent implements OnInit, OnDestroy, Aft
36
38
  animating: Function;
37
39
  closePortal: Function;
38
40
  destroyPortal: Function;
41
+ disabledDate: XDatePickerDisabledDate;
42
+ disabledTime: XDatePickerDisabledTime;
39
43
  nodeEmit: (date: Date[], close?: boolean) => void;
40
44
  startNodeEmit: (date: Date | null, close?: boolean, isDatePicker?: boolean) => void;
41
45
  endNodeEmit: (date: Date | null, close?: boolean, isDatePicker?: boolean) => void;
@@ -48,8 +52,8 @@ export declare class XDateRangePortalComponent implements OnInit, OnDestroy, Aft
48
52
  preset: XDateRangePreset[];
49
53
  extraFooter?: XTemplate;
50
54
  private _unSubject;
51
- get timeSureDisabled(): boolean;
52
55
  get isDatePicker(): boolean;
56
+ get sureDisabled(): boolean;
53
57
  constructor(datePipe: DatePipe, lowerCasePipe: LowerCasePipe, cdr: ChangeDetectorRef, i18n: XI18nService);
54
58
  ngOnInit(): void;
55
59
  ngAfterViewInit(): void;
@@ -20,14 +20,20 @@ export declare class XPickerDateComponent extends XPickerDateProperty implements
20
20
  private _unSubject;
21
21
  get rangeStart(): number | "" | null;
22
22
  get rangeEnd(): number | "" | null;
23
+ isWeekRange(): import("@ng-nest/ui/core").XBoolean | undefined;
24
+ isDisabled(date: Date): boolean;
23
25
  constructor(renderer: Renderer2, datePipe: DatePipe, lowerCasePipe: LowerCasePipe, cdr: ChangeDetectorRef, configService: XConfigService, i18n: XI18nService);
24
26
  ngOnInit(): void;
25
27
  ngOnChanges(simples: SimpleChanges): void;
26
28
  ngOnDestroy(): void;
27
29
  init(): void;
30
+ isWeekActive(week: XDateCell[]): boolean;
31
+ isStartWeek(week: XDateCell[]): boolean | undefined;
32
+ isEndWeek(week: XDateCell[]): boolean | undefined;
28
33
  isStartDate(date: Date): boolean | undefined;
29
34
  isEndDate(date: Date): boolean | undefined;
30
35
  setDatesState(cell: XDateCell): void;
36
+ setTitles(): void;
31
37
  onTdMouseenter(cell: XDateCell, isEmit?: boolean): void;
32
38
  onTdMouseleave(cell: XDateCell, isEmit?: boolean): void;
33
39
  clearState(...cells: XDateCell[]): void;
@@ -18,6 +18,7 @@ export declare class XPickerMonthComponent extends XPickerMonthProperty implemen
18
18
  private _unSubject;
19
19
  get rangeStart(): number | "" | null;
20
20
  get rangeEnd(): number | "" | null;
21
+ isDisabled(date: Date): boolean;
21
22
  constructor(renderer: Renderer2, datePipe: DatePipe, lowerCasePipe: LowerCasePipe, cdr: ChangeDetectorRef, configService: XConfigService, i18n: XI18nService);
22
23
  ngOnInit(): void;
23
24
  ngOnChanges(simples: SimpleChanges): void;
@@ -15,6 +15,7 @@ export declare class XPickerYearComponent extends XPickerYearProperty implements
15
15
  end: number;
16
16
  get rangeStart(): number | "" | null;
17
17
  get rangeEnd(): number | "" | null;
18
+ isDisabled(date: Date): boolean;
18
19
  constructor(renderer: Renderer2, cdr: ChangeDetectorRef, datePipe: DatePipe, configService: XConfigService);
19
20
  ngOnChanges(simples: SimpleChanges): void;
20
21
  init(): void;
@@ -0,0 +1,17 @@
1
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
2
+ import { XAnchorInnerPrefix, XAnchorInnerProperty } from './anchor.property';
3
+ import * as i0 from "@angular/core";
4
+ export class XAnchorInnerComponent extends XAnchorInnerProperty {
5
+ }
6
+ /** @nocollapse */ XAnchorInnerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XAnchorInnerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7
+ /** @nocollapse */ XAnchorInnerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XAnchorInnerComponent, selector: "x-anchor-inner", usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XAnchorInnerComponent, decorators: [{
9
+ type: Component,
10
+ args: [{
11
+ selector: `${XAnchorInnerPrefix}`,
12
+ template: '<ng-content></ng-content>',
13
+ encapsulation: ViewEncapsulation.None,
14
+ changeDetection: ChangeDetectionStrategy.OnPush
15
+ }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLWlubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2FuY2hvci9hbmNob3ItaW5uZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBUTdFLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxvQkFBb0I7O3FJQUFsRCxxQkFBcUI7eUhBQXJCLHFCQUFxQiw2RUFKdEIsMkJBQTJCOzJGQUkxQixxQkFBcUI7a0JBTmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEdBQUcsa0JBQWtCLEVBQUU7b0JBQ2pDLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYQW5jaG9ySW5uZXJQcmVmaXgsIFhBbmNob3JJbm5lclByb3BlcnR5IH0gZnJvbSAnLi9hbmNob3IucHJvcGVydHknO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hBbmNob3JJbm5lclByZWZpeH1gLFxyXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWEFuY2hvcklubmVyQ29tcG9uZW50IGV4dGVuZHMgWEFuY2hvcklubmVyUHJvcGVydHkge31cclxuIl19
@@ -3,7 +3,7 @@ import { XAnchorPrefix, XAnchorProperty } from './anchor.property';
3
3
  import { computedStyle, XIsEmpty, reqAnimFrame, XIsNumber, XIsUndefined } from '@ng-nest/ui/core';
4
4
  import { DOCUMENT } from '@angular/common';
5
5
  import { fromEvent, Subject } from 'rxjs';
6
- import { throttleTime, takeUntil } from 'rxjs/operators';
6
+ import { throttleTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@ng-nest/ui/core";
9
9
  import * as i2 from "@angular/common";
@@ -18,11 +18,15 @@ export class XAnchorComponent extends XAnchorProperty {
18
18
  this.configService = configService;
19
19
  this.sliderData = [];
20
20
  this.activatedIndex = 0;
21
+ this.contentChange = new Subject();
21
22
  this._scrolling = false;
22
23
  this._unSubject = new Subject();
23
24
  this.document = doc;
24
25
  this._fontSize = parseFloat(computedStyle(this.document.documentElement, 'font-size'));
25
26
  }
27
+ ngAfterContentChecked() {
28
+ this.contentChange.next(this.elementRef.nativeElement.innerHTML);
29
+ }
26
30
  ngOnInit() {
27
31
  this.setClassMap();
28
32
  this.setSliderData();
@@ -30,6 +34,11 @@ export class XAnchorComponent extends XAnchorProperty {
30
34
  }
31
35
  ngAfterViewInit() {
32
36
  this.setScroll();
37
+ this.contentChange.pipe(distinctUntilChanged(), takeUntil(this._unSubject)).subscribe(() => {
38
+ this.setSliderData();
39
+ this.setHeight();
40
+ this.cdr.detectChanges();
41
+ });
33
42
  }
34
43
  ngOnDestroy() {
35
44
  this._unSubject.next();
@@ -74,7 +83,7 @@ export class XAnchorComponent extends XAnchorProperty {
74
83
  this.cdr.detectChanges();
75
84
  }
76
85
  setSliderData() {
77
- this.hElements = this.content.nativeElement.querySelectorAll(':scope> h1,:scope> h2,:scope> h3,:scope> h4,:scope> h5');
86
+ this.hElements = this.content.nativeElement.querySelectorAll(':scope> h1,:scope> h2,:scope> h3,:scope> h4,:scope> h5,:scope> x-anchor-inner> h1,:scope> x-anchor-inner>h2,:scope> x-anchor-inner>h3,:scope> x-anchor-inner>h4,:scope> x-anchor-inner>h5');
78
87
  if (this.hElements.length > 0) {
79
88
  let list = [];
80
89
  this.hElements.forEach((x, i) => {
@@ -101,12 +110,17 @@ export class XAnchorComponent extends XAnchorProperty {
101
110
  }
102
111
  setHeight() {
103
112
  if (this.scroll) {
104
- let height = this.scroll.offsetHeight;
105
- let top = parseFloat(computedStyle(this.scroll, 'padding-top'));
106
- let borderTop = parseFloat(computedStyle(this.scroll, 'border-top'));
107
- let bottom = parseFloat(computedStyle(this.scroll, 'padding-bottom'));
108
- let borderBottom = parseFloat(computedStyle(this.scroll, 'border-bottom'));
109
- this.sliderHeight = height - top - bottom - borderTop - borderBottom - this.getTop();
113
+ if (XIsEmpty(this.sliderData)) {
114
+ this.sliderHeight = 0;
115
+ }
116
+ else {
117
+ let height = this.scroll.offsetHeight;
118
+ let top = parseFloat(computedStyle(this.scroll, 'padding-top'));
119
+ let borderTop = parseFloat(computedStyle(this.scroll, 'border-top'));
120
+ let bottom = parseFloat(computedStyle(this.scroll, 'padding-bottom'));
121
+ let borderBottom = parseFloat(computedStyle(this.scroll, 'border-bottom'));
122
+ this.sliderHeight = height - top - bottom - borderTop - borderBottom - this.getTop();
123
+ }
110
124
  }
111
125
  }
112
126
  getTop() {
@@ -136,10 +150,10 @@ export class XAnchorComponent extends XAnchorProperty {
136
150
  }
137
151
  }
138
152
  /** @nocollapse */ XAnchorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XAnchorComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }, { token: i1.XConfigService }], target: i0.ɵɵFactoryTarget.Component });
139
- /** @nocollapse */ XAnchorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XAnchorComponent, selector: "x-anchor", viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, static: true }, { propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div #anchor class=\"x-anchor\" [ngClass]=\"classMap\">\r\n <div #content class=\"x-anchor-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <x-affix class=\"x-anchor-affix\" [top]=\"affixTop\">\r\n <div class=\"x-anchor-slider\" [style.height.px]=\"sliderHeight\">\r\n <x-slider\r\n [data]=\"sliderData\"\r\n layout=\"column\"\r\n [activatedIndex]=\"activatedIndex\"\r\n [nodeJustify]=\"justify\"\r\n [nodeTpl]=\"sliderNodeTpl\"\r\n [showAnchor]=\"true\"\r\n (indexChange)=\"activatedChange($event)\"\r\n ></x-slider>\r\n </div>\r\n </x-affix>\r\n</div>\r\n\r\n<ng-template #sliderNodeTpl let-node=\"$node\">\r\n <span [style.padding-left.rem]=\"node.left - 1\">{{ node.label }}</span>\r\n</ng-template>\r\n", styles: [".x-anchor{margin:0;padding:0;display:flex}.x-anchor-content{flex:1}.x-anchor-affix{display:block}.x-anchor-slider{float:left;overflow:hidden}.x-anchor-slider:hover{overflow-y:auto}.x-anchor-right{flex-direction:row}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll{overflow-y:auto}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li{border-left:.125rem solid var(--x-border)}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li.x-slider-highlight{border:none;border-top-left-radius:0;border-bottom-left-radius:0;z-index:2;border-left:.125rem solid var(--x-primary)}.x-anchor-left{flex-direction:row-reverse}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll{overflow-y:auto}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li{border-right:.125rem solid var(--x-border)}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li.x-slider-highlight{border:none;border-top-right-radius:0;border-bottom-right-radius:0;z-index:2;border-right:.125rem solid var(--x-primary)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.XAffixComponent, selector: "x-affix" }, { kind: "component", type: i4.XSliderComponent, selector: "x-slider" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
153
+ /** @nocollapse */ XAnchorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", type: XAnchorComponent, selector: "x-anchor", viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, static: true }, { propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div #anchor class=\"x-anchor\" [ngClass]=\"classMap\">\r\n <div #content class=\"x-anchor-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <x-affix class=\"x-anchor-affix\" [top]=\"affixTop\">\r\n <div class=\"x-anchor-slider\" [style.height.px]=\"sliderHeight\">\r\n <x-slider\r\n [data]=\"sliderData\"\r\n layout=\"column\"\r\n [activatedIndex]=\"activatedIndex\"\r\n [nodeJustify]=\"justify\"\r\n [nodeTpl]=\"sliderNodeTpl\"\r\n [showAnchor]=\"true\"\r\n (indexChange)=\"activatedChange($event)\"\r\n ></x-slider>\r\n </div>\r\n </x-affix>\r\n</div>\r\n\r\n<ng-template #sliderNodeTpl let-node=\"$node\">\r\n <span [style.padding-left.rem]=\"node.left - 1\">{{ node.label }}</span>\r\n</ng-template>\r\n", styles: [".x-anchor{margin:0;padding:0;display:flex}.x-anchor-content{flex:1}.x-anchor-affix{display:block}.x-anchor-slider{float:left}.x-anchor-slider:hover{overflow-y:auto}.x-anchor-slider .x-slider{overflow:hidden}.x-anchor-right{flex-direction:row}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll{overflow-y:auto}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li{border-left:.125rem solid var(--x-border)}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li.x-slider-highlight{border:none;border-top-left-radius:0;border-bottom-left-radius:0;z-index:2;border-left:.125rem solid var(--x-primary)}.x-anchor-left{flex-direction:row-reverse}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll{overflow-y:auto}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li{border-right:.125rem solid var(--x-border)}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li.x-slider-highlight{border:none;border-top-right-radius:0;border-bottom-right-radius:0;z-index:2;border-right:.125rem solid var(--x-primary)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.XAffixComponent, selector: "x-affix" }, { kind: "component", type: i4.XSliderComponent, selector: "x-slider" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
140
154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: XAnchorComponent, decorators: [{
141
155
  type: Component,
142
- args: [{ selector: `${XAnchorPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #anchor class=\"x-anchor\" [ngClass]=\"classMap\">\r\n <div #content class=\"x-anchor-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <x-affix class=\"x-anchor-affix\" [top]=\"affixTop\">\r\n <div class=\"x-anchor-slider\" [style.height.px]=\"sliderHeight\">\r\n <x-slider\r\n [data]=\"sliderData\"\r\n layout=\"column\"\r\n [activatedIndex]=\"activatedIndex\"\r\n [nodeJustify]=\"justify\"\r\n [nodeTpl]=\"sliderNodeTpl\"\r\n [showAnchor]=\"true\"\r\n (indexChange)=\"activatedChange($event)\"\r\n ></x-slider>\r\n </div>\r\n </x-affix>\r\n</div>\r\n\r\n<ng-template #sliderNodeTpl let-node=\"$node\">\r\n <span [style.padding-left.rem]=\"node.left - 1\">{{ node.label }}</span>\r\n</ng-template>\r\n", styles: [".x-anchor{margin:0;padding:0;display:flex}.x-anchor-content{flex:1}.x-anchor-affix{display:block}.x-anchor-slider{float:left;overflow:hidden}.x-anchor-slider:hover{overflow-y:auto}.x-anchor-right{flex-direction:row}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll{overflow-y:auto}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li{border-left:.125rem solid var(--x-border)}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li.x-slider-highlight{border:none;border-top-left-radius:0;border-bottom-left-radius:0;z-index:2;border-left:.125rem solid var(--x-primary)}.x-anchor-left{flex-direction:row-reverse}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll{overflow-y:auto}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li{border-right:.125rem solid var(--x-border)}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li.x-slider-highlight{border:none;border-top-right-radius:0;border-bottom-right-radius:0;z-index:2;border-right:.125rem solid var(--x-primary)}\n"] }]
156
+ args: [{ selector: `${XAnchorPrefix}`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #anchor class=\"x-anchor\" [ngClass]=\"classMap\">\r\n <div #content class=\"x-anchor-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <x-affix class=\"x-anchor-affix\" [top]=\"affixTop\">\r\n <div class=\"x-anchor-slider\" [style.height.px]=\"sliderHeight\">\r\n <x-slider\r\n [data]=\"sliderData\"\r\n layout=\"column\"\r\n [activatedIndex]=\"activatedIndex\"\r\n [nodeJustify]=\"justify\"\r\n [nodeTpl]=\"sliderNodeTpl\"\r\n [showAnchor]=\"true\"\r\n (indexChange)=\"activatedChange($event)\"\r\n ></x-slider>\r\n </div>\r\n </x-affix>\r\n</div>\r\n\r\n<ng-template #sliderNodeTpl let-node=\"$node\">\r\n <span [style.padding-left.rem]=\"node.left - 1\">{{ node.label }}</span>\r\n</ng-template>\r\n", styles: [".x-anchor{margin:0;padding:0;display:flex}.x-anchor-content{flex:1}.x-anchor-affix{display:block}.x-anchor-slider{float:left}.x-anchor-slider:hover{overflow-y:auto}.x-anchor-slider .x-slider{overflow:hidden}.x-anchor-right{flex-direction:row}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll{overflow-y:auto}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li{border-left:.125rem solid var(--x-border)}.x-anchor-right .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li.x-slider-highlight{border:none;border-top-left-radius:0;border-bottom-left-radius:0;z-index:2;border-left:.125rem solid var(--x-primary)}.x-anchor-left{flex-direction:row-reverse}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll{overflow-y:auto}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li{border-right:.125rem solid var(--x-border)}.x-anchor-left .x-anchor-slider .x-slider-column>.x-slider-scroll>ul>li.x-slider-highlight{border:none;border-top-right-radius:0;border-bottom-right-radius:0;z-index:2;border-right:.125rem solid var(--x-primary)}\n"] }]
143
157
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
144
158
  type: Inject,
145
159
  args: [DOCUMENT]
@@ -150,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
150
164
  type: ViewChild,
151
165
  args: ['content', { static: true }]
152
166
  }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2FuY2hvci9hbmNob3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvYW5jaG9yL2FuY2hvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULGlCQUFpQixFQUlqQix1QkFBdUIsRUFDdkIsU0FBUyxFQUVULE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFlLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBRWxILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFTekQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGVBQWU7SUFZbkQsWUFDUyxRQUFtQixFQUNuQixVQUFtQyxFQUNuQyxHQUFzQixFQUNYLEdBQVEsRUFDbkIsYUFBNkI7UUFFcEMsS0FBSyxFQUFFLENBQUM7UUFORCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ25DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBRXRCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQWJ0QyxlQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUMvQixtQkFBYyxHQUFXLENBQUMsQ0FBQztRQUduQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGVB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QixNQUFNO3NCQUE1QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csT0FBTztzQkFBOUMsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIFJlbmRlcmVyMixcclxuICBFbGVtZW50UmVmLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFZpZXdDaGlsZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIEluamVjdCxcclxuICBPbkRlc3Ryb3lcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWEFuY2hvclByZWZpeCwgWEFuY2hvck5vZGUsIFhBbmNob3JQcm9wZXJ0eSB9IGZyb20gJy4vYW5jaG9yLnByb3BlcnR5JztcclxuaW1wb3J0IHsgY29tcHV0ZWRTdHlsZSwgWElzRW1wdHksIHJlcUFuaW1GcmFtZSwgWElzTnVtYmVyLCBYSXNVbmRlZmluZWQsIFhDb25maWdTZXJ2aWNlIH0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7IFhTbGlkZXJOb2RlIH0gZnJvbSAnQG5nLW5lc3QvdWkvc2xpZGVyJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGhyb3R0bGVUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYCR7WEFuY2hvclByZWZpeH1gLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hbmNob3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FuY2hvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFhBbmNob3JDb21wb25lbnQgZXh0ZW5kcyBYQW5jaG9yUHJvcGVydHkgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnYW5jaG9yJywgeyBzdGF0aWM6IHRydWUgfSkgYW5jaG9yITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnY29udGVudCcsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRlbnQhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBoRWxlbWVudHMhOiBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PjtcclxuICBzbGlkZXJEYXRhOiBYU2xpZGVyTm9kZVtdID0gW107XHJcbiAgYWN0aXZhdGVkSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgc2xpZGVySGVpZ2h0PzogbnVtYmVyO1xyXG4gIGRvY3VtZW50OiBEb2N1bWVudDtcclxuICBwcml2YXRlIF9zY3JvbGxpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIF9mb250U2l6ZTogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3VuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIGRvYzogYW55LFxyXG4gICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IFhDb25maWdTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5kb2N1bWVudCA9IGRvYztcclxuICAgIHRoaXMuX2ZvbnRTaXplID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlKHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnZm9udC1zaXplJykpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgICB0aGlzLnNldFNsaWRlckRhdGEoKTtcclxuICAgIHRoaXMuc2V0SGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNldFNjcm9sbCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLl91blN1YmplY3QubmV4dCgpO1xyXG4gICAgdGhpcy5fdW5TdWJqZWN0LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZWRDaGFuZ2UoaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKFhJc0VtcHR5KHRoaXMuaEVsZW1lbnRzKSB8fCBYSXNVbmRlZmluZWQodGhpcy5zY3JvbGwpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fc2Nyb2xsaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGhFbGVtZW50ID0gdGhpcy5oRWxlbWVudHNbaW5kZXhdO1xyXG4gICAgbGV0IHNjcm9sbFRvcCA9IGhFbGVtZW50Lm9mZnNldFRvcCAtIHRoaXMuYW5jaG9yLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wIC0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlKGhFbGVtZW50LCAnbWFyZ2luLXRvcCcpKTtcclxuICAgIGxldCBtYXhTY3JvbGxUb3AgPSB0aGlzLnNjcm9sbC5zY3JvbGxIZWlnaHQgLSB0aGlzLnNjcm9sbC5jbGllbnRIZWlnaHQ7XHJcbiAgICBpZiAoc2Nyb2xsVG9wID4gbWF4U2Nyb2xsVG9wKSBzY3JvbGxUb3AgPSBtYXhTY3JvbGxUb3A7XHJcbiAgICB0aGlzLnNjcm9sbFRvKHRoaXMuc2Nyb2xsLCBwYXJzZUludChgJHtzY3JvbGxUb3B9YCksIDE1MCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENsYXNzTWFwKCkge1xyXG4gICAgdGhpcy5jbGFzc01hcFtgJHtYQW5jaG9yUHJlZml4fS0ke3RoaXMubGF5b3V0fWBdID0gIVhJc0VtcHR5KHRoaXMubGF5b3V0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2Nyb2xsKCkge1xyXG4gICAgZnJvbUV2ZW50KHRoaXMuc2Nyb2xsID8gdGhpcy5zY3JvbGwgOiB3aW5kb3csICdzY3JvbGwnKVxyXG4gICAgICAucGlwZSh0aHJvdHRsZVRpbWUoMTApLCB0YWtlVW50aWwodGhpcy5fdW5TdWJqZWN0KSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbGluZykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0QWN0aXZhdGVkQnlTY3JvbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICBpZiAoIXRoaXMuc2Nyb2xsKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsID0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEFjdGl2YXRlZEJ5U2Nyb2xsKCkge1xyXG4gICAgbGV0IG5vdyA9IDA7XHJcbiAgICB0aGlzLmhFbGVtZW50cy5mb3JFYWNoKChoLCBpbmRleCkgPT4ge1xyXG4gICAgICBsZXQgZGlzdGFuY2UgPSB0aGlzLnNjcm9sbC5zY3JvbGxUb3AgKyB0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcclxuICAgICAgaWYgKGRpc3RhbmNlID49IGgub2Zmc2V0VG9wKSB7XHJcbiAgICAgICAgbm93ID0gaW5kZXg7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYWN0aXZhdGVkSW5kZXggPSBub3c7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNsaWRlckRhdGEoKSB7XHJcbiAgICB0aGlzLmhFbGVtZW50cyA9IHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJzpzY29wZT4gaDEsOnNjb3BlPiBoMiw6c2NvcGU+IGgzLDpzY29wZT4gaDQsOnNjb3BlPiBoNScpO1xyXG4gICAgaWYgKHRoaXMuaEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGxpc3Q6IFhBbmNob3JOb2RlW10gPSBbXTtcclxuICAgICAgdGhpcy5oRWxlbWVudHMuZm9yRWFjaCgoeDogSFRNTEVsZW1lbnQsIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBgeC1hbmNob3ItJHtpfWA7XHJcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMuc2V0TGVmdCh4KTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh4LCAnaWQnLCBsaW5rKTtcclxuICAgICAgICBsaXN0ID0gW1xyXG4gICAgICAgICAgLi4ubGlzdCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWQ6IGksXHJcbiAgICAgICAgICAgIGxhYmVsOiB4LmlubmVyVGV4dCxcclxuICAgICAgICAgICAgbGVmdDogbGVmdCxcclxuICAgICAgICAgICAgbGluazogbGlua1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNsaWRlckRhdGEgPSBsaXN0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRMZWZ0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGVsZXMgPSBbJ0gxJywgJ0gyJywgJ0gzJywgJ0g0JywgJ0g1J107XHJcbiAgICBjb25zdCBpbmRleCA9IGVsZXMuaW5kZXhPZihlbGVtZW50LnRhZ05hbWUpO1xyXG4gICAgcmV0dXJuIGluZGV4ICsgMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SGVpZ2h0KCkge1xyXG4gICAgaWYgKHRoaXMuc2Nyb2xsKSB7XHJcbiAgICAgIGxldCBoZWlnaHQgPSB0aGlzLnNjcm9sbC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIGxldCB0b3AgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUodGhpcy5zY3JvbGwsICdwYWRkaW5nLXRvcCcpKTtcclxuICAgICAgbGV0IGJvcmRlclRvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZSh0aGlzLnNjcm9sbCwgJ2JvcmRlci10b3AnKSk7XHJcbiAgICAgIGxldCBib3R0b20gPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUodGhpcy5zY3JvbGwsICdwYWRkaW5nLWJvdHRvbScpKTtcclxuICAgICAgbGV0IGJvcmRlckJvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZSh0aGlzLnNjcm9sbCwgJ2JvcmRlci1ib3R0b20nKSk7XHJcbiAgICAgIHRoaXMuc2xpZGVySGVpZ2h0ID0gaGVpZ2h0IC0gdG9wIC0gYm90dG9tIC0gYm9yZGVyVG9wIC0gYm9yZGVyQm90dG9tIC0gdGhpcy5nZXRUb3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VG9wKCkge1xyXG4gICAgaWYgKHRoaXMuYWZmaXhUb3AgPT09ICcwJykgcmV0dXJuIDA7XHJcbiAgICBpZiAoWElzTnVtYmVyKHRoaXMuYWZmaXhUb3ApKSByZXR1cm4gTnVtYmVyKHRoaXMuYWZmaXhUb3ApO1xyXG4gICAgZWxzZSBpZiAodGhpcy5hZmZpeFRvcC5pbmRleE9mKCdyZW0nKSAhPT0gLTEpIHJldHVybiBOdW1iZXIodGhpcy5hZmZpeFRvcC5yZXBsYWNlKC9yZW0vZywgJycpKSAqIHRoaXMuX2ZvbnRTaXplO1xyXG4gICAgZWxzZSBpZiAodGhpcy5hZmZpeFRvcC5pbmRleE9mKCdweCcpICE9PSAtMSkgcmV0dXJuIE51bWJlcih0aGlzLmFmZml4VG9wLnJlcGxhY2UoL3B4L2csICcnKSk7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsVG8oZWxlbWVudDogSFRNTEVsZW1lbnQsIHRvOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0byAtIGVsZW1lbnQuc2Nyb2xsVG9wO1xyXG4gICAgY29uc3QgcGVyVGljayA9IChkaWZmZXJlbmNlIC8gZHVyYXRpb24pICogMTA7XHJcbiAgICByZXFBbmltRnJhbWUoKCkgPT4ge1xyXG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgcGVyVGljaztcclxuICAgICAgaWYgKGVsZW1lbnQuc2Nyb2xsVG9wID09PSB0byB8fCBkdXJhdGlvbiA8PSAwKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5fc2Nyb2xsaW5nID0gZmFsc2UpLCAyMCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uIC0gMTApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAjYW5jaG9yIGNsYXNzPVwieC1hbmNob3JcIiBbbmdDbGFzc109XCJjbGFzc01hcFwiPlxyXG4gIDxkaXYgI2NvbnRlbnQgY2xhc3M9XCJ4LWFuY2hvci1jb250ZW50XCI+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcbiAgPHgtYWZmaXggY2xhc3M9XCJ4LWFuY2hvci1hZmZpeFwiIFt0b3BdPVwiYWZmaXhUb3BcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ4LWFuY2hvci1zbGlkZXJcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cInNsaWRlckhlaWdodFwiPlxyXG4gICAgICA8eC1zbGlkZXJcclxuICAgICAgICBbZGF0YV09XCJzbGlkZXJEYXRhXCJcclxuICAgICAgICBsYXlvdXQ9XCJjb2x1bW5cIlxyXG4gICAgICAgIFthY3RpdmF0ZWRJbmRleF09XCJhY3RpdmF0ZWRJbmRleFwiXHJcbiAgICAgICAgW25vZGVKdXN0aWZ5XT1cImp1c3RpZnlcIlxyXG4gICAgICAgIFtub2RlVHBsXT1cInNsaWRlck5vZGVUcGxcIlxyXG4gICAgICAgIFtzaG93QW5jaG9yXT1cInRydWVcIlxyXG4gICAgICAgIChpbmRleENoYW5nZSk9XCJhY3RpdmF0ZWRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID48L3gtc2xpZGVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC94LWFmZml4PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2xpZGVyTm9kZVRwbCBsZXQtbm9kZT1cIiRub2RlXCI+XHJcbiAgPHNwYW4gW3N0eWxlLnBhZGRpbmctbGVmdC5yZW1dPVwibm9kZS5sZWZ0IC0gMVwiPnt7IG5vZGUubGFiZWwgfX08L3NwYW4+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2FuY2hvci9hbmNob3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvYW5jaG9yL2FuY2hvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULGlCQUFpQixFQUlqQix1QkFBdUIsRUFDdkIsU0FBUyxFQUVULE1BQU0sRUFHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFlLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBRWxILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFTL0UsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGVBQWU7SUFhbkQsWUFDUyxRQUFtQixFQUNuQixVQUFtQyxFQUNuQyxHQUFzQixFQUNYLEdBQVEsRUFDbkIsYUFBNkI7UUFFcEMsS0FBSyxFQUFFLENBQUM7UUFORCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ25DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBRXRCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQWR0QyxlQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUMvQixtQkFBYyxHQUFXLENBQUMsQ0FBQztRQUczQixrQkFBYSxHQUFHLElBQUks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LEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7WUFDaEQsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLEVBQUUsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO2dCQUM3QyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxPQUFPO2FBQ1I7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUMzQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7Z0lBekpVLGdCQUFnQixzR0FpQmpCLFFBQVE7b0hBakJQLGdCQUFnQiwwUkM1QjdCLHF4QkFzQkE7MkZETWEsZ0JBQWdCO2tCQVA1QixTQUFTOytCQUNFLEdBQUcsYUFBYSxFQUFFLGlCQUdiLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07OzBCQW1CNUMsTUFBTTsyQkFBQyxRQUFRO3lFQWhCcUIsTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNHLE9BQU87c0JBQTlDLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBSZW5kZXJlcjIsXHJcbiAgRWxlbWVudFJlZixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBJbmplY3QsXHJcbiAgT25EZXN0cm95LFxyXG4gIEFmdGVyQ29udGVudENoZWNrZWRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWEFuY2hvclByZWZpeCwgWEFuY2hvck5vZGUsIFhBbmNob3JQcm9wZXJ0eSB9IGZyb20gJy4vYW5jaG9yLnByb3BlcnR5JztcclxuaW1wb3J0IHsgY29tcHV0ZWRTdHlsZSwgWElzRW1wdHksIHJlcUFuaW1GcmFtZSwgWElzTnVtYmVyLCBYSXNVbmRlZmluZWQsIFhDb25maWdTZXJ2aWNlIH0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7IFhTbGlkZXJOb2RlIH0gZnJvbSAnQG5nLW5lc3QvdWkvc2xpZGVyJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGhyb3R0bGVUaW1lLCB0YWtlVW50aWwsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hBbmNob3JQcmVmaXh9YCxcclxuICB0ZW1wbGF0ZVVybDogJy4vYW5jaG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hbmNob3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYQW5jaG9yQ29tcG9uZW50IGV4dGVuZHMgWEFuY2hvclByb3BlcnR5IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gIEBWaWV3Q2hpbGQoJ2FuY2hvcicsIHsgc3RhdGljOiB0cnVlIH0pIGFuY2hvciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250ZW50ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgaEVsZW1lbnRzITogTm9kZUxpc3RPZjxIVE1MRWxlbWVudD47XHJcbiAgc2xpZGVyRGF0YTogWFNsaWRlck5vZGVbXSA9IFtdO1xyXG4gIGFjdGl2YXRlZEluZGV4OiBudW1iZXIgPSAwO1xyXG4gIHNsaWRlckhlaWdodD86IG51bWJlcjtcclxuICBkb2N1bWVudDogRG9jdW1lbnQ7XHJcbiAgY29udGVudENoYW5nZSA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcHJpdmF0ZSBfc2Nyb2xsaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZm9udFNpemU6IG51bWJlcjtcclxuICBwcml2YXRlIF91blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2M6IGFueSxcclxuICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBYQ29uZmlnU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2M7XHJcbiAgICB0aGlzLl9mb250U2l6ZSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZSh0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJ2ZvbnQtc2l6ZScpKTtcclxuICB9XHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb250ZW50Q2hhbmdlLm5leHQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xyXG4gICAgdGhpcy5zZXRTbGlkZXJEYXRhKCk7XHJcbiAgICB0aGlzLnNldEhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zZXRTY3JvbGwoKTtcclxuICAgIHRoaXMuY29udGVudENoYW5nZS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldFNsaWRlckRhdGEoKTtcclxuICAgICAgdGhpcy5zZXRIZWlnaHQoKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX3VuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLl91blN1YmplY3QudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlZENoYW5nZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoWElzRW1wdHkodGhpcy5oRWxlbWVudHMpIHx8IFhJc1VuZGVmaW5lZCh0aGlzLnNjcm9sbCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLl9zY3JvbGxpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgaEVsZW1lbnQgPSB0aGlzLmhFbGVtZW50c1tpbmRleF07XHJcbiAgICBsZXQgc2Nyb2xsVG9wID0gaEVsZW1lbnQub2Zmc2V0VG9wIC0gdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgLSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUoaEVsZW1lbnQsICdtYXJnaW4tdG9wJykpO1xyXG4gICAgbGV0IG1heFNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsLnNjcm9sbEhlaWdodCAtIHRoaXMuc2Nyb2xsLmNsaWVudEhlaWdodDtcclxuICAgIGlmIChzY3JvbGxUb3AgPiBtYXhTY3JvbGxUb3ApIHNjcm9sbFRvcCA9IG1heFNjcm9sbFRvcDtcclxuICAgIHRoaXMuc2Nyb2xsVG8odGhpcy5zY3JvbGwsIHBhcnNlSW50KGAke3Njcm9sbFRvcH1gKSwgMTUwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2xhc3NNYXAoKSB7XHJcbiAgICB0aGlzLmNsYXNzTWFwW2Ake1hBbmNob3JQcmVmaXh9LSR7dGhpcy5sYXlvdXR9YF0gPSAhWElzRW1wdHkodGhpcy5sYXlvdXQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTY3JvbGwoKSB7XHJcbiAgICBmcm9tRXZlbnQodGhpcy5zY3JvbGwgPyB0aGlzLnNjcm9sbCA6IHdpbmRvdywgJ3Njcm9sbCcpXHJcbiAgICAgIC5waXBlKHRocm90dGxlVGltZSgxMCksIHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsaW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRBY3RpdmF0ZWRCeVNjcm9sbCgpO1xyXG4gICAgICB9KTtcclxuICAgIGlmICghdGhpcy5zY3JvbGwpIHtcclxuICAgICAgdGhpcy5zY3JvbGwgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QWN0aXZhdGVkQnlTY3JvbGwoKSB7XHJcbiAgICBsZXQgbm93ID0gMDtcclxuICAgIHRoaXMuaEVsZW1lbnRzLmZvckVhY2goKGgsIGluZGV4KSA9PiB7XHJcbiAgICAgIGxldCBkaXN0YW5jZSA9IHRoaXMuc2Nyb2xsLnNjcm9sbFRvcCArIHRoaXMuYW5jaG9yLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICBpZiAoZGlzdGFuY2UgPj0gaC5vZmZzZXRUb3ApIHtcclxuICAgICAgICBub3cgPSBpbmRleDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRJbmRleCA9IG5vdztcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2xpZGVyRGF0YSgpIHtcclxuICAgIHRoaXMuaEVsZW1lbnRzID0gdGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgJzpzY29wZT4gaDEsOnNjb3BlPiBoMiw6c2NvcGU+IGgzLDpzY29wZT4gaDQsOnNjb3BlPiBoNSw6c2NvcGU+IHgtYW5jaG9yLWlubmVyPiBoMSw6c2NvcGU+IHgtYW5jaG9yLWlubmVyPmgyLDpzY29wZT4geC1hbmNob3ItaW5uZXI+aDMsOnNjb3BlPiB4LWFuY2hvci1pbm5lcj5oNCw6c2NvcGU+IHgtYW5jaG9yLWlubmVyPmg1J1xyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLmhFbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBsaXN0OiBYQW5jaG9yTm9kZVtdID0gW107XHJcbiAgICAgIHRoaXMuaEVsZW1lbnRzLmZvckVhY2goKHg6IEhUTUxFbGVtZW50LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCBsaW5rID0gYHgtYW5jaG9yLSR7aX1gO1xyXG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLnNldExlZnQoeCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoeCwgJ2lkJywgbGluayk7XHJcbiAgICAgICAgbGlzdCA9IFtcclxuICAgICAgICAgIC4uLmxpc3QsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlkOiBpLFxyXG4gICAgICAgICAgICBsYWJlbDogeC5pbm5lclRleHQsXHJcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXHJcbiAgICAgICAgICAgIGxpbms6IGxpbmtcclxuICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zbGlkZXJEYXRhID0gbGlzdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TGVmdChlbGVtZW50OiBIVE1MRWxlbWVudCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBlbGVzID0gWydIMScsICdIMicsICdIMycsICdINCcsICdINSddO1xyXG4gICAgY29uc3QgaW5kZXggPSBlbGVzLmluZGV4T2YoZWxlbWVudC50YWdOYW1lKTtcclxuICAgIHJldHVybiBpbmRleCArIDE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEhlaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnNjcm9sbCkge1xyXG4gICAgICBpZiAoWElzRW1wdHkodGhpcy5zbGlkZXJEYXRhKSkge1xyXG4gICAgICAgIHRoaXMuc2xpZGVySGVpZ2h0ID0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5zY3JvbGwub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIGxldCB0b3AgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUodGhpcy5zY3JvbGwsICdwYWRkaW5nLXRvcCcpKTtcclxuICAgICAgICBsZXQgYm9yZGVyVG9wID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlKHRoaXMuc2Nyb2xsLCAnYm9yZGVyLXRvcCcpKTtcclxuICAgICAgICBsZXQgYm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlKHRoaXMuc2Nyb2xsLCAncGFkZGluZy1ib3R0b20nKSk7XHJcbiAgICAgICAgbGV0IGJvcmRlckJvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZSh0aGlzLnNjcm9sbCwgJ2JvcmRlci1ib3R0b20nKSk7XHJcbiAgICAgICAgdGhpcy5zbGlkZXJIZWlnaHQgPSBoZWlnaHQgLSB0b3AgLSBib3R0b20gLSBib3JkZXJUb3AgLSBib3JkZXJCb3R0b20gLSB0aGlzLmdldFRvcCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRvcCgpIHtcclxuICAgIGlmICh0aGlzLmFmZml4VG9wID09PSAnMCcpIHJldHVybiAwO1xyXG4gICAgaWYgKFhJc051bWJlcih0aGlzLmFmZml4VG9wKSkgcmV0dXJuIE51bWJlcih0aGlzLmFmZml4VG9wKTtcclxuICAgIGVsc2UgaWYgKHRoaXMuYWZmaXhUb3AuaW5kZXhPZigncmVtJykgIT09IC0xKSByZXR1cm4gTnVtYmVyKHRoaXMuYWZmaXhUb3AucmVwbGFjZSgvcmVtL2csICcnKSkgKiB0aGlzLl9mb250U2l6ZTtcclxuICAgIGVsc2UgaWYgKHRoaXMuYWZmaXhUb3AuaW5kZXhPZigncHgnKSAhPT0gLTEpIHJldHVybiBOdW1iZXIodGhpcy5hZmZpeFRvcC5yZXBsYWNlKC9weC9nLCAnJykpO1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbFRvKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0bzogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdG8gLSBlbGVtZW50LnNjcm9sbFRvcDtcclxuICAgIGNvbnN0IHBlclRpY2sgPSAoZGlmZmVyZW5jZSAvIGR1cmF0aW9uKSAqIDEwO1xyXG4gICAgcmVxQW5pbUZyYW1lKCgpID0+IHtcclxuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbFRvcCArIHBlclRpY2s7XHJcbiAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCA9PT0gdG8gfHwgZHVyYXRpb24gPD0gMCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuX3Njcm9sbGluZyA9IGZhbHNlKSwgMjApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbiAtIDEwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2FuY2hvciBjbGFzcz1cIngtYW5jaG9yXCIgW25nQ2xhc3NdPVwiY2xhc3NNYXBcIj5cclxuICA8ZGl2ICNjb250ZW50IGNsYXNzPVwieC1hbmNob3ItY29udGVudFwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG4gIDx4LWFmZml4IGNsYXNzPVwieC1hbmNob3ItYWZmaXhcIiBbdG9wXT1cImFmZml4VG9wXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwieC1hbmNob3Itc2xpZGVyXCIgW3N0eWxlLmhlaWdodC5weF09XCJzbGlkZXJIZWlnaHRcIj5cclxuICAgICAgPHgtc2xpZGVyXHJcbiAgICAgICAgW2RhdGFdPVwic2xpZGVyRGF0YVwiXHJcbiAgICAgICAgbGF5b3V0PVwiY29sdW1uXCJcclxuICAgICAgICBbYWN0aXZhdGVkSW5kZXhdPVwiYWN0aXZhdGVkSW5kZXhcIlxyXG4gICAgICAgIFtub2RlSnVzdGlmeV09XCJqdXN0aWZ5XCJcclxuICAgICAgICBbbm9kZVRwbF09XCJzbGlkZXJOb2RlVHBsXCJcclxuICAgICAgICBbc2hvd0FuY2hvcl09XCJ0cnVlXCJcclxuICAgICAgICAoaW5kZXhDaGFuZ2UpPVwiYWN0aXZhdGVkQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICA+PC94LXNsaWRlcj5cclxuICAgIDwvZGl2PlxyXG4gIDwveC1hZmZpeD5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3NsaWRlck5vZGVUcGwgbGV0LW5vZGU9XCIkbm9kZVwiPlxyXG4gIDxzcGFuIFtzdHlsZS5wYWRkaW5nLWxlZnQucmVtXT1cIm5vZGUubGVmdCAtIDFcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=