@ruc-lib/overlay 2.0.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 +113 -0
- 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 +86 -0
- package/esm2020/lib/ruc-overlay-chart/ruc-overlay-chart.component.mjs +29 -0
- package/esm2020/lib/ruclib-overlay/ruclib-overlay.component.mjs +182 -0
- package/esm2020/lib/ruclib-overlay.module.mjs +44 -0
- package/esm2020/lib/service/overlay.service.mjs +33 -0
- package/esm2020/ruc-lib-overlay.mjs +5 -0
- package/fesm2015/ruc-lib-overlay.mjs +379 -0
- package/fesm2015/ruc-lib-overlay.mjs.map +1 -0
- package/fesm2020/ruc-lib-overlay.mjs +372 -0
- package/fesm2020/ruc-lib-overlay.mjs.map +1 -0
- package/index.d.ts +6 -0
- 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 +18 -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 +14 -0
- package/lib/service/overlay.service.d.ts +16 -0
- package/package.json +37 -0
package/README.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Overlay
|
|
2
|
+
|
|
3
|
+
A customizable Angular overlay component that display richer content, such as text, images, tables, charts and more. They are useful for providing additional information to users without cluttering the interface.
|
|
4
|
+
|
|
5
|
+
## Installation Guide
|
|
6
|
+
|
|
7
|
+
To use the Overlay component, you can install the entire RUC library or just this specific component.
|
|
8
|
+
|
|
9
|
+
### Install the Entire Library
|
|
10
|
+
```bash
|
|
11
|
+
npm install @uxpractice/ruc-lib
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### Install Individual Component
|
|
15
|
+
If you only need the Overlay component:
|
|
16
|
+
```bash
|
|
17
|
+
npm install @uxpractice/overlay
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
### 1. Import the Module
|
|
23
|
+
In your Angular module file (e.g., `app.module.ts`), import the `RuclibOverlayModule`:
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { RuclibOverlayModule } from '@uxpractice/overlay';
|
|
27
|
+
import { AppComponent } from './app.component';
|
|
28
|
+
import { NgModule } from '@angular/core';
|
|
29
|
+
import { BrowserModule } from '@angular/platform-browser';
|
|
30
|
+
|
|
31
|
+
@NgModule({
|
|
32
|
+
declarations: [AppComponent],
|
|
33
|
+
imports: [
|
|
34
|
+
BrowserModule,
|
|
35
|
+
RuclibOverlayModule
|
|
36
|
+
],
|
|
37
|
+
providers: [],
|
|
38
|
+
bootstrap: [AppComponent]
|
|
39
|
+
})
|
|
40
|
+
export class AppModule {}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 2. Use the Component
|
|
44
|
+
In your component's template, use the `<uxp-ruclib-overlay>` selector and pass the configuration object to the `rucInputData` input.
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<uxp-ruclib-overlay [rucInputData]="OverlayConfig"></uxp-ruclib-overlay>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## API Reference
|
|
51
|
+
|
|
52
|
+
### Component Inputs
|
|
53
|
+
|
|
54
|
+
| Input | Type | Description |
|
|
55
|
+
|----------------|--------------------|----------------------------------------------|
|
|
56
|
+
| `rucInputData` | `OverlayConfig` | The main configuration object for the component. |
|
|
57
|
+
| `customTheme` | `string` | An optional CSS class for custom theming. |
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### `OverlayConfig`
|
|
61
|
+
This is the main configuration object for the overlay
|
|
62
|
+
|
|
63
|
+
| Property | Type | Description |
|
|
64
|
+
|-----------------------------|--------------------------------------------------|---------------------------------------------------------------------------------------------------------|
|
|
65
|
+
| `placement` | `'bottom' \| 'top' \| 'left' \| 'right'` | The position of the overlay content (e.g., 0). |
|
|
66
|
+
| `trigger` | `'click'\|'hover' \` | The maximum value of the progress bar (e.g., 100). |
|
|
67
|
+
| `overlayTitle` | `string` | The title of the overlay content. |
|
|
68
|
+
| `content` | `'string' \| templateRef` | If accept string or html template both of displaying the content inside overlay area. |
|
|
69
|
+
| `animation` | `'fade' \| 'scale' \|` | The animation type for the overlay content (e.g., 'fade', 'scale').. Defaults to `fade`. |
|
|
70
|
+
| `showCloseButton` | `boolean` | It close the overlay.. Defaults to `false`. |
|
|
71
|
+
| `closeIcon` | `string` | Icon class for the close button. User can give his own icon for close the overlay. |
|
|
72
|
+
| `tableData` | `any[]` | It accept array of object and display data in table format inside overlay. |
|
|
73
|
+
| `tableClass` | `'basic-table' \|'striped-table' \|` | It accept table styling class .. Defaults to `basic-table`. |
|
|
74
|
+
| `closeDelay` | `number` | it delay the overlay close(milliseconds). |
|
|
75
|
+
| `chartConfig` | `any` | it can display chart if user provide chart configuration. |
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
## Example Configuration
|
|
80
|
+
|
|
81
|
+
Here's an example of how to configure the Overlay in your component's TypeScript file.
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
import { Component } from '@angular/core';
|
|
85
|
+
import { OverlayConfig } from '@uxpractice/overlay';
|
|
86
|
+
|
|
87
|
+
@Component({
|
|
88
|
+
selector: 'app-root',
|
|
89
|
+
templateUrl: './app.component.html',
|
|
90
|
+
})
|
|
91
|
+
export class AppComponent {
|
|
92
|
+
overlayConfig: OverlayConfig = {
|
|
93
|
+
placement: 'left',
|
|
94
|
+
overlayTitle: 'Animated Popover with fade',
|
|
95
|
+
content: 'This is a simple popover triggered by a click.',
|
|
96
|
+
trigger: 'click',
|
|
97
|
+
animation: 'fade',
|
|
98
|
+
closeIcon: 'close',
|
|
99
|
+
showCloseButton : true,;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
```html
|
|
105
|
+
<uxp-ruclib-overlay [rucInputData]="overlayConfig"></uxp-ruclib-overlay>
|
|
106
|
+
|
|
107
|
+
## Contribution
|
|
108
|
+
|
|
109
|
+
Contributions are welcome! Feel free to open issues or pull requests for any enhancements or fixes.
|
|
110
|
+
|
|
111
|
+
## Acknowledgements
|
|
112
|
+
|
|
113
|
+
Thank you for choosing the Overlay component. If you have any feedback or suggestions, please let us know!
|
|
@@ -0,0 +1,7 @@
|
|
|
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==
|
|
@@ -0,0 +1,7 @@
|
|
|
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=
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostBinding, Inject, 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 "../ruc-overlay-chart/ruc-overlay-chart.component";
|
|
8
|
+
export class OverlayContentComponent {
|
|
9
|
+
ngOnInit() {
|
|
10
|
+
if (this.control.config.tableData) {
|
|
11
|
+
this.getTableHeaders();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
get animationState() {
|
|
15
|
+
return this.control.config.animation === 'scale'
|
|
16
|
+
? 'enter-scale'
|
|
17
|
+
: 'enter-fade';
|
|
18
|
+
}
|
|
19
|
+
constructor(control) {
|
|
20
|
+
this.control = control;
|
|
21
|
+
this.actualPlacement = 'bottom';
|
|
22
|
+
this.tableHeaders = [];
|
|
23
|
+
this.mouseEnterPopover = new EventEmitter();
|
|
24
|
+
this.mouseLeavePopover = new EventEmitter();
|
|
25
|
+
this.actualPlacement = this.control.config.placement || 'bottom';
|
|
26
|
+
}
|
|
27
|
+
// Helper to check if content is a TemplateRef
|
|
28
|
+
isTemplateRef(content) {
|
|
29
|
+
return content instanceof TemplateRef;
|
|
30
|
+
}
|
|
31
|
+
// Helper to get keys for the table header, robustly
|
|
32
|
+
getTableHeaders() {
|
|
33
|
+
const tempData = this.control.config.tableData;
|
|
34
|
+
if (!tempData || tempData.length === 0) {
|
|
35
|
+
this.tableHeaders = [];
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Assumes all objects in the array have the same shape
|
|
39
|
+
this.tableHeaders = Object.keys(tempData[0]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
OverlayContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OverlayContentComponent, deps: [{ token: OVERLAY_CONTROL }], target: i0.ɵɵFactoryTarget.Component });
|
|
43
|
+
OverlayContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OverlayContentComponent, selector: "uxp-overlay-content", outputs: { mouseEnterPopover: "mouseEnterPopover", mouseLeavePopover: "mouseLeavePopover" }, host: { properties: { "@popoverAnimation": "this.animationState" } }, ngImport: i0, template: "<div class=\"popover-container\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"popover-arrow\" [attr.data-placement]=\"actualPlacement\"></div>\r\n <!-- Header with optional title and close button -->\r\n <div\r\n *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 <h3 *ngIf=\"control.config.overlayTitle\">\r\n {{ control.config.overlayTitle }}\r\n </h3>\r\n\r\n\r\n <ng-container *ngIf=\"control.config.showCloseButton\">\r\n <button\r\n type=\"button\"\r\n class=\"close-btn\"\r\n aria-label=\"Close\"\r\n (click)=\"control.close()\"\r\n >\r\n <mat-icon>{{ control.config.closeIcon }}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Body with dynamic content -->\r\n <div 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 </div>\r\n</div>\r\n", styles: [":host{display:block}.popover-container{z-index:1080;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px #0003;position:relative;color:#333;max-width:300px}.popover-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;border-width:10px}.popover-arrow[data-placement^=top]{bottom:-10px;left:50%;transform:translate(-50%);border-bottom-width:0;border-top-color:#fff;filter:drop-shadow(0 -1px 1px rgba(0,0,0,.1))}.popover-arrow[data-placement^=bottom]{top:-10px;left:50%;transform:translate(-50%);border-top-width:0;border-bottom-color:#fff;filter:drop-shadow(0 1px 1px rgba(0,0,0,.1))}.popover-arrow[data-placement^=left]{right:-10px;top:50%;transform:translateY(-50%);border-right-width:0;border-left-color:#fff;filter:drop-shadow(-1px 0 1px rgba(0,0,0,.1))}.popover-arrow[data-placement^=right]{left:-10px;top:50%;transform:translateY(-50%);border-left-width:0;border-right-color:#fff;filter:drop-shadow(1px 0 1px rgba(0,0,0,.1))}.popover-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;margin:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid #dcdcdc;border-radius:5px 5px 0 0}.popover-header h3{margin:0;font-size:1rem}.popover-body{padding:9px 14px;color:#212529}.close-btn,.close-icon{border:none;background:transparent;font-size:1.5rem;line-height:1;cursor:pointer;padding:0;margin-left:10px;opacity:.5}.close-btn:hover,.close-icon:hover{opacity:1}.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{background-color:#f2f2f2;text-transform:capitalize}.popover-table.striped-table tbody tr:nth-of-type(odd){background-color:#f9f9f9}.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{background-color:#f2f2f2;font-weight:700}.striped-table tbody tr:nth-child(even){background-color:#e9ecef}.striped-table tbody tr:hover{background-color:#f1f1f1}.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{background-color:#fff;font-weight:700}.basic-table tbody tr:nth-child(even){background-color:#fff}.basic-table tbody tr:hover{background-color:#f1f1f1}\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.RucOverlayChartComponent, selector: "uxp-ruc-overlay-chart", inputs: ["index", "chartConfig"] }], animations: [
|
|
44
|
+
trigger('popoverAnimation', [
|
|
45
|
+
state('void', style({ transform: 'scale(0.9)', opacity: 0 })),
|
|
46
|
+
state('enter-scale', style({ transform: 'scale(1)', opacity: 1 })),
|
|
47
|
+
state('enter-fade', style({ opacity: 1 })),
|
|
48
|
+
transition('void => enter-scale', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),
|
|
49
|
+
transition('void => enter-fade', [
|
|
50
|
+
style({ opacity: 0, transform: 'translateY(10px)' }),
|
|
51
|
+
animate('500ms', style({ opacity: 1, transform: 'translateY(0)' })),
|
|
52
|
+
]),
|
|
53
|
+
transition('* => void', [
|
|
54
|
+
animate('500ms', style({ opacity: 0, transform: 'translateY(10px)' })),
|
|
55
|
+
]),
|
|
56
|
+
]),
|
|
57
|
+
] });
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OverlayContentComponent, decorators: [{
|
|
59
|
+
type: Component,
|
|
60
|
+
args: [{ selector: 'uxp-overlay-content', animations: [
|
|
61
|
+
trigger('popoverAnimation', [
|
|
62
|
+
state('void', style({ transform: 'scale(0.9)', opacity: 0 })),
|
|
63
|
+
state('enter-scale', style({ transform: 'scale(1)', opacity: 1 })),
|
|
64
|
+
state('enter-fade', style({ opacity: 1 })),
|
|
65
|
+
transition('void => enter-scale', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),
|
|
66
|
+
transition('void => enter-fade', [
|
|
67
|
+
style({ opacity: 0, transform: 'translateY(10px)' }),
|
|
68
|
+
animate('500ms', style({ opacity: 1, transform: 'translateY(0)' })),
|
|
69
|
+
]),
|
|
70
|
+
transition('* => void', [
|
|
71
|
+
animate('500ms', style({ opacity: 0, transform: 'translateY(10px)' })),
|
|
72
|
+
]),
|
|
73
|
+
]),
|
|
74
|
+
], template: "<div class=\"popover-container\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"popover-arrow\" [attr.data-placement]=\"actualPlacement\"></div>\r\n <!-- Header with optional title and close button -->\r\n <div\r\n *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 <h3 *ngIf=\"control.config.overlayTitle\">\r\n {{ control.config.overlayTitle }}\r\n </h3>\r\n\r\n\r\n <ng-container *ngIf=\"control.config.showCloseButton\">\r\n <button\r\n type=\"button\"\r\n class=\"close-btn\"\r\n aria-label=\"Close\"\r\n (click)=\"control.close()\"\r\n >\r\n <mat-icon>{{ control.config.closeIcon }}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Body with dynamic content -->\r\n <div 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 </div>\r\n</div>\r\n", styles: [":host{display:block}.popover-container{z-index:1080;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px #0003;position:relative;color:#333;max-width:300px}.popover-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid;border-width:10px}.popover-arrow[data-placement^=top]{bottom:-10px;left:50%;transform:translate(-50%);border-bottom-width:0;border-top-color:#fff;filter:drop-shadow(0 -1px 1px rgba(0,0,0,.1))}.popover-arrow[data-placement^=bottom]{top:-10px;left:50%;transform:translate(-50%);border-top-width:0;border-bottom-color:#fff;filter:drop-shadow(0 1px 1px rgba(0,0,0,.1))}.popover-arrow[data-placement^=left]{right:-10px;top:50%;transform:translateY(-50%);border-right-width:0;border-left-color:#fff;filter:drop-shadow(-1px 0 1px rgba(0,0,0,.1))}.popover-arrow[data-placement^=right]{left:-10px;top:50%;transform:translateY(-50%);border-left-width:0;border-right-color:#fff;filter:drop-shadow(1px 0 1px rgba(0,0,0,.1))}.popover-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem;margin:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid #dcdcdc;border-radius:5px 5px 0 0}.popover-header h3{margin:0;font-size:1rem}.popover-body{padding:9px 14px;color:#212529}.close-btn,.close-icon{border:none;background:transparent;font-size:1.5rem;line-height:1;cursor:pointer;padding:0;margin-left:10px;opacity:.5}.close-btn:hover,.close-icon:hover{opacity:1}.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{background-color:#f2f2f2;text-transform:capitalize}.popover-table.striped-table tbody tr:nth-of-type(odd){background-color:#f9f9f9}.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{background-color:#f2f2f2;font-weight:700}.striped-table tbody tr:nth-child(even){background-color:#e9ecef}.striped-table tbody tr:hover{background-color:#f1f1f1}.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{background-color:#fff;font-weight:700}.basic-table tbody tr:nth-child(even){background-color:#fff}.basic-table tbody tr:hover{background-color:#f1f1f1}\n"] }]
|
|
75
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
76
|
+
type: Inject,
|
|
77
|
+
args: [OVERLAY_CONTROL]
|
|
78
|
+
}] }]; }, propDecorators: { mouseEnterPopover: [{
|
|
79
|
+
type: Output
|
|
80
|
+
}], mouseLeavePopover: [{
|
|
81
|
+
type: Output
|
|
82
|
+
}], animationState: [{
|
|
83
|
+
type: HostBinding,
|
|
84
|
+
args: ['@popoverAnimation']
|
|
85
|
+
}] } });
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvb3ZlcmxheS1jb250ZW50L292ZXJsYXktY29udGVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL292ZXJsYXktY29udGVudC9vdmVybGF5LWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFFTixNQUFNLEVBQ04sV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxPQUFPLEVBQ1AsS0FBSyxFQUNMLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxHQUNSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7OztBQTJCekQsTUFBTSxPQUFPLHVCQUF1QjtJQVFsQyxRQUFRO1FBQ04sSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELElBQ0ksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxPQUFPO1lBQzlDLENBQUMsQ0FBQyxhQUFhO1lBQ2YsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFBNEMsT0FBdUI7UUFBdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFwQjVELG9CQUFlLEdBQThCLFFBQVEsQ0FBQztRQUN0RCxpQkFBWSxHQUFPLEVBQUUsQ0FBQztRQUVuQixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzdDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFpQnJE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QVcsRUFBRTtnQ0FDdEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7NkJBQ3ZFLENBQUM7eUJBQ0gsQ0FBQztxQkFDSDs7MEJBd0JZLE1BQU07MkJBQUMsZUFBZTs0Q0FqQnpCLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBVUgsY0FBYztzQkFEakIsV0FBVzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5Q29udHJvbCB9IGZyb20gJy4vLi4vbW9kZWwvb3ZlcmxheS50eXBlcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSW5qZWN0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgYW5pbWF0ZSxcclxuICBzdGF0ZSxcclxuICBzdHlsZSxcclxuICB0cmFuc2l0aW9uLFxyXG4gIHRyaWdnZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IE9WRVJMQVlfQ09OVFJPTCB9IGZyb20gJy4uL21vZGVsL292ZXJsYXkudHlwZXMnO1xyXG5pbXBvcnQgeyBQb3BvdmVyUGxhY2VtZW50IH0gZnJvbSAnLi4vcnVjbGliLW92ZXJsYXkvcnVjbGliLW92ZXJsYXkuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndXhwLW92ZXJsYXktY29udGVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL292ZXJsYXktY29udGVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vb3ZlcmxheS1jb250ZW50LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcigncG9wb3ZlckFuaW1hdGlvbicsIFtcclxuICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3NjYWxlKDAuOSknLCBvcGFjaXR5OiAwIH0pKSxcclxuICAgICAgc3RhdGUoJ2VudGVyLXNjYWxlJywgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxKScsIG9wYWNpdHk6IDEgfSkpLFxyXG4gICAgICBzdGF0ZSgnZW50ZXItZmFkZScsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oXHJcbiAgICAgICAgJ3ZvaWQgPT4gZW50ZXItc2NhbGUnLFxyXG4gICAgICAgIGFuaW1hdGUoJzE1MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpJylcclxuICAgICAgKSxcclxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiBlbnRlci1mYWRlJywgW1xyXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgxMHB4KScgfSksXHJcbiAgICAgICAgYW5pbWF0ZSgnNTAwbXMnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pKSxcclxuICAgICAgXSksXHJcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gdm9pZCcsIFtcclxuICAgICAgICBhbmltYXRlKCc1MDBtcycsIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgxMHB4KScgfSkpLFxyXG4gICAgICBdKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgT3ZlcmxheUNvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHB1YmxpYyBhY3R1YWxQbGFjZW1lbnQ6IHN0cmluZyB8IFBvcG92ZXJQbGFjZW1lbnQgPSAnYm90dG9tJztcclxuICBwdWJsaWMgdGFibGVIZWFkZXJzOmFueVtdPVtdO1xyXG5cclxuICBAT3V0cHV0KCkgbW91c2VFbnRlclBvcG92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG1vdXNlTGVhdmVQb3BvdmVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZih0aGlzLmNvbnRyb2wuY29uZmlnLnRhYmxlRGF0YSkge1xyXG4gICAgICAgIHRoaXMuZ2V0VGFibGVIZWFkZXJzKCk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdAcG9wb3ZlckFuaW1hdGlvbicpXHJcbiAgZ2V0IGFuaW1hdGlvblN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbC5jb25maWcuYW5pbWF0aW9uID09PSAnc2NhbGUnXHJcbiAgICAgID8gJ2VudGVyLXNjYWxlJ1xyXG4gICAgICA6ICdlbnRlci1mYWRlJztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoT1ZFUkxBWV9DT05UUk9MKSBwdWJsaWMgY29udHJvbDogT3ZlcmxheUNvbnRyb2wpIHtcclxuICAgIHRoaXMuYWN0dWFsUGxhY2VtZW50ID0gdGhpcy5jb250cm9sLmNvbmZpZy5wbGFjZW1lbnQgfHwgJ2JvdHRvbSc7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgdG8gY2hlY2sgaWYgY29udGVudCBpcyBhIFRlbXBsYXRlUmVmXHJcbiAgaXNUZW1wbGF0ZVJlZihjb250ZW50OiBhbnkpOiBjb250ZW50IGlzIFRlbXBsYXRlUmVmPGFueT4ge1xyXG4gICAgcmV0dXJuIGNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciB0byBnZXQga2V5cyBmb3IgdGhlIHRhYmxlIGhlYWRlciwgcm9idXN0bHlcclxuICBnZXRUYWJsZUhlYWRlcnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCB0ZW1wRGF0YSA9IHRoaXMuY29udHJvbC5jb25maWcudGFibGVEYXRhO1xyXG5cclxuICAgIGlmICghdGVtcERhdGEgfHwgdGVtcERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMudGFibGVIZWFkZXJzID0gW107XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEFzc3VtZXMgYWxsIG9iamVjdHMgaW4gdGhlIGFycmF5IGhhdmUgdGhlIHNhbWUgc2hhcGVcclxuICAgIHRoaXMudGFibGVIZWFkZXJzID0gT2JqZWN0LmtleXModGVtcERhdGFbMF0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicG9wb3Zlci1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgPGRpdiBjbGFzcz1cInBvcG92ZXItYXJyb3dcIiBbYXR0ci5kYXRhLXBsYWNlbWVudF09XCJhY3R1YWxQbGFjZW1lbnRcIj48L2Rpdj5cclxuICA8IS0tIEhlYWRlciB3aXRoIG9wdGlvbmFsIHRpdGxlIGFuZCBjbG9zZSBidXR0b24gLS0+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJcclxuICAgICAgY29udHJvbC5jb25maWcub3ZlcmxheVRpdGxlIHx8XHJcbiAgICAgIGNvbnRyb2wuY29uZmlnLnNob3dDbG9zZUJ1dHRvbiB8fFxyXG4gICAgICBjb250cm9sLmNvbmZpZy5jbG9zZUljb25cclxuICAgIFwiXHJcbiAgICBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCJcclxuICA+XHJcbiAgICA8aDMgKm5nSWY9XCJjb250cm9sLmNvbmZpZy5vdmVybGF5VGl0bGVcIj5cclxuICAgICAge3sgY29udHJvbC5jb25maWcub3ZlcmxheVRpdGxlIH19XHJcbiAgICA8L2gzPlxyXG5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC5jb25maWcuc2hvd0Nsb3NlQnV0dG9uXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBjbGFzcz1cImNsb3NlLWJ0blwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcclxuICAgICAgICAoY2xpY2spPVwiY29udHJvbC5jbG9zZSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtaWNvbj57eyBjb250cm9sLmNvbmZpZy5jbG9zZUljb24gfX08L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJvZHkgd2l0aCBkeW5hbWljIGNvbnRlbnQgLS0+XHJcbiAgPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPlxyXG4gICAgPCEtLSBDYXNlIDE6IENvbnRlbnQgaXMgYSBzaW1wbGUgc3RyaW5nIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgICFpc1RlbXBsYXRlUmVmKGNvbnRyb2wuY29uZmlnLmNvbnRlbnQpICYmICFjb250cm9sLmNvbmZpZy50YWJsZURhdGFcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAge3sgY29udHJvbC5jb25maWcuY29udGVudCB9fVxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBDYXNlIDI6IENvbnRlbnQgaXMgYSBUZW1wbGF0ZVJlZiAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RlbXBsYXRlUmVmKGNvbnRyb2wuY29uZmlnLmNvbnRlbnQpXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sLmNvbmZpZy5jb250ZW50XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC5jb25maWcuY2hhcnRDb25maWdcIj5cclxuXHJcbiAgICAgIDx1eHAtcnVjLW92ZXJsYXktY2hhcnQgIFtjaGFydENvbmZpZ109XCJjb250cm9sLmNvbmZpZy5jaGFydENvbmZpZ1wiPjwvdXhwLXJ1Yy1vdmVybGF5LWNoYXJ0PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBDYXNlIDM6IENvbnRlbnQgaXMgdGFibGUgZGF0YSAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sLmNvbmZpZy50YWJsZURhdGE/Lmxlbmd0aFwiPlxyXG4gICAgICA8dGFibGVcclxuICAgICAgICBjbGFzcz1cInBvcG92ZXItdGFibGVcIlxyXG4gICAgICAgIFtjbGFzc109XCJjb250cm9sLmNvbmZpZy50YWJsZUNsYXNzIHx8ICdiYXNpYy10YWJsZSdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHRoaXMudGFibGVIZWFkZXJzIVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBoZWFkZXIgfX1cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBjb250cm9sLmNvbmZpZy50YWJsZURhdGFcIj5cclxuICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0aGlzLnRhYmxlSGVhZGVycyFcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgcm93W2hlYWRlcl0gfX1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
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==
|
|
@@ -0,0 +1,182 @@
|
|
|
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 ? this.destroy() : this.show(this.triggerButtonRef.nativeElement, this.rucInputData);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
handleMouseEnter() {
|
|
53
|
+
if (this.rucInputData.trigger === 'hover') {
|
|
54
|
+
if (this.closeTimeout)
|
|
55
|
+
clearTimeout(this.closeTimeout); // Clear any pending close command
|
|
56
|
+
this.show(this.triggerButtonRef.nativeElement, this.rucInputData);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
handleMouseLeave() {
|
|
60
|
+
if (this.rucInputData.trigger === 'hover') {
|
|
61
|
+
// Use the configurable closeDelay
|
|
62
|
+
const delay = this.rucInputData.closeDelay ?? 200;
|
|
63
|
+
this.closeTimeout = setTimeout(() => this.destroy(), delay);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
show(trigger, config) {
|
|
67
|
+
if (this.isOpen) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const positionStrategy = this.createPositionStrategy(trigger, config.placement || 'bottom');
|
|
71
|
+
this.overlayRef = this.overlay.create({
|
|
72
|
+
positionStrategy,
|
|
73
|
+
hasBackdrop: config.trigger !== 'hover',
|
|
74
|
+
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
75
|
+
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
76
|
+
disposeOnNavigation: true
|
|
77
|
+
});
|
|
78
|
+
this.overlayRef.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE)).subscribe(() => this.destroy());
|
|
79
|
+
// Create the control object with the close callback
|
|
80
|
+
const control = {
|
|
81
|
+
config,
|
|
82
|
+
close: this.destroy.bind(this),
|
|
83
|
+
};
|
|
84
|
+
const injector = Injector.create({
|
|
85
|
+
parent: this.injector,
|
|
86
|
+
providers: [{ provide: OVERLAY_CONTROL, useValue: control }],
|
|
87
|
+
});
|
|
88
|
+
const portal = new ComponentPortal(OverlayContentComponent, null, injector);
|
|
89
|
+
const componentRef = this.overlayRef.attach(portal);
|
|
90
|
+
this.positionSubscription = positionStrategy.positionChanges.subscribe(change => {
|
|
91
|
+
const newPlacement = this.getPlacementFromPosition(change.connectionPair);
|
|
92
|
+
componentRef.instance.actualPlacement = newPlacement;
|
|
93
|
+
componentRef.changeDetectorRef.detectChanges();
|
|
94
|
+
});
|
|
95
|
+
// --- NEW: Subscribe to the content component's events ---
|
|
96
|
+
componentRef.instance.mouseEnterPopover.subscribe(() => {
|
|
97
|
+
if (this.closeTimeout)
|
|
98
|
+
clearTimeout(this.closeTimeout);
|
|
99
|
+
});
|
|
100
|
+
componentRef.instance.mouseLeavePopover.subscribe(() => {
|
|
101
|
+
this.handleMouseLeave(); // Re-use the same logic
|
|
102
|
+
});
|
|
103
|
+
// Close on backdrop click for 'click' triggers
|
|
104
|
+
if (config.trigger !== 'hover') {
|
|
105
|
+
this.overlayRef.backdropClick().subscribe(() => this.destroy());
|
|
106
|
+
}
|
|
107
|
+
// --- NEW: Accessibility ---
|
|
108
|
+
const popoverId = `popover-${Math.random().toString(36).substring(2, 9)}`;
|
|
109
|
+
componentRef.location.nativeElement.setAttribute('id', popoverId);
|
|
110
|
+
trigger.setAttribute('aria-describedby', popoverId);
|
|
111
|
+
this.lastTriggerElement = trigger;
|
|
112
|
+
}
|
|
113
|
+
// Renamed from hide() to destroy() for clarity
|
|
114
|
+
destroy() {
|
|
115
|
+
if (!this.overlayRef)
|
|
116
|
+
return; // Prevent multiple calls
|
|
117
|
+
if (this.lastTriggerElement) {
|
|
118
|
+
this.lastTriggerElement.removeAttribute('aria-describedby');
|
|
119
|
+
this.lastTriggerElement = undefined;
|
|
120
|
+
}
|
|
121
|
+
this.positionSubscription?.unsubscribe();
|
|
122
|
+
this.overlayRef.dispose();
|
|
123
|
+
this.overlayRef = null;
|
|
124
|
+
}
|
|
125
|
+
getPlacementFromPosition(position) {
|
|
126
|
+
if (position.originY === 'top' && position.overlayY === 'bottom')
|
|
127
|
+
return 'top';
|
|
128
|
+
if (position.originY === 'bottom' && position.overlayY === 'top')
|
|
129
|
+
return 'bottom';
|
|
130
|
+
if (position.originX === 'start' && position.overlayX === 'end')
|
|
131
|
+
return 'left';
|
|
132
|
+
if (position.originX === 'end' && position.overlayX === 'start')
|
|
133
|
+
return 'right';
|
|
134
|
+
return 'bottom';
|
|
135
|
+
}
|
|
136
|
+
createPositionStrategy(origin, placement) {
|
|
137
|
+
let preferredPosition;
|
|
138
|
+
switch (placement) {
|
|
139
|
+
case 'top':
|
|
140
|
+
preferredPosition = positions[1];
|
|
141
|
+
break;
|
|
142
|
+
case 'right':
|
|
143
|
+
preferredPosition = positions[2];
|
|
144
|
+
break;
|
|
145
|
+
case 'left':
|
|
146
|
+
preferredPosition = positions[3];
|
|
147
|
+
break;
|
|
148
|
+
default:
|
|
149
|
+
preferredPosition = positions[0];
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
return this.overlay.position()
|
|
153
|
+
.flexibleConnectedTo(origin)
|
|
154
|
+
.withPositions([preferredPosition, ...positions])
|
|
155
|
+
.withPush(true);
|
|
156
|
+
}
|
|
157
|
+
//Document-level listeners for closing
|
|
158
|
+
onEscape() {
|
|
159
|
+
this.positionSubscription?.unsubscribe();
|
|
160
|
+
this.serviceSubscription?.unsubscribe();
|
|
161
|
+
this.destroy();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
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 });
|
|
165
|
+
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"] }] });
|
|
166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayComponent, decorators: [{
|
|
167
|
+
type: Component,
|
|
168
|
+
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" }]
|
|
169
|
+
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Injector }, { type: i2.OverlayService }]; }, propDecorators: { buttonText: [{
|
|
170
|
+
type: Input
|
|
171
|
+
}], rucInputData: [{
|
|
172
|
+
type: Input
|
|
173
|
+
}], customTheme: [{
|
|
174
|
+
type: Input
|
|
175
|
+
}], triggerButtonRef: [{
|
|
176
|
+
type: ViewChild,
|
|
177
|
+
args: [MatButton, { read: ElementRef }]
|
|
178
|
+
}], onEscape: [{
|
|
179
|
+
type: HostListener,
|
|
180
|
+
args: ['document:keydown:escape']
|
|
181
|
+
}] } });
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVjbGliLW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9ydWNsaWItb3ZlcmxheS9ydWNsaWItb3ZlcmxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3J1Y2xpYi1vdmVybGF5L3J1Y2xpYi1vdmVybGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0YsT0FBTyxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDekksT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsZUFBZSxFQUE4QyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxNQUFNLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQWlCbkQsTUFBTSxPQUFPLHNCQUFzQjtJQWlCakMsWUFDVSxPQUFnQixFQUNoQixRQUFrQixFQUNsQixjQUE4QjtRQUY5QixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBbEIvQixpQkFBWSxHQUFrQjtZQUNyQyxPQUFPLEVBQUUs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QUFHLFNBQVMsQ0FBQyxDQUFDO2FBQ2hELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUEsc0NBQXNDO0lBRXRDLFFBQVE7UUFDUixJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoQixDQUFDOztvSEE5S1Msc0JBQXNCO3dHQUF0QixzQkFBc0IsOFFBUXRCLFNBQVMsMkJBQVUsVUFBVSw2QkNsQzFDLDhTQVdBOzRGRGVhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxvQkFBb0I7a0pBTXJCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUc4QyxnQkFBZ0I7c0JBQW5FLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFrS3pDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgQ29ubmVjdGlvblBvc2l0aW9uUGFpciwgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LCBPdmVybGF5LCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9WRVJMQVlfQ09OVFJPTCwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheUNvbnRyb2wsIE92ZXJsYXlEYXRhIH0gZnJvbSAnLi4vbW9kZWwvb3ZlcmxheS50eXBlcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBPdmVybGF5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2Uvb3ZlcmxheS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3ZlcmxheUNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuLi9vdmVybGF5LWNvbnRlbnQvb3ZlcmxheS1jb250ZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IEVTQ0FQRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IHBvc2l0aW9ucyB9IGZyb20gJy4uL2NvbnN0YW50cy9wb3NpdGlvbnMnO1xyXG5cclxuZXhwb3J0IHR5cGUgUG9wb3ZlclBsYWNlbWVudCA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnO1xyXG5leHBvcnQgdHlwZSBQb3BvdmVyQW5pbWF0aW9uID0gJ2ZhZGUnIHwgJ3NjYWxlJztcclxuZXhwb3J0IHR5cGUgQ2hhcnRUeXBlID0gJ2RvdWdobnV0JyB8ICdwaWUnIHwgJ2Jhcic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0TW9kZWwge1xyXG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlO1xyXG4gIGRhdGE6IGFueTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1eHAtcnVjbGliLW92ZXJsYXknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ydWNsaWItb3ZlcmxheS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcnVjbGliLW92ZXJsYXkuY29tcG9uZW50LnNjc3MnXSxcclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSdWNsaWJPdmVybGF5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGJ1dHRvblRleHQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcnVjSW5wdXREYXRhOiBPdmVybGF5Q29uZmlnID0ge1xyXG4gICAgY29udGVudDogJ0RlZmF1bHQgY29udGVudCcsXHJcbiAgfTtcclxuICBASW5wdXQoKSBjdXN0b21UaGVtZSE6c3RyaW5nO1xyXG5cclxuICBcclxuICBAVmlld0NoaWxkKE1hdEJ1dHRvbiwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgdHJpZ2dlckJ1dHRvblJlZiE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgc2VydmljZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGNsb3NlVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+OyAvLyBVc2UgdGhlIGNvcnJlY3QgdHlwZVxyXG4gIHByaXZhdGUgbGFzdFRyaWdnZXJFbGVtZW50PzogSFRNTEVsZW1lbnQ7XHJcbiAgcHJpdmF0ZSBwb3NpdGlvblN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnV0dG9uVGV4dCkge1xyXG4gICAgICB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb24gPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLnBvcG92ZXJTdGF0ZSQuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEgJiYgIXRoaXMuaXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvdyhkYXRhLnRyaWdnZXIsIGRhdGEuY29uZmlnKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoIWRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnBvc2l0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5zZXJ2aWNlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5vdmVybGF5UmVmO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tIFRyaWdnZXIgSGFuZGxlcnMgZm9yIHNlbGYtY29udGFpbmVkIGJ1dHRvbiAtLS1cclxuICB0b2dnbGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ydWNJbnB1dERhdGEudHJpZ2dlciAhPT0gJ2hvdmVyJykge1xyXG50aGlzLmlzT3BlbiA/IHRoaXMuZGVzdHJveSgpIDogdGhpcy5zaG93KHRoaXMudHJpZ2dlckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLnJ1Y0lucHV0RGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVNb3VzZUVudGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucnVjSW5wdXREYXRhLnRyaWdnZXIgPT09ICdob3ZlcicpIHtcclxuICAgICAgaWYgKHRoaXMuY2xvc2VUaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVRpbWVvdXQpOyAvLyBDbGVhciBhbnkgcGVuZGluZyBjbG9zZSBjb21tYW5kXHJcbnRoaXMuc2hvdyh0aGlzLnRyaWdnZXJCdXR0b25SZWYubmF0aXZlRWxlbWVudCwgdGhpcy5ydWNJbnB1dERhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlTW91c2VMZWF2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJ1Y0lucHV0RGF0YS50cmlnZ2VyID09PSAnaG92ZXInKSB7XHJcbiAgICAgIC8vIFVzZSB0aGUgY29uZmlndXJhYmxlIGNsb3NlRGVsYXlcclxuICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLnJ1Y0lucHV0RGF0YS5jbG9zZURlbGF5ID8/IDIwMDtcclxuICAgICAgdGhpcy5jbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGVzdHJveSgpLCBkZWxheSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBzaG93KHRyaWdnZXI6IEhUTUxFbGVtZW50LCBjb25maWc6IE92ZXJsYXlDb25maWcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneShcclxuICAgICAgdHJpZ2dlcixcclxuICAgICAgY29uZmlnLnBsYWNlbWVudCB8fCAnYm90dG9tJ1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneSxcclxuICAgICAgaGFzQmFja2Ryb3A6IGNvbmZpZy50cmlnZ2VyICE9PSAnaG92ZXInLCAvLyBObyBiYWNrZHJvcCBmb3IgaG92ZXJcclxuICAgICAgYmFja2Ryb3BDbGFzczogJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJyxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcclxuICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjp0cnVlXHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKGZpbHRlcihldmVudD0+IGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSkpLnN1YnNjcmliZSgoKT0+IHRoaXMuZGVzdHJveSgpKTtcclxuXHJcbiAgICAvLyBDcmVhdGUgdGhlIGNvbnRyb2wgb2JqZWN0IHdpdGggdGhlIGNsb3NlIGNhbGxiYWNrXHJcbiAgICBjb25zdCBjb250cm9sOiBPdmVybGF5Q29udHJvbCA9IHtcclxuICAgICAgY29uZmlnLFxyXG4gICAgICBjbG9zZTogdGhpcy5kZXN0cm95LmJpbmQodGhpcyksXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxyXG4gICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE9WRVJMQVlfQ09OVFJPTCwgdXNlVmFsdWU6IGNvbnRyb2wgfV0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKE92ZXJsYXlDb250ZW50Q29tcG9uZW50LCBudWxsLCBpbmplY3Rvcik7XHJcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcblxyXG4gICAgdGhpcy5wb3NpdGlvblN1YnNjcmlwdGlvbiA9IHBvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xyXG4gICAgICBjb25zdCBuZXdQbGFjZW1lbnQgPSB0aGlzLmdldFBsYWNlbWVudEZyb21Qb3NpdGlvbihjaGFuZ2UuY29ubmVjdGlvblBhaXIpO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYWN0dWFsUGxhY2VtZW50ID0gbmV3UGxhY2VtZW50O1xyXG4gICAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gLS0tIE5FVzogU3Vic2NyaWJlIHRvIHRoZSBjb250ZW50IGNvbXBvbmVudCdzIGV2ZW50cyAtLS1cclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5tb3VzZUVudGVyUG9wb3Zlci5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jbG9zZVRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLmNsb3NlVGltZW91dCk7XHJcbiAgICB9KTtcclxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5tb3VzZUxlYXZlUG9wb3Zlci5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhhbmRsZU1vdXNlTGVhdmUoKTsgLy8gUmUtdXNlIHRoZSBzYW1lIGxvZ2ljXHJcbiAgICB9KTtcclxuXHJcbiAgICAgICAvLyBDbG9zZSBvbiBiYWNrZHJvcCBjbGljayBmb3IgJ2NsaWNrJyB0cmlnZ2Vyc1xyXG4gICAgaWYgKGNvbmZpZy50cmlnZ2VyICE9PSAnaG92ZXInKSB7XHJcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGVzdHJveSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0gTkVXOiBBY2Nlc3NpYmlsaXR5IC0tLVxyXG4gICAgY29uc3QgcG9wb3ZlcklkID0gYHBvcG92ZXItJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YDtcclxuICAgIGNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCBwb3BvdmVySWQpO1xyXG4gICAgdHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBwb3BvdmVySWQpO1xyXG4gICAgdGhpcy5sYXN0VHJpZ2dlckVsZW1lbnQgPSB0cmlnZ2VyO1xyXG5cclxuICB9XHJcblxyXG4gICAvLyBSZW5hbWVkIGZyb20gaGlkZSgpIHRvIGRlc3Ryb3koKSBmb3IgY2xhcml0eVxyXG4gcHJpdmF0ZSBkZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYpIHJldHVybjsgLy8gUHJldmVudCBtdWx0aXBsZSBjYWxsc1xyXG5cclxuICAgIGlmICh0aGlzLmxhc3RUcmlnZ2VyRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmxhc3RUcmlnZ2VyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcclxuICAgICAgdGhpcy5sYXN0VHJpZ2dlckVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvc2l0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBsYWNlbWVudEZyb21Qb3NpdGlvbihwb3NpdGlvbjogQ29ubmVjdGlvblBvc2l0aW9uUGFpcik6IFBvcG92ZXJQbGFjZW1lbnQge1xyXG4gICAgaWYgKHBvc2l0aW9uLm9yaWdpblkgPT09ICd0b3AnICYmIHBvc2l0aW9uLm92ZXJsYXlZID09PSAnYm90dG9tJykgcmV0dXJuICd0b3AnO1xyXG4gICAgaWYgKHBvc2l0aW9uLm9yaWdpblkgPT09ICdib3R0b20nICYmIHBvc2l0aW9uLm92ZXJsYXlZID09PSAndG9wJykgcmV0dXJuICdib3R0b20nO1xyXG4gICAgaWYgKHBvc2l0aW9uLm9yaWdpblggPT09ICdzdGFydCcgJiYgcG9zaXRpb24ub3ZlcmxheVggPT09ICdlbmQnKSByZXR1cm4gJ2xlZnQnO1xyXG4gICAgaWYgKHBvc2l0aW9uLm9yaWdpblggPT09ICdlbmQnICYmIHBvc2l0aW9uLm92ZXJsYXlYID09PSAnc3RhcnQnKSByZXR1cm4gJ3JpZ2h0JztcclxuICAgIHJldHVybiAnYm90dG9tJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUG9zaXRpb25TdHJhdGVneShvcmlnaW46IEhUTUxFbGVtZW50LCBwbGFjZW1lbnQ6IHN0cmluZyk6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSB7XHJcbiAgICBsZXQgcHJlZmVycmVkUG9zaXRpb246IENvbm5lY3RlZFBvc2l0aW9uO1xyXG4gICAgc3dpdGNoIChwbGFjZW1lbnQpIHtcclxuICAgICAgY2FzZSAndG9wJzogcHJlZmVycmVkUG9zaXRpb24gPSBwb3NpdGlvbnNbMV07IGJyZWFrO1xyXG4gICAgICBjYXNlICdyaWdodCc6IHByZWZlcnJlZFBvc2l0aW9uID0gcG9zaXRpb25zWzJdOyBicmVhaztcclxuICAgICAgY2FzZSAnbGVmdCc6IHByZWZlcnJlZFBvc2l0aW9uID0gcG9zaXRpb25zWzNdOyBicmVhaztcclxuICAgICAgZGVmYXVsdDogcHJlZmVycmVkUG9zaXRpb24gPSBwb3NpdGlvbnNbMF07IGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKVxyXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyhvcmlnaW4pXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKFtwcmVmZXJyZWRQb3NpdGlvbiwgLi4ucG9zaXRpb25zXSlcclxuICAgICAgLndpdGhQdXNoKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgIC8vRG9jdW1lbnQtbGV2ZWwgbGlzdGVuZXJzIGZvciBjbG9zaW5nXHJcbiAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd246ZXNjYXBlJylcclxuICAgb25Fc2NhcGUoKTp2b2lkIHtcclxuICAgdGhpcy5wb3NpdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc2VydmljZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICB9XHJcblxyXG59XHJcbiIsIjxidXR0b25cclxubWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgKm5nSWY9XCJidXR0b25UZXh0XCJcclxuICAjdHJpZ2dlckJ1dHRvblxyXG4gIChjbGljayk9XCJ0b2dnbGUoKVwiXHJcbiAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlTW91c2VFbnRlcigpXCJcclxuICAobW91c2VsZWF2ZSk9XCJoYW5kbGVNb3VzZUxlYXZlKClcIlxyXG4gIGNsYXNzPVwicG9wb3Zlci10cmlnZ2VyLWJ0blwiPlxyXG4gIHt7IGJ1dHRvblRleHQgfX1cclxuPC9idXR0b24+XHJcbiJdfQ==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { RuclibOverlayComponent } from './ruclib-overlay/ruclib-overlay.component';
|
|
5
|
+
import { OverlayContentComponent } from './overlay-content/overlay-content.component';
|
|
6
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
7
|
+
import { OverlayModule } from '@angular/cdk/overlay';
|
|
8
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
9
|
+
import { RucOverlayChartComponent } from './ruc-overlay-chart/ruc-overlay-chart.component';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
export class RuclibOverlayModule {
|
|
12
|
+
}
|
|
13
|
+
RuclibOverlayModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
14
|
+
RuclibOverlayModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayModule, declarations: [RuclibOverlayComponent,
|
|
15
|
+
OverlayContentComponent,
|
|
16
|
+
RucOverlayChartComponent], imports: [CommonModule,
|
|
17
|
+
MatIconModule,
|
|
18
|
+
OverlayModule,
|
|
19
|
+
BrowserAnimationsModule,
|
|
20
|
+
MatButtonModule], exports: [RuclibOverlayComponent, RucOverlayChartComponent] });
|
|
21
|
+
RuclibOverlayModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayModule, imports: [CommonModule,
|
|
22
|
+
MatIconModule,
|
|
23
|
+
OverlayModule,
|
|
24
|
+
BrowserAnimationsModule,
|
|
25
|
+
MatButtonModule] });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOverlayModule, decorators: [{
|
|
27
|
+
type: NgModule,
|
|
28
|
+
args: [{
|
|
29
|
+
imports: [
|
|
30
|
+
CommonModule,
|
|
31
|
+
MatIconModule,
|
|
32
|
+
OverlayModule,
|
|
33
|
+
BrowserAnimationsModule,
|
|
34
|
+
MatButtonModule,
|
|
35
|
+
],
|
|
36
|
+
declarations: [
|
|
37
|
+
RuclibOverlayComponent,
|
|
38
|
+
OverlayContentComponent,
|
|
39
|
+
RucOverlayChartComponent
|
|
40
|
+
],
|
|
41
|
+
exports: [RuclibOverlayComponent, RucOverlayChartComponent],
|
|
42
|
+
}]
|
|
43
|
+
}] });
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVjbGliLW92ZXJsYXkubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ydWNsaWItb3ZlcmxheS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7O0FBaUIzRixNQUFNLE9BQU8sbUJBQW1COztpSEFBbkIsbUJBQW1CO2tIQUFuQixtQkFBbUIsaUJBTjVCLHNCQUFzQjtRQUN0Qix1QkFBdUI7UUFDdkIsd0JBQXdCLGFBVHhCLFlBQVk7UUFDWixhQUFhO1FBQ2IsYUFBYTtRQUNiLHVCQUF1QjtRQUN2QixlQUFlLGFBT1Asc0JBQXNCLEVBQUUsd0JBQXdCO2tIQUUvQyxtQkFBbUIsWUFiNUIsWUFBWTtRQUNaLGFBQWE7UUFDYixhQUFhO1FBQ2IsdUJBQXVCO1FBQ3ZCLGVBQWU7NEZBU04sbUJBQW1CO2tCQWYvQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYix1QkFBdUI7d0JBQ3ZCLGVBQWU7cUJBQ2hCO29CQUNELFlBQVksRUFBRTt3QkFDWixzQkFBc0I7d0JBQ3RCLHVCQUF1Qjt3QkFDdkIsd0JBQXdCO3FCQUN6QjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSx3QkFBd0IsQ0FBQztpQkFDNUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJ1Y2xpYk92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuL3J1Y2xpYi1vdmVybGF5L3J1Y2xpYi1vdmVybGF5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE92ZXJsYXlDb250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi9vdmVybGF5LWNvbnRlbnQvb3ZlcmxheS1jb250ZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgUnVjT3ZlcmxheUNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi9ydWMtb3ZlcmxheS1jaGFydC9ydWMtb3ZlcmxheS1jaGFydC5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgT3ZlcmxheU1vZHVsZSxcclxuICAgIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBSdWNsaWJPdmVybGF5Q29tcG9uZW50LFxyXG4gICAgT3ZlcmxheUNvbnRlbnRDb21wb25lbnQsXHJcbiAgICBSdWNPdmVybGF5Q2hhcnRDb21wb25lbnRcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtSdWNsaWJPdmVybGF5Q29tcG9uZW50LCBSdWNPdmVybGF5Q2hhcnRDb21wb25lbnRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUnVjbGliT3ZlcmxheU1vZHVsZSB7fVxyXG4iXX0=
|
|
@@ -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==
|