ngx-tethys 18.2.0-next.0 → 18.2.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/autocomplete/autocomplete.component.d.ts +2 -1
  3. package/calendar/calendar-header.component.d.ts +2 -0
  4. package/cascader/cascader.component.d.ts +1 -0
  5. package/color-picker/color-picker-panel.component.d.ts +3 -1
  6. package/copy/copy.directive.d.ts +1 -0
  7. package/core/theme/store.d.ts +2 -1
  8. package/date-picker/abstract-picker.component.d.ts +3 -1
  9. package/date-picker/date-helper.service.d.ts +3 -0
  10. package/date-picker/date-picker.config.d.ts +7 -1
  11. package/date-picker/lib/calendar/calendar-footer.component.d.ts +3 -1
  12. package/date-picker/lib/calendar/calendar-header.component.d.ts +3 -1
  13. package/date-picker/lib/calendar/calendar-table.component.d.ts +3 -1
  14. package/date-picker/lib/date-carousel/date-carousel.component.d.ts +4 -1
  15. package/date-picker/lib/popups/date-popup.component.d.ts +3 -1
  16. package/date-picker/lib/popups/inner-popup.component.d.ts +3 -1
  17. package/date-range/date-range.component.d.ts +2 -0
  18. package/date-range/optional-dates/optional-dates.component.d.ts +1 -0
  19. package/dialog/confirm/confirm.component.d.ts +1 -0
  20. package/dialog/confirm.config.d.ts +14 -7
  21. package/empty/empty.component.d.ts +14 -9
  22. package/empty/empty.config.d.ts +3 -0
  23. package/esm2022/autocomplete/autocomplete.component.mjs +5 -3
  24. package/esm2022/calendar/calendar-header.component.mjs +9 -5
  25. package/esm2022/cascader/cascader.component.mjs +5 -3
  26. package/esm2022/checkbox/checkbox.component.mjs +1 -1
  27. package/esm2022/color-picker/color-picker-panel.component.mjs +5 -3
  28. package/esm2022/copy/copy.directive.mjs +7 -5
  29. package/esm2022/core/theme/store.mjs +7 -7
  30. package/esm2022/date-picker/abstract-picker.component.mjs +4 -2
  31. package/esm2022/date-picker/base-picker.component.mjs +2 -2
  32. package/esm2022/date-picker/date-helper.service.mjs +4 -2
  33. package/esm2022/date-picker/date-picker.component.mjs +1 -1
  34. package/esm2022/date-picker/date-picker.config.mjs +55 -2
  35. package/esm2022/date-picker/date-picker.directive.mjs +1 -1
  36. package/esm2022/date-picker/date-picker.service.mjs +3 -3
  37. package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +5 -3
  38. package/esm2022/date-picker/lib/calendar/calendar-header.component.mjs +3 -1
  39. package/esm2022/date-picker/lib/calendar/calendar-table.component.mjs +3 -1
  40. package/esm2022/date-picker/lib/date/date-header.component.mjs +6 -5
  41. package/esm2022/date-picker/lib/date/date-table.component.mjs +4 -4
  42. package/esm2022/date-picker/lib/date-carousel/date-carousel.component.mjs +9 -4
  43. package/esm2022/date-picker/lib/decade/decade-header.component.mjs +3 -3
  44. package/esm2022/date-picker/lib/month/month-header.component.mjs +4 -4
  45. package/esm2022/date-picker/lib/month/month-table.component.mjs +3 -2
  46. package/esm2022/date-picker/lib/popups/date-popup.component.mjs +5 -3
  47. package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +5 -3
  48. package/esm2022/date-picker/lib/year/year-header.component.mjs +3 -3
  49. package/esm2022/date-picker/month-picker.component.mjs +1 -1
  50. package/esm2022/date-picker/quarter-picker.component.mjs +1 -1
  51. package/esm2022/date-picker/range-picker.component.mjs +1 -1
  52. package/esm2022/date-picker/range-picker.directive.mjs +1 -1
  53. package/esm2022/date-picker/week-picker.component.mjs +1 -1
  54. package/esm2022/date-picker/year-picker.component.mjs +1 -1
  55. package/esm2022/date-range/date-range.component.mjs +7 -4
  56. package/esm2022/date-range/optional-dates/optional-dates.component.mjs +4 -2
  57. package/esm2022/dialog/confirm/confirm.component.mjs +14 -3
  58. package/esm2022/dialog/confirm.config.mjs +17 -2
  59. package/esm2022/empty/empty.component.mjs +7 -2
  60. package/esm2022/empty/empty.config.mjs +4 -1
  61. package/esm2022/form/form-validator-loader.mjs +17 -15
  62. package/esm2022/guider/guider-hint/guider-hint.component.mjs +5 -3
  63. package/esm2022/i18n/i18n.mjs +2 -0
  64. package/esm2022/i18n/i18n.service.mjs +39 -0
  65. package/esm2022/i18n/i18n.token.mjs +8 -0
  66. package/esm2022/i18n/index.mjs +7 -0
  67. package/esm2022/i18n/locale.mjs +14 -0
  68. package/esm2022/i18n/locales/en-us.mjs +147 -0
  69. package/esm2022/i18n/locales/zh-cn.mjs +127 -0
  70. package/esm2022/i18n/ngx-tethys-i18n.mjs +5 -0
  71. package/esm2022/pagination/pagination.component.mjs +22 -5
  72. package/esm2022/pagination/pagination.module.mjs +26 -5
  73. package/esm2022/pagination/pagination.pipe.mjs +22 -1
  74. package/esm2022/property/property-item.component.mjs +3 -3
  75. package/esm2022/radio/button/radio-button.component.mjs +1 -1
  76. package/esm2022/radio/radio.component.mjs +1 -1
  77. package/esm2022/select/custom-select/custom-select.component.mjs +9 -3
  78. package/esm2022/strength/strength.component.mjs +21 -20
  79. package/esm2022/time-picker/time-picker-panel.component.mjs +5 -3
  80. package/esm2022/time-picker/time-picker.component.mjs +4 -2
  81. package/esm2022/transfer/transfer-list.component.mjs +5 -3
  82. package/esm2022/tree-select/tree-select.component.mjs +5 -3
  83. package/esm2022/version.mjs +2 -2
  84. package/fesm2022/ngx-tethys-autocomplete.mjs +4 -2
  85. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  86. package/fesm2022/ngx-tethys-calendar.mjs +8 -5
  87. package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
  88. package/fesm2022/ngx-tethys-cascader.mjs +4 -2
  89. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  90. package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
  91. package/fesm2022/ngx-tethys-color-picker.mjs +4 -2
  92. package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
  93. package/fesm2022/ngx-tethys-copy.mjs +6 -4
  94. package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
  95. package/fesm2022/ngx-tethys-core.mjs +6 -6
  96. package/fesm2022/ngx-tethys-core.mjs.map +1 -1
  97. package/fesm2022/ngx-tethys-date-picker.mjs +95 -30
  98. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  99. package/fesm2022/ngx-tethys-date-range.mjs +8 -4
  100. package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
  101. package/fesm2022/ngx-tethys-dialog.mjs +27 -2
  102. package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
  103. package/fesm2022/ngx-tethys-empty.mjs +9 -1
  104. package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
  105. package/fesm2022/ngx-tethys-form.mjs +16 -14
  106. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  107. package/fesm2022/ngx-tethys-guider.mjs +4 -2
  108. package/fesm2022/ngx-tethys-guider.mjs.map +1 -1
  109. package/fesm2022/ngx-tethys-i18n.mjs +338 -0
  110. package/fesm2022/ngx-tethys-i18n.mjs.map +1 -0
  111. package/fesm2022/ngx-tethys-pagination.mjs +66 -7
  112. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  113. package/fesm2022/ngx-tethys-property.mjs +2 -2
  114. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  115. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  116. package/fesm2022/ngx-tethys-select.mjs +8 -2
  117. package/fesm2022/ngx-tethys-select.mjs.map +1 -1
  118. package/fesm2022/ngx-tethys-strength.mjs +20 -19
  119. package/fesm2022/ngx-tethys-strength.mjs.map +1 -1
  120. package/fesm2022/ngx-tethys-time-picker.mjs +6 -3
  121. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  122. package/fesm2022/ngx-tethys-transfer.mjs +4 -2
  123. package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
  124. package/fesm2022/ngx-tethys-tree-select.mjs +4 -2
  125. package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
  126. package/fesm2022/ngx-tethys.mjs +1 -1
  127. package/fesm2022/ngx-tethys.mjs.map +1 -1
  128. package/form/form-validator-loader.d.ts +2 -0
  129. package/guider/guider-hint/guider-hint.component.d.ts +3 -1
  130. package/i18n/i18n.d.ts +143 -0
  131. package/i18n/i18n.service.d.ts +19 -0
  132. package/i18n/i18n.token.d.ts +5 -0
  133. package/i18n/index.d.ts +6 -0
  134. package/i18n/locale.d.ts +4 -0
  135. package/i18n/locales/en-us.d.ts +147 -0
  136. package/i18n/locales/zh-cn.d.ts +126 -0
  137. package/package.json +7 -1
  138. package/pagination/pagination.component.d.ts +4 -1
  139. package/pagination/pagination.module.d.ts +1 -1
  140. package/pagination/pagination.pipe.d.ts +6 -0
  141. package/radio/radio.component.d.ts +0 -2
  142. package/schematics/version.d.ts +1 -1
  143. package/schematics/version.js +1 -1
  144. package/select/custom-select/custom-select.component.d.ts +1 -0
  145. package/strength/strength.component.d.ts +21 -2
  146. package/styles/modules/cdk/drag-drop.scss +1 -1
  147. package/time-picker/time-picker-panel.component.d.ts +3 -1
  148. package/time-picker/time-picker.component.d.ts +3 -1
  149. package/transfer/transfer-list.component.d.ts +3 -1
  150. package/tree-select/tree-select.component.d.ts +1 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,46 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ # [18.2.0-next.1](https://github.com/atinc/ngx-tethys/compare/18.2.0-next.0...18.2.0-next.1) (2024-11-21)
6
+
7
+
8
+ ### Features
9
+
10
+ * **autocomplete:** support i18n #TINFR-1020 ([#3259](https://github.com/atinc/ngx-tethys/issues/3259)) ([30c7927](https://github.com/atinc/ngx-tethys/commit/30c7927865eebff3d89a33e2fedf8df7a83a2b51)), closes [#TINFR-1020](https://github.com/atinc/ngx-tethys/issues/TINFR-1020)
11
+ * **calendar:** support i18n #TINFR-962 ([#3244](https://github.com/atinc/ngx-tethys/issues/3244)) ([4cac6df](https://github.com/atinc/ngx-tethys/commit/4cac6df016b12dc57ed3bed5f3c9090060ffa007)), closes [#TINFR-962](https://github.com/atinc/ngx-tethys/issues/TINFR-962)
12
+ * **cascader:** support i18n #TINFR-967 ([#3248](https://github.com/atinc/ngx-tethys/issues/3248)) ([fc5fa48](https://github.com/atinc/ngx-tethys/commit/fc5fa485d9e4cefd495f89779baf52afdcde733f)), closes [#TINFR-967](https://github.com/atinc/ngx-tethys/issues/TINFR-967)
13
+ * **colorPicker:** support i18n #TINFR-965 ([#3246](https://github.com/atinc/ngx-tethys/issues/3246)) ([3b23810](https://github.com/atinc/ngx-tethys/commit/3b238103a23e26000ee20a2e0ad021df34d542a2)), closes [#TINFR-965](https://github.com/atinc/ngx-tethys/issues/TINFR-965)
14
+ * **copy:** support i18n #TINFR-961 ([#3243](https://github.com/atinc/ngx-tethys/issues/3243)) ([f648460](https://github.com/atinc/ngx-tethys/commit/f6484600a99151b862b118b4b15e6d0818277364)), closes [#TINFR-961](https://github.com/atinc/ngx-tethys/issues/TINFR-961)
15
+ * **date-picker:** support i18n #TINFR-917 ([#3254](https://github.com/atinc/ngx-tethys/issues/3254)) ([5928b79](https://github.com/atinc/ngx-tethys/commit/5928b790adc5e38cdb6d2037eb59cfd0c9b85804)), closes [#TINFR-917](https://github.com/atinc/ngx-tethys/issues/TINFR-917)
16
+ * **date-range:** support i18n #TINFR-968 ([#3256](https://github.com/atinc/ngx-tethys/issues/3256)) ([f6bd62e](https://github.com/atinc/ngx-tethys/commit/f6bd62e465c28cba57205ba5a773b6df6f7c579c)), closes [#TINFR-968](https://github.com/atinc/ngx-tethys/issues/TINFR-968)
17
+ * **dialog:** support i18n #TINFR-973 ([#3266](https://github.com/atinc/ngx-tethys/issues/3266)) ([194f20b](https://github.com/atinc/ngx-tethys/commit/194f20b4ccd1f936767f0ee1ba497fd13a403769)), closes [#TINFR-973](https://github.com/atinc/ngx-tethys/issues/TINFR-973)
18
+ * **empty:** support i18n #TINFR-972 ([#3262](https://github.com/atinc/ngx-tethys/issues/3262)) ([310a686](https://github.com/atinc/ngx-tethys/commit/310a686ed83192b70660a4127bf20b08e7890349)), closes [#TINFR-972](https://github.com/atinc/ngx-tethys/issues/TINFR-972)
19
+ * **form:** support i18n #TINFR-970 ([#3255](https://github.com/atinc/ngx-tethys/issues/3255)) ([29c82b1](https://github.com/atinc/ngx-tethys/commit/29c82b18656da38c8bca23d3d37a0e2f2c860e1e)), closes [#TINFR-970](https://github.com/atinc/ngx-tethys/issues/TINFR-970)
20
+ * **guider:** support i18n #TINFR-960 ([#3245](https://github.com/atinc/ngx-tethys/issues/3245)) ([c6ad04b](https://github.com/atinc/ngx-tethys/commit/c6ad04b529449cba359108bf84ed40a017fdb6c4)), closes [#TINFR-960](https://github.com/atinc/ngx-tethys/issues/TINFR-960)
21
+ * **i18n:** i18n design and review #TINFR-916  ([#3242](https://github.com/atinc/ngx-tethys/issues/3242)) ([f829685](https://github.com/atinc/ngx-tethys/commit/f829685f61a850eb19fdd0be2f868a0e896779cb)), closes [#TINFR-916](https://github.com/atinc/ngx-tethys/issues/TINFR-916)
22
+ * **pagination:** support i18n #TINFR-969 ([#3252](https://github.com/atinc/ngx-tethys/issues/3252)) ([60518c4](https://github.com/atinc/ngx-tethys/commit/60518c43a365601c5987edbc89c7dc980d9c65a5)), closes [#TINFR-969](https://github.com/atinc/ngx-tethys/issues/TINFR-969)
23
+ * **select:** support i18n #TINFR-963 ([#3250](https://github.com/atinc/ngx-tethys/issues/3250)) ([794c6ac](https://github.com/atinc/ngx-tethys/commit/794c6ac23e2bd84aaf0d729837b46e3e68774aa9)), closes [#TINFR-963](https://github.com/atinc/ngx-tethys/issues/TINFR-963)
24
+ * **strength:** support i18n #TINFR-971 ([#3251](https://github.com/atinc/ngx-tethys/issues/3251)) ([5260729](https://github.com/atinc/ngx-tethys/commit/5260729a0721d4fb965c576c404a9dc7695c4aa7)), closes [#TINFR-971](https://github.com/atinc/ngx-tethys/issues/TINFR-971)
25
+ * **time-picker:** support i18n #TINFR-1001 ([#3247](https://github.com/atinc/ngx-tethys/issues/3247)) ([5c05293](https://github.com/atinc/ngx-tethys/commit/5c05293706fcfc5f7af5433171f8601c9373f816)), closes [#TINFR-1001](https://github.com/atinc/ngx-tethys/issues/TINFR-1001)
26
+ * **tree-select:** support i18n #TINFR-964 ([#3249](https://github.com/atinc/ngx-tethys/issues/3249)) ([8728887](https://github.com/atinc/ngx-tethys/commit/8728887bf238dc1c12ae3c1f5b216bd4818206f1)), closes [#TINFR-964](https://github.com/atinc/ngx-tethys/issues/TINFR-964)
27
+
28
+
29
+
30
+ ## [18.1.1](https://github.com/atinc/ngx-tethys/compare/18.1.0...18.1.1) (2024-11-20)
31
+
32
+
33
+ ### Bug Fixes
34
+
35
+ * 页面的 tooltip 有时候会导致点击有 property-item 的 弹出层时,property-item 错误的退出编辑状态 #INFR-1023 ([#3261](https://github.com/atinc/ngx-tethys/issues/3261)) ([dbf511e](https://github.com/atinc/ngx-tethys/commit/dbf511e9ed2d2d2cab62c454ce2c0d5de51068fe)), closes [#INFR-1023](https://github.com/atinc/ngx-tethys/issues/INFR-1023)
36
+
37
+
38
+ ### Features
39
+
40
+ * **core:** support projectableNodes for ThyAbstractOverlayConfig and rename ThyStealthViewDirective to ThyStealthView #TINFR-651 ([#3230](https://github.com/atinc/ngx-tethys/issues/3230)) ([f838b96](https://github.com/atinc/ngx-tethys/commit/f838b967ae2066790617f1ace6729d4ea4025369)), closes [#TINFR-651](https://github.com/atinc/ngx-tethys/issues/TINFR-651)
41
+ * **drag-drop:** mark drag-drop as deprecated #TINFR-438 ([#3231](https://github.com/atinc/ngx-tethys/issues/3231)) ([7497858](https://github.com/atinc/ngx-tethys/commit/7497858e449a5d217c3117432db3648f27766e52)), closes [#TINFR-438](https://github.com/atinc/ngx-tethys/issues/TINFR-438)
42
+
43
+
44
+
5
45
  # [18.2.0-next.0](https://github.com/atinc/ngx-tethys/compare/18.1.0...18.2.0-next.0) (2024-11-14)
6
46
 
7
47
 
@@ -19,6 +19,7 @@ export declare class ThyAutocomplete implements IThyOptionParentComponent, OnIni
19
19
  private ngZone;
20
20
  private changeDetectorRef;
21
21
  private ngUnsubscribe$;
22
+ private locale;
22
23
  dropDownClass: {
23
24
  [key: string]: boolean;
24
25
  };
@@ -38,7 +39,7 @@ export declare class ThyAutocomplete implements IThyOptionParentComponent, OnIni
38
39
  readonly optionSelectionChanges: Observable<ThyOptionSelectionChangeEvent>;
39
40
  /**
40
41
  * 空选项时的文本
41
- * @type string
42
+ * @default 没有任何数据
42
43
  */
43
44
  thyEmptyText: string;
44
45
  /**
@@ -9,6 +9,8 @@ import * as i0 from "@angular/core";
9
9
  */
10
10
  export declare class ThyCalendarHeader implements OnInit {
11
11
  private cdr;
12
+ private dateHelper;
13
+ private locale;
12
14
  className: boolean;
13
15
  /**
14
16
  * 当前选中日期
@@ -18,6 +18,7 @@ export declare class ThyCascader extends TabIndexDisabledControlValueAccessorMix
18
18
  private thyClickDispatcher;
19
19
  private ngZone;
20
20
  thyCascaderService: ThyCascaderService;
21
+ private locale;
21
22
  /**
22
23
  * 选项的实际值的属性名
23
24
  */
@@ -1,6 +1,7 @@
1
- import { OnInit } from '@angular/core';
1
+ import { OnInit, Signal } from '@angular/core';
2
2
  import { ThyPopoverRef } from 'ngx-tethys/popover';
3
3
  import { ThyColorPickerCustomPanel } from './color-picker-custom-panel.component';
4
+ import { ThyColorPickerLocale } from 'ngx-tethys/i18n';
4
5
  import * as i0 from "@angular/core";
5
6
  /**
6
7
  * @internal
@@ -9,6 +10,7 @@ export declare class ThyColorPickerPanel implements OnInit {
9
10
  private thyPopover;
10
11
  private viewContainerRef;
11
12
  private thyPopoverRef;
13
+ locale: Signal<ThyColorPickerLocale>;
12
14
  className: boolean;
13
15
  color: string;
14
16
  colorChange: (color: string) => {};
@@ -13,6 +13,7 @@ export declare class ThyCopyDirective implements OnInit, OnDestroy {
13
13
  private document;
14
14
  tooltipDirective: ThyTooltipDirective;
15
15
  private notifyService;
16
+ private locale;
16
17
  /**
17
18
  * 默认为点击标签,可传复制目标标签
18
19
  */
@@ -1,11 +1,12 @@
1
+ import { Signal } from '@angular/core';
1
2
  import { ThyTheme } from './theme';
2
3
  import * as i0 from "@angular/core";
3
4
  export declare class ThyThemeStore {
4
5
  readonly theme: import("@angular/core").WritableSignal<ThyTheme>;
6
+ readonly isDark: Signal<boolean>;
5
7
  constructor();
6
8
  setTheme(theme: ThyTheme): void;
7
9
  normalizeColor(color: string | string[]): string;
8
- isDark(): boolean;
9
10
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyThemeStore, never>;
10
11
  static ɵprov: i0.ɵɵInjectableDeclaration<ThyThemeStore>;
11
12
  }
@@ -1,17 +1,19 @@
1
1
  import { TabIndexDisabledControlValueAccessorMixin } from 'ngx-tethys/core';
2
2
  import { TinyDate } from 'ngx-tethys/util';
3
3
  import { Subject } from 'rxjs';
4
- import { ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
4
+ import { ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, Signal, SimpleChanges } from '@angular/core';
5
5
  import { ControlValueAccessor } from '@angular/forms';
6
6
  import { CompatibleValue, RangeAdvancedValue } from './inner-types';
7
7
  import { ThyPicker } from './picker.component';
8
8
  import { CompatibleDate, DateEntry, DisabledDateFn, ThyDateRangeEntry, ThyPanelMode, ThyShortcutPosition, CompatiblePresets, ThyDateGranularity, ThyDateChangeEvent } from './standard-types';
9
+ import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
9
10
  import * as i0 from "@angular/core";
10
11
  /**
11
12
  * @private
12
13
  */
13
14
  export declare abstract class AbstractPickerComponent extends TabIndexDisabledControlValueAccessorMixin implements OnInit, OnChanges, OnDestroy, ControlValueAccessor {
14
15
  cdr: ChangeDetectorRef;
16
+ locale: Signal<ThyDatePickerLocale>;
15
17
  thyValue: CompatibleValue | null;
16
18
  _panelMode: ThyPanelMode;
17
19
  private datePickerConfigService;
@@ -1,9 +1,12 @@
1
+ import { Signal } from '@angular/core';
2
+ import { ThyI18nLocale } from 'ngx-tethys/i18n';
1
3
  import * as i0 from "@angular/core";
2
4
  export declare function DATE_HELPER_SERVICE_FACTORY(): DateHelperService;
3
5
  /**
4
6
  * @private
5
7
  */
6
8
  export declare abstract class DateHelperService {
9
+ locale: Signal<ThyI18nLocale>;
7
10
  relyOnDatePipe: boolean;
8
11
  abstract getISOWeek(date: Date): number;
9
12
  abstract format(date: Date, formatStr: string): string;
@@ -1,6 +1,7 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { WeekDayIndex } from 'ngx-tethys/util';
3
3
  import { CompatiblePresets, ThyShortcutPosition } from './standard-types';
4
+ import { ThyI18nService } from 'ngx-tethys/i18n';
4
5
  export interface ThyDatePickerConfig {
5
6
  shortcutPosition: ThyShortcutPosition;
6
7
  shortcutDatePresets: CompatiblePresets;
@@ -9,9 +10,14 @@ export interface ThyDatePickerConfig {
9
10
  weekStartsOn: WeekDayIndex;
10
11
  timestampPrecision: 'seconds' | 'milliseconds';
11
12
  }
13
+ /**
14
+ * @deprecated
15
+ */
12
16
  export declare const DEFAULT_DATE_PICKER_CONFIG: ThyDatePickerConfig;
13
17
  export declare const THY_DATE_PICKER_CONFIG: InjectionToken<ThyDatePickerConfig>;
18
+ export declare function useDatePickerDefaultConfig(): ThyDatePickerConfig;
14
19
  export declare const THY_DATE_PICKER_CONFIG_PROVIDER: {
15
20
  provide: InjectionToken<ThyDatePickerConfig>;
16
- useValue: ThyDatePickerConfig;
21
+ useFactory: typeof useDatePickerDefaultConfig;
22
+ deps: (typeof ThyI18nService)[];
17
23
  };
@@ -1,5 +1,6 @@
1
- import { EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';
1
+ import { EventEmitter, OnInit, OnChanges, SimpleChanges, Signal } from '@angular/core';
2
2
  import { TinyDate } from 'ngx-tethys/util';
3
+ import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
3
4
  import * as i0 from "@angular/core";
4
5
  /**
5
6
  * @private
@@ -15,6 +16,7 @@ export declare class CalendarFooter implements OnInit, OnChanges {
15
16
  readonly showTimePickerChange: EventEmitter<boolean>;
16
17
  isShowTime: boolean;
17
18
  isCanTime: boolean;
19
+ locale: Signal<ThyDatePickerLocale>;
18
20
  ngOnInit(): void;
19
21
  ngOnChanges(changes: SimpleChanges): void;
20
22
  onSelectTime(date: Date): void;
@@ -1,7 +1,8 @@
1
- import { EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
1
+ import { EventEmitter, OnChanges, OnInit, Signal, SimpleChanges } from '@angular/core';
2
2
  import { ThyPanelMode } from '../../standard-types';
3
3
  import { TinyDate } from 'ngx-tethys/util';
4
4
  import { DateHelperService } from '../../date-helper.service';
5
+ import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
5
6
  import * as i0 from "@angular/core";
6
7
  export interface PanelSelector {
7
8
  className: string;
@@ -14,6 +15,7 @@ export interface PanelSelector {
14
15
  */
15
16
  export declare abstract class CalendarHeader implements OnInit, OnChanges {
16
17
  dateHelper: DateHelperService;
18
+ locale: Signal<ThyDatePickerLocale>;
17
19
  showSuperPreBtn: boolean;
18
20
  showSuperNextBtn: boolean;
19
21
  showPreBtn: boolean;
@@ -1,12 +1,14 @@
1
- import { EventEmitter, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
1
+ import { EventEmitter, OnChanges, OnInit, Signal, SimpleChanges, TemplateRef } from '@angular/core';
2
2
  import { SafeAny } from 'ngx-tethys/types';
3
3
  import { FunctionProp, isTemplateRef, TinyDate } from 'ngx-tethys/util';
4
4
  import { DateCell, DateBodyRow } from '../date/types';
5
+ import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
5
6
  import * as i0 from "@angular/core";
6
7
  /**
7
8
  * @private
8
9
  */
9
10
  export declare abstract class CalendarTable implements OnInit, OnChanges {
11
+ locale: Signal<ThyDatePickerLocale>;
10
12
  isTemplateRef: typeof isTemplateRef;
11
13
  headRow: DateCell[];
12
14
  bodyRows: DateBodyRow[];
@@ -1,14 +1,17 @@
1
- import { OnDestroy, OnInit } from '@angular/core';
1
+ import { OnDestroy, OnInit, Signal } from '@angular/core';
2
2
  import { ControlValueAccessor } from '@angular/forms';
3
3
  import { TinyDate } from 'ngx-tethys/util';
4
4
  import { AdvancedSelectableCell, RangeAdvancedValue } from '../../inner-types';
5
5
  import { ThyDateGranularity } from '../../standard-types';
6
+ import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
6
7
  import * as i0 from "@angular/core";
7
8
  /**
8
9
  * @private
9
10
  */
10
11
  export declare class DateCarousel implements OnInit, ControlValueAccessor, OnDestroy {
11
12
  private cdr;
13
+ private dateHelper;
14
+ locale: Signal<ThyDatePickerLocale>;
12
15
  className: string;
13
16
  activeDate: TinyDate;
14
17
  set defaultValue(value: RangeAdvancedValue);
@@ -1,7 +1,8 @@
1
1
  import { FunctionProp, TinyDate } from 'ngx-tethys/util';
2
- import { EventEmitter, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
2
+ import { EventEmitter, OnChanges, OnInit, SimpleChanges, TemplateRef, Signal } from '@angular/core';
3
3
  import { CompatibleValue, DatePickerFlexibleTab, RangeAdvancedValue, RangePartType } from '../../inner-types';
4
4
  import { CompatibleDate, CompatiblePresets, DisabledDateFn, SupportTimeOptions, ThyDateChangeEvent, ThyDateGranularity, ThyPanelMode, ThyShortcutPosition, ThyShortcutPreset } from '../../standard-types';
5
+ import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
5
6
  import * as i0 from "@angular/core";
6
7
  /**
7
8
  * @private
@@ -9,6 +10,7 @@ import * as i0 from "@angular/core";
9
10
  export declare class DatePopup implements OnChanges, OnInit {
10
11
  private cdr;
11
12
  private datePickerConfigService;
13
+ locale: Signal<ThyDatePickerLocale>;
12
14
  isRange: boolean;
13
15
  showWeek: boolean;
14
16
  format: string;
@@ -1,13 +1,15 @@
1
- import { EventEmitter, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';
1
+ import { EventEmitter, OnChanges, Signal, SimpleChanges, TemplateRef } from '@angular/core';
2
2
  import { FunctionProp, TinyDate } from 'ngx-tethys/util';
3
3
  import { RangePartType } from '../../inner-types';
4
4
  import { DisabledDateFn, ThyPanelMode } from '../../standard-types';
5
+ import { ThyDatePickerLocale } from 'ngx-tethys/i18n';
5
6
  import * as i0 from "@angular/core";
6
7
  /**
7
8
  * @private
8
9
  */
9
10
  export declare class InnerPopup implements OnChanges {
10
11
  private dateHelper;
12
+ locale: Signal<ThyDatePickerLocale>;
11
13
  className: boolean;
12
14
  _showDateRangeInput: boolean;
13
15
  showWeek: boolean;
@@ -10,6 +10,7 @@ import * as i0 from "@angular/core";
10
10
  export declare class ThyDateRange implements OnInit, ControlValueAccessor {
11
11
  private thyPopover;
12
12
  private cdr;
13
+ private locale;
13
14
  /**
14
15
  * 自定义可选值列表项
15
16
  * @type DateRangeItemInfo[]
@@ -27,6 +28,7 @@ export declare class ThyDateRange implements OnInit, ControlValueAccessor {
27
28
  thyDisabledSwitch: boolean;
28
29
  /**
29
30
  * 自定义日期选择的展示文字
31
+ * @default 自定义
30
32
  */
31
33
  thyCustomTextValue: string;
32
34
  /**
@@ -6,6 +6,7 @@ import * as i0 from "@angular/core";
6
6
  */
7
7
  export declare class OptionalDateRanges implements OnInit {
8
8
  private thyPopover;
9
+ private locale;
9
10
  hiddenMenu: boolean;
10
11
  optionalDateRanges: DateRangeItemInfo[];
11
12
  customValue: string;
@@ -9,6 +9,7 @@ export declare class ThyConfirm implements OnInit, OnDestroy {
9
9
  private dialogRef;
10
10
  private changeDetectorRef;
11
11
  private defaultConfig;
12
+ private locale;
12
13
  loading: boolean;
13
14
  options: ThyConfirmConfig;
14
15
  title: string;
@@ -1,5 +1,6 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { ThyFormGroupFooterAlign } from 'ngx-tethys/form';
3
+ import { ThyI18nService } from 'ngx-tethys/i18n';
3
4
  import { Observable } from 'rxjs';
4
5
  /**
5
6
  * 确认框配置
@@ -45,6 +46,9 @@ export interface ThyConfirmConfig {
45
46
  onCancel?: () => void;
46
47
  }
47
48
  export declare const THY_CONFIRM_DEFAULT_OPTIONS: InjectionToken<ThyConfirmConfig>;
49
+ /**
50
+ * @deprecated
51
+ */
48
52
  export declare const THY_CONFIRM_DEFAULT_OPTIONS_VALUE: {
49
53
  title: string;
50
54
  okText: string;
@@ -52,13 +56,16 @@ export declare const THY_CONFIRM_DEFAULT_OPTIONS_VALUE: {
52
56
  cancelText: string;
53
57
  footerAlign: string;
54
58
  };
59
+ declare function useConfirmDefaultOptions(): {
60
+ title: string;
61
+ okText: string;
62
+ okType: string;
63
+ cancelText: string;
64
+ footerAlign: string;
65
+ };
55
66
  export declare const THY_CONFIRM_DEFAULT_OPTIONS_PROVIDER: {
56
67
  provide: InjectionToken<ThyConfirmConfig>;
57
- useValue: {
58
- title: string;
59
- okText: string;
60
- okType: string;
61
- cancelText: string;
62
- footerAlign: string;
63
- };
68
+ useFactory: typeof useConfirmDefaultOptions;
69
+ deps: (typeof ThyI18nService)[];
64
70
  };
71
+ export {};
@@ -16,24 +16,30 @@ export declare class ThyEmpty implements OnInit, AfterViewInit, OnChanges {
16
16
  private elementRef;
17
17
  private ngZone;
18
18
  private sanitizer;
19
+ private locale;
19
20
  /**
20
21
  * 显示文本提示信息。同时传入 thyMessage,thyTranslationKey,thyEntityName,thyEntityNameTranslateKey 时优先级最高
22
+ * @default 暂无数据
21
23
  */
22
24
  thyMessage: string;
23
25
  /**
24
- * 显示文本提示信息多语言 Key。同时传入 thyTranslationKey,thyEntityName,thyEntityNameTranslateKey 时优先级最高
26
+ * 已废弃。显示文本提示信息多语言 Key。同时传入 thyTranslationKey,thyEntityName,thyEntityNameTranslateKey 时优先级最高
27
+ * @deprecated
25
28
  */
26
29
  thyTranslationKey: string;
27
30
  /**
28
- * 显示文本提示信息多语言 Key 的 Values。传入 thyTranslationKey 后,传入这个才会生效
31
+ * 已废弃。显示文本提示信息多语言 Key 的 Values。传入 thyTranslationKey 后,传入这个才会生效
32
+ * @deprecated
29
33
  */
30
34
  thyTranslationValues: any;
31
35
  /**
32
- * 显示默认提示信息,替换默认提示信息的目标对象,比如:没有 {thyEntityName}。同时传入 thyEntityName,thyEntityNameTranslateKey 时优先级较高
36
+ * 已废弃。显示默认提示信息,替换默认提示信息的目标对象,比如:没有 {thyEntityName}。同时传入 thyEntityName,thyEntityNameTranslateKey 时优先级较高
37
+ * @deprecated
33
38
  */
34
39
  thyEntityName: string;
35
40
  /**
36
- * thyEntityName 的多语言 Key。thyMessage,thyTranslationKey,thyEntityName 均未传入时才会生效
41
+ * 已废弃。thyEntityName 的多语言 Key。thyMessage,thyTranslationKey,thyEntityName 均未传入时才会生效
42
+ * @deprecated
37
43
  */
38
44
  thyEntityNameTranslateKey: string;
39
45
  /**
@@ -87,9 +93,8 @@ export declare class ThyEmpty implements OnInit, AfterViewInit, OnChanges {
87
93
  setPresetSvg(icon: string): void;
88
94
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyEmpty, never>;
89
95
  static ɵcmp: i0.ɵɵComponentDeclaration<ThyEmpty, "thy-empty", never, { "thyMessage": { "alias": "thyMessage"; "required": false; }; "thyTranslationKey": { "alias": "thyTranslationKey"; "required": false; }; "thyTranslationValues": { "alias": "thyTranslationValues"; "required": false; }; "thyEntityName": { "alias": "thyEntityName"; "required": false; }; "thyEntityNameTranslateKey": { "alias": "thyEntityNameTranslateKey"; "required": false; }; "thyIconName": { "alias": "thyIconName"; "required": false; }; "thySize": { "alias": "thySize"; "required": false; }; "thyMarginTop": { "alias": "thyMarginTop"; "required": false; }; "thyTopAuto": { "alias": "thyTopAuto"; "required": false; }; "thyContainer": { "alias": "thyContainer"; "required": false; }; "thyImageUrl": { "alias": "thyImageUrl"; "required": false; }; "thyImageLoading": { "alias": "thyImageLoading"; "required": false; }; "thyImageFetchPriority": { "alias": "thyImageFetchPriority"; "required": false; }; "thyDescription": { "alias": "thyDescription"; "required": false; }; }, {}, ["extraTemplateRef"], never, true, never>;
90
- static ngAcceptInputType_thyTopAuto:
91
- /**
92
- * 显示文本提示信息多语言 Key。同时传入 thyTranslationKey,thyEntityName,thyEntityNameTranslateKey 时优先级最高
93
- */
94
- boolean | string | number;
96
+ static ngAcceptInputType_thyTopAuto: /**
97
+ * 显示文本提示信息。同时传入 thyMessage,thyTranslationKey,thyEntityName,thyEntityNameTranslateKey 时优先级最高
98
+ * @default 暂无数据
99
+ */ boolean | string | number;
95
100
  }
@@ -1,4 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
+ /**
3
+ * @deprecated
4
+ */
2
5
  export declare class ThyEmptyConfig {
3
6
  noResultTranslateKey: string;
4
7
  noResultWithTargetTranslateKey: string;
@@ -7,6 +7,7 @@ import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
7
7
  import { ThyEmpty } from 'ngx-tethys/empty';
8
8
  import { NgClass } from '@angular/common';
9
9
  import { coerceBooleanProperty } from 'ngx-tethys/util';
10
+ import { injectLocale } from 'ngx-tethys/i18n';
10
11
  import * as i0 from "@angular/core";
11
12
  /**
12
13
  * 自动完成组件
@@ -17,6 +18,7 @@ export class ThyAutocomplete {
17
18
  this.ngZone = inject(NgZone);
18
19
  this.changeDetectorRef = inject(ChangeDetectorRef);
19
20
  this.ngUnsubscribe$ = new Subject();
21
+ this.locale = injectLocale('autocomplete');
20
22
  this.isMultiple = false;
21
23
  this.mode = '';
22
24
  this.isEmptyOptions = false;
@@ -29,9 +31,9 @@ export class ThyAutocomplete {
29
31
  });
30
32
  /**
31
33
  * 空选项时的文本
32
- * @type string
34
+ * @default 没有任何数据
33
35
  */
34
- this.thyEmptyText = '没有任何数据';
36
+ this.thyEmptyText = this.locale().empty;
35
37
  /**
36
38
  * 被选中时调用,参数包含选中项的 value 值
37
39
  * @type EventEmitter<ThyOptionSelectionChangeEvent>
@@ -175,4 +177,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
175
177
  }], thyOptionActivated: [{
176
178
  type: Output
177
179
  }] } });
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFHTixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFDSCwyQkFBMkIsRUFFM0IsU0FBUyxFQUNULDZCQUE2QixFQUM3QiwyQkFBMkIsRUFDOUIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVd4RDs7O0dBR0c7QUFjSCxNQUFNLE9BQU8sZUFBZTtJQWI1QjtRQWNZLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFD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QURYLEtBQUs7Z0JBUXVDLHdCQUF3QjtzQkFBcEUsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRTtnQkFNakMsaUJBQWlCO3NCQUExQixNQUFNO2dCQU1ZLFNBQVM7c0JBQTNCLE1BQU07Z0JBTVksU0FBUztzQkFBM0IsTUFBTTtnQkFPWSxrQkFBa0I7c0JBQXBDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgSW5wdXQsXG4gICAgRWxlbWVudFJlZixcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWZlciwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBUSFlfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQsXG4gICAgSVRoeU9wdGlvblBhcmVudENvbXBvbmVudCxcbiAgICBUaHlPcHRpb24sXG4gICAgVGh5T3B0aW9uU2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gICAgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlXG59IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgVGh5RW1wdHkgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcblxuLyoqIEV2ZW50IG9iamVjdCB0aGF0IGlzIGVtaXR0ZWQgd2hlbiBhbiBhdXRvY29tcGxldGUgb3B0aW9uIGlzIGFjdGl2YXRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGh5QXV0b2NvbXBsZXRlQWN0aXZhdGVkRXZlbnQge1xuICAgIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGF1dG9jb21wbGV0ZSBwYW5lbCB0aGF0IGVtaXR0ZWQgdGhlIGV2ZW50LiAqL1xuICAgIHNvdXJjZTogVGh5QXV0b2NvbXBsZXRlO1xuXG4gICAgLyoqIE9wdGlvbiB0aGF0IHdhcyBzZWxlY3RlZC4gKi9cbiAgICBvcHRpb246IFRoeU9wdGlvbiB8IG51bGw7XG59XG5cbi8qKlxuICog6Ieq5Yqo5a6M5oiQ57uE5Lu2XG4gKiBAbmFtZSB0aHktYXV0b2NvbXBsZXRlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LWF1dG9jb21wbGV0ZScsXG4gICAgdGVtcGxhdGVVcmw6ICdhdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSFlfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGh5QXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1RoeVN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSwgTmdDbGFzcywgVGh5RW1wdHldXG59KVxuZXhwb3J0IGNsYXNzIFRoeUF1dG9jb21wbGV0ZSBpbXBsZW1lbnRzIElUaHlPcHRpb25QYXJlbnRDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBkcm9wRG93bkNsYXNzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcblxuICAgIGlzTXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIG1vZGUgPSAnJztcblxuICAgIGlzRW1wdHlPcHRpb25zID0gZmFsc2U7XG5cbiAgICBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VGh5T3B0aW9uPjtcblxuICAgIGlzT3BlbmVkID0gZmFsc2U7XG5cbiAgICAvKiogTWFuYWdlcyBhY3RpdmUgaXRlbSBpbiBvcHRpb24gbGlzdCBiYXNlZCBvbiBrZXkgZXZlbnRzLiAqL1xuICAgIGtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPFRoeU9wdGlvbj47XG5cbiAgICBAVmlld0NoaWxkKCdjb250ZW50VGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGNvbnRlbnRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8vIHNjcm9sbCBlbGVtZW50IGNvbnRhaW5lclxuICAgIEBWaWV3Q2hpbGQoJ3BhbmVsJylcbiAgICBvcHRpb25zQ29udGFpbmVyOiBFbGVtZW50UmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGh5T3B0aW9uLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG9wdGlvbnM6IFF1ZXJ5TGlzdDxUaHlPcHRpb24+O1xuXG4gICAgcmVhZG9ubHkgb3B0aW9uU2VsZWN0aW9uQ2hhbmdlczogT2JzZXJ2YWJsZTxUaHlPcHRpb25TZWxlY3Rpb25DaGFuZ2VFdmVudD4gPSBkZWZlcigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZSguLi50aGlzLm9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0aW9uQ2hhbmdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcylcbiAgICAgICAgKTtcbiAgICB9KSBhcyBPYnNlcnZhYmxlPFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50PjtcblxuICAgIC8qKlxuICAgICAqIOepuumAiemhueaXtueahOaWh+acrFxuICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGh5RW1wdHlUZXh0ID0gJ+ayoeacieS7u+S9leaVsOaNric7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbpu5jorqTpq5jkuq7nrKzkuIDkuKrpgInpoblcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlBdXRvQWN0aXZlRmlyc3RPcHRpb246IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDooqvpgInkuK3ml7bosIPnlKjvvIzlj4LmlbDljIXlkKvpgInkuK3pobnnmoQgdmFsdWUg5YC8XG4gICAgICogQHR5cGUgRXZlbnRFbWl0dGVyPFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50PlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPcHRpb25TZWxlY3RlZDogRXZlbnRFbWl0dGVyPFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5T3B0aW9uU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlj6ror7vvvIzlsZXlvIDkuIvmi4noj5zljZXnmoTlm57osINcbiAgICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8dm9pZD5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGh5T3BlbmVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlj6ror7vvvIzlhbPpl63kuIvmi4noj5zljZXnmoTlm57osINcbiAgICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8dm9pZD5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGh5Q2xvc2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbmV2ZXIgYW4gb3B0aW9uIGlzIGFjdGl2YXRlZCB1c2luZyB0aGUga2V5Ym9hcmQuICovXG4gICAgLyoqXG4gICAgICog5Y+q6K+777yMb3B0aW9uIOa/gOa0u+eKtuaAgeWPmOWMluaXtu+8jOiwg+eUqOatpOWHveaVsFxuICAgICAqIEB0eXBlIEV2ZW50RW1pdHRlcjxUaHlBdXRvY29tcGxldGVBY3RpdmF0ZWRFdmVudD5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGh5T3B0aW9uQWN0aXZhdGVkOiBFdmVudEVtaXR0ZXI8VGh5QXV0b2NvbXBsZXRlQWN0aXZhdGVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlBdXRvY29tcGxldGVBY3RpdmF0ZWRFdmVudD4oKTtcblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldERyb3BEb3duQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0VtcHR5T3B0aW9ucyA9IHRoaXMub3B0aW9ucy5sZW5ndGggPD0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pbml0S2V5TWFuYWdlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0S2V5TWFuYWdlcigpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlZE9yRGVzdHJveWVkJCA9IG1lcmdlKHRoaXMub3B0aW9ucy5jaGFuZ2VzLCB0aGlzLm5nVW5zdWJzY3JpYmUkKTtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPFRoeU9wdGlvbj4odGhpcy5vcHRpb25zKS53aXRoV3JhcCgpO1xuICAgICAgICB0aGlzLmtleU1hbmFnZXIuY2hhbmdlLnBpcGUodGFrZVVudGlsKGNoYW5nZWRPckRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoaW5kZXggPT4ge1xuICAgICAgICAgICAgdGhpcy50aHlPcHRpb25BY3RpdmF0ZWQuZW1pdCh7IHNvdXJjZTogdGhpcywgb3B0aW9uOiB0aGlzLm9wdGlvbnMudG9BcnJheSgpW2luZGV4XSB8fCBudWxsIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuKCkge1xuICAgICAgICB0aGlzLmlzT3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy50aHlPcGVuZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGh5Q2xvc2VkLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0T3B0aW9ucygpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlZE9yRGVzdHJveWVkJCA9IG1lcmdlKHRoaXMub3B0aW9ucy5jaGFuZ2VzLCB0aGlzLm5nVW5zdWJzY3JpYmUkKTtcblxuICAgICAgICB0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMucGlwZSh0YWtlVW50aWwoY2hhbmdlZE9yRGVzdHJveWVkJCkpLnN1YnNjcmliZSgoZXZlbnQ6IFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0KGV2ZW50Lm9wdGlvbiwgZXZlbnQuaXNVc2VySW5wdXQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluc3RhbmNlU2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUaHlPcHRpb24+KHRoaXMuaXNNdWx0aXBsZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGV2ZW50LmFkZGVkLmZvckVhY2gob3B0aW9uID0+IG9wdGlvbi5zZWxlY3QoKSk7XG4gICAgICAgICAgICBldmVudC5yZW1vdmVkLmZvckVhY2gob3B0aW9uID0+IG9wdGlvbi5kZXNlbGVjdCgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNlbGVjdChvcHRpb246IFRoeU9wdGlvbiwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQob3B0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9uLnRoeVZhbHVlID09IG51bGwgJiYgIXRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgb3B0aW9uLmRlc2VsZWN0KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAod2FzU2VsZWN0ZWQgIT09IG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA/IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KG9wdGlvbikgOiB0aGlzLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KG9wdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1VzZXJJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKG9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod2FzU2VsZWN0ZWQgIT09IHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnRoeU9wdGlvblNlbGVjdGVkLmVtaXQobmV3IFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50KG9wdGlvbiwgZmFsc2UpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RHJvcERvd25DbGFzcygpIHtcbiAgICAgICAgbGV0IG1vZGVDbGFzcyA9ICcnO1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICBtb2RlQ2xhc3MgPSBgdGh5LXNlbGVjdC1kcm9wZG93bi0ke3RoaXMubW9kZX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZUNsYXNzID0gYHRoeS1zZWxlY3QtZHJvcGRvd24tc2luZ2xlYDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRyb3BEb3duQ2xhc3MgPSB7XG4gICAgICAgICAgICBbYHRoeS1zZWxlY3QtZHJvcGRvd25gXTogdHJ1ZSxcbiAgICAgICAgICAgIFttb2RlQ2xhc3NdOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG4gIDxkaXYgdGh5U3RvcFByb3BhZ2F0aW9uIFtuZ0NsYXNzXT1cImRyb3BEb3duQ2xhc3NcIj5cbiAgICA8ZGl2ICNwYW5lbCBjbGFzcz1cInRoeS1zZWxlY3QtZHJvcGRvd24tb3B0aW9uc1wiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgQGlmIChpc0VtcHR5T3B0aW9ucykge1xuICAgICAgICA8dGh5LWVtcHR5IFt0aHlNZXNzYWdlXT1cInRoeUVtcHR5VGV4dFwiPjwvdGh5LWVtcHR5PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFHTixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFDSCwyQkFBMkIsRUFFM0IsU0FBUyxFQUNULDZCQUE2QixFQUM3QiwyQkFBMkIsRUFDOUIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQXlCLE1BQU0saUJBQWlCLENBQUM7O0FBV3RFOzs7R0FHRztBQWNILE1BQU0sT0FBTyxl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QyxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxPQUFPO2dCQU1pQyxPQUFPO3NCQUF6RCxlQUFlO3VCQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBZ0J4QyxZQUFZO3NCQUFwQixLQUFLO2dCQU91Qyx3QkFBd0I7c0JBQXBFLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUU7Z0JBTWpDLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNWSxTQUFTO3NCQUEzQixNQUFNO2dCQU1ZLFNBQVM7c0JBQTNCLE1BQU07Z0JBT1ksa0JBQWtCO3NCQUFwQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIElucHV0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIFNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlZmVyLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQge1xuICAgIFRIWV9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCxcbiAgICBJVGh5T3B0aW9uUGFyZW50Q29tcG9uZW50LFxuICAgIFRoeU9wdGlvbixcbiAgICBUaHlPcHRpb25TZWxlY3Rpb25DaGFuZ2VFdmVudCxcbiAgICBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmVcbn0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBUaHlFbXB0eSB9IGZyb20gJ25neC10ZXRoeXMvZW1wdHknO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgaW5qZWN0TG9jYWxlLCBUaHlBdXRvQ29tcGxldGVMb2NhbGUgfSBmcm9tICduZ3gtdGV0aHlzL2kxOG4nO1xuXG4vKiogRXZlbnQgb2JqZWN0IHRoYXQgaXMgZW1pdHRlZCB3aGVuIGFuIGF1dG9jb21wbGV0ZSBvcHRpb24gaXMgYWN0aXZhdGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaHlBdXRvY29tcGxldGVBY3RpdmF0ZWRFdmVudCB7XG4gICAgLyoqIFJlZmVyZW5jZSB0byB0aGUgYXV0b2NvbXBsZXRlIHBhbmVsIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuICovXG4gICAgc291cmNlOiBUaHlBdXRvY29tcGxldGU7XG5cbiAgICAvKiogT3B0aW9uIHRoYXQgd2FzIHNlbGVjdGVkLiAqL1xuICAgIG9wdGlvbjogVGh5T3B0aW9uIHwgbnVsbDtcbn1cblxuLyoqXG4gKiDoh6rliqjlrozmiJDnu4Tku7ZcbiAqIEBuYW1lIHRoeS1hdXRvY29tcGxldGVcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktYXV0b2NvbXBsZXRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRIWV9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUaHlBdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlLCBOZ0NsYXNzLCBUaHlFbXB0eV1cbn0pXG5leHBvcnQgY2xhc3MgVGh5QXV0b2NvbXBsZXRlIGltcGxlbWVudHMgSVRoeU9wdGlvblBhcmVudENvbXBvbmVudCwgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICBwcml2YXRlIG5nVW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgbG9jYWxlOiBTaWduYWw8VGh5QXV0b0NvbXBsZXRlTG9jYWxlPiA9IGluamVjdExvY2FsZSgnYXV0b2NvbXBsZXRlJyk7XG5cbiAgICBkcm9wRG93bkNsYXNzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcblxuICAgIGlzTXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIG1vZGUgPSAnJztcblxuICAgIGlzRW1wdHlPcHRpb25zID0gZmFsc2U7XG5cbiAgICBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VGh5T3B0aW9uPjtcblxuICAgIGlzT3BlbmVkID0gZmFsc2U7XG5cbiAgICAvKiogTWFuYWdlcyBhY3RpdmUgaXRlbSBpbiBvcHRpb24gbGlzdCBiYXNlZCBvbiBrZXkgZXZlbnRzLiAqL1xuICAgIGtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPFRoeU9wdGlvbj47XG5cbiAgICBAVmlld0NoaWxkKCdjb250ZW50VGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGNvbnRlbnRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8vIHNjcm9sbCBlbGVtZW50IGNvbnRhaW5lclxuICAgIEBWaWV3Q2hpbGQoJ3BhbmVsJylcbiAgICBvcHRpb25zQ29udGFpbmVyOiBFbGVtZW50UmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGh5T3B0aW9uLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG9wdGlvbnM6IFF1ZXJ5TGlzdDxUaHlPcHRpb24+O1xuXG4gICAgcmVhZG9ubHkgb3B0aW9uU2VsZWN0aW9uQ2hhbmdlczogT2JzZXJ2YWJsZTxUaHlPcHRpb25TZWxlY3Rpb25DaGFuZ2VFdmVudD4gPSBkZWZlcigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZSguLi50aGlzLm9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0aW9uQ2hhbmdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcylcbiAgICAgICAgKTtcbiAgICB9KSBhcyBPYnNlcnZhYmxlPFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50PjtcblxuICAgIC8qKlxuICAgICAqIOepuumAiemhueaXtueahOaWh+acrFxuICAgICAqIEBkZWZhdWx0IOayoeacieS7u+S9leaVsOaNrlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUVtcHR5VGV4dCA9IHRoaXMubG9jYWxlKCkuZW1wdHk7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbpu5jorqTpq5jkuq7nrKzkuIDkuKrpgInpoblcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlBdXRvQWN0aXZlRmlyc3RPcHRpb246IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDooqvpgInkuK3ml7bosIPnlKjvvIzlj4LmlbDljIXlkKvpgInkuK3pobnnmoQgdmFsdWUg5YC8XG4gICAgICogQHR5cGUgRXZlbnRFbWl0dGVyPFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50PlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPcHRpb25TZWxlY3RlZDogRXZlbnRFbWl0dGVyPFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5T3B0aW9uU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlj6ror7vvvIzlsZXlvIDkuIvmi4noj5zljZXnmoTlm57osINcbiAgICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8dm9pZD5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGh5T3BlbmVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDlj6ror7vvvIzlhbPpl63kuIvmi4noj5zljZXnmoTlm57osINcbiAgICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8dm9pZD5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGh5Q2xvc2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbmV2ZXIgYW4gb3B0aW9uIGlzIGFjdGl2YXRlZCB1c2luZyB0aGUga2V5Ym9hcmQuICovXG4gICAgLyoqXG4gICAgICog5Y+q6K+777yMb3B0aW9uIOa/gOa0u+eKtuaAgeWPmOWMluaXtu+8jOiwg+eUqOatpOWHveaVsFxuICAgICAqIEB0eXBlIEV2ZW50RW1pdHRlcjxUaHlBdXRvY29tcGxldGVBY3RpdmF0ZWRFdmVudD5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdGh5T3B0aW9uQWN0aXZhdGVkOiBFdmVudEVtaXR0ZXI8VGh5QXV0b2NvbXBsZXRlQWN0aXZhdGVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlBdXRvY29tcGxldGVBY3RpdmF0ZWRFdmVudD4oKTtcblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldERyb3BEb3duQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0VtcHR5T3B0aW9ucyA9IHRoaXMub3B0aW9ucy5sZW5ndGggPD0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pbml0S2V5TWFuYWdlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0S2V5TWFuYWdlcigpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlZE9yRGVzdHJveWVkJCA9IG1lcmdlKHRoaXMub3B0aW9ucy5jaGFuZ2VzLCB0aGlzLm5nVW5zdWJzY3JpYmUkKTtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPFRoeU9wdGlvbj4odGhpcy5vcHRpb25zKS53aXRoV3JhcCgpO1xuICAgICAgICB0aGlzLmtleU1hbmFnZXIuY2hhbmdlLnBpcGUodGFrZVVudGlsKGNoYW5nZWRPckRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoaW5kZXggPT4ge1xuICAgICAgICAgICAgdGhpcy50aHlPcHRpb25BY3RpdmF0ZWQuZW1pdCh7IHNvdXJjZTogdGhpcywgb3B0aW9uOiB0aGlzLm9wdGlvbnMudG9BcnJheSgpW2luZGV4XSB8fCBudWxsIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuKCkge1xuICAgICAgICB0aGlzLmlzT3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy50aHlPcGVuZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGh5Q2xvc2VkLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0T3B0aW9ucygpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlZE9yRGVzdHJveWVkJCA9IG1lcmdlKHRoaXMub3B0aW9ucy5jaGFuZ2VzLCB0aGlzLm5nVW5zdWJzY3JpYmUkKTtcblxuICAgICAgICB0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMucGlwZSh0YWtlVW50aWwoY2hhbmdlZE9yRGVzdHJveWVkJCkpLnN1YnNjcmliZSgoZXZlbnQ6IFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0KGV2ZW50Lm9wdGlvbiwgZXZlbnQuaXNVc2VySW5wdXQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluc3RhbmNlU2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUaHlPcHRpb24+KHRoaXMuaXNNdWx0aXBsZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGV2ZW50LmFkZGVkLmZvckVhY2gob3B0aW9uID0+IG9wdGlvbi5zZWxlY3QoKSk7XG4gICAgICAgICAgICBldmVudC5yZW1vdmVkLmZvckVhY2gob3B0aW9uID0+IG9wdGlvbi5kZXNlbGVjdCgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNlbGVjdChvcHRpb246IFRoeU9wdGlvbiwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQob3B0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9uLnRoeVZhbHVlID09IG51bGwgJiYgIXRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgb3B0aW9uLmRlc2VsZWN0KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAod2FzU2VsZWN0ZWQgIT09IG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA/IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KG9wdGlvbikgOiB0aGlzLnNlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KG9wdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1VzZXJJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKG9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod2FzU2VsZWN0ZWQgIT09IHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChvcHRpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnRoeU9wdGlvblNlbGVjdGVkLmVtaXQobmV3IFRoeU9wdGlvblNlbGVjdGlvbkNoYW5nZUV2ZW50KG9wdGlvbiwgZmFsc2UpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RHJvcERvd25DbGFzcygpIHtcbiAgICAgICAgbGV0IG1vZGVDbGFzcyA9ICcnO1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICBtb2RlQ2xhc3MgPSBgdGh5LXNlbGVjdC1kcm9wZG93bi0ke3RoaXMubW9kZX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZUNsYXNzID0gYHRoeS1zZWxlY3QtZHJvcGRvd24tc2luZ2xlYDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRyb3BEb3duQ2xhc3MgPSB7XG4gICAgICAgICAgICBbYHRoeS1zZWxlY3QtZHJvcGRvd25gXTogdHJ1ZSxcbiAgICAgICAgICAgIFttb2RlQ2xhc3NdOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG4gIDxkaXYgdGh5U3RvcFByb3BhZ2F0aW9uIFtuZ0NsYXNzXT1cImRyb3BEb3duQ2xhc3NcIj5cbiAgICA8ZGl2ICNwYW5lbCBjbGFzcz1cInRoeS1zZWxlY3QtZHJvcGRvd24tb3B0aW9uc1wiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgQGlmIChpc0VtcHR5T3B0aW9ucykge1xuICAgICAgICA8dGh5LWVtcHR5IFt0aHlNZXNzYWdlXT1cInRoeUVtcHR5VGV4dFwiPjwvdGh5LWVtcHR5PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=