@ruc-lib/overlay 2.0.10 → 3.1.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.
- package/README.md +47 -20
- package/fesm2022/ruc-lib-overlay.mjs +355 -0
- package/fesm2022/ruc-lib-overlay.mjs.map +1 -0
- package/index.d.ts +115 -6
- package/package.json +9 -21
- package/esm2020/index.mjs +0 -7
- package/esm2020/lib/constants/positions.mjs +0 -7
- package/esm2020/lib/model/overlay.types.mjs +0 -7
- package/esm2020/lib/overlay-content/overlay-content.component.mjs +0 -91
- package/esm2020/lib/ruc-overlay-chart/ruc-overlay-chart.component.mjs +0 -29
- package/esm2020/lib/ruclib-overlay/ruclib-overlay.component.mjs +0 -196
- package/esm2020/lib/ruclib-overlay.module.mjs +0 -48
- package/esm2020/lib/service/overlay.service.mjs +0 -33
- package/esm2020/ruc-lib-overlay.mjs +0 -5
- package/fesm2015/ruc-lib-overlay.mjs +0 -401
- package/fesm2015/ruc-lib-overlay.mjs.map +0 -1
- package/fesm2020/ruc-lib-overlay.mjs +0 -394
- package/fesm2020/ruc-lib-overlay.mjs.map +0 -1
- package/lib/constants/positions.d.ts +0 -2
- package/lib/model/overlay.types.d.ts +0 -40
- package/lib/overlay-content/overlay-content.component.d.ts +0 -20
- package/lib/ruc-overlay-chart/ruc-overlay-chart.component.d.ts +0 -11
- package/lib/ruclib-overlay/ruclib-overlay.component.d.ts +0 -40
- package/lib/ruclib-overlay.module.d.ts +0 -15
- package/lib/service/overlay.service.d.ts +0 -16
package/index.d.ts
CHANGED
|
@@ -1,6 +1,115 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { Overlay } from '@angular/cdk/overlay';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { TemplateRef, InjectionToken, OnInit, OnDestroy, Injector, EventEmitter } from '@angular/core';
|
|
4
|
+
import * as rxjs from 'rxjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Defines the configuration options that a user can pass to the popover.
|
|
8
|
+
* This is the public API of your component.
|
|
9
|
+
*/
|
|
10
|
+
interface OverlayConfig {
|
|
11
|
+
placement?: 'top' | 'bottom' | 'left' | 'right' | string;
|
|
12
|
+
overlayTitle?: string;
|
|
13
|
+
content?: string | TemplateRef<any>;
|
|
14
|
+
animation?: 'fade' | 'scale';
|
|
15
|
+
trigger?: 'click' | 'hover';
|
|
16
|
+
showCloseButton?: boolean;
|
|
17
|
+
closeIcon?: string;
|
|
18
|
+
tableData?: any[];
|
|
19
|
+
tableClass?: string;
|
|
20
|
+
closeDelay?: number;
|
|
21
|
+
chartConfig?: any;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Defines the data packet that the PopoverService sends.
|
|
25
|
+
* It contains the configuration AND the element to position against.
|
|
26
|
+
* THIS IS THE ONE THE SERVICE USES.
|
|
27
|
+
*/
|
|
28
|
+
interface OverlayData {
|
|
29
|
+
config: OverlayConfig;
|
|
30
|
+
trigger: HTMLElement;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Defines the data and controls passed to the dynamically created PopoverContentComponent.
|
|
34
|
+
* It includes the config AND a callback function to close the popover.
|
|
35
|
+
*/
|
|
36
|
+
interface OverlayControl {
|
|
37
|
+
config: OverlayConfig;
|
|
38
|
+
close: () => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The Injection Token used to provide the PopoverControl object to the
|
|
42
|
+
* PopoverContentComponent. This is the correct, final version.
|
|
43
|
+
*/
|
|
44
|
+
declare const OVERLAY_CONTROL: InjectionToken<OverlayControl>;
|
|
45
|
+
|
|
46
|
+
declare class OverlayService {
|
|
47
|
+
private popoverState;
|
|
48
|
+
popoverState$: rxjs.Observable<OverlayData | null>;
|
|
49
|
+
/**
|
|
50
|
+
* Broadcasts a command to open a popover using the OverlayData structure.
|
|
51
|
+
*/
|
|
52
|
+
open(config: OverlayData['config'], trigger: OverlayData['trigger']): void;
|
|
53
|
+
/**
|
|
54
|
+
* Broadcasts a command to close any currently open service-controlled popover.
|
|
55
|
+
*/
|
|
56
|
+
close(): void;
|
|
57
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<OverlayService, never>;
|
|
58
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<OverlayService>;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
type PopoverPlacement = 'top' | 'bottom' | 'left' | 'right';
|
|
62
|
+
type PopoverAnimation = 'fade' | 'scale';
|
|
63
|
+
type ChartType = 'doughnut' | 'pie' | 'bar';
|
|
64
|
+
interface ChartModel {
|
|
65
|
+
chartType: ChartType;
|
|
66
|
+
data: any;
|
|
67
|
+
}
|
|
68
|
+
declare class RuclibOverlayComponent implements OnInit, OnDestroy {
|
|
69
|
+
private overlay;
|
|
70
|
+
private injector;
|
|
71
|
+
private overlayService;
|
|
72
|
+
buttonText?: string;
|
|
73
|
+
rucInputData: OverlayConfig;
|
|
74
|
+
customTheme: string;
|
|
75
|
+
private triggerButtonRef;
|
|
76
|
+
private overlayRef;
|
|
77
|
+
private serviceSubscription;
|
|
78
|
+
private closeTimeout?;
|
|
79
|
+
private lastTriggerElement?;
|
|
80
|
+
private positionSubscription;
|
|
81
|
+
constructor(overlay: Overlay, injector: Injector, overlayService: OverlayService);
|
|
82
|
+
ngOnInit(): void;
|
|
83
|
+
ngOnDestroy(): void;
|
|
84
|
+
get isOpen(): boolean;
|
|
85
|
+
toggle(): void;
|
|
86
|
+
handleMouseEnter(): void;
|
|
87
|
+
handleMouseLeave(): void;
|
|
88
|
+
private show;
|
|
89
|
+
private destroy;
|
|
90
|
+
private getPlacementFromPosition;
|
|
91
|
+
private createPositionStrategy;
|
|
92
|
+
onEscape(): void;
|
|
93
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RuclibOverlayComponent, never>;
|
|
94
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RuclibOverlayComponent, "uxp-ruclib-overlay", never, { "buttonText": { "alias": "buttonText"; "required": false; }; "rucInputData": { "alias": "rucInputData"; "required": false; }; "customTheme": { "alias": "customTheme"; "required": false; }; }, {}, never, never, true, never>;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
declare class OverlayContentComponent implements OnInit {
|
|
98
|
+
control: OverlayControl;
|
|
99
|
+
actualPlacement: string | PopoverPlacement;
|
|
100
|
+
tableHeaders: any[];
|
|
101
|
+
customTheme: string;
|
|
102
|
+
arrowOffset: number;
|
|
103
|
+
mouseEnterPopover: EventEmitter<void>;
|
|
104
|
+
mouseLeavePopover: EventEmitter<void>;
|
|
105
|
+
ngOnInit(): void;
|
|
106
|
+
get animationState(): "enter-scale" | "enter-fade";
|
|
107
|
+
constructor(control: OverlayControl);
|
|
108
|
+
isTemplateRef(content: any): content is TemplateRef<any>;
|
|
109
|
+
getTableHeaders(): void;
|
|
110
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<OverlayContentComponent, never>;
|
|
111
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<OverlayContentComponent, "uxp-overlay-content", never, { "customTheme": { "alias": "customTheme"; "required": false; }; }, { "mouseEnterPopover": "mouseEnterPopover"; "mouseLeavePopover": "mouseLeavePopover"; }, never, never, true, never>;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export { OVERLAY_CONTROL, OverlayContentComponent, OverlayService, RuclibOverlayComponent };
|
|
115
|
+
export type { ChartModel, ChartType, OverlayConfig, OverlayControl, OverlayData, PopoverAnimation, PopoverPlacement };
|
package/package.json
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ruc-lib/overlay",
|
|
3
|
-
"version": "
|
|
4
|
-
"license": "MIT",
|
|
3
|
+
"version": "3.1.0",
|
|
5
4
|
"peerDependencies": {
|
|
6
|
-
"@angular/
|
|
7
|
-
"@angular/
|
|
8
|
-
"@angular/material": "^15.
|
|
9
|
-
"@angular/animations": "
|
|
10
|
-
"chart.js": "^4.4.6"
|
|
5
|
+
"@angular/common": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
|
|
6
|
+
"@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
|
|
7
|
+
"@angular/material": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
|
|
8
|
+
"@angular/animations": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0"
|
|
11
9
|
},
|
|
12
10
|
"dependencies": {
|
|
13
|
-
"tslib": "^2.3.0"
|
|
14
|
-
|
|
15
|
-
"publishConfig": {
|
|
16
|
-
"access": "public"
|
|
11
|
+
"tslib": "^2.3.0",
|
|
12
|
+
"chart.js": "^4.5.0"
|
|
17
13
|
},
|
|
18
14
|
"sideEffects": false,
|
|
19
|
-
"module": "
|
|
20
|
-
"es2020": "fesm2020/ruc-lib-overlay.mjs",
|
|
21
|
-
"esm2020": "esm2020/ruc-lib-overlay.mjs",
|
|
22
|
-
"fesm2020": "fesm2020/ruc-lib-overlay.mjs",
|
|
23
|
-
"fesm2015": "fesm2015/ruc-lib-overlay.mjs",
|
|
15
|
+
"module": "fesm2022/ruc-lib-overlay.mjs",
|
|
24
16
|
"typings": "index.d.ts",
|
|
25
17
|
"exports": {
|
|
26
18
|
"./package.json": {
|
|
@@ -28,11 +20,7 @@
|
|
|
28
20
|
},
|
|
29
21
|
".": {
|
|
30
22
|
"types": "./index.d.ts",
|
|
31
|
-
"
|
|
32
|
-
"es2020": "./fesm2020/ruc-lib-overlay.mjs",
|
|
33
|
-
"es2015": "./fesm2015/ruc-lib-overlay.mjs",
|
|
34
|
-
"node": "./fesm2015/ruc-lib-overlay.mjs",
|
|
35
|
-
"default": "./fesm2020/ruc-lib-overlay.mjs"
|
|
23
|
+
"default": "./fesm2022/ruc-lib-overlay.mjs"
|
|
36
24
|
}
|
|
37
25
|
}
|
|
38
26
|
}
|
package/esm2020/index.mjs
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export * from './lib/ruclib-overlay.module';
|
|
2
|
-
export * from './lib/ruc-overlay-chart/ruc-overlay-chart.component';
|
|
3
|
-
export * from './lib/service/overlay.service';
|
|
4
|
-
export * from './lib/model/overlay.types';
|
|
5
|
-
export * from './lib/overlay-content/overlay-content.component';
|
|
6
|
-
export * from './lib/ruclib-overlay/ruclib-overlay.component';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsK0NBQStDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9ydWNsaWItb3ZlcmxheS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9ydWMtb3ZlcmxheS1jaGFydC9ydWMtb3ZlcmxheS1jaGFydC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlL292ZXJsYXkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVsL292ZXJsYXkudHlwZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9vdmVybGF5LWNvbnRlbnQvb3ZlcmxheS1jb250ZW50LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3J1Y2xpYi1vdmVybGF5L3J1Y2xpYi1vdmVybGF5LmNvbXBvbmVudCc7XHJcbiJdfQ==
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export const positions = [
|
|
2
|
-
{ originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 10 },
|
|
3
|
-
{ originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -10 },
|
|
4
|
-
{ originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 10 },
|
|
5
|
-
{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -10 }
|
|
6
|
-
];
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMvcG9zaXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBd0I7SUFDeEMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7SUFDMUYsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUMzRixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtJQUN6RixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQzNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBvc2l0aW9uczogQ29ubmVjdGVkUG9zaXRpb25bXSA9IFtcclxuICAgICAgeyBvcmlnaW5YOiAnY2VudGVyJywgb3JpZ2luWTogJ2JvdHRvbScsIG92ZXJsYXlYOiAnY2VudGVyJywgb3ZlcmxheVk6ICd0b3AnLCBvZmZzZXRZOiAxMCB9LFxyXG4gICAgICB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFk6IC0xMCB9LFxyXG4gICAgICB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAnY2VudGVyJywgb2Zmc2V0WDogMTAgfSxcclxuICAgICAgeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2NlbnRlcicsIG9mZnNldFg6IC0xMCB9XHJcbiAgICBdO1xyXG4iXX0=
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
/**
|
|
3
|
-
* The Injection Token used to provide the PopoverControl object to the
|
|
4
|
-
* PopoverContentComponent. This is the correct, final version.
|
|
5
|
-
*/
|
|
6
|
-
export const OVERLAY_CONTROL = new InjectionToken('OVERLAY_CONTROL');
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbW9kZWwvb3ZlcmxheS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBdUM1RDs7O0VBR0U7QUFDRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQWlCLGlCQUFpQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4qIERlZmluZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGEgdXNlciBjYW4gcGFzcyB0byB0aGUgcG9wb3Zlci5cclxuKiBUaGlzIGlzIHRoZSBwdWJsaWMgQVBJIG9mIHlvdXIgY29tcG9uZW50LlxyXG4qL1xyXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJsYXlDb25maWcge1xyXG4gIHBsYWNlbWVudD86ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnIHwgc3RyaW5nO1xyXG4gIG92ZXJsYXlUaXRsZT86IHN0cmluZztcclxuICBjb250ZW50Pzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcclxuICBhbmltYXRpb24/OiAnZmFkZScgfCAnc2NhbGUnO1xyXG4gIHRyaWdnZXI/OiAnY2xpY2snIHwgJ2hvdmVyJztcclxuICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xyXG4gIGNsb3NlSWNvbj86IHN0cmluZztcclxuICB0YWJsZURhdGE/OiBhbnlbXTtcclxuICB0YWJsZUNsYXNzPzogc3RyaW5nO1xyXG4gIGNsb3NlRGVsYXk/Om51bWJlcixcclxuICBjaGFydENvbmZpZz86YW55XHJcbn1cclxuXHJcbi8qKlxyXG4qIERlZmluZXMgdGhlIGRhdGEgcGFja2V0IHRoYXQgdGhlIFBvcG92ZXJTZXJ2aWNlIHNlbmRzLlxyXG4qIEl0IGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIEFORCB0aGUgZWxlbWVudCB0byBwb3NpdGlvbiBhZ2FpbnN0LlxyXG4qIFRISVMgSVMgVEhFIE9ORSBUSEUgU0VSVklDRSBVU0VTLlxyXG4qL1xyXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJsYXlEYXRhIHtcclxuICBjb25maWc6IE92ZXJsYXlDb25maWc7XHJcbiAgdHJpZ2dlcjogSFRNTEVsZW1lbnQ7XHJcbn1cclxuXHJcbi8qKlxyXG4qIERlZmluZXMgdGhlIGRhdGEgYW5kIGNvbnRyb2xzIHBhc3NlZCB0byB0aGUgZHluYW1pY2FsbHkgY3JlYXRlZCBQb3BvdmVyQ29udGVudENvbXBvbmVudC5cclxuKiBJdCBpbmNsdWRlcyB0aGUgY29uZmlnIEFORCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBwb3BvdmVyLlxyXG4qL1xyXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJsYXlDb250cm9sIHtcclxuICBjb25maWc6IE92ZXJsYXlDb25maWc7XHJcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4qIFRoZSBJbmplY3Rpb24gVG9rZW4gdXNlZCB0byBwcm92aWRlIHRoZSBQb3BvdmVyQ29udHJvbCBvYmplY3QgdG8gdGhlXHJcbiogUG9wb3ZlckNvbnRlbnRDb21wb25lbnQuIFRoaXMgaXMgdGhlIGNvcnJlY3QsIGZpbmFsIHZlcnNpb24uXHJcbiovXHJcbmV4cG9ydCBjb25zdCBPVkVSTEFZX0NPTlRST0wgPSBuZXcgSW5qZWN0aW9uVG9rZW48T3ZlcmxheUNvbnRyb2w+KCdPVkVSTEFZX0NPTlRST0wnKTtcclxuIl19
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, HostBinding, Inject, Input, Output, TemplateRef, } from '@angular/core';
|
|
2
|
-
import { animate, state, style, transition, trigger, } from '@angular/animations';
|
|
3
|
-
import { OVERLAY_CONTROL } from '../model/overlay.types';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
import * as i2 from "@angular/material/icon";
|
|
7
|
-
import * as i3 from "@angular/material/button";
|
|
8
|
-
import * as i4 from "@angular/material/card";
|
|
9
|
-
import * as i5 from "../ruc-overlay-chart/ruc-overlay-chart.component";
|
|
10
|
-
export class OverlayContentComponent {
|
|
11
|
-
ngOnInit() {
|
|
12
|
-
if (this.control.config.tableData) {
|
|
13
|
-
this.getTableHeaders();
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
get animationState() {
|
|
17
|
-
return this.control.config.animation === 'scale'
|
|
18
|
-
? 'enter-scale'
|
|
19
|
-
: 'enter-fade';
|
|
20
|
-
}
|
|
21
|
-
constructor(control) {
|
|
22
|
-
this.control = control;
|
|
23
|
-
this.actualPlacement = 'bottom';
|
|
24
|
-
this.tableHeaders = [];
|
|
25
|
-
this.arrowOffset = 0;
|
|
26
|
-
this.mouseEnterPopover = new EventEmitter();
|
|
27
|
-
this.mouseLeavePopover = new EventEmitter();
|
|
28
|
-
this.actualPlacement = this.control.config.placement || 'bottom';
|
|
29
|
-
}
|
|
30
|
-
// Helper to check if content is a TemplateRef
|
|
31
|
-
isTemplateRef(content) {
|
|
32
|
-
return content instanceof TemplateRef;
|
|
33
|
-
}
|
|
34
|
-
// Helper to get keys for the table header, robustly
|
|
35
|
-
getTableHeaders() {
|
|
36
|
-
const tempData = this.control.config.tableData;
|
|
37
|
-
if (!tempData || tempData.length === 0) {
|
|
38
|
-
this.tableHeaders = [];
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
// Assumes all objects in the array have the same shape
|
|
42
|
-
this.tableHeaders = Object.keys(tempData[0]);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
OverlayContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OverlayContentComponent, deps: [{ token: OVERLAY_CONTROL }], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
-
OverlayContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OverlayContentComponent, selector: "uxp-overlay-content", inputs: { customTheme: "customTheme" }, outputs: { mouseEnterPopover: "mouseEnterPopover", mouseLeavePopover: "mouseLeavePopover" }, host: { properties: { "@popoverAnimation": "this.animationState" } }, ngImport: i0, template: "<mat-card class=\"popover-container\" class={{customTheme}} (click)=\"$event.stopPropagation()\">\r\n\r\n <div class=\"popover-arrow\"\r\n[attr.data-placement]=\"actualPlacement\"\r\n [style.left.px]=\"(actualPlacement.startsWith('top') || actualPlacement.startsWith('bottom')) ? arrowOffset : null\"\r\n[style.top.px]=\"(actualPlacement.startsWith('left') || actualPlacement.startsWith('right')) ? arrowOffset : null\">\r\n </div>\r\n <!-- Header with optional title and close button -->\r\n\r\n <mat-card-header *ngIf=\"\r\n control.config.overlayTitle ||\r\n control.config.showCloseButton ||\r\n control.config.closeIcon\r\n \"\r\n class=\"popover-header\"\r\n >\r\n <mat-card-title class=\"popover-title\" *ngIf=\"control.config.overlayTitle\">{{ control.config.overlayTitle }}</mat-card-title>\r\n <ng-container *ngIf=\"control.config.showCloseButton && control.config.closeIcon\">\r\n <button mat-icon-button class=\"close-btn\" (click)=\"control.close()\" color=\"primary\" aria-label=\"Close popover icon\">\r\n <mat-icon>{{ control.config.closeIcon }}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </mat-card-header>\r\n\r\n\r\n <!-- Body with dynamic content -->\r\n <mat-card-content class=\"popover-body\">\r\n <!-- Case 1: Content is a simple string -->\r\n <ng-container\r\n *ngIf=\"\r\n !isTemplateRef(control.config.content) && !control.config.tableData\r\n \"\r\n >\r\n {{ control.config.content }}\r\n </ng-container>\r\n\r\n <!-- Case 2: Content is a TemplateRef -->\r\n <ng-container *ngIf=\"isTemplateRef(control.config.content)\">\r\n <ng-container *ngTemplateOutlet=\"control.config.content\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"control.config.chartConfig\">\r\n\r\n <uxp-ruc-overlay-chart [chartConfig]=\"control.config.chartConfig\"></uxp-ruc-overlay-chart>\r\n </ng-container>\r\n\r\n <!-- Case 3: Content is table data -->\r\n <ng-container *ngIf=\"control.config.tableData?.length\">\r\n <table\r\n class=\"popover-table\"\r\n [class]=\"control.config.tableClass || 'basic-table'\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n *ngFor=\"let header of this.tableHeaders!\"\r\n >\r\n {{ header }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of control.config.tableData\">\r\n <td\r\n *ngFor=\"let header of this.tableHeaders!\"\r\n >\r\n {{ row[header] }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </mat-card-content>\r\n</mat-card>\r\n", styles: [":host{display:block}.popover-container{z-index:1080;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px #0003;position:relative;max-width:300px}.popover-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;border-width:10px}.close-btn .mat-mdc-icon-button.mat-mdc-button-base{width:30px;height:30px;padding:2px}.popover-title{font-size:16px;font-weight:600}.mat-card-header.mat-mdc-card-header.popover-header .mat-mdc-card-header-text .mat-card-title.mat-mdc-card-title{font-size:16px}button.close-btn.mdc-icon-button.mat-mdc-icon-button.mat-mdc-button-base{width:30px;height:30px;padding:2px}.popover-arrow[data-placement^=bottom]{top:-10px;transform:translate(-50%);border-width:0 10px 10px 10px;border-bottom-color:#fff;filter:drop-shadow(0 -1px 1px rgba(0,0,0,.15))}.popover-arrow[data-placement^=top]{bottom:-10px;transform:translate(-50%);border-width:10px 10px 0 10px;border-top-color:#fff;filter:drop-shadow(0 1px 1px rgba(0,0,0,.15))}.popover-arrow[data-placement^=right]{left:-10px;transform:translateY(-50%);border-width:10px 10px 10px 0;border-right-color:#fff;filter:drop-shadow(-1px 0 1px rgba(0,0,0,.15))}.popover-arrow[data-placement^=left]{right:-10px;transform:translateY(-50%);border-width:10px 0 10px 10px;border-left-color:#fff;filter:drop-shadow(1px 0 1px rgba(0,0,0,.15))}.popover-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;margin:0;font-size:1rem;border-bottom:1px solid #dcdcdc;border-radius:5px 5px 0 0}.popover-header h3{margin:0;font-size:1rem}.popover-body{padding:9px 14px}.popover-table{width:100%;border-collapse:collapse;margin-top:5px}.popover-table th,.popover-table td{border:1px solid #ddd;padding:8px;text-align:left}.popover-table th{text-transform:capitalize}.striped-table{width:100%;border-collapse:collapse;font-size:.9em}.striped-table th,.striped-table td{border:1px solid #ddd;padding:8px;text-align:left}.striped-table thead th{font-weight:700}.striped-table tbody tr:nth-child(even){background-color:#00000061}.basic-table{width:100%;border-collapse:collapse;font-size:.9em}.basic-table th,.basic-table td{border:1px solid #ddd;padding:8px;text-align:left}.basic-table thead th{font-weight:700}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i4.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i5.RucOverlayChartComponent, selector: "uxp-ruc-overlay-chart", inputs: ["index", "chartConfig"] }], animations: [
|
|
47
|
-
trigger('popoverAnimation', [
|
|
48
|
-
state('void', style({ transform: 'scale(0.9)', opacity: 0 })),
|
|
49
|
-
state('enter-scale', style({ transform: 'scale(1)', opacity: 1 })),
|
|
50
|
-
state('enter-fade', style({ opacity: 1 })),
|
|
51
|
-
transition('void => enter-scale', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),
|
|
52
|
-
transition('void => enter-fade', [
|
|
53
|
-
style({ opacity: 0, transform: 'translateY(10px)' }),
|
|
54
|
-
animate('500ms', style({ opacity: 1, transform: 'translateY(0)' })),
|
|
55
|
-
]),
|
|
56
|
-
transition('* => void', [
|
|
57
|
-
animate('500ms', style({ opacity: 0, transform: 'translateY(10px)' })),
|
|
58
|
-
]),
|
|
59
|
-
]),
|
|
60
|
-
] });
|
|
61
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OverlayContentComponent, decorators: [{
|
|
62
|
-
type: Component,
|
|
63
|
-
args: [{ selector: 'uxp-overlay-content', animations: [
|
|
64
|
-
trigger('popoverAnimation', [
|
|
65
|
-
state('void', style({ transform: 'scale(0.9)', opacity: 0 })),
|
|
66
|
-
state('enter-scale', style({ transform: 'scale(1)', opacity: 1 })),
|
|
67
|
-
state('enter-fade', style({ opacity: 1 })),
|
|
68
|
-
transition('void => enter-scale', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),
|
|
69
|
-
transition('void => enter-fade', [
|
|
70
|
-
style({ opacity: 0, transform: 'translateY(10px)' }),
|
|
71
|
-
animate('500ms', style({ opacity: 1, transform: 'translateY(0)' })),
|
|
72
|
-
]),
|
|
73
|
-
transition('* => void', [
|
|
74
|
-
animate('500ms', style({ opacity: 0, transform: 'translateY(10px)' })),
|
|
75
|
-
]),
|
|
76
|
-
]),
|
|
77
|
-
], template: "<mat-card class=\"popover-container\" class={{customTheme}} (click)=\"$event.stopPropagation()\">\r\n\r\n <div class=\"popover-arrow\"\r\n[attr.data-placement]=\"actualPlacement\"\r\n [style.left.px]=\"(actualPlacement.startsWith('top') || actualPlacement.startsWith('bottom')) ? arrowOffset : null\"\r\n[style.top.px]=\"(actualPlacement.startsWith('left') || actualPlacement.startsWith('right')) ? arrowOffset : null\">\r\n </div>\r\n <!-- Header with optional title and close button -->\r\n\r\n <mat-card-header *ngIf=\"\r\n control.config.overlayTitle ||\r\n control.config.showCloseButton ||\r\n control.config.closeIcon\r\n \"\r\n class=\"popover-header\"\r\n >\r\n <mat-card-title class=\"popover-title\" *ngIf=\"control.config.overlayTitle\">{{ control.config.overlayTitle }}</mat-card-title>\r\n <ng-container *ngIf=\"control.config.showCloseButton && control.config.closeIcon\">\r\n <button mat-icon-button class=\"close-btn\" (click)=\"control.close()\" color=\"primary\" aria-label=\"Close popover icon\">\r\n <mat-icon>{{ control.config.closeIcon }}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </mat-card-header>\r\n\r\n\r\n <!-- Body with dynamic content -->\r\n <mat-card-content class=\"popover-body\">\r\n <!-- Case 1: Content is a simple string -->\r\n <ng-container\r\n *ngIf=\"\r\n !isTemplateRef(control.config.content) && !control.config.tableData\r\n \"\r\n >\r\n {{ control.config.content }}\r\n </ng-container>\r\n\r\n <!-- Case 2: Content is a TemplateRef -->\r\n <ng-container *ngIf=\"isTemplateRef(control.config.content)\">\r\n <ng-container *ngTemplateOutlet=\"control.config.content\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"control.config.chartConfig\">\r\n\r\n <uxp-ruc-overlay-chart [chartConfig]=\"control.config.chartConfig\"></uxp-ruc-overlay-chart>\r\n </ng-container>\r\n\r\n <!-- Case 3: Content is table data -->\r\n <ng-container *ngIf=\"control.config.tableData?.length\">\r\n <table\r\n class=\"popover-table\"\r\n [class]=\"control.config.tableClass || 'basic-table'\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n *ngFor=\"let header of this.tableHeaders!\"\r\n >\r\n {{ header }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of control.config.tableData\">\r\n <td\r\n *ngFor=\"let header of this.tableHeaders!\"\r\n >\r\n {{ row[header] }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </mat-card-content>\r\n</mat-card>\r\n", styles: [":host{display:block}.popover-container{z-index:1080;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px #0003;position:relative;max-width:300px}.popover-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;border-width:10px}.close-btn .mat-mdc-icon-button.mat-mdc-button-base{width:30px;height:30px;padding:2px}.popover-title{font-size:16px;font-weight:600}.mat-card-header.mat-mdc-card-header.popover-header .mat-mdc-card-header-text .mat-card-title.mat-mdc-card-title{font-size:16px}button.close-btn.mdc-icon-button.mat-mdc-icon-button.mat-mdc-button-base{width:30px;height:30px;padding:2px}.popover-arrow[data-placement^=bottom]{top:-10px;transform:translate(-50%);border-width:0 10px 10px 10px;border-bottom-color:#fff;filter:drop-shadow(0 -1px 1px rgba(0,0,0,.15))}.popover-arrow[data-placement^=top]{bottom:-10px;transform:translate(-50%);border-width:10px 10px 0 10px;border-top-color:#fff;filter:drop-shadow(0 1px 1px rgba(0,0,0,.15))}.popover-arrow[data-placement^=right]{left:-10px;transform:translateY(-50%);border-width:10px 10px 10px 0;border-right-color:#fff;filter:drop-shadow(-1px 0 1px rgba(0,0,0,.15))}.popover-arrow[data-placement^=left]{right:-10px;transform:translateY(-50%);border-width:10px 0 10px 10px;border-left-color:#fff;filter:drop-shadow(1px 0 1px rgba(0,0,0,.15))}.popover-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;margin:0;font-size:1rem;border-bottom:1px solid #dcdcdc;border-radius:5px 5px 0 0}.popover-header h3{margin:0;font-size:1rem}.popover-body{padding:9px 14px}.popover-table{width:100%;border-collapse:collapse;margin-top:5px}.popover-table th,.popover-table td{border:1px solid #ddd;padding:8px;text-align:left}.popover-table th{text-transform:capitalize}.striped-table{width:100%;border-collapse:collapse;font-size:.9em}.striped-table th,.striped-table td{border:1px solid #ddd;padding:8px;text-align:left}.striped-table thead th{font-weight:700}.striped-table tbody tr:nth-child(even){background-color:#00000061}.basic-table{width:100%;border-collapse:collapse;font-size:.9em}.basic-table th,.basic-table td{border:1px solid #ddd;padding:8px;text-align:left}.basic-table thead th{font-weight:700}\n"] }]
|
|
78
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
79
|
-
type: Inject,
|
|
80
|
-
args: [OVERLAY_CONTROL]
|
|
81
|
-
}] }]; }, propDecorators: { customTheme: [{
|
|
82
|
-
type: Input
|
|
83
|
-
}], mouseEnterPopover: [{
|
|
84
|
-
type: Output
|
|
85
|
-
}], mouseLeavePopover: [{
|
|
86
|
-
type: Output
|
|
87
|
-
}], animationState: [{
|
|
88
|
-
type: HostBinding,
|
|
89
|
-
args: ['@popoverAnimation']
|
|
90
|
-
}] } });
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvb3ZlcmxheS1jb250ZW50L292ZXJsYXktY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL292ZXJsYXktY29udGVudC9vdmVybGF5LWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQTJCekQsTUFBTSxPQUFPLHVCQUF1QjtJQVVsQyxRQUFRO1FBQ04sSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELElBQ0ksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxPQUFPO1lBQzlDLENBQUMsQ0FBQyxhQUFhO1lBQ2YsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFBNEMsT0FBdUI7UUFBdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUF0QjVELG9CQUFlLEdBQThCLFFBQVEsQ0FBQztRQUN0RCxpQkFBWSxHQUFPLEVBQUUsQ0FBQztRQUVyQixnQkFBVyxHQUFFLENBQUMsQ0FBQztRQUViLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDN0Ms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QUMsQ0FBQzs2QkFDcEUsQ0FBQzs0QkFDRixVQUFVLENBQUMsV0FBVyxFQUFFO2dDQUN0QixPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQzs2QkFDdkUsQ0FBQzt5QkFDSCxDQUFDO3FCQUNIOzswQkEwQlksTUFBTTsyQkFBQyxlQUFlOzRDQXBCekIsV0FBVztzQkFBbkIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQVVILGNBQWM7c0JBRGpCLFdBQVc7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheUNvbnRyb2wgfSBmcm9tICcuLy4uL21vZGVsL292ZXJsYXkudHlwZXMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIGFuaW1hdGUsXHJcbiAgc3RhdGUsXHJcbiAgc3R5bGUsXHJcbiAgdHJhbnNpdGlvbixcclxuICB0cmlnZ2VyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBPVkVSTEFZX0NPTlRST0wgfSBmcm9tICcuLi9tb2RlbC9vdmVybGF5LnR5cGVzJztcclxuaW1wb3J0IHsgUG9wb3ZlclBsYWNlbWVudCB9IGZyb20gJy4uL3J1Y2xpYi1vdmVybGF5L3J1Y2xpYi1vdmVybGF5LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3V4cC1vdmVybGF5LWNvbnRlbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vdmVybGF5LWNvbnRlbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL292ZXJsYXktY29udGVudC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ3BvcG92ZXJBbmltYXRpb24nLCBbXHJcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgwLjkpJywgb3BhY2l0eTogMCB9KSksXHJcbiAgICAgIHN0YXRlKCdlbnRlci1zY2FsZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGUoMSknLCBvcGFjaXR5OiAxIH0pKSxcclxuICAgICAgc3RhdGUoJ2VudGVyLWZhZGUnLCBzdHlsZSh7IG9wYWNpdHk6IDEgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKFxyXG4gICAgICAgICd2b2lkID0+IGVudGVyLXNjYWxlJyxcclxuICAgICAgICBhbmltYXRlKCcxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKScpXHJcbiAgICAgICksXHJcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gZW50ZXItZmFkZScsIFtcclxuICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTBweCknIH0pLFxyXG4gICAgICAgIGFuaW1hdGUoJzUwMG1zJywgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyB9KSksXHJcbiAgICAgIF0pLFxyXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXHJcbiAgICAgICAgYW5pbWF0ZSgnNTAwbXMnLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTBweCknIH0pKSxcclxuICAgICAgXSksXHJcbiAgICBdKSxcclxuICBdLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE92ZXJsYXlDb250ZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgYWN0dWFsUGxhY2VtZW50OiBzdHJpbmcgfCBQb3BvdmVyUGxhY2VtZW50ID0gJ2JvdHRvbSc7XHJcbiAgcHVibGljIHRhYmxlSGVhZGVyczphbnlbXT1bXTtcclxuICAgQElucHV0KCkgY3VzdG9tVGhlbWUhOnN0cmluZztcclxuICAgcHVibGljIGFycm93T2Zmc2V0ID0wO1xyXG5cclxuICBAT3V0cHV0KCkgbW91c2VFbnRlclBvcG92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG1vdXNlTGVhdmVQb3BvdmVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZih0aGlzLmNvbnRyb2wuY29uZmlnLnRhYmxlRGF0YSkge1xyXG4gICAgICAgIHRoaXMuZ2V0VGFibGVIZWFkZXJzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ0Bwb3BvdmVyQW5pbWF0aW9uJylcclxuICBnZXQgYW5pbWF0aW9uU3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9sLmNvbmZpZy5hbmltYXRpb24gPT09ICdzY2FsZSdcclxuICAgICAgPyAnZW50ZXItc2NhbGUnXHJcbiAgICAgIDogJ2VudGVyLWZhZGUnO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChPVkVSTEFZX0NPTlRST0wpIHB1YmxpYyBjb250cm9sOiBPdmVybGF5Q29udHJvbCkge1xyXG4gICAgdGhpcy5hY3R1YWxQbGFjZW1lbnQgPSB0aGlzLmNvbnRyb2wuY29uZmlnLnBsYWNlbWVudCB8fCAnYm90dG9tJztcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciB0byBjaGVjayBpZiBjb250ZW50IGlzIGEgVGVtcGxhdGVSZWZcclxuICBpc1RlbXBsYXRlUmVmKGNvbnRlbnQ6IGFueSk6IGNvbnRlbnQgaXMgVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICByZXR1cm4gY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xyXG4gIH1cclxuXHJcbiAgLy8gSGVscGVyIHRvIGdldCBrZXlzIGZvciB0aGUgdGFibGUgaGVhZGVyLCByb2J1c3RseVxyXG4gIGdldFRhYmxlSGVhZGVycygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRlbXBEYXRhID0gdGhpcy5jb250cm9sLmNvbmZpZy50YWJsZURhdGE7XHJcblxyXG4gICAgaWYgKCF0ZW1wRGF0YSB8fCB0ZW1wRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy50YWJsZUhlYWRlcnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQXNzdW1lcyBhbGwgb2JqZWN0cyBpbiB0aGUgYXJyYXkgaGF2ZSB0aGUgc2FtZSBzaGFwZVxyXG4gICAgdGhpcy50YWJsZUhlYWRlcnMgPSBPYmplY3Qua2V5cyh0ZW1wRGF0YVswXSk7XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtY2FyZCBjbGFzcz1cInBvcG92ZXItY29udGFpbmVyXCIgY2xhc3M9e3tjdXN0b21UaGVtZX19IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci1hcnJvd1wiXHJcblthdHRyLmRhdGEtcGxhY2VtZW50XT1cImFjdHVhbFBsYWNlbWVudFwiXHJcbiAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIihhY3R1YWxQbGFjZW1lbnQuc3RhcnRzV2l0aCgndG9wJykgfHwgYWN0dWFsUGxhY2VtZW50LnN0YXJ0c1dpdGgoJ2JvdHRvbScpKSA/IGFycm93T2Zmc2V0IDogbnVsbFwiXHJcbltzdHlsZS50b3AucHhdPVwiKGFjdHVhbFBsYWNlbWVudC5zdGFydHNXaXRoKCdsZWZ0JykgfHwgYWN0dWFsUGxhY2VtZW50LnN0YXJ0c1dpdGgoJ3JpZ2h0JykpID8gYXJyb3dPZmZzZXQgOiBudWxsXCI+XHJcbiAgICA8L2Rpdj5cclxuICA8IS0tIEhlYWRlciB3aXRoIG9wdGlvbmFsIHRpdGxlIGFuZCBjbG9zZSBidXR0b24gLS0+XHJcblxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgICpuZ0lmPVwiXHJcbiAgICAgIGNvbnRyb2wuY29uZmlnLm92ZXJsYXlUaXRsZSB8fFxyXG4gICAgICBjb250cm9sLmNvbmZpZy5zaG93Q2xvc2VCdXR0b24gfHxcclxuICAgICAgY29udHJvbC5jb25maWcuY2xvc2VJY29uXHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiXHJcbiAgPlxyXG4gICAgPG1hdC1jYXJkLXRpdGxlIGNsYXNzPVwicG9wb3Zlci10aXRsZVwiICpuZ0lmPVwiY29udHJvbC5jb25maWcub3ZlcmxheVRpdGxlXCI+e3sgY29udHJvbC5jb25maWcub3ZlcmxheVRpdGxlIH19PC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sLmNvbmZpZy5zaG93Q2xvc2VCdXR0b24gJiYgIGNvbnRyb2wuY29uZmlnLmNsb3NlSWNvblwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAgIGNsYXNzPVwiY2xvc2UtYnRuXCIgKGNsaWNrKT1cImNvbnRyb2wuY2xvc2UoKVwiIGNvbG9yPVwicHJpbWFyeVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBwb3BvdmVyIGljb25cIj5cclxuICAgICAgICA8bWF0LWljb24+e3sgY29udHJvbC5jb25maWcuY2xvc2VJY29uIH19PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcblxyXG5cclxuICA8IS0tIEJvZHkgd2l0aCBkeW5hbWljIGNvbnRlbnQgLS0+XHJcbiAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj5cclxuICAgIDwhLS0gQ2FzZSAxOiBDb250ZW50IGlzIGEgc2ltcGxlIHN0cmluZyAtLT5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nSWY9XCJcclxuICAgICAgICAhaXNUZW1wbGF0ZVJlZihjb250cm9sLmNvbmZpZy5jb250ZW50KSAmJiAhY29udHJvbC5jb25maWcudGFibGVEYXRhXHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICAgIHt7IGNvbnRyb2wuY29uZmlnLmNvbnRlbnQgfX1cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gQ2FzZSAyOiBDb250ZW50IGlzIGEgVGVtcGxhdGVSZWYgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUZW1wbGF0ZVJlZihjb250cm9sLmNvbmZpZy5jb250ZW50KVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbC5jb25maWcuY29udGVudFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRyb2wuY29uZmlnLmNoYXJ0Q29uZmlnXCI+XHJcblxyXG4gICAgICA8dXhwLXJ1Yy1vdmVybGF5LWNoYXJ0ICBbY2hhcnRDb25maWddPVwiY29udHJvbC5jb25maWcuY2hhcnRDb25maWdcIj48L3V4cC1ydWMtb3ZlcmxheS1jaGFydD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gQ2FzZSAzOiBDb250ZW50IGlzIHRhYmxlIGRhdGEgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC5jb25maWcudGFibGVEYXRhPy5sZW5ndGhcIj5cclxuICAgICAgPHRhYmxlXHJcbiAgICAgICAgY2xhc3M9XCJwb3BvdmVyLXRhYmxlXCJcclxuICAgICAgICBbY2xhc3NdPVwiY29udHJvbC5jb25maWcudGFibGVDbGFzcyB8fCAnYmFzaWMtdGFibGUnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0aGlzLnRhYmxlSGVhZGVycyFcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgaGVhZGVyIH19XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgY29udHJvbC5jb25maWcudGFibGVEYXRhXCI+XHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdGhpcy50YWJsZUhlYWRlcnMhXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt7IHJvd1toZWFkZXJdIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbjwvbWF0LWNhcmQ+XHJcbiJdfQ==
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
-
import Chart from 'chart.js/auto';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class RucOverlayChartComponent {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.index = 0;
|
|
7
|
-
}
|
|
8
|
-
ngAfterViewInit() {
|
|
9
|
-
if (this.chartConfig) {
|
|
10
|
-
this.chart = new Chart('canvas' + this.index, this.chartConfig);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
ngOnDestroy() {
|
|
14
|
-
this.chart?.destroy();
|
|
15
|
-
this.chart = null;
|
|
16
|
-
this.chartConfig = null;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
RucOverlayChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RucOverlayChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20
|
-
RucOverlayChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RucOverlayChartComponent, selector: "uxp-ruc-overlay-chart", inputs: { index: "index", chartConfig: "chartConfig" }, ngImport: i0, template: "<div style=\"position: relative; height:220px;\">\r\n <canvas id=\"canvas{{index}}\">{{chart}}</canvas>\r\n</div>\r\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RucOverlayChartComponent, decorators: [{
|
|
22
|
-
type: Component,
|
|
23
|
-
args: [{ selector: 'uxp-ruc-overlay-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div style=\"position: relative; height:220px;\">\r\n <canvas id=\"canvas{{index}}\">{{chart}}</canvas>\r\n</div>\r\n" }]
|
|
24
|
-
}], propDecorators: { index: [{
|
|
25
|
-
type: Input
|
|
26
|
-
}], chartConfig: [{
|
|
27
|
-
type: Input
|
|
28
|
-
}] } });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVjLW92ZXJsYXktY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9ydWMtb3ZlcmxheS1jaGFydC9ydWMtb3ZlcmxheS1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3J1Yy1vdmVybGF5LWNoYXJ0L3J1Yy1vdmVybGF5LWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssTUFBTSxlQUFlLENBQUM7O0FBT2xDLE1BQU0sT0FBTyx3QkFBd0I7SUFOckM7UUFRVyxVQUFLLEdBQVcsQ0FBQyxDQUFDO0tBYzVCO0lBWEMsZUFBZTtRQUNiLElBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDOztzSEFmVSx3QkFBd0I7MEdBQXhCLHdCQUF3QixxSENkckMsMEhBR0E7NEZEV2Esd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNFLHVCQUF1QixtQkFHaEIsdUJBQXVCLENBQUMsTUFBTTs4QkFJdEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgQ2hhcnQgZnJvbSAnY2hhcnQuanMvYXV0byc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndXhwLXJ1Yy1vdmVybGF5LWNoYXJ0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcnVjLW92ZXJsYXktY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3J1Yy1vdmVybGF5LWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSdWNPdmVybGF5Q2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIGNoYXJ0OiBhbnk7XHJcbiAgQElucHV0KCkgaW5kZXg/Om51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgY2hhcnRDb25maWc6IGFueTtcclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5jaGFydENvbmZpZykge1xyXG4gICAgICB0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KCdjYW52YXMnICsgdGhpcy5pbmRleCwgdGhpcy5jaGFydENvbmZpZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhcnQ/LmRlc3Ryb3koKTtcclxuICAgIHRoaXMuY2hhcnQgPSBudWxsO1xyXG4gICAgdGhpcy5jaGFydENvbmZpZyA9IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDoyMjBweDtcIj5cclxuICAgIDxjYW52YXMgaWQ9XCJjYW52YXN7e2luZGV4fX1cIj57e2NoYXJ0fX08L2NhbnZhcz5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { Overlay, } from '@angular/cdk/overlay';
|
|
2
|
-
import { Component, ElementRef, HostListener, Injector, Input, ViewChild, } from '@angular/core';
|
|
3
|
-
import { OVERLAY_CONTROL, } from '../model/overlay.types';
|
|
4
|
-
import { filter } from 'rxjs';
|
|
5
|
-
import { ComponentPortal } from '@angular/cdk/portal';
|
|
6
|
-
import { OverlayService } from '../service/overlay.service';
|
|
7
|
-
import { OverlayContentComponent } from '../overlay-content/overlay-content.component';
|
|
8
|
-
import { MatButton } from '@angular/material/button';
|
|
9
|
-
import { ESCAPE } from '@angular/cdk/keycodes';
|
|
10
|
-
import { positions } from '../constants/positions';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@angular/cdk/overlay";
|
|
13
|
-
import * as i2 from "../service/overlay.service";
|
|
14
|
-
import * as i3 from "@angular/common";
|
|
15
|
-
import * as i4 from "@angular/material/button";
|
|
16
|
-
export class RuclibOverlayComponent {
|
|
17
|
-
constructor(overlay, injector, overlayService) {
|
|
18
|
-
this.overlay = overlay;
|
|
19
|
-
this.injector = injector;
|
|
20
|
-
this.overlayService = overlayService;
|
|
21
|
-
this.rucInputData = {
|
|
22
|
-
content: 'Default content',
|
|
23
|
-
};
|
|
24
|
-
this.overlayRef = null;
|
|
25
|
-
}
|
|
26
|
-
ngOnInit() {
|
|
27
|
-
if (!this.buttonText) {
|
|
28
|
-
this.serviceSubscription = this.overlayService.popoverState$.subscribe((data) => {
|
|
29
|
-
if (data && !this.isOpen) {
|
|
30
|
-
this.show(data.trigger, data.config);
|
|
31
|
-
}
|
|
32
|
-
else if (!data) {
|
|
33
|
-
this.destroy();
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
ngOnDestroy() {
|
|
39
|
-
this.positionSubscription?.unsubscribe();
|
|
40
|
-
this.serviceSubscription?.unsubscribe();
|
|
41
|
-
this.destroy();
|
|
42
|
-
}
|
|
43
|
-
get isOpen() {
|
|
44
|
-
return !!this.overlayRef;
|
|
45
|
-
}
|
|
46
|
-
// --- Trigger Handlers for self-contained button ---
|
|
47
|
-
toggle() {
|
|
48
|
-
if (this.rucInputData.trigger !== 'hover') {
|
|
49
|
-
this.isOpen
|
|
50
|
-
? this.destroy()
|
|
51
|
-
: this.show(this.triggerButtonRef.nativeElement, this.rucInputData);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
handleMouseEnter() {
|
|
55
|
-
if (this.rucInputData.trigger === 'hover') {
|
|
56
|
-
if (this.closeTimeout)
|
|
57
|
-
clearTimeout(this.closeTimeout); // Clear any pending close command
|
|
58
|
-
this.show(this.triggerButtonRef.nativeElement, this.rucInputData);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
handleMouseLeave() {
|
|
62
|
-
if (this.rucInputData.trigger === 'hover') {
|
|
63
|
-
// Use the configurable closeDelay
|
|
64
|
-
const delay = this.rucInputData.closeDelay ?? 200;
|
|
65
|
-
this.closeTimeout = setTimeout(() => this.destroy(), delay);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
show(trigger, config) {
|
|
69
|
-
if (this.isOpen)
|
|
70
|
-
return;
|
|
71
|
-
const positionStrategy = this.createPositionStrategy(trigger, config.placement || 'bottom');
|
|
72
|
-
this.overlayRef = this.overlay.create({
|
|
73
|
-
positionStrategy,
|
|
74
|
-
hasBackdrop: config.trigger !== 'hover',
|
|
75
|
-
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
76
|
-
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
77
|
-
});
|
|
78
|
-
this.overlayRef.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE)).subscribe(() => this.destroy());
|
|
79
|
-
const control = { config, close: this.destroy.bind(this) };
|
|
80
|
-
const injector = Injector.create({
|
|
81
|
-
parent: this.injector,
|
|
82
|
-
providers: [{ provide: OVERLAY_CONTROL, useValue: control }],
|
|
83
|
-
});
|
|
84
|
-
const portal = new ComponentPortal(OverlayContentComponent, null, injector);
|
|
85
|
-
const componentRef = this.overlayRef.attach(portal);
|
|
86
|
-
componentRef.instance.customTheme = this.customTheme;
|
|
87
|
-
// --- START: MODIFICATION FOR DYNAMIC ARROW ---
|
|
88
|
-
this.positionSubscription = positionStrategy.positionChanges.subscribe((change) => {
|
|
89
|
-
// 1. Get the new placement ('top', 'bottom', etc.)
|
|
90
|
-
const newPlacement = this.getPlacementFromPosition(change.connectionPair);
|
|
91
|
-
componentRef.instance.actualPlacement = newPlacement;
|
|
92
|
-
// 2. Calculate the arrow's offset
|
|
93
|
-
if (this.overlayRef) {
|
|
94
|
-
const triggerRect = trigger.getBoundingClientRect();
|
|
95
|
-
const popoverRect = this.overlayRef.overlayElement.getBoundingClientRect();
|
|
96
|
-
let arrowOffset = 0;
|
|
97
|
-
// If popover is top/bottom, arrow moves horizontally (left)
|
|
98
|
-
if (newPlacement.startsWith('top') ||
|
|
99
|
-
newPlacement.startsWith('bottom')) {
|
|
100
|
-
const triggerCenter = triggerRect.left + triggerRect.width / 2;
|
|
101
|
-
arrowOffset = triggerCenter - popoverRect.left;
|
|
102
|
-
}
|
|
103
|
-
// If popover is left/right, arrow moves vertically (top)
|
|
104
|
-
else {
|
|
105
|
-
const triggerCenter = triggerRect.top + triggerRect.height / 2;
|
|
106
|
-
arrowOffset = triggerCenter - popoverRect.top;
|
|
107
|
-
}
|
|
108
|
-
// 3. Pass the offset to the content component
|
|
109
|
-
componentRef.instance.arrowOffset = arrowOffset;
|
|
110
|
-
}
|
|
111
|
-
componentRef.changeDetectorRef.detectChanges();
|
|
112
|
-
});
|
|
113
|
-
componentRef.instance.mouseEnterPopover.subscribe(() => {
|
|
114
|
-
if (this.closeTimeout)
|
|
115
|
-
clearTimeout(this.closeTimeout);
|
|
116
|
-
});
|
|
117
|
-
componentRef.instance.mouseLeavePopover.subscribe(() => this.handleMouseLeave());
|
|
118
|
-
if (config.trigger !== 'hover') {
|
|
119
|
-
this.overlayRef.backdropClick().subscribe(() => this.destroy());
|
|
120
|
-
}
|
|
121
|
-
const popoverId = `popover-${Math.random().toString(36).substring(2, 9)}`;
|
|
122
|
-
componentRef.location.nativeElement.setAttribute('id', popoverId);
|
|
123
|
-
trigger.setAttribute('aria-describedby', popoverId);
|
|
124
|
-
this.lastTriggerElement = trigger;
|
|
125
|
-
}
|
|
126
|
-
// Renamed from hide() to destroy() for clarity
|
|
127
|
-
destroy() {
|
|
128
|
-
if (!this.overlayRef)
|
|
129
|
-
return; // Prevent multiple calls
|
|
130
|
-
if (this.lastTriggerElement) {
|
|
131
|
-
this.lastTriggerElement.removeAttribute('aria-describedby');
|
|
132
|
-
this.lastTriggerElement = undefined;
|
|
133
|
-
}
|
|
134
|
-
this.positionSubscription?.unsubscribe();
|
|
135
|
-
this.overlayRef.dispose();
|
|
136
|
-
this.overlayRef = null;
|
|
137
|
-
}
|
|
138
|
-
getPlacementFromPosition(position) {
|
|
139
|
-
if (position.originY === 'top' && position.overlayY === 'bottom')
|
|
140
|
-
return 'top';
|
|
141
|
-
if (position.originY === 'bottom' && position.overlayY === 'top')
|
|
142
|
-
return 'bottom';
|
|
143
|
-
if (position.originX === 'start' && position.overlayX === 'end')
|
|
144
|
-
return 'left';
|
|
145
|
-
if (position.originX === 'end' && position.overlayX === 'start')
|
|
146
|
-
return 'right';
|
|
147
|
-
return 'bottom';
|
|
148
|
-
}
|
|
149
|
-
createPositionStrategy(origin, placement) {
|
|
150
|
-
let preferredPosition;
|
|
151
|
-
switch (placement) {
|
|
152
|
-
case 'top':
|
|
153
|
-
preferredPosition = positions[1];
|
|
154
|
-
break;
|
|
155
|
-
case 'right':
|
|
156
|
-
preferredPosition = positions[2];
|
|
157
|
-
break;
|
|
158
|
-
case 'left':
|
|
159
|
-
preferredPosition = positions[3];
|
|
160
|
-
break;
|
|
161
|
-
default:
|
|
162
|
-
preferredPosition = positions[0];
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
return this.overlay
|
|
166
|
-
.position()
|
|
167
|
-
.flexibleConnectedTo(origin)
|
|
168
|
-
.withPositions([preferredPosition, ...positions])
|
|
169
|
-
.withPush(true);
|
|
170
|
-
}
|
|
171
|
-
//Document-level listeners for closing
|
|
172
|
-
onEscape() {
|
|
173
|
-
this.positionSubscription?.unsubscribe();
|
|
174
|
-
this.serviceSubscription?.unsubscribe();
|
|
175
|
-
this.destroy();
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
RuclibOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayComponent, deps: [{ token: i1.Overlay }, { token: i0.Injector }, { token: i2.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
|
|
179
|
-
RuclibOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RuclibOverlayComponent, selector: "uxp-ruclib-overlay", inputs: { buttonText: "buttonText", rucInputData: "rucInputData", customTheme: "customTheme" }, host: { listeners: { "document:keydown:escape": "onEscape()" } }, viewQueries: [{ propertyName: "triggerButtonRef", first: true, predicate: MatButton, descendants: true, read: ElementRef }], ngImport: i0, template: "<button\r\nmat-raised-button\r\n color=\"primary\"\r\n *ngIf=\"buttonText\"\r\n #triggerButton\r\n (click)=\"toggle()\"\r\n (mouseenter)=\"handleMouseEnter()\"\r\n (mouseleave)=\"handleMouseLeave()\"\r\n class=\"popover-trigger-btn\">\r\n {{ buttonText }}\r\n</button>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
|
|
180
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayComponent, decorators: [{
|
|
181
|
-
type: Component,
|
|
182
|
-
args: [{ selector: 'uxp-ruclib-overlay', template: "<button\r\nmat-raised-button\r\n color=\"primary\"\r\n *ngIf=\"buttonText\"\r\n #triggerButton\r\n (click)=\"toggle()\"\r\n (mouseenter)=\"handleMouseEnter()\"\r\n (mouseleave)=\"handleMouseLeave()\"\r\n class=\"popover-trigger-btn\">\r\n {{ buttonText }}\r\n</button>\r\n" }]
|
|
183
|
-
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Injector }, { type: i2.OverlayService }]; }, propDecorators: { buttonText: [{
|
|
184
|
-
type: Input
|
|
185
|
-
}], rucInputData: [{
|
|
186
|
-
type: Input
|
|
187
|
-
}], customTheme: [{
|
|
188
|
-
type: Input
|
|
189
|
-
}], triggerButtonRef: [{
|
|
190
|
-
type: ViewChild,
|
|
191
|
-
args: [MatButton, { read: ElementRef }]
|
|
192
|
-
}], onEscape: [{
|
|
193
|
-
type: HostListener,
|
|
194
|
-
args: ['document:keydown:escape']
|
|
195
|
-
}] } });
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVjbGliLW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9ydWNsaWItb3ZlcmxheS9ydWNsaWItb3ZlcmxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3J1Y2xpYi1vdmVybGF5L3J1Y2xpYi1vdmVybGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxPQUFPLEdBRVIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGVBQWUsR0FJaEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsTUFBTSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFnQm5ELE1BQU0sT0FBTyxzQkFBc0I7SUFnQmpDLFlBQ1UsT0FBZ0IsRUFDaEIsUUFBa0IsRUFDbEIsY0FBOEI7UUFGOUIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpCL0IsaUJBQVksR0FBa0I7WUFDckMsT0FBTyxFQUFFLGlC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QjtrQkFMbEMsU0FBUzsrQkFDRSxvQkFBb0I7a0pBS3JCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdFLGdCQUFnQjtzQkFEdkIsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQXdNMUMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29ubmVjdGVkUG9zaXRpb24sXHJcbiAgQ29ubmVjdGlvblBvc2l0aW9uUGFpcixcclxuICBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgT3ZlcmxheSxcclxuICBPdmVybGF5UmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgT1ZFUkxBWV9DT05UUk9MLFxyXG4gIE92ZXJsYXlDb25maWcsXHJcbiAgT3ZlcmxheUNvbnRyb2wsXHJcbiAgT3ZlcmxheURhdGEsXHJcbn0gZnJvbSAnLi4vbW9kZWwvb3ZlcmxheS50eXBlcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBPdmVybGF5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2Uvb3ZlcmxheS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3ZlcmxheUNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuLi9vdmVybGF5LWNvbnRlbnQvb3ZlcmxheS1jb250ZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IEVTQ0FQRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IHBvc2l0aW9ucyB9IGZyb20gJy4uL2NvbnN0YW50cy9wb3NpdGlvbnMnO1xyXG5cclxuZXhwb3J0IHR5cGUgUG9wb3ZlclBsYWNlbWVudCA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnO1xyXG5leHBvcnQgdHlwZSBQb3BvdmVyQW5pbWF0aW9uID0gJ2ZhZGUnIHwgJ3NjYWxlJztcclxuZXhwb3J0IHR5cGUgQ2hhcnRUeXBlID0gJ2RvdWdobnV0JyB8ICdwaWUnIHwgJ2Jhcic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0TW9kZWwge1xyXG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlO1xyXG4gIGRhdGE6IGFueTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1eHAtcnVjbGliLW92ZXJsYXknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ydWNsaWItb3ZlcmxheS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcnVjbGliLW92ZXJsYXkuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJ1Y2xpYk92ZXJsYXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgYnV0dG9uVGV4dD86IHN0cmluZztcclxuICBASW5wdXQoKSBydWNJbnB1dERhdGE6IE92ZXJsYXlDb25maWcgPSB7XHJcbiAgICBjb250ZW50OiAnRGVmYXVsdCBjb250ZW50JyxcclxuICB9O1xyXG4gIEBJbnB1dCgpIGN1c3RvbVRoZW1lITogc3RyaW5nO1xyXG5cclxuICBAVmlld0NoaWxkKE1hdEJ1dHRvbiwgeyByZWFkOiBFbGVtZW50UmVmIH0pXHJcbiAgcHJpdmF0ZSB0cmlnZ2VyQnV0dG9uUmVmITogRWxlbWVudFJlZjtcclxuXHJcbiAgcHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzZXJ2aWNlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgY2xvc2VUaW1lb3V0PzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47IC8vIFVzZSB0aGUgY29ycmVjdCB0eXBlXHJcbiAgcHJpdmF0ZSBsYXN0VHJpZ2dlckVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIHBvc2l0aW9uU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBvdmVybGF5U2VydmljZTogT3ZlcmxheVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1dHRvblRleHQpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlU3Vic2NyaXB0aW9uID0gdGhpcy5vdmVybGF5U2VydmljZS5wb3BvdmVyU3RhdGUkLnN1YnNjcmliZShcclxuICAgICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YSAmJiAhdGhpcy5pc09wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93KGRhdGEudHJpZ2dlciwgZGF0YS5jb25maWcpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICghZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucG9zaXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLm92ZXJsYXlSZWY7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0gVHJpZ2dlciBIYW5kbGVycyBmb3Igc2VsZi1jb250YWluZWQgYnV0dG9uIC0tLVxyXG4gIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJ1Y0lucHV0RGF0YS50cmlnZ2VyICE9PSAnaG92ZXInKSB7XHJcbiAgICAgIHRoaXMuaXNPcGVuXHJcbiAgICAgICAgPyB0aGlzLmRlc3Ryb3koKVxyXG4gICAgICAgIDogdGhpcy5zaG93KHRoaXMudHJpZ2dlckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLnJ1Y0lucHV0RGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVNb3VzZUVudGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucnVjSW5wdXREYXRhLnRyaWdnZXIgPT09ICdob3ZlcicpIHtcclxuICAgICAgaWYgKHRoaXMuY2xvc2VUaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVvdXQpOyAvLyBDbGVhciBhbnkgcGVuZGluZyBjbG9zZSBjb21tYW5kXHJcbiAgICAgIHRoaXMuc2hvdyh0aGlzLnRyaWdnZXJCdXR0b25SZWYubmF0aXZlRWxlbWVudCwgdGhpcy5ydWNJbnB1dERhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlTW91c2VMZWF2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJ1Y0lucHV0RGF0YS50cmlnZ2VyID09PSAnaG92ZXInKSB7XHJcbiAgICAgIC8vIFVzZSB0aGUgY29uZmlndXJhYmxlIGNsb3NlRGVsYXlcclxuICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLnJ1Y0lucHV0RGF0YS5jbG9zZURlbGF5ID8/IDIwMDtcclxuICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGVzdHJveSgpLCBkZWxheSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3codHJpZ2dlcjogSFRNTEVsZW1lbnQsIGNvbmZpZzogT3ZlcmxheUNvbmZpZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneShcclxuICAgICAgdHJpZ2dlcixcclxuICAgICAgY29uZmlnLnBsYWNlbWVudCB8fCAnYm90dG9tJ1xyXG4gICAgKTtcclxuICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LFxyXG4gICAgICBoYXNCYWNrZHJvcDogY29uZmlnLnRyaWdnZXIgIT09ICdob3ZlcicsXHJcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICdjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCcsXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnBpcGUoZmlsdGVyKGV2ZW50PT4gZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFKSkuc3Vic2NyaWJlKCgpPT4gdGhpcy5kZXN0cm95KCkpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2w6IE92ZXJsYXlDb250cm9sID0geyBjb25maWcsIGNsb3NlOiB0aGlzLmRlc3Ryb3kuYmluZCh0aGlzKSB9O1xyXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xyXG4gICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IsXHJcbiAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogT1ZFUkxBWV9DT05UUk9MLCB1c2VWYWx1ZTogY29udHJvbCB9XSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoT3ZlcmxheUNvbnRlbnRDb21wb25lbnQsIG51bGwsIGluamVjdG9yKTtcclxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jdXN0b21UaGVtZSA9IHRoaXMuY3VzdG9tVGhlbWU7XHJcblxyXG4gICAgLy8gLS0tIFNUQVJUOiBNT0RJRklDQVRJT04gRk9SIERZTkFNSUMgQVJST1cgLS0tXHJcbiAgICB0aGlzLnBvc2l0aW9uU3Vic2NyaXB0aW9uID0gcG9zaXRpb25TdHJhdGVneS5wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKFxyXG4gICAgICAoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgLy8gMS4gR2V0IHRoZSBuZXcgcGxhY2VtZW50ICgndG9wJywgJ2JvdHRvbScsIGV0Yy4pXHJcbiAgICAgICAgY29uc3QgbmV3UGxhY2VtZW50ID0gdGhpcy5nZXRQbGFjZW1lbnRGcm9tUG9zaXRpb24oXHJcbiAgICAgICAgICBjaGFuZ2UuY29ubmVjdGlvblBhaXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5hY3R1YWxQbGFjZW1lbnQgPSBuZXdQbGFjZW1lbnQ7XHJcblxyXG4gICAgICAgIC8vIDIuIENhbGN1bGF0ZSB0aGUgYXJyb3cncyBvZmZzZXRcclxuICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmlnZ2VyUmVjdCA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICBjb25zdCBwb3BvdmVyUmVjdCA9XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgICBsZXQgYXJyb3dPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgLy8gSWYgcG9wb3ZlciBpcyB0b3AvYm90dG9tLCBhcnJvdyBtb3ZlcyBob3Jpem9udGFsbHkgKGxlZnQpXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG5ld1BsYWNlbWVudC5zdGFydHNXaXRoKCd0b3AnKSB8fFxyXG4gICAgICAgICAgICBuZXdQbGFjZW1lbnQuc3RhcnRzV2l0aCgnYm90dG9tJylcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyQ2VudGVyID0gdHJpZ2dlclJlY3QubGVmdCArIHRyaWdnZXJSZWN0LndpZHRoIC8gMjtcclxuICAgICAgICAgICAgYXJyb3dPZmZzZXQgPSB0cmlnZ2VyQ2VudGVyIC0gcG9wb3ZlclJlY3QubGVmdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIElmIHBvcG92ZXIgaXMgbGVmdC9yaWdodCwgYXJyb3cgbW92ZXMgdmVydGljYWxseSAodG9wKVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJDZW50ZXIgPSB0cmlnZ2VyUmVjdC50b3AgKyB0cmlnZ2VyUmVjdC5oZWlnaHQgLyAyO1xyXG4gICAgICAgICAgICBhcnJvd09mZnNldCA9IHRyaWdnZXJDZW50ZXIgLSBwb3BvdmVyUmVjdC50b3A7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gMy4gUGFzcyB0aGUgb2Zmc2V0IHRvIHRoZSBjb250ZW50IGNvbXBvbmVudFxyXG4gICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmFycm93T2Zmc2V0ID0gYXJyb3dPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5tb3VzZUVudGVyUG9wb3Zlci5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jbG9zZVRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLmNsb3NlVGltZW91dCk7XHJcbiAgICB9KTtcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5tb3VzZUxlYXZlUG9wb3Zlci5zdWJzY3JpYmUoKCkgPT5cclxuICAgICAgdGhpcy5oYW5kbGVNb3VzZUxlYXZlKClcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGNvbmZpZy50cmlnZ2VyICE9PSAnaG92ZXInKSB7XHJcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGVzdHJveSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwb3BvdmVySWQgPSBgcG9wb3Zlci0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gO1xyXG4gICAgY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIHBvcG92ZXJJZCk7XHJcbiAgICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHBvcG92ZXJJZCk7XHJcbiAgICB0aGlzLmxhc3RUcmlnZ2VyRWxlbWVudCA9IHRyaWdnZXI7XHJcbiAgfVxyXG5cclxuICAvLyBSZW5hbWVkIGZyb20gaGlkZSgpIHRvIGRlc3Ryb3koKSBmb3IgY2xhcml0eVxyXG4gIHByaXZhdGUgZGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5vdmVybGF5UmVmKSByZXR1cm47IC8vIFByZXZlbnQgbXVsdGlwbGUgY2FsbHNcclxuXHJcbiAgICBpZiAodGhpcy5sYXN0VHJpZ2dlckVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5sYXN0VHJpZ2dlckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XHJcbiAgICAgIHRoaXMubGFzdFRyaWdnZXJFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wb3NpdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQbGFjZW1lbnRGcm9tUG9zaXRpb24oXHJcbiAgICBwb3NpdGlvbjogQ29ubmVjdGlvblBvc2l0aW9uUGFpclxyXG4gICk6IFBvcG92ZXJQbGFjZW1lbnQge1xyXG4gICAgaWYgKHBvc2l0aW9uLm9yaWdpblkgPT09ICd0b3AnICYmIHBvc2l0aW9uLm92ZXJsYXlZID09PSAnYm90dG9tJylcclxuICAgICAgcmV0dXJuICd0b3AnO1xyXG4gICAgaWYgKHBvc2l0aW9uLm9yaWdpblkgPT09ICdib3R0b20nICYmIHBvc2l0aW9uLm92ZXJsYXlZID09PSAndG9wJylcclxuICAgICAgcmV0dXJuICdib3R0b20nO1xyXG4gICAgaWYgKHBvc2l0aW9uLm9yaWdpblggPT09ICdzdGFydCcgJiYgcG9zaXRpb24ub3ZlcmxheVggPT09ICdlbmQnKVxyXG4gICAgICByZXR1cm4gJ2xlZnQnO1xyXG4gICAgaWYgKHBvc2l0aW9uLm9yaWdpblggPT09ICdlbmQnICYmIHBvc2l0aW9uLm92ZXJsYXlYID09PSAnc3RhcnQnKVxyXG4gICAgICByZXR1cm4gJ3JpZ2h0JztcclxuICAgIHJldHVybiAnYm90dG9tJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUG9zaXRpb25TdHJhdGVneShcclxuICAgIG9yaWdpbjogSFRNTEVsZW1lbnQsXHJcbiAgICBwbGFjZW1lbnQ6IHN0cmluZ1xyXG4gICk6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSB7XHJcbiAgICBsZXQgcHJlZmVycmVkUG9zaXRpb246IENvbm5lY3RlZFBvc2l0aW9uO1xyXG4gICAgc3dpdGNoIChwbGFjZW1lbnQpIHtcclxuICAgICAgY2FzZSAndG9wJzpcclxuICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9IHBvc2l0aW9uc1sxXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmlnaHQnOlxyXG4gICAgICAgIHByZWZlcnJlZFBvc2l0aW9uID0gcG9zaXRpb25zWzJdO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdsZWZ0JzpcclxuICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9IHBvc2l0aW9uc1szXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBwcmVmZXJyZWRQb3NpdGlvbiA9IHBvc2l0aW9uc1swXTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5vdmVybGF5XHJcbiAgICAgIC5wb3NpdGlvbigpXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKG9yaWdpbilcclxuICAgICAgLndpdGhQb3NpdGlvbnMoW3ByZWZlcnJlZFBvc2l0aW9uLCAuLi5wb3NpdGlvbnNdKVxyXG4gICAgICAud2l0aFB1c2godHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvL0RvY3VtZW50LWxldmVsIGxpc3RlbmVycyBmb3IgY2xvc2luZ1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd246ZXNjYXBlJylcclxuICBvbkVzY2FwZSgpOiB2b2lkIHtcclxuICAgIHRoaXMucG9zaXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmRlc3Ryb3koKTtcclxuICB9XHJcbn1cclxuIiwiPGJ1dHRvblxyXG5tYXQtcmFpc2VkLWJ1dHRvblxyXG4gIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgKm5nSWY9XCJidXR0b25UZXh0XCJcclxuICAjdHJpZ2dlckJ1dHRvblxyXG4gIChjbGljayk9XCJ0b2dnbGUoKVwiXHJcbiAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlTW91c2VFbnRlcigpXCJcclxuICAobW91c2VsZWF2ZSk9XCJoYW5kbGVNb3VzZUxlYXZlKClcIlxyXG4gIGNsYXNzPVwicG9wb3Zlci10cmlnZ2VyLWJ0blwiPlxyXG4gIHt7IGJ1dHRvblRleHQgfX1cclxuPC9idXR0b24+XHJcbiJdfQ==
|