@radix-ng/primitives 0.19.0 → 0.20.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.
Files changed (40) hide show
  1. package/compodoc/documentation.json +2751 -957
  2. package/esm2022/popover/index.mjs +41 -0
  3. package/esm2022/popover/radix-ng-primitives-popover.mjs +5 -0
  4. package/esm2022/popover/src/popover-arrow.directive.mjs +112 -0
  5. package/esm2022/popover/src/popover-arrow.token.mjs +3 -0
  6. package/esm2022/popover/src/popover-close.directive.mjs +37 -0
  7. package/esm2022/popover/src/popover-content.directive.mjs +227 -0
  8. package/esm2022/popover/src/popover-root.directive.mjs +142 -0
  9. package/esm2022/popover/src/popover-root.inject.mjs +7 -0
  10. package/esm2022/popover/src/popover-root.token.mjs +3 -0
  11. package/esm2022/popover/src/popover-trigger.directive.mjs +42 -0
  12. package/esm2022/popover/src/popover.constants.mjs +90 -0
  13. package/esm2022/popover/src/popover.types.mjs +14 -0
  14. package/esm2022/popover/src/popover.utils.mjs +115 -0
  15. package/esm2022/radio/src/radio-indicator.directive.mjs +3 -3
  16. package/esm2022/radio/src/radio-item-input.directive.mjs +2 -2
  17. package/esm2022/radio/src/radio-item.directive.mjs +10 -13
  18. package/esm2022/radio/src/radio-root.directive.mjs +16 -20
  19. package/esm2022/radio/src/radio-tokens.mjs +1 -1
  20. package/fesm2022/radix-ng-primitives-popover.mjs +796 -0
  21. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -0
  22. package/fesm2022/radix-ng-primitives-radio.mjs +26 -33
  23. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  24. package/package.json +7 -1
  25. package/popover/README.md +3 -0
  26. package/popover/index.d.ts +17 -0
  27. package/popover/src/popover-arrow.directive.d.ts +37 -0
  28. package/popover/src/popover-arrow.token.d.ts +3 -0
  29. package/popover/src/popover-close.directive.d.ts +15 -0
  30. package/popover/src/popover-content.directive.d.ts +84 -0
  31. package/popover/src/popover-root.directive.d.ts +58 -0
  32. package/popover/src/popover-root.inject.d.ts +2 -0
  33. package/popover/src/popover-root.token.d.ts +3 -0
  34. package/popover/src/popover-trigger.directive.d.ts +18 -0
  35. package/popover/src/popover.constants.d.ts +8 -0
  36. package/popover/src/popover.types.d.ts +34 -0
  37. package/popover/src/popover.utils.d.ts +12 -0
  38. package/radio/src/radio-item.directive.d.ts +2 -2
  39. package/radio/src/radio-root.directive.d.ts +9 -8
  40. package/radio/src/radio-tokens.d.ts +6 -4
@@ -0,0 +1,41 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { RdxPopoverArrowDirective } from './src/popover-arrow.directive';
3
+ import { RdxPopoverCloseDirective } from './src/popover-close.directive';
4
+ import { RdxPopoverContentDirective } from './src/popover-content.directive';
5
+ import { RdxPopoverRootDirective } from './src/popover-root.directive';
6
+ import { RdxPopoverTriggerDirective } from './src/popover-trigger.directive';
7
+ import * as i0 from "@angular/core";
8
+ export * from './src/popover-arrow.directive';
9
+ export * from './src/popover-close.directive';
10
+ export * from './src/popover-content.directive';
11
+ export * from './src/popover-root.directive';
12
+ export * from './src/popover-trigger.directive';
13
+ export * from './src/popover.types';
14
+ const _imports = [
15
+ RdxPopoverArrowDirective,
16
+ RdxPopoverCloseDirective,
17
+ RdxPopoverContentDirective,
18
+ RdxPopoverTriggerDirective,
19
+ RdxPopoverRootDirective
20
+ ];
21
+ export class RdxPopoverModule {
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverModule, imports: [RdxPopoverArrowDirective,
24
+ RdxPopoverCloseDirective,
25
+ RdxPopoverContentDirective,
26
+ RdxPopoverTriggerDirective,
27
+ RdxPopoverRootDirective], exports: [RdxPopoverArrowDirective,
28
+ RdxPopoverCloseDirective,
29
+ RdxPopoverContentDirective,
30
+ RdxPopoverTriggerDirective,
31
+ RdxPopoverRootDirective] }); }
32
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverModule }); }
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverModule, decorators: [{
35
+ type: NgModule,
36
+ args: [{
37
+ imports: [..._imports],
38
+ exports: [..._imports]
39
+ }]
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3BvcG92ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFFN0UsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMscUJBQXFCLENBQUM7QUFFcEMsTUFBTSxRQUFRLEdBQUc7SUFDYix3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsdUJBQXVCO0NBQzFCLENBQUM7QUFNRixNQUFNLE9BQU8sZ0JBQWdCOytHQUFoQixnQkFBZ0I7Z0hBQWhCLGdCQUFnQixZQVh6Qix3QkFBd0I7WUFDeEIsd0JBQXdCO1lBQ3hCLDBCQUEwQjtZQUMxQiwwQkFBMEI7WUFDMUIsdUJBQXVCLGFBSnZCLHdCQUF3QjtZQUN4Qix3QkFBd0I7WUFDeEIsMEJBQTBCO1lBQzFCLDBCQUEwQjtZQUMxQix1QkFBdUI7Z0hBT2QsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUo1QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUN0QixPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckFycm93RGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvcG9wb3Zlci1hcnJvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckNsb3NlRGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvcG9wb3Zlci1jbG9zZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL3NyYy9wb3BvdmVyLWNvbnRlbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJkeFBvcG92ZXJSb290RGlyZWN0aXZlIH0gZnJvbSAnLi9zcmMvcG9wb3Zlci1yb290LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZHhQb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4vc3JjL3BvcG92ZXItdHJpZ2dlci5kaXJlY3RpdmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL3NyYy9wb3BvdmVyLWFycm93LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9wb3BvdmVyLWNsb3NlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9wb3BvdmVyLWNvbnRlbnQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3BvcG92ZXItcm9vdC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvcG9wb3Zlci10cmlnZ2VyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9wb3BvdmVyLnR5cGVzJztcblxuY29uc3QgX2ltcG9ydHMgPSBbXG4gICAgUmR4UG9wb3ZlckFycm93RGlyZWN0aXZlLFxuICAgIFJkeFBvcG92ZXJDbG9zZURpcmVjdGl2ZSxcbiAgICBSZHhQb3BvdmVyQ29udGVudERpcmVjdGl2ZSxcbiAgICBSZHhQb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZSxcbiAgICBSZHhQb3BvdmVyUm9vdERpcmVjdGl2ZVxuXTtcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbLi4uX2ltcG9ydHNdLFxuICAgIGV4cG9ydHM6IFsuLi5faW1wb3J0c11cbn0pXG5leHBvcnQgY2xhc3MgUmR4UG9wb3Zlck1vZHVsZSB7fVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaXgtbmctcHJpbWl0aXZlcy1wb3BvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9wb3BvdmVyL3JhZGl4LW5nLXByaW1pdGl2ZXMtcG9wb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,112 @@
1
+ import { computed, Directive, effect, ElementRef, forwardRef, inject, input, Renderer2, signal, untracked } from '@angular/core';
2
+ import { toSignal } from '@angular/core/rxjs-interop';
3
+ import { RdxPopoverArrowToken } from './popover-arrow.token';
4
+ import { injectPopoverRoot } from './popover-root.inject';
5
+ import { getArrowPositionParams, getSideAndAlignFromAllPossibleConnectedPositions } from './popover.utils';
6
+ import * as i0 from "@angular/core";
7
+ export class RdxPopoverArrowDirective {
8
+ constructor() {
9
+ /** @ignore */
10
+ this.renderer = inject(Renderer2);
11
+ /** @ignore */
12
+ this.popoverRoot = injectPopoverRoot();
13
+ /** @ignore */
14
+ this.elementRef = inject(ElementRef);
15
+ /**
16
+ * The width of the arrow in pixels.
17
+ */
18
+ this.width = input(10);
19
+ /**
20
+ * The height of the arrow in pixels.
21
+ */
22
+ this.height = input(5);
23
+ /** @ignore */
24
+ this.arrowSvgElement = computed(() => {
25
+ const width = this.width();
26
+ const height = this.height();
27
+ const svgElement = this.renderer.createElement('svg', 'svg');
28
+ this.renderer.setAttribute(svgElement, 'viewBox', '0 0 30 10');
29
+ this.renderer.setAttribute(svgElement, 'width', String(width));
30
+ this.renderer.setAttribute(svgElement, 'height', String(height));
31
+ const polygonElement = this.renderer.createElement('polygon', 'svg');
32
+ this.renderer.setAttribute(polygonElement, 'points', '0,0 30,0 15,10');
33
+ this.renderer.setAttribute(svgElement, 'preserveAspectRatio', 'none');
34
+ this.renderer.appendChild(svgElement, polygonElement);
35
+ return svgElement;
36
+ });
37
+ /** @ignore */
38
+ this.currentArrowSvgElement = signal(void 0);
39
+ /** @ignore */
40
+ this.position = toSignal(this.popoverRoot.popoverContentDirective().positionChange());
41
+ this.onArrowSvgElementChangeEffect();
42
+ this.onContentPositionChangeEffect();
43
+ }
44
+ /** @ignore */
45
+ ngAfterViewInit() {
46
+ if (this.elementRef.nativeElement.parentElement) {
47
+ this.renderer.setStyle(this.elementRef.nativeElement.parentElement, 'position', 'relative');
48
+ }
49
+ this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'absolute');
50
+ this.renderer.setStyle(this.elementRef.nativeElement, 'boxSizing', '');
51
+ this.renderer.setStyle(this.elementRef.nativeElement, 'fontSize', '0px');
52
+ this.triggerRect = this.popoverRoot.popoverTriggerDirective().elementRef.nativeElement.getBoundingClientRect();
53
+ }
54
+ /** @ignore */
55
+ setPosition(position) {
56
+ const posParams = getArrowPositionParams(getSideAndAlignFromAllPossibleConnectedPositions(position.connectionPair), { width: this.width(), height: this.height() }, { width: this.triggerRect.width, height: this.triggerRect.height });
57
+ this.renderer.setStyle(this.elementRef.nativeElement, 'top', posParams.top);
58
+ this.renderer.setStyle(this.elementRef.nativeElement, 'bottom', posParams.bottom);
59
+ this.renderer.setStyle(this.elementRef.nativeElement, 'left', posParams.left);
60
+ this.renderer.setStyle(this.elementRef.nativeElement, 'right', posParams.right);
61
+ this.renderer.setStyle(this.elementRef.nativeElement, 'transform', posParams.transform);
62
+ }
63
+ /** @ignore */
64
+ onArrowSvgElementChangeEffect() {
65
+ effect(() => {
66
+ const arrowElement = this.arrowSvgElement();
67
+ untracked(() => {
68
+ const currentArrowSvgElement = this.currentArrowSvgElement();
69
+ if (currentArrowSvgElement) {
70
+ this.renderer.removeChild(this.elementRef.nativeElement, currentArrowSvgElement);
71
+ }
72
+ this.currentArrowSvgElement.set(arrowElement);
73
+ this.renderer.setStyle(this.elementRef.nativeElement, 'width', `${this.width()}px`);
74
+ this.renderer.setStyle(this.elementRef.nativeElement, 'height', `${this.height()}px`);
75
+ this.renderer.appendChild(this.elementRef.nativeElement, this.currentArrowSvgElement());
76
+ });
77
+ });
78
+ }
79
+ /** @ignore */
80
+ onContentPositionChangeEffect() {
81
+ effect(() => {
82
+ const position = this.position();
83
+ untracked(() => {
84
+ if (!position) {
85
+ return;
86
+ }
87
+ this.setPosition(position);
88
+ });
89
+ });
90
+ }
91
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverArrowDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
92
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxPopoverArrowDirective, isStandalone: true, selector: "[rdxPopoverArrow]", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
93
+ {
94
+ provide: RdxPopoverArrowToken,
95
+ useExisting: forwardRef(() => RdxPopoverArrowDirective)
96
+ }
97
+ ], ngImport: i0 }); }
98
+ }
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverArrowDirective, decorators: [{
100
+ type: Directive,
101
+ args: [{
102
+ selector: '[rdxPopoverArrow]',
103
+ standalone: true,
104
+ providers: [
105
+ {
106
+ provide: RdxPopoverArrowToken,
107
+ useExisting: forwardRef(() => RdxPopoverArrowDirective)
108
+ }
109
+ ]
110
+ }]
111
+ }], ctorParameters: () => [] });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1hcnJvdy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3BvcG92ZXIvc3JjL3BvcG92ZXItYXJyb3cuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFSCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxnREFBZ0QsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVkzRyxNQUFNLE9BQU8sd0JBQXdCO0lBMkNqQztRQTFDQSxjQUFjO1FBQ0csYUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxjQUFjO1FBQ0csZ0JBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25ELGNBQWM7UUFDRyxlQUFVLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUUxRTs7V0FFRztRQUNNLFVBQUssR0FBRyxLQUFLLENBQVMsRUFBRSxDQUFDLENBQUM7UUFFbkM7O1dBRUc7UUFDTSxXQUFNLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBRW5DLGNBQWM7UUFDTCxvQkFBZSxHQUFHLFFBQVEsQ0FBYyxHQUFHLEVBQUU7WUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FB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bmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGNvbXB1dGVkLFxuICAgIERpcmVjdGl2ZSxcbiAgICBlZmZlY3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgc2lnbmFsLFxuICAgIHVudHJhY2tlZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckFycm93VG9rZW4gfSBmcm9tICcuL3BvcG92ZXItYXJyb3cudG9rZW4nO1xuaW1wb3J0IHsgaW5qZWN0UG9wb3ZlclJvb3QgfSBmcm9tICcuL3BvcG92ZXItcm9vdC5pbmplY3QnO1xuaW1wb3J0IHsgZ2V0QXJyb3dQb3NpdGlvblBhcmFtcywgZ2V0U2lkZUFuZEFsaWduRnJvbUFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zIH0gZnJvbSAnLi9wb3BvdmVyLnV0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4UG9wb3ZlckFycm93XScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogUmR4UG9wb3ZlckFycm93VG9rZW4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSZHhQb3BvdmVyQXJyb3dEaXJlY3RpdmUpXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFJkeFBvcG92ZXJBcnJvd0RpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3BvdmVyUm9vdCA9IGluamVjdFBvcG92ZXJSb290KCk7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBhcnJvdyBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgd2lkdGggPSBpbnB1dDxudW1iZXI+KDEwKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGFycm93IGluIHBpeGVscy5cbiAgICAgKi9cbiAgICByZWFkb25seSBoZWlnaHQgPSBpbnB1dDxudW1iZXI+KDUpO1xuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBhcnJvd1N2Z0VsZW1lbnQgPSBjb21wdXRlZDxIVE1MRWxlbWVudD4oKCkgPT4ge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMud2lkdGgoKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTtcblxuICAgICAgICBjb25zdCBzdmdFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdmcnLCAnc3ZnJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHN2Z0VsZW1lbnQsICd2aWV3Qm94JywgJzAgMCAzMCAxMCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShzdmdFbGVtZW50LCAnd2lkdGgnLCBTdHJpbmcod2lkdGgpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoc3ZnRWxlbWVudCwgJ2hlaWdodCcsIFN0cmluZyhoZWlnaHQpKTtcbiAgICAgICAgY29uc3QgcG9seWdvbkVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3BvbHlnb24nLCAnc3ZnJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHBvbHlnb25FbGVtZW50LCAncG9pbnRzJywgJzAsMCAzMCwwIDE1LDEwJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHN2Z0VsZW1lbnQsICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ25vbmUnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChzdmdFbGVtZW50LCBwb2x5Z29uRWxlbWVudCk7XG5cbiAgICAgICAgcmV0dXJuIHN2Z0VsZW1lbnQ7XG4gICAgfSk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudEFycm93U3ZnRWxlbWVudCA9IHNpZ25hbDxIVE1MT3JTVkdFbGVtZW50IHwgdW5kZWZpbmVkPih2b2lkIDApO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3NpdGlvbiA9IHRvU2lnbmFsKHRoaXMucG9wb3ZlclJvb3QucG9wb3ZlckNvbnRlbnREaXJlY3RpdmUoKS5wb3NpdGlvbkNoYW5nZSgpKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSB0cmlnZ2VyUmVjdDogRE9NUmVjdDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9uQXJyb3dTdmdFbGVtZW50Q2hhbmdlRWZmZWN0KCk7XG4gICAgICAgIHRoaXMub25Db250ZW50UG9zaXRpb25DaGFuZ2VFZmZlY3QoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCwgJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdib3hTaXppbmcnLCAnJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb250U2l6ZScsICcwcHgnKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVjdCA9IHRoaXMucG9wb3ZlclJvb3QucG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUoKS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHNldFBvc2l0aW9uKHBvc2l0aW9uOiBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgcG9zUGFyYW1zID0gZ2V0QXJyb3dQb3NpdGlvblBhcmFtcyhcbiAgICAgICAgICAgIGdldFNpZGVBbmRBbGlnbkZyb21BbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucyhwb3NpdGlvbi5jb25uZWN0aW9uUGFpciksXG4gICAgICAgICAgICB7IHdpZHRoOiB0aGlzLndpZHRoKCksIGhlaWdodDogdGhpcy5oZWlnaHQoKSB9LFxuICAgICAgICAgICAgeyB3aWR0aDogdGhpcy50cmlnZ2VyUmVjdC53aWR0aCwgaGVpZ2h0OiB0aGlzLnRyaWdnZXJSZWN0LmhlaWdodCB9XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RvcCcsIHBvc1BhcmFtcy50b3ApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYm90dG9tJywgcG9zUGFyYW1zLmJvdHRvbSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdsZWZ0JywgcG9zUGFyYW1zLmxlZnQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAncmlnaHQnLCBwb3NQYXJhbXMucmlnaHQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgcG9zUGFyYW1zLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uQXJyb3dTdmdFbGVtZW50Q2hhbmdlRWZmZWN0KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJyb3dFbGVtZW50ID0gdGhpcy5hcnJvd1N2Z0VsZW1lbnQoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEFycm93U3ZnRWxlbWVudCA9IHRoaXMuY3VycmVudEFycm93U3ZnRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QXJyb3dTdmdFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGN1cnJlbnRBcnJvd1N2Z0VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBcnJvd1N2Z0VsZW1lbnQuc2V0KGFycm93RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgYCR7dGhpcy53aWR0aCgpfXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke3RoaXMuaGVpZ2h0KCl9cHhgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmN1cnJlbnRBcnJvd1N2Z0VsZW1lbnQoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uQ29udGVudFBvc2l0aW9uQ2hhbmdlRWZmZWN0KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uKCk7XG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const RdxPopoverArrowToken = new InjectionToken('RdxPopoverArrowToken');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1hcnJvdy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci1hcnJvdy50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUEyQixzQkFBc0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJkeFBvcG92ZXJBcnJvd0RpcmVjdGl2ZSB9IGZyb20gJy4vcG9wb3Zlci1hcnJvdy5kaXJlY3RpdmUnO1xuXG5leHBvcnQgY29uc3QgUmR4UG9wb3ZlckFycm93VG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48UmR4UG9wb3ZlckFycm93RGlyZWN0aXZlPignUmR4UG9wb3ZlckFycm93VG9rZW4nKTtcbiJdfQ==
@@ -0,0 +1,37 @@
1
+ import { Directive, effect, ElementRef, inject, Renderer2, untracked } from '@angular/core';
2
+ import { injectPopoverRoot } from './popover-root.inject';
3
+ import * as i0 from "@angular/core";
4
+ export class RdxPopoverCloseDirective {
5
+ constructor() {
6
+ /** @ignore */
7
+ this.popoverRoot = injectPopoverRoot();
8
+ /** @ignore */
9
+ this.elementRef = inject((ElementRef));
10
+ /** @ignore */
11
+ this.renderer = inject(Renderer2);
12
+ this.onIsControlledExternallyEffect();
13
+ }
14
+ /** @ignore */
15
+ onIsControlledExternallyEffect() {
16
+ effect(() => {
17
+ const isControlledExternally = this.popoverRoot.controlledExternally()();
18
+ untracked(() => {
19
+ this.renderer.setStyle(this.elementRef.nativeElement, 'display', isControlledExternally ? 'none' : null);
20
+ });
21
+ });
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverCloseDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
24
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxPopoverCloseDirective, isStandalone: true, selector: "[rdxPopoverClose]", host: { attributes: { "type": "button" }, listeners: { "click": "popoverRoot.handleClose()" } }, ngImport: i0 }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverCloseDirective, decorators: [{
27
+ type: Directive,
28
+ args: [{
29
+ selector: '[rdxPopoverClose]',
30
+ standalone: true,
31
+ host: {
32
+ type: 'button',
33
+ '(click)': 'popoverRoot.handleClose()'
34
+ }
35
+ }]
36
+ }], ctorParameters: () => [] });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jbG9zZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3BvcG92ZXIvc3JjL3BvcG92ZXItY2xvc2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFVMUQsTUFBTSxPQUFPLHdCQUF3QjtJQVFqQztRQVBBLGNBQWM7UUFDTCxnQkFBVyxHQUFHLGlCQUFpQixFQUFFLENBQUM7UUFDM0MsY0FBYztRQUNMLGVBQVUsR0FBRyxNQUFNLENBQTBCLENBQUEsVUFBdUIsQ0FBQSxDQUFDLENBQUM7UUFDL0UsY0FBYztRQUNHLGFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFHMUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELGNBQWM7SUFDTiw4QkFBOEI7UUFDbEMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNSLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7WUFFekUsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQzdCLFNBQVMsRUFDVCxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3pDLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0F6QlEsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBUnBDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDRixJQUFJLEVBQUUsUUFBUTt3QkFDZCxTQUFTLEVBQUUsMkJBQTJCO3FCQUN6QztpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIFJlbmRlcmVyMiwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RQb3BvdmVyUm9vdCB9IGZyb20gJy4vcG9wb3Zlci1yb290LmluamVjdCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3JkeFBvcG92ZXJDbG9zZV0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdDoge1xuICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgJyhjbGljayknOiAncG9wb3ZlclJvb3QuaGFuZGxlQ2xvc2UoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFJkeFBvcG92ZXJDbG9zZURpcmVjdGl2ZSB7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBwb3BvdmVyUm9vdCA9IGluamVjdFBvcG92ZXJSb290KCk7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vbklzQ29udHJvbGxlZEV4dGVybmFsbHlFZmZlY3QoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb25Jc0NvbnRyb2xsZWRFeHRlcm5hbGx5RWZmZWN0KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNDb250cm9sbGVkRXh0ZXJuYWxseSA9IHRoaXMucG9wb3ZlclJvb3QuY29udHJvbGxlZEV4dGVybmFsbHkoKSgpO1xuXG4gICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAnZGlzcGxheScsXG4gICAgICAgICAgICAgICAgICAgIGlzQ29udHJvbGxlZEV4dGVybmFsbHkgPyAnbm9uZScgOiBudWxsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,227 @@
1
+ import { CdkConnectedOverlay, Overlay } from '@angular/cdk/overlay';
2
+ import { computed, DestroyRef, Directive, effect, inject, input, output, SimpleChange, TemplateRef, untracked } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { filter, tap } from 'rxjs';
5
+ import { injectPopoverRoot } from './popover-root.inject';
6
+ import { DEFAULTS } from './popover.constants';
7
+ import { RdxPopoverAlign, RdxPopoverSide } from './popover.types';
8
+ import { getAllPossibleConnectedPositions, getContentPosition } from './popover.utils';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/cdk/overlay";
11
+ export class RdxPopoverContentDirective {
12
+ constructor() {
13
+ /** @ignore */
14
+ this.popoverRoot = injectPopoverRoot();
15
+ /** @ignore */
16
+ this.templateRef = inject(TemplateRef);
17
+ /** @ignore */
18
+ this.overlay = inject(Overlay);
19
+ /** @ignore */
20
+ this.destroyRef = inject(DestroyRef);
21
+ /** @ignore */
22
+ this.connectedOverlay = inject(CdkConnectedOverlay);
23
+ /**
24
+ * The preferred side of the trigger to render against when open. Will be reversed when collisions occur and avoidCollisions is enabled.
25
+ */
26
+ this.side = input(RdxPopoverSide.Top);
27
+ /**
28
+ * The distance in pixels from the trigger.
29
+ */
30
+ this.sideOffset = input(void 0);
31
+ /**
32
+ * The preferred alignment against the trigger. May change when collisions occur.
33
+ */
34
+ this.align = input(RdxPopoverAlign.Center);
35
+ /**
36
+ * An offset in pixels from the "start" or "end" alignment options.
37
+ */
38
+ this.alignOffset = input(void 0);
39
+ /**
40
+ * Whether to add some alternate positions of the content.
41
+ */
42
+ this.disableAlternatePositions = input(false);
43
+ /** @ingore */
44
+ this.positions = computed(() => {
45
+ const greatestDimensionFromTheArrow = Math.max(this.popoverRoot.popoverArrowDirective()?.width() ?? 0, this.popoverRoot.popoverArrowDirective()?.height() ?? 0);
46
+ const offsets = {
47
+ sideOffset: this.sideOffset() ?? (greatestDimensionFromTheArrow || DEFAULTS.offsets.side),
48
+ alignOffset: this.alignOffset() ?? (greatestDimensionFromTheArrow || DEFAULTS.offsets.align)
49
+ };
50
+ const basePosition = getContentPosition({
51
+ side: this.side(),
52
+ align: this.align(),
53
+ sideOffset: offsets.sideOffset,
54
+ alignOffset: offsets.alignOffset
55
+ });
56
+ const positions = [basePosition];
57
+ if (!this.disableAlternatePositions()) {
58
+ /**
59
+ * Alternate positions for better user experience along the X/Y axis (e.g. vertical/horizontal scrolling)
60
+ */
61
+ const allPossibleConnectedPositions = getAllPossibleConnectedPositions();
62
+ allPossibleConnectedPositions.forEach((value, key) => {
63
+ const sideAndAlignArray = key.split('|');
64
+ if (sideAndAlignArray[0] !== this.side() ||
65
+ sideAndAlignArray[1] !== this.align()) {
66
+ positions.push(getContentPosition({
67
+ side: sideAndAlignArray[0],
68
+ align: sideAndAlignArray[1],
69
+ sideOffset: offsets.sideOffset,
70
+ alignOffset: offsets.alignOffset
71
+ }));
72
+ }
73
+ });
74
+ }
75
+ return positions;
76
+ });
77
+ /**
78
+ * Event handler called when the escape key is down. It can be prevented by calling event.preventDefault.
79
+ */
80
+ this.onEscapeKeyDown = output();
81
+ /**
82
+ * Event handler called when a pointer event occurs outside the bounds of the component. It can be prevented by calling event.preventDefault.
83
+ */
84
+ this.onPointerDownOutside = output();
85
+ /**
86
+ * Event handler called when the overlay is atached
87
+ */
88
+ this.onShow = output();
89
+ /**
90
+ * Event handler called when the overlay is detached
91
+ */
92
+ this.onHide = output();
93
+ this.onPositionChangeEffect();
94
+ this.onControlledExternallyChangeEffect();
95
+ }
96
+ /** @ignore */
97
+ ngOnInit() {
98
+ this.setOrigin();
99
+ this.setScrollStrategy();
100
+ this.onAttach();
101
+ this.onDetach();
102
+ this.connectKeydownEscape();
103
+ this.connectOutsideClick();
104
+ }
105
+ /** @ignore */
106
+ show() {
107
+ const prevOpen = this.connectedOverlay.open;
108
+ this.connectedOverlay.open = true;
109
+ if (!prevOpen) {
110
+ this.connectedOverlay.ngOnChanges({ open: new SimpleChange(prevOpen, true, false) });
111
+ }
112
+ }
113
+ /** @ignore */
114
+ hide() {
115
+ const prevOpen = this.connectedOverlay.open;
116
+ this.connectedOverlay.open = false;
117
+ if (prevOpen) {
118
+ this.connectedOverlay.ngOnChanges({ open: new SimpleChange(prevOpen, false, false) });
119
+ }
120
+ }
121
+ /** @ignore */
122
+ positionChange() {
123
+ return this.connectedOverlay.positionChange.asObservable();
124
+ }
125
+ /** @ignore */
126
+ connectKeydownEscape() {
127
+ this.connectedOverlay.overlayKeydown
128
+ .asObservable()
129
+ .pipe(filter((event) => event.key === 'Escape'), tap((event) => {
130
+ this.onEscapeKeyDown.emit(event);
131
+ if (!event.defaultPrevented) {
132
+ this.popoverRoot.handleClose();
133
+ }
134
+ }), takeUntilDestroyed(this.destroyRef))
135
+ .subscribe();
136
+ }
137
+ /** @ignore */
138
+ connectOutsideClick() {
139
+ this.connectedOverlay.overlayOutsideClick
140
+ .asObservable()
141
+ .pipe(tap((event) => {
142
+ this.onPointerDownOutside.emit(event);
143
+ }), takeUntilDestroyed(this.destroyRef))
144
+ .subscribe();
145
+ }
146
+ /** @ignore */
147
+ onAttach() {
148
+ this.connectedOverlay.attach
149
+ .asObservable()
150
+ .pipe(tap(() => {
151
+ this.onShow.emit();
152
+ }), takeUntilDestroyed(this.destroyRef))
153
+ .subscribe();
154
+ }
155
+ /** @ignore */
156
+ onDetach() {
157
+ this.connectedOverlay.detach
158
+ .asObservable()
159
+ .pipe(tap(() => {
160
+ this.onHide.emit();
161
+ }), takeUntilDestroyed(this.destroyRef))
162
+ .subscribe();
163
+ }
164
+ /** @ignore */
165
+ setScrollStrategy() {
166
+ const prevScrollStrategy = this.connectedOverlay.scrollStrategy;
167
+ this.connectedOverlay.scrollStrategy = this.overlay.scrollStrategies.reposition();
168
+ this.connectedOverlay.ngOnChanges({
169
+ scrollStrategy: new SimpleChange(prevScrollStrategy, this.connectedOverlay.scrollStrategy, false)
170
+ });
171
+ }
172
+ /** @ignore */
173
+ setDisableClose() {
174
+ const prevDisableClose = this.connectedOverlay.disableClose;
175
+ this.connectedOverlay.disableClose = this.popoverRoot.controlledExternally()();
176
+ this.connectedOverlay.ngOnChanges({
177
+ disableClose: new SimpleChange(prevDisableClose, this.connectedOverlay.disableClose, false)
178
+ });
179
+ }
180
+ /** @ignore */
181
+ setOrigin() {
182
+ const prevOrigin = this.connectedOverlay.origin;
183
+ this.connectedOverlay.origin = this.popoverRoot.popoverTriggerDirective().overlayOrigin;
184
+ this.connectedOverlay.ngOnChanges({
185
+ origin: new SimpleChange(prevOrigin, this.connectedOverlay.origin, false)
186
+ });
187
+ }
188
+ /** @ignore */
189
+ onPositionChangeEffect() {
190
+ effect(() => {
191
+ const positions = this.positions();
192
+ this.disableAlternatePositions();
193
+ untracked(() => {
194
+ const prevPositions = this.connectedOverlay.positions;
195
+ this.connectedOverlay.positions = positions;
196
+ this.connectedOverlay.ngOnChanges({
197
+ positions: new SimpleChange(prevPositions, this.connectedOverlay.positions, false)
198
+ });
199
+ this.connectedOverlay.overlayRef?.updatePosition();
200
+ });
201
+ });
202
+ }
203
+ /** @ignore */
204
+ onControlledExternallyChangeEffect() {
205
+ effect(() => {
206
+ this.popoverRoot.controlledExternally()();
207
+ untracked(() => {
208
+ this.setDisableClose();
209
+ });
210
+ });
211
+ }
212
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
213
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxPopoverContentDirective, isStandalone: true, selector: "[rdxPopoverContent]", inputs: { side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, alignOffset: { classPropertyName: "alignOffset", publicName: "alignOffset", isSignal: true, isRequired: false, transformFunction: null }, disableAlternatePositions: { classPropertyName: "disableAlternatePositions", publicName: "disableAlternatePositions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onEscapeKeyDown: "onEscapeKeyDown", onPointerDownOutside: "onPointerDownOutside", onShow: "onShow", onHide: "onHide" }, hostDirectives: [{ directive: i1.CdkConnectedOverlay }], ngImport: i0 }); }
214
+ }
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverContentDirective, decorators: [{
216
+ type: Directive,
217
+ args: [{
218
+ selector: '[rdxPopoverContent]',
219
+ standalone: true,
220
+ hostDirectives: [
221
+ {
222
+ directive: CdkConnectedOverlay
223
+ }
224
+ ]
225
+ }]
226
+ }], ctorParameters: () => [] });
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUNILFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVd2RixNQUFNLE9BQU8sMEJBQTBCO0lBZ0duQztRQS9GQSxjQUFjO1FBQ0wsZ0JBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNDLGNBQWM7UUFDTCxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxjQUFjO1FBQ0wsWUFBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxjQUFjO1FBQ0wsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxjQUFj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RSxFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBalBRLDBCQUEwQjttR0FBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQVR0QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixjQUFjLEVBQUU7d0JBQ1o7NEJBQ0ksU0FBUyxFQUFFLG1CQUFtQjt5QkFDakM7cUJBQ0o7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtDb25uZWN0ZWRPdmVybGF5LCBPdmVybGF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgICBjb21wdXRlZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIE9uSW5pdCxcbiAgICBvdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIHVudHJhY2tlZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RQb3BvdmVyUm9vdCB9IGZyb20gJy4vcG9wb3Zlci1yb290LmluamVjdCc7XG5pbXBvcnQgeyBERUZBVUxUUyB9IGZyb20gJy4vcG9wb3Zlci5jb25zdGFudHMnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckFsaWduLCBSZHhQb3BvdmVyU2lkZSwgUmR4U2lkZUFuZEFsaWduT2Zmc2V0cyB9IGZyb20gJy4vcG9wb3Zlci50eXBlcyc7XG5pbXBvcnQgeyBnZXRBbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucywgZ2V0Q29udGVudFBvc2l0aW9uIH0gZnJvbSAnLi9wb3BvdmVyLnV0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4UG9wb3ZlckNvbnRlbnRdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogQ2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBSZHhQb3BvdmVyQ29udGVudERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBwb3BvdmVyUm9vdCA9IGluamVjdFBvcG92ZXJSb290KCk7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZik7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBvdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGVkT3ZlcmxheSA9IGluamVjdChDZGtDb25uZWN0ZWRPdmVybGF5KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmZXJyZWQgc2lkZSBvZiB0aGUgdHJpZ2dlciB0byByZW5kZXIgYWdhaW5zdCB3aGVuIG9wZW4uIFdpbGwgYmUgcmV2ZXJzZWQgd2hlbiBjb2xsaXNpb25zIG9jY3VyIGFuZCBhdm9pZENvbGxpc2lvbnMgaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICByZWFkb25seSBzaWRlID0gaW5wdXQ8UmR4UG9wb3ZlclNpZGU+KFJkeFBvcG92ZXJTaWRlLlRvcCk7XG4gICAgLyoqXG4gICAgICogVGhlIGRpc3RhbmNlIGluIHBpeGVscyBmcm9tIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHNpZGVPZmZzZXQgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KHZvaWQgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZmVycmVkIGFsaWdubWVudCBhZ2FpbnN0IHRoZSB0cmlnZ2VyLiBNYXkgY2hhbmdlIHdoZW4gY29sbGlzaW9ucyBvY2N1ci5cbiAgICAgKi9cbiAgICByZWFkb25seSBhbGlnbiA9IGlucHV0PFJkeFBvcG92ZXJBbGlnbj4oUmR4UG9wb3ZlckFsaWduLkNlbnRlcik7XG4gICAgLyoqXG4gICAgICogQW4gb2Zmc2V0IGluIHBpeGVscyBmcm9tIHRoZSBcInN0YXJ0XCIgb3IgXCJlbmRcIiBhbGlnbm1lbnQgb3B0aW9ucy5cbiAgICAgKi9cbiAgICByZWFkb25seSBhbGlnbk9mZnNldCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odm9pZCAwKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gYWRkIHNvbWUgYWx0ZXJuYXRlIHBvc2l0aW9ucyBvZiB0aGUgY29udGVudC5cbiAgICAgKi9cbiAgICByZWFkb25seSBkaXNhYmxlQWx0ZXJuYXRlUG9zaXRpb25zID0gaW5wdXQoZmFsc2UpO1xuXG4gICAgLyoqIEBpbmdvcmUgKi9cbiAgICByZWFkb25seSBwb3NpdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdyZWF0ZXN0RGltZW5zaW9uRnJvbVRoZUFycm93ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LnBvcG92ZXJBcnJvd0RpcmVjdGl2ZSgpPy53aWR0aCgpID8/IDAsXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LnBvcG92ZXJBcnJvd0RpcmVjdGl2ZSgpPy5oZWlnaHQoKSA/PyAwXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9mZnNldHM6IFJkeFNpZGVBbmRBbGlnbk9mZnNldHMgPSB7XG4gICAgICAgICAgICBzaWRlT2Zmc2V0OiB0aGlzLnNpZGVPZmZzZXQoKSA/PyAoZ3JlYXRlc3REaW1lbnNpb25Gcm9tVGhlQXJyb3cgfHwgREVGQVVMVFMub2Zmc2V0cy5zaWRlKSxcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0OiB0aGlzLmFsaWduT2Zmc2V0KCkgPz8gKGdyZWF0ZXN0RGltZW5zaW9uRnJvbVRoZUFycm93IHx8IERFRkFVTFRTLm9mZnNldHMuYWxpZ24pXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJhc2VQb3NpdGlvbiA9IGdldENvbnRlbnRQb3NpdGlvbih7XG4gICAgICAgICAgICBzaWRlOiB0aGlzLnNpZGUoKSxcbiAgICAgICAgICAgIGFsaWduOiB0aGlzLmFsaWduKCksXG4gICAgICAgICAgICBzaWRlT2Zmc2V0OiBvZmZzZXRzLnNpZGVPZmZzZXQsXG4gICAgICAgICAgICBhbGlnbk9mZnNldDogb2Zmc2V0cy5hbGlnbk9mZnNldFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gW2Jhc2VQb3NpdGlvbl07XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlQWx0ZXJuYXRlUG9zaXRpb25zKCkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWx0ZXJuYXRlIHBvc2l0aW9ucyBmb3IgYmV0dGVyIHVzZXIgZXhwZXJpZW5jZSBhbG9uZyB0aGUgWC9ZIGF4aXMgKGUuZy4gdmVydGljYWwvaG9yaXpvbnRhbCBzY3JvbGxpbmcpXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zID0gZ2V0QWxsUG9zc2libGVDb25uZWN0ZWRQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgIGFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRlQW5kQWxpZ25BcnJheSA9IGtleS5zcGxpdCgnfCcpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKHNpZGVBbmRBbGlnbkFycmF5WzBdIGFzIFJkeFBvcG92ZXJTaWRlKSAhPT0gdGhpcy5zaWRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHNpZGVBbmRBbGlnbkFycmF5WzFdIGFzIFJkeFBvcG92ZXJBbGlnbikgIT09IHRoaXMuYWxpZ24oKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRlbnRQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZTogc2lkZUFuZEFsaWduQXJyYXlbMF0gYXMgUmR4UG9wb3ZlclNpZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246IHNpZGVBbmRBbGlnbkFycmF5WzFdIGFzIFJkeFBvcG92ZXJBbGlnbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlT2Zmc2V0OiBvZmZzZXRzLnNpZGVPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25PZmZzZXQ6IG9mZnNldHMuYWxpZ25PZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9ucztcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIGVzY2FwZSBrZXkgaXMgZG93bi4gSXQgY2FuIGJlIHByZXZlbnRlZCBieSBjYWxsaW5nIGV2ZW50LnByZXZlbnREZWZhdWx0LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9uRXNjYXBlS2V5RG93biA9IG91dHB1dDxLZXlib2FyZEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBjYWxsZWQgd2hlbiBhIHBvaW50ZXIgZXZlbnQgb2NjdXJzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgY29tcG9uZW50LiBJdCBjYW4gYmUgcHJldmVudGVkIGJ5IGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgb25Qb2ludGVyRG93bk91dHNpZGUgPSBvdXRwdXQ8TW91c2VFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIG92ZXJsYXkgaXMgYXRhY2hlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9uU2hvdyA9IG91dHB1dDx2b2lkPigpO1xuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIG92ZXJsYXkgaXMgZGV0YWNoZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBvbkhpZGUgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9uUG9zaXRpb25DaGFuZ2VFZmZlY3QoKTtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xsZWRFeHRlcm5hbGx5Q2hhbmdlRWZmZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRPcmlnaW4oKTtcbiAgICAgICAgdGhpcy5zZXRTY3JvbGxTdHJhdGVneSgpO1xuICAgICAgICB0aGlzLm9uQXR0YWNoKCk7XG4gICAgICAgIHRoaXMub25EZXRhY2goKTtcbiAgICAgICAgdGhpcy5jb25uZWN0S2V5ZG93bkVzY2FwZSgpO1xuICAgICAgICB0aGlzLmNvbm5lY3RPdXRzaWRlQ2xpY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHNob3coKSB7XG4gICAgICAgIGNvbnN0IHByZXZPcGVuID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW47XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFwcmV2T3Blbikge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm5nT25DaGFuZ2VzKHsgb3BlbjogbmV3IFNpbXBsZUNoYW5nZShwcmV2T3BlbiwgdHJ1ZSwgZmFsc2UpIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBoaWRlKCkge1xuICAgICAgICBjb25zdCBwcmV2T3BlbiA9IHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3BlbiA9IGZhbHNlO1xuICAgICAgICBpZiAocHJldk9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5uZ09uQ2hhbmdlcyh7IG9wZW46IG5ldyBTaW1wbGVDaGFuZ2UocHJldk9wZW4sIGZhbHNlLCBmYWxzZSkgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHBvc2l0aW9uQ2hhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9uQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBjb25uZWN0S2V5ZG93bkVzY2FwZSgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlLZXlkb3duXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpLFxuICAgICAgICAgICAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVzY2FwZUtleURvd24uZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUm9vdC5oYW5kbGVDbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgY29ubmVjdE91dHNpZGVDbGljaygpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlPdXRzaWRlQ2xpY2tcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25PdXRzaWRlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uQXR0YWNoKCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuYXR0YWNoXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TaG93LmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBvbkRldGFjaCgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRldGFjaFxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uSGlkZS5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgc2V0U2Nyb2xsU3RyYXRlZ3koKSB7XG4gICAgICAgIGNvbnN0IHByZXZTY3JvbGxTdHJhdGVneSA9IHRoaXMuY29ubmVjdGVkT3ZlcmxheS5zY3JvbGxTdHJhdGVneTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LnNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkubmdPbkNoYW5nZXMoe1xuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBTaW1wbGVDaGFuZ2UocHJldlNjcm9sbFN0cmF0ZWd5LCB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuc2Nyb2xsU3RyYXRlZ3ksIGZhbHNlKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgc2V0RGlzYWJsZUNsb3NlKCkge1xuICAgICAgICBjb25zdCBwcmV2RGlzYWJsZUNsb3NlID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRpc2FibGVDbG9zZTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRpc2FibGVDbG9zZSA9IHRoaXMucG9wb3ZlclJvb3QuY29udHJvbGxlZEV4dGVybmFsbHkoKSgpO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkubmdPbkNoYW5nZXMoe1xuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZEaXNhYmxlQ2xvc2UsIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5kaXNhYmxlQ2xvc2UsIGZhbHNlKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgc2V0T3JpZ2luKCkge1xuICAgICAgICBjb25zdCBwcmV2T3JpZ2luID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9yaWdpbjtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9yaWdpbiA9IHRoaXMucG9wb3ZlclJvb3QucG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUoKS5vdmVybGF5T3JpZ2luO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkubmdPbkNoYW5nZXMoe1xuICAgICAgICAgICAgb3JpZ2luOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZPcmlnaW4sIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcmlnaW4sIGZhbHNlKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb25Qb3NpdGlvbkNoYW5nZUVmZmVjdCgpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVBbHRlcm5hdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldlBvc2l0aW9ucyA9IHRoaXMuY29ubmVjdGVkT3ZlcmxheS5wb3NpdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkubmdPbkNoYW5nZXMoe1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IG5ldyBTaW1wbGVDaGFuZ2UocHJldlBvc2l0aW9ucywgdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9ucywgZmFsc2UpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uQ29udHJvbGxlZEV4dGVybmFsbHlDaGFuZ2VFZmZlY3QoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LmNvbnRyb2xsZWRFeHRlcm5hbGx5KCkoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREaXNhYmxlQ2xvc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=