@taiga-ui/core 3.17.0 → 3.18.0

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 (99) hide show
  1. package/bundles/taiga-ui-core-abstract.umd.js +1 -0
  2. package/bundles/taiga-ui-core-abstract.umd.js.map +1 -1
  3. package/bundles/taiga-ui-core-components-dialog.umd.js +189 -167
  4. package/bundles/taiga-ui-core-components-dialog.umd.js.map +1 -1
  5. package/bundles/taiga-ui-core-components-notification.umd.js +2 -2
  6. package/bundles/taiga-ui-core-components-notification.umd.js.map +1 -1
  7. package/bundles/taiga-ui-core-components-primitive-textfield.umd.js +1 -1
  8. package/bundles/taiga-ui-core-components-primitive-textfield.umd.js.map +1 -1
  9. package/bundles/taiga-ui-core-components-root.umd.js +1 -1
  10. package/bundles/taiga-ui-core-components-svg.umd.js +100 -20
  11. package/bundles/taiga-ui-core-components-svg.umd.js.map +1 -1
  12. package/bundles/taiga-ui-core-components-tooltip.umd.js +31 -13
  13. package/bundles/taiga-ui-core-components-tooltip.umd.js.map +1 -1
  14. package/bundles/taiga-ui-core-directives-dropdown.umd.js +45 -25
  15. package/bundles/taiga-ui-core-directives-dropdown.umd.js.map +1 -1
  16. package/bundles/taiga-ui-core-directives-hint.umd.js +67 -63
  17. package/bundles/taiga-ui-core-directives-hint.umd.js.map +1 -1
  18. package/bundles/taiga-ui-core-tokens.umd.js +39 -1
  19. package/bundles/taiga-ui-core-tokens.umd.js.map +1 -1
  20. package/components/dialog/dialog-close.service.d.ts +15 -0
  21. package/components/dialog/dialog.component.d.ts +5 -4
  22. package/components/dialog/dialog.tokens.d.ts +2 -0
  23. package/components/dialog/index.d.ts +1 -1
  24. package/components/notification/notification.component.d.ts +2 -2
  25. package/components/svg/deprecated-icons.d.ts +1 -0
  26. package/components/svg/index.d.ts +2 -0
  27. package/components/svg/svg-options.d.ts +14 -0
  28. package/components/svg/svg.component.d.ts +5 -7
  29. package/components/tooltip/tooltip.component.d.ts +2 -2
  30. package/components/tooltip/tooltip.module.d.ts +5 -4
  31. package/directives/dropdown/dropdown-hover-options.directive.d.ts +9 -0
  32. package/directives/dropdown/dropdown-hover.directive.d.ts +3 -1
  33. package/directives/dropdown/dropdown-position-sided.directive.d.ts +2 -2
  34. package/directives/dropdown/dropdown-position.directive.d.ts +2 -2
  35. package/directives/dropdown/index.d.ts +1 -0
  36. package/directives/hint/hint-hover.directive.d.ts +4 -2
  37. package/directives/hint/hint-position.directive.d.ts +2 -2
  38. package/esm2015/abstract/rect-accessor.js +2 -1
  39. package/esm2015/components/dialog/dialog-close.service.js +51 -0
  40. package/esm2015/components/dialog/dialog.component.js +26 -10
  41. package/esm2015/components/dialog/dialog.tokens.js +5 -1
  42. package/esm2015/components/dialog/index.js +2 -2
  43. package/esm2015/components/notification/notification.component.js +3 -3
  44. package/esm2015/components/primitive-textfield/primitive-textfield.component.js +2 -2
  45. package/esm2015/components/root/root.component.js +1 -1
  46. package/esm2015/components/svg/deprecated-icons.js +59 -0
  47. package/esm2015/components/svg/index.js +3 -1
  48. package/esm2015/components/svg/svg-options.js +29 -0
  49. package/esm2015/components/svg/svg.component.js +13 -18
  50. package/esm2015/components/tooltip/tooltip.component.js +13 -13
  51. package/esm2015/components/tooltip/tooltip.module.js +21 -4
  52. package/esm2015/directives/dropdown/dropdown-hover-options.directive.js +14 -0
  53. package/esm2015/directives/dropdown/dropdown-hover.directive.js +10 -5
  54. package/esm2015/directives/dropdown/dropdown-position-sided.directive.js +12 -12
  55. package/esm2015/directives/dropdown/dropdown-position.directive.js +11 -11
  56. package/esm2015/directives/dropdown/index.js +2 -1
  57. package/esm2015/directives/hint/hint-hover.directive.js +13 -10
  58. package/esm2015/directives/hint/hint-options.directive.js +2 -2
  59. package/esm2015/directives/hint/hint-position.directive.js +12 -11
  60. package/esm2015/directives/hint/hint.component.js +3 -2
  61. package/esm2015/interfaces/dialog-options.js +1 -1
  62. package/esm2015/tokens/icon-place.js +5 -2
  63. package/esm2015/tokens/icons-path.js +4 -1
  64. package/esm2015/tokens/index.js +2 -1
  65. package/esm2015/tokens/svg-content-processor.js +4 -1
  66. package/esm2015/tokens/svg-src-processor.js +4 -1
  67. package/esm2015/tokens/viewport.js +26 -0
  68. package/fesm2015/taiga-ui-core-abstract.js +1 -0
  69. package/fesm2015/taiga-ui-core-abstract.js.map +1 -1
  70. package/fesm2015/taiga-ui-core-components-dialog.js +85 -69
  71. package/fesm2015/taiga-ui-core-components-dialog.js.map +1 -1
  72. package/fesm2015/taiga-ui-core-components-notification.js +2 -2
  73. package/fesm2015/taiga-ui-core-components-notification.js.map +1 -1
  74. package/fesm2015/taiga-ui-core-components-primitive-textfield.js +1 -1
  75. package/fesm2015/taiga-ui-core-components-primitive-textfield.js.map +1 -1
  76. package/fesm2015/taiga-ui-core-components-root.js +1 -1
  77. package/fesm2015/taiga-ui-core-components-svg.js +98 -21
  78. package/fesm2015/taiga-ui-core-components-svg.js.map +1 -1
  79. package/fesm2015/taiga-ui-core-components-tooltip.js +32 -15
  80. package/fesm2015/taiga-ui-core-components-tooltip.js.map +1 -1
  81. package/fesm2015/taiga-ui-core-directives-dropdown.js +42 -25
  82. package/fesm2015/taiga-ui-core-directives-dropdown.js.map +1 -1
  83. package/fesm2015/taiga-ui-core-directives-hint.js +30 -27
  84. package/fesm2015/taiga-ui-core-directives-hint.js.map +1 -1
  85. package/fesm2015/taiga-ui-core-tokens.js +38 -2
  86. package/fesm2015/taiga-ui-core-tokens.js.map +1 -1
  87. package/interfaces/dialog-options.d.ts +4 -3
  88. package/package.json +4 -4
  89. package/styles/mixins/textfield.less +4 -22
  90. package/styles/mixins/textfield.scss +3 -22
  91. package/styles/theme/wrapper/icon.less +17 -27
  92. package/tokens/icon-place.d.ts +3 -0
  93. package/tokens/icons-path.d.ts +3 -0
  94. package/tokens/index.d.ts +1 -0
  95. package/tokens/svg-content-processor.d.ts +3 -0
  96. package/tokens/svg-src-processor.d.ts +3 -0
  97. package/tokens/viewport.d.ts +4 -0
  98. package/components/dialog/dialog.providers.d.ts +0 -5
  99. package/esm2015/components/dialog/dialog.providers.js +0 -51
@@ -1,51 +1,41 @@
1
1
  @import '../../taiga-ui-local.less';
2
2
 
3
3
  /* stylelint-disable order/order */
4
+ /* stylelint-disable selector-max-specificity */
4
5
  [tuiWrapper][data-appearance='icon'] {
5
- background: transparent;
6
- color: var(--tui-base-06);
6
+ .transition(opacity);
7
+ color: var(--tui-text-01);
8
+ opacity: 0.5;
9
+
10
+ [tuiWrapper]:not([data-state='readonly']):hover .t-textfield-icon & {
11
+ opacity: 0.65;
12
+ }
7
13
 
8
14
  &[data-mode='onDark'] {
9
15
  color: var(--tui-text-01-night);
10
- opacity: var(--tui-disabled-opacity);
11
-
12
- .wrapper-focus({
13
- --tui-focus: var(--tui-base-01);
14
- });
15
16
 
16
- .wrapper-hover({
17
- color: var(--tui-text-01-night);
17
+ [tuiWrapper]:not([data-state='readonly']):hover .t-textfield-icon & {
18
18
  opacity: 1;
19
- });
19
+ }
20
20
 
21
- .wrapper-active({
22
- color: var(--tui-text-01-night);
23
- opacity: 1;
21
+ .wrapper-focus({
22
+ --tui-focus: var(--tui-base-01);
24
23
  });
25
- }
26
-
27
- &[data-mode='onLight'] {
28
- color: var(--tui-text-01);
29
- opacity: var(--tui-disabled-opacity);
30
24
 
31
25
  .wrapper-hover({
32
- color: var(--tui-text-01);
33
- opacity: 1;
34
- });
35
-
36
- .wrapper-active({
37
- color: var(--tui-text-01);
38
26
  opacity: 1;
39
27
  });
40
28
  }
41
29
 
42
30
  .wrapper-hover({
43
- color: var(--tui-base-07);
44
- opacity: 1;
31
+ opacity: 0.65;
45
32
  });
46
33
 
47
34
  .wrapper-active({
48
- color: var(--tui-base-08);
49
35
  opacity: 1;
50
36
  });
37
+
38
+ .wrapper-disabled({
39
+ opacity: calc(0.5 * var(--tui-disabled-opacity));
40
+ });
51
41
  }
@@ -1,2 +1,5 @@
1
1
  import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * @deprecated Use {@link TUI_SVG_OPTIONS} instead
4
+ */
2
5
  export declare const TUI_ICONS_PLACE: InjectionToken<string>;
@@ -1,3 +1,6 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { TuiStringHandler } from '@taiga-ui/cdk';
3
+ /**
4
+ * @deprecated Use {@link TUI_SVG_OPTIONS} instead
5
+ */
3
6
  export declare const TUI_ICONS_PATH: InjectionToken<TuiStringHandler<string>>;
package/tokens/index.d.ts CHANGED
@@ -27,3 +27,4 @@ export * from './textfield-appearance';
27
27
  export * from './textfield-host';
28
28
  export * from './theme';
29
29
  export * from './value-accessor';
30
+ export * from './viewport';
@@ -1,4 +1,7 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { SafeHtml } from '@angular/platform-browser';
3
3
  import { TuiHandler } from '@taiga-ui/cdk';
4
+ /**
5
+ * @deprecated Use {@link TUI_SVG_OPTIONS} instead
6
+ */
4
7
  export declare const TUI_SVG_CONTENT_PROCESSOR: InjectionToken<TuiHandler<string | SafeHtml, string | SafeHtml>>;
@@ -1,4 +1,7 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { SafeHtml } from '@angular/platform-browser';
3
3
  import { TuiHandler } from '@taiga-ui/cdk';
4
+ /**
5
+ * @deprecated Use {@link TUI_SVG_OPTIONS} instead
6
+ */
4
7
  export declare const TUI_SVG_SRC_PROCESSOR: InjectionToken<TuiHandler<string | SafeHtml, string | SafeHtml>>;
@@ -0,0 +1,4 @@
1
+ import { InjectionToken, Provider, Type } from '@angular/core';
2
+ import { TuiRectAccessor } from '@taiga-ui/core/abstract';
3
+ export declare const TUI_VIEWPORT: InjectionToken<TuiRectAccessor>;
4
+ export declare function tuiAsViewport(useExisting: Type<TuiRectAccessor>): Provider;
@@ -1,5 +0,0 @@
1
- import { InjectionToken, Provider } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- export declare const TUI_DIALOGS_CLOSE: InjectionToken<Observable<unknown>>;
4
- export declare const TUI_DIALOG_CLOSE_STREAM: InjectionToken<Observable<unknown>>;
5
- export declare const TUI_DIALOG_PROVIDERS: Provider[];
@@ -1,51 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { ElementRef, InjectionToken } from '@angular/core';
3
- import { WINDOW } from '@ng-web-apis/common';
4
- import { tuiContainsOrAfter, TuiDestroyService, tuiGetActualTarget, tuiIsCurrentTarget, tuiIsElement, tuiTypedFromEvent, } from '@taiga-ui/cdk';
5
- import { tuiGetViewportWidth } from '@taiga-ui/core/utils/dom';
6
- import { POLYMORPHEUS_CONTEXT } from '@tinkoff/ng-polymorpheus';
7
- import { EMPTY, merge } from 'rxjs';
8
- import { filter, switchMap, take, takeUntil } from 'rxjs/operators';
9
- export const TUI_DIALOGS_CLOSE = new InjectionToken(`[TUI_DIALOGS_CLOSE]: A stream to close dialogs`, {
10
- factory: () => EMPTY,
11
- });
12
- const SCROLLBAR_PLACEHOLDER = 17;
13
- export const TUI_DIALOG_CLOSE_STREAM = new InjectionToken(`[TUI_DIALOG_CLOSE_STREAM]: Dialogs closing stream`);
14
- export const TUI_DIALOG_PROVIDERS = [
15
- TuiDestroyService,
16
- {
17
- provide: TUI_DIALOG_CLOSE_STREAM,
18
- deps: [
19
- DOCUMENT,
20
- WINDOW,
21
- ElementRef,
22
- TUI_DIALOGS_CLOSE,
23
- TuiDestroyService,
24
- POLYMORPHEUS_CONTEXT,
25
- ],
26
- useFactory: (documentRef, windowRef, { nativeElement }, close$, destroy$, { dismissible }) => {
27
- return dismissible
28
- ? merge(tuiTypedFromEvent(nativeElement, `click`).pipe(filter(tuiIsCurrentTarget)), tuiTypedFromEvent(documentRef, `keydown`).pipe(filter(event => {
29
- const key = event.key;
30
- const target = tuiGetActualTarget(event);
31
- return (key === `Escape` &&
32
- tuiIsElement(target) &&
33
- (!tuiContainsOrAfter(nativeElement, target) ||
34
- nativeElement.contains(target)));
35
- })), tuiTypedFromEvent(documentRef, `mousedown`).pipe(filter(event => {
36
- const target = tuiGetActualTarget(event);
37
- const clientX = event.clientX;
38
- return (tuiIsElement(target) &&
39
- tuiGetViewportWidth(windowRef) - clientX >
40
- SCROLLBAR_PLACEHOLDER &&
41
- !tuiContainsOrAfter(nativeElement, target));
42
- }), switchMap(() => tuiTypedFromEvent(documentRef, `mouseup`).pipe(take(1), filter(event => {
43
- const target = tuiGetActualTarget(event);
44
- return (tuiIsElement(target) &&
45
- !tuiContainsOrAfter(nativeElement, target));
46
- })))), close$).pipe(takeUntil(destroy$))
47
- : close$;
48
- },
49
- },
50
- ];
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnByb3ZpZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9kaWFsb2cvZGlhbG9nLnByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBRSxjQUFjLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsaUJBQWlCLEVBRWpCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQy9DLGdEQUFnRCxFQUNoRDtJQUNJLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO0NBQ3ZCLENBQ0osQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUNyRCxtREFBbUQsQ0FDdEQsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFlO0lBQzVDLGlCQUFpQjtJQUNqQjtRQUNJLE9BQU8sRUFBRSx1QkFBdUI7UUFDaEMsSUFBSSxFQUFFO1lBQ0YsUUFBUTtZQUNSLE1BQU07WUFDTixVQUFVO1lBQ1YsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQixvQkFBb0I7U0FDdkI7UUFDRCxVQUFVLEVBQUUsQ0FDUixXQUFxQixFQUNyQixTQUFpQixFQUNqQixFQUFDLGFBQWEsRUFBMEIsRUFDeEMsTUFBd0IsRUFDeEIsUUFBMEIsRUFDMUIsRUFBQyxXQUFXLEVBQWdELEVBQ3pDLEVBQUU7WUFDckIsT0FBTyxXQUFXO2dCQUNkLENBQUMsQ0FBQyxLQUFLLENBQ0QsaUJBQWlCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDMUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQzdCLEVBQ0QsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDMUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNYLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7b0JBQ3RCLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUV6QyxPQUFPLENBQ0gsR0FBRyxLQUFLLFFBQVE7d0JBQ2hCLFlBQVksQ0FBQyxNQUFNLENBQUM7d0JBQ3BCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDOzRCQUN2QyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3RDLENBQUM7Z0JBQ04sQ0FBQyxDQUFDLENBQ0wsRUFDRCxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUM1QyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ1gsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7b0JBRTlCLE9BQU8sQ0FDSCxZQUFZLENBQUMsTUFBTSxDQUFDO3dCQUNwQixtQkFBbUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPOzRCQUNwQyxxQkFBcUI7d0JBQ3pCLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUM3QyxDQUFDO2dCQUNOLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDWCxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNYLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUV6QyxPQUFPLENBQ0gsWUFBWSxDQUFDLE1BQU0sQ0FBQzt3QkFDcEIsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQzdDLENBQUM7Z0JBQ04sQ0FBQyxDQUFDLENBQ0wsQ0FDSixDQUNKLEVBQ0QsTUFBTSxDQUNULENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNqQixDQUFDO0tBQ0o7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7RWxlbWVudFJlZiwgSW5qZWN0aW9uVG9rZW4sIFByb3ZpZGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7V0lORE9XfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7XG4gICAgdHVpQ29udGFpbnNPckFmdGVyLFxuICAgIFR1aURlc3Ryb3lTZXJ2aWNlLFxuICAgIFR1aURpYWxvZyxcbiAgICB0dWlHZXRBY3R1YWxUYXJnZXQsXG4gICAgdHVpSXNDdXJyZW50VGFyZ2V0LFxuICAgIHR1aUlzRWxlbWVudCxcbiAgICB0dWlUeXBlZEZyb21FdmVudCxcbn0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQge1R1aURpYWxvZ09wdGlvbnN9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHt0dWlHZXRWaWV3cG9ydFdpZHRofSBmcm9tICdAdGFpZ2EtdWkvY29yZS91dGlscy9kb20nO1xuaW1wb3J0IHtQT0xZTU9SUEhFVVNfQ09OVEVYVH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7RU1QVFksIG1lcmdlLCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY29uc3QgVFVJX0RJQUxPR1NfQ0xPU0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48T2JzZXJ2YWJsZTx1bmtub3duPj4oXG4gICAgYFtUVUlfRElBTE9HU19DTE9TRV06IEEgc3RyZWFtIHRvIGNsb3NlIGRpYWxvZ3NgLFxuICAgIHtcbiAgICAgICAgZmFjdG9yeTogKCkgPT4gRU1QVFksXG4gICAgfSxcbik7XG5cbmNvbnN0IFNDUk9MTEJBUl9QTEFDRUhPTERFUiA9IDE3O1xuXG5leHBvcnQgY29uc3QgVFVJX0RJQUxPR19DTE9TRV9TVFJFQU0gPSBuZXcgSW5qZWN0aW9uVG9rZW48T2JzZXJ2YWJsZTx1bmtub3duPj4oXG4gICAgYFtUVUlfRElBTE9HX0NMT1NFX1NUUkVBTV06IERpYWxvZ3MgY2xvc2luZyBzdHJlYW1gLFxuKTtcbmV4cG9ydCBjb25zdCBUVUlfRElBTE9HX1BST1ZJREVSUzogUHJvdmlkZXJbXSA9IFtcbiAgICBUdWlEZXN0cm95U2VydmljZSxcbiAgICB7XG4gICAgICAgIHByb3ZpZGU6IFRVSV9ESUFMT0dfQ0xPU0VfU1RSRUFNLFxuICAgICAgICBkZXBzOiBbXG4gICAgICAgICAgICBET0NVTUVOVCxcbiAgICAgICAgICAgIFdJTkRPVyxcbiAgICAgICAgICAgIEVsZW1lbnRSZWYsXG4gICAgICAgICAgICBUVUlfRElBTE9HU19DTE9TRSxcbiAgICAgICAgICAgIFR1aURlc3Ryb3lTZXJ2aWNlLFxuICAgICAgICAgICAgUE9MWU1PUlBIRVVTX0NPTlRFWFQsXG4gICAgICAgIF0sXG4gICAgICAgIHVzZUZhY3Rvcnk6IChcbiAgICAgICAgICAgIGRvY3VtZW50UmVmOiBEb2N1bWVudCxcbiAgICAgICAgICAgIHdpbmRvd1JlZjogV2luZG93LFxuICAgICAgICAgICAge25hdGl2ZUVsZW1lbnR9OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgICAgIGNsb3NlJDogT2JzZXJ2YWJsZTx2b2lkPixcbiAgICAgICAgICAgIGRlc3Ryb3kkOiBPYnNlcnZhYmxlPHZvaWQ+LFxuICAgICAgICAgICAge2Rpc21pc3NpYmxlfTogVHVpRGlhbG9nPFR1aURpYWxvZ09wdGlvbnM8dW5rbm93bj4sIHVua25vd24+LFxuICAgICAgICApOiBPYnNlcnZhYmxlPHVua25vd24+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkaXNtaXNzaWJsZVxuICAgICAgICAgICAgICAgID8gbWVyZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgdHVpVHlwZWRGcm9tRXZlbnQobmF0aXZlRWxlbWVudCwgYGNsaWNrYCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHR1aUlzQ3VycmVudFRhcmdldCksXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICB0dWlUeXBlZEZyb21FdmVudChkb2N1bWVudFJlZiwgYGtleWRvd25gKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHVpR2V0QWN0dWFsVGFyZ2V0KGV2ZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPT09IGBFc2NhcGVgICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSXNFbGVtZW50KHRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXR1aUNvbnRhaW5zT3JBZnRlcihuYXRpdmVFbGVtZW50LCB0YXJnZXQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgdHVpVHlwZWRGcm9tRXZlbnQoZG9jdW1lbnRSZWYsIGBtb3VzZWRvd25gKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHVpR2V0QWN0dWFsVGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudFggPSBldmVudC5jbGllbnRYO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUlzRWxlbWVudCh0YXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpR2V0Vmlld3BvcnRXaWR0aCh3aW5kb3dSZWYpIC0gY2xpZW50WCA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUk9MTEJBUl9QTEFDRUhPTERFUiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0dWlDb250YWluc09yQWZ0ZXIobmF0aXZlRWxlbWVudCwgdGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpVHlwZWRGcm9tRXZlbnQoZG9jdW1lbnRSZWYsIGBtb3VzZXVwYCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHR1aUdldEFjdHVhbFRhcmdldChldmVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUlzRWxlbWVudCh0YXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdHVpQ29udGFpbnNPckFmdGVyKG5hdGl2ZUVsZW1lbnQsIHRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBjbG9zZSQsXG4gICAgICAgICAgICAgICAgICApLnBpcGUodGFrZVVudGlsKGRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICA6IGNsb3NlJDtcbiAgICAgICAgfSxcbiAgICB9LFxuXTtcbiJdfQ==