import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, signal, ViewChild, } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { ButtonComponent } from '../../components/atoms/button/button.component';
import { IconComponent } from '../../components/atoms/icon/icon.component';
import { OptionComponent } from '../option/option.component';
import { Subject, debounceTime } from 'rxjs';
import { LabelComponent } from '../label/label.component';
import { AlertComponent } from '../../components/atoms/alert/alert.component';
import { TypeEnum } from '../../model/components/type.enum';
import { provideControlContainer, provideValueAccessor } from '../../utils/form.util';
import { FormGenericComponent } from '../../services/form-generic.abstract';
import { FormErrorComponent } from '../error/error.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
export class SelectComponent extends FormGenericComponent {
constructor(formGroupDirective, destroyRef) {
super(formGroupDirective);
this.destroyRef = destroyRef;
this.focusOut$ = new Subject();
this.isOpen = false;
this.option = '';
this.option$ = signal('');
this.placeholder = '';
this.label = '';
this.value = '';
this.type = TypeEnum.PRIMARY;
this.fullSize = true;
this.shouldShowError = true;
this.key = '';
this.options = [];
this.selected = new EventEmitter();
}
ngOnInit() {
this.selectOption(this.value, false);
this.focusOut$.pipe(takeUntilDestroyed(this.destroyRef), debounceTime(200)).subscribe(() => {
this.triggerChangeDetection();
this.close();
});
}
toggle() {
this.isOpen = !this.isOpen;
if (!this.isOpen) {
this.triggerTouched();
}
}
close() {
this.isOpen = false;
this.triggerTouched();
}
selectOption(key, propagate = true) {
const selectedOption = this.options.find(option => option.key === key);
this.option = key === null ? this.placeholder : selectedOption?.label;
if (propagate) {
this.selected.emit(key);
this.triggerChange(selectedOption?.key ?? null);
this.close();
}
}
writeValue(value) {
this.triggerChangeDetection();
this.selectOption(value, false);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: SelectComponent, deps: [{ token: i1.FormGroupDirective }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: SelectComponent, isStandalone: true, selector: "ct-select", inputs: { formControlName: "formControlName", placeholder: "placeholder", label: "label", value: "value", type: "type", fullSize: "fullSize", shouldShowError: "shouldShowError", key: "key", options: "options" }, outputs: { selected: "selected" }, providers: [provideValueAccessor(forwardRef(() => SelectComponent))], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["triggerElement"], descendants: true }, { propertyName: "panel", first: true, predicate: ["optionsPanel"], descendants: true }], usesInheritance: true, ngImport: i0, template: "\n
\n {{ option }}\n \n
\n@if (isOpen) {\n \n
\n \n @for (option of options; track option) {\n \n }\n
\n
\n}\n@if (hasErrors(formControl)) {\n \n}\n", dependencies: [{ kind: "component", type: OptionComponent, selector: "ct-option", inputs: ["label", "icon"] }, { kind: "component", type: IconComponent, selector: "ct-icon", inputs: ["icon", "fill", "strokeWidth", "strokeColor", "size", "variant"] }, { kind: "component", type: LabelComponent, selector: "ct-form-label", inputs: ["text", "type", "formControlName", "hasError"] }, { kind: "component", type: FormErrorComponent, selector: "ct-form-error", inputs: ["errors"] }], viewProviders: [provideControlContainer()], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: SelectComponent, decorators: [{
type: Component,
args: [{ selector: 'ct-select', standalone: true, imports: [OptionComponent, ButtonComponent, IconComponent, LabelComponent, AlertComponent, FormErrorComponent], providers: [provideValueAccessor(forwardRef(() => SelectComponent))], viewProviders: [provideControlContainer()], changeDetection: ChangeDetectionStrategy.OnPush, template: "\n\n {{ option }}\n \n
\n@if (isOpen) {\n \n
\n \n @for (option of options; track option) {\n \n }\n
\n
\n}\n@if (hasErrors(formControl)) {\n \n}\n" }]
}], ctorParameters: () => [{ type: i1.FormGroupDirective }, { type: i0.DestroyRef }], propDecorators: { formControlName: [{
type: Input
}], placeholder: [{
type: Input
}], label: [{
type: Input
}], value: [{
type: Input
}], type: [{
type: Input
}], fullSize: [{
type: Input
}], shouldShowError: [{
type: Input
}], key: [{
type: Input,
args: [{ required: true }]
}], options: [{
type: Input,
args: [{ required: true }]
}], selected: [{
type: Output
}], trigger: [{
type: ViewChild,
args: ['triggerElement']
}], panel: [{
type: ViewChild,
args: ['optionsPanel']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NpcmNsZXRvbmUvc3JjL2xpYi9mb3Jtcy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NpcmNsZXRvbmUvc3JjL2xpYi9mb3Jtcy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUdULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFXOUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEs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LFdBQ1AsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixDQUFDLGFBRW5HLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsaUJBQ3JELENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxtQkFDekIsdUJBQXVCLENBQUMsTUFBTTtnSEFRdEMsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDcUIsR0FBRztzQkFBN0IsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsT0FBTztzQkFBakMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2YsUUFBUTtzQkFBakIsTUFBTTtnQkFFc0IsT0FBTztzQkFBbkMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ0EsS0FBSztzQkFBL0IsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYXRvbXMvaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtT3B0aW9uQmFzZSB9IGZyb20gJy4uLy4uL21vZGVsL2Zvcm1zL2Zvcm0tYmFzZS5tb2RlbCc7XG5pbXBvcnQgeyBPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9vcHRpb24vb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vbGFiZWwvbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IEFsZXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hdG9tcy9hbGVydC9hbGVydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHlwZUVudW0gfSBmcm9tICcuLi8uLi9tb2RlbC9jb21wb25lbnRzL3R5cGUuZW51bSc7XG5pbXBvcnQgeyBwcm92aWRlQ29udHJvbENvbnRhaW5lciwgcHJvdmlkZVZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtLnV0aWwnO1xuaW1wb3J0IHsgRm9ybUdlbmVyaWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLWdlbmVyaWMuYWJzdHJhY3QnO1xuaW1wb3J0IHsgRm9ybUVycm9yQ29tcG9uZW50IH0gZnJvbSAnLi4vZXJyb3IvZXJyb3IuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3Qtc2VsZWN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW09wdGlvbkNvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBJY29uQ29tcG9uZW50LCBMYWJlbENvbXBvbmVudCwgQWxlcnRDb21wb25lbnQsIEZvcm1FcnJvckNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtwcm92aWRlVmFsdWVBY2Nlc3Nvcihmb3J3YXJkUmVmKCgpID0+IFNlbGVjdENvbXBvbmVudCkpXSxcbiAgdmlld1Byb3ZpZGVyczogW3Byb3ZpZGVDb250cm9sQ29udGFpbmVyKCldLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgRm9ybUdlbmVyaWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBmb2N1c091dCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIGlzT3BlbiA9IGZhbHNlO1xuICBvcHRpb24gPSAnJztcbiAgb3B0aW9uJCA9IHNpZ25hbCgnJyk7XG5cbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuICBASW5wdXQoKSB2YWx1ZTogYW55ID0gJyc7XG4gIEBJbnB1dCgpIHR5cGU6IFR5cGVFbnVtIHwgc3RyaW5nID0gVHlwZUVudW0uUFJJTUFSWTtcbiAgQElucHV0KCkgZnVsbFNpemU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG91bGRTaG93RXJyb3I6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBrZXkgPSAnJztcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgb3B0aW9uczogRm9ybU9wdGlvbkJhc2VbXSA9IFtdO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyRWxlbWVudCcpIHRyaWdnZXIhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnb3B0aW9uc1BhbmVsJykgcGFuZWwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtR3JvdXBEaXJlY3RpdmU6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWZcbiAgKSB7XG4gICAgc3VwZXIoZm9ybUdyb3VwRGlyZWN0aXZlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0T3B0aW9uKHRoaXMudmFsdWUsIGZhbHNlKTtcbiAgICB0aGlzLmZvY3VzT3V0JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLCBkZWJvdW5jZVRpbWUoMjAwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudHJpZ2dlckNoYW5nZURldGVjdGlvbigpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMudHJpZ2dlclRvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMudHJpZ2dlclRvdWNoZWQoKTtcbiAgfVxuXG4gIHNlbGVjdE9wdGlvbihrZXk6IGFueSwgcHJvcGFnYXRlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi5rZXkgPT09IGtleSkhO1xuICAgIHRoaXMub3B0aW9uID0ga2V5ID09PSBudWxsID8gdGhpcy5wbGFjZWhvbGRlciA6IHNlbGVjdGVkT3B0aW9uPy5sYWJlbDtcbiAgICBpZiAocHJvcGFnYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoa2V5KTtcbiAgICAgIHRoaXMudHJpZ2dlckNoYW5nZShzZWxlY3RlZE9wdGlvbj8ua2V5ID8/IG51bGwpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudHJpZ2dlckNoYW5nZURldGVjdGlvbigpO1xuICAgIHRoaXMuc2VsZWN0T3B0aW9uKHZhbHVlLCBmYWxzZSk7XG4gIH1cbn1cbiIsIjxjdC1mb3JtLWxhYmVsIFt0ZXh0XT1cImxhYmVsXCIgW2hhc0Vycm9yXT1cImhhc0Vycm9ycyhmb3JtQ29udHJvbClcIiAvPlxuPGRpdlxuICBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMS41IHJvdW5kZWQtbWQgYm9yZGVyIGJnLXN1cmZhY2UtdmFyaWFudCBweC00IHB5LTIgdGV4dC1zbSB0ZXh0LW9uLXN1cmZhY2UtdmFyaWFudCBkYXJrOmJnLXN1cmZhY2UtdmFyaWFudC1kYXJrIGRhcms6dGV4dC1vbi1zdXJmYWNlLXZhcmlhbnQtZGFya1wiXG4gIFtjbGFzcy5ib3JkZXItZXJyb3JdPVwiaGFzRXJyb3JzKGZvcm1Db250cm9sKVwiXG4gIFtjbGFzcy5ib3JkZXItbmV1dHJhbC0zMDBdPVwiIWhhc0Vycm9ycyhmb3JtQ29udHJvbClcIlxuICBbY2xhc3MudGV4dC1uZXV0cmFsLTQwMF09XCJvcHRpb24gPT09IHBsYWNlaG9sZGVyXCJcbiAgW2NsYXNzLnRleHQtb24tc3VyZmFjZS12YXJpYW50XT1cIm9wdGlvbiAhPT0gcGxhY2Vob2xkZXJcIlxuICAjdHJpZ2dlckVsZW1lbnRcbiAgdGFiaW5kZXg9XCIwXCJcbiAgKGZvY3Vzb3V0KT1cImZvY3VzT3V0JC5uZXh0KCRldmVudClcIlxuICAoY2xpY2spPVwidG9nZ2xlKClcIj5cbiAge3sgb3B0aW9uIH19XG4gIDxjdC1pY29uIGNsYXNzPVwiZmxleFwiIFtzaXplXT1cIidzbSdcIiBbaWNvbl09XCJpc09wZW4gPyAnY2hldnJvbi11cCcgOiAnY2hldnJvbi1kb3duJ1wiIC8+XG48L2Rpdj5cbkBpZiAoaXNPcGVuKSB7XG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgIDxkaXZcbiAgICAgICNvcHRpb25zUGFuZWxcbiAgICAgIFtjbGFzcy53LWZ1bGxdPVwiZnVsbFNpemVcIlxuICAgICAgW2NsYXNzLnctZml0XT1cIiFmdWxsU2l6ZVwiXG4gICAgICBjbGFzcz1cImFic29sdXRlIHRvcC0xIHotMTAgZmxleCBmbGV4LWNvbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItbmV1dHJhbC00MDAgYmctc3VyZmFjZS12YXJpYW50IHRleHQtb24tc3VyZmFjZS12YXJpYW50IGRhcms6Ymctc3VyZmFjZS12YXJpYW50LWRhcmsgZGFyazp0ZXh0LW9uLXN1cmZhY2UtdmFyaWFudC1kYXJrXCI+XG4gICAgICA8Y3Qtb3B0aW9uIChjbGljayk9XCJzZWxlY3RPcHRpb24obnVsbClcIiBbbGFiZWxdPVwicGxhY2Vob2xkZXJcIiAvPlxuICAgICAgQGZvciAob3B0aW9uIG9mIG9wdGlvbnM7IHRyYWNrIG9wdGlvbikge1xuICAgICAgICA8Y3Qtb3B0aW9uIChjbGljayk9XCJzZWxlY3RPcHRpb24ob3B0aW9uLmtleSlcIiBbbGFiZWxdPVwib3B0aW9uLmxhYmVsXCIgW2ljb25dPVwib3B0aW9uLmljb24hXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG59XG5AaWYgKGhhc0Vycm9ycyhmb3JtQ29udHJvbCkpIHtcbiAgPGN0LWZvcm0tZXJyb3IgW2Vycm9yc109XCJmb3JtQ29udHJvbC5lcnJvcnMgPz8ge31cIiAvPlxufVxuIl19