ng-smart-forms
Version:
Zero-config reactive forms with built-in validation, auto-save, and smart error handling for Angular
1 lines • 23 kB
Source Map (JSON)
{"version":3,"file":"ng-smart-forms.mjs","sources":["../../../projects/ng-smart-forms/src/lib/services/auto-save.service.ts","../../../projects/ng-smart-forms/src/lib/directives/smart-form.directive.ts","../../../projects/ng-smart-forms/src/lib/directives/smart-input.directive.ts","../../../projects/ng-smart-forms/src/lib/smart-form.module.ts","../../../projects/ng-smart-forms/src/lib/validators/smart-validators.ts","../../../projects/ng-smart-forms/src/public-api.ts","../../../projects/ng-smart-forms/src/ng-smart-forms.ts"],"sourcesContent":["\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AutoSaveService {\r\n private saveSubject = new Subject<any>();\r\n private statusSubject = new BehaviorSubject<'idle' | 'saving' | 'saved' | 'error'>('idle');\r\n\r\n constructor() {\r\n this.saveSubject.pipe(\r\n debounceTime(2000),\r\n distinctUntilChanged()\r\n ).subscribe(data => {\r\n this.saveData(data);\r\n });\r\n }\r\n\r\n triggerSave(data: any): void {\r\n this.statusSubject.next('saving');\r\n this.saveSubject.next(data);\r\n }\r\n\r\n getSaveStatus(): Observable<'idle' | 'saving' | 'saved' | 'error'> {\r\n return this.statusSubject.asObservable();\r\n }\r\n\r\n private saveData(data: any): void {\r\n // Simulate API call or localStorage save\r\n setTimeout(() => {\r\n try {\r\n localStorage.setItem('ngx-smart-forms-data', JSON.stringify(data));\r\n this.statusSubject.next('saved');\r\n\r\n setTimeout(() => {\r\n this.statusSubject.next('idle');\r\n }, 2000);\r\n } catch (error) {\r\n this.statusSubject.next('error');\r\n }\r\n }, 1000);\r\n }\r\n}","import { Directive, Input, OnInit, OnDestroy, ElementRef, Renderer2 } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { SmartFormConfig } from '../interfaces/smart-form.interface';\r\nimport { AutoSaveService } from '../services/auto-save.service';\r\n\r\n@Directive({\r\n selector: '[smartForm]',\r\n standalone: true\r\n})\r\nexport class SmartFormDirective implements OnInit, OnDestroy {\r\n @Input() smartForm!: FormGroup;\r\n @Input() config: SmartFormConfig = {};\r\n\r\n private destroy$ = new Subject<void>();\r\n private defaultConfig: SmartFormConfig = {\r\n autoSave: true,\r\n autoSaveDelay: 2000,\r\n showErrorsOnTouch: true,\r\n validateOnChange: true,\r\n errorMessages: {\r\n required: 'This field is required',\r\n email: 'Please enter a valid email address',\r\n minlength: 'Minimum length not met',\r\n maxlength: 'Maximum length exceeded',\r\n pattern: 'Invalid format',\r\n strongPassword: 'Password must contain uppercase, lowercase, number, and special character',\r\n noSpaces: 'Spaces are not allowed',\r\n phoneNumber: 'Please enter a valid phone number',\r\n creditCard: 'Please enter a valid credit card number'\r\n }\r\n };\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n private autoSaveService: AutoSaveService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.config = { ...this.defaultConfig, ...this.config };\r\n this.setupAutoSave();\r\n this.setupValidation();\r\n this.addStatusIndicator();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n private setupAutoSave(): void {\r\n if (this.config.autoSave) {\r\n this.smartForm.valueChanges\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(value => {\r\n if (this.smartForm.valid) {\r\n this.autoSaveService.triggerSave(value);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private setupValidation(): void {\r\n if (this.config.validateOnChange) {\r\n this.smartForm.valueChanges\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.updateErrorDisplay();\r\n });\r\n }\r\n\r\n this.smartForm.statusChanges\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.updateErrorDisplay();\r\n });\r\n }\r\n\r\n private updateErrorDisplay(): void {\r\n Object.keys(this.smartForm.controls).forEach(key => {\r\n const control = this.smartForm.get(key);\r\n const errorElement = this.el.nativeElement.querySelector(`[data-error=\"${key}\"]`);\r\n\r\n if (control && errorElement) {\r\n const shouldShow = control.errors && (control.touched || !this.config.showErrorsOnTouch);\r\n\r\n if (shouldShow) {\r\n const errorMessage = this.getErrorMessage(control.errors);\r\n errorElement.textContent = errorMessage;\r\n this.renderer.setStyle(errorElement, 'display', 'block');\r\n } else {\r\n this.renderer.setStyle(errorElement, 'display', 'none');\r\n }\r\n }\r\n });\r\n }\r\n\r\n private getErrorMessage(errors: any): string {\r\n const errorKey = Object.keys(errors)[0];\r\n return this.config.errorMessages?.[errorKey] || 'Invalid input';\r\n }\r\n\r\n private addStatusIndicator(): void {\r\n if (this.config.autoSave) {\r\n const statusEl = this.renderer.createElement('div');\r\n this.renderer.addClass(statusEl, 'smart-form-status');\r\n this.renderer.setStyle(statusEl, 'font-size', '12px');\r\n this.renderer.setStyle(statusEl, 'color', '#666');\r\n this.renderer.setStyle(statusEl, 'margin-top', '5px');\r\n this.renderer.appendChild(this.el.nativeElement, statusEl);\r\n\r\n this.autoSaveService.getSaveStatus()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(status => {\r\n const messages = {\r\n idle: '',\r\n saving: '💾 Saving...',\r\n saved: '✅ Saved',\r\n error: '❌ Save failed'\r\n };\r\n statusEl.textContent = messages[status];\r\n });\r\n }\r\n }\r\n}","import { Directive, Input, OnInit, ElementRef, Renderer2 } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { SmartFieldConfig } from '../interfaces/smart-form.interface';\r\n\r\n@Directive({\r\n selector: '[smartInput]',\r\n standalone: true\r\n})\r\nexport class SmartInputDirective implements OnInit {\r\n @Input() smartInput!: FormControl;\r\n @Input() fieldConfig: SmartFieldConfig = {};\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.setupFieldEnhancements();\r\n this.addErrorContainer();\r\n }\r\n\r\n private setupFieldEnhancements(): void {\r\n const input = this.el.nativeElement;\r\n\r\n // Add placeholder if configured\r\n if (this.fieldConfig.placeholder) {\r\n this.renderer.setAttribute(input, 'placeholder', this.fieldConfig.placeholder);\r\n }\r\n\r\n // Add input type if configured\r\n if (this.fieldConfig.type) {\r\n this.renderer.setAttribute(input, 'type', this.fieldConfig.type);\r\n }\r\n\r\n // Add visual feedback classes\r\n this.renderer.addClass(input, 'smart-input');\r\n\r\n // Add focus/blur effects\r\n this.renderer.listen(input, 'focus', () => {\r\n this.renderer.addClass(input, 'smart-input-focused');\r\n });\r\n\r\n this.renderer.listen(input, 'blur', () => {\r\n this.renderer.removeClass(input, 'smart-input-focused');\r\n });\r\n }\r\n\r\n private addErrorContainer(): void {\r\n const errorDiv = this.renderer.createElement('div');\r\n this.renderer.addClass(errorDiv, 'smart-input-error');\r\n this.renderer.setStyle(errorDiv, 'color', '#e74c3c');\r\n this.renderer.setStyle(errorDiv, 'font-size', '12px');\r\n this.renderer.setStyle(errorDiv, 'margin-top', '5px');\r\n this.renderer.setStyle(errorDiv, 'display', 'none');\r\n\r\n const fieldName = this.el.nativeElement.getAttribute('name') || 'field';\r\n this.renderer.setAttribute(errorDiv, 'data-error', fieldName);\r\n\r\n // Use appendChild to parent or insertBefore with nextSibling\r\n const parent = this.el.nativeElement.parentNode;\r\n const nextSibling = this.el.nativeElement.nextSibling;\r\n\r\n if (nextSibling) {\r\n this.renderer.insertBefore(parent, errorDiv, nextSibling);\r\n } else {\r\n this.renderer.appendChild(parent, errorDiv);\r\n }\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { SmartFormDirective } from './directives/smart-form.directive';\r\nimport { SmartInputDirective } from './directives/smart-input.directive';\r\n\r\n@NgModule({\r\n declarations: [\r\n ],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n SmartFormDirective,\r\n SmartInputDirective\r\n ],\r\n exports: [\r\n SmartFormDirective,\r\n SmartInputDirective\r\n ]\r\n})\r\nexport class SmartFormModule { }","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport class SmartValidators {\r\n static strongPassword(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (!value) return null;\r\n\r\n const hasUpper = /[A-Z]/.test(value);\r\n const hasLower = /[a-z]/.test(value);\r\n const hasNumber = /[0-9]/.test(value);\r\n const hasSpecial = /[!@#$%^&*(),.?\":{}|<>]/.test(value);\r\n const minLength = value.length >= 8;\r\n\r\n const valid = hasUpper && hasLower && hasNumber && hasSpecial && minLength;\r\n\r\n if (!valid) {\r\n return {\r\n strongPassword: {\r\n hasUpper,\r\n hasLower,\r\n hasNumber,\r\n hasSpecial,\r\n minLength\r\n }\r\n };\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n static noSpaces(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (!value) return null;\r\n\r\n return value.includes(' ') ? { noSpaces: true } : null;\r\n };\r\n }\r\n\r\n static phoneNumber(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (!value) return null;\r\n\r\n const phoneRegex = /^[\\+]?[1-9][\\d]{0,15}$/;\r\n return phoneRegex.test(value) ? null : { phoneNumber: true };\r\n };\r\n }\r\n\r\n static creditCard(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (!value) return null;\r\n\r\n // Luhn algorithm\r\n let sum = 0;\r\n let isEven = false;\r\n\r\n for (let i = value.length - 1; i >= 0; i--) {\r\n let digit = parseInt(value.charAt(i), 10);\r\n\r\n if (isEven) {\r\n digit *= 2;\r\n if (digit > 9) {\r\n digit -= 9;\r\n }\r\n }\r\n\r\n sum += digit;\r\n isEven = !isEven;\r\n }\r\n\r\n return sum % 10 === 0 ? null : { creditCard: true };\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of ngx-smart-forms\r\n */\r\n\r\nexport * from './lib/smart-form.module';\r\nexport * from './lib/directives/smart-form.directive';\r\nexport * from './lib/directives/smart-input.directive';\r\nexport * from './lib/interfaces/smart-form.interface';\r\nexport * from './lib/validators/smart-validators';\r\nexport * from './lib/services/auto-save.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AutoSaveService"],"mappings":"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"}