{"version":3,"file":"kif-lib-field-address.mjs","sources":["../../../projects/kif-lib/field-address/field-address.component.ts","../../../projects/kif-lib/field-address/field-address.component.html","../../../projects/kif-lib/field-address/models/mask.ts","../../../projects/kif-lib/field-address/models/object-address.ts","../../../projects/kif-lib/field-address/models/option.ts","../../../projects/kif-lib/field-address/field-address.module.ts","../../../projects/kif-lib/field-address/public-api.ts","../../../projects/kif-lib/field-address/kif-lib-field-address.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { ObjectAddress } from './models/object-address';\nimport { Observable } from 'rxjs';\nimport { startWith, map } from 'rxjs/operators';\nimport { IEventOptionAutocomplete } from './models/event-option-autocomplete.interface';\nimport { Option } from './models/option';\nimport { FormControl } from '@angular/forms';\nimport { Search, ChevronDown, X } from 'lucide-angular';\n\n@Component({\n    selector: 'kit-field-address',\n    templateUrl: './field-address.component.html',\n    styleUrls: ['./field-address.component.css']\n})\nexport class FieldAddressComponent implements OnInit, OnChanges {\n    @Input() fieldAddress: ObjectAddress[] = [];\n    @Input() iconArrow:  boolean = false;\n    @Output() changeEventSelect: EventEmitter<any> = new EventEmitter();\n    @Output() changeEventAutocomplete: EventEmitter<IEventOptionAutocomplete> = new EventEmitter();\n\n    public filteredOptionsSelectRegion$: Observable<Option[]> | undefined;\n    public filteredOptionsSelect$:Observable<Option[]> | undefined;\n    searchText: string = '';\n    readonly searchI = Search;\n    readonly xI = X;\n    readonly chevronDownI = ChevronDown;\n\n    constructor() { }\n\n    ngOnInit() {\n        this.optionsChange()\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if(changes['fieldAddress']) {\n            this.optionsChange()\n        }\n    }\n\n    private optionsChange() {\n        const optionAutocomplete = this.fieldAddress.find((option: any) => option.type === 'selectRegion' );\n        const existingValidatorsAutoComplete = optionAutocomplete?.controlForm.validator ? [optionAutocomplete?.controlForm.validator] : [];\n        optionAutocomplete?.controlForm.setValidators([this.validateOptionAutocomplete.bind(this), ...existingValidatorsAutoComplete])\n        this.filteredOptionsSelectRegion$ = optionAutocomplete?.controlForm?.valueChanges.pipe(\n            startWith(''),\n            map((value: any) => {\n                const label = typeof value === 'string' ? value : value?.label;\n                return label ? this._filter(label as string) : optionAutocomplete?.optionsSelect?.slice();\n            }),\n        );\n        const optionSelect = this.fieldAddress.find((option: any) => option.type === 'select');\n        const existingValidatorsSelect = optionSelect?.controlForm.validator ? [optionSelect?.controlForm.validator] : [];\n        optionSelect?.controlForm.setValidators([this.validateOptionSelect.bind(this), ...existingValidatorsSelect])\n        this.filteredOptionsSelect$ = optionSelect?.controlForm?.valueChanges.pipe(\n            startWith(''),\n            map((value: any) => {\n                const label = typeof value === 'string' ? value : value?.label;\n                return label ? this._filterSelect(label as string) : optionSelect?.optionsSelect?.slice();\n            }),\n        );\n    }\n\n    displayFn(option: any): string {\n        return option && option.label ? option.label : '';\n    }\n\n    displayFnSelect(option: any): string {\n        return option && option.label ? option.label : '';\n    }\n\n    private _filter(label: string): any[] {\n        const optionAutocomplete = this.fieldAddress.find((option: any) => option.type === 'selectRegion')\n        const filterValue = label.toLowerCase();\n        return optionAutocomplete?.optionsSelect?.filter(option => option.label.toLowerCase().includes(filterValue)) || [];\n    }\n\n    private _filterSelect(label: string): any[] {\n        const select = this.fieldAddress.find((option: any) => option.type === 'select')\n        const filterValue = label.toLowerCase();\n        return select?.optionsSelect?.filter((opt: Option) => opt.label.toLowerCase().includes(filterValue)) || [];\n    }\n\n    onSelectOptionChange(event: any, idInput: string){\n        this.changeEventAutocomplete.emit({...event, idInput});\n    }\n\n    private validateOptionSelect(control: FormControl) {\n        const value = control.value;\n        const option = this.fieldAddress.find((field: any) => field.type === 'select')\n        if (value && !option?.optionsSelect?.some((opt: Option) => opt === value)) {\n            return { invalidOption: true };\n        }\n        return null;\n    }\n\n    private validateOptionAutocomplete(control: FormControl) {\n        const value = control.value;\n        const option = this.fieldAddress.find((field: any) => field.type === 'selectRegion');\n        if (value && !option?.optionsSelect?.some((opt: Option)=> opt.value === value.value)) {\n            return { invalidOption: true };\n        }\n        return null;\n    }\n\n    public clearSelection(control: FormControl) {\n        control.setValue(null);\n    }\n\n    isControlRequired(control: FormControl): boolean {\n        if (control && control.validator) {\n            const validator = control.validator({} as any);\n            return !!(validator && validator['required']);\n        }\n        return false;\n    }\n}\n","<div class=\"row m-0\">\n  @if(fieldAddress && fieldAddress.length > 0){\n    @for (optionAddress of fieldAddress; track optionAddress) {\n      @if (optionAddress && optionAddress.type === 'input') {\n      <div class=\"{{optionAddress && optionAddress?.classCol? optionAddress?.classCol :  'col-6'}}\">\n        <mat-label [class.required]=\"isControlRequired(optionAddress.controlForm)\">{{optionAddress.label}}</mat-label>\n        <mat-form-field class=\"example-full-width  custom-label-outside\" appearance=\"outline\" floatLabel=\"always\">\n          <input matInput [type]=\"'text'\" class=\"form-control\" [formControl]=\"optionAddress.controlForm\"\n            [placeholder]=\"optionAddress.placeholder\" \n            [dropSpecialCharacters]=\"optionAddress.mask && optionAddress.mask.dropSpecialCharacters ? false : true\" \n            [prefix]=\"optionAddress.mask && optionAddress.mask.prefix ? optionAddress.mask.prefix : ''\"  \n            [suffix]=\"optionAddress.mask && optionAddress.mask.suffix ? optionAddress.mask.suffix : ''\"\n            [mask]=\"optionAddress.mask && optionAddress.mask.mask ? optionAddress.mask.mask : ''\"\n            [showMaskTyped]=\"optionAddress.mask && optionAddress.mask.showMaskTyped ? optionAddress.mask.showMaskTyped : false\"\n            [allowNegativeNumbers]=\"optionAddress.mask && optionAddress.mask.allowNegativeNumbers ? optionAddress.mask.allowNegativeNumbers : false\"\n            [placeHolderCharacter]=\"optionAddress.mask && optionAddress.mask.placeHolderCharacter ? optionAddress.mask.placeHolderCharacter : null\"\n            [clearIfNotMatch]=\"optionAddress.mask && optionAddress.mask.clearIfNotMatch ? optionAddress.mask.clearIfNotMatch : false\" \n            [specialCharacters]=\"optionAddress.mask && optionAddress.mask.specialCharacters ? optionAddress.mask.specialCharacters : []\"\n            [validation]=\"optionAddress.mask && optionAddress.mask.validation ? optionAddress.mask.validation : false\"\n            [patterns]=\"optionAddress.mask && optionAddress.mask.customPatterns ? optionAddress.mask.customPatterns : null\"/>\n          @if (optionAddress.controlForm.hasError('required')) {\n          <mat-error> {{optionAddress.label}} es <strong>requerido</strong></mat-error>\n          }\n          @if (optionAddress.controlForm.hasError('minlength')) {\n          <mat-error>El mínimo permitido son {{optionAddress.minLength}} caracteres</mat-error>\n          }\n          @if (optionAddress.controlForm.hasError('errorCommons')) {\n          <mat-error>{{optionAddress.messageError}}</mat-error>\n          }\n          @if (optionAddress.controlForm.hasError('maxlength')) {\n          <mat-error>El máximo permitido son {{optionAddress.maxLength}} caracteres</mat-error>\n          }\n        </mat-form-field>\n      </div>\n      } @if (optionAddress && optionAddress.type === 'selectRegion') { \n        <div class=\"{{optionAddress && optionAddress?.classCol? optionAddress?.classCol :  'col-6'}}\">\n          <mat-label  [class.required]=\"isControlRequired(optionAddress.controlForm)\">{{optionAddress.label}}</mat-label>\n          <mat-form-field class=\"example-full-width  custom-label-outside\" appearance=\"outline\" floatLabel=\"always\">\n            <input type=\"text\" class=\"form-control\" matInput [formControl]=\"optionAddress.controlForm\" [placeholder]=\"optionAddress.placeholder\"\n              [matAutocomplete]=\"auto\" />\n            <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFnSelect\">\n              @for (option of filteredOptionsSelectRegion$ | async; track option) {\n              <mat-option (onSelectionChange)=\"onSelectOptionChange(option, optionAddress.label)\" [value]=\"option\">{{option.label}}</mat-option>\n              }\n            </mat-autocomplete>\n            @if (optionAddress.controlForm && optionAddress.controlForm.value) {\n              <lucide-angular color=\"#5D6F85\" size=\"16\" [img]=\"xI\" (click)=\"clearSelection(optionAddress.controlForm)\" class=\"cursor-pointer close-icon-select\"></lucide-angular>\n            }\n            <lucide-angular  color=\"#5D6F85\" size=\"16\" [img]=\"chevronDownI\" ></lucide-angular>\n\n            @if (optionAddress.controlForm.hasError('required')) {\n            <mat-error>{{optionAddress.label}} es <strong>requerido</strong></mat-error>\n            }\n            @if (optionAddress.controlForm.hasError('maxlength')) {\n            <mat-error>El máximo permitido son {{optionAddress.maxLength}} caracteres</mat-error>\n            }\n            @if (optionAddress.controlForm.hasError('minlength')) {\n            <mat-error>El mínimo permitido son {{optionAddress.minLength}} caracteres</mat-error>\n            }\n            @if (optionAddress.controlForm.hasError('errorCommons')) {\n            <mat-error>{{optionAddress.messageError}}</mat-error>\n            }\n            @if (optionAddress.controlForm.hasError('invalidOption')) {\n              <mat-error>Seleccione una opción <strong>válida</strong></mat-error>\n            }\n          </mat-form-field>\n          \n        </div>\n      }\n      @if (optionAddress && optionAddress.type === 'select') { \n        <div class=\"{{optionAddress && optionAddress?.classCol? optionAddress?.classCol :  'col-6'}}\">\n          <mat-label  [class.required]=\"isControlRequired(optionAddress.controlForm)\">{{optionAddress.label}}</mat-label>\n          <mat-form-field class=\"example-full-width  custom-label-outside\" appearance=\"outline\" floatLabel=\"always\">\n            <input type=\"text\" class=\"form-control\" matInput [formControl]=\"optionAddress.controlForm\" [placeholder]=\"optionAddress.placeholder\"\n              [matAutocomplete]=\"auto\" />\n            <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFnSelect\">\n              @for (option of filteredOptionsSelect$ | async; track option) {\n              <mat-option (onSelectionChange)=\"onSelectOptionChange(option, optionAddress.label)\" [value]=\"option\">{{option.label}}</mat-option>\n              }\n            </mat-autocomplete>\n            @if (optionAddress.controlForm && optionAddress.controlForm.value) {\n              <lucide-angular color=\"#5D6F85\" size=\"16\" [img]=\"xI\" (click)=\"clearSelection(optionAddress.controlForm)\" class=\"cursor-pointer close-icon-select\"></lucide-angular>\n            }\n            <lucide-angular  color=\"#5D6F85\" size=\"16\" [img]=\"chevronDownI\" ></lucide-angular>\n\n            @if (optionAddress.controlForm.hasError('required')) {\n            <mat-error>{{optionAddress.label}} es <strong>requerido</strong></mat-error>\n            }\n            @if (optionAddress.controlForm.hasError('maxlength')) {\n            <mat-error>El máximo permitido son {{optionAddress.maxLength}} caracteres</mat-error>\n            }\n            @if (optionAddress.controlForm.hasError('minlength')) {\n            <mat-error>El mínimo permitido son {{optionAddress.minLength}} caracteres</mat-error>\n            }\n            @if (optionAddress.controlForm.hasError('errorCommons')) {\n            <mat-error>{{optionAddress.messageError}}</mat-error>\n            }\n            @if (optionAddress.controlForm.hasError('invalidOption')) {\n              <mat-error>Seleccione una opción <strong>válida</strong></mat-error>\n            }\n          </mat-form-field>\n          \n        </div>\n      }\n     \n    }\n  }\n</div>","export class Mask {\n    //Si se incluye caracter especial en el modelo o no, es decir si el formato que se confgura debe ser guardado \n    dropSpecialCharacters?: boolean | undefined; //You can choose if mask will drop special character in the model, or not, default value is true.\n    //Prefijo // Es valido para los campo de texto,número pero no para select,autocomplete,date\n    prefix?: string; //You can add prefix to you masked value\n    //Sufijo // Es valido para los campo de texto,número pero no para select,autocomplete,date\n    suffix?: string; //You can add suffix to you masked value\n    //Formato del campo\n    mask: string | undefined;\n    //showMaskTyped // Define si se muestra la máscara mientras escribe o no, el valor predeterminado es false.\n    showMaskTyped?: boolean //You can choose if mask is shown while typing, or not, default value is false.\n    //Si permite números negativos\n    allowNegativeNumbers?: boolean; //You can choose if mask will allow the use of negative numbers. The default value is false.\n    //Si el showMaskTypedparámetro está habilitado, esta configuración personaliza el carácter utilizado como marcador de posición\n    placeHolderCharacter?: string|null //If the showMaskTyped parameter is enabled, this setting customizes the character used as placeholder. Default value is _.\n    //Puede elegir borrar la entrada si el valor de entrada no coincide con la máscara, el valor predeterminado es false.\n    clearIfNotMatch?: boolean; //You can choose clear the input if the input value not match the mask, default value is false.\n    //Es un array de string que debe incluir los caracteres especiales que se incluyen en el mask por ejemplo ['-','.']\n    specialCharacters?: Array<string>|null //You can define your custom options for all directives (as object in the mask module) or for each (as attributes for directive). \n    //If you override this parameter, you have to provide all the special characters (default one are not included).\n    //Separador de miles\n    thousandSeparator?: string = \"\"\n    //Separador de decimales\n    decimalMarker?:string\n    customPatterns?: any\n    validation?: boolean\n}\n","import { Mask } from \"./mask\";\nimport { Option } from \"./option\";\n\nexport class ObjectAddress {\n    type: string = \"\";\n    classCol: string = \"\";\n    label: string = \"\";\n    placeholder:string = \"\";\n    messageError:string = \"\";\n    controlForm: any;\n    optionsSelect?: Array<Option> = [];\n    isLoadingSelect?: boolean = false;\n    maxLength: number|null = null;\n    minLength: number|null = null;\n    mask?: Mask = new Mask()\n}\n","export class Option {\n    label: string = \"\" ;\n    value: string = \"\"\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FieldAddressComponent } from './field-address.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatIconModule } from '@angular/material/icon';\nimport { NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\nimport { LucideAngularModule } from 'lucide-angular';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        MatFormFieldModule, \n        MatSelectModule,\n        MatInputModule,\n        FormsModule, \n        ReactiveFormsModule,\n        MatProgressSpinnerModule,\n        MatOptionModule,\n        MatAutocompleteModule,\n        MatIconModule,\n        NgxMaskDirective, \n        NgxMaskPipe,\n        LucideAngularModule\n    ],\n    declarations: [FieldAddressComponent],\n    exports: [FieldAddressComponent],\n    providers: [provideNgxMask()]\n})\nexport class KifFieldAddressModule { }\n","/*\n * Public API Surface of kif-lib-input\n */\n\nexport * from './field-address.component';\nexport * from './models/object-address';\nexport * from './models/option';\nexport * from './models/event-option-autocomplete.interface';\nexport * from './field-address.module';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}