{"version":3,"file":"fiscal-io-ds-components-form-validator.mjs","sources":["../../../../projects/fiscal-io/ds-components/src/lib/directives/ds-form-validator.directive.ts","../../../../projects/fiscal-io/ds-components/src/fiscal-io-ds-components-form-validator.ts"],"sourcesContent":["import {\r\n  Directive,\r\n  ElementRef,\r\n  Input,\r\n  AfterViewInit,\r\n  OnDestroy,\r\n  EventEmitter,\r\n  Output,\r\n  inject,\r\n  NgZone,\r\n} from '@angular/core';\r\nimport { FormValidator, FormValidatorModel } from '@syncfusion/ej2-inputs';\r\nimport { DsLocaleService } from '@fiscal-io/ds-components';\r\n\r\n/**\r\n * Diretiva para integrar o Syncfusion FormValidator com o Design System da Fiscal.io.\r\n * Permite validar formulários nativos e componentes do DS de forma centralizada.\r\n */\r\n@Directive({\r\n  selector: '[dsFormValidator]',\r\n  standalone: true,\r\n})\r\nexport class DsFormValidatorDirective implements AfterViewInit, OnDestroy {\r\n  private el = inject(ElementRef);\r\n  private zone = inject(NgZone);\r\n  private localeService = inject(DsLocaleService);\r\n\r\n  /** \r\n   * Regras de validação (ex: { 'campo': { required: true, email: true } }) \r\n   */\r\n  @Input('dsFormValidator') rules: { [key: string]: any } = {};\r\n\r\n  /** \r\n   * Configurações adicionais para o FormValidator \r\n   */\r\n  @Input() validatorOptions: Partial<FormValidatorModel> = {};\r\n\r\n  /** \r\n   * Evento disparado quando o formulário é validado com sucesso ao submeter \r\n   */\r\n  @Output() validSubmit = new EventEmitter<Event>();\r\n\r\n  private validator!: FormValidator;\r\n\r\n  ngAfterViewInit(): void {\r\n    this.zone.runOutsideAngular(() => {\r\n      this.initValidator();\r\n    });\r\n  }\r\n\r\n  private initValidator(): void {\r\n    const options: FormValidatorModel = {\r\n      rules: this.rules,\r\n      // Design Premium: Posicionamento customizado das mensagens de erro\r\n      customPlacement: (inputElement: HTMLElement, errorElement: HTMLElement) => {\r\n        errorElement.classList.add('ds-error-message');\r\n        errorElement.style.color = 'var(--bs-danger, #dc3545)';\r\n        errorElement.style.fontSize = '0.8rem';\r\n        errorElement.style.marginTop = '4px';\r\n        errorElement.style.display = 'block';\r\n\r\n        const wrapper = inputElement.closest('.ds-uploader-wrapper') || inputElement;\r\n        wrapper.parentElement?.insertBefore(errorElement, wrapper.nextSibling);\r\n      },\r\n      ...this.validatorOptions,\r\n    };\r\n\r\n    this.validator = new FormValidator(this.el.nativeElement, options);\r\n    this.el.nativeElement.addEventListener('submit', this.handleFormSubmit.bind(this));\r\n  }\r\n\r\n  private handleFormSubmit(e: Event): void {\r\n    e.preventDefault();\r\n    if (this.validator.validate()) {\r\n      this.zone.run(() => {\r\n        this.validSubmit.emit(e);\r\n      });\r\n    }\r\n  }\r\n\r\n  public validate(): boolean {\r\n    return this.validator.validate();\r\n  }\r\n\r\n  public reset(): void {\r\n    this.validator.reset();\r\n  }\r\n\r\n  public addRules(name: string, rules: any): void {\r\n    this.validator.addRules(name, rules);\r\n  }\r\n\r\n  public removeRules(name: string, rules: string[]): void {\r\n    this.validator.removeRules(name, rules);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.validator) {\r\n      this.el.nativeElement.removeEventListener('submit', this.handleFormSubmit.bind(this));\r\n      this.validator.destroy();\r\n    }\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './form-validator';\n"],"names":[],"mappings":"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"}