@ngil/form-inputs 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +9 -0
  2. package/esm2022/index.mjs +11 -0
  3. package/esm2022/lib/components/input/input.component.mjs +55 -0
  4. package/esm2022/lib/components/overlay/overlay-toggle.directive.mjs +57 -0
  5. package/esm2022/lib/components/overlay/overlay.component.mjs +106 -0
  6. package/esm2022/lib/components/select/select.component.mjs +69 -0
  7. package/esm2022/lib/components/select-options/select-options.component.mjs +58 -0
  8. package/esm2022/lib/components/textarea/textarea.component.mjs +45 -0
  9. package/esm2022/lib/components/time-picker/time-picker.component.mjs +65 -0
  10. package/esm2022/lib/components/time-picker/time-picker.directive.mjs +114 -0
  11. package/esm2022/lib/components/time-picker/time-picker.model.mjs +2 -0
  12. package/esm2022/lib/components/time-picker-overlay/picker-toggle.mjs +24 -0
  13. package/esm2022/lib/components/time-picker-overlay/time-picker-overlay.component.mjs +114 -0
  14. package/esm2022/lib/directives/number-rotation.directive.mjs +102 -0
  15. package/esm2022/lib/ngil-ui-form.module.mjs +68 -0
  16. package/esm2022/ngil-form-inputs.mjs +5 -0
  17. package/fesm2022/ngil-form-inputs.mjs +813 -0
  18. package/fesm2022/ngil-form-inputs.mjs.map +1 -0
  19. package/index.d.ts +10 -0
  20. package/lib/components/input/input.component.d.ts +14 -0
  21. package/lib/components/overlay/overlay-toggle.directive.d.ts +16 -0
  22. package/lib/components/overlay/overlay.component.d.ts +22 -0
  23. package/lib/components/select/select.component.d.ts +16 -0
  24. package/lib/components/select-options/select-options.component.d.ts +17 -0
  25. package/lib/components/textarea/textarea.component.d.ts +12 -0
  26. package/lib/components/time-picker/time-picker.component.d.ts +19 -0
  27. package/lib/components/time-picker/time-picker.directive.d.ts +28 -0
  28. package/lib/components/time-picker/time-picker.model.d.ts +5 -0
  29. package/lib/components/time-picker-overlay/picker-toggle.d.ts +8 -0
  30. package/lib/components/time-picker-overlay/time-picker-overlay.component.d.ts +26 -0
  31. package/lib/directives/number-rotation.directive.d.ts +26 -0
  32. package/lib/ngil-ui-form.module.d.ts +20 -0
  33. package/package.json +32 -0
package/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # ngil-ui-form-inputs
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test ngil-ui-form-inputs` to execute the unit tests.
8
+ Run `nx component-test ngil-ui-form-inputs --watch=true` to execute the component tests in watch mode.
9
+ Run `nx component-test ngil-ui-form-inputs --browser=chrome` to execute the component tests headless using chrome.
@@ -0,0 +1,11 @@
1
+ export * from './lib/components/input/input.component';
2
+ export * from './lib/components/select/select.component';
3
+ export * from './lib/components/textarea/textarea.component';
4
+ export * from './lib/components/time-picker-overlay/picker-toggle';
5
+ export * from './lib/components/time-picker-overlay/time-picker-overlay.component';
6
+ export * from './lib/components/time-picker/time-picker.component';
7
+ export * from './lib/components/time-picker/time-picker.directive';
8
+ export * from './lib/components/time-picker/time-picker.model';
9
+ export * from './lib/directives/number-rotation.directive';
10
+ export * from './lib/ngil-ui-form.module';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvZm9ybS1pbnB1dHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxvRUFBb0UsQ0FBQztBQUNuRixjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxnREFBZ0QsQ0FBQztBQUMvRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RleHRhcmVhL3RleHRhcmVhLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGltZS1waWNrZXItb3ZlcmxheS9waWNrZXItdG9nZ2xlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90aW1lLXBpY2tlci1vdmVybGF5L3RpbWUtcGlja2VyLW92ZXJsYXkuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90aW1lLXBpY2tlci90aW1lLXBpY2tlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGltZS1waWNrZXIvdGltZS1waWNrZXIubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL251bWJlci1yb3RhdGlvbi5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZ2lsLXVpLWZvcm0ubW9kdWxlJztcclxuIl19
@@ -0,0 +1,55 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';
2
+ import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { AbstractInputComponent } from '@ngil/form-cva';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/forms";
8
+ export class NgilInputComponent extends AbstractInputComponent {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.type = 'text';
12
+ this.changed = new EventEmitter();
13
+ this.control = new FormControl();
14
+ }
15
+ ngAfterViewInit() {
16
+ this.control.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {
17
+ this.onChangeInput(value);
18
+ });
19
+ }
20
+ writeValue(value) {
21
+ this.control.setValue(value);
22
+ }
23
+ onChangeInput(value) {
24
+ if (this.type === 'number') {
25
+ value = +value;
26
+ }
27
+ this.changed.emit(value);
28
+ if (this.onChange) {
29
+ this.onChange(value);
30
+ }
31
+ }
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
33
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.2", type: NgilInputComponent, selector: "ngil-input", inputs: { type: "type" }, outputs: { changed: "changed" }, providers: [
34
+ {
35
+ provide: NG_VALUE_ACCESSOR,
36
+ useExisting: forwardRef(() => NgilInputComponent),
37
+ multi: true
38
+ }
39
+ ], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"model$ | async as model\">\r\n <div class=\"ngil-input\" [class.ngil-input--error]=\"!!model.errorMessage\">\r\n <label class=\"ngil-input__label\" [for]=\"formControlName\">{{ label }}{{ required ? '*' : '' }}</label>\r\n\r\n <div class=\"ngil-input__field\">\r\n <input\r\n class=\"ngil-input__input\"\r\n [id]=\"formControlName\"\r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [type]=\"type\"\r\n [formControl]=\"control\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <ng-content select=\"[suffix]\"></ng-content>\r\n </div>\r\n\r\n <small class=\"ngil-input__error-message\">{{ model.errorMessage }}</small>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;width:100%;flex-direction:column;margin:.25rem 0 2rem;min-width:200px}:host .ngil-input{flex-grow:1;position:relative}:host .ngil-input--error{color:red}:host .ngil-input--error .ngil-input__input{border-color:red}:host .ngil-input__label{display:block}:host .ngil-input__input{width:100%;outline:none;border:1px solid black;border-radius:3px;padding:.25rem}:host .ngil-input__field{display:flex}:host .ngil-input__error-message{position:absolute;margin:.1rem 0;height:1rem;font-size:85%}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40
+ }
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilInputComponent, decorators: [{
42
+ type: Component,
43
+ args: [{ selector: 'ngil-input', providers: [
44
+ {
45
+ provide: NG_VALUE_ACCESSOR,
46
+ useExisting: forwardRef(() => NgilInputComponent),
47
+ multi: true
48
+ }
49
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"model$ | async as model\">\r\n <div class=\"ngil-input\" [class.ngil-input--error]=\"!!model.errorMessage\">\r\n <label class=\"ngil-input__label\" [for]=\"formControlName\">{{ label }}{{ required ? '*' : '' }}</label>\r\n\r\n <div class=\"ngil-input__field\">\r\n <input\r\n class=\"ngil-input__input\"\r\n [id]=\"formControlName\"\r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [type]=\"type\"\r\n [formControl]=\"control\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <ng-content select=\"[suffix]\"></ng-content>\r\n </div>\r\n\r\n <small class=\"ngil-input__error-message\">{{ model.errorMessage }}</small>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;width:100%;flex-direction:column;margin:.25rem 0 2rem;min-width:200px}:host .ngil-input{flex-grow:1;position:relative}:host .ngil-input--error{color:red}:host .ngil-input--error .ngil-input__input{border-color:red}:host .ngil-input__label{display:block}:host .ngil-input__input{width:100%;outline:none;border:1px solid black;border-radius:3px;padding:.25rem}:host .ngil-input__field{display:flex}:host .ngil-input__error-message{position:absolute;margin:.1rem 0;height:1rem;font-size:85%}\n"] }]
50
+ }], propDecorators: { type: [{
51
+ type: Input
52
+ }], changed: [{
53
+ type: Output
54
+ }] } });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ2lsL3VpL2Zvcm0taW5wdXRzL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvZm9ybS1pbnB1dHMvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBZTNDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxzQkFBdUM7SUFiL0U7O1FBY1csU0FBSSxHQUFHLE1BQU0sQ0FBQztRQUNiLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUV4RCxZQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztLQXFCN0I7SUFuQkMsZUFBZTtRQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQXNCO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBc0I7UUFDbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNCLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzs4R0F4QlUsa0JBQWtCO2tHQUFsQixrQkFBa0IsZ0dBVGxCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDakQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLGlEQ3ZCSCw4dUJBb0JBOzsyRkRNYSxrQkFBa0I7a0JBYjlCLFNBQVM7K0JBQ0UsWUFBWSxhQUdYO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDOzRCQUNqRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTs4QkFHdEMsSUFBSTtzQkFBWixLQUFLO2dCQUNJLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFic3RyYWN0SW5wdXRDb21wb25lbnQgfSBmcm9tICdAbmdpbC9mb3JtLWN2YSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmdpbC1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmdpbElucHV0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ2lsSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0Q29tcG9uZW50PHN0cmluZyB8IG51bWJlcj4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSB0eXBlID0gJ3RleHQnO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBudW1iZXI+KCk7XHJcblxyXG4gIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgdGhpcy5vbkNoYW5nZUlucHV0KHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VJbnB1dCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICB2YWx1ZSA9ICt2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlZC5lbWl0KHZhbHVlKTtcclxuICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWwkIHwgYXN5bmMgYXMgbW9kZWxcIj5cclxuICA8ZGl2IGNsYXNzPVwibmdpbC1pbnB1dFwiIFtjbGFzcy5uZ2lsLWlucHV0LS1lcnJvcl09XCIhIW1vZGVsLmVycm9yTWVzc2FnZVwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwibmdpbC1pbnB1dF9fbGFiZWxcIiBbZm9yXT1cImZvcm1Db250cm9sTmFtZVwiPnt7IGxhYmVsIH19e3sgcmVxdWlyZWQgPyAnKicgOiAnJyB9fTwvbGFiZWw+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm5naWwtaW5wdXRfX2ZpZWxkXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGNsYXNzPVwibmdpbC1pbnB1dF9faW5wdXRcIlxyXG4gICAgICAgIFtpZF09XCJmb3JtQ29udHJvbE5hbWVcIlxyXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICBbdHlwZV09XCJ0eXBlXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXHJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAvPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3VmZml4XVwiPjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzbWFsbCBjbGFzcz1cIm5naWwtaW5wdXRfX2Vycm9yLW1lc3NhZ2VcIj57eyBtb2RlbC5lcnJvck1lc3NhZ2UgfX08L3NtYWxsPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
@@ -0,0 +1,57 @@
1
+ import { Directive, ElementRef, HostListener, Input } from '@angular/core';
2
+ import { NgilOverlayComponent } from './overlay.component';
3
+ import * as i0 from "@angular/core";
4
+ export class OverlayToggleDirective {
5
+ set ngilOverlayToggle(overlay) {
6
+ this.overlay = overlay;
7
+ }
8
+ set isOverlayOrigin(isOrigin) {
9
+ this.isOrigin = isOrigin;
10
+ this.setOverlayOrigin();
11
+ }
12
+ constructor(elementRef) {
13
+ this.elementRef = elementRef;
14
+ this.isOrigin = true;
15
+ this.onClick = (event) => {
16
+ if (!this.overlay) {
17
+ throw new Error(`The overlay is not defined. The overlay component should be provided in the directive input
18
+
19
+ <my-element [ngilOverlayToggle]="overlay"></my-element>
20
+ <ngil-overlay #overlay>...</ngil-overlay>
21
+ `);
22
+ }
23
+ if (!this.overlay.isOpened) {
24
+ this.overlay.open();
25
+ }
26
+ event.stopPropagation();
27
+ };
28
+ }
29
+ ngOnInit() {
30
+ this.setOverlayOrigin();
31
+ }
32
+ setOverlayOrigin() {
33
+ if (this.isOrigin && this.overlay) {
34
+ this.overlay.origin = this.elementRef;
35
+ }
36
+ else if (this.overlay) {
37
+ this.overlay.origin = undefined;
38
+ }
39
+ }
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: OverlayToggleDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
41
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: OverlayToggleDirective, selector: "[ngilOverlayToggle]", inputs: { ngilOverlayToggle: "ngilOverlayToggle", isOverlayOrigin: "isOverlayOrigin" }, host: { listeners: { "click": "onClick($event)" } }, exportAs: ["ngilOverlayToggle"], ngImport: i0 }); }
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: OverlayToggleDirective, decorators: [{
44
+ type: Directive,
45
+ args: [{
46
+ selector: '[ngilOverlayToggle]',
47
+ exportAs: 'ngilOverlayToggle'
48
+ }]
49
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { ngilOverlayToggle: [{
50
+ type: Input
51
+ }], isOverlayOrigin: [{
52
+ type: Input
53
+ }], onClick: [{
54
+ type: HostListener,
55
+ args: ['click', ['$event']]
56
+ }] } });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS10b2dnbGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ2lsL3VpL2Zvcm0taW5wdXRzL3NyYy9saWIvY29tcG9uZW50cy9vdmVybGF5L292ZXJsYXktdG9nZ2xlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQU0zRCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLElBQWEsaUJBQWlCLENBQUMsT0FBNkI7UUFDMUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUdELElBQWEsZUFBZSxDQUFDLFFBQWlCO1FBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFHRCxZQUE2QixVQUF3QztRQUF4QyxlQUFVLEdBQVYsVUFBVSxDQUE4QjtRQUY3RCxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBZ0JXLFlBQU8sR0FBRyxDQUFDLEtBQVksRUFBUSxFQUFFO1lBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUM7Ozs7T0FJZixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsQ0FBQztZQUVELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUM7SUE1QnNFLENBQUM7SUFFekUsUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3hDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7OEdBeEJVLHNCQUFzQjtrR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCOytFQUVjLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFLTyxlQUFlO3NCQUEzQixLQUFLO2dCQW9CNkIsT0FBTztzQkFBekMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2lsT3ZlcmxheUNvbXBvbmVudCB9IGZyb20gJy4vb3ZlcmxheS5jb21wb25lbnQnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbmdpbE92ZXJsYXlUb2dnbGVdJyxcclxuICBleHBvcnRBczogJ25naWxPdmVybGF5VG9nZ2xlJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgT3ZlcmxheVRvZ2dsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgc2V0IG5naWxPdmVybGF5VG9nZ2xlKG92ZXJsYXk6IE5naWxPdmVybGF5Q29tcG9uZW50KSB7XHJcbiAgICB0aGlzLm92ZXJsYXkgPSBvdmVybGF5O1xyXG4gIH1cclxuICBwcml2YXRlIG92ZXJsYXk6IE5naWxPdmVybGF5Q29tcG9uZW50IHwgdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKSBzZXQgaXNPdmVybGF5T3JpZ2luKGlzT3JpZ2luOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzT3JpZ2luID0gaXNPcmlnaW47XHJcbiAgICB0aGlzLnNldE92ZXJsYXlPcmlnaW4oKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBpc09yaWdpbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pikge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldE92ZXJsYXlPcmlnaW4oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0T3ZlcmxheU9yaWdpbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3JpZ2luICYmIHRoaXMub3ZlcmxheSkge1xyXG4gICAgICB0aGlzLm92ZXJsYXkub3JpZ2luID0gdGhpcy5lbGVtZW50UmVmO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm92ZXJsYXkpIHtcclxuICAgICAgdGhpcy5vdmVybGF5Lm9yaWdpbiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgb25DbGljayA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcclxuICAgIGlmICghdGhpcy5vdmVybGF5KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG92ZXJsYXkgaXMgbm90IGRlZmluZWQuIFRoZSBvdmVybGF5IGNvbXBvbmVudCBzaG91bGQgYmUgcHJvdmlkZWQgaW4gdGhlIGRpcmVjdGl2ZSBpbnB1dFxyXG5cclxuICAgICAgICA8bXktZWxlbWVudCBbbmdpbE92ZXJsYXlUb2dnbGVdPVwib3ZlcmxheVwiPjwvbXktZWxlbWVudD5cclxuICAgICAgICA8bmdpbC1vdmVybGF5ICNvdmVybGF5Pi4uLjwvbmdpbC1vdmVybGF5PlxyXG4gICAgICBgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMub3ZlcmxheS5pc09wZW5lZCkge1xyXG4gICAgICB0aGlzLm92ZXJsYXkub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH07XHJcbn1cclxuIl19
@@ -0,0 +1,106 @@
1
+ import { Overlay } from '@angular/cdk/overlay';
2
+ import { DomPortal } from '@angular/cdk/portal';
3
+ import { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild, ViewEncapsulation } from '@angular/core';
4
+ import { Subject, takeUntil } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/cdk/overlay";
7
+ export class NgilOverlayComponent {
8
+ constructor(overlay) {
9
+ this.overlay = overlay;
10
+ this.overwriteConfig = {};
11
+ this.destroy$ = new Subject();
12
+ this.maxHeight = 500;
13
+ this.isOpened = false;
14
+ }
15
+ open() {
16
+ this.overlayRef = this.overlay.create(this.getOverlayConfig());
17
+ const portal = new DomPortal(this.el);
18
+ this.overlayRef.attach(portal);
19
+ this.overlayRef
20
+ .backdropClick()
21
+ .pipe(takeUntil(this.destroy$))
22
+ .subscribe(() => {
23
+ this.close();
24
+ });
25
+ this.isOpened = true;
26
+ }
27
+ getOverlayConfig() {
28
+ return {
29
+ positionStrategy: this.getStrategy(),
30
+ hasBackdrop: true,
31
+ backdropClass: this.origin ? 'cdk-overlay-transparent-backdrop' : 'cdk-overlay-dark-backdrop',
32
+ panelClass: ['ngil-overlay-panel'],
33
+ maxHeight: this.maxHeight,
34
+ minWidth: this.origin?.nativeElement.offsetWidth,
35
+ ...this.overwriteConfig
36
+ };
37
+ }
38
+ getStrategy() {
39
+ if (!this.origin) {
40
+ return this.overlay.position().global().centerHorizontally().centerVertically();
41
+ }
42
+ const primaryX = 'start';
43
+ const secondaryX = primaryX === 'start' ? 'end' : 'start';
44
+ const primaryY = 'top';
45
+ const secondaryY = 'bottom';
46
+ return this.overlay
47
+ .position()
48
+ .flexibleConnectedTo(this.origin)
49
+ .withPositions([
50
+ {
51
+ originX: primaryX,
52
+ originY: secondaryY,
53
+ overlayX: primaryX,
54
+ overlayY: primaryY
55
+ },
56
+ {
57
+ originX: primaryX,
58
+ originY: primaryY,
59
+ overlayX: primaryX,
60
+ overlayY: secondaryY
61
+ },
62
+ {
63
+ originX: secondaryX,
64
+ originY: secondaryY,
65
+ overlayX: secondaryX,
66
+ overlayY: primaryY
67
+ },
68
+ {
69
+ originX: secondaryX,
70
+ originY: primaryY,
71
+ overlayX: secondaryX,
72
+ overlayY: secondaryY
73
+ }
74
+ ]);
75
+ }
76
+ close() {
77
+ this.destroy$.next();
78
+ this.overlayRef?.dispose();
79
+ this.overlayRef = undefined;
80
+ this.isOpened = false;
81
+ }
82
+ toggle() {
83
+ if (this.isOpened) {
84
+ this.close();
85
+ }
86
+ else {
87
+ this.open();
88
+ }
89
+ }
90
+ ngOnDestroy() {
91
+ this.destroy$.next();
92
+ this.destroy$.complete();
93
+ }
94
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilOverlayComponent, deps: [{ token: i1.Overlay }], target: i0.ɵɵFactoryTarget.Component }); }
95
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.2", type: NgilOverlayComponent, selector: "ngil-overlay", inputs: { overwriteConfig: "overwriteConfig" }, viewQueries: [{ propertyName: "el", first: true, predicate: ["contentWrapper"], descendants: true }], ngImport: i0, template: "<div class=\"ngil-overlay-content\" #contentWrapper>\r\n <ng-content></ng-content>\r\n</div>\r\n", styles: ["ngil-overlay{display:none}.ngil-overlay-panel .ngil-overlay-content{display:flex;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
96
+ }
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilOverlayComponent, decorators: [{
98
+ type: Component,
99
+ args: [{ selector: 'ngil-overlay', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"ngil-overlay-content\" #contentWrapper>\r\n <ng-content></ng-content>\r\n</div>\r\n", styles: ["ngil-overlay{display:none}.ngil-overlay-panel .ngil-overlay-content{display:flex;width:100%}\n"] }]
100
+ }], ctorParameters: () => [{ type: i1.Overlay }], propDecorators: { el: [{
101
+ type: ViewChild,
102
+ args: ['contentWrapper']
103
+ }], overwriteConfig: [{
104
+ type: Input
105
+ }] } });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvZm9ybS1pbnB1dHMvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvb3ZlcmxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvZm9ybS1pbnB1dHMvc3JjL2xpYi9jb21wb25lbnRzL292ZXJsYXkvb3ZlcmxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsT0FBTyxFQUdSLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBUzFDLE1BQU0sT0FBTyxvQkFBb0I7SUFXL0IsWUFBNkIsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQVRwQyxvQkFBZSxHQUEyQixFQUFFLENBQUM7UUFFckMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsY0FBUyxHQUFHLEdBQUcsQ0FBQztRQUlqQyxhQUFRLEdBQUcsS0FBSyxDQUFDO0lBRStCLENBQUM7SUFFakQsSUFBSTtRQUNGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUUvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLFVBQVU7YUFDWixhQUFhLEVBQUU7YUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE9BQU87WUFDTCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsMkJBQTJCO1lBQzdGLFVBQVUsRUFBRSxDQUFDLG9CQUFvQixDQUFDO1lBQ2xDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsV0FBVztZQUNoRCxHQUFHLElBQUksQ0FBQyxlQUFlO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDbEYsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN6QixNQUFNLFVBQVUsR0FBRyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUMxRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdkIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDO1FBRTVCLE9BQU8sSUFBSSxDQUFDLE9BQU87YUFDaEIsUUFBUSxFQUFFO2FBQ1YsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUNoQyxhQUFhLENBQUM7WUFDYjtnQkFDRSxPQUFPLEVBQUUsUUFBUTtnQkFDakIsT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixRQUFRLEVBQUUsUUFBUTthQUNuQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixPQUFPLEVBQUUsUUFBUTtnQkFDakIsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLFFBQVEsRUFBRSxVQUFVO2FBQ3JCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixRQUFRLEVBQUUsVUFBVTtnQkFDcEIsUUFBUSxFQUFFLFFBQVE7YUFDbkI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsVUFBVTtnQkFDbkIsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixRQUFRLEVBQUUsVUFBVTthQUNyQjtTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0FwR1Usb0JBQW9CO2tHQUFwQixvQkFBb0IsME1DMUJqQyxtR0FHQTs7MkZEdUJhLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7NEVBR1IsRUFBRTtzQkFBOUIsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ2xCLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcclxuICBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5LFxyXG4gIE92ZXJsYXksXHJcbiAgT3ZlcmxheUNvbmZpZyxcclxuICBPdmVybGF5UmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBEb21Qb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ2lsLW92ZXJsYXknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9vdmVybGF5LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdpbE92ZXJsYXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRXcmFwcGVyJykgZWw/OiBFbGVtZW50UmVmO1xyXG4gIEBJbnB1dCgpIG92ZXJ3cml0ZUNvbmZpZzogUGFydGlhbDxPdmVybGF5Q29uZmlnPiA9IHt9O1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IG1heEhlaWdodCA9IDUwMDtcclxuICBwcml2YXRlIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xyXG5cclxuICBvcmlnaW4/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIGlzT3BlbmVkID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSkge31cclxuXHJcbiAgb3BlbigpOiB2b2lkIHtcclxuICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUodGhpcy5nZXRPdmVybGF5Q29uZmlnKCkpO1xyXG5cclxuICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBEb21Qb3J0YWwodGhpcy5lbCk7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmXHJcbiAgICAgIC5iYWNrZHJvcENsaWNrKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaXNPcGVuZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPdmVybGF5Q29uZmlnKCk6IE92ZXJsYXlDb25maWcge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5nZXRTdHJhdGVneSgpLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3BDbGFzczogdGhpcy5vcmlnaW4gPyAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnIDogJ2Nkay1vdmVybGF5LWRhcmstYmFja2Ryb3AnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ25naWwtb3ZlcmxheS1wYW5lbCddLFxyXG4gICAgICBtYXhIZWlnaHQ6IHRoaXMubWF4SGVpZ2h0LFxyXG4gICAgICBtaW5XaWR0aDogdGhpcy5vcmlnaW4/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgsXHJcbiAgICAgIC4uLnRoaXMub3ZlcndyaXRlQ29uZmlnXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTdHJhdGVneSgpOiBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5IHwgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5IHtcclxuICAgIGlmICghdGhpcy5vcmlnaW4pIHtcclxuICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLmNlbnRlckhvcml6b250YWxseSgpLmNlbnRlclZlcnRpY2FsbHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmltYXJ5WCA9ICdzdGFydCc7XHJcbiAgICBjb25zdCBzZWNvbmRhcnlYID0gcHJpbWFyeVggPT09ICdzdGFydCcgPyAnZW5kJyA6ICdzdGFydCc7XHJcbiAgICBjb25zdCBwcmltYXJ5WSA9ICd0b3AnO1xyXG4gICAgY29uc3Qgc2Vjb25kYXJ5WSA9ICdib3R0b20nO1xyXG5cclxuICAgIHJldHVybiB0aGlzLm92ZXJsYXlcclxuICAgICAgLnBvc2l0aW9uKClcclxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5vcmlnaW4pXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiBwcmltYXJ5WCxcclxuICAgICAgICAgIG9yaWdpblk6IHNlY29uZGFyeVksXHJcbiAgICAgICAgICBvdmVybGF5WDogcHJpbWFyeVgsXHJcbiAgICAgICAgICBvdmVybGF5WTogcHJpbWFyeVlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6IHByaW1hcnlYLFxyXG4gICAgICAgICAgb3JpZ2luWTogcHJpbWFyeVksXHJcbiAgICAgICAgICBvdmVybGF5WDogcHJpbWFyeVgsXHJcbiAgICAgICAgICBvdmVybGF5WTogc2Vjb25kYXJ5WVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogc2Vjb25kYXJ5WCxcclxuICAgICAgICAgIG9yaWdpblk6IHNlY29uZGFyeVksXHJcbiAgICAgICAgICBvdmVybGF5WDogc2Vjb25kYXJ5WCxcclxuICAgICAgICAgIG92ZXJsYXlZOiBwcmltYXJ5WVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogc2Vjb25kYXJ5WCxcclxuICAgICAgICAgIG9yaWdpblk6IHByaW1hcnlZLFxyXG4gICAgICAgICAgb3ZlcmxheVg6IHNlY29uZGFyeVgsXHJcbiAgICAgICAgICBvdmVybGF5WTogc2Vjb25kYXJ5WVxyXG4gICAgICAgIH1cclxuICAgICAgXSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0b2dnbGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc09wZW5lZCkge1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJuZ2lsLW92ZXJsYXktY29udGVudFwiICNjb250ZW50V3JhcHBlcj5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,69 @@
1
+ import { ChangeDetectionStrategy, Component, Input, ViewChild, forwardRef } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { AbstractInputComponent } from '@ngil/form-cva';
4
+ import { NgilOverlayComponent } from '../overlay/overlay.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "../select-options/select-options.component";
8
+ import * as i3 from "../overlay/overlay.component";
9
+ import * as i4 from "../overlay/overlay-toggle.directive";
10
+ export class NgilSelectComponent extends AbstractInputComponent {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.multiple = false;
14
+ this.items = [];
15
+ this.value = null;
16
+ }
17
+ get displayValue() {
18
+ if (Array.isArray(this.value)) {
19
+ return this.value.map(item => (this.displayKey ? item[this.displayKey] : item)).join(',');
20
+ }
21
+ if (this.value && this.displayKey) {
22
+ return this.value[this.displayKey];
23
+ }
24
+ return this.value;
25
+ }
26
+ writeValue(value) {
27
+ this.value = value;
28
+ }
29
+ onItemSelected(item) {
30
+ this.value = item;
31
+ if (!this.multiple) {
32
+ this.overlay?.close();
33
+ }
34
+ if (this.onChange) {
35
+ this.onChange(this.value);
36
+ }
37
+ }
38
+ isArray(item) {
39
+ return Array.isArray(item);
40
+ }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.2", type: NgilSelectComponent, selector: "ngil-select", inputs: { multiple: "multiple", items: "items", displayKey: "displayKey" }, providers: [
43
+ {
44
+ provide: NG_VALUE_ACCESSOR,
45
+ useExisting: forwardRef(() => NgilSelectComponent),
46
+ multi: true
47
+ }
48
+ ], viewQueries: [{ propertyName: "overlay", first: true, predicate: NgilOverlayComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"model$ | async as model\">\r\n <div class=\"ngil-select\" [class.ngil-select--error]=\"!!model.errorMessage\">\r\n <label class=\"ngil-select__label\" [for]=\"formControlName\">{{ label }}{{ required ? '*' : '' }}</label>\r\n\r\n <div class=\"ngil-select__field\">\r\n <div class=\"ngil-select__field-content\">\r\n <input\r\n class=\"ngil-select__input\"\r\n [value]=\"displayValue\"\r\n [disabled]=\"disabled\"\r\n (keydown)=\"$event.preventDefault(); overlay.toggle()\"\r\n [id]=\"formControlName\"\r\n (blur)=\"onBlur()\"\r\n [ngilOverlayToggle]=\"overlay\"\r\n />\r\n </div>\r\n\r\n <ng-content select=\"[suffix]\"></ng-content>\r\n </div>\r\n\r\n <small class=\"ngil-select__error-message\">{{ model.errorMessage }}</small>\r\n </div>\r\n\r\n <ngil-overlay #overlay>\r\n <ngil-select-options\r\n ngilOverlay\r\n class=\"ngil-select__dropdown\"\r\n data-test=\"ngil-select-options\"\r\n [display]=\"overlay.isOpened\"\r\n [multiple]=\"multiple\"\r\n [items]=\"items\"\r\n [displayKey]=\"displayKey\"\r\n [selectedItems]=\"value\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n ></ngil-select-options>\r\n </ngil-overlay>\r\n</ng-container>\r\n", styles: [":host{display:flex;width:100%;flex-direction:column;margin:.25rem 0 2rem;min-width:200px}:host .ngil-select{flex-grow:1;position:relative}:host .ngil-select--error{color:red}:host .ngil-select--error .ngil-select__input{border-color:red}:host .ngil-select__label{display:block}:host .ngil-select__input{width:100%;outline:none;border:1px solid black;border-radius:3px;padding:.25rem;overflow:hidden}:host .ngil-select__field{display:flex}:host .ngil-select__field-content{flex-grow:1}:host .ngil-select__error-message{position:absolute;margin:.1rem 0;height:1rem;font-size:85%}:host .ngil-select__dropdown{width:100%}:host .hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NgilSelectOptionsComponent, selector: "ngil-select-options", inputs: ["selectedItems", "items", "displayKey", "multiple", "display"], outputs: ["itemSelected"] }, { kind: "component", type: i3.NgilOverlayComponent, selector: "ngil-overlay", inputs: ["overwriteConfig"] }, { kind: "directive", type: i4.OverlayToggleDirective, selector: "[ngilOverlayToggle]", inputs: ["ngilOverlayToggle", "isOverlayOrigin"], exportAs: ["ngilOverlayToggle"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilSelectComponent, decorators: [{
51
+ type: Component,
52
+ args: [{ selector: 'ngil-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
53
+ {
54
+ provide: NG_VALUE_ACCESSOR,
55
+ useExisting: forwardRef(() => NgilSelectComponent),
56
+ multi: true
57
+ }
58
+ ], template: "<ng-container *ngIf=\"model$ | async as model\">\r\n <div class=\"ngil-select\" [class.ngil-select--error]=\"!!model.errorMessage\">\r\n <label class=\"ngil-select__label\" [for]=\"formControlName\">{{ label }}{{ required ? '*' : '' }}</label>\r\n\r\n <div class=\"ngil-select__field\">\r\n <div class=\"ngil-select__field-content\">\r\n <input\r\n class=\"ngil-select__input\"\r\n [value]=\"displayValue\"\r\n [disabled]=\"disabled\"\r\n (keydown)=\"$event.preventDefault(); overlay.toggle()\"\r\n [id]=\"formControlName\"\r\n (blur)=\"onBlur()\"\r\n [ngilOverlayToggle]=\"overlay\"\r\n />\r\n </div>\r\n\r\n <ng-content select=\"[suffix]\"></ng-content>\r\n </div>\r\n\r\n <small class=\"ngil-select__error-message\">{{ model.errorMessage }}</small>\r\n </div>\r\n\r\n <ngil-overlay #overlay>\r\n <ngil-select-options\r\n ngilOverlay\r\n class=\"ngil-select__dropdown\"\r\n data-test=\"ngil-select-options\"\r\n [display]=\"overlay.isOpened\"\r\n [multiple]=\"multiple\"\r\n [items]=\"items\"\r\n [displayKey]=\"displayKey\"\r\n [selectedItems]=\"value\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n ></ngil-select-options>\r\n </ngil-overlay>\r\n</ng-container>\r\n", styles: [":host{display:flex;width:100%;flex-direction:column;margin:.25rem 0 2rem;min-width:200px}:host .ngil-select{flex-grow:1;position:relative}:host .ngil-select--error{color:red}:host .ngil-select--error .ngil-select__input{border-color:red}:host .ngil-select__label{display:block}:host .ngil-select__input{width:100%;outline:none;border:1px solid black;border-radius:3px;padding:.25rem;overflow:hidden}:host .ngil-select__field{display:flex}:host .ngil-select__field-content{flex-grow:1}:host .ngil-select__error-message{position:absolute;margin:.1rem 0;height:1rem;font-size:85%}:host .ngil-select__dropdown{width:100%}:host .hidden{display:none}\n"] }]
59
+ }], propDecorators: { overlay: [{
60
+ type: ViewChild,
61
+ args: [NgilOverlayComponent]
62
+ }], multiple: [{
63
+ type: Input
64
+ }], items: [{
65
+ type: Input
66
+ }], displayKey: [{
67
+ type: Input
68
+ }] } });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdpbC91aS9mb3JtLWlucHV0cy9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvZm9ybS1pbnB1dHMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7O0FBZXBFLE1BQU0sT0FBTyxtQkFBdUIsU0FBUSxzQkFBK0I7SUFiM0U7O1FBZVcsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixVQUFLLEdBQVEsRUFBRSxDQUFDO1FBR3pCLFVBQUssR0FBbUIsSUFBSSxDQUFDO0tBaUM5QjtJQS9CQyxJQUFJLFlBQVk7UUFDZCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBUTtRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWE7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFFbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3hCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFhO1FBQ25CLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDOzhHQXRDVSxtQkFBbUI7a0dBQW5CLG1CQUFtQixrSEFSbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO2dCQUNsRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsbUVBR1Usb0JBQW9CLHVFQ25CakMsc3pDQXFDQTs7MkZEbkJhLG1CQUFtQjtrQkFiL0IsU0FBUzsrQkFDRSxhQUFhLG1CQUdOLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQUdnQyxPQUFPO3NCQUF2QyxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDdEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFic3RyYWN0SW5wdXRDb21wb25lbnQgfSBmcm9tICdAbmdpbC9mb3JtLWN2YSc7XHJcbmltcG9ydCB7IE5naWxPdmVybGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vb3ZlcmxheS9vdmVybGF5LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25naWwtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5naWxTZWxlY3RDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5naWxTZWxlY3RDb21wb25lbnQ8VD4gZXh0ZW5kcyBBYnN0cmFjdElucHV0Q29tcG9uZW50PFQgfCBUW10+IHtcclxuICBAVmlld0NoaWxkKE5naWxPdmVybGF5Q29tcG9uZW50KSBvdmVybGF5PzogTmdpbE92ZXJsYXlDb21wb25lbnQ7XHJcbiAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpdGVtczogVFtdID0gW107XHJcbiAgQElucHV0KCkgZGlzcGxheUtleT86IGtleW9mIFQ7XHJcblxyXG4gIHZhbHVlOiBUIHwgVFtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGdldCBkaXNwbGF5VmFsdWUoKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5tYXAoaXRlbSA9PiAodGhpcy5kaXNwbGF5S2V5ID8gaXRlbVt0aGlzLmRpc3BsYXlLZXldIDogaXRlbSkpLmpvaW4oJywnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLmRpc3BsYXlLZXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsdWVbdGhpcy5kaXNwbGF5S2V5XTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIG9uSXRlbVNlbGVjdGVkKGl0ZW06IFQgfCBUW10pIHtcclxuICAgIHRoaXMudmFsdWUgPSBpdGVtO1xyXG5cclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLm92ZXJsYXk/LmNsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQXJyYXkoaXRlbTogVCB8IFRbXSk6IGl0ZW0gaXMgVFtdIHtcclxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWwkIHwgYXN5bmMgYXMgbW9kZWxcIj5cclxuICA8ZGl2IGNsYXNzPVwibmdpbC1zZWxlY3RcIiBbY2xhc3MubmdpbC1zZWxlY3QtLWVycm9yXT1cIiEhbW9kZWwuZXJyb3JNZXNzYWdlXCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJuZ2lsLXNlbGVjdF9fbGFiZWxcIiBbZm9yXT1cImZvcm1Db250cm9sTmFtZVwiPnt7IGxhYmVsIH19e3sgcmVxdWlyZWQgPyAnKicgOiAnJyB9fTwvbGFiZWw+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm5naWwtc2VsZWN0X19maWVsZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmdpbC1zZWxlY3RfX2ZpZWxkLWNvbnRlbnRcIj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIGNsYXNzPVwibmdpbC1zZWxlY3RfX2lucHV0XCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWVcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBvdmVybGF5LnRvZ2dsZSgpXCJcclxuICAgICAgICAgIFtpZF09XCJmb3JtQ29udHJvbE5hbWVcIlxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAgICAgW25naWxPdmVybGF5VG9nZ2xlXT1cIm92ZXJsYXlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3N1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8c21hbGwgY2xhc3M9XCJuZ2lsLXNlbGVjdF9fZXJyb3ItbWVzc2FnZVwiPnt7IG1vZGVsLmVycm9yTWVzc2FnZSB9fTwvc21hbGw+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZ2lsLW92ZXJsYXkgI292ZXJsYXk+XHJcbiAgICA8bmdpbC1zZWxlY3Qtb3B0aW9uc1xyXG4gICAgICBuZ2lsT3ZlcmxheVxyXG4gICAgICBjbGFzcz1cIm5naWwtc2VsZWN0X19kcm9wZG93blwiXHJcbiAgICAgIGRhdGEtdGVzdD1cIm5naWwtc2VsZWN0LW9wdGlvbnNcIlxyXG4gICAgICBbZGlzcGxheV09XCJvdmVybGF5LmlzT3BlbmVkXCJcclxuICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcclxuICAgICAgW2l0ZW1zXT1cIml0ZW1zXCJcclxuICAgICAgW2Rpc3BsYXlLZXldPVwiZGlzcGxheUtleVwiXHJcbiAgICAgIFtzZWxlY3RlZEl0ZW1zXT1cInZhbHVlXCJcclxuICAgICAgKGl0ZW1TZWxlY3RlZCk9XCJvbkl0ZW1TZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgID48L25naWwtc2VsZWN0LW9wdGlvbnM+XHJcbiAgPC9uZ2lsLW92ZXJsYXk+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
@@ -0,0 +1,58 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class NgilSelectOptionsComponent {
6
+ constructor() {
7
+ this.selectedItems = null;
8
+ this.items = [];
9
+ this.multiple = false;
10
+ this.display = false;
11
+ this.itemSelected = new EventEmitter();
12
+ this.destroy$ = new Subject();
13
+ }
14
+ onItemSelected(item) {
15
+ let newSelection;
16
+ if (Array.isArray(this.selectedItems)) {
17
+ newSelection = this.selectedItems.includes(item)
18
+ ? this.selectedItems.filter(selectedItem => selectedItem !== item)
19
+ : [...this.selectedItems, item];
20
+ }
21
+ else if (this.multiple && this.selectedItems) {
22
+ newSelection = [this.selectedItems, item];
23
+ }
24
+ else {
25
+ newSelection = item;
26
+ }
27
+ this.itemSelected.emit(newSelection);
28
+ }
29
+ isSelected(item) {
30
+ if (Array.isArray(this.selectedItems)) {
31
+ return this.selectedItems.includes(item);
32
+ }
33
+ return item === this.selectedItems;
34
+ }
35
+ ngOnDestroy() {
36
+ this.destroy$.next();
37
+ this.destroy$.complete();
38
+ }
39
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilSelectOptionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
40
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.2", type: NgilSelectOptionsComponent, selector: "ngil-select-options", inputs: { selectedItems: "selectedItems", items: "items", displayKey: "displayKey", multiple: "multiple", display: "display" }, outputs: { itemSelected: "itemSelected" }, ngImport: i0, template: "<div class=\"ngil-dropdown\" *ngIf=\"display\" role=\"listbox\" data-test=\"ngil-select-options-list\">\r\n <ng-container *ngFor=\"let item of items\">\r\n <div\r\n role=\"option\"\r\n class=\"ngil-dropdown__item\"\r\n data-test=\"ngil-select-option\"\r\n [attr.value]=\"item\"\r\n [attr.displayValue]=\"displayKey ? item[displayKey] : item\"\r\n (click)=\"onItemSelected(item)\"\r\n [class.ngil-dropdown__item--selected]=\"isSelected(item)\"\r\n >\r\n {{ displayKey ? item[displayKey] : item }}\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [":host{display:flex;width:100%;flex-direction:column;min-width:200px;background:#fff;border:1px solid #000;overflow-y:auto}:host .ngil-dropdown__item{line-height:1.5rem;padding:.25rem .5rem}:host .ngil-dropdown__item:hover{background:#d3d3d3}:host .ngil-dropdown__item--selected{background:#708090}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilSelectOptionsComponent, decorators: [{
43
+ type: Component,
44
+ args: [{ selector: 'ngil-select-options', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ngil-dropdown\" *ngIf=\"display\" role=\"listbox\" data-test=\"ngil-select-options-list\">\r\n <ng-container *ngFor=\"let item of items\">\r\n <div\r\n role=\"option\"\r\n class=\"ngil-dropdown__item\"\r\n data-test=\"ngil-select-option\"\r\n [attr.value]=\"item\"\r\n [attr.displayValue]=\"displayKey ? item[displayKey] : item\"\r\n (click)=\"onItemSelected(item)\"\r\n [class.ngil-dropdown__item--selected]=\"isSelected(item)\"\r\n >\r\n {{ displayKey ? item[displayKey] : item }}\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [":host{display:flex;width:100%;flex-direction:column;min-width:200px;background:#fff;border:1px solid #000;overflow-y:auto}:host .ngil-dropdown__item{line-height:1.5rem;padding:.25rem .5rem}:host .ngil-dropdown__item:hover{background:#d3d3d3}:host .ngil-dropdown__item--selected{background:#708090}\n"] }]
45
+ }], propDecorators: { selectedItems: [{
46
+ type: Input
47
+ }], items: [{
48
+ type: Input
49
+ }], displayKey: [{
50
+ type: Input
51
+ }], multiple: [{
52
+ type: Input
53
+ }], display: [{
54
+ type: Input
55
+ }], itemSelected: [{
56
+ type: Output
57
+ }] } });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW9wdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ2lsL3VpL2Zvcm0taW5wdXRzL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3Qtb3B0aW9ucy9zZWxlY3Qtb3B0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvZm9ybS1pbnB1dHMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1vcHRpb25zL3NlbGVjdC1vcHRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBUS9CLE1BQU0sT0FBTywwQkFBMEI7SUFOdkM7UUFPVyxrQkFBYSxHQUFtQixJQUFJLENBQUM7UUFDckMsVUFBSyxHQUFRLEVBQUUsQ0FBQztRQUVoQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFZixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFbEMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7S0E4Qm5EO0lBNUJDLGNBQWMsQ0FBQyxJQUFPO1FBQ3BCLElBQUksWUFBcUIsQ0FBQztRQUUxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDdEMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQy9DLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTixZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQU87UUFDaEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0F0Q1UsMEJBQTBCO2tHQUExQiwwQkFBMEIsc09DVHZDLGlsQkFlQTs7MkZETmEsMEJBQTBCO2tCQU50QyxTQUFTOytCQUNFLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25naWwtc2VsZWN0LW9wdGlvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3Qtb3B0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LW9wdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdpbFNlbGVjdE9wdGlvbnNDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IFQgfCBUW10gfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBpdGVtczogVFtdID0gW107XHJcbiAgQElucHV0KCkgZGlzcGxheUtleT86IGtleW9mIFQ7XHJcbiAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBkaXNwbGF5ID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBpdGVtU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBUW10+KCk7XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIG9uSXRlbVNlbGVjdGVkKGl0ZW06IFQpIHtcclxuICAgIGxldCBuZXdTZWxlY3Rpb246IFQgfCBUW107XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZEl0ZW1zKSkge1xyXG4gICAgICBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGVkSXRlbXMuaW5jbHVkZXMoaXRlbSlcclxuICAgICAgICA/IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoc2VsZWN0ZWRJdGVtID0+IHNlbGVjdGVkSXRlbSAhPT0gaXRlbSlcclxuICAgICAgICA6IFsuLi50aGlzLnNlbGVjdGVkSXRlbXMsIGl0ZW1dO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICBuZXdTZWxlY3Rpb24gPSBbdGhpcy5zZWxlY3RlZEl0ZW1zLCBpdGVtXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1NlbGVjdGlvbiA9IGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChuZXdTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RlZChpdGVtOiBUKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkSXRlbXMpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMuaW5jbHVkZXMoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW0gPT09IHRoaXMuc2VsZWN0ZWRJdGVtcztcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJuZ2lsLWRyb3Bkb3duXCIgKm5nSWY9XCJkaXNwbGF5XCIgcm9sZT1cImxpc3Rib3hcIiBkYXRhLXRlc3Q9XCJuZ2lsLXNlbGVjdC1vcHRpb25zLWxpc3RcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxyXG4gICAgICBjbGFzcz1cIm5naWwtZHJvcGRvd25fX2l0ZW1cIlxyXG4gICAgICBkYXRhLXRlc3Q9XCJuZ2lsLXNlbGVjdC1vcHRpb25cIlxyXG4gICAgICBbYXR0ci52YWx1ZV09XCJpdGVtXCJcclxuICAgICAgW2F0dHIuZGlzcGxheVZhbHVlXT1cImRpc3BsYXlLZXkgPyBpdGVtW2Rpc3BsYXlLZXldIDogaXRlbVwiXHJcbiAgICAgIChjbGljayk9XCJvbkl0ZW1TZWxlY3RlZChpdGVtKVwiXHJcbiAgICAgIFtjbGFzcy5uZ2lsLWRyb3Bkb3duX19pdGVtLS1zZWxlY3RlZF09XCJpc1NlbGVjdGVkKGl0ZW0pXCJcclxuICAgID5cclxuICAgICAge3sgZGlzcGxheUtleSA/IGl0ZW1bZGlzcGxheUtleV0gOiBpdGVtIH19XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,45 @@
1
+ import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';
2
+ import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { AbstractInputComponent } from '@ngil/form-cva';
4
+ import { takeUntil } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/forms";
8
+ export class NgilTextareaComponent extends AbstractInputComponent {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.control = new FormControl();
12
+ }
13
+ ngAfterViewInit() {
14
+ this.control.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {
15
+ this.onChangeInput(value);
16
+ });
17
+ }
18
+ writeValue(value) {
19
+ this.control.setValue(value);
20
+ }
21
+ onChangeInput(value) {
22
+ if (this.onChange) {
23
+ this.onChange(value);
24
+ }
25
+ }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilTextareaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.2", type: NgilTextareaComponent, selector: "ngil-textarea", providers: [
28
+ {
29
+ provide: NG_VALUE_ACCESSOR,
30
+ useExisting: forwardRef(() => NgilTextareaComponent),
31
+ multi: true
32
+ }
33
+ ], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"model$ | async as model\">\r\n <div class=\"ngil-textarea\" [class.ngil-textarea--error]=\"!!model.errorMessage\">\r\n <label class=\"ngil-textarea__label\" [for]=\"formControlName\">{{ label }}{{ required ? '*' : '' }}</label>\r\n\r\n <div class=\"ngil-textarea__field\">\r\n <textarea\r\n class=\"ngil-textarea__input\"\r\n [id]=\"formControlName\"\r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [formControl]=\"control\"\r\n (blur)=\"onBlur()\"\r\n >\r\n </textarea>\r\n <ng-content select=\"[suffix]\"></ng-content>\r\n </div>\r\n\r\n <small class=\"ngil-textarea__error-message\">{{ model.errorMessage }}</small>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;width:100%;flex-direction:column;margin:.25rem 0 2rem;min-width:200px}:host .ngil-textarea{flex-grow:1;position:relative}:host .ngil-textarea--error{color:red}:host .ngil-textarea--error .ngil-textarea__input{border-color:red}:host .ngil-textarea__label{display:block}:host .ngil-textarea__input{width:100%;outline:none;border:1px solid black;border-radius:3px;padding:.25rem;height:4rem}:host .ngil-textarea__field{display:flex}:host .ngil-textarea__error-message{position:absolute;margin:.1rem 0;height:1rem;font-size:85%}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: NgilTextareaComponent, decorators: [{
36
+ type: Component,
37
+ args: [{ selector: 'ngil-textarea', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
38
+ {
39
+ provide: NG_VALUE_ACCESSOR,
40
+ useExisting: forwardRef(() => NgilTextareaComponent),
41
+ multi: true
42
+ }
43
+ ], template: "<ng-container *ngIf=\"model$ | async as model\">\r\n <div class=\"ngil-textarea\" [class.ngil-textarea--error]=\"!!model.errorMessage\">\r\n <label class=\"ngil-textarea__label\" [for]=\"formControlName\">{{ label }}{{ required ? '*' : '' }}</label>\r\n\r\n <div class=\"ngil-textarea__field\">\r\n <textarea\r\n class=\"ngil-textarea__input\"\r\n [id]=\"formControlName\"\r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [formControl]=\"control\"\r\n (blur)=\"onBlur()\"\r\n >\r\n </textarea>\r\n <ng-content select=\"[suffix]\"></ng-content>\r\n </div>\r\n\r\n <small class=\"ngil-textarea__error-message\">{{ model.errorMessage }}</small>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;width:100%;flex-direction:column;margin:.25rem 0 2rem;min-width:200px}:host .ngil-textarea{flex-grow:1;position:relative}:host .ngil-textarea--error{color:red}:host .ngil-textarea--error .ngil-textarea__input{border-color:red}:host .ngil-textarea__label{display:block}:host .ngil-textarea__input{width:100%;outline:none;border:1px solid black;border-radius:3px;padding:.25rem;height:4rem}:host .ngil-textarea__field{display:flex}:host .ngil-textarea__error-message{position:absolute;margin:.1rem 0;height:1rem;font-size:85%}\n"] }]
44
+ }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ2lsL3VpL2Zvcm0taW5wdXRzL3NyYy9saWIvY29tcG9uZW50cy90ZXh0YXJlYS90ZXh0YXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25naWwvdWkvZm9ybS1pbnB1dHMvc3JjL2xpYi9jb21wb25lbnRzL3RleHRhcmVhL3RleHRhcmVhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQWVqQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsc0JBQThCO0lBYnpFOztRQWNFLFlBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0tBaUI3QjtJQWZDLGVBQWU7UUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6RSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDOzhHQWpCVSxxQkFBcUI7a0dBQXJCLHFCQUFxQix3Q0FSckI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDO2dCQUNwRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsaURDaEJILDR2QkFvQkE7OzJGREZhLHFCQUFxQjtrQkFiakMsU0FBUzsrQkFDRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFic3RyYWN0SW5wdXRDb21wb25lbnQgfSBmcm9tICdAbmdpbC9mb3JtLWN2YSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ2lsLXRleHRhcmVhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RleHRhcmVhLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ2lsVGV4dGFyZWFDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5naWxUZXh0YXJlYUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXRDb21wb25lbnQ8c3RyaW5nPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgdGhpcy5vbkNoYW5nZUlucHV0KHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VJbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGVsJCB8IGFzeW5jIGFzIG1vZGVsXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm5naWwtdGV4dGFyZWFcIiBbY2xhc3MubmdpbC10ZXh0YXJlYS0tZXJyb3JdPVwiISFtb2RlbC5lcnJvck1lc3NhZ2VcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cIm5naWwtdGV4dGFyZWFfX2xhYmVsXCIgW2Zvcl09XCJmb3JtQ29udHJvbE5hbWVcIj57eyBsYWJlbCB9fXt7IHJlcXVpcmVkID8gJyonIDogJycgfX08L2xhYmVsPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJuZ2lsLXRleHRhcmVhX19maWVsZFwiPlxyXG4gICAgICA8dGV4dGFyZWFcclxuICAgICAgICBjbGFzcz1cIm5naWwtdGV4dGFyZWFfX2lucHV0XCJcclxuICAgICAgICBbaWRdPVwiZm9ybUNvbnRyb2xOYW1lXCJcclxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxyXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgPlxyXG4gICAgICA8L3RleHRhcmVhPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3VmZml4XVwiPjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzbWFsbCBjbGFzcz1cIm5naWwtdGV4dGFyZWFfX2Vycm9yLW1lc3NhZ2VcIj57eyBtb2RlbC5lcnJvck1lc3NhZ2UgfX08L3NtYWxsPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19