import { ChangeDetectionStrategy, Component, input, model } from '@angular/core'; import { FieldBase } from './field-base'; import { CheckboxInput, DateInput, NumberInput, SelectInput, type SelectOption, TextInput, TextareaInput } from './controls'; import { SboField } from './sbo-field'; /* * Campos con etiqueta de un solo control: atajo de `` + el control correspondiente. * Para filas con varios controles (input + botón, serie + número...) usar `sbo-field` directamente. */ @Component({ selector: 'sbo-text-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SboField, TextInput], template: ` `, styles: ':host { display: block; }', }) export class TextField extends FieldBase { readonly value = model(''); readonly maxlength = input(); readonly placeholder = input(''); } @Component({ selector: 'sbo-checkbox-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SboField, CheckboxInput], template: ` `, styles: ':host { display: block; }', }) export class CheckboxField extends FieldBase { readonly value = model(false); } @Component({ selector: 'sbo-textarea-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SboField, TextareaInput], template: ` `, styles: ':host { display: block; }', }) export class TextareaField extends FieldBase { readonly value = model(''); readonly maxlength = input(); readonly placeholder = input(''); readonly rows = input(3); } @Component({ selector: 'sbo-number-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SboField, NumberInput], template: ` `, styles: ':host { display: block; }', }) export class NumberField extends FieldBase { readonly value = model(null); readonly decimals = input(); } @Component({ selector: 'sbo-date-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SboField, DateInput], template: ` `, styles: ':host { display: block; }', }) export class DateField extends FieldBase { readonly value = model(''); } @Component({ selector: 'sbo-select-field', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SboField, SelectInput], template: ` `, styles: ':host { display: block; }', }) export class SelectField extends FieldBase { readonly options = input.required(); readonly value = model(null); readonly placeholder = input(); }