@ruc-lib/overlay 3.1.0 → 3.1.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/README.md +20 -21
- package/esm2020/index.mjs +7 -0
- package/esm2020/lib/constants/positions.mjs +7 -0
- package/esm2020/lib/model/overlay.types.mjs +7 -0
- package/esm2020/lib/overlay-content/overlay-content.component.mjs +91 -0
- package/esm2020/lib/ruc-overlay-chart/ruc-overlay-chart.component.mjs +29 -0
- package/esm2020/lib/ruclib-overlay/ruclib-overlay.component.mjs +196 -0
- package/esm2020/lib/ruclib-overlay.module.mjs +48 -0
- package/esm2020/lib/service/overlay.service.mjs +33 -0
- package/esm2020/ruc-lib-overlay.mjs +5 -0
- package/fesm2015/ruc-lib-overlay.mjs +401 -0
- package/fesm2015/ruc-lib-overlay.mjs.map +1 -0
- package/fesm2020/ruc-lib-overlay.mjs +394 -0
- package/fesm2020/ruc-lib-overlay.mjs.map +1 -0
- package/index.d.ts +6 -115
- package/lib/constants/positions.d.ts +2 -0
- package/lib/model/overlay.types.d.ts +40 -0
- package/lib/overlay-content/overlay-content.component.d.ts +20 -0
- package/lib/ruc-overlay-chart/ruc-overlay-chart.component.d.ts +11 -0
- package/lib/ruclib-overlay/ruclib-overlay.component.d.ts +40 -0
- package/lib/ruclib-overlay.module.d.ts +15 -0
- package/lib/service/overlay.service.d.ts +16 -0
- package/package.json +21 -9
- package/fesm2022/ruc-lib-overlay.mjs +0 -355
- package/fesm2022/ruc-lib-overlay.mjs.map +0 -1
|
@@ -0,0 +1,196 @@
|
|
|
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==
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { MatCardModule } from '@angular/material/card';
|
|
2
|
+
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|
3
|
+
import { NgModule } from '@angular/core';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
import { RuclibOverlayComponent } from './ruclib-overlay/ruclib-overlay.component';
|
|
6
|
+
import { OverlayContentComponent } from './overlay-content/overlay-content.component';
|
|
7
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
+
import { OverlayModule } from '@angular/cdk/overlay';
|
|
9
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
10
|
+
import { RucOverlayChartComponent } from './ruc-overlay-chart/ruc-overlay-chart.component';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export class RuclibOverlayModule {
|
|
13
|
+
}
|
|
14
|
+
RuclibOverlayModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
15
|
+
RuclibOverlayModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayModule, declarations: [RuclibOverlayComponent,
|
|
16
|
+
OverlayContentComponent,
|
|
17
|
+
RucOverlayChartComponent], imports: [CommonModule,
|
|
18
|
+
MatIconModule,
|
|
19
|
+
OverlayModule,
|
|
20
|
+
BrowserAnimationsModule,
|
|
21
|
+
MatButtonModule,
|
|
22
|
+
MatCardModule], exports: [RuclibOverlayComponent, RucOverlayChartComponent] });
|
|
23
|
+
RuclibOverlayModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayModule, imports: [CommonModule,
|
|
24
|
+
MatIconModule,
|
|
25
|
+
OverlayModule,
|
|
26
|
+
BrowserAnimationsModule,
|
|
27
|
+
MatButtonModule,
|
|
28
|
+
MatCardModule] });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayModule, decorators: [{
|
|
30
|
+
type: NgModule,
|
|
31
|
+
args: [{
|
|
32
|
+
imports: [
|
|
33
|
+
CommonModule,
|
|
34
|
+
MatIconModule,
|
|
35
|
+
OverlayModule,
|
|
36
|
+
BrowserAnimationsModule,
|
|
37
|
+
MatButtonModule,
|
|
38
|
+
MatCardModule
|
|
39
|
+
],
|
|
40
|
+
declarations: [
|
|
41
|
+
RuclibOverlayComponent,
|
|
42
|
+
OverlayContentComponent,
|
|
43
|
+
RucOverlayChartComponent
|
|
44
|
+
],
|
|
45
|
+
exports: [RuclibOverlayComponent, RucOverlayChartComponent],
|
|
46
|
+
}]
|
|
47
|
+
}] });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVjbGliLW92ZXJsYXkubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ydWNsaWItb3ZlcmxheS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOztBQWtCM0YsTUFBTSxPQUFPLG1CQUFtQjs7aUhBQW5CLG1CQUFtQjtrSEFBbkIsbUJBQW1CLGlCQU41QixzQkFBc0I7UUFDdEIsdUJBQXVCO1FBQ3ZCLHdCQUF3QixhQVZ4QixZQUFZO1FBQ1osYUFBYTtRQUNiLGFBQWE7UUFDYix1QkFBdUI7UUFDdkIsZUFBZTtRQUNmLGFBQWEsYUFPTCxzQkFBc0IsRUFBRSx3QkFBd0I7a0hBRS9DLG1CQUFtQixZQWQ1QixZQUFZO1FBQ1osYUFBYTtRQUNiLGFBQWE7UUFDYix1QkFBdUI7UUFDdkIsZUFBZTtRQUNmLGFBQWE7NEZBU0osbUJBQW1CO2tCQWhCL0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixlQUFlO3dCQUNmLGFBQWE7cUJBQ2Q7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLHNCQUFzQjt3QkFDdEIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7cUJBQ3pCO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLHdCQUF3QixDQUFDO2lCQUM1RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcclxuaW1wb3J0IHsgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBSdWNsaWJPdmVybGF5Q29tcG9uZW50IH0gZnJvbSAnLi9ydWNsaWItb3ZlcmxheS9ydWNsaWItb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPdmVybGF5Q29udGVudENvbXBvbmVudCB9IGZyb20gJy4vb3ZlcmxheS1jb250ZW50L292ZXJsYXktY29udGVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IFJ1Y092ZXJsYXlDaGFydENvbXBvbmVudCB9IGZyb20gJy4vcnVjLW92ZXJsYXktY2hhcnQvcnVjLW92ZXJsYXktY2hhcnQuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE92ZXJsYXlNb2R1bGUsXHJcbiAgICBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdENhcmRNb2R1bGVcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgUnVjbGliT3ZlcmxheUNvbXBvbmVudCxcclxuICAgIE92ZXJsYXlDb250ZW50Q29tcG9uZW50LFxyXG4gICAgUnVjT3ZlcmxheUNoYXJ0Q29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbUnVjbGliT3ZlcmxheUNvbXBvbmVudCwgUnVjT3ZlcmxheUNoYXJ0Q29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJ1Y2xpYk92ZXJsYXlNb2R1bGUge31cclxuIl19
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class OverlayService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.popoverState = new Subject();
|
|
7
|
+
this.popoverState$ = this.popoverState.asObservable();
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Broadcasts a command to open a popover using the OverlayData structure.
|
|
11
|
+
*/
|
|
12
|
+
open(config, trigger) {
|
|
13
|
+
console.log(config, trigger);
|
|
14
|
+
// The service's responsibility is to bundle the config and trigger
|
|
15
|
+
// into a PopoverData object and send it.
|
|
16
|
+
this.popoverState.next({ config, trigger });
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Broadcasts a command to close any currently open service-controlled popover.
|
|
20
|
+
*/
|
|
21
|
+
close() {
|
|
22
|
+
this.popoverState.next(null);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
OverlayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
26
|
+
OverlayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OverlayService, providedIn: 'root' });
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OverlayService, decorators: [{
|
|
28
|
+
type: Injectable,
|
|
29
|
+
args: [{
|
|
30
|
+
providedIn: 'root'
|
|
31
|
+
}]
|
|
32
|
+
}] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlL292ZXJsYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSy9CLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBS1UsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztRQUVsRCxrQkFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7S0FvQnpEO0lBaEJDOztPQUVHO0lBQ0gsSUFBSSxDQUFDLE1BQTZCLEVBQUUsT0FBK0I7UUFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0IsbUVBQW1FO1FBQ25FLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDOzs0R0F2QlUsY0FBYztnSEFBZCxjQUFjLGNBRmIsTUFBTTs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXlEYXRhIH0gZnJvbSAnLi8uLi9tb2RlbC9vdmVybGF5LnR5cGVzJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPdmVybGF5U2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgcG9wb3ZlclN0YXRlID0gbmV3IFN1YmplY3Q8T3ZlcmxheURhdGEgfCBudWxsPigpO1xyXG5cclxuICBwdWJsaWMgcG9wb3ZlclN0YXRlJCA9IHRoaXMucG9wb3ZlclN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEJyb2FkY2FzdHMgYSBjb21tYW5kIHRvIG9wZW4gYSBwb3BvdmVyIHVzaW5nIHRoZSBPdmVybGF5RGF0YSBzdHJ1Y3R1cmUuXHJcbiAgICovXHJcbiAgb3Blbihjb25maWc6IE92ZXJsYXlEYXRhWydjb25maWcnXSwgdHJpZ2dlcjogT3ZlcmxheURhdGFbJ3RyaWdnZXInXSkge1xyXG4gICAgY29uc29sZS5sb2coY29uZmlnLCB0cmlnZ2VyKTtcclxuICAgIC8vIFRoZSBzZXJ2aWNlJ3MgcmVzcG9uc2liaWxpdHkgaXMgdG8gYnVuZGxlIHRoZSBjb25maWcgYW5kIHRyaWdnZXJcclxuICAgIC8vIGludG8gYSBQb3BvdmVyRGF0YSBvYmplY3QgYW5kIHNlbmQgaXQuXHJcbiAgICB0aGlzLnBvcG92ZXJTdGF0ZS5uZXh0KHsgY29uZmlnLCB0cmlnZ2VyIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnJvYWRjYXN0cyBhIGNvbW1hbmQgdG8gY2xvc2UgYW55IGN1cnJlbnRseSBvcGVuIHNlcnZpY2UtY29udHJvbGxlZCBwb3BvdmVyLlxyXG4gICAqL1xyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5wb3BvdmVyU3RhdGUubmV4dChudWxsKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVjLWxpYi1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1Yy1saWItb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|