@sebgroup/green-angular 1.0.0-beta.1 → 1.0.0-beta.2
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/esm2020/index.mjs +10 -0
- package/esm2020/lib/dropdown/dropdown.component.mjs +111 -0
- package/esm2020/lib/dropdown/dropdown.module.mjs +42 -0
- package/esm2020/lib/dropdown/popover-element.directive.mjs +218 -0
- package/esm2020/lib/dropdown/popover-option.directive.mjs +58 -0
- package/esm2020/lib/dropdown/popover-trigger.directive.mjs +80 -0
- package/esm2020/lib/dropdown/popover.directive.mjs +46 -0
- package/esm2020/lib/green-angular.module.mjs +19 -0
- package/esm2020/lib/segmented-control/segmented-control.component.mjs +40 -0
- package/esm2020/lib/segmented-control/segmented-control.module.mjs +19 -0
- package/esm2020/sebgroup-green-angular.mjs +5 -0
- package/fesm2015/{sebgroup-green-angular.js → sebgroup-green-angular.mjs} +54 -45
- package/fesm2015/sebgroup-green-angular.mjs.map +1 -0
- package/fesm2020/sebgroup-green-angular.mjs +599 -0
- package/fesm2020/sebgroup-green-angular.mjs.map +1 -0
- package/package.json +26 -13
- package/bundles/sebgroup-green-angular.umd.js +0 -610
- package/bundles/sebgroup-green-angular.umd.js.map +0 -1
- package/esm2015/index.js +0 -10
- package/esm2015/index.js.map +0 -1
- package/esm2015/lib/dropdown/dropdown.component.js +0 -111
- package/esm2015/lib/dropdown/dropdown.component.js.map +0 -1
- package/esm2015/lib/dropdown/dropdown.module.js +0 -42
- package/esm2015/lib/dropdown/dropdown.module.js.map +0 -1
- package/esm2015/lib/dropdown/popover-element.directive.js +0 -220
- package/esm2015/lib/dropdown/popover-element.directive.js.map +0 -1
- package/esm2015/lib/dropdown/popover-option.directive.js +0 -59
- package/esm2015/lib/dropdown/popover-option.directive.js.map +0 -1
- package/esm2015/lib/dropdown/popover-trigger.directive.js +0 -80
- package/esm2015/lib/dropdown/popover-trigger.directive.js.map +0 -1
- package/esm2015/lib/dropdown/popover.directive.js +0 -46
- package/esm2015/lib/dropdown/popover.directive.js.map +0 -1
- package/esm2015/lib/green-angular.module.js +0 -19
- package/esm2015/lib/green-angular.module.js.map +0 -1
- package/esm2015/lib/segmented-control/segmented-control.component.js +0 -40
- package/esm2015/lib/segmented-control/segmented-control.component.js.map +0 -1
- package/esm2015/lib/segmented-control/segmented-control.module.js +0 -19
- package/esm2015/lib/segmented-control/segmented-control.module.js.map +0 -1
- package/esm2015/sebgroup-green-angular.js +0 -5
- package/esm2015/sebgroup-green-angular.js.map +0 -1
- package/fesm2015/sebgroup-green-angular.js.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './lib/green-angular.module';
|
|
2
|
+
export * from './lib/dropdown/dropdown.module';
|
|
3
|
+
export * from './lib/dropdown/dropdown.component';
|
|
4
|
+
export * from './lib/dropdown/popover.directive';
|
|
5
|
+
export * from './lib/dropdown/popover-element.directive';
|
|
6
|
+
export * from './lib/dropdown/popover-option.directive';
|
|
7
|
+
export * from './lib/dropdown/popover-trigger.directive';
|
|
8
|
+
export * from './lib/segmented-control/segmented-control.module';
|
|
9
|
+
export * from './lib/segmented-control/segmented-control.component';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyxnQ0FBZ0MsQ0FBQTtBQUM5QyxjQUFjLG1DQUFtQyxDQUFBO0FBQ2pELGNBQWMsa0NBQWtDLENBQUE7QUFDaEQsY0FBYywwQ0FBMEMsQ0FBQTtBQUN4RCxjQUFjLHlDQUF5QyxDQUFBO0FBQ3ZELGNBQWMsMENBQTBDLENBQUE7QUFDeEQsY0FBYyxrREFBa0QsQ0FBQTtBQUNoRSxjQUFjLHFEQUFxRCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZ3JlZW4tYW5ndWxhci5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi9kcm9wZG93bi5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi9wb3BvdmVyLmRpcmVjdGl2ZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duL3BvcG92ZXItZWxlbWVudC5kaXJlY3RpdmUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi9wb3BvdmVyLW9wdGlvbi5kaXJlY3RpdmUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi9wb3BvdmVyLXRyaWdnZXIuZGlyZWN0aXZlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VnbWVudGVkLWNvbnRyb2wvc2VnbWVudGVkLWNvbnRyb2wubW9kdWxlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VnbWVudGVkLWNvbnRyb2wvc2VnbWVudGVkLWNvbnRyb2wuY29tcG9uZW50J1xuIl19
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./popover.directive";
|
|
5
|
+
import * as i2 from "./popover-trigger.directive";
|
|
6
|
+
import * as i3 from "./popover-element.directive";
|
|
7
|
+
import * as i4 from "@angular/common";
|
|
8
|
+
import * as i5 from "./popover-option.directive";
|
|
9
|
+
export class NggDropdownComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this._options = [];
|
|
12
|
+
this._config = {};
|
|
13
|
+
}
|
|
14
|
+
get options() {
|
|
15
|
+
return this._options;
|
|
16
|
+
}
|
|
17
|
+
set options(value) {
|
|
18
|
+
this._options = value;
|
|
19
|
+
}
|
|
20
|
+
get config() {
|
|
21
|
+
return this._config;
|
|
22
|
+
}
|
|
23
|
+
set config(value) {
|
|
24
|
+
this._config = value;
|
|
25
|
+
}
|
|
26
|
+
writeValue(obj) {
|
|
27
|
+
this.value = obj;
|
|
28
|
+
}
|
|
29
|
+
registerOnChange(fn) {
|
|
30
|
+
this.onChangeFn = fn;
|
|
31
|
+
}
|
|
32
|
+
registerOnTouched(fn) {
|
|
33
|
+
this.onTouchedFn = fn;
|
|
34
|
+
}
|
|
35
|
+
select(value) {
|
|
36
|
+
this.onChangeFn(value);
|
|
37
|
+
this.value = value;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
NggDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
+
NggDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: NggDropdownComponent, selector: "ngg-dropdown", inputs: { options: "options", config: "config" }, providers: [
|
|
42
|
+
{
|
|
43
|
+
provide: NG_VALUE_ACCESSOR,
|
|
44
|
+
useExisting: NggDropdownComponent,
|
|
45
|
+
multi: true,
|
|
46
|
+
},
|
|
47
|
+
], ngImport: i0, template: `
|
|
48
|
+
<div nggPopover [config]="config">
|
|
49
|
+
<button type="button" nggPopoverTrigger>
|
|
50
|
+
{{ value }}
|
|
51
|
+
</button>
|
|
52
|
+
<div nggPopoverElement tabindex="-1" autofocus>
|
|
53
|
+
<button class="close m-4 m-sm-2 d-block d-sm-none ">
|
|
54
|
+
<span class="sr-only">Close</span>
|
|
55
|
+
</button>
|
|
56
|
+
<ul role="listbox">
|
|
57
|
+
<li
|
|
58
|
+
*ngFor="let option of options; let i = index"
|
|
59
|
+
[nggPopoverOption]="option.value"
|
|
60
|
+
[index]="i"
|
|
61
|
+
[selected]="value === option.value"
|
|
62
|
+
(selectedChanged)="select($event)"
|
|
63
|
+
>
|
|
64
|
+
{{ option.key }}
|
|
65
|
+
</li>
|
|
66
|
+
</ul>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
`, isInline: true, directives: [{ type: i1.NggPopoverDirective, selector: "[nggPopover]", inputs: ["config"] }, { type: i2.NggPopoverTriggerDirective, selector: "[nggPopoverTrigger]" }, { type: i3.NggPopoverElementDirective, selector: "[nggPopoverElement]" }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NggPopoverOptionDirective, selector: "[nggPopoverOption]", inputs: ["nggPopoverOption", "index", "selected"], outputs: ["selectedChanged"] }] });
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggDropdownComponent, decorators: [{
|
|
71
|
+
type: Component,
|
|
72
|
+
args: [{
|
|
73
|
+
selector: 'ngg-dropdown',
|
|
74
|
+
template: `
|
|
75
|
+
<div nggPopover [config]="config">
|
|
76
|
+
<button type="button" nggPopoverTrigger>
|
|
77
|
+
{{ value }}
|
|
78
|
+
</button>
|
|
79
|
+
<div nggPopoverElement tabindex="-1" autofocus>
|
|
80
|
+
<button class="close m-4 m-sm-2 d-block d-sm-none ">
|
|
81
|
+
<span class="sr-only">Close</span>
|
|
82
|
+
</button>
|
|
83
|
+
<ul role="listbox">
|
|
84
|
+
<li
|
|
85
|
+
*ngFor="let option of options; let i = index"
|
|
86
|
+
[nggPopoverOption]="option.value"
|
|
87
|
+
[index]="i"
|
|
88
|
+
[selected]="value === option.value"
|
|
89
|
+
(selectedChanged)="select($event)"
|
|
90
|
+
>
|
|
91
|
+
{{ option.key }}
|
|
92
|
+
</li>
|
|
93
|
+
</ul>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
`,
|
|
97
|
+
providers: [
|
|
98
|
+
{
|
|
99
|
+
provide: NG_VALUE_ACCESSOR,
|
|
100
|
+
useExisting: NggDropdownComponent,
|
|
101
|
+
multi: true,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
//changeDetection: ChangeDetectionStrategy.OnPush
|
|
105
|
+
}]
|
|
106
|
+
}], propDecorators: { options: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], config: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}] } });
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2hELE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTs7Ozs7OztBQW9DeEUsTUFBTSxPQUFPLG9CQUFvQjtJQWxDakM7UUFxRFUsYUFBUSxHQUFlLEVBQUUsQ0FBQTtRQUV6QixZQUFPLEdBQVMsRUFBRSxDQUFBO0tBa0IzQjtJQXRDQyxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDdEIsQ0FBQztJQUVELElBQWEsT0FBTyxDQUFDLEtBQWlCO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUNELElBQWEsTUFBTSxDQUFDLEtBQVU7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7SUFDdEIsQ0FBQztJQVVELFVBQVUsQ0FBQyxHQUFRO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFBO0lBQ2xCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFBO0lBQ3RCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVTtRQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQzs7aUhBdENVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLHlGQVRwQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsb0JBQW9CO1lBQ2pDLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwwQkE3QlM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQ7MkZBVVUsb0JBQW9CO2tCQWxDaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JUO29CQUNELFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHNCQUFzQjs0QkFDakMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsaURBQWlEO2lCQUNsRDs4QkFNYyxPQUFPO3NCQUFuQixLQUFLO2dCQU1PLE1BQU07c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2ctZHJvcGRvd24nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgbmdnUG9wb3ZlciBbY29uZmlnXT1cImNvbmZpZ1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbmdnUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIHt7IHZhbHVlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgbmdnUG9wb3ZlckVsZW1lbnQgdGFiaW5kZXg9XCItMVwiIGF1dG9mb2N1cz5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsb3NlIG0tNCBtLXNtLTIgZC1ibG9jayBkLXNtLW5vbmUgXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8dWwgcm9sZT1cImxpc3Rib3hcIj5cbiAgICAgICAgICA8bGlcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICBbbmdnUG9wb3Zlck9wdGlvbl09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgW2luZGV4XT1cImlcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cInZhbHVlID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlZCk9XCJzZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgb3B0aW9uLmtleSB9fVxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogTmdnRHJvcGRvd25Db21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICAvL2NoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5nZ0Ryb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBnZXQgb3B0aW9ucygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uc1xuICB9XG5cbiAgQElucHV0KCkgc2V0IG9wdGlvbnModmFsdWU6IEFycmF5PGFueT4pIHtcbiAgICB0aGlzLl9vcHRpb25zID0gdmFsdWVcbiAgfVxuICBnZXQgY29uZmlnKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZ1xuICB9XG4gIEBJbnB1dCgpIHNldCBjb25maWcodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX2NvbmZpZyA9IHZhbHVlXG4gIH1cblxuICB2YWx1ZTogYW55XG4gIG9uQ2hhbmdlRm46IGFueVxuICBvblRvdWNoZWRGbjogYW55XG5cbiAgcHJpdmF0ZSBfb3B0aW9uczogQXJyYXk8YW55PiA9IFtdXG5cbiAgcHJpdmF0ZSBfY29uZmlnPzogYW55ID0ge31cblxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG9ialxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUZuID0gZm5cbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZEZuID0gZm5cbiAgfVxuXG4gIHNlbGVjdCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5vbkNoYW5nZUZuKHZhbHVlKVxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { NggDropdownComponent } from './dropdown.component';
|
|
4
|
+
import { NggPopoverElementDirective } from './popover-element.directive';
|
|
5
|
+
import { NggPopoverOptionDirective } from './popover-option.directive';
|
|
6
|
+
import { NggPopoverTriggerDirective } from './popover-trigger.directive';
|
|
7
|
+
import { NggPopoverDirective } from './popover.directive';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class NggDropdownModule {
|
|
10
|
+
}
|
|
11
|
+
NggDropdownModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggDropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
|
+
NggDropdownModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggDropdownModule, declarations: [NggPopoverDirective,
|
|
13
|
+
NggPopoverOptionDirective,
|
|
14
|
+
NggPopoverElementDirective,
|
|
15
|
+
NggPopoverTriggerDirective,
|
|
16
|
+
NggDropdownComponent], imports: [CommonModule], exports: [NggPopoverDirective,
|
|
17
|
+
NggPopoverOptionDirective,
|
|
18
|
+
NggPopoverElementDirective,
|
|
19
|
+
NggPopoverTriggerDirective,
|
|
20
|
+
NggDropdownComponent] });
|
|
21
|
+
NggDropdownModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggDropdownModule, imports: [[CommonModule]] });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggDropdownModule, decorators: [{
|
|
23
|
+
type: NgModule,
|
|
24
|
+
args: [{
|
|
25
|
+
declarations: [
|
|
26
|
+
NggPopoverDirective,
|
|
27
|
+
NggPopoverOptionDirective,
|
|
28
|
+
NggPopoverElementDirective,
|
|
29
|
+
NggPopoverTriggerDirective,
|
|
30
|
+
NggDropdownComponent,
|
|
31
|
+
],
|
|
32
|
+
imports: [CommonModule],
|
|
33
|
+
exports: [
|
|
34
|
+
NggPopoverDirective,
|
|
35
|
+
NggPopoverOptionDirective,
|
|
36
|
+
NggPopoverElementDirective,
|
|
37
|
+
NggPopoverTriggerDirective,
|
|
38
|
+
NggDropdownComponent,
|
|
39
|
+
],
|
|
40
|
+
}]
|
|
41
|
+
}] });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZHJvcGRvd24vZHJvcGRvd24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ3RFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBOztBQW1CekQsTUFBTSxPQUFPLGlCQUFpQjs7OEdBQWpCLGlCQUFpQjsrR0FBakIsaUJBQWlCLGlCQWYxQixtQkFBbUI7UUFDbkIseUJBQXlCO1FBQ3pCLDBCQUEwQjtRQUMxQiwwQkFBMEI7UUFDMUIsb0JBQW9CLGFBRVosWUFBWSxhQUVwQixtQkFBbUI7UUFDbkIseUJBQXlCO1FBQ3pCLDBCQUEwQjtRQUMxQiwwQkFBMEI7UUFDMUIsb0JBQW9COytHQUdYLGlCQUFpQixZQVRuQixDQUFDLFlBQVksQ0FBQzsyRkFTWixpQkFBaUI7a0JBakI3QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixtQkFBbUI7d0JBQ25CLHlCQUF5Qjt3QkFDekIsMEJBQTBCO3dCQUMxQiwwQkFBMEI7d0JBQzFCLG9CQUFvQjtxQkFDckI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixPQUFPLEVBQUU7d0JBQ1AsbUJBQW1CO3dCQUNuQix5QkFBeUI7d0JBQ3pCLDBCQUEwQjt3QkFDMUIsMEJBQTBCO3dCQUMxQixvQkFBb0I7cUJBQ3JCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgTmdnRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLmNvbXBvbmVudCdcbmltcG9ydCB7IE5nZ1BvcG92ZXJFbGVtZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLWVsZW1lbnQuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgTmdnUG9wb3Zlck9wdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vcG9wb3Zlci1vcHRpb24uZGlyZWN0aXZlJ1xuaW1wb3J0IHsgTmdnUG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICcuL3BvcG92ZXItdHJpZ2dlci5kaXJlY3RpdmUnXG5pbXBvcnQgeyBOZ2dQb3BvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLmRpcmVjdGl2ZSdcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgTmdnUG9wb3ZlckRpcmVjdGl2ZSxcbiAgICBOZ2dQb3BvdmVyT3B0aW9uRGlyZWN0aXZlLFxuICAgIE5nZ1BvcG92ZXJFbGVtZW50RGlyZWN0aXZlLFxuICAgIE5nZ1BvcG92ZXJUcmlnZ2VyRGlyZWN0aXZlLFxuICAgIE5nZ0Ryb3Bkb3duQ29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZXhwb3J0czogW1xuICAgIE5nZ1BvcG92ZXJEaXJlY3RpdmUsXG4gICAgTmdnUG9wb3Zlck9wdGlvbkRpcmVjdGl2ZSxcbiAgICBOZ2dQb3BvdmVyRWxlbWVudERpcmVjdGl2ZSxcbiAgICBOZ2dQb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZSxcbiAgICBOZ2dEcm9wZG93bkNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdnRHJvcGRvd25Nb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { ChangeDetectorRef, ContentChildren, Directive, ElementRef, forwardRef, HostBinding, HostListener, Inject, Renderer2, } from '@angular/core';
|
|
2
|
+
import { filter, skip, switchMap, takeUntil, tap } from 'rxjs/operators';
|
|
3
|
+
import { EMPTY, fromEvent, merge, Subject } from 'rxjs';
|
|
4
|
+
import { NggPopoverOptionDirective } from './popover-option.directive';
|
|
5
|
+
import { NggPopoverDirective } from './popover.directive';
|
|
6
|
+
import { createPopper } from '@popperjs/core';
|
|
7
|
+
import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "./popover.directive";
|
|
10
|
+
export class NggPopoverElementDirective {
|
|
11
|
+
constructor(popover, _elRef, _renderer, _cdr) {
|
|
12
|
+
this.popover = popover;
|
|
13
|
+
this._elRef = _elRef;
|
|
14
|
+
this._renderer = _renderer;
|
|
15
|
+
this._cdr = _cdr;
|
|
16
|
+
this.$unsubscribe = new Subject();
|
|
17
|
+
this.sm = window.innerWidth <= 576;
|
|
18
|
+
this.class = true;
|
|
19
|
+
this.role = 'listbox';
|
|
20
|
+
this.id = null;
|
|
21
|
+
this.show = this.popover.state.$isOpen.value;
|
|
22
|
+
this.activeDescendant = null;
|
|
23
|
+
}
|
|
24
|
+
// TODO: refactor and move to general size/device service
|
|
25
|
+
onResize(event) {
|
|
26
|
+
// determine if small screen size i.e less than or equal to 576 pixels which is the breakpoint for small screens
|
|
27
|
+
this.sm = event.target.innerWidth <= 576;
|
|
28
|
+
if (this.sm) {
|
|
29
|
+
// remove popper
|
|
30
|
+
this.removePopper();
|
|
31
|
+
}
|
|
32
|
+
else if (!this._popper) {
|
|
33
|
+
// add popper
|
|
34
|
+
this.addPopper();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
handleClickEvent(event) {
|
|
38
|
+
// if click inside popover element...
|
|
39
|
+
if (this._elRef.nativeElement.contains(event.target)) {
|
|
40
|
+
this.popover.close();
|
|
41
|
+
}
|
|
42
|
+
else if (this.popover.state.$isOpen.value) {
|
|
43
|
+
// else if click outside popover element...
|
|
44
|
+
this.popover.close();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
handleKeydownEvent(event) {
|
|
48
|
+
if (event.key === 'Escape') {
|
|
49
|
+
this.popover.close();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
let next = 0; // Used for home key
|
|
53
|
+
const currentSelection = this.options?.find((option) => !!option.selected)?.index || 0;
|
|
54
|
+
if (event.key === 'End') {
|
|
55
|
+
// set next to last option
|
|
56
|
+
next = (this.options?.length || 1) - 1;
|
|
57
|
+
}
|
|
58
|
+
else if (event.key === 'ArrowUp') {
|
|
59
|
+
// next can't be less than zero
|
|
60
|
+
next = Math.max(0, currentSelection - 1);
|
|
61
|
+
// prevent container from scrolling
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
}
|
|
64
|
+
else if (event.key === 'ArrowDown') {
|
|
65
|
+
// next can't be greater than number of options
|
|
66
|
+
next = Math.min((this.options?.length || 1) - 1, currentSelection + 1);
|
|
67
|
+
// prevent container from scrolling
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
}
|
|
70
|
+
// select next option
|
|
71
|
+
this.options?.get(next)?.select(event);
|
|
72
|
+
}
|
|
73
|
+
ngOnInit() {
|
|
74
|
+
this.id = /^ngg_dropdownTrigger/.test(this.popover.triggerElement?.nativeElement.id)
|
|
75
|
+
? this.popover.triggerElement?.nativeElement.id.replace(/dropdownTrigger/, 'popover')
|
|
76
|
+
: this.popover.triggerElement?.nativeElement.id + '_popover';
|
|
77
|
+
this.popover.state.$isOpen
|
|
78
|
+
.pipe(skip(1), // skip initial value
|
|
79
|
+
tap((isOpen) => {
|
|
80
|
+
this.show = isOpen; // toggle visibility
|
|
81
|
+
if (isOpen) {
|
|
82
|
+
this.activeDescendant =
|
|
83
|
+
this.options?.find((option) => !!option.selected)?.id || null;
|
|
84
|
+
// if use body scroll lock
|
|
85
|
+
if (this.popover.config.useBodyScrollLock) {
|
|
86
|
+
this.disableBodyScrollLock();
|
|
87
|
+
}
|
|
88
|
+
// if popover is configured to use a container...
|
|
89
|
+
if (this.popover.config.container !== '') {
|
|
90
|
+
// ...add container
|
|
91
|
+
this.addContainer();
|
|
92
|
+
}
|
|
93
|
+
// if popover is configured to use popper.js...
|
|
94
|
+
if (this.popover.config.usePopper) {
|
|
95
|
+
this.addPopper();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
this.activeDescendant = null;
|
|
100
|
+
if (this.popover.config.useBodyScrollLock) {
|
|
101
|
+
this.enableBodyScrollLock();
|
|
102
|
+
}
|
|
103
|
+
this.removeContainer();
|
|
104
|
+
this.removePopper();
|
|
105
|
+
}
|
|
106
|
+
}), switchMap((isOpen) => isOpen
|
|
107
|
+
? merge(
|
|
108
|
+
// listen to click events
|
|
109
|
+
fromEvent(document, 'click').pipe(tap((event) => this.handleClickEvent(event))),
|
|
110
|
+
// listen to keydown events
|
|
111
|
+
fromEvent(document, 'keydown').pipe(
|
|
112
|
+
// filter keys
|
|
113
|
+
filter((event) => ['ArrowDown', 'ArrowUp', 'Escape', 'Home', 'End'].indexOf(event.key) !== -1), tap((event) => this.handleKeydownEvent(event))))
|
|
114
|
+
: EMPTY), takeUntil(this.$unsubscribe))
|
|
115
|
+
.subscribe();
|
|
116
|
+
}
|
|
117
|
+
ngOnDestroy() {
|
|
118
|
+
this.removePopper();
|
|
119
|
+
// enable scroll if body scroll lock is used
|
|
120
|
+
if (this.popover.config.useBodyScrollLock) {
|
|
121
|
+
this.enableBodyScrollLock();
|
|
122
|
+
}
|
|
123
|
+
// remove container if declared
|
|
124
|
+
if (this._container) {
|
|
125
|
+
this.removeContainer();
|
|
126
|
+
}
|
|
127
|
+
this.$unsubscribe.next();
|
|
128
|
+
this.$unsubscribe.complete();
|
|
129
|
+
}
|
|
130
|
+
enableBodyScrollLock() {
|
|
131
|
+
enableBodyScroll(this._elRef.nativeElement);
|
|
132
|
+
}
|
|
133
|
+
disableBodyScrollLock() {
|
|
134
|
+
disableBodyScroll(this._elRef.nativeElement);
|
|
135
|
+
}
|
|
136
|
+
addPopper() {
|
|
137
|
+
if (this.sm) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (!this._popper) {
|
|
141
|
+
// ...create popper instance for anchoring popover with trigger element
|
|
142
|
+
this._popper = createPopper(this.popover.triggerElement?.nativeElement, this._elRef.nativeElement, {
|
|
143
|
+
placement: 'bottom-start',
|
|
144
|
+
modifiers: [
|
|
145
|
+
{
|
|
146
|
+
name: 'offset',
|
|
147
|
+
options: {
|
|
148
|
+
offset: [0, 4],
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
});
|
|
153
|
+
// detect changes once element and popper is initiated to update initial position
|
|
154
|
+
this._cdr.detectChanges();
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
this._popper.state.elements.reference =
|
|
158
|
+
this.popover.triggerElement?.nativeElement;
|
|
159
|
+
this._popper.update().then((_) => this._cdr.detectChanges());
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
removePopper() {
|
|
163
|
+
// destroy popper if declared
|
|
164
|
+
if (this._popper) {
|
|
165
|
+
this._popper?.destroy();
|
|
166
|
+
this._popper = null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
addContainer() {
|
|
170
|
+
// create global container for popover if not already present
|
|
171
|
+
if (!this._container) {
|
|
172
|
+
this._container = this._renderer.createElement('div');
|
|
173
|
+
}
|
|
174
|
+
this._renderer.appendChild(this._container, this._elRef.nativeElement);
|
|
175
|
+
this._renderer.appendChild(document.body, this._container);
|
|
176
|
+
}
|
|
177
|
+
removeContainer() {
|
|
178
|
+
if (this._container) {
|
|
179
|
+
// remove container from DOM tree
|
|
180
|
+
this._renderer.removeChild(document.body, this._container);
|
|
181
|
+
// clear container
|
|
182
|
+
this._container = null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
NggPopoverElementDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggPopoverElementDirective, deps: [{ token: forwardRef(() => NggPopoverDirective) }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
187
|
+
NggPopoverElementDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: NggPopoverElementDirective, selector: "[nggPopoverElement]", host: { listeners: { "window:resize": "onResize($event)" }, properties: { "class.popover": "this.class", "attr.role": "this.role", "attr.id": "this.id", "class.active": "this.show", "attr.aria-activedescendant": "this.activeDescendant" } }, queries: [{ propertyName: "options", predicate: NggPopoverOptionDirective, descendants: true }], ngImport: i0 });
|
|
188
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggPopoverElementDirective, decorators: [{
|
|
189
|
+
type: Directive,
|
|
190
|
+
args: [{
|
|
191
|
+
selector: '[nggPopoverElement]',
|
|
192
|
+
}]
|
|
193
|
+
}], ctorParameters: function () { return [{ type: i1.NggPopoverDirective, decorators: [{
|
|
194
|
+
type: Inject,
|
|
195
|
+
args: [forwardRef(() => NggPopoverDirective)]
|
|
196
|
+
}] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { options: [{
|
|
197
|
+
type: ContentChildren,
|
|
198
|
+
args: [NggPopoverOptionDirective, { descendants: true }]
|
|
199
|
+
}], class: [{
|
|
200
|
+
type: HostBinding,
|
|
201
|
+
args: ['class.popover']
|
|
202
|
+
}], role: [{
|
|
203
|
+
type: HostBinding,
|
|
204
|
+
args: ['attr.role']
|
|
205
|
+
}], id: [{
|
|
206
|
+
type: HostBinding,
|
|
207
|
+
args: ['attr.id']
|
|
208
|
+
}], show: [{
|
|
209
|
+
type: HostBinding,
|
|
210
|
+
args: ['class.active']
|
|
211
|
+
}], activeDescendant: [{
|
|
212
|
+
type: HostBinding,
|
|
213
|
+
args: ['attr.aria-activedescendant']
|
|
214
|
+
}], onResize: [{
|
|
215
|
+
type: HostListener,
|
|
216
|
+
args: ['window:resize', ['$event']]
|
|
217
|
+
}] } });
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1lbGVtZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL2Ryb3Bkb3duL3BvcG92ZXItZWxlbWVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFeEUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUE7OztBQUt0RSxNQUFNLE9BQU8sMEJBQTBCO0lBaUVyQyxZQUVTLE9BQTRCLEVBQzNCLE1BQWtCLEVBQ2xCLFNBQW9CLEVBQ3BCLElBQXVCO1FBSHhCLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQW5FakMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO1FBQzVCLE9BQUUsR0FBRyxNQUFNLENBQUMsVUFB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O2tCQUh0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7aUJBQ2hDOzswQkFtRUksTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7NkhBN0RvQixPQUFPO3NCQUF6RSxlQUFlO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJbkMsS0FBSztzQkFBbEMsV0FBVzt1QkFBQyxlQUFlO2dCQUNGLElBQUk7c0JBQTdCLFdBQVc7dUJBQUMsV0FBVztnQkFDQSxFQUFFO3NCQUF6QixXQUFXO3VCQUFDLFNBQVM7Z0JBQ08sSUFBSTtzQkFBaEMsV0FBVzt1QkFBQyxjQUFjO2dCQUNnQixnQkFBZ0I7c0JBQTFELFdBQVc7dUJBQUMsNEJBQTRCO2dCQUdFLFFBQVE7c0JBQWxELFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IGZpbHRlciwgc2tpcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgSW5zdGFuY2UgfSBmcm9tICdAcG9wcGVyanMvY29yZS9saWIvdHlwZXMnXG5pbXBvcnQgeyBFTVBUWSwgZnJvbUV2ZW50LCBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBOZ2dQb3BvdmVyT3B0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLW9wdGlvbi5kaXJlY3RpdmUnXG5pbXBvcnQgeyBOZ2dQb3BvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLmRpcmVjdGl2ZSdcbmltcG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJ1xuaW1wb3J0IHsgZGlzYWJsZUJvZHlTY3JvbGwsIGVuYWJsZUJvZHlTY3JvbGwgfSBmcm9tICdib2R5LXNjcm9sbC1sb2NrJ1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmdnUG9wb3ZlckVsZW1lbnRdJyxcbn0pXG5leHBvcnQgY2xhc3MgTmdnUG9wb3ZlckVsZW1lbnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIF9wb3BwZXI/OiBJbnN0YW5jZSB8IG51bGxcbiAgX2NvbnRhaW5lcj86IEVsZW1lbnRSZWYgfCBudWxsXG4gICR1bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KClcbiAgc20gPSB3aW5kb3cuaW5uZXJXaWR0aCA8PSA1NzZcbiAgQENvbnRlbnRDaGlsZHJlbihOZ2dQb3BvdmVyT3B0aW9uRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG9wdGlvbnM6XG4gICAgfCBRdWVyeUxpc3Q8TmdnUG9wb3Zlck9wdGlvbkRpcmVjdGl2ZT5cbiAgICB8IHVuZGVmaW5lZFxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucG9wb3ZlcicpIGNsYXNzID0gdHJ1ZVxuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIHJvbGUgPSAnbGlzdGJveCdcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgaWQgPSBudWxsXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlJykgc2hvdyA9IHRoaXMucG9wb3Zlci5zdGF0ZS4kaXNPcGVuLnZhbHVlXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSBhY3RpdmVEZXNjZW5kYW50OiBzdHJpbmcgfCBudWxsID1cbiAgICBudWxsXG4gIC8vIFRPRE86IHJlZmFjdG9yIGFuZCBtb3ZlIHRvIGdlbmVyYWwgc2l6ZS9kZXZpY2Ugc2VydmljZVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSkgb25SZXNpemUoZXZlbnQ6IFVJRXZlbnQpIHtcbiAgICAvLyBkZXRlcm1pbmUgaWYgc21hbGwgc2NyZWVuIHNpemUgaS5lIGxlc3MgdGhhbiBvciBlcXVhbCB0byA1NzYgcGl4ZWxzIHdoaWNoIGlzIHRoZSBicmVha3BvaW50IGZvciBzbWFsbCBzY3JlZW5zXG4gICAgdGhpcy5zbSA9IChldmVudC50YXJnZXQgYXMgV2luZG93KS5pbm5lcldpZHRoIDw9IDU3NlxuICAgIGlmICh0aGlzLnNtKSB7XG4gICAgICAvLyByZW1vdmUgcG9wcGVyXG4gICAgICB0aGlzLnJlbW92ZVBvcHBlcigpXG4gICAgfSBlbHNlIGlmICghdGhpcy5fcG9wcGVyKSB7XG4gICAgICAvLyBhZGQgcG9wcGVyXG4gICAgICB0aGlzLmFkZFBvcHBlcigpXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2xpY2tFdmVudChldmVudDogRXZlbnQpIHtcbiAgICAvLyBpZiBjbGljayBpbnNpZGUgcG9wb3ZlciBlbGVtZW50Li4uXG4gICAgaWYgKHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5wb3BvdmVyLmNsb3NlKClcbiAgICB9IGVsc2UgaWYgKHRoaXMucG9wb3Zlci5zdGF0ZS4kaXNPcGVuLnZhbHVlKSB7XG4gICAgICAvLyBlbHNlIGlmIGNsaWNrIG91dHNpZGUgcG9wb3ZlciBlbGVtZW50Li4uXG4gICAgICB0aGlzLnBvcG92ZXIuY2xvc2UoKVxuICAgIH1cbiAgfVxuICBoYW5kbGVLZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5wb3BvdmVyLmNsb3NlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsZXQgbmV4dCA9IDAgLy8gVXNlZCBmb3IgaG9tZSBrZXlcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID1cbiAgICAgIHRoaXMub3B0aW9ucz8uZmluZCgob3B0aW9uKSA9PiAhIW9wdGlvbi5zZWxlY3RlZCk/LmluZGV4IHx8IDBcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW5kJykge1xuICAgICAgLy8gc2V0IG5leHQgdG8gbGFzdCBvcHRpb25cbiAgICAgIG5leHQgPSAodGhpcy5vcHRpb25zPy5sZW5ndGggfHwgMSkgLSAxXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgLy8gbmV4dCBjYW4ndCBiZSBsZXNzIHRoYW4gemVyb1xuICAgICAgbmV4dCA9IE1hdGgubWF4KDAsIGN1cnJlbnRTZWxlY3Rpb24gLSAxKVxuXG4gICAgICAvLyBwcmV2ZW50IGNvbnRhaW5lciBmcm9tIHNjcm9sbGluZ1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgLy8gbmV4dCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gbnVtYmVyIG9mIG9wdGlvbnNcbiAgICAgIG5leHQgPSBNYXRoLm1pbigodGhpcy5vcHRpb25zPy5sZW5ndGggfHwgMSkgLSAxLCBjdXJyZW50U2VsZWN0aW9uICsgMSlcblxuICAgICAgLy8gcHJldmVudCBjb250YWluZXIgZnJvbSBzY3JvbGxpbmdcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG4gICAgLy8gc2VsZWN0IG5leHQgb3B0aW9uXG4gICAgdGhpcy5vcHRpb25zPy5nZXQobmV4dCk/LnNlbGVjdChldmVudClcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBOZ2dQb3BvdmVyRGlyZWN0aXZlKSlcbiAgICBwdWJsaWMgcG9wb3ZlcjogTmdnUG9wb3ZlckRpcmVjdGl2ZSxcbiAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlkID0gL15uZ2dfZHJvcGRvd25UcmlnZ2VyLy50ZXN0KFxuICAgICAgdGhpcy5wb3BvdmVyLnRyaWdnZXJFbGVtZW50Py5uYXRpdmVFbGVtZW50LmlkXG4gICAgKVxuICAgICAgPyB0aGlzLnBvcG92ZXIudHJpZ2dlckVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuaWQucmVwbGFjZShcbiAgICAgICAgICAvZHJvcGRvd25UcmlnZ2VyLyxcbiAgICAgICAgICAncG9wb3ZlcidcbiAgICAgICAgKVxuICAgICAgOiB0aGlzLnBvcG92ZXIudHJpZ2dlckVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuaWQgKyAnX3BvcG92ZXInXG4gICAgdGhpcy5wb3BvdmVyLnN0YXRlLiRpc09wZW5cbiAgICAgIC5waXBlKFxuICAgICAgICBza2lwKDEpLCAvLyBza2lwIGluaXRpYWwgdmFsdWVcbiAgICAgICAgdGFwKChpc09wZW4pID0+IHtcbiAgICAgICAgICB0aGlzLnNob3cgPSBpc09wZW4gLy8gdG9nZ2xlIHZpc2liaWxpdHlcblxuICAgICAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudCA9XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucz8uZmluZCgob3B0aW9uKSA9PiAhIW9wdGlvbi5zZWxlY3RlZCk/LmlkIHx8IG51bGxcblxuICAgICAgICAgICAgLy8gaWYgdXNlIGJvZHkgc2Nyb2xsIGxvY2tcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcG92ZXIuY29uZmlnLnVzZUJvZHlTY3JvbGxMb2NrKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUJvZHlTY3JvbGxMb2NrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIHBvcG92ZXIgaXMgY29uZmlndXJlZCB0byB1c2UgYSBjb250YWluZXIuLi5cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcG92ZXIuY29uZmlnLmNvbnRhaW5lciAhPT0gJycpIHtcbiAgICAgICAgICAgICAgLy8gLi4uYWRkIGNvbnRhaW5lclxuICAgICAgICAgICAgICB0aGlzLmFkZENvbnRhaW5lcigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBwb3BvdmVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHBvcHBlci5qcy4uLlxuICAgICAgICAgICAgaWYgKHRoaXMucG9wb3Zlci5jb25maWcudXNlUG9wcGVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkUG9wcGVyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50ID0gbnVsbFxuICAgICAgICAgICAgaWYgKHRoaXMucG9wb3Zlci5jb25maWcudXNlQm9keVNjcm9sbExvY2spIHtcbiAgICAgICAgICAgICAgdGhpcy5lbmFibGVCb2R5U2Nyb2xsTG9jaygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNvbnRhaW5lcigpXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVBvcHBlcigpXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKChpc09wZW4pID0+XG4gICAgICAgICAgaXNPcGVuXG4gICAgICAgICAgICA/IG1lcmdlKFxuICAgICAgICAgICAgICAgIC8vIGxpc3RlbiB0byBjbGljayBldmVudHNcbiAgICAgICAgICAgICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnBpcGUoXG4gICAgICAgICAgICAgICAgICB0YXAoKGV2ZW50KSA9PiB0aGlzLmhhbmRsZUNsaWNrRXZlbnQoZXZlbnQpKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgLy8gbGlzdGVuIHRvIGtleWRvd24gZXZlbnRzXG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAvLyBmaWx0ZXIga2V5c1xuICAgICAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgWydBcnJvd0Rvd24nLCAnQXJyb3dVcCcsICdFc2NhcGUnLCAnSG9tZScsICdFbmQnXS5pbmRleE9mKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50IGFzIEtleWJvYXJkRXZlbnQpLmtleVxuICAgICAgICAgICAgICAgICAgICAgICkgIT09IC0xXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdGFwKChldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlkb3duRXZlbnQoZXZlbnQgYXMgS2V5Ym9hcmRFdmVudClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogRU1QVFlcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuJHVuc3Vic2NyaWJlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZVBvcHBlcigpXG5cbiAgICAvLyBlbmFibGUgc2Nyb2xsIGlmIGJvZHkgc2Nyb2xsIGxvY2sgaXMgdXNlZFxuICAgIGlmICh0aGlzLnBvcG92ZXIuY29uZmlnLnVzZUJvZHlTY3JvbGxMb2NrKSB7XG4gICAgICB0aGlzLmVuYWJsZUJvZHlTY3JvbGxMb2NrKClcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgY29udGFpbmVyIGlmIGRlY2xhcmVkXG4gICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgdGhpcy5yZW1vdmVDb250YWluZXIoKVxuICAgIH1cbiAgICB0aGlzLiR1bnN1YnNjcmliZS5uZXh0KClcbiAgICB0aGlzLiR1bnN1YnNjcmliZS5jb21wbGV0ZSgpXG4gIH1cblxuICBlbmFibGVCb2R5U2Nyb2xsTG9jaygpIHtcbiAgICBlbmFibGVCb2R5U2Nyb2xsKHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQpXG4gIH1cblxuICBkaXNhYmxlQm9keVNjcm9sbExvY2soKSB7XG4gICAgZGlzYWJsZUJvZHlTY3JvbGwodGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudClcbiAgfVxuXG4gIGFkZFBvcHBlcigpIHtcbiAgICBpZiAodGhpcy5zbSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghdGhpcy5fcG9wcGVyKSB7XG4gICAgICAvLyAuLi5jcmVhdGUgcG9wcGVyIGluc3RhbmNlIGZvciBhbmNob3JpbmcgcG9wb3ZlciB3aXRoIHRyaWdnZXIgZWxlbWVudFxuICAgICAgdGhpcy5fcG9wcGVyID0gY3JlYXRlUG9wcGVyKFxuICAgICAgICB0aGlzLnBvcG92ZXIudHJpZ2dlckVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIG9mZnNldDogWzAsIDRdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICAvLyBkZXRlY3QgY2hhbmdlcyBvbmNlIGVsZW1lbnQgYW5kIHBvcHBlciBpcyBpbml0aWF0ZWQgdG8gdXBkYXRlIGluaXRpYWwgcG9zaXRpb25cbiAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcG9wcGVyLnN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZSA9XG4gICAgICAgIHRoaXMucG9wb3Zlci50cmlnZ2VyRWxlbWVudD8ubmF0aXZlRWxlbWVudFxuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpLnRoZW4oKF8pID0+IHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCkpXG4gICAgfVxuICB9XG4gIHJlbW92ZVBvcHBlcigpIHtcbiAgICAvLyBkZXN0cm95IHBvcHBlciBpZiBkZWNsYXJlZFxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlcj8uZGVzdHJveSgpXG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsXG4gICAgfVxuICB9XG4gIGFkZENvbnRhaW5lcigpIHtcbiAgICAvLyBjcmVhdGUgZ2xvYmFsIGNvbnRhaW5lciBmb3IgcG9wb3ZlciBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gICAgaWYgKCF0aGlzLl9jb250YWluZXIpIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lciA9IHRoaXMuX3JlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgfVxuICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciwgdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudClcbiAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5ib2R5LCB0aGlzLl9jb250YWluZXIpXG4gIH1cblxuICByZW1vdmVDb250YWluZXIoKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgLy8gcmVtb3ZlIGNvbnRhaW5lciBmcm9tIERPTSB0cmVlXG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDaGlsZChkb2N1bWVudC5ib2R5LCB0aGlzLl9jb250YWluZXIpXG5cbiAgICAgIC8vIGNsZWFyIGNvbnRhaW5lclxuICAgICAgdGhpcy5fY29udGFpbmVyID0gbnVsbFxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Directive, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Inject, Input, Output, } from '@angular/core';
|
|
2
|
+
import { NggPopoverDirective } from './popover.directive';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./popover.directive";
|
|
5
|
+
export class NggPopoverOptionDirective {
|
|
6
|
+
constructor(popover, elRef) {
|
|
7
|
+
this.popover = popover;
|
|
8
|
+
this.elRef = elRef;
|
|
9
|
+
this.selected = false;
|
|
10
|
+
this.selectedChanged = new EventEmitter();
|
|
11
|
+
this.role = 'option';
|
|
12
|
+
this.id = '';
|
|
13
|
+
this.clickHandler = (event) => {
|
|
14
|
+
this.select(event);
|
|
15
|
+
};
|
|
16
|
+
this.select = (event) => {
|
|
17
|
+
this.selectedChanged.emit(this.nggPopoverOption);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
get ariaSelected() {
|
|
21
|
+
return this.selected || null;
|
|
22
|
+
}
|
|
23
|
+
ngOnInit() {
|
|
24
|
+
this.id = `${this.popover.triggerElement?.nativeElement.id}_dropdownOption_${this.index}`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
NggPopoverOptionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggPopoverOptionDirective, deps: [{ token: forwardRef(() => NggPopoverDirective) }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
28
|
+
NggPopoverOptionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: NggPopoverOptionDirective, selector: "[nggPopoverOption]", inputs: { nggPopoverOption: "nggPopoverOption", index: "index", selected: "selected" }, outputs: { selectedChanged: "selectedChanged" }, host: { listeners: { "click": "clickHandler()" }, properties: { "attr.role": "this.role", "attr.aria-selected": "this.ariaSelected", "attr.id": "this.id" } }, ngImport: i0 });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggPopoverOptionDirective, decorators: [{
|
|
30
|
+
type: Directive,
|
|
31
|
+
args: [{
|
|
32
|
+
selector: '[nggPopoverOption]',
|
|
33
|
+
}]
|
|
34
|
+
}], ctorParameters: function () { return [{ type: i1.NggPopoverDirective, decorators: [{
|
|
35
|
+
type: Inject,
|
|
36
|
+
args: [forwardRef(() => NggPopoverDirective)]
|
|
37
|
+
}] }, { type: i0.ElementRef }]; }, propDecorators: { nggPopoverOption: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}], index: [{
|
|
40
|
+
type: Input
|
|
41
|
+
}], selected: [{
|
|
42
|
+
type: Input
|
|
43
|
+
}], selectedChanged: [{
|
|
44
|
+
type: Output
|
|
45
|
+
}], role: [{
|
|
46
|
+
type: HostBinding,
|
|
47
|
+
args: ['attr.role']
|
|
48
|
+
}], ariaSelected: [{
|
|
49
|
+
type: HostBinding,
|
|
50
|
+
args: ['attr.aria-selected']
|
|
51
|
+
}], id: [{
|
|
52
|
+
type: HostBinding,
|
|
53
|
+
args: ['attr.id']
|
|
54
|
+
}], clickHandler: [{
|
|
55
|
+
type: HostListener,
|
|
56
|
+
args: ['click']
|
|
57
|
+
}] } });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1vcHRpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZHJvcGRvd24vcG9wb3Zlci1vcHRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTs7O0FBS3pELE1BQU0sT0FBTyx5QkFBeUI7SUFlcEMsWUFFUyxPQUE0QixFQUM1QixLQUFpQjtRQURqQixZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQUM1QixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBZmpCLGFBQVEsR0FBRyxLQUFLLENBQUE7UUFDZixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7UUFDcEIsU0FBSSxHQUFHLFFBQVEsQ0FBQTtRQUtqQixPQUFFLEdBQUcsRUFBRSxDQUFBO1FBQ1IsaUJBQVksR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEIsQ0FBQyxDQUFBO1FBWUQsV0FBTSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDbEQsQ0FBQyxDQUFBO0lBUkUsQ0FBQztJQWJKLElBQ1csWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFBO0lBQzlCLENBQUM7SUFZRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxFQUFFLG1CQUFtQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDM0YsQ0FBQzs7c0hBdkJVLHlCQUF5QixrQkFnQjFCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQzswR0FoQnBDLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQUhyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7aUJBQy9COzswQkFpQkksTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7cUVBZnRDLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNtQixJQUFJO3NCQUE3QixXQUFXO3VCQUFDLFdBQVc7Z0JBRWIsWUFBWTtzQkFEdEIsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBSVQsRUFBRTtzQkFBekIsV0FBVzt1QkFBQyxTQUFTO2dCQUNDLFlBQVk7c0JBQWxDLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE5nZ1BvcG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuL3BvcG92ZXIuZGlyZWN0aXZlJ1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmdnUG9wb3Zlck9wdGlvbl0nLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dQb3BvdmVyT3B0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbmdnUG9wb3Zlck9wdGlvbjogYW55XG4gIEBJbnB1dCgpIGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgc2VsZWN0ZWQgPSBmYWxzZVxuICBAT3V0cHV0KCkgc2VsZWN0ZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZSA9ICdvcHRpb24nXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgcHVibGljIGdldCBhcmlhU2VsZWN0ZWQoKTogbnVsbCB8IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkIHx8IG51bGxcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBpZCA9ICcnXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJykgY2xpY2tIYW5kbGVyID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIHRoaXMuc2VsZWN0KGV2ZW50KVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE5nZ1BvcG92ZXJEaXJlY3RpdmUpKVxuICAgIHB1YmxpYyBwb3BvdmVyOiBOZ2dQb3BvdmVyRGlyZWN0aXZlLFxuICAgIHB1YmxpYyBlbFJlZjogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pZCA9IGAke3RoaXMucG9wb3Zlci50cmlnZ2VyRWxlbWVudD8ubmF0aXZlRWxlbWVudC5pZH1fZHJvcGRvd25PcHRpb25fJHt0aGlzLmluZGV4fWBcbiAgfVxuXG4gIHNlbGVjdCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KHRoaXMubmdnUG9wb3Zlck9wdGlvbilcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Directive, ElementRef, forwardRef, HostBinding, HostListener, Inject, } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { NggPopoverDirective } from './popover.directive';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./popover.directive";
|
|
7
|
+
export class NggPopoverTriggerDirective {
|
|
8
|
+
constructor(popover, _elRef) {
|
|
9
|
+
this.popover = popover;
|
|
10
|
+
this._elRef = _elRef;
|
|
11
|
+
this.$unsubscribe = new Subject();
|
|
12
|
+
this.class = 'dropdown-toggle';
|
|
13
|
+
this.haspopup = 'listbox';
|
|
14
|
+
this.owns = null;
|
|
15
|
+
this.expanded = this.popover.state.$isOpen.value;
|
|
16
|
+
this.toggle = (event) => {
|
|
17
|
+
if ('key' in event && event.key === 'ArrowDown') {
|
|
18
|
+
// open popover on arrow down by not stopping event propagation
|
|
19
|
+
if (this.popover.state.$isOpen.value) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// prevent container from scrolling
|
|
24
|
+
event.preventDefault();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
event.stopPropagation();
|
|
28
|
+
this.popover.toggle();
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
ngOnInit() {
|
|
32
|
+
// if trigger element does not have an id...
|
|
33
|
+
if (!this._elRef.nativeElement.id) {
|
|
34
|
+
// ...add a unique id
|
|
35
|
+
this._elRef.nativeElement.id = `ngg_dropdownTrigger_${new Date().getTime()}`;
|
|
36
|
+
this.owns = this._elRef.nativeElement.id.replace(/dropdownTrigger/, 'popover');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this.owns = this._elRef.nativeElement.id + '_popover';
|
|
40
|
+
}
|
|
41
|
+
this.popover.triggerElement = this._elRef;
|
|
42
|
+
this.popover.state.$isOpen
|
|
43
|
+
.pipe(tap((isOpen) => (this.expanded = isOpen)), takeUntil(this.$unsubscribe))
|
|
44
|
+
.subscribe();
|
|
45
|
+
}
|
|
46
|
+
ngOnDestroy() {
|
|
47
|
+
this.$unsubscribe.next();
|
|
48
|
+
this.$unsubscribe.complete();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
NggPopoverTriggerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggPopoverTriggerDirective, deps: [{ token: forwardRef(() => NggPopoverDirective) }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
52
|
+
NggPopoverTriggerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: NggPopoverTriggerDirective, selector: "[nggPopoverTrigger]", host: { listeners: { "keydown.arrowdown": "toggle($event)", "click": "toggle($event)" }, properties: { "class": "this.class", "attr.aria-haspopup": "this.haspopup", "attr.aria-owns": "this.owns", "attr.aria-expanded": "this.expanded" } }, ngImport: i0 });
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggPopoverTriggerDirective, decorators: [{
|
|
54
|
+
type: Directive,
|
|
55
|
+
args: [{
|
|
56
|
+
selector: '[nggPopoverTrigger]',
|
|
57
|
+
}]
|
|
58
|
+
}], ctorParameters: function () { return [{ type: i1.NggPopoverDirective, decorators: [{
|
|
59
|
+
type: Inject,
|
|
60
|
+
args: [forwardRef(() => NggPopoverDirective)]
|
|
61
|
+
}] }, { type: i0.ElementRef }]; }, propDecorators: { class: [{
|
|
62
|
+
type: HostBinding,
|
|
63
|
+
args: ['class']
|
|
64
|
+
}], haspopup: [{
|
|
65
|
+
type: HostBinding,
|
|
66
|
+
args: ['attr.aria-haspopup']
|
|
67
|
+
}], owns: [{
|
|
68
|
+
type: HostBinding,
|
|
69
|
+
args: ['attr.aria-owns']
|
|
70
|
+
}], expanded: [{
|
|
71
|
+
type: HostBinding,
|
|
72
|
+
args: ['attr.aria-expanded']
|
|
73
|
+
}], toggle: [{
|
|
74
|
+
type: HostListener,
|
|
75
|
+
args: ['keydown.arrowdown', ['$event']]
|
|
76
|
+
}, {
|
|
77
|
+
type: HostListener,
|
|
78
|
+
args: ['click', ['$event']]
|
|
79
|
+
}] } });
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci10cmlnZ2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL2Ryb3Bkb3duL3BvcG92ZXItdHJpZ2dlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTs7O0FBS3pELE1BQU0sT0FBTywwQkFBMEI7SUF1QnJDLFlBRVMsT0FBNEIsRUFDM0IsTUFBa0I7UUFEbkIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQXpCNUIsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO1FBRU4sVUFBSyxHQUFHLGlCQUFpQixDQUFBO1FBQ1osYUFBUSxHQUFHLFNBQVMsQ0FBQTtRQUN4QixTQUFJLEdBQWtCLElBQUksQ0FBQTtRQUN0QixhQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQTtRQUk5RSxXQUFNLEdBQUcsQ0FBQyxLQUE0QixFQUFFLEVBQUU7WUFDeEMsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFO2dCQUMvQywrREFBK0Q7Z0JBQy9ELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtvQkFDcEMsT0FBTTtpQkFDUDtxQkFBTTtvQkFDTCxtQ0FBbUM7b0JBQ25DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQTtpQkFDdkI7YUFDRjtZQUNELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQTtZQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQ3ZCLENBQUMsQ0FBQTtJQUtFLENBQUM7SUFFSixRQUFRO1FBQ04sNENBQTRDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUU7WUFDakMscUJBQXFCO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyx1QkFBdUIsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFBO1lBQzVFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FDOUMsaUJBQWlCLEVBQ2pCLFNBQVMsQ0FDVixDQUFBO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQTtTQUN0RDtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7UUFFekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTzthQUN2QixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFDekMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FDN0I7YUFDQSxTQUFTLEVBQUUsQ0FBQTtJQUNoQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUM5QixDQUFDOzt1SEF2RFUsMEJBQTBCLGtCQXdCM0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDOzJHQXhCcEMsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBSHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtpQkFDaEM7OzBCQXlCSSxNQUFNOzJCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztxRUFyQnpCLEtBQUs7c0JBQTFCLFdBQVc7dUJBQUMsT0FBTztnQkFDZSxRQUFRO3NCQUExQyxXQUFXO3VCQUFDLG9CQUFvQjtnQkFDRixJQUFJO3NCQUFsQyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFDTSxRQUFRO3NCQUExQyxXQUFXO3VCQUFDLG9CQUFvQjtnQkFJakMsTUFBTTtzQkFGTCxZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDNUMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBOZ2dQb3BvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi9wb3BvdmVyLmRpcmVjdGl2ZSdcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25nZ1BvcG92ZXJUcmlnZ2VyXScsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ1BvcG92ZXJUcmlnZ2VyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAkdW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpXG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzID0gJ2Ryb3Bkb3duLXRvZ2dsZSdcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaGFzcG9wdXAnKSBoYXNwb3B1cCA9ICdsaXN0Ym94J1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJykgb3duczogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZXhwYW5kZWQnKSBleHBhbmRlZCA9IHRoaXMucG9wb3Zlci5zdGF0ZS4kaXNPcGVuLnZhbHVlXG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZSA9IChldmVudDogRXZlbnQgfCBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKCdrZXknIGluIGV2ZW50ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIC8vIG9wZW4gcG9wb3ZlciBvbiBhcnJvdyBkb3duIGJ5IG5vdCBzdG9wcGluZyBldmVudCBwcm9wYWdhdGlvblxuICAgICAgaWYgKHRoaXMucG9wb3Zlci5zdGF0ZS4kaXNPcGVuLnZhbHVlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcHJldmVudCBjb250YWluZXIgZnJvbSBzY3JvbGxpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgfVxuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHRoaXMucG9wb3Zlci50b2dnbGUoKVxuICB9XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBOZ2dQb3BvdmVyRGlyZWN0aXZlKSlcbiAgICBwdWJsaWMgcG9wb3ZlcjogTmdnUG9wb3ZlckRpcmVjdGl2ZSxcbiAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gaWYgdHJpZ2dlciBlbGVtZW50IGRvZXMgbm90IGhhdmUgYW4gaWQuLi5cbiAgICBpZiAoIXRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQuaWQpIHtcbiAgICAgIC8vIC4uLmFkZCBhIHVuaXF1ZSBpZFxuICAgICAgdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5pZCA9IGBuZ2dfZHJvcGRvd25UcmlnZ2VyXyR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YFxuICAgICAgdGhpcy5vd25zID0gdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5pZC5yZXBsYWNlKFxuICAgICAgICAvZHJvcGRvd25UcmlnZ2VyLyxcbiAgICAgICAgJ3BvcG92ZXInXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3ducyA9IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQuaWQgKyAnX3BvcG92ZXInXG4gICAgfVxuXG4gICAgdGhpcy5wb3BvdmVyLnRyaWdnZXJFbGVtZW50ID0gdGhpcy5fZWxSZWZcblxuICAgIHRoaXMucG9wb3Zlci5zdGF0ZS4kaXNPcGVuXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChpc09wZW4pID0+ICh0aGlzLmV4cGFuZGVkID0gaXNPcGVuKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLiR1bnN1YnNjcmliZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy4kdW5zdWJzY3JpYmUubmV4dCgpXG4gICAgdGhpcy4kdW5zdWJzY3JpYmUuY29tcGxldGUoKVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class NggPopoverDirective {
|
|
5
|
+
constructor() {
|
|
6
|
+
this._config = {
|
|
7
|
+
usePopper: true,
|
|
8
|
+
container: '',
|
|
9
|
+
useBodyScrollLock: true,
|
|
10
|
+
};
|
|
11
|
+
this.state = {
|
|
12
|
+
$isOpen: new BehaviorSubject(false),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
get config() {
|
|
16
|
+
return this._config;
|
|
17
|
+
}
|
|
18
|
+
set config(config) {
|
|
19
|
+
this._config = { ...this.config, ...config };
|
|
20
|
+
}
|
|
21
|
+
close() {
|
|
22
|
+
this.state.$isOpen.next(false);
|
|
23
|
+
}
|
|
24
|
+
open() {
|
|
25
|
+
this.state.$isOpen.next(true);
|
|
26
|
+
}
|
|
27
|
+
toggle() {
|
|
28
|
+
if (this.state.$isOpen.value) {
|
|
29
|
+
this.close();
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.open();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
NggPopoverDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggPopoverDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
37
|
+
NggPopoverDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: NggPopoverDirective, selector: "[nggPopover]", inputs: { config: "config" }, ngImport: i0 });
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: NggPopoverDirective, decorators: [{
|
|
39
|
+
type: Directive,
|
|
40
|
+
args: [{
|
|
41
|
+
selector: '[nggPopover]',
|
|
42
|
+
}]
|
|
43
|
+
}], propDecorators: { config: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}] } });
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL2xpYi9kcm9wZG93bi9wb3BvdmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFBOztBQWN0QyxNQUFNLE9BQU8sbUJBQW1CO0lBSGhDO1FBWVUsWUFBTyxHQUFrQjtZQUMvQixTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxFQUFFO1lBQ2IsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFBO1FBQ0QsVUFBSyxHQUFpQjtZQUNwQixPQUFPLEVBQUUsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDO1NBQzdDLENBQUE7S0FlRjtJQTlCQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUVELElBQWEsTUFBTSxDQUFDLE1BQXFCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQTtJQUM5QyxDQUFDO0lBV0QsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBQ0QsSUFBSTtRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBQ0QsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQzVCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtTQUNiO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7U0FDWjtJQUNILENBQUM7O2dIQTlCVSxtQkFBbUI7b0dBQW5CLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQUgvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO2lCQUN6Qjs4QkFNYyxNQUFNO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW50ZXJmYWNlIFBvcG92ZXJDb25maWcge1xuICB1c2VQb3BwZXI/OiBib29sZWFuXG4gIGNvbnRhaW5lcj86ICcnIHwgJ2JvZHknXG4gIHVzZUJvZHlTY3JvbGxMb2NrPzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgUG9wb3ZlclN0YXRlIHtcbiAgJGlzT3BlbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ2dQb3BvdmVyXScsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ1BvcG92ZXJEaXJlY3RpdmUge1xuICBnZXQgY29uZmlnKCk6IFBvcG92ZXJDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb25maWdcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBjb25maWcoY29uZmlnOiBQb3BvdmVyQ29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgLi4uY29uZmlnIH1cbiAgfVxuICB0cmlnZ2VyRWxlbWVudD86IEVsZW1lbnRSZWZcbiAgcHJpdmF0ZSBfY29uZmlnOiBQb3BvdmVyQ29uZmlnID0ge1xuICAgIHVzZVBvcHBlcjogdHJ1ZSxcbiAgICBjb250YWluZXI6ICcnLFxuICAgIHVzZUJvZHlTY3JvbGxMb2NrOiB0cnVlLFxuICB9XG4gIHN0YXRlOiBQb3BvdmVyU3RhdGUgPSB7XG4gICAgJGlzT3BlbjogbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSksXG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLnN0YXRlLiRpc09wZW4ubmV4dChmYWxzZSlcbiAgfVxuICBvcGVuKCkge1xuICAgIHRoaXMuc3RhdGUuJGlzT3Blbi5uZXh0KHRydWUpXG4gIH1cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLiRpc09wZW4udmFsdWUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW4oKVxuICAgIH1cbiAgfVxufVxuIl19
|