@danske/sapphire-angular 3.7.1 → 3.8.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.
- package/esm2020/lib/button/src/button-group.component.mjs +2 -2
- package/esm2020/lib/button/src/button.component.mjs +29 -11
- package/esm2020/lib/button/src/button.module.mjs +14 -4
- package/esm2020/lib/button/src/toggle-button.component.mjs +4 -3
- package/esm2020/lib/checkbox/src/checkbox-group.component.mjs +2 -2
- package/esm2020/lib/common/focused.directive.mjs +8 -8
- package/esm2020/lib/list/src/list.component.mjs +2 -2
- package/esm2020/lib/listbox/src/listbox.component.mjs +2 -2
- package/esm2020/lib/menu/src/menu.component.mjs +2 -2
- package/esm2020/lib/modal/src/panel/panel.component.mjs +2 -2
- package/esm2020/lib/radio/src/radio-group.component.mjs +2 -2
- package/esm2020/lib/table/src/table.component.mjs +2 -2
- package/esm2020/lib/text-field/src/text-field.component.mjs +2 -2
- package/esm2020/lib/theme/src/themes.mjs +4 -4
- package/esm2020/lib/tooltip/src/tooltip.module.mjs +12 -4
- package/esm2020/lib/tooltip/src/truncated-with-tooltip.directive.mjs +90 -9
- package/fesm2015/danske-sapphire-angular.mjs +5585 -5467
- package/fesm2015/danske-sapphire-angular.mjs.map +1 -1
- package/fesm2020/danske-sapphire-angular.mjs +5399 -5285
- package/fesm2020/danske-sapphire-angular.mjs.map +1 -1
- package/lib/button/src/button.component.d.ts +10 -5
- package/lib/button/src/button.module.d.ts +3 -1
- package/lib/common/focused.directive.d.ts +2 -2
- package/lib/tooltip/src/tooltip.module.d.ts +1 -1
- package/lib/tooltip/src/truncated-with-tooltip.directive.d.ts +58 -4
- package/package.json +3 -3
|
@@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common';
|
|
|
3
3
|
import { OverlayModule } from '@angular/cdk/overlay';
|
|
4
4
|
import { TooltipComponent } from './tooltip.component';
|
|
5
5
|
import { TooltipDirective } from './tooltip.directive';
|
|
6
|
-
import { TruncatedWithTooltipDirective } from './truncated-with-tooltip.directive';
|
|
6
|
+
import { TruncatedWithTooltipDirective, TruncatedWithTooltipContentElementDirective, } from './truncated-with-tooltip.directive';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export class SapphireTooltipModule {
|
|
9
9
|
}
|
|
@@ -11,7 +11,10 @@ SapphireTooltipModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", ve
|
|
|
11
11
|
SapphireTooltipModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.0", ngImport: i0, type: SapphireTooltipModule, declarations: [TooltipComponent], imports: [CommonModule,
|
|
12
12
|
OverlayModule,
|
|
13
13
|
TooltipDirective,
|
|
14
|
-
TruncatedWithTooltipDirective
|
|
14
|
+
TruncatedWithTooltipDirective,
|
|
15
|
+
TruncatedWithTooltipContentElementDirective], exports: [TooltipDirective,
|
|
16
|
+
TruncatedWithTooltipDirective,
|
|
17
|
+
TruncatedWithTooltipContentElementDirective] });
|
|
15
18
|
SapphireTooltipModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphireTooltipModule, imports: [CommonModule,
|
|
16
19
|
OverlayModule] });
|
|
17
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: SapphireTooltipModule, decorators: [{
|
|
@@ -23,8 +26,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImpor
|
|
|
23
26
|
OverlayModule,
|
|
24
27
|
TooltipDirective,
|
|
25
28
|
TruncatedWithTooltipDirective,
|
|
29
|
+
TruncatedWithTooltipContentElementDirective,
|
|
30
|
+
],
|
|
31
|
+
exports: [
|
|
32
|
+
TooltipDirective,
|
|
33
|
+
TruncatedWithTooltipDirective,
|
|
34
|
+
TruncatedWithTooltipContentElementDirective,
|
|
26
35
|
],
|
|
27
|
-
exports: [TooltipDirective, TruncatedWithTooltipDirective],
|
|
28
36
|
}]
|
|
29
37
|
}] });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2x0aXAvc3JjL3Rvb2x0aXAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLDJDQUEyQyxHQUM1QyxNQUFNLG9DQUFvQyxDQUFDOztBQWlCNUMsTUFBTSxPQUFPLHFCQUFxQjs7a0hBQXJCLHFCQUFxQjttSEFBckIscUJBQXFCLGlCQWRqQixnQkFBZ0IsYUFFN0IsWUFBWTtRQUNaLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsNkJBQTZCO1FBQzdCLDJDQUEyQyxhQUczQyxnQkFBZ0I7UUFDaEIsNkJBQTZCO1FBQzdCLDJDQUEyQzttSEFHbEMscUJBQXFCLFlBWjlCLFlBQVk7UUFDWixhQUFhOzJGQVdKLHFCQUFxQjtrQkFmakMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLDZCQUE2Qjt3QkFDN0IsMkNBQTJDO3FCQUM1QztvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZ0JBQWdCO3dCQUNoQiw2QkFBNkI7d0JBQzdCLDJDQUEyQztxQkFDNUM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi90b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi90b29sdGlwLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBUcnVuY2F0ZWRXaXRoVG9vbHRpcERpcmVjdGl2ZSxcbiAgVHJ1bmNhdGVkV2l0aFRvb2x0aXBDb250ZW50RWxlbWVudERpcmVjdGl2ZSxcbn0gZnJvbSAnLi90cnVuY2F0ZWQtd2l0aC10b29sdGlwLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1Rvb2x0aXBDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE92ZXJsYXlNb2R1bGUsXG4gICAgVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBUcnVuY2F0ZWRXaXRoVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBUcnVuY2F0ZWRXaXRoVG9vbHRpcENvbnRlbnRFbGVtZW50RGlyZWN0aXZlLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBUcnVuY2F0ZWRXaXRoVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBUcnVuY2F0ZWRXaXRoVG9vbHRpcENvbnRlbnRFbGVtZW50RGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTYXBwaGlyZVRvb2x0aXBNb2R1bGUge31cbiJdfQ==
|
|
@@ -1,9 +1,66 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { Directive, Input, } from '@angular/core';
|
|
2
|
+
import { Directive, Input, Optional, SkipSelf, } from '@angular/core';
|
|
3
3
|
import { TooltipDirective } from './tooltip.directive';
|
|
4
4
|
import { CoerceBoolean } from '../../common/coerce-boolean.decorator';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Marks an element as the content element to be checked for overflow
|
|
8
|
+
* when using spTruncatedWithTooltip directive.
|
|
9
|
+
* Automatically registers itself with the parent TruncatedWithTooltipDirective.
|
|
10
|
+
*/
|
|
11
|
+
export class TruncatedWithTooltipContentElementDirective {
|
|
12
|
+
constructor(elementRef, parentDirective) {
|
|
13
|
+
this.elementRef = elementRef;
|
|
14
|
+
this.parentDirective = parentDirective;
|
|
15
|
+
}
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
if (this.parentDirective) {
|
|
18
|
+
this.parentDirective.registerContentElement(this);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
ngOnDestroy() {
|
|
22
|
+
if (this.parentDirective) {
|
|
23
|
+
this.parentDirective.unregisterContentElement();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
TruncatedWithTooltipContentElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipContentElementDirective, deps: [{ token: i0.ElementRef }, { token: TruncatedWithTooltipDirective, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
28
|
+
TruncatedWithTooltipContentElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: TruncatedWithTooltipContentElementDirective, isStandalone: true, selector: "[spTruncatedWithTooltipContent]", ngImport: i0 });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipContentElementDirective, decorators: [{
|
|
30
|
+
type: Directive,
|
|
31
|
+
args: [{
|
|
32
|
+
selector: '[spTruncatedWithTooltipContent]',
|
|
33
|
+
standalone: true,
|
|
34
|
+
}]
|
|
35
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: TruncatedWithTooltipDirective, decorators: [{
|
|
36
|
+
type: Optional
|
|
37
|
+
}, {
|
|
38
|
+
type: SkipSelf
|
|
39
|
+
}] }]; } });
|
|
40
|
+
/**
|
|
41
|
+
* Internal wrapper directive that extends TooltipDirective for use with truncated text functionality.
|
|
42
|
+
*
|
|
43
|
+
* This directive is designed to be used exclusively as a hostDirective within the
|
|
44
|
+
* TruncatedWithTooltipDirective, enabling components to support automatic truncation tooltips
|
|
45
|
+
* without conflicting with user-provided tooltip directives.
|
|
46
|
+
*
|
|
47
|
+
* Angular's hostDirectives feature allows a directive to be composed with other directives,
|
|
48
|
+
* but if we used TooltipDirective directly in components that expose spTruncatedWithTooltip,
|
|
49
|
+
* it would prevent users from also applying their own spTooltip directive to the same component.
|
|
50
|
+
* By creating this internal wrapper, we maintain directive composition flexibility while
|
|
51
|
+
* avoiding selector conflicts.
|
|
52
|
+
*/
|
|
53
|
+
export class TruncatedWithTooltipDirectiveInternal extends TooltipDirective {
|
|
54
|
+
}
|
|
55
|
+
TruncatedWithTooltipDirectiveInternal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipDirectiveInternal, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
56
|
+
TruncatedWithTooltipDirectiveInternal.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: TruncatedWithTooltipDirectiveInternal, isStandalone: true, usesInheritance: true, ngImport: i0 });
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipDirectiveInternal, decorators: [{
|
|
58
|
+
type: Directive,
|
|
59
|
+
args: [{
|
|
60
|
+
standalone: true,
|
|
61
|
+
// No selector as we'll only use it in hostDirectives of ButtonComponent
|
|
62
|
+
}]
|
|
63
|
+
}] });
|
|
7
64
|
/**
|
|
8
65
|
* Shows a tooltip with the text content of the host element, if the content is
|
|
9
66
|
* overflowing. It also applies inline styles to hide the overflow and show the
|
|
@@ -11,8 +68,30 @@ import * as i1 from "./tooltip.directive";
|
|
|
11
68
|
*
|
|
12
69
|
* @example <something spTruncatedWithTooltip>Overflow will always be truncated</something>
|
|
13
70
|
* @example <something spTruncatedWithTooltip="someCondition">Overflow will be truncated only if someCondition is truthy</something>
|
|
71
|
+
* @example
|
|
72
|
+
* By using spTruncatedWithTooltipContent, you can detect overflow on a child element
|
|
73
|
+
* while keeping the tooltip attached to the host element:
|
|
74
|
+
* <div spTruncatedWithTooltip>
|
|
75
|
+
* <span spTruncatedWithTooltipContent>This text will be checked for overflow</span>
|
|
76
|
+
* </div>
|
|
14
77
|
*/
|
|
15
78
|
export class TruncatedWithTooltipDirective {
|
|
79
|
+
/**
|
|
80
|
+
* Registers a content element directive.
|
|
81
|
+
* Called automatically by TruncatedWithTooltipContentElementDirective.
|
|
82
|
+
* @internal
|
|
83
|
+
*/
|
|
84
|
+
registerContentElement(directive) {
|
|
85
|
+
this.contentElementDirective = directive;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Unregisters the content element directive.
|
|
89
|
+
* Called automatically by TruncatedWithTooltipContentElementDirective.
|
|
90
|
+
* @internal
|
|
91
|
+
*/
|
|
92
|
+
unregisterContentElement() {
|
|
93
|
+
this.contentElementDirective = undefined;
|
|
94
|
+
}
|
|
16
95
|
constructor(tooltipDirective, elementRef) {
|
|
17
96
|
this.tooltipDirective = tooltipDirective;
|
|
18
97
|
this.elementRef = elementRef;
|
|
@@ -22,18 +101,20 @@ export class TruncatedWithTooltipDirective {
|
|
|
22
101
|
this.enabled = true;
|
|
23
102
|
}
|
|
24
103
|
ngAfterContentChecked() {
|
|
25
|
-
const contentElement = this.elementRef.nativeElement
|
|
104
|
+
const contentElement = this.contentElementDirective?.elementRef.nativeElement ??
|
|
105
|
+
this.elementRef.nativeElement;
|
|
26
106
|
this.tooltipDirective.tooltipText =
|
|
27
107
|
this.enabled && this.hasOverflow() ? contentElement.innerText : null;
|
|
28
108
|
}
|
|
29
109
|
hasOverflow() {
|
|
30
|
-
const contentElement = this.elementRef.nativeElement
|
|
110
|
+
const contentElement = this.contentElementDirective?.elementRef.nativeElement ??
|
|
111
|
+
this.elementRef.nativeElement;
|
|
31
112
|
return (contentElement.scrollWidth > contentElement.clientWidth ||
|
|
32
113
|
contentElement.scrollHeight > contentElement.clientHeight);
|
|
33
114
|
}
|
|
34
115
|
}
|
|
35
|
-
TruncatedWithTooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipDirective, deps: [{ token:
|
|
36
|
-
TruncatedWithTooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: TruncatedWithTooltipDirective, isStandalone: true, selector: "[spTruncatedWithTooltip]", inputs: { enabled: ["spTruncatedWithTooltip", "enabled"] }, host: { properties: { "style.overflow": "enabled && \"hidden\"", "style.text-overflow": "enabled && \"ellipsis\"", "style.white-space": "enabled && \"nowrap\"" } }, hostDirectives: [{ directive:
|
|
116
|
+
TruncatedWithTooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TruncatedWithTooltipDirective, deps: [{ token: TruncatedWithTooltipDirectiveInternal }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
117
|
+
TruncatedWithTooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: TruncatedWithTooltipDirective, isStandalone: true, selector: "[spTruncatedWithTooltip]", inputs: { enabled: ["spTruncatedWithTooltip", "enabled"] }, host: { properties: { "style.overflow": "enabled && \"hidden\"", "style.text-overflow": "enabled && \"ellipsis\"", "style.white-space": "enabled && \"nowrap\"" } }, hostDirectives: [{ directive: TruncatedWithTooltipDirectiveInternal }], ngImport: i0 });
|
|
37
118
|
__decorate([
|
|
38
119
|
CoerceBoolean
|
|
39
120
|
], TruncatedWithTooltipDirective.prototype, "enabled", void 0);
|
|
@@ -42,15 +123,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImpor
|
|
|
42
123
|
args: [{
|
|
43
124
|
selector: '[spTruncatedWithTooltip]',
|
|
44
125
|
standalone: true,
|
|
45
|
-
hostDirectives: [
|
|
126
|
+
hostDirectives: [TruncatedWithTooltipDirectiveInternal],
|
|
46
127
|
host: {
|
|
47
128
|
'[style.overflow]': 'enabled && "hidden"',
|
|
48
129
|
'[style.text-overflow]': 'enabled && "ellipsis"',
|
|
49
130
|
'[style.white-space]': 'enabled && "nowrap"',
|
|
50
131
|
},
|
|
51
132
|
}]
|
|
52
|
-
}], ctorParameters: function () { return [{ type:
|
|
133
|
+
}], ctorParameters: function () { return [{ type: TruncatedWithTooltipDirectiveInternal }, { type: i0.ElementRef }]; }, propDecorators: { enabled: [{
|
|
53
134
|
type: Input,
|
|
54
135
|
args: ['spTruncatedWithTooltip']
|
|
55
136
|
}] } });
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGVkLXdpdGgtdG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rvb2x0aXAvc3JjL3RydW5jYXRlZC13aXRoLXRvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFHTCxRQUFRLEVBQ1IsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7QUFFdEU7Ozs7R0FJRztBQUtILE1BQU0sT0FBTywyQ0FBMkM7SUFHdEQsWUFDUyxVQUFtQyxFQUdsQyxlQUErQztRQUhoRCxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUdsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0M7SUFDdEQsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNqRDtJQUNILENBQUM7O3dJQXBCVSwyQ0FBMkM7NEhBQTNDLDJDQUEyQzsyRkFBM0MsMkNBQTJDO2tCQUp2RCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQ0FBaUM7b0JBQzNDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBTUksUUFBUTs7MEJBQ1IsUUFBUTs7QUFpQmI7Ozs7Ozs7Ozs7OztHQVlHO0FBS0gsTUFBTSxPQUFPLHFDQUFzQyxTQUFRLGdCQUFnQjs7a0lBQTlELHFDQUFxQztzSEFBckMscUNBQXFDOzJGQUFyQyxxQ0FBcUM7a0JBSmpELFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLHdFQUF3RTtpQkFDekU7O0FBR0Q7Ozs7Ozs7Ozs7Ozs7R0FhRztBQVdILE1BQU0sT0FBTyw2QkFBNkI7SUFleEM7Ozs7T0FJRztJQUNILHNCQUFzQixDQUNwQixTQUFzRDtRQUV0RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7SUFDM0MsQ0FBQztJQUVELFlBQ1UsZ0JBQXVELEVBQ3ZELFVBQXNCO1FBRHRCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBdUM7UUFDdkQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXBDaEM7O1dBRUc7UUFHSCxZQUFPLEdBQWlCLElBQUksQ0FBQztJQWdDMUIsQ0FBQztJQUVKLHFCQUFxQjtRQUNuQixNQUFNLGNBQWMsR0FDbEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFVBQVUsQ0FBQyxhQUFhO1lBQ3RELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXO1lBQy9CLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxjQUFjLEdBQ2xCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxVQUFVLENBQUMsYUFBYTtZQUN0RCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNoQyxPQUFPLENBQ0wsY0FBYyxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsV0FBVztZQUN2RCxjQUFjLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQzFELENBQUM7SUFDSixDQUFDOzswSEF4RFUsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsMlRBMUI3QixxQ0FBcUM7QUErQmhEO0lBREMsYUFBYTs4REFFZTsyRkFObEIsNkJBQTZCO2tCQVZ6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixjQUFjLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztvQkFDdkQsSUFBSSxFQUFFO3dCQUNKLGtCQUFrQixFQUFFLHFCQUFxQjt3QkFDekMsdUJBQXVCLEVBQUUsdUJBQXVCO3dCQUNoRCxxQkFBcUIsRUFBRSxxQkFBcUI7cUJBQzdDO2lCQUNGO2tKQU9DLE9BQU87c0JBRE4sS0FBSzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNraXBTZWxmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuL3Rvb2x0aXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDb2VyY2VCb29sZWFuIH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvZXJjZS1ib29sZWFuLmRlY29yYXRvcic7XG5cbi8qKlxuICogTWFya3MgYW4gZWxlbWVudCBhcyB0aGUgY29udGVudCBlbGVtZW50IHRvIGJlIGNoZWNrZWQgZm9yIG92ZXJmbG93XG4gKiB3aGVuIHVzaW5nIHNwVHJ1bmNhdGVkV2l0aFRvb2x0aXAgZGlyZWN0aXZlLlxuICogQXV0b21hdGljYWxseSByZWdpc3RlcnMgaXRzZWxmIHdpdGggdGhlIHBhcmVudCBUcnVuY2F0ZWRXaXRoVG9vbHRpcERpcmVjdGl2ZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NwVHJ1bmNhdGVkV2l0aFRvb2x0aXBDb250ZW50XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudEVsZW1lbnREaXJlY3RpdmVcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQE9wdGlvbmFsKClcbiAgICBAU2tpcFNlbGYoKVxuICAgIHByaXZhdGUgcGFyZW50RGlyZWN0aXZlPzogVHJ1bmNhdGVkV2l0aFRvb2x0aXBEaXJlY3RpdmVcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhcmVudERpcmVjdGl2ZSkge1xuICAgICAgdGhpcy5wYXJlbnREaXJlY3RpdmUucmVnaXN0ZXJDb250ZW50RWxlbWVudCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYXJlbnREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMucGFyZW50RGlyZWN0aXZlLnVucmVnaXN0ZXJDb250ZW50RWxlbWVudCgpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIHdyYXBwZXIgZGlyZWN0aXZlIHRoYXQgZXh0ZW5kcyBUb29sdGlwRGlyZWN0aXZlIGZvciB1c2Ugd2l0aCB0cnVuY2F0ZWQgdGV4dCBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgZXhjbHVzaXZlbHkgYXMgYSBob3N0RGlyZWN0aXZlIHdpdGhpbiB0aGVcbiAqIFRydW5jYXRlZFdpdGhUb29sdGlwRGlyZWN0aXZlLCBlbmFibGluZyBjb21wb25lbnRzIHRvIHN1cHBvcnQgYXV0b21hdGljIHRydW5jYXRpb24gdG9vbHRpcHNcbiAqIHdpdGhvdXQgY29uZmxpY3Rpbmcgd2l0aCB1c2VyLXByb3ZpZGVkIHRvb2x0aXAgZGlyZWN0aXZlcy5cbiAqXG4gKiBBbmd1bGFyJ3MgaG9zdERpcmVjdGl2ZXMgZmVhdHVyZSBhbGxvd3MgYSBkaXJlY3RpdmUgdG8gYmUgY29tcG9zZWQgd2l0aCBvdGhlciBkaXJlY3RpdmVzLFxuICogYnV0IGlmIHdlIHVzZWQgVG9vbHRpcERpcmVjdGl2ZSBkaXJlY3RseSBpbiBjb21wb25lbnRzIHRoYXQgZXhwb3NlIHNwVHJ1bmNhdGVkV2l0aFRvb2x0aXAsXG4gKiBpdCB3b3VsZCBwcmV2ZW50IHVzZXJzIGZyb20gYWxzbyBhcHBseWluZyB0aGVpciBvd24gc3BUb29sdGlwIGRpcmVjdGl2ZSB0byB0aGUgc2FtZSBjb21wb25lbnQuXG4gKiBCeSBjcmVhdGluZyB0aGlzIGludGVybmFsIHdyYXBwZXIsIHdlIG1haW50YWluIGRpcmVjdGl2ZSBjb21wb3NpdGlvbiBmbGV4aWJpbGl0eSB3aGlsZVxuICogYXZvaWRpbmcgc2VsZWN0b3IgY29uZmxpY3RzLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgLy8gTm8gc2VsZWN0b3IgYXMgd2UnbGwgb25seSB1c2UgaXQgaW4gaG9zdERpcmVjdGl2ZXMgb2YgQnV0dG9uQ29tcG9uZW50XG59KVxuZXhwb3J0IGNsYXNzIFRydW5jYXRlZFdpdGhUb29sdGlwRGlyZWN0aXZlSW50ZXJuYWwgZXh0ZW5kcyBUb29sdGlwRGlyZWN0aXZlIHt9XG5cbi8qKlxuICogU2hvd3MgYSB0b29sdGlwIHdpdGggdGhlIHRleHQgY29udGVudCBvZiB0aGUgaG9zdCBlbGVtZW50LCBpZiB0aGUgY29udGVudCBpc1xuICogb3ZlcmZsb3dpbmcuIEl0IGFsc28gYXBwbGllcyBpbmxpbmUgc3R5bGVzIHRvIGhpZGUgdGhlIG92ZXJmbG93IGFuZCBzaG93IHRoZVxuICogZWxsaXBzaXMuXG4gKlxuICogQGV4YW1wbGUgPHNvbWV0aGluZyBzcFRydW5jYXRlZFdpdGhUb29sdGlwPk92ZXJmbG93IHdpbGwgYWx3YXlzIGJlIHRydW5jYXRlZDwvc29tZXRoaW5nPlxuICogQGV4YW1wbGUgPHNvbWV0aGluZyBzcFRydW5jYXRlZFdpdGhUb29sdGlwPVwic29tZUNvbmRpdGlvblwiPk92ZXJmbG93IHdpbGwgYmUgdHJ1bmNhdGVkIG9ubHkgaWYgc29tZUNvbmRpdGlvbiBpcyB0cnV0aHk8L3NvbWV0aGluZz5cbiAqIEBleGFtcGxlXG4gKiBCeSB1c2luZyBzcFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudCwgeW91IGNhbiBkZXRlY3Qgb3ZlcmZsb3cgb24gYSBjaGlsZCBlbGVtZW50XG4gKiB3aGlsZSBrZWVwaW5nIHRoZSB0b29sdGlwIGF0dGFjaGVkIHRvIHRoZSBob3N0IGVsZW1lbnQ6XG4gKiA8ZGl2IHNwVHJ1bmNhdGVkV2l0aFRvb2x0aXA+XG4gKiAgIDxzcGFuIHNwVHJ1bmNhdGVkV2l0aFRvb2x0aXBDb250ZW50PlRoaXMgdGV4dCB3aWxsIGJlIGNoZWNrZWQgZm9yIG92ZXJmbG93PC9zcGFuPlxuICogPC9kaXY+XG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzcFRydW5jYXRlZFdpdGhUb29sdGlwXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3REaXJlY3RpdmVzOiBbVHJ1bmNhdGVkV2l0aFRvb2x0aXBEaXJlY3RpdmVJbnRlcm5hbF0sXG4gIGhvc3Q6IHtcbiAgICAnW3N0eWxlLm92ZXJmbG93XSc6ICdlbmFibGVkICYmIFwiaGlkZGVuXCInLFxuICAgICdbc3R5bGUudGV4dC1vdmVyZmxvd10nOiAnZW5hYmxlZCAmJiBcImVsbGlwc2lzXCInLFxuICAgICdbc3R5bGUud2hpdGUtc3BhY2VdJzogJ2VuYWJsZWQgJiYgXCJub3dyYXBcIicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRydW5jYXRlZFdpdGhUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXJlY3RpdmUgaXMgZW5hYmxlZC5cbiAgICovXG4gIEBDb2VyY2VCb29sZWFuXG4gIEBJbnB1dCgnc3BUcnVuY2F0ZWRXaXRoVG9vbHRpcCcpXG4gIGVuYWJsZWQ6IEJvb2xlYW5JbnB1dCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNvbnRlbnQgZWxlbWVudCBtYXJrZWQgd2l0aCBzcFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudCBkaXJlY3RpdmUuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGhvc3QgZWxlbWVudCB3aWxsIGJlIHVzZWQuXG4gICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBzZXQgd2hlbiBhIGNoaWxkIGVsZW1lbnQgaGFzIHRoZSBkaXJlY3RpdmUuXG4gICAqL1xuICBjb250ZW50RWxlbWVudERpcmVjdGl2ZT86IFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudEVsZW1lbnREaXJlY3RpdmU7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNvbnRlbnQgZWxlbWVudCBkaXJlY3RpdmUuXG4gICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudEVsZW1lbnREaXJlY3RpdmUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVnaXN0ZXJDb250ZW50RWxlbWVudChcbiAgICBkaXJlY3RpdmU6IFRydW5jYXRlZFdpdGhUb29sdGlwQ29udGVudEVsZW1lbnREaXJlY3RpdmVcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZW50RWxlbWVudERpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyB0aGUgY29udGVudCBlbGVtZW50IGRpcmVjdGl2ZS5cbiAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgVHJ1bmNhdGVkV2l0aFRvb2x0aXBDb250ZW50RWxlbWVudERpcmVjdGl2ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bnJlZ2lzdGVyQ29udGVudEVsZW1lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZW50RWxlbWVudERpcmVjdGl2ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9vbHRpcERpcmVjdGl2ZTogVHJ1bmNhdGVkV2l0aFRvb2x0aXBEaXJlY3RpdmVJbnRlcm5hbCxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZW50RWxlbWVudCA9XG4gICAgICB0aGlzLmNvbnRlbnRFbGVtZW50RGlyZWN0aXZlPy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgPz9cbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMudG9vbHRpcERpcmVjdGl2ZS50b29sdGlwVGV4dCA9XG4gICAgICB0aGlzLmVuYWJsZWQgJiYgdGhpcy5oYXNPdmVyZmxvdygpID8gY29udGVudEVsZW1lbnQuaW5uZXJUZXh0IDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzT3ZlcmZsb3coKSB7XG4gICAgY29uc3QgY29udGVudEVsZW1lbnQgPVxuICAgICAgdGhpcy5jb250ZW50RWxlbWVudERpcmVjdGl2ZT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ID8/XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKFxuICAgICAgY29udGVudEVsZW1lbnQuc2Nyb2xsV2lkdGggPiBjb250ZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fFxuICAgICAgY29udGVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gY29udGVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgKTtcbiAgfVxufVxuIl19
|