@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.
@@ -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==