@vipsolucoes/dynamic-form 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -117,6 +117,7 @@ A biblioteca suporta os seguintes tipos de campos:
|
|
|
117
117
|
- `datepicker` - Seletor de data
|
|
118
118
|
- `textarea` - Área de texto
|
|
119
119
|
- `toggleswitch` - Switch/Toggle
|
|
120
|
+
- `input-button` - Campo de texto com botão de ação
|
|
120
121
|
|
|
121
122
|
## 🎯 Exemplos de Configuração
|
|
122
123
|
|
|
@@ -191,6 +192,40 @@ A biblioteca suporta os seguintes tipos de campos:
|
|
|
191
192
|
}
|
|
192
193
|
```
|
|
193
194
|
|
|
195
|
+
### Campo Input-Button (Input com Botão de Ação)
|
|
196
|
+
|
|
197
|
+
O campo `input-button` combina um input text com um botão de ação usando o componente InputGroup do PrimeNG:
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
{
|
|
201
|
+
key: 'cep',
|
|
202
|
+
controlType: 'input-button',
|
|
203
|
+
label: 'CEP',
|
|
204
|
+
placeholder: '00000-000',
|
|
205
|
+
validators: [Validators.required],
|
|
206
|
+
buttonConfig: {
|
|
207
|
+
icon: 'pi pi-search',
|
|
208
|
+
tooltip: 'Buscar endereço',
|
|
209
|
+
position: 'right',
|
|
210
|
+
severity: 'primary'
|
|
211
|
+
},
|
|
212
|
+
buttonCallback: async (fieldKey, value) => {
|
|
213
|
+
console.log(`Buscando ${fieldKey}:`, value);
|
|
214
|
+
// Implementar lógica de busca
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Propriedades do `buttonConfig`:
|
|
220
|
+
|
|
221
|
+
- `icon`: Ícone do PrimeIcons (ex: 'pi pi-search')
|
|
222
|
+
- `label`: Texto do botão (opcional, pode usar apenas ícone)
|
|
223
|
+
- `tooltip`: Texto do tooltip ao passar o mouse
|
|
224
|
+
- `position`: Posição do botão ('left' | 'right'), padrão 'right'
|
|
225
|
+
- `severity`: Estilo do botão, padrão 'primary'
|
|
226
|
+
|
|
227
|
+
A função `buttonCallback` é executada quando o botão é clicado e recebe a key do campo e o valor atual como parâmetros.
|
|
228
|
+
|
|
194
229
|
### Campos Condicionais
|
|
195
230
|
|
|
196
231
|
Você pode fazer campos serem habilitados/desabilitados baseado no valor de um toggle switch:
|
|
@@ -293,7 +328,8 @@ interface iFormConfig {
|
|
|
293
328
|
| 'select'
|
|
294
329
|
| 'datepicker'
|
|
295
330
|
| 'textarea'
|
|
296
|
-
| 'toggleswitch'
|
|
331
|
+
| 'toggleswitch'
|
|
332
|
+
| 'input-button';
|
|
297
333
|
label: string; // Texto do label
|
|
298
334
|
value?: any; // Valor inicial
|
|
299
335
|
placeholder?: string; // Texto de placeholder
|
|
@@ -310,6 +346,14 @@ interface iFormConfig {
|
|
|
310
346
|
textareaCols?: number; // Número de colunas do textarea
|
|
311
347
|
toggleTrueValue?: any; // Valor quando toggle está ativo (default: true)
|
|
312
348
|
toggleFalseValue?: any; // Valor quando toggle está inativo (default: false)
|
|
349
|
+
buttonConfig?: { // Configuração do botão para campos 'input-button'
|
|
350
|
+
icon?: string; // Ícone do PrimeIcons
|
|
351
|
+
label?: string; // Texto do botão
|
|
352
|
+
tooltip?: string; // Tooltip do botão
|
|
353
|
+
position?: 'left' | 'right'; // Posição do botão (default: 'right')
|
|
354
|
+
severity?: 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'danger' | 'help' | 'contrast'; // Estilo do botão
|
|
355
|
+
};
|
|
356
|
+
buttonCallback?: (fieldKey: string, fieldValue: any) => void | Promise<void>; // Callback executado ao clicar no botão
|
|
313
357
|
}
|
|
314
358
|
```
|
|
315
359
|
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import * as i1$1 from '@angular/common';
|
|
2
2
|
import { CommonModule, NgComponentOutlet } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, input, inject, Component, computed, ChangeDetectionStrategy, signal, Injectable, DestroyRef, output } from '@angular/core';
|
|
4
|
+
import { InjectionToken, input, inject, Component, computed, ChangeDetectionStrategy, ElementRef, HostListener, Input, Directive, signal, Injectable, DestroyRef, output } from '@angular/core';
|
|
5
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
6
|
import * as i1 from '@angular/forms';
|
|
7
|
-
import { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms';
|
|
7
|
+
import { ReactiveFormsModule, NgControl, FormGroup, FormControl } from '@angular/forms';
|
|
8
8
|
import * as i3 from 'primeng/datepicker';
|
|
9
9
|
import { DatePickerModule } from 'primeng/datepicker';
|
|
10
10
|
import * as i2 from 'primeng/iftalabel';
|
|
11
11
|
import { IftaLabelModule } from 'primeng/iftalabel';
|
|
12
12
|
import * as i3$1 from 'primeng/inputtext';
|
|
13
13
|
import { InputTextModule } from 'primeng/inputtext';
|
|
14
|
+
import * as i4 from 'primeng/inputgroup';
|
|
15
|
+
import { InputGroupModule } from 'primeng/inputgroup';
|
|
16
|
+
import { InputGroupAddonModule } from 'primeng/inputgroupaddon';
|
|
17
|
+
import * as i5 from 'primeng/button';
|
|
18
|
+
import { ButtonModule } from 'primeng/button';
|
|
19
|
+
import * as i6 from 'primeng/tooltip';
|
|
20
|
+
import { TooltipModule } from 'primeng/tooltip';
|
|
14
21
|
import * as i3$2 from 'primeng/inputnumber';
|
|
15
22
|
import { InputNumberModule } from 'primeng/inputnumber';
|
|
16
23
|
import * as i3$3 from 'primeng/password';
|
|
@@ -115,6 +122,131 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImpor
|
|
|
115
122
|
`, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}p-datepicker{width:100%}\n"] }]
|
|
116
123
|
}], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: true }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }] } });
|
|
117
124
|
|
|
125
|
+
/**
|
|
126
|
+
* Diretiva para transformar texto em uppercase ou lowercase em tempo real.
|
|
127
|
+
* Funciona com Reactive Forms (NgControl) e elementos HTML nativos.
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```html
|
|
131
|
+
* <!-- Uppercase -->
|
|
132
|
+
* <input [vpTextTransform]="'uppercase'" />
|
|
133
|
+
*
|
|
134
|
+
* <!-- Lowercase -->
|
|
135
|
+
* <input [vpTextTransform]="'lowercase'" />
|
|
136
|
+
*
|
|
137
|
+
* <!-- Desabilitado -->
|
|
138
|
+
* <input [vpTextTransform]="null" />
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
class TextTransformDirective {
|
|
142
|
+
elementRef = inject((ElementRef));
|
|
143
|
+
/**
|
|
144
|
+
* NgControl opcional - presente quando usado com reactive forms ou ngModel.
|
|
145
|
+
* Usamos `optional: true` e `self: true` para injetar apenas se estiver no mesmo elemento.
|
|
146
|
+
*/
|
|
147
|
+
ngControl = inject(NgControl, { optional: true, self: true });
|
|
148
|
+
/**
|
|
149
|
+
* Tipo de transformação a ser aplicada: 'uppercase' | 'lowercase' | null
|
|
150
|
+
* Quando null ou undefined, a transformação é desabilitada.
|
|
151
|
+
*/
|
|
152
|
+
vpTextTransform = null;
|
|
153
|
+
ngOnInit() {
|
|
154
|
+
// Aplicar transformação no valor inicial se existir
|
|
155
|
+
const element = this.elementRef.nativeElement;
|
|
156
|
+
const transform = this.vpTextTransform;
|
|
157
|
+
if (transform && element.value && typeof element.value === 'string') {
|
|
158
|
+
const transformedValue = this.transformValue(element.value, transform);
|
|
159
|
+
if (transformedValue !== element.value) {
|
|
160
|
+
element.value = transformedValue;
|
|
161
|
+
// Atualizar o FormControl se existir
|
|
162
|
+
if (this.ngControl?.control) {
|
|
163
|
+
this.ngControl.control.setValue(transformedValue, { emitEvent: false });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
onInput(event) {
|
|
169
|
+
const inputElement = event.target;
|
|
170
|
+
const transform = this.vpTextTransform;
|
|
171
|
+
// Verifica se a transformação está habilitada
|
|
172
|
+
if (!transform || !inputElement.value) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const currentValue = inputElement.value;
|
|
176
|
+
if (typeof currentValue !== 'string') {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Preserva a posição do cursor
|
|
180
|
+
const start = inputElement.selectionStart;
|
|
181
|
+
const end = inputElement.selectionEnd;
|
|
182
|
+
// Aplica a transformação
|
|
183
|
+
const transformedValue = this.transformValue(currentValue, transform);
|
|
184
|
+
// Se o valor já está transformado, não faz nada
|
|
185
|
+
if (currentValue === transformedValue) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// Atualiza o valor do elemento
|
|
189
|
+
inputElement.value = transformedValue;
|
|
190
|
+
// Restaura a posição do cursor (apenas para inputs de texto)
|
|
191
|
+
if (this.isTextInput(inputElement)) {
|
|
192
|
+
const newStart = Math.min(start ?? 0, transformedValue.length);
|
|
193
|
+
const newEnd = Math.min(end ?? 0, transformedValue.length);
|
|
194
|
+
inputElement.setSelectionRange(newStart, newEnd);
|
|
195
|
+
}
|
|
196
|
+
// Se NgControl estiver presente (reactive forms ou ngModel), atualiza através dele
|
|
197
|
+
if (this.ngControl?.control) {
|
|
198
|
+
this.ngControl.control.setValue(transformedValue, { emitEvent: false });
|
|
199
|
+
// Emite o evento manualmente para garantir que os listeners sejam notificados
|
|
200
|
+
this.ngControl.control.updateValueAndValidity({ emitEvent: true });
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
// Para elementos sem NgControl, dispara evento input manualmente
|
|
204
|
+
// Isso garante compatibilidade com listeners diretos no elemento
|
|
205
|
+
const inputEvent = new Event('input', {
|
|
206
|
+
bubbles: true,
|
|
207
|
+
cancelable: true,
|
|
208
|
+
});
|
|
209
|
+
inputElement.dispatchEvent(inputEvent);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Aplica a transformação de texto baseada no tipo especificado.
|
|
214
|
+
*/
|
|
215
|
+
transformValue(value, transform) {
|
|
216
|
+
return transform === 'uppercase' ? value.toUpperCase() : value.toLowerCase();
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Verifica se o elemento é um input de texto que suporta seleção de cursor.
|
|
220
|
+
*/
|
|
221
|
+
isTextInput(element) {
|
|
222
|
+
if (element.tagName === 'TEXTAREA') {
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
const inputElement = element;
|
|
226
|
+
return (inputElement.type === 'text' ||
|
|
227
|
+
inputElement.type === 'search' ||
|
|
228
|
+
inputElement.type === 'email' ||
|
|
229
|
+
inputElement.type === 'url' ||
|
|
230
|
+
inputElement.type === 'tel' ||
|
|
231
|
+
!inputElement.type // type padrão é 'text'
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: TextTransformDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
235
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.7", type: TextTransformDirective, isStandalone: true, selector: "[vpTextTransform]", inputs: { vpTextTransform: "vpTextTransform" }, host: { listeners: { "input": "onInput($event)" } }, ngImport: i0 });
|
|
236
|
+
}
|
|
237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: TextTransformDirective, decorators: [{
|
|
238
|
+
type: Directive,
|
|
239
|
+
args: [{
|
|
240
|
+
selector: '[vpTextTransform]',
|
|
241
|
+
standalone: true,
|
|
242
|
+
}]
|
|
243
|
+
}], propDecorators: { vpTextTransform: [{
|
|
244
|
+
type: Input
|
|
245
|
+
}], onInput: [{
|
|
246
|
+
type: HostListener,
|
|
247
|
+
args: ['input', ['$event']]
|
|
248
|
+
}] } });
|
|
249
|
+
|
|
118
250
|
class InputTextFieldComponent {
|
|
119
251
|
form = input.required(...(ngDevMode ? [{ debugName: "form" }] : []));
|
|
120
252
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
@@ -122,24 +254,158 @@ class InputTextFieldComponent {
|
|
|
122
254
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.7", type: InputTextFieldComponent, isStandalone: true, selector: "vp-input-text-field", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
123
255
|
<div [formGroup]="form()">
|
|
124
256
|
<p-iftalabel>
|
|
125
|
-
<input
|
|
257
|
+
<input
|
|
258
|
+
pInputText
|
|
259
|
+
[id]="field().key"
|
|
260
|
+
[type]="field().controlType"
|
|
261
|
+
[formControlName]="field().key"
|
|
262
|
+
[placeholder]="field().placeholder || ''"
|
|
263
|
+
[vpTextTransform]="field().textTransform || null"
|
|
264
|
+
/>
|
|
126
265
|
<label [for]="field().key">{{ field().label }}</label>
|
|
127
266
|
</p-iftalabel>
|
|
128
267
|
</div>
|
|
129
|
-
`, isInline: true, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}input{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IftaLabelModule }, { kind: "component", type: i2.IftaLabel, selector: "p-iftalabel, p-iftaLabel, p-ifta-label" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
268
|
+
`, isInline: true, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}input{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IftaLabelModule }, { kind: "component", type: i2.IftaLabel, selector: "p-iftalabel, p-iftaLabel, p-ifta-label" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "directive", type: TextTransformDirective, selector: "[vpTextTransform]", inputs: ["vpTextTransform"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
130
269
|
}
|
|
131
270
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: InputTextFieldComponent, decorators: [{
|
|
132
271
|
type: Component,
|
|
133
|
-
args: [{ selector: 'vp-input-text-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, InputTextModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
272
|
+
args: [{ selector: 'vp-input-text-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, InputTextModule, TextTransformDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
134
273
|
<div [formGroup]="form()">
|
|
135
274
|
<p-iftalabel>
|
|
136
|
-
<input
|
|
275
|
+
<input
|
|
276
|
+
pInputText
|
|
277
|
+
[id]="field().key"
|
|
278
|
+
[type]="field().controlType"
|
|
279
|
+
[formControlName]="field().key"
|
|
280
|
+
[placeholder]="field().placeholder || ''"
|
|
281
|
+
[vpTextTransform]="field().textTransform || null"
|
|
282
|
+
/>
|
|
137
283
|
<label [for]="field().key">{{ field().label }}</label>
|
|
138
284
|
</p-iftalabel>
|
|
139
285
|
</div>
|
|
140
286
|
`, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}input{width:100%}\n"] }]
|
|
141
287
|
}], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: true }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }] } });
|
|
142
288
|
|
|
289
|
+
class InputButtonFieldComponent {
|
|
290
|
+
form = input.required(...(ngDevMode ? [{ debugName: "form" }] : []));
|
|
291
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
292
|
+
buttonConfig() {
|
|
293
|
+
return this.field().buttonConfig;
|
|
294
|
+
}
|
|
295
|
+
buttonPosition() {
|
|
296
|
+
return this.buttonConfig()?.position || 'right';
|
|
297
|
+
}
|
|
298
|
+
isFieldDisabled() {
|
|
299
|
+
const control = this.form().get(this.field().key);
|
|
300
|
+
return control?.disabled ?? false;
|
|
301
|
+
}
|
|
302
|
+
onButtonClick() {
|
|
303
|
+
const control = this.form().get(this.field().key);
|
|
304
|
+
const value = control?.value;
|
|
305
|
+
const callback = this.field().buttonCallback;
|
|
306
|
+
if (callback) {
|
|
307
|
+
callback(this.field().key, value);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: InputButtonFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
311
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.7", type: InputButtonFieldComponent, isStandalone: true, selector: "vp-input-button-field", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
312
|
+
<div [formGroup]="form()">
|
|
313
|
+
<p-inputgroup>
|
|
314
|
+
@if (buttonPosition() === 'left') {
|
|
315
|
+
<p-button
|
|
316
|
+
type="button"
|
|
317
|
+
[icon]="buttonConfig()?.icon || ''"
|
|
318
|
+
[label]="buttonConfig()?.label || ''"
|
|
319
|
+
[severity]="buttonConfig()?.severity || 'primary'"
|
|
320
|
+
[pTooltip]="buttonConfig()?.tooltip || ''"
|
|
321
|
+
tooltipPosition="top"
|
|
322
|
+
(click)="onButtonClick()"
|
|
323
|
+
[disabled]="isFieldDisabled()"
|
|
324
|
+
/>
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
<p-iftalabel>
|
|
328
|
+
<input
|
|
329
|
+
pInputText
|
|
330
|
+
[id]="field().key"
|
|
331
|
+
[formControlName]="field().key"
|
|
332
|
+
[placeholder]="field().placeholder || ''"
|
|
333
|
+
[vpTextTransform]="field().textTransform || null"
|
|
334
|
+
/>
|
|
335
|
+
<label [for]="field().key">{{ field().label }}</label>
|
|
336
|
+
</p-iftalabel>
|
|
337
|
+
|
|
338
|
+
@if (buttonPosition() === 'right') {
|
|
339
|
+
<p-button
|
|
340
|
+
type="button"
|
|
341
|
+
[icon]="buttonConfig()?.icon || ''"
|
|
342
|
+
[label]="buttonConfig()?.label || ''"
|
|
343
|
+
[severity]="buttonConfig()?.severity || 'primary'"
|
|
344
|
+
[pTooltip]="buttonConfig()?.tooltip || ''"
|
|
345
|
+
tooltipPosition="top"
|
|
346
|
+
(click)="onButtonClick()"
|
|
347
|
+
[disabled]="isFieldDisabled()"
|
|
348
|
+
/>
|
|
349
|
+
}
|
|
350
|
+
</p-inputgroup>
|
|
351
|
+
</div>
|
|
352
|
+
`, isInline: true, styles: [":host{display:block;width:100%}p-inputgroup{display:flex;width:100%}p-iftalabel{flex:1}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IftaLabelModule }, { kind: "component", type: i2.IftaLabel, selector: "p-iftalabel, p-iftaLabel, p-ifta-label" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "component", type: i4.InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "directive", type: TextTransformDirective, selector: "[vpTextTransform]", inputs: ["vpTextTransform"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
353
|
+
}
|
|
354
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: InputButtonFieldComponent, decorators: [{
|
|
355
|
+
type: Component,
|
|
356
|
+
args: [{ selector: 'vp-input-button-field', standalone: true, imports: [
|
|
357
|
+
ReactiveFormsModule,
|
|
358
|
+
IftaLabelModule,
|
|
359
|
+
InputTextModule,
|
|
360
|
+
InputGroupModule,
|
|
361
|
+
InputGroupAddonModule,
|
|
362
|
+
ButtonModule,
|
|
363
|
+
TooltipModule,
|
|
364
|
+
TextTransformDirective,
|
|
365
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
366
|
+
<div [formGroup]="form()">
|
|
367
|
+
<p-inputgroup>
|
|
368
|
+
@if (buttonPosition() === 'left') {
|
|
369
|
+
<p-button
|
|
370
|
+
type="button"
|
|
371
|
+
[icon]="buttonConfig()?.icon || ''"
|
|
372
|
+
[label]="buttonConfig()?.label || ''"
|
|
373
|
+
[severity]="buttonConfig()?.severity || 'primary'"
|
|
374
|
+
[pTooltip]="buttonConfig()?.tooltip || ''"
|
|
375
|
+
tooltipPosition="top"
|
|
376
|
+
(click)="onButtonClick()"
|
|
377
|
+
[disabled]="isFieldDisabled()"
|
|
378
|
+
/>
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
<p-iftalabel>
|
|
382
|
+
<input
|
|
383
|
+
pInputText
|
|
384
|
+
[id]="field().key"
|
|
385
|
+
[formControlName]="field().key"
|
|
386
|
+
[placeholder]="field().placeholder || ''"
|
|
387
|
+
[vpTextTransform]="field().textTransform || null"
|
|
388
|
+
/>
|
|
389
|
+
<label [for]="field().key">{{ field().label }}</label>
|
|
390
|
+
</p-iftalabel>
|
|
391
|
+
|
|
392
|
+
@if (buttonPosition() === 'right') {
|
|
393
|
+
<p-button
|
|
394
|
+
type="button"
|
|
395
|
+
[icon]="buttonConfig()?.icon || ''"
|
|
396
|
+
[label]="buttonConfig()?.label || ''"
|
|
397
|
+
[severity]="buttonConfig()?.severity || 'primary'"
|
|
398
|
+
[pTooltip]="buttonConfig()?.tooltip || ''"
|
|
399
|
+
tooltipPosition="top"
|
|
400
|
+
(click)="onButtonClick()"
|
|
401
|
+
[disabled]="isFieldDisabled()"
|
|
402
|
+
/>
|
|
403
|
+
}
|
|
404
|
+
</p-inputgroup>
|
|
405
|
+
</div>
|
|
406
|
+
`, styles: [":host{display:block;width:100%}p-inputgroup{display:flex;width:100%}p-iftalabel{flex:1}\n"] }]
|
|
407
|
+
}], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: true }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }] } });
|
|
408
|
+
|
|
143
409
|
class NumberInputFieldComponent {
|
|
144
410
|
form = input.required(...(ngDevMode ? [{ debugName: "form" }] : []));
|
|
145
411
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
@@ -258,15 +524,16 @@ class TextareaFieldComponent {
|
|
|
258
524
|
[rows]="field().textareaRows ?? 1"
|
|
259
525
|
[cols]="field().textareaCols"
|
|
260
526
|
[autoResize]="field().textareaAutoResize ?? false"
|
|
527
|
+
[vpTextTransform]="field().textTransform || null"
|
|
261
528
|
></textarea>
|
|
262
529
|
<label [for]="field().key">{{ field().label }}</label>
|
|
263
530
|
</p-iftalabel>
|
|
264
531
|
</div>
|
|
265
|
-
`, isInline: true, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}textarea{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IftaLabelModule }, { kind: "component", type: i2.IftaLabel, selector: "p-iftalabel, p-iftaLabel, p-ifta-label" }, { kind: "ngmodule", type: TextareaModule }, { kind: "directive", type: i3$5.Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["pTextareaPT", "pTextareaUnstyled", "autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
532
|
+
`, isInline: true, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}textarea{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IftaLabelModule }, { kind: "component", type: i2.IftaLabel, selector: "p-iftalabel, p-iftaLabel, p-ifta-label" }, { kind: "ngmodule", type: TextareaModule }, { kind: "directive", type: i3$5.Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["pTextareaPT", "pTextareaUnstyled", "autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }, { kind: "directive", type: TextTransformDirective, selector: "[vpTextTransform]", inputs: ["vpTextTransform"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
266
533
|
}
|
|
267
534
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: TextareaFieldComponent, decorators: [{
|
|
268
535
|
type: Component,
|
|
269
|
-
args: [{ selector: 'vp-textarea-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, TextareaModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
536
|
+
args: [{ selector: 'vp-textarea-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, TextareaModule, TextTransformDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
270
537
|
<div [formGroup]="form()">
|
|
271
538
|
<p-iftalabel>
|
|
272
539
|
<textarea
|
|
@@ -277,6 +544,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImpor
|
|
|
277
544
|
[rows]="field().textareaRows ?? 1"
|
|
278
545
|
[cols]="field().textareaCols"
|
|
279
546
|
[autoResize]="field().textareaAutoResize ?? false"
|
|
547
|
+
[vpTextTransform]="field().textTransform || null"
|
|
280
548
|
></textarea>
|
|
281
549
|
<label [for]="field().key">{{ field().label }}</label>
|
|
282
550
|
</p-iftalabel>
|
|
@@ -381,6 +649,7 @@ class DynamicFormComponent {
|
|
|
381
649
|
datepicker: DatePickerFieldComponent,
|
|
382
650
|
textarea: TextareaFieldComponent,
|
|
383
651
|
toggleswitch: ToggleSwitchFieldComponent,
|
|
652
|
+
'input-button': InputButtonFieldComponent,
|
|
384
653
|
};
|
|
385
654
|
ngOnInit() {
|
|
386
655
|
const configValue = this.config();
|
|
@@ -460,6 +729,7 @@ class DynamicFormComponent {
|
|
|
460
729
|
case 'email':
|
|
461
730
|
case 'password':
|
|
462
731
|
case 'textarea':
|
|
732
|
+
case 'input-button':
|
|
463
733
|
return '';
|
|
464
734
|
case 'number':
|
|
465
735
|
return null;
|
|
@@ -492,11 +762,11 @@ class DynamicFormComponent {
|
|
|
492
762
|
return control;
|
|
493
763
|
}
|
|
494
764
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: DynamicFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
495
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.7", type: DynamicFormComponent, isStandalone: true, selector: "vp-dynamic-form", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { formReady: "formReady" }, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n
|
|
765
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.7", type: DynamicFormComponent, isStandalone: true, selector: "vp-dynamic-form", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { formReady: "formReady" }, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n @for (field of config(); track field.key) { @if (getFieldComponent(field.controlType); as\n fieldComponent) {\n <div [class]=\"'form-field-wrapper ' + (field.styleClass || '')\">\n <!-- Dynamically render the correct field component -->\n <ng-container\n [ngComponentOutlet]=\"fieldComponent\"\n [ngComponentOutletInputs]=\"{ form: form, field: field }\"\n />\n\n @if (field.hint) {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component -->\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n </div>\n } @else {\n <div class=\"form-field-wrapper\">\n <small class=\"p-error\">Tipo de campo '{{ field.controlType }}' n\u00E3o encontrado.</small>\n </div>\n } }\n</form>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.dynamic-form-container{display:flex;flex-direction:column;gap:1.75rem;padding:1rem;border:1px solid var(--p-surface-border);border-radius:var(--p-border-radius);background-color:var(--p-surface-section)}.form-field-wrapper{display:flex;flex-direction:column;position:relative}:is(p-inputNumber,p-password,p-select,p-iftalabel){width:100%}:host ::ng-deep .p-password,:host ::ng-deep .p-password input,:host ::ng-deep .p-inputnumber,:host ::ng-deep .p-inputnumber input,:host ::ng-deep .p-datepicker input,:host ::ng-deep .p-select{width:100%!important}input[pInputText]{width:100%}.hint-text{margin-top:.5rem;color:var(--p-text-muted-color)}.error-messages{margin-top:.5rem;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DynamicFormErrorComponent, selector: "vp-form-field-error", inputs: ["control"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
496
766
|
}
|
|
497
767
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: DynamicFormComponent, decorators: [{
|
|
498
768
|
type: Component,
|
|
499
|
-
args: [{ selector: 'vp-dynamic-form', standalone: true, imports: [CommonModule, ReactiveFormsModule, NgComponentOutlet, DynamicFormErrorComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n
|
|
769
|
+
args: [{ selector: 'vp-dynamic-form', standalone: true, imports: [CommonModule, ReactiveFormsModule, NgComponentOutlet, DynamicFormErrorComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n @for (field of config(); track field.key) { @if (getFieldComponent(field.controlType); as\n fieldComponent) {\n <div [class]=\"'form-field-wrapper ' + (field.styleClass || '')\">\n <!-- Dynamically render the correct field component -->\n <ng-container\n [ngComponentOutlet]=\"fieldComponent\"\n [ngComponentOutletInputs]=\"{ form: form, field: field }\"\n />\n\n @if (field.hint) {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component -->\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n </div>\n } @else {\n <div class=\"form-field-wrapper\">\n <small class=\"p-error\">Tipo de campo '{{ field.controlType }}' n\u00E3o encontrado.</small>\n </div>\n } }\n</form>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.dynamic-form-container{display:flex;flex-direction:column;gap:1.75rem;padding:1rem;border:1px solid var(--p-surface-border);border-radius:var(--p-border-radius);background-color:var(--p-surface-section)}.form-field-wrapper{display:flex;flex-direction:column;position:relative}:is(p-inputNumber,p-password,p-select,p-iftalabel){width:100%}:host ::ng-deep .p-password,:host ::ng-deep .p-password input,:host ::ng-deep .p-inputnumber,:host ::ng-deep .p-inputnumber input,:host ::ng-deep .p-datepicker input,:host ::ng-deep .p-select{width:100%!important}input[pInputText]{width:100%}.hint-text{margin-top:.5rem;color:var(--p-text-muted-color)}.error-messages{margin-top:.5rem;display:flex;flex-direction:column}\n"] }]
|
|
500
770
|
}], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], formReady: [{ type: i0.Output, args: ["formReady"] }] } });
|
|
501
771
|
|
|
502
772
|
const PRIMENG_PTBR = {
|
|
@@ -664,5 +934,5 @@ function provideDynamicFormConfig(messages) {
|
|
|
664
934
|
* Generated bundle index. Do not edit.
|
|
665
935
|
*/
|
|
666
936
|
|
|
667
|
-
export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
|
|
937
|
+
export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputButtonFieldComponent, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextTransformDirective, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
|
|
668
938
|
//# sourceMappingURL=vipsolucoes-dynamic-form.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vipsolucoes-dynamic-form.mjs","sources":["../../../projects/dynamic-form/src/lib/interfaces/error-messages.interface.ts","../../../projects/dynamic-form/src/lib/components/form-field-error/form-field-error.component.ts","../../../projects/dynamic-form/src/lib/fields/datepicker-field.component.ts","../../../projects/dynamic-form/src/lib/fields/input-text-field.component.ts","../../../projects/dynamic-form/src/lib/fields/number-input-field.component.ts","../../../projects/dynamic-form/src/lib/fields/password-field.component.ts","../../../projects/dynamic-form/src/lib/fields/select-field.component.ts","../../../projects/dynamic-form/src/lib/fields/textarea-field.component.ts","../../../projects/dynamic-form/src/lib/fields/toggleswitch-field.component.ts","../../../projects/dynamic-form/src/lib/services/field-registry.service.ts","../../../projects/dynamic-form/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/dynamic-form/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/dynamic-form/src/lib/i18n/primeng-ptbr.ts","../../../projects/dynamic-form/src/lib/providers/dynamic-form.providers.ts","../../../projects/dynamic-form/src/public-api.ts","../../../projects/dynamic-form/src/vipsolucoes-dynamic-form.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Interface para configuração de mensagens de erro customizadas.\n */\nexport interface DynamicFormErrorMessages {\n required?: string;\n email?: string;\n minlength?: (requiredLength: number) => string;\n maxlength?: (requiredLength: number) => string;\n custom?: (error: any) => string;\n}\n\n/**\n * InjectionToken para prover mensagens de erro customizadas.\n */\nexport const DYNAMIC_FORM_ERROR_MESSAGES = new InjectionToken<DynamicFormErrorMessages>('DYNAMIC_FORM_ERROR_MESSAGES');\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport { DYNAMIC_FORM_ERROR_MESSAGES, DynamicFormErrorMessages } from '../../interfaces/error-messages.interface';\n\n@Component({\n selector: 'vp-form-field-error',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (errorMessage) {\n <small class=\"p-error\">{{ errorMessage }}</small>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n margin-top: 0.5rem;\n min-height: 1rem;\n }\n .p-error {\n color: var(--p-red-500, #ef4444);\n font-size: 0.875rem;\n }\n `,\n ],\n})\nexport class DynamicFormErrorComponent {\n control = input.required<AbstractControl>();\n\n private readonly customMessages = inject(DYNAMIC_FORM_ERROR_MESSAGES, { optional: true });\n\n // Mapeamento de erros para mensagens\n private readonly defaultErrorMessages: { [key: string]: (err: any) => string } = {\n required: () => this.customMessages?.required ?? 'Este campo é obrigatório.',\n email: () => this.customMessages?.email ?? 'Por favor, insira um e-mail válido.',\n minlength: (err) => this.customMessages?.minlength?.(err.requiredLength) ?? `Mínimo de ${err.requiredLength} caracteres.`,\n maxlength: (err) => this.customMessages?.maxlength?.(err.requiredLength) ?? `Máximo de ${err.requiredLength} caracteres.`,\n custom: (err) => (this.customMessages?.custom ? this.customMessages.custom(err) : err),\n };\n\n // Getter simples - Angular detecta mudanças automaticamente\n get errorMessage(): string | null {\n const ctrl = this.control();\n if (!ctrl || !ctrl.errors || (!ctrl.touched && !ctrl.dirty)) {\n return null;\n }\n\n const errorKey = Object.keys(ctrl.errors)[0];\n return this.defaultErrorMessages[errorKey] ? this.defaultErrorMessages[errorKey](ctrl.errors[errorKey]) : 'Campo inválido.';\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { IftaLabelModule } from 'primeng/iftalabel';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-datepicker-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, DatePickerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-datepicker\n [inputId]=\"field().key\"\n [formControlName]=\"field().key\"\n [showButtonBar]=\"true\"\n [iconDisplay]=\"'input'\"\n [placeholder]=\"field().placeholder || ''\"\n [dateFormat]=\"dateFormat()\"\n [view]=\"field().dateViewType || 'date'\"\n />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n p-datepicker {\n width: 100%;\n }\n `,\n ],\n})\nexport class DatePickerFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n\n readonly dateFormat = computed(() => {\n const viewType = this.field().dateViewType || 'date';\n const customFormat = this.field().dateFormat;\n\n if (viewType === 'month') {\n return 'mm/yy';\n }\n if (viewType === 'year') {\n return 'yy';\n }\n\n return customFormat || 'dd/mm/yy';\n });\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { InputTextModule } from 'primeng/inputtext';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-input-text-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, InputTextModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <input pInputText [id]=\"field().key\" [type]=\"field().controlType\" [formControlName]=\"field().key\" [placeholder]=\"field().placeholder || ''\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n input {\n width: 100%;\n }\n `,\n ],\n})\nexport class InputTextFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { InputNumberModule } from 'primeng/inputnumber';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-number-input-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, InputNumberModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-inputNumber [id]=\"field().key\" [formControlName]=\"field().key\" [placeholder]=\"field().placeholder || ''\" styleClass=\"w-full\" class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n :host ::ng-deep p-inputNumber,\n :host ::ng-deep .p-inputnumber,\n :host ::ng-deep .p-inputnumber input {\n width: 100%;\n }\n `,\n ],\n})\nexport class NumberInputFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { PasswordModule } from 'primeng/password';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-password-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, PasswordModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-password\n [id]=\"field().key\"\n [formControlName]=\"field().key\"\n [feedback]=\"false\"\n [toggleMask]=\"true\"\n [placeholder]=\"field().placeholder || ''\"\n styleClass=\"w-full\"\n class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n :host ::ng-deep .p-password,\n :host ::ng-deep .p-password input {\n width: 100%;\n }\n `,\n ],\n})\nexport class PasswordFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { SelectModule } from 'primeng/select';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-select-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, SelectModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-select\n [inputId]=\"field().key\"\n [formControlName]=\"field().key\"\n [options]=\"field().options!\"\n [placeholder]=\"field().placeholder || 'Selecione'\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n p-select {\n width: 100%;\n }\n `,\n ],\n})\nexport class SelectFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { TextareaModule } from 'primeng/textarea';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-textarea-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, TextareaModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <textarea\n pTextarea\n [id]=\"field().key\"\n [formControlName]=\"field().key\"\n [placeholder]=\"field().placeholder || ''\"\n [rows]=\"field().textareaRows ?? 1\"\n [cols]=\"field().textareaCols\"\n [autoResize]=\"field().textareaAutoResize ?? false\"\n ></textarea>\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n textarea {\n width: 100%;\n }\n `,\n ],\n})\nexport class TextareaFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-toggleswitch-field',\n standalone: true,\n imports: [ReactiveFormsModule, ToggleSwitchModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\" class=\"toggleswitch-field\">\n <p-toggleswitch\n [formControlName]=\"field().key\"\n [inputId]=\"field().key\"\n [invalid]=\"isInvalid()\"\n [trueValue]=\"field().toggleTrueValue ?? true\"\n [falseValue]=\"field().toggleFalseValue ?? false\" />\n <label [for]=\"field().key\" class=\"toggleswitch-label\">{{ field().label }}</label>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n .toggleswitch-field {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n width: 100%;\n }\n .toggleswitch-label {\n cursor: pointer;\n user-select: none;\n font-size: 0.875rem;\n color: var(--p-text-color, #333);\n margin: 0;\n }\n p-toggleswitch {\n flex-shrink: 0;\n }\n `,\n ],\n})\nexport class ToggleSwitchFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n\n isInvalid = computed(() => {\n const control = this.form().get(this.field().key);\n return control ? control.invalid && (control.touched || control.dirty) : false;\n });\n}\n","import { Injectable, signal, Type } from '@angular/core';\n\n/**\n * Serviço para registro de campos customizados.\n * Permite adicionar novos tipos de campos dinamicamente.\n */\n@Injectable({ providedIn: 'root' })\nexport class FieldRegistryService {\n private readonly registry = signal<Map<string, Type<any>>>(new Map());\n\n /**\n * Registra um novo tipo de campo.\n * @param type Tipo do campo (ex: 'custom', 'file', etc.)\n * @param component Componente Angular que renderiza o campo\n */\n registerField(type: string, component: Type<any>): void {\n this.registry.update((map) => new Map(map).set(type, component));\n }\n\n /**\n * Obtém o componente registrado para um tipo de campo.\n * @param type Tipo do campo\n * @returns Componente Angular ou undefined se não encontrado\n */\n getField(type: string): Type<any> | undefined {\n return this.registry().get(type);\n }\n\n /**\n * Remove um tipo de campo do registro.\n * @param type Tipo do campo a ser removido\n */\n unregisterField(type: string): void {\n this.registry.update((map) => {\n const newMap = new Map(map);\n newMap.delete(type);\n return newMap;\n });\n }\n\n /**\n * Limpa todos os campos registrados.\n */\n clear(): void {\n this.registry.set(new Map());\n }\n}\n","import { CommonModule, NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, output, Type } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { DynamicFormErrorComponent } from '../form-field-error/form-field-error.component';\nimport { DatePickerFieldComponent } from '../../fields/datepicker-field.component';\nimport { InputTextFieldComponent } from '../../fields/input-text-field.component';\nimport { NumberInputFieldComponent } from '../../fields/number-input-field.component';\nimport { PasswordFieldComponent } from '../../fields/password-field.component';\nimport { SelectFieldComponent } from '../../fields/select-field.component';\nimport { TextareaFieldComponent } from '../../fields/textarea-field.component';\nimport { ToggleSwitchFieldComponent } from '../../fields/toggleswitch-field.component';\nimport { iFormConfig } from '../../interfaces/form-config.interface';\nimport { FieldRegistryService } from '../../services/field-registry.service';\n\n@Component({\n selector: 'vp-dynamic-form',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgComponentOutlet, DynamicFormErrorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.scss',\n})\nexport class DynamicFormComponent implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly fieldRegistry = inject(FieldRegistryService);\n\n config = input.required<iFormConfig[]>();\n formReady = output<FormGroup>();\n\n form = new FormGroup({});\n\n readonly fieldComponents: { [key: string]: Type<any> } = {\n text: InputTextFieldComponent,\n email: InputTextFieldComponent,\n password: PasswordFieldComponent,\n number: NumberInputFieldComponent,\n select: SelectFieldComponent,\n datepicker: DatePickerFieldComponent,\n textarea: TextareaFieldComponent,\n toggleswitch: ToggleSwitchFieldComponent,\n };\n\n ngOnInit(): void {\n const configValue = this.config();\n if (configValue && configValue.length > 0) {\n this.buildForm(configValue);\n this.setupFieldDependencies(configValue);\n this.formReady.emit(this.form);\n }\n }\n\n private buildForm(config: iFormConfig[]): void {\n config.forEach((field) => {\n // Para toggle switch, o valor padrão é false se não especificado\n const defaultValue = field.controlType === 'toggleswitch' ? (field.value ?? false) : (field.value ?? '');\n\n // Se o campo tem enabledWhen, ele deve começar desabilitado a menos que o toggle já esteja ativo\n const shouldBeDisabled = field.disabled ?? (field.enabledWhen ? !this.getToggleValue(field.enabledWhen, config) : false);\n\n const control = shouldBeDisabled\n ? new FormControl(\n { value: defaultValue, disabled: true },\n {\n validators: field.validators ?? [],\n }\n )\n : new FormControl(defaultValue, {\n validators: field.validators ?? [],\n });\n this.form.addControl(field.key, control);\n });\n }\n\n private setupFieldDependencies(config: iFormConfig[]): void {\n config.forEach((field) => {\n if (!field.enabledWhen) {\n return;\n }\n\n const toggleField = config.find((f) => f.key === field.enabledWhen);\n\n if (!toggleField) {\n console.warn(\n `DynamicFormComponent: Campo '${field.key}' referencia '${field.enabledWhen}' em enabledWhen, mas este campo não existe no formulário.`\n );\n return;\n }\n\n if (toggleField.controlType !== 'toggleswitch') {\n console.warn(\n `DynamicFormComponent: Campo '${field.key}' referencia '${field.enabledWhen}' em enabledWhen, mas este campo não é do tipo 'toggleswitch'.`\n );\n return;\n }\n\n const toggleControl = this.form.get(field.enabledWhen);\n const dependentControl = this.form.get(field.key);\n\n if (!toggleControl || !dependentControl) {\n console.warn(\n `DynamicFormComponent: Não foi possível encontrar os controles para configurar a dependência entre '${field.enabledWhen}' e '${field.key}'.`\n );\n return;\n }\n\n // Configura a subscription para reagir às mudanças do toggle\n toggleControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((toggleValue) => {\n const isToggleActive = toggleValue === (toggleField.toggleTrueValue ?? true);\n\n if (isToggleActive) {\n dependentControl.enable();\n } else {\n // Limpa o valor do campo antes de desabilitá-lo\n const resetValue = this.getResetValueForFieldType(field.controlType);\n dependentControl.setValue(resetValue, { emitEvent: false });\n dependentControl.disable();\n }\n });\n });\n }\n\n private getToggleValue(toggleKey: string, config: iFormConfig[]): boolean {\n const toggleField = config.find((f) => f.key === toggleKey);\n if (!toggleField || toggleField.controlType !== 'toggleswitch') {\n return false;\n }\n\n const toggleTrueValue = toggleField.toggleTrueValue ?? true;\n const toggleValue = toggleField.value ?? false;\n\n return toggleValue === toggleTrueValue;\n }\n\n /**\n * Retorna o valor padrão de reset para cada tipo de campo.\n * Usado quando um campo dependente é desabilitado e precisa ser limpo.\n */\n private getResetValueForFieldType(controlType: string): any {\n switch (controlType) {\n case 'text':\n case 'email':\n case 'password':\n case 'textarea':\n return '';\n case 'number':\n return null;\n case 'select':\n return null;\n case 'datepicker':\n return null;\n default:\n return '';\n }\n }\n\n /**\n * Obtém o componente a ser renderizado para um tipo de campo.\n * Primeiro verifica no registro customizado, depois nos componentes padrão.\n */\n getFieldComponent(controlType: string): Type<any> | null {\n // Verifica primeiro no registro customizado\n const customComponent = this.fieldRegistry.getField(controlType);\n if (customComponent) {\n return customComponent;\n }\n\n // Fallback para componentes padrão\n return this.fieldComponents[controlType] || null;\n }\n\n getControl(key: string): AbstractControl {\n const control = this.form.get(key);\n if (!control) {\n console.warn(`DynamicFormComponent: Controle não encontrado para a chave: ${key}`);\n }\n return control!;\n }\n}\n","<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n @for (field of config(); track field.key) {\n @if (getFieldComponent(field.controlType); as fieldComponent) {\n <div [class]=\"'form-field-wrapper ' + (field.styleClass || '')\">\n <!-- Dynamically render the correct field component -->\n <ng-container [ngComponentOutlet]=\"fieldComponent\" [ngComponentOutletInputs]=\"{ form: form, field: field }\" />\n\n @if (field.hint) {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component -->\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n </div>\n } @else {\n <div class=\"form-field-wrapper\">\n <small class=\"p-error\">Tipo de campo '{{ field.controlType }}' não encontrado.</small>\n </div>\n }\n }\n</form>\n","import { Translation } from 'primeng/api';\n\nexport const PRIMENG_PTBR: Translation = {\n // Filtros\n startsWith: 'Começa com',\n contains: 'Contém',\n notContains: 'Não contém',\n endsWith: 'Termina com',\n equals: 'Igual',\n notEquals: 'Diferente',\n noFilter: 'Sem filtro',\n lt: 'Menor que',\n lte: 'Menor ou igual a',\n gt: 'Maior que',\n gte: 'Maior ou igual a',\n is: 'É',\n isNot: 'Não é',\n before: 'Antes',\n after: 'Depois',\n dateIs: 'Data é',\n dateIsNot: 'Data não é',\n dateBefore: 'Data antes',\n dateAfter: 'Data depois',\n\n // Regras\n clear: 'Limpar',\n apply: 'Aplicar',\n matchAll: 'Corresponder a todos',\n matchAny: 'Corresponder a qualquer',\n addRule: 'Adicionar regra',\n removeRule: 'Remover regra',\n\n // Ações\n accept: 'Sim',\n reject: 'Não',\n choose: 'Escolher',\n upload: 'Enviar',\n cancel: 'Cancelar',\n completed: 'Concluído',\n pending: 'Pendente',\n\n // Arquivos\n fileSizeTypes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n emptyMessage: 'Nenhum registro encontrado',\n emptyFilterMessage: 'Nenhum resultado encontrado',\n fileChosenMessage: '{0} arquivo(s) selecionado(s)',\n noFileChosenMessage: 'Nenhum arquivo selecionado',\n\n // Datas\n dayNames: ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'],\n dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],\n dayNamesMin: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'],\n monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],\n monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],\n dateFormat: 'dd/mm/yy',\n firstDayOfWeek: 0,\n today: 'Hoje',\n weekHeader: 'Sem',\n\n // Password\n weak: 'Fraca',\n medium: 'Média',\n strong: 'Forte',\n passwordPrompt: 'Digite uma senha',\n\n // Date navigation\n chooseYear: 'Escolher ano',\n chooseMonth: 'Escolher mês',\n chooseDate: 'Escolher data',\n prevDecade: 'Década anterior',\n nextDecade: 'Próxima década',\n prevYear: 'Ano anterior',\n nextYear: 'Próximo ano',\n prevMonth: 'Mês anterior',\n nextMonth: 'Próximo mês',\n prevHour: 'Hora anterior',\n nextHour: 'Próxima hora',\n prevMinute: 'Minuto anterior',\n nextMinute: 'Próximo minuto',\n prevSecond: 'Segundo anterior',\n nextSecond: 'Próximo segundo',\n am: 'AM',\n pm: 'PM',\n\n // Busca / seleção\n searchMessage: 'Digite para pesquisar',\n selectionMessage: '{0} item(ns) selecionado(s)',\n emptySelectionMessage: 'Nenhum item selecionado',\n emptySearchMessage: 'Nenhum resultado encontrado',\n\n // ARIA (acessibilidade)\n aria: {\n trueLabel: 'Verdadeiro',\n falseLabel: 'Falso',\n nullLabel: 'Não selecionado',\n star: '1 estrela',\n stars: '{star} estrelas',\n selectAll: 'Selecionar todos',\n unselectAll: 'Desmarcar todos',\n close: 'Fechar',\n previous: 'Anterior',\n next: 'Próximo',\n navigation: 'Navegação',\n scrollTop: 'Rolar para o topo',\n moveTop: 'Mover para o topo',\n moveUp: 'Mover para cima',\n moveDown: 'Mover para baixo',\n moveBottom: 'Mover para o final',\n moveToTarget: 'Mover para o destino',\n moveToSource: 'Mover para a origem',\n moveAllToTarget: 'Mover todos para o destino',\n moveAllToSource: 'Mover todos para a origem',\n pageLabel: 'Página {page}',\n firstPageLabel: 'Primeira página',\n lastPageLabel: 'Última página',\n nextPageLabel: 'Próxima página',\n prevPageLabel: 'Página anterior',\n rowsPerPageLabel: 'Itens por página',\n previousPageLabel: 'Página anterior',\n jumpToPageDropdownLabel: 'Pular para página',\n jumpToPageInputLabel: 'Ir para página',\n selectRow: 'Selecionar linha',\n unselectRow: 'Desmarcar linha',\n expandRow: 'Expandir linha',\n collapseRow: 'Recolher linha',\n showFilterMenu: 'Mostrar menu de filtro',\n hideFilterMenu: 'Ocultar menu de filtro',\n filterOperator: 'Operador de filtro',\n filterConstraint: 'Restrição de filtro',\n editRow: 'Editar linha',\n saveEdit: 'Salvar edição',\n cancelEdit: 'Cancelar edição',\n listView: 'Visualização em lista',\n gridView: 'Visualização em grade',\n slide: 'Slide',\n slideNumber: 'Slide {slideNumber}',\n zoomImage: 'Ampliar imagem',\n zoomIn: 'Aumentar zoom',\n zoomOut: 'Reduzir zoom',\n rotateRight: 'Girar à direita',\n rotateLeft: 'Girar à esquerda',\n listLabel: 'Lista',\n selectColor: 'Selecionar cor',\n removeLabel: 'Remover',\n browseFiles: 'Procurar arquivos',\n maximizeLabel: 'Maximizar',\n minimizeLabel: 'Minimizar',\n },\n};\n","import { Provider } from '@angular/core';\n\nimport { DYNAMIC_FORM_ERROR_MESSAGES, DynamicFormErrorMessages } from '../interfaces/error-messages.interface';\n\n/**\n * Provider para configurar mensagens de erro customizadas.\n * @param messages Mensagens de erro customizadas\n * @returns Provider configurado\n */\nexport function provideDynamicFormConfig(messages?: DynamicFormErrorMessages): Provider[] {\n const providers: Provider[] = [];\n\n if (messages) {\n providers.push({\n provide: DYNAMIC_FORM_ERROR_MESSAGES,\n useValue: messages,\n });\n }\n\n return providers;\n}\n","import { PRIMENG_PTBR } from './lib/i18n/primeng-ptbr';\n/*\n * Public API Surface of @vipsolucoes/dynamic-form\n */\n\n// Componentes\nexport { DynamicFormComponent } from './lib/components/dynamic-form/dynamic-form.component';\nexport { DynamicFormErrorComponent } from './lib/components/form-field-error/form-field-error.component';\n\n// Fields (para uso standalone)\nexport { InputTextFieldComponent } from './lib/fields/input-text-field.component';\nexport { SelectFieldComponent } from './lib/fields/select-field.component';\nexport { DatePickerFieldComponent } from './lib/fields/datepicker-field.component';\nexport { NumberInputFieldComponent } from './lib/fields/number-input-field.component';\nexport { PasswordFieldComponent } from './lib/fields/password-field.component';\nexport { TextareaFieldComponent } from './lib/fields/textarea-field.component';\nexport { ToggleSwitchFieldComponent } from './lib/fields/toggleswitch-field.component';\n\n// Interfaces\nexport type { iFormConfig, iFieldOption } from './lib/interfaces/form-config.interface';\nexport type { DynamicFormErrorMessages } from './lib/interfaces/error-messages.interface';\nexport { DYNAMIC_FORM_ERROR_MESSAGES } from './lib/interfaces/error-messages.interface';\n\n// Services\nexport { FieldRegistryService } from './lib/services/field-registry.service';\n\n// Utility functions\nexport { PRIMENG_PTBR } from './lib/i18n/primeng-ptbr';\nexport { provideDynamicFormConfig } from './lib/providers/dynamic-form.providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i2","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vipsolucoes-dynamic-form.mjs","sources":["../../../projects/dynamic-form/src/lib/interfaces/error-messages.interface.ts","../../../projects/dynamic-form/src/lib/components/form-field-error/form-field-error.component.ts","../../../projects/dynamic-form/src/lib/fields/datepicker-field.component.ts","../../../projects/dynamic-form/src/lib/directives/text-transform.directive.ts","../../../projects/dynamic-form/src/lib/fields/input-text-field.component.ts","../../../projects/dynamic-form/src/lib/fields/input-button-field.component.ts","../../../projects/dynamic-form/src/lib/fields/number-input-field.component.ts","../../../projects/dynamic-form/src/lib/fields/password-field.component.ts","../../../projects/dynamic-form/src/lib/fields/select-field.component.ts","../../../projects/dynamic-form/src/lib/fields/textarea-field.component.ts","../../../projects/dynamic-form/src/lib/fields/toggleswitch-field.component.ts","../../../projects/dynamic-form/src/lib/services/field-registry.service.ts","../../../projects/dynamic-form/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/dynamic-form/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/dynamic-form/src/lib/i18n/primeng-ptbr.ts","../../../projects/dynamic-form/src/lib/providers/dynamic-form.providers.ts","../../../projects/dynamic-form/src/public-api.ts","../../../projects/dynamic-form/src/vipsolucoes-dynamic-form.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Interface para configuração de mensagens de erro customizadas.\n */\nexport interface DynamicFormErrorMessages {\n required?: string;\n email?: string;\n minlength?: (requiredLength: number) => string;\n maxlength?: (requiredLength: number) => string;\n custom?: (error: any) => string;\n}\n\n/**\n * InjectionToken para prover mensagens de erro customizadas.\n */\nexport const DYNAMIC_FORM_ERROR_MESSAGES = new InjectionToken<DynamicFormErrorMessages>(\n 'DYNAMIC_FORM_ERROR_MESSAGES'\n);\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport { DYNAMIC_FORM_ERROR_MESSAGES, DynamicFormErrorMessages } from '../../interfaces/error-messages.interface';\n\n@Component({\n selector: 'vp-form-field-error',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (errorMessage) {\n <small class=\"p-error\">{{ errorMessage }}</small>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n margin-top: 0.5rem;\n min-height: 1rem;\n }\n .p-error {\n color: var(--p-red-500, #ef4444);\n font-size: 0.875rem;\n }\n `,\n ],\n})\nexport class DynamicFormErrorComponent {\n control = input.required<AbstractControl>();\n\n private readonly customMessages = inject(DYNAMIC_FORM_ERROR_MESSAGES, { optional: true });\n\n // Mapeamento de erros para mensagens\n private readonly defaultErrorMessages: { [key: string]: (err: any) => string } = {\n required: () => this.customMessages?.required ?? 'Este campo é obrigatório.',\n email: () => this.customMessages?.email ?? 'Por favor, insira um e-mail válido.',\n minlength: (err) => this.customMessages?.minlength?.(err.requiredLength) ?? `Mínimo de ${err.requiredLength} caracteres.`,\n maxlength: (err) => this.customMessages?.maxlength?.(err.requiredLength) ?? `Máximo de ${err.requiredLength} caracteres.`,\n custom: (err) => (this.customMessages?.custom ? this.customMessages.custom(err) : err),\n };\n\n // Getter simples - Angular detecta mudanças automaticamente\n get errorMessage(): string | null {\n const ctrl = this.control();\n if (!ctrl || !ctrl.errors || (!ctrl.touched && !ctrl.dirty)) {\n return null;\n }\n\n const errorKey = Object.keys(ctrl.errors)[0];\n return this.defaultErrorMessages[errorKey] ? this.defaultErrorMessages[errorKey](ctrl.errors[errorKey]) : 'Campo inválido.';\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { IftaLabelModule } from 'primeng/iftalabel';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-datepicker-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, DatePickerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-datepicker\n [inputId]=\"field().key\"\n [formControlName]=\"field().key\"\n [showButtonBar]=\"true\"\n [iconDisplay]=\"'input'\"\n [placeholder]=\"field().placeholder || ''\"\n [dateFormat]=\"dateFormat()\"\n [view]=\"field().dateViewType || 'date'\"\n />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n p-datepicker {\n width: 100%;\n }\n `,\n ],\n})\nexport class DatePickerFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n\n readonly dateFormat = computed(() => {\n const viewType = this.field().dateViewType || 'date';\n const customFormat = this.field().dateFormat;\n\n if (viewType === 'month') {\n return 'mm/yy';\n }\n if (viewType === 'year') {\n return 'yy';\n }\n\n return customFormat || 'dd/mm/yy';\n });\n}\n","import { Directive, ElementRef, HostListener, inject, Input, OnInit } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n/**\n * Diretiva para transformar texto em uppercase ou lowercase em tempo real.\n * Funciona com Reactive Forms (NgControl) e elementos HTML nativos.\n *\n * @example\n * ```html\n * <!-- Uppercase -->\n * <input [vpTextTransform]=\"'uppercase'\" />\n *\n * <!-- Lowercase -->\n * <input [vpTextTransform]=\"'lowercase'\" />\n *\n * <!-- Desabilitado -->\n * <input [vpTextTransform]=\"null\" />\n * ```\n */\n@Directive({\n selector: '[vpTextTransform]',\n standalone: true,\n})\nexport class TextTransformDirective implements OnInit {\n private readonly elementRef = inject(ElementRef<HTMLInputElement | HTMLTextAreaElement>);\n\n /**\n * NgControl opcional - presente quando usado com reactive forms ou ngModel.\n * Usamos `optional: true` e `self: true` para injetar apenas se estiver no mesmo elemento.\n */\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n /**\n * Tipo de transformação a ser aplicada: 'uppercase' | 'lowercase' | null\n * Quando null ou undefined, a transformação é desabilitada.\n */\n @Input() vpTextTransform: 'uppercase' | 'lowercase' | null = null;\n\n ngOnInit(): void {\n // Aplicar transformação no valor inicial se existir\n const element = this.elementRef.nativeElement;\n const transform = this.vpTextTransform;\n\n if (transform && element.value && typeof element.value === 'string') {\n const transformedValue = this.transformValue(element.value, transform);\n if (transformedValue !== element.value) {\n element.value = transformedValue;\n\n // Atualizar o FormControl se existir\n if (this.ngControl?.control) {\n this.ngControl.control.setValue(transformedValue, { emitEvent: false });\n }\n }\n }\n }\n\n @HostListener('input', ['$event'])\n onInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement | HTMLTextAreaElement;\n const transform = this.vpTextTransform;\n\n // Verifica se a transformação está habilitada\n if (!transform || !inputElement.value) {\n return;\n }\n\n const currentValue = inputElement.value;\n if (typeof currentValue !== 'string') {\n return;\n }\n\n // Preserva a posição do cursor\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n\n // Aplica a transformação\n const transformedValue = this.transformValue(currentValue, transform);\n\n // Se o valor já está transformado, não faz nada\n if (currentValue === transformedValue) {\n return;\n }\n\n // Atualiza o valor do elemento\n inputElement.value = transformedValue;\n\n // Restaura a posição do cursor (apenas para inputs de texto)\n if (this.isTextInput(inputElement)) {\n const newStart = Math.min(start ?? 0, transformedValue.length);\n const newEnd = Math.min(end ?? 0, transformedValue.length);\n inputElement.setSelectionRange(newStart, newEnd);\n }\n\n // Se NgControl estiver presente (reactive forms ou ngModel), atualiza através dele\n if (this.ngControl?.control) {\n this.ngControl.control.setValue(transformedValue, { emitEvent: false });\n // Emite o evento manualmente para garantir que os listeners sejam notificados\n this.ngControl.control.updateValueAndValidity({ emitEvent: true });\n } else {\n // Para elementos sem NgControl, dispara evento input manualmente\n // Isso garante compatibilidade com listeners diretos no elemento\n const inputEvent = new Event('input', {\n bubbles: true,\n cancelable: true,\n });\n inputElement.dispatchEvent(inputEvent);\n }\n }\n\n /**\n * Aplica a transformação de texto baseada no tipo especificado.\n */\n private transformValue(value: string, transform: 'uppercase' | 'lowercase'): string {\n return transform === 'uppercase' ? value.toUpperCase() : value.toLowerCase();\n }\n\n /**\n * Verifica se o elemento é um input de texto que suporta seleção de cursor.\n */\n private isTextInput(element: HTMLInputElement | HTMLTextAreaElement): boolean {\n if (element.tagName === 'TEXTAREA') {\n return true;\n }\n\n const inputElement = element as HTMLInputElement;\n return (\n inputElement.type === 'text' ||\n inputElement.type === 'search' ||\n inputElement.type === 'email' ||\n inputElement.type === 'url' ||\n inputElement.type === 'tel' ||\n !inputElement.type // type padrão é 'text'\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { InputTextModule } from 'primeng/inputtext';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\nimport { TextTransformDirective } from '../directives/text-transform.directive';\n\n@Component({\n selector: 'vp-input-text-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, InputTextModule, TextTransformDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <input\n pInputText\n [id]=\"field().key\"\n [type]=\"field().controlType\"\n [formControlName]=\"field().key\"\n [placeholder]=\"field().placeholder || ''\"\n [vpTextTransform]=\"field().textTransform || null\"\n />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n input {\n width: 100%;\n }\n `,\n ],\n})\nexport class InputTextFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\nimport { TextTransformDirective } from '../directives/text-transform.directive';\n\n@Component({\n selector: 'vp-input-button-field',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n IftaLabelModule,\n InputTextModule,\n InputGroupModule,\n InputGroupAddonModule,\n ButtonModule,\n TooltipModule,\n TextTransformDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-inputgroup>\n @if (buttonPosition() === 'left') {\n <p-button\n type=\"button\"\n [icon]=\"buttonConfig()?.icon || ''\"\n [label]=\"buttonConfig()?.label || ''\"\n [severity]=\"buttonConfig()?.severity || 'primary'\"\n [pTooltip]=\"buttonConfig()?.tooltip || ''\"\n tooltipPosition=\"top\"\n (click)=\"onButtonClick()\"\n [disabled]=\"isFieldDisabled()\"\n />\n }\n\n <p-iftalabel>\n <input\n pInputText\n [id]=\"field().key\"\n [formControlName]=\"field().key\"\n [placeholder]=\"field().placeholder || ''\"\n [vpTextTransform]=\"field().textTransform || null\"\n />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n\n @if (buttonPosition() === 'right') {\n <p-button\n type=\"button\"\n [icon]=\"buttonConfig()?.icon || ''\"\n [label]=\"buttonConfig()?.label || ''\"\n [severity]=\"buttonConfig()?.severity || 'primary'\"\n [pTooltip]=\"buttonConfig()?.tooltip || ''\"\n tooltipPosition=\"top\"\n (click)=\"onButtonClick()\"\n [disabled]=\"isFieldDisabled()\"\n />\n }\n </p-inputgroup>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-inputgroup {\n display: flex;\n width: 100%;\n }\n p-iftalabel {\n flex: 1;\n }\n `,\n ],\n})\nexport class InputButtonFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n\n buttonConfig() {\n return this.field().buttonConfig;\n }\n\n buttonPosition(): 'left' | 'right' {\n return this.buttonConfig()?.position || 'right';\n }\n\n isFieldDisabled(): boolean {\n const control = this.form().get(this.field().key);\n return control?.disabled ?? false;\n }\n\n onButtonClick(): void {\n const control = this.form().get(this.field().key);\n const value = control?.value;\n const callback = this.field().buttonCallback;\n\n if (callback) {\n callback(this.field().key, value);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { InputNumberModule } from 'primeng/inputnumber';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-number-input-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, InputNumberModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-inputNumber [id]=\"field().key\" [formControlName]=\"field().key\" [placeholder]=\"field().placeholder || ''\" styleClass=\"w-full\" class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n :host ::ng-deep p-inputNumber,\n :host ::ng-deep .p-inputnumber,\n :host ::ng-deep .p-inputnumber input {\n width: 100%;\n }\n `,\n ],\n})\nexport class NumberInputFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { PasswordModule } from 'primeng/password';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-password-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, PasswordModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-password\n [id]=\"field().key\"\n [formControlName]=\"field().key\"\n [feedback]=\"false\"\n [toggleMask]=\"true\"\n [placeholder]=\"field().placeholder || ''\"\n styleClass=\"w-full\"\n class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n :host ::ng-deep .p-password,\n :host ::ng-deep .p-password input {\n width: 100%;\n }\n `,\n ],\n})\nexport class PasswordFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { SelectModule } from 'primeng/select';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-select-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, SelectModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-select\n [inputId]=\"field().key\"\n [formControlName]=\"field().key\"\n [options]=\"field().options!\"\n [placeholder]=\"field().placeholder || 'Selecione'\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n p-select {\n width: 100%;\n }\n `,\n ],\n})\nexport class SelectFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { TextareaModule } from 'primeng/textarea';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\nimport { TextTransformDirective } from '../directives/text-transform.directive';\n\n@Component({\n selector: 'vp-textarea-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, TextareaModule, TextTransformDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <textarea\n pTextarea\n [id]=\"field().key\"\n [formControlName]=\"field().key\"\n [placeholder]=\"field().placeholder || ''\"\n [rows]=\"field().textareaRows ?? 1\"\n [cols]=\"field().textareaCols\"\n [autoResize]=\"field().textareaAutoResize ?? false\"\n [vpTextTransform]=\"field().textTransform || null\"\n ></textarea>\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n textarea {\n width: 100%;\n }\n `,\n ],\n})\nexport class TextareaFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-toggleswitch-field',\n standalone: true,\n imports: [ReactiveFormsModule, ToggleSwitchModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\" class=\"toggleswitch-field\">\n <p-toggleswitch\n [formControlName]=\"field().key\"\n [inputId]=\"field().key\"\n [invalid]=\"isInvalid()\"\n [trueValue]=\"field().toggleTrueValue ?? true\"\n [falseValue]=\"field().toggleFalseValue ?? false\" />\n <label [for]=\"field().key\" class=\"toggleswitch-label\">{{ field().label }}</label>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n .toggleswitch-field {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n width: 100%;\n }\n .toggleswitch-label {\n cursor: pointer;\n user-select: none;\n font-size: 0.875rem;\n color: var(--p-text-color, #333);\n margin: 0;\n }\n p-toggleswitch {\n flex-shrink: 0;\n }\n `,\n ],\n})\nexport class ToggleSwitchFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n\n isInvalid = computed(() => {\n const control = this.form().get(this.field().key);\n return control ? control.invalid && (control.touched || control.dirty) : false;\n });\n}\n","import { Injectable, signal, Type } from '@angular/core';\n\n/**\n * Serviço para registro de campos customizados.\n * Permite adicionar novos tipos de campos dinamicamente.\n */\n@Injectable({ providedIn: 'root' })\nexport class FieldRegistryService {\n private readonly registry = signal<Map<string, Type<any>>>(new Map());\n\n /**\n * Registra um novo tipo de campo.\n * @param type Tipo do campo (ex: 'custom', 'file', etc.)\n * @param component Componente Angular que renderiza o campo\n */\n registerField(type: string, component: Type<any>): void {\n this.registry.update((map) => new Map(map).set(type, component));\n }\n\n /**\n * Obtém o componente registrado para um tipo de campo.\n * @param type Tipo do campo\n * @returns Componente Angular ou undefined se não encontrado\n */\n getField(type: string): Type<any> | undefined {\n return this.registry().get(type);\n }\n\n /**\n * Remove um tipo de campo do registro.\n * @param type Tipo do campo a ser removido\n */\n unregisterField(type: string): void {\n this.registry.update((map) => {\n const newMap = new Map(map);\n newMap.delete(type);\n return newMap;\n });\n }\n\n /**\n * Limpa todos os campos registrados.\n */\n clear(): void {\n this.registry.set(new Map());\n }\n}\n","import { CommonModule, NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, output, Type } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { DynamicFormErrorComponent } from '../form-field-error/form-field-error.component';\nimport { DatePickerFieldComponent } from '../../fields/datepicker-field.component';\nimport { InputTextFieldComponent } from '../../fields/input-text-field.component';\nimport { InputButtonFieldComponent } from '../../fields/input-button-field.component';\nimport { NumberInputFieldComponent } from '../../fields/number-input-field.component';\nimport { PasswordFieldComponent } from '../../fields/password-field.component';\nimport { SelectFieldComponent } from '../../fields/select-field.component';\nimport { TextareaFieldComponent } from '../../fields/textarea-field.component';\nimport { ToggleSwitchFieldComponent } from '../../fields/toggleswitch-field.component';\nimport { iFormConfig } from '../../interfaces/form-config.interface';\nimport { FieldRegistryService } from '../../services/field-registry.service';\n\n@Component({\n selector: 'vp-dynamic-form',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgComponentOutlet, DynamicFormErrorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.scss',\n})\nexport class DynamicFormComponent implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly fieldRegistry = inject(FieldRegistryService);\n\n config = input.required<iFormConfig[]>();\n formReady = output<FormGroup>();\n\n form = new FormGroup({});\n\n readonly fieldComponents: { [key: string]: Type<any> } = {\n text: InputTextFieldComponent,\n email: InputTextFieldComponent,\n password: PasswordFieldComponent,\n number: NumberInputFieldComponent,\n select: SelectFieldComponent,\n datepicker: DatePickerFieldComponent,\n textarea: TextareaFieldComponent,\n toggleswitch: ToggleSwitchFieldComponent,\n 'input-button': InputButtonFieldComponent,\n };\n\n ngOnInit(): void {\n const configValue = this.config();\n if (configValue && configValue.length > 0) {\n this.buildForm(configValue);\n this.setupFieldDependencies(configValue);\n this.formReady.emit(this.form);\n }\n }\n\n private buildForm(config: iFormConfig[]): void {\n config.forEach((field) => {\n // Para toggle switch, o valor padrão é false se não especificado\n const defaultValue = field.controlType === 'toggleswitch' ? (field.value ?? false) : (field.value ?? '');\n\n // Se o campo tem enabledWhen, ele deve começar desabilitado a menos que o toggle já esteja ativo\n const shouldBeDisabled = field.disabled ?? (field.enabledWhen ? !this.getToggleValue(field.enabledWhen, config) : false);\n\n const control = shouldBeDisabled\n ? new FormControl(\n { value: defaultValue, disabled: true },\n {\n validators: field.validators ?? [],\n }\n )\n : new FormControl(defaultValue, {\n validators: field.validators ?? [],\n });\n this.form.addControl(field.key, control);\n });\n }\n\n private setupFieldDependencies(config: iFormConfig[]): void {\n config.forEach((field) => {\n if (!field.enabledWhen) {\n return;\n }\n\n const toggleField = config.find((f) => f.key === field.enabledWhen);\n\n if (!toggleField) {\n console.warn(\n `DynamicFormComponent: Campo '${field.key}' referencia '${field.enabledWhen}' em enabledWhen, mas este campo não existe no formulário.`\n );\n return;\n }\n\n if (toggleField.controlType !== 'toggleswitch') {\n console.warn(\n `DynamicFormComponent: Campo '${field.key}' referencia '${field.enabledWhen}' em enabledWhen, mas este campo não é do tipo 'toggleswitch'.`\n );\n return;\n }\n\n const toggleControl = this.form.get(field.enabledWhen);\n const dependentControl = this.form.get(field.key);\n\n if (!toggleControl || !dependentControl) {\n console.warn(\n `DynamicFormComponent: Não foi possível encontrar os controles para configurar a dependência entre '${field.enabledWhen}' e '${field.key}'.`\n );\n return;\n }\n\n // Configura a subscription para reagir às mudanças do toggle\n toggleControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((toggleValue) => {\n const isToggleActive = toggleValue === (toggleField.toggleTrueValue ?? true);\n\n if (isToggleActive) {\n dependentControl.enable();\n } else {\n // Limpa o valor do campo antes de desabilitá-lo\n const resetValue = this.getResetValueForFieldType(field.controlType);\n dependentControl.setValue(resetValue, { emitEvent: false });\n dependentControl.disable();\n }\n });\n });\n }\n\n private getToggleValue(toggleKey: string, config: iFormConfig[]): boolean {\n const toggleField = config.find((f) => f.key === toggleKey);\n if (!toggleField || toggleField.controlType !== 'toggleswitch') {\n return false;\n }\n\n const toggleTrueValue = toggleField.toggleTrueValue ?? true;\n const toggleValue = toggleField.value ?? false;\n\n return toggleValue === toggleTrueValue;\n }\n\n /**\n * Retorna o valor padrão de reset para cada tipo de campo.\n * Usado quando um campo dependente é desabilitado e precisa ser limpo.\n */\n private getResetValueForFieldType(controlType: string): any {\n switch (controlType) {\n case 'text':\n case 'email':\n case 'password':\n case 'textarea':\n case 'input-button':\n return '';\n case 'number':\n return null;\n case 'select':\n return null;\n case 'datepicker':\n return null;\n default:\n return '';\n }\n }\n\n /**\n * Obtém o componente a ser renderizado para um tipo de campo.\n * Primeiro verifica no registro customizado, depois nos componentes padrão.\n */\n getFieldComponent(controlType: string): Type<any> | null {\n // Verifica primeiro no registro customizado\n const customComponent = this.fieldRegistry.getField(controlType);\n if (customComponent) {\n return customComponent;\n }\n\n // Fallback para componentes padrão\n return this.fieldComponents[controlType] || null;\n }\n\n getControl(key: string): AbstractControl {\n const control = this.form.get(key);\n if (!control) {\n console.warn(`DynamicFormComponent: Controle não encontrado para a chave: ${key}`);\n }\n return control!;\n }\n}\n","<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n @for (field of config(); track field.key) { @if (getFieldComponent(field.controlType); as\n fieldComponent) {\n <div [class]=\"'form-field-wrapper ' + (field.styleClass || '')\">\n <!-- Dynamically render the correct field component -->\n <ng-container\n [ngComponentOutlet]=\"fieldComponent\"\n [ngComponentOutletInputs]=\"{ form: form, field: field }\"\n />\n\n @if (field.hint) {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component -->\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n </div>\n } @else {\n <div class=\"form-field-wrapper\">\n <small class=\"p-error\">Tipo de campo '{{ field.controlType }}' não encontrado.</small>\n </div>\n } }\n</form>\n","import { Translation } from 'primeng/api';\n\nexport const PRIMENG_PTBR: Translation = {\n // Filtros\n startsWith: 'Começa com',\n contains: 'Contém',\n notContains: 'Não contém',\n endsWith: 'Termina com',\n equals: 'Igual',\n notEquals: 'Diferente',\n noFilter: 'Sem filtro',\n lt: 'Menor que',\n lte: 'Menor ou igual a',\n gt: 'Maior que',\n gte: 'Maior ou igual a',\n is: 'É',\n isNot: 'Não é',\n before: 'Antes',\n after: 'Depois',\n dateIs: 'Data é',\n dateIsNot: 'Data não é',\n dateBefore: 'Data antes',\n dateAfter: 'Data depois',\n\n // Regras\n clear: 'Limpar',\n apply: 'Aplicar',\n matchAll: 'Corresponder a todos',\n matchAny: 'Corresponder a qualquer',\n addRule: 'Adicionar regra',\n removeRule: 'Remover regra',\n\n // Ações\n accept: 'Sim',\n reject: 'Não',\n choose: 'Escolher',\n upload: 'Enviar',\n cancel: 'Cancelar',\n completed: 'Concluído',\n pending: 'Pendente',\n\n // Arquivos\n fileSizeTypes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n emptyMessage: 'Nenhum registro encontrado',\n emptyFilterMessage: 'Nenhum resultado encontrado',\n fileChosenMessage: '{0} arquivo(s) selecionado(s)',\n noFileChosenMessage: 'Nenhum arquivo selecionado',\n\n // Datas\n dayNames: ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'],\n dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],\n dayNamesMin: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'],\n monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],\n monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],\n dateFormat: 'dd/mm/yy',\n firstDayOfWeek: 0,\n today: 'Hoje',\n weekHeader: 'Sem',\n\n // Password\n weak: 'Fraca',\n medium: 'Média',\n strong: 'Forte',\n passwordPrompt: 'Digite uma senha',\n\n // Date navigation\n chooseYear: 'Escolher ano',\n chooseMonth: 'Escolher mês',\n chooseDate: 'Escolher data',\n prevDecade: 'Década anterior',\n nextDecade: 'Próxima década',\n prevYear: 'Ano anterior',\n nextYear: 'Próximo ano',\n prevMonth: 'Mês anterior',\n nextMonth: 'Próximo mês',\n prevHour: 'Hora anterior',\n nextHour: 'Próxima hora',\n prevMinute: 'Minuto anterior',\n nextMinute: 'Próximo minuto',\n prevSecond: 'Segundo anterior',\n nextSecond: 'Próximo segundo',\n am: 'AM',\n pm: 'PM',\n\n // Busca / seleção\n searchMessage: 'Digite para pesquisar',\n selectionMessage: '{0} item(ns) selecionado(s)',\n emptySelectionMessage: 'Nenhum item selecionado',\n emptySearchMessage: 'Nenhum resultado encontrado',\n\n // ARIA (acessibilidade)\n aria: {\n trueLabel: 'Verdadeiro',\n falseLabel: 'Falso',\n nullLabel: 'Não selecionado',\n star: '1 estrela',\n stars: '{star} estrelas',\n selectAll: 'Selecionar todos',\n unselectAll: 'Desmarcar todos',\n close: 'Fechar',\n previous: 'Anterior',\n next: 'Próximo',\n navigation: 'Navegação',\n scrollTop: 'Rolar para o topo',\n moveTop: 'Mover para o topo',\n moveUp: 'Mover para cima',\n moveDown: 'Mover para baixo',\n moveBottom: 'Mover para o final',\n moveToTarget: 'Mover para o destino',\n moveToSource: 'Mover para a origem',\n moveAllToTarget: 'Mover todos para o destino',\n moveAllToSource: 'Mover todos para a origem',\n pageLabel: 'Página {page}',\n firstPageLabel: 'Primeira página',\n lastPageLabel: 'Última página',\n nextPageLabel: 'Próxima página',\n prevPageLabel: 'Página anterior',\n rowsPerPageLabel: 'Itens por página',\n previousPageLabel: 'Página anterior',\n jumpToPageDropdownLabel: 'Pular para página',\n jumpToPageInputLabel: 'Ir para página',\n selectRow: 'Selecionar linha',\n unselectRow: 'Desmarcar linha',\n expandRow: 'Expandir linha',\n collapseRow: 'Recolher linha',\n showFilterMenu: 'Mostrar menu de filtro',\n hideFilterMenu: 'Ocultar menu de filtro',\n filterOperator: 'Operador de filtro',\n filterConstraint: 'Restrição de filtro',\n editRow: 'Editar linha',\n saveEdit: 'Salvar edição',\n cancelEdit: 'Cancelar edição',\n listView: 'Visualização em lista',\n gridView: 'Visualização em grade',\n slide: 'Slide',\n slideNumber: 'Slide {slideNumber}',\n zoomImage: 'Ampliar imagem',\n zoomIn: 'Aumentar zoom',\n zoomOut: 'Reduzir zoom',\n rotateRight: 'Girar à direita',\n rotateLeft: 'Girar à esquerda',\n listLabel: 'Lista',\n selectColor: 'Selecionar cor',\n removeLabel: 'Remover',\n browseFiles: 'Procurar arquivos',\n maximizeLabel: 'Maximizar',\n minimizeLabel: 'Minimizar',\n },\n};\n","import { Provider } from '@angular/core';\n\nimport { DYNAMIC_FORM_ERROR_MESSAGES, DynamicFormErrorMessages } from '../interfaces/error-messages.interface';\n\n/**\n * Provider para configurar mensagens de erro customizadas.\n * @param messages Mensagens de erro customizadas\n * @returns Provider configurado\n */\nexport function provideDynamicFormConfig(messages?: DynamicFormErrorMessages): Provider[] {\n const providers: Provider[] = [];\n\n if (messages) {\n providers.push({\n provide: DYNAMIC_FORM_ERROR_MESSAGES,\n useValue: messages,\n });\n }\n\n return providers;\n}\n","import { PRIMENG_PTBR } from './lib/i18n/primeng-ptbr';\n/*\n * Public API Surface of @vipsolucoes/dynamic-form\n */\n\n// Componentes\nexport { DynamicFormComponent } from './lib/components/dynamic-form/dynamic-form.component';\nexport { DynamicFormErrorComponent } from './lib/components/form-field-error/form-field-error.component';\n\n// Fields (para uso standalone)\nexport { InputTextFieldComponent } from './lib/fields/input-text-field.component';\nexport { InputButtonFieldComponent } from './lib/fields/input-button-field.component';\nexport { SelectFieldComponent } from './lib/fields/select-field.component';\nexport { DatePickerFieldComponent } from './lib/fields/datepicker-field.component';\nexport { NumberInputFieldComponent } from './lib/fields/number-input-field.component';\nexport { PasswordFieldComponent } from './lib/fields/password-field.component';\nexport { TextareaFieldComponent } from './lib/fields/textarea-field.component';\nexport { ToggleSwitchFieldComponent } from './lib/fields/toggleswitch-field.component';\n\n// Interfaces\nexport type { iFormConfig, iFieldOption } from './lib/interfaces/form-config.interface';\nexport type { DynamicFormErrorMessages } from './lib/interfaces/error-messages.interface';\nexport { DYNAMIC_FORM_ERROR_MESSAGES } from './lib/interfaces/error-messages.interface';\n\n// Services\nexport { FieldRegistryService } from './lib/services/field-registry.service';\n\n// Directives\nexport { TextTransformDirective } from './lib/directives/text-transform.directive';\n\n// Utility functions\nexport { PRIMENG_PTBR } from './lib/i18n/primeng-ptbr';\nexport { provideDynamicFormConfig } from './lib/providers/dynamic-form.providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i2","i1"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { OnInit, Type, InjectionToken, Provider } from '@angular/core';
|
|
3
3
|
import { ValidatorFn, FormGroup, AbstractControl } from '@angular/forms';
|
|
4
|
+
import * as primeng_button from 'primeng/button';
|
|
5
|
+
import { ButtonSeverity } from 'primeng/button';
|
|
4
6
|
import { Translation } from 'primeng/api';
|
|
5
7
|
|
|
6
8
|
/**
|
|
@@ -21,7 +23,7 @@ interface iFormConfig {
|
|
|
21
23
|
/**
|
|
22
24
|
* O tipo de controle a ser renderizado.
|
|
23
25
|
*/
|
|
24
|
-
controlType: 'text' | 'password' | 'email' | 'number' | 'select' | 'datepicker' | 'textarea' | 'toggleswitch';
|
|
26
|
+
controlType: 'text' | 'password' | 'email' | 'number' | 'select' | 'datepicker' | 'textarea' | 'toggleswitch' | 'input-button';
|
|
25
27
|
/**
|
|
26
28
|
* Texto a ser exibido no label do campo.
|
|
27
29
|
*/
|
|
@@ -88,6 +90,42 @@ interface iFormConfig {
|
|
|
88
90
|
* Valor quando o toggle switch está desativado. Default: false. Aplicável apenas para controlType 'toggleswitch'.
|
|
89
91
|
*/
|
|
90
92
|
toggleFalseValue?: any;
|
|
93
|
+
/**
|
|
94
|
+
* Configuração do botão para campos do tipo 'input-button'
|
|
95
|
+
*/
|
|
96
|
+
buttonConfig?: {
|
|
97
|
+
/**
|
|
98
|
+
* Ícone do botão (PrimeIcons). Ex: 'pi pi-search'
|
|
99
|
+
*/
|
|
100
|
+
icon?: string;
|
|
101
|
+
/**
|
|
102
|
+
* Label/texto do botão
|
|
103
|
+
*/
|
|
104
|
+
label?: string;
|
|
105
|
+
/**
|
|
106
|
+
* Tooltip do botão
|
|
107
|
+
*/
|
|
108
|
+
tooltip?: string;
|
|
109
|
+
/**
|
|
110
|
+
* Posição do botão. Default: 'right'
|
|
111
|
+
*/
|
|
112
|
+
position?: 'left' | 'right';
|
|
113
|
+
/**
|
|
114
|
+
* Severity do botão. Default: 'primary'
|
|
115
|
+
*/
|
|
116
|
+
severity?: ButtonSeverity;
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Função callback executada ao clicar no botão do campo 'input-button'.
|
|
120
|
+
* Recebe a key do campo e o valor atual como parâmetros.
|
|
121
|
+
*/
|
|
122
|
+
buttonCallback?: (fieldKey: string, fieldValue: any) => void | Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* Transformação de texto para o campo. Opções: 'uppercase' | 'lowercase'.
|
|
125
|
+
* Aplicável apenas para campos de texto (text, email, textarea, input-button).
|
|
126
|
+
* Quando definido, o texto é transformado automaticamente conforme o usuário digita.
|
|
127
|
+
*/
|
|
128
|
+
textTransform?: 'uppercase' | 'lowercase';
|
|
91
129
|
}
|
|
92
130
|
|
|
93
131
|
declare class DynamicFormComponent implements OnInit {
|
|
@@ -134,6 +172,23 @@ declare class InputTextFieldComponent {
|
|
|
134
172
|
static ɵcmp: i0.ɵɵComponentDeclaration<InputTextFieldComponent, "vp-input-text-field", never, { "form": { "alias": "form"; "required": true; "isSignal": true; }; "field": { "alias": "field"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
135
173
|
}
|
|
136
174
|
|
|
175
|
+
declare class InputButtonFieldComponent {
|
|
176
|
+
form: i0.InputSignal<FormGroup<any>>;
|
|
177
|
+
field: i0.InputSignal<iFormConfig>;
|
|
178
|
+
buttonConfig(): {
|
|
179
|
+
icon?: string;
|
|
180
|
+
label?: string;
|
|
181
|
+
tooltip?: string;
|
|
182
|
+
position?: "left" | "right";
|
|
183
|
+
severity?: primeng_button.ButtonSeverity;
|
|
184
|
+
} | undefined;
|
|
185
|
+
buttonPosition(): 'left' | 'right';
|
|
186
|
+
isFieldDisabled(): boolean;
|
|
187
|
+
onButtonClick(): void;
|
|
188
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<InputButtonFieldComponent, never>;
|
|
189
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InputButtonFieldComponent, "vp-input-button-field", never, { "form": { "alias": "form"; "required": true; "isSignal": true; }; "field": { "alias": "field"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
190
|
+
}
|
|
191
|
+
|
|
137
192
|
declare class SelectFieldComponent {
|
|
138
193
|
form: i0.InputSignal<FormGroup<any>>;
|
|
139
194
|
field: i0.InputSignal<iFormConfig>;
|
|
@@ -224,6 +279,48 @@ declare class FieldRegistryService {
|
|
|
224
279
|
static ɵprov: i0.ɵɵInjectableDeclaration<FieldRegistryService>;
|
|
225
280
|
}
|
|
226
281
|
|
|
282
|
+
/**
|
|
283
|
+
* Diretiva para transformar texto em uppercase ou lowercase em tempo real.
|
|
284
|
+
* Funciona com Reactive Forms (NgControl) e elementos HTML nativos.
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```html
|
|
288
|
+
* <!-- Uppercase -->
|
|
289
|
+
* <input [vpTextTransform]="'uppercase'" />
|
|
290
|
+
*
|
|
291
|
+
* <!-- Lowercase -->
|
|
292
|
+
* <input [vpTextTransform]="'lowercase'" />
|
|
293
|
+
*
|
|
294
|
+
* <!-- Desabilitado -->
|
|
295
|
+
* <input [vpTextTransform]="null" />
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
declare class TextTransformDirective implements OnInit {
|
|
299
|
+
private readonly elementRef;
|
|
300
|
+
/**
|
|
301
|
+
* NgControl opcional - presente quando usado com reactive forms ou ngModel.
|
|
302
|
+
* Usamos `optional: true` e `self: true` para injetar apenas se estiver no mesmo elemento.
|
|
303
|
+
*/
|
|
304
|
+
private readonly ngControl;
|
|
305
|
+
/**
|
|
306
|
+
* Tipo de transformação a ser aplicada: 'uppercase' | 'lowercase' | null
|
|
307
|
+
* Quando null ou undefined, a transformação é desabilitada.
|
|
308
|
+
*/
|
|
309
|
+
vpTextTransform: 'uppercase' | 'lowercase' | null;
|
|
310
|
+
ngOnInit(): void;
|
|
311
|
+
onInput(event: Event): void;
|
|
312
|
+
/**
|
|
313
|
+
* Aplica a transformação de texto baseada no tipo especificado.
|
|
314
|
+
*/
|
|
315
|
+
private transformValue;
|
|
316
|
+
/**
|
|
317
|
+
* Verifica se o elemento é um input de texto que suporta seleção de cursor.
|
|
318
|
+
*/
|
|
319
|
+
private isTextInput;
|
|
320
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TextTransformDirective, never>;
|
|
321
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TextTransformDirective, "[vpTextTransform]", never, { "vpTextTransform": { "alias": "vpTextTransform"; "required": false; }; }, {}, never, never, true, never>;
|
|
322
|
+
}
|
|
323
|
+
|
|
227
324
|
declare const PRIMENG_PTBR: Translation;
|
|
228
325
|
|
|
229
326
|
/**
|
|
@@ -233,5 +330,5 @@ declare const PRIMENG_PTBR: Translation;
|
|
|
233
330
|
*/
|
|
234
331
|
declare function provideDynamicFormConfig(messages?: DynamicFormErrorMessages): Provider[];
|
|
235
332
|
|
|
236
|
-
export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
|
|
333
|
+
export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputButtonFieldComponent, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextTransformDirective, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
|
|
237
334
|
export type { DynamicFormErrorMessages, iFieldOption, iFormConfig };
|