import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ selector: 'vsp-field', template: `
@if (label) { } @if (error || hint) { {{ error || hint }} }
`, }) export class VspField { @Input() label?: string; @Input() required = false; @Input() hint?: string; @Input() error?: string; @Input() htmlFor?: string; get hintCls(): string { return this.error ? 'ui-hint err' : 'ui-hint'; } } @Component({ selector: 'vsp-input', template: ``, }) export class VspInput { @Input() value = ''; @Output() valueChange = new EventEmitter(); @Input() invalid = false; get cls(): string { return this.invalid ? 'ui-input invalid' : 'ui-input'; } onInput(e: Event): void { this.value = (e.target as HTMLInputElement).value; this.valueChange.emit(this.value); } } @Component({ selector: 'vsp-textarea', template: ``, }) export class VspTextarea { @Input() value = ''; @Output() valueChange = new EventEmitter(); onInput(e: Event): void { this.value = (e.target as HTMLTextAreaElement).value; this.valueChange.emit(this.value); } }