@vipsolucoes/dynamic-form 1.0.4 → 1.0.6
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.
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import * as i1$
|
|
1
|
+
import * as i1$2 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
|
+
import * as i1$1 from 'primeng/divider';
|
|
13
|
+
import { DividerModule } from 'primeng/divider';
|
|
12
14
|
import * as i3$1 from 'primeng/inputtext';
|
|
13
15
|
import { InputTextModule } from 'primeng/inputtext';
|
|
14
16
|
import * as i4 from 'primeng/inputgroup';
|
|
@@ -122,6 +124,177 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImpor
|
|
|
122
124
|
`, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}p-datepicker{width:100%}\n"] }]
|
|
123
125
|
}], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: true }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }] } });
|
|
124
126
|
|
|
127
|
+
class DividerFieldComponent {
|
|
128
|
+
form = input(...(ngDevMode ? [undefined, { debugName: "form" }] : []));
|
|
129
|
+
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
130
|
+
/**
|
|
131
|
+
* Retorna a configuração do divider do campo.
|
|
132
|
+
* Se não existir, retorna undefined para usar os defaults do PrimeNG.
|
|
133
|
+
*/
|
|
134
|
+
dividerConfig() {
|
|
135
|
+
return this.field().dividerConfig;
|
|
136
|
+
}
|
|
137
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: DividerFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
138
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.7", type: DividerFieldComponent, isStandalone: true, selector: "vp-divider-field", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
139
|
+
<p-divider
|
|
140
|
+
[layout]="dividerConfig()?.layout || 'horizontal'"
|
|
141
|
+
[type]="dividerConfig()?.type || 'solid'"
|
|
142
|
+
[align]="dividerConfig()?.align"
|
|
143
|
+
[styleClass]="field().styleClass || ''"
|
|
144
|
+
>
|
|
145
|
+
@if (dividerConfig()?.content) {
|
|
146
|
+
<b>{{ dividerConfig()?.content }}</b>
|
|
147
|
+
}
|
|
148
|
+
</p-divider>
|
|
149
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: DividerModule }, { kind: "component", type: i1$1.Divider, selector: "p-divider", inputs: ["styleClass", "layout", "type", "align"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
150
|
+
}
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: DividerFieldComponent, decorators: [{
|
|
152
|
+
type: Component,
|
|
153
|
+
args: [{
|
|
154
|
+
selector: 'vp-divider-field',
|
|
155
|
+
standalone: true,
|
|
156
|
+
imports: [DividerModule],
|
|
157
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
158
|
+
template: `
|
|
159
|
+
<p-divider
|
|
160
|
+
[layout]="dividerConfig()?.layout || 'horizontal'"
|
|
161
|
+
[type]="dividerConfig()?.type || 'solid'"
|
|
162
|
+
[align]="dividerConfig()?.align"
|
|
163
|
+
[styleClass]="field().styleClass || ''"
|
|
164
|
+
>
|
|
165
|
+
@if (dividerConfig()?.content) {
|
|
166
|
+
<b>{{ dividerConfig()?.content }}</b>
|
|
167
|
+
}
|
|
168
|
+
</p-divider>
|
|
169
|
+
`,
|
|
170
|
+
}]
|
|
171
|
+
}], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: false }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }] } });
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Diretiva para transformar texto em uppercase ou lowercase em tempo real.
|
|
175
|
+
* Funciona com Reactive Forms (NgControl) e elementos HTML nativos.
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```html
|
|
179
|
+
* <!-- Uppercase -->
|
|
180
|
+
* <input [vpTextTransform]="'uppercase'" />
|
|
181
|
+
*
|
|
182
|
+
* <!-- Lowercase -->
|
|
183
|
+
* <input [vpTextTransform]="'lowercase'" />
|
|
184
|
+
*
|
|
185
|
+
* <!-- Desabilitado -->
|
|
186
|
+
* <input [vpTextTransform]="null" />
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
class TextTransformDirective {
|
|
190
|
+
elementRef = inject((ElementRef));
|
|
191
|
+
/**
|
|
192
|
+
* NgControl opcional - presente quando usado com reactive forms ou ngModel.
|
|
193
|
+
* Usamos `optional: true` e `self: true` para injetar apenas se estiver no mesmo elemento.
|
|
194
|
+
*/
|
|
195
|
+
ngControl = inject(NgControl, { optional: true, self: true });
|
|
196
|
+
/**
|
|
197
|
+
* Tipo de transformação a ser aplicada: 'uppercase' | 'lowercase' | null
|
|
198
|
+
* Quando null ou undefined, a transformação é desabilitada.
|
|
199
|
+
*/
|
|
200
|
+
vpTextTransform = null;
|
|
201
|
+
ngOnInit() {
|
|
202
|
+
// Aplicar transformação no valor inicial se existir
|
|
203
|
+
const element = this.elementRef.nativeElement;
|
|
204
|
+
const transform = this.vpTextTransform;
|
|
205
|
+
if (transform && element.value && typeof element.value === 'string') {
|
|
206
|
+
const transformedValue = this.transformValue(element.value, transform);
|
|
207
|
+
if (transformedValue !== element.value) {
|
|
208
|
+
element.value = transformedValue;
|
|
209
|
+
// Atualizar o FormControl se existir
|
|
210
|
+
if (this.ngControl?.control) {
|
|
211
|
+
this.ngControl.control.setValue(transformedValue, { emitEvent: false });
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
onInput(event) {
|
|
217
|
+
const inputElement = event.target;
|
|
218
|
+
const transform = this.vpTextTransform;
|
|
219
|
+
// Verifica se a transformação está habilitada
|
|
220
|
+
if (!transform || !inputElement.value) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
const currentValue = inputElement.value;
|
|
224
|
+
if (typeof currentValue !== 'string') {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
// Preserva a posição do cursor
|
|
228
|
+
const start = inputElement.selectionStart;
|
|
229
|
+
const end = inputElement.selectionEnd;
|
|
230
|
+
// Aplica a transformação
|
|
231
|
+
const transformedValue = this.transformValue(currentValue, transform);
|
|
232
|
+
// Se o valor já está transformado, não faz nada
|
|
233
|
+
if (currentValue === transformedValue) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
// Atualiza o valor do elemento
|
|
237
|
+
inputElement.value = transformedValue;
|
|
238
|
+
// Restaura a posição do cursor (apenas para inputs de texto)
|
|
239
|
+
if (this.isTextInput(inputElement)) {
|
|
240
|
+
const newStart = Math.min(start ?? 0, transformedValue.length);
|
|
241
|
+
const newEnd = Math.min(end ?? 0, transformedValue.length);
|
|
242
|
+
inputElement.setSelectionRange(newStart, newEnd);
|
|
243
|
+
}
|
|
244
|
+
// Se NgControl estiver presente (reactive forms ou ngModel), atualiza através dele
|
|
245
|
+
if (this.ngControl?.control) {
|
|
246
|
+
this.ngControl.control.setValue(transformedValue, { emitEvent: false });
|
|
247
|
+
// Emite o evento manualmente para garantir que os listeners sejam notificados
|
|
248
|
+
this.ngControl.control.updateValueAndValidity({ emitEvent: true });
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
// Para elementos sem NgControl, dispara evento input manualmente
|
|
252
|
+
// Isso garante compatibilidade com listeners diretos no elemento
|
|
253
|
+
const inputEvent = new Event('input', {
|
|
254
|
+
bubbles: true,
|
|
255
|
+
cancelable: true,
|
|
256
|
+
});
|
|
257
|
+
inputElement.dispatchEvent(inputEvent);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Aplica a transformação de texto baseada no tipo especificado.
|
|
262
|
+
*/
|
|
263
|
+
transformValue(value, transform) {
|
|
264
|
+
return transform === 'uppercase' ? value.toUpperCase() : value.toLowerCase();
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Verifica se o elemento é um input de texto que suporta seleção de cursor.
|
|
268
|
+
*/
|
|
269
|
+
isTextInput(element) {
|
|
270
|
+
if (element.tagName === 'TEXTAREA') {
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
const inputElement = element;
|
|
274
|
+
return (inputElement.type === 'text' ||
|
|
275
|
+
inputElement.type === 'search' ||
|
|
276
|
+
inputElement.type === 'email' ||
|
|
277
|
+
inputElement.type === 'url' ||
|
|
278
|
+
inputElement.type === 'tel' ||
|
|
279
|
+
!inputElement.type // type padrão é 'text'
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: TextTransformDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
283
|
+
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 });
|
|
284
|
+
}
|
|
285
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: TextTransformDirective, decorators: [{
|
|
286
|
+
type: Directive,
|
|
287
|
+
args: [{
|
|
288
|
+
selector: '[vpTextTransform]',
|
|
289
|
+
standalone: true,
|
|
290
|
+
}]
|
|
291
|
+
}], propDecorators: { vpTextTransform: [{
|
|
292
|
+
type: Input
|
|
293
|
+
}], onInput: [{
|
|
294
|
+
type: HostListener,
|
|
295
|
+
args: ['input', ['$event']]
|
|
296
|
+
}] } });
|
|
297
|
+
|
|
125
298
|
class InputTextFieldComponent {
|
|
126
299
|
form = input.required(...(ngDevMode ? [{ debugName: "form" }] : []));
|
|
127
300
|
field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
|
|
@@ -129,18 +302,32 @@ class InputTextFieldComponent {
|
|
|
129
302
|
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: `
|
|
130
303
|
<div [formGroup]="form()">
|
|
131
304
|
<p-iftalabel>
|
|
132
|
-
<input
|
|
305
|
+
<input
|
|
306
|
+
pInputText
|
|
307
|
+
[id]="field().key"
|
|
308
|
+
[type]="field().controlType"
|
|
309
|
+
[formControlName]="field().key"
|
|
310
|
+
[placeholder]="field().placeholder || ''"
|
|
311
|
+
[vpTextTransform]="field().textTransform || null"
|
|
312
|
+
/>
|
|
133
313
|
<label [for]="field().key">{{ field().label }}</label>
|
|
134
314
|
</p-iftalabel>
|
|
135
315
|
</div>
|
|
136
|
-
`, 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 });
|
|
316
|
+
`, 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 });
|
|
137
317
|
}
|
|
138
318
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: InputTextFieldComponent, decorators: [{
|
|
139
319
|
type: Component,
|
|
140
|
-
args: [{ selector: 'vp-input-text-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, InputTextModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
320
|
+
args: [{ selector: 'vp-input-text-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, InputTextModule, TextTransformDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
141
321
|
<div [formGroup]="form()">
|
|
142
322
|
<p-iftalabel>
|
|
143
|
-
<input
|
|
323
|
+
<input
|
|
324
|
+
pInputText
|
|
325
|
+
[id]="field().key"
|
|
326
|
+
[type]="field().controlType"
|
|
327
|
+
[formControlName]="field().key"
|
|
328
|
+
[placeholder]="field().placeholder || ''"
|
|
329
|
+
[vpTextTransform]="field().textTransform || null"
|
|
330
|
+
/>
|
|
144
331
|
<label [for]="field().key">{{ field().label }}</label>
|
|
145
332
|
</p-iftalabel>
|
|
146
333
|
</div>
|
|
@@ -191,6 +378,7 @@ class InputButtonFieldComponent {
|
|
|
191
378
|
[id]="field().key"
|
|
192
379
|
[formControlName]="field().key"
|
|
193
380
|
[placeholder]="field().placeholder || ''"
|
|
381
|
+
[vpTextTransform]="field().textTransform || null"
|
|
194
382
|
/>
|
|
195
383
|
<label [for]="field().key">{{ field().label }}</label>
|
|
196
384
|
</p-iftalabel>
|
|
@@ -209,7 +397,7 @@ class InputButtonFieldComponent {
|
|
|
209
397
|
}
|
|
210
398
|
</p-inputgroup>
|
|
211
399
|
</div>
|
|
212
|
-
`, 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
400
|
+
`, 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 });
|
|
213
401
|
}
|
|
214
402
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: InputButtonFieldComponent, decorators: [{
|
|
215
403
|
type: Component,
|
|
@@ -221,6 +409,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImpor
|
|
|
221
409
|
InputGroupAddonModule,
|
|
222
410
|
ButtonModule,
|
|
223
411
|
TooltipModule,
|
|
412
|
+
TextTransformDirective,
|
|
224
413
|
], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
225
414
|
<div [formGroup]="form()">
|
|
226
415
|
<p-inputgroup>
|
|
@@ -243,6 +432,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImpor
|
|
|
243
432
|
[id]="field().key"
|
|
244
433
|
[formControlName]="field().key"
|
|
245
434
|
[placeholder]="field().placeholder || ''"
|
|
435
|
+
[vpTextTransform]="field().textTransform || null"
|
|
246
436
|
/>
|
|
247
437
|
<label [for]="field().key">{{ field().label }}</label>
|
|
248
438
|
</p-iftalabel>
|
|
@@ -382,15 +572,16 @@ class TextareaFieldComponent {
|
|
|
382
572
|
[rows]="field().textareaRows ?? 1"
|
|
383
573
|
[cols]="field().textareaCols"
|
|
384
574
|
[autoResize]="field().textareaAutoResize ?? false"
|
|
575
|
+
[vpTextTransform]="field().textTransform || null"
|
|
385
576
|
></textarea>
|
|
386
577
|
<label [for]="field().key">{{ field().label }}</label>
|
|
387
578
|
</p-iftalabel>
|
|
388
579
|
</div>
|
|
389
|
-
`, 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 });
|
|
580
|
+
`, 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 });
|
|
390
581
|
}
|
|
391
582
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: TextareaFieldComponent, decorators: [{
|
|
392
583
|
type: Component,
|
|
393
|
-
args: [{ selector: 'vp-textarea-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, TextareaModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
584
|
+
args: [{ selector: 'vp-textarea-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, TextareaModule, TextTransformDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
394
585
|
<div [formGroup]="form()">
|
|
395
586
|
<p-iftalabel>
|
|
396
587
|
<textarea
|
|
@@ -401,6 +592,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImpor
|
|
|
401
592
|
[rows]="field().textareaRows ?? 1"
|
|
402
593
|
[cols]="field().textareaCols"
|
|
403
594
|
[autoResize]="field().textareaAutoResize ?? false"
|
|
595
|
+
[vpTextTransform]="field().textTransform || null"
|
|
404
596
|
></textarea>
|
|
405
597
|
<label [for]="field().key">{{ field().label }}</label>
|
|
406
598
|
</p-iftalabel>
|
|
@@ -506,6 +698,7 @@ class DynamicFormComponent {
|
|
|
506
698
|
textarea: TextareaFieldComponent,
|
|
507
699
|
toggleswitch: ToggleSwitchFieldComponent,
|
|
508
700
|
'input-button': InputButtonFieldComponent,
|
|
701
|
+
divider: DividerFieldComponent,
|
|
509
702
|
};
|
|
510
703
|
ngOnInit() {
|
|
511
704
|
const configValue = this.config();
|
|
@@ -517,6 +710,10 @@ class DynamicFormComponent {
|
|
|
517
710
|
}
|
|
518
711
|
buildForm(config) {
|
|
519
712
|
config.forEach((field) => {
|
|
713
|
+
// Campos do tipo 'divider' não criam FormControl, são apenas elementos visuais
|
|
714
|
+
if (field.controlType === 'divider') {
|
|
715
|
+
return;
|
|
716
|
+
}
|
|
520
717
|
// Para toggle switch, o valor padrão é false se não especificado
|
|
521
718
|
const defaultValue = field.controlType === 'toggleswitch' ? (field.value ?? false) : (field.value ?? '');
|
|
522
719
|
// Se o campo tem enabledWhen, ele deve começar desabilitado a menos que o toggle já esteja ativo
|
|
@@ -618,11 +815,11 @@ class DynamicFormComponent {
|
|
|
618
815
|
return control;
|
|
619
816
|
}
|
|
620
817
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: DynamicFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
621
|
-
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
|
|
818
|
+
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 (field.visible !== false) { @if\n (getFieldComponent(field.controlType); as 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 && field.controlType !== 'divider') {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component - apenas para campos que n\u00E3o s\u00E3o divider -->\n @if (field.controlType !== 'divider') {\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n }\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$2.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 });
|
|
622
819
|
}
|
|
623
820
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: DynamicFormComponent, decorators: [{
|
|
624
821
|
type: Component,
|
|
625
|
-
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
|
|
822
|
+
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 (field.visible !== false) { @if\n (getFieldComponent(field.controlType); as 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 && field.controlType !== 'divider') {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component - apenas para campos que n\u00E3o s\u00E3o divider -->\n @if (field.controlType !== 'divider') {\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n }\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"] }]
|
|
626
823
|
}], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], formReady: [{ type: i0.Output, args: ["formReady"] }] } });
|
|
627
824
|
|
|
628
825
|
const PRIMENG_PTBR = {
|
|
@@ -790,5 +987,5 @@ function provideDynamicFormConfig(messages) {
|
|
|
790
987
|
* Generated bundle index. Do not edit.
|
|
791
988
|
*/
|
|
792
989
|
|
|
793
|
-
export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputButtonFieldComponent, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
|
|
990
|
+
export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DividerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputButtonFieldComponent, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextTransformDirective, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
|
|
794
991
|
//# 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/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 { 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 { 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';\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 ],\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 />\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';\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 { 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// 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/fields/divider-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 { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { DividerModule } from 'primeng/divider';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-divider-field',\n standalone: true,\n imports: [DividerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <p-divider\n [layout]=\"dividerConfig()?.layout || 'horizontal'\"\n [type]=\"dividerConfig()?.type || 'solid'\"\n [align]=\"dividerConfig()?.align\"\n [styleClass]=\"field().styleClass || ''\"\n >\n @if (dividerConfig()?.content) {\n <b>{{ dividerConfig()?.content }}</b>\n }\n </p-divider>\n `,\n})\nexport class DividerFieldComponent {\n form = input<FormGroup>();\n field = input.required<iFormConfig>();\n\n /**\n * Retorna a configuração do divider do campo.\n * Se não existir, retorna undefined para usar os defaults do PrimeNG.\n */\n dividerConfig() {\n return this.field().dividerConfig;\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 { DividerFieldComponent } from '../../fields/divider-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 divider: DividerFieldComponent,\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 // Campos do tipo 'divider' não criam FormControl, são apenas elementos visuais\n if (field.controlType === 'divider') {\n return;\n }\n\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 (field.visible !== false) { @if\n (getFieldComponent(field.controlType); as 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 && field.controlType !== 'divider') {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component - apenas para campos que não são divider -->\n @if (field.controlType !== 'divider') {\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n }\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';\nexport { DividerFieldComponent } from './lib/fields/divider-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":["i1","i3","i2"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -23,11 +23,12 @@ interface iFormConfig {
|
|
|
23
23
|
/**
|
|
24
24
|
* O tipo de controle a ser renderizado.
|
|
25
25
|
*/
|
|
26
|
-
controlType: 'text' | 'password' | 'email' | 'number' | 'select' | 'datepicker' | 'textarea' | 'toggleswitch' | 'input-button';
|
|
26
|
+
controlType: 'text' | 'password' | 'email' | 'number' | 'select' | 'datepicker' | 'textarea' | 'toggleswitch' | 'input-button' | 'divider';
|
|
27
27
|
/**
|
|
28
28
|
* Texto a ser exibido no label do campo.
|
|
29
|
+
* Não obrigatório para controlType 'divider'.
|
|
29
30
|
*/
|
|
30
|
-
label
|
|
31
|
+
label?: string;
|
|
31
32
|
/**
|
|
32
33
|
* Valor inicial do campo.
|
|
33
34
|
*/
|
|
@@ -44,6 +45,11 @@ interface iFormConfig {
|
|
|
44
45
|
* Indica se o campo deve estar desabilitado. Default: false.
|
|
45
46
|
*/
|
|
46
47
|
disabled?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Indica se o campo deve estar visível. Default: true.
|
|
50
|
+
* Quando false, o campo não é renderizado no template, mas ainda é criado no FormGroup.
|
|
51
|
+
*/
|
|
52
|
+
visible?: boolean;
|
|
47
53
|
/**
|
|
48
54
|
* Chave (key) do campo toggleSwitch que controla a habilitação deste campo.
|
|
49
55
|
* Quando o toggle referenciado estiver ativado (true), este campo será habilitado.
|
|
@@ -120,6 +126,34 @@ interface iFormConfig {
|
|
|
120
126
|
* Recebe a key do campo e o valor atual como parâmetros.
|
|
121
127
|
*/
|
|
122
128
|
buttonCallback?: (fieldKey: string, fieldValue: any) => void | Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Transformação de texto para o campo. Opções: 'uppercase' | 'lowercase'.
|
|
131
|
+
* Aplicável apenas para campos de texto (text, email, textarea, input-button).
|
|
132
|
+
* Quando definido, o texto é transformado automaticamente conforme o usuário digita.
|
|
133
|
+
*/
|
|
134
|
+
textTransform?: 'uppercase' | 'lowercase';
|
|
135
|
+
/**
|
|
136
|
+
* Configuração do divisor/separador para campos do tipo 'divider'.
|
|
137
|
+
* Aplicável apenas para controlType 'divider'.
|
|
138
|
+
*/
|
|
139
|
+
dividerConfig?: {
|
|
140
|
+
/**
|
|
141
|
+
* Orientação do divisor. Default: 'horizontal'.
|
|
142
|
+
*/
|
|
143
|
+
layout?: 'horizontal' | 'vertical';
|
|
144
|
+
/**
|
|
145
|
+
* Estilo da borda do divisor. Default: 'solid'.
|
|
146
|
+
*/
|
|
147
|
+
type?: 'solid' | 'dashed' | 'dotted';
|
|
148
|
+
/**
|
|
149
|
+
* Alinhamento do conteúdo do divisor (quando há texto).
|
|
150
|
+
*/
|
|
151
|
+
align?: 'left' | 'center' | 'right' | 'top' | 'bottom';
|
|
152
|
+
/**
|
|
153
|
+
* Texto opcional para exibir no divisor.
|
|
154
|
+
*/
|
|
155
|
+
content?: string;
|
|
156
|
+
};
|
|
123
157
|
}
|
|
124
158
|
|
|
125
159
|
declare class DynamicFormComponent implements OnInit {
|
|
@@ -227,6 +261,23 @@ declare class ToggleSwitchFieldComponent {
|
|
|
227
261
|
static ɵcmp: i0.ɵɵComponentDeclaration<ToggleSwitchFieldComponent, "vp-toggleswitch-field", never, { "form": { "alias": "form"; "required": true; "isSignal": true; }; "field": { "alias": "field"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
228
262
|
}
|
|
229
263
|
|
|
264
|
+
declare class DividerFieldComponent {
|
|
265
|
+
form: i0.InputSignal<FormGroup<any> | undefined>;
|
|
266
|
+
field: i0.InputSignal<iFormConfig>;
|
|
267
|
+
/**
|
|
268
|
+
* Retorna a configuração do divider do campo.
|
|
269
|
+
* Se não existir, retorna undefined para usar os defaults do PrimeNG.
|
|
270
|
+
*/
|
|
271
|
+
dividerConfig(): {
|
|
272
|
+
layout?: "horizontal" | "vertical";
|
|
273
|
+
type?: "solid" | "dashed" | "dotted";
|
|
274
|
+
align?: "left" | "center" | "right" | "top" | "bottom";
|
|
275
|
+
content?: string;
|
|
276
|
+
} | undefined;
|
|
277
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DividerFieldComponent, never>;
|
|
278
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DividerFieldComponent, "vp-divider-field", never, { "form": { "alias": "form"; "required": false; "isSignal": true; }; "field": { "alias": "field"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
279
|
+
}
|
|
280
|
+
|
|
230
281
|
/**
|
|
231
282
|
* Interface para configuração de mensagens de erro customizadas.
|
|
232
283
|
*/
|
|
@@ -273,6 +324,48 @@ declare class FieldRegistryService {
|
|
|
273
324
|
static ɵprov: i0.ɵɵInjectableDeclaration<FieldRegistryService>;
|
|
274
325
|
}
|
|
275
326
|
|
|
327
|
+
/**
|
|
328
|
+
* Diretiva para transformar texto em uppercase ou lowercase em tempo real.
|
|
329
|
+
* Funciona com Reactive Forms (NgControl) e elementos HTML nativos.
|
|
330
|
+
*
|
|
331
|
+
* @example
|
|
332
|
+
* ```html
|
|
333
|
+
* <!-- Uppercase -->
|
|
334
|
+
* <input [vpTextTransform]="'uppercase'" />
|
|
335
|
+
*
|
|
336
|
+
* <!-- Lowercase -->
|
|
337
|
+
* <input [vpTextTransform]="'lowercase'" />
|
|
338
|
+
*
|
|
339
|
+
* <!-- Desabilitado -->
|
|
340
|
+
* <input [vpTextTransform]="null" />
|
|
341
|
+
* ```
|
|
342
|
+
*/
|
|
343
|
+
declare class TextTransformDirective implements OnInit {
|
|
344
|
+
private readonly elementRef;
|
|
345
|
+
/**
|
|
346
|
+
* NgControl opcional - presente quando usado com reactive forms ou ngModel.
|
|
347
|
+
* Usamos `optional: true` e `self: true` para injetar apenas se estiver no mesmo elemento.
|
|
348
|
+
*/
|
|
349
|
+
private readonly ngControl;
|
|
350
|
+
/**
|
|
351
|
+
* Tipo de transformação a ser aplicada: 'uppercase' | 'lowercase' | null
|
|
352
|
+
* Quando null ou undefined, a transformação é desabilitada.
|
|
353
|
+
*/
|
|
354
|
+
vpTextTransform: 'uppercase' | 'lowercase' | null;
|
|
355
|
+
ngOnInit(): void;
|
|
356
|
+
onInput(event: Event): void;
|
|
357
|
+
/**
|
|
358
|
+
* Aplica a transformação de texto baseada no tipo especificado.
|
|
359
|
+
*/
|
|
360
|
+
private transformValue;
|
|
361
|
+
/**
|
|
362
|
+
* Verifica se o elemento é um input de texto que suporta seleção de cursor.
|
|
363
|
+
*/
|
|
364
|
+
private isTextInput;
|
|
365
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TextTransformDirective, never>;
|
|
366
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TextTransformDirective, "[vpTextTransform]", never, { "vpTextTransform": { "alias": "vpTextTransform"; "required": false; }; }, {}, never, never, true, never>;
|
|
367
|
+
}
|
|
368
|
+
|
|
276
369
|
declare const PRIMENG_PTBR: Translation;
|
|
277
370
|
|
|
278
371
|
/**
|
|
@@ -282,5 +375,5 @@ declare const PRIMENG_PTBR: Translation;
|
|
|
282
375
|
*/
|
|
283
376
|
declare function provideDynamicFormConfig(messages?: DynamicFormErrorMessages): Provider[];
|
|
284
377
|
|
|
285
|
-
export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputButtonFieldComponent, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
|
|
378
|
+
export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DividerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputButtonFieldComponent, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextTransformDirective, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
|
|
286
379
|
export type { DynamicFormErrorMessages, iFieldOption, iFormConfig };
|