@vipsolucoes/dynamic-form 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -117,6 +117,7 @@ A biblioteca suporta os seguintes tipos de campos:
117
117
  - `datepicker` - Seletor de data
118
118
  - `textarea` - Área de texto
119
119
  - `toggleswitch` - Switch/Toggle
120
+ - `input-button` - Campo de texto com botão de ação
120
121
 
121
122
  ## 🎯 Exemplos de Configuração
122
123
 
@@ -191,6 +192,40 @@ A biblioteca suporta os seguintes tipos de campos:
191
192
  }
192
193
  ```
193
194
 
195
+ ### Campo Input-Button (Input com Botão de Ação)
196
+
197
+ O campo `input-button` combina um input text com um botão de ação usando o componente InputGroup do PrimeNG:
198
+
199
+ ```typescript
200
+ {
201
+ key: 'cep',
202
+ controlType: 'input-button',
203
+ label: 'CEP',
204
+ placeholder: '00000-000',
205
+ validators: [Validators.required],
206
+ buttonConfig: {
207
+ icon: 'pi pi-search',
208
+ tooltip: 'Buscar endereço',
209
+ position: 'right',
210
+ severity: 'primary'
211
+ },
212
+ buttonCallback: async (fieldKey, value) => {
213
+ console.log(`Buscando ${fieldKey}:`, value);
214
+ // Implementar lógica de busca
215
+ }
216
+ }
217
+ ```
218
+
219
+ Propriedades do `buttonConfig`:
220
+
221
+ - `icon`: Ícone do PrimeIcons (ex: 'pi pi-search')
222
+ - `label`: Texto do botão (opcional, pode usar apenas ícone)
223
+ - `tooltip`: Texto do tooltip ao passar o mouse
224
+ - `position`: Posição do botão ('left' | 'right'), padrão 'right'
225
+ - `severity`: Estilo do botão, padrão 'primary'
226
+
227
+ A função `buttonCallback` é executada quando o botão é clicado e recebe a key do campo e o valor atual como parâmetros.
228
+
194
229
  ### Campos Condicionais
195
230
 
196
231
  Você pode fazer campos serem habilitados/desabilitados baseado no valor de um toggle switch:
@@ -293,7 +328,8 @@ interface iFormConfig {
293
328
  | 'select'
294
329
  | 'datepicker'
295
330
  | 'textarea'
296
- | 'toggleswitch';
331
+ | 'toggleswitch'
332
+ | 'input-button';
297
333
  label: string; // Texto do label
298
334
  value?: any; // Valor inicial
299
335
  placeholder?: string; // Texto de placeholder
@@ -310,6 +346,14 @@ interface iFormConfig {
310
346
  textareaCols?: number; // Número de colunas do textarea
311
347
  toggleTrueValue?: any; // Valor quando toggle está ativo (default: true)
312
348
  toggleFalseValue?: any; // Valor quando toggle está inativo (default: false)
349
+ buttonConfig?: { // Configuração do botão para campos 'input-button'
350
+ icon?: string; // Ícone do PrimeIcons
351
+ label?: string; // Texto do botão
352
+ tooltip?: string; // Tooltip do botão
353
+ position?: 'left' | 'right'; // Posição do botão (default: 'right')
354
+ severity?: 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'danger' | 'help' | 'contrast'; // Estilo do botão
355
+ };
356
+ buttonCallback?: (fieldKey: string, fieldValue: any) => void | Promise<void>; // Callback executado ao clicar no botão
313
357
  }
314
358
  ```
315
359
 
@@ -1,16 +1,23 @@
1
1
  import * as i1$1 from '@angular/common';
2
2
  import { CommonModule, NgComponentOutlet } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, input, inject, Component, computed, ChangeDetectionStrategy, signal, Injectable, DestroyRef, output } from '@angular/core';
4
+ import { InjectionToken, input, inject, Component, computed, ChangeDetectionStrategy, ElementRef, HostListener, Input, Directive, signal, Injectable, DestroyRef, output } from '@angular/core';
5
5
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
6
  import * as i1 from '@angular/forms';
7
- import { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms';
7
+ import { ReactiveFormsModule, NgControl, FormGroup, FormControl } from '@angular/forms';
8
8
  import * as i3 from 'primeng/datepicker';
9
9
  import { DatePickerModule } from 'primeng/datepicker';
10
10
  import * as i2 from 'primeng/iftalabel';
11
11
  import { IftaLabelModule } from 'primeng/iftalabel';
12
12
  import * as i3$1 from 'primeng/inputtext';
13
13
  import { InputTextModule } from 'primeng/inputtext';
14
+ import * as i4 from 'primeng/inputgroup';
15
+ import { InputGroupModule } from 'primeng/inputgroup';
16
+ import { InputGroupAddonModule } from 'primeng/inputgroupaddon';
17
+ import * as i5 from 'primeng/button';
18
+ import { ButtonModule } from 'primeng/button';
19
+ import * as i6 from 'primeng/tooltip';
20
+ import { TooltipModule } from 'primeng/tooltip';
14
21
  import * as i3$2 from 'primeng/inputnumber';
15
22
  import { InputNumberModule } from 'primeng/inputnumber';
16
23
  import * as i3$3 from 'primeng/password';
@@ -115,6 +122,131 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImpor
115
122
  `, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}p-datepicker{width:100%}\n"] }]
116
123
  }], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: true }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }] } });
117
124
 
125
+ /**
126
+ * Diretiva para transformar texto em uppercase ou lowercase em tempo real.
127
+ * Funciona com Reactive Forms (NgControl) e elementos HTML nativos.
128
+ *
129
+ * @example
130
+ * ```html
131
+ * <!-- Uppercase -->
132
+ * <input [vpTextTransform]="'uppercase'" />
133
+ *
134
+ * <!-- Lowercase -->
135
+ * <input [vpTextTransform]="'lowercase'" />
136
+ *
137
+ * <!-- Desabilitado -->
138
+ * <input [vpTextTransform]="null" />
139
+ * ```
140
+ */
141
+ class TextTransformDirective {
142
+ elementRef = inject((ElementRef));
143
+ /**
144
+ * NgControl opcional - presente quando usado com reactive forms ou ngModel.
145
+ * Usamos `optional: true` e `self: true` para injetar apenas se estiver no mesmo elemento.
146
+ */
147
+ ngControl = inject(NgControl, { optional: true, self: true });
148
+ /**
149
+ * Tipo de transformação a ser aplicada: 'uppercase' | 'lowercase' | null
150
+ * Quando null ou undefined, a transformação é desabilitada.
151
+ */
152
+ vpTextTransform = null;
153
+ ngOnInit() {
154
+ // Aplicar transformação no valor inicial se existir
155
+ const element = this.elementRef.nativeElement;
156
+ const transform = this.vpTextTransform;
157
+ if (transform && element.value && typeof element.value === 'string') {
158
+ const transformedValue = this.transformValue(element.value, transform);
159
+ if (transformedValue !== element.value) {
160
+ element.value = transformedValue;
161
+ // Atualizar o FormControl se existir
162
+ if (this.ngControl?.control) {
163
+ this.ngControl.control.setValue(transformedValue, { emitEvent: false });
164
+ }
165
+ }
166
+ }
167
+ }
168
+ onInput(event) {
169
+ const inputElement = event.target;
170
+ const transform = this.vpTextTransform;
171
+ // Verifica se a transformação está habilitada
172
+ if (!transform || !inputElement.value) {
173
+ return;
174
+ }
175
+ const currentValue = inputElement.value;
176
+ if (typeof currentValue !== 'string') {
177
+ return;
178
+ }
179
+ // Preserva a posição do cursor
180
+ const start = inputElement.selectionStart;
181
+ const end = inputElement.selectionEnd;
182
+ // Aplica a transformação
183
+ const transformedValue = this.transformValue(currentValue, transform);
184
+ // Se o valor já está transformado, não faz nada
185
+ if (currentValue === transformedValue) {
186
+ return;
187
+ }
188
+ // Atualiza o valor do elemento
189
+ inputElement.value = transformedValue;
190
+ // Restaura a posição do cursor (apenas para inputs de texto)
191
+ if (this.isTextInput(inputElement)) {
192
+ const newStart = Math.min(start ?? 0, transformedValue.length);
193
+ const newEnd = Math.min(end ?? 0, transformedValue.length);
194
+ inputElement.setSelectionRange(newStart, newEnd);
195
+ }
196
+ // Se NgControl estiver presente (reactive forms ou ngModel), atualiza através dele
197
+ if (this.ngControl?.control) {
198
+ this.ngControl.control.setValue(transformedValue, { emitEvent: false });
199
+ // Emite o evento manualmente para garantir que os listeners sejam notificados
200
+ this.ngControl.control.updateValueAndValidity({ emitEvent: true });
201
+ }
202
+ else {
203
+ // Para elementos sem NgControl, dispara evento input manualmente
204
+ // Isso garante compatibilidade com listeners diretos no elemento
205
+ const inputEvent = new Event('input', {
206
+ bubbles: true,
207
+ cancelable: true,
208
+ });
209
+ inputElement.dispatchEvent(inputEvent);
210
+ }
211
+ }
212
+ /**
213
+ * Aplica a transformação de texto baseada no tipo especificado.
214
+ */
215
+ transformValue(value, transform) {
216
+ return transform === 'uppercase' ? value.toUpperCase() : value.toLowerCase();
217
+ }
218
+ /**
219
+ * Verifica se o elemento é um input de texto que suporta seleção de cursor.
220
+ */
221
+ isTextInput(element) {
222
+ if (element.tagName === 'TEXTAREA') {
223
+ return true;
224
+ }
225
+ const inputElement = element;
226
+ return (inputElement.type === 'text' ||
227
+ inputElement.type === 'search' ||
228
+ inputElement.type === 'email' ||
229
+ inputElement.type === 'url' ||
230
+ inputElement.type === 'tel' ||
231
+ !inputElement.type // type padrão é 'text'
232
+ );
233
+ }
234
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: TextTransformDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
235
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.7", type: TextTransformDirective, isStandalone: true, selector: "[vpTextTransform]", inputs: { vpTextTransform: "vpTextTransform" }, host: { listeners: { "input": "onInput($event)" } }, ngImport: i0 });
236
+ }
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: TextTransformDirective, decorators: [{
238
+ type: Directive,
239
+ args: [{
240
+ selector: '[vpTextTransform]',
241
+ standalone: true,
242
+ }]
243
+ }], propDecorators: { vpTextTransform: [{
244
+ type: Input
245
+ }], onInput: [{
246
+ type: HostListener,
247
+ args: ['input', ['$event']]
248
+ }] } });
249
+
118
250
  class InputTextFieldComponent {
119
251
  form = input.required(...(ngDevMode ? [{ debugName: "form" }] : []));
120
252
  field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
@@ -122,24 +254,158 @@ class InputTextFieldComponent {
122
254
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.7", type: InputTextFieldComponent, isStandalone: true, selector: "vp-input-text-field", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
123
255
  <div [formGroup]="form()">
124
256
  <p-iftalabel>
125
- <input pInputText [id]="field().key" [type]="field().controlType" [formControlName]="field().key" [placeholder]="field().placeholder || ''" />
257
+ <input
258
+ pInputText
259
+ [id]="field().key"
260
+ [type]="field().controlType"
261
+ [formControlName]="field().key"
262
+ [placeholder]="field().placeholder || ''"
263
+ [vpTextTransform]="field().textTransform || null"
264
+ />
126
265
  <label [for]="field().key">{{ field().label }}</label>
127
266
  </p-iftalabel>
128
267
  </div>
129
- `, isInline: true, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}input{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IftaLabelModule }, { kind: "component", type: i2.IftaLabel, selector: "p-iftalabel, p-iftaLabel, p-ifta-label" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
268
+ `, isInline: true, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}input{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IftaLabelModule }, { kind: "component", type: i2.IftaLabel, selector: "p-iftalabel, p-iftaLabel, p-ifta-label" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "directive", type: TextTransformDirective, selector: "[vpTextTransform]", inputs: ["vpTextTransform"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
130
269
  }
131
270
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: InputTextFieldComponent, decorators: [{
132
271
  type: Component,
133
- args: [{ selector: 'vp-input-text-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, InputTextModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
272
+ args: [{ selector: 'vp-input-text-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, InputTextModule, TextTransformDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: `
134
273
  <div [formGroup]="form()">
135
274
  <p-iftalabel>
136
- <input pInputText [id]="field().key" [type]="field().controlType" [formControlName]="field().key" [placeholder]="field().placeholder || ''" />
275
+ <input
276
+ pInputText
277
+ [id]="field().key"
278
+ [type]="field().controlType"
279
+ [formControlName]="field().key"
280
+ [placeholder]="field().placeholder || ''"
281
+ [vpTextTransform]="field().textTransform || null"
282
+ />
137
283
  <label [for]="field().key">{{ field().label }}</label>
138
284
  </p-iftalabel>
139
285
  </div>
140
286
  `, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}input{width:100%}\n"] }]
141
287
  }], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: true }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }] } });
142
288
 
289
+ class InputButtonFieldComponent {
290
+ form = input.required(...(ngDevMode ? [{ debugName: "form" }] : []));
291
+ field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
292
+ buttonConfig() {
293
+ return this.field().buttonConfig;
294
+ }
295
+ buttonPosition() {
296
+ return this.buttonConfig()?.position || 'right';
297
+ }
298
+ isFieldDisabled() {
299
+ const control = this.form().get(this.field().key);
300
+ return control?.disabled ?? false;
301
+ }
302
+ onButtonClick() {
303
+ const control = this.form().get(this.field().key);
304
+ const value = control?.value;
305
+ const callback = this.field().buttonCallback;
306
+ if (callback) {
307
+ callback(this.field().key, value);
308
+ }
309
+ }
310
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: InputButtonFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
311
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.7", type: InputButtonFieldComponent, isStandalone: true, selector: "vp-input-button-field", inputs: { form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
312
+ <div [formGroup]="form()">
313
+ <p-inputgroup>
314
+ @if (buttonPosition() === 'left') {
315
+ <p-button
316
+ type="button"
317
+ [icon]="buttonConfig()?.icon || ''"
318
+ [label]="buttonConfig()?.label || ''"
319
+ [severity]="buttonConfig()?.severity || 'primary'"
320
+ [pTooltip]="buttonConfig()?.tooltip || ''"
321
+ tooltipPosition="top"
322
+ (click)="onButtonClick()"
323
+ [disabled]="isFieldDisabled()"
324
+ />
325
+ }
326
+
327
+ <p-iftalabel>
328
+ <input
329
+ pInputText
330
+ [id]="field().key"
331
+ [formControlName]="field().key"
332
+ [placeholder]="field().placeholder || ''"
333
+ [vpTextTransform]="field().textTransform || null"
334
+ />
335
+ <label [for]="field().key">{{ field().label }}</label>
336
+ </p-iftalabel>
337
+
338
+ @if (buttonPosition() === 'right') {
339
+ <p-button
340
+ type="button"
341
+ [icon]="buttonConfig()?.icon || ''"
342
+ [label]="buttonConfig()?.label || ''"
343
+ [severity]="buttonConfig()?.severity || 'primary'"
344
+ [pTooltip]="buttonConfig()?.tooltip || ''"
345
+ tooltipPosition="top"
346
+ (click)="onButtonClick()"
347
+ [disabled]="isFieldDisabled()"
348
+ />
349
+ }
350
+ </p-inputgroup>
351
+ </div>
352
+ `, isInline: true, styles: [":host{display:block;width:100%}p-inputgroup{display:flex;width:100%}p-iftalabel{flex:1}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IftaLabelModule }, { kind: "component", type: i2.IftaLabel, selector: "p-iftalabel, p-iftaLabel, p-ifta-label" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pInputTextPT", "pInputTextUnstyled", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "component", type: i4.InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "directive", type: TextTransformDirective, selector: "[vpTextTransform]", inputs: ["vpTextTransform"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
353
+ }
354
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: InputButtonFieldComponent, decorators: [{
355
+ type: Component,
356
+ args: [{ selector: 'vp-input-button-field', standalone: true, imports: [
357
+ ReactiveFormsModule,
358
+ IftaLabelModule,
359
+ InputTextModule,
360
+ InputGroupModule,
361
+ InputGroupAddonModule,
362
+ ButtonModule,
363
+ TooltipModule,
364
+ TextTransformDirective,
365
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: `
366
+ <div [formGroup]="form()">
367
+ <p-inputgroup>
368
+ @if (buttonPosition() === 'left') {
369
+ <p-button
370
+ type="button"
371
+ [icon]="buttonConfig()?.icon || ''"
372
+ [label]="buttonConfig()?.label || ''"
373
+ [severity]="buttonConfig()?.severity || 'primary'"
374
+ [pTooltip]="buttonConfig()?.tooltip || ''"
375
+ tooltipPosition="top"
376
+ (click)="onButtonClick()"
377
+ [disabled]="isFieldDisabled()"
378
+ />
379
+ }
380
+
381
+ <p-iftalabel>
382
+ <input
383
+ pInputText
384
+ [id]="field().key"
385
+ [formControlName]="field().key"
386
+ [placeholder]="field().placeholder || ''"
387
+ [vpTextTransform]="field().textTransform || null"
388
+ />
389
+ <label [for]="field().key">{{ field().label }}</label>
390
+ </p-iftalabel>
391
+
392
+ @if (buttonPosition() === 'right') {
393
+ <p-button
394
+ type="button"
395
+ [icon]="buttonConfig()?.icon || ''"
396
+ [label]="buttonConfig()?.label || ''"
397
+ [severity]="buttonConfig()?.severity || 'primary'"
398
+ [pTooltip]="buttonConfig()?.tooltip || ''"
399
+ tooltipPosition="top"
400
+ (click)="onButtonClick()"
401
+ [disabled]="isFieldDisabled()"
402
+ />
403
+ }
404
+ </p-inputgroup>
405
+ </div>
406
+ `, styles: [":host{display:block;width:100%}p-inputgroup{display:flex;width:100%}p-iftalabel{flex:1}\n"] }]
407
+ }], propDecorators: { form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: true }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }] } });
408
+
143
409
  class NumberInputFieldComponent {
144
410
  form = input.required(...(ngDevMode ? [{ debugName: "form" }] : []));
145
411
  field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
@@ -258,15 +524,16 @@ class TextareaFieldComponent {
258
524
  [rows]="field().textareaRows ?? 1"
259
525
  [cols]="field().textareaCols"
260
526
  [autoResize]="field().textareaAutoResize ?? false"
527
+ [vpTextTransform]="field().textTransform || null"
261
528
  ></textarea>
262
529
  <label [for]="field().key">{{ field().label }}</label>
263
530
  </p-iftalabel>
264
531
  </div>
265
- `, isInline: true, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}textarea{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IftaLabelModule }, { kind: "component", type: i2.IftaLabel, selector: "p-iftalabel, p-iftaLabel, p-ifta-label" }, { kind: "ngmodule", type: TextareaModule }, { kind: "directive", type: i3$5.Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["pTextareaPT", "pTextareaUnstyled", "autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
532
+ `, isInline: true, styles: [":host{display:block;width:100%}p-iftalabel{display:block;width:100%}textarea{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: IftaLabelModule }, { kind: "component", type: i2.IftaLabel, selector: "p-iftalabel, p-iftaLabel, p-ifta-label" }, { kind: "ngmodule", type: TextareaModule }, { kind: "directive", type: i3$5.Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["pTextareaPT", "pTextareaUnstyled", "autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }, { kind: "directive", type: TextTransformDirective, selector: "[vpTextTransform]", inputs: ["vpTextTransform"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
266
533
  }
267
534
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: TextareaFieldComponent, decorators: [{
268
535
  type: Component,
269
- args: [{ selector: 'vp-textarea-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, TextareaModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
536
+ args: [{ selector: 'vp-textarea-field', standalone: true, imports: [ReactiveFormsModule, IftaLabelModule, TextareaModule, TextTransformDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: `
270
537
  <div [formGroup]="form()">
271
538
  <p-iftalabel>
272
539
  <textarea
@@ -277,6 +544,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImpor
277
544
  [rows]="field().textareaRows ?? 1"
278
545
  [cols]="field().textareaCols"
279
546
  [autoResize]="field().textareaAutoResize ?? false"
547
+ [vpTextTransform]="field().textTransform || null"
280
548
  ></textarea>
281
549
  <label [for]="field().key">{{ field().label }}</label>
282
550
  </p-iftalabel>
@@ -381,6 +649,7 @@ class DynamicFormComponent {
381
649
  datepicker: DatePickerFieldComponent,
382
650
  textarea: TextareaFieldComponent,
383
651
  toggleswitch: ToggleSwitchFieldComponent,
652
+ 'input-button': InputButtonFieldComponent,
384
653
  };
385
654
  ngOnInit() {
386
655
  const configValue = this.config();
@@ -460,6 +729,7 @@ class DynamicFormComponent {
460
729
  case 'email':
461
730
  case 'password':
462
731
  case 'textarea':
732
+ case 'input-button':
463
733
  return '';
464
734
  case 'number':
465
735
  return null;
@@ -492,11 +762,11 @@ class DynamicFormComponent {
492
762
  return control;
493
763
  }
494
764
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: DynamicFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
495
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.7", type: DynamicFormComponent, isStandalone: true, selector: "vp-dynamic-form", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { formReady: "formReady" }, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n @for (field of config(); track field.key) {\n @if (getFieldComponent(field.controlType); as fieldComponent) {\n <div [class]=\"'form-field-wrapper ' + (field.styleClass || '')\">\n <!-- Dynamically render the correct field component -->\n <ng-container [ngComponentOutlet]=\"fieldComponent\" [ngComponentOutletInputs]=\"{ form: form, field: field }\" />\n\n @if (field.hint) {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component -->\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n </div>\n } @else {\n <div class=\"form-field-wrapper\">\n <small class=\"p-error\">Tipo de campo '{{ field.controlType }}' n\u00E3o encontrado.</small>\n </div>\n }\n }\n</form>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.dynamic-form-container{display:flex;flex-direction:column;gap:1.75rem;padding:1rem;border:1px solid var(--p-surface-border);border-radius:var(--p-border-radius);background-color:var(--p-surface-section)}.form-field-wrapper{display:flex;flex-direction:column;position:relative}:is(p-inputNumber,p-password,p-select,p-iftalabel){width:100%}:host ::ng-deep .p-password,:host ::ng-deep .p-password input,:host ::ng-deep .p-inputnumber,:host ::ng-deep .p-inputnumber input,:host ::ng-deep .p-datepicker input,:host ::ng-deep .p-select{width:100%!important}input[pInputText]{width:100%}.hint-text{margin-top:.5rem;color:var(--p-text-muted-color)}.error-messages{margin-top:.5rem;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DynamicFormErrorComponent, selector: "vp-form-field-error", inputs: ["control"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
765
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.7", type: DynamicFormComponent, isStandalone: true, selector: "vp-dynamic-form", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { formReady: "formReady" }, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n @for (field of config(); track field.key) { @if (getFieldComponent(field.controlType); as\n fieldComponent) {\n <div [class]=\"'form-field-wrapper ' + (field.styleClass || '')\">\n <!-- Dynamically render the correct field component -->\n <ng-container\n [ngComponentOutlet]=\"fieldComponent\"\n [ngComponentOutletInputs]=\"{ form: form, field: field }\"\n />\n\n @if (field.hint) {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component -->\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n </div>\n } @else {\n <div class=\"form-field-wrapper\">\n <small class=\"p-error\">Tipo de campo '{{ field.controlType }}' n\u00E3o encontrado.</small>\n </div>\n } }\n</form>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.dynamic-form-container{display:flex;flex-direction:column;gap:1.75rem;padding:1rem;border:1px solid var(--p-surface-border);border-radius:var(--p-border-radius);background-color:var(--p-surface-section)}.form-field-wrapper{display:flex;flex-direction:column;position:relative}:is(p-inputNumber,p-password,p-select,p-iftalabel){width:100%}:host ::ng-deep .p-password,:host ::ng-deep .p-password input,:host ::ng-deep .p-inputnumber,:host ::ng-deep .p-inputnumber input,:host ::ng-deep .p-datepicker input,:host ::ng-deep .p-select{width:100%!important}input[pInputText]{width:100%}.hint-text{margin-top:.5rem;color:var(--p-text-muted-color)}.error-messages{margin-top:.5rem;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DynamicFormErrorComponent, selector: "vp-form-field-error", inputs: ["control"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
496
766
  }
497
767
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.7", ngImport: i0, type: DynamicFormComponent, decorators: [{
498
768
  type: Component,
499
- args: [{ selector: 'vp-dynamic-form', standalone: true, imports: [CommonModule, ReactiveFormsModule, NgComponentOutlet, DynamicFormErrorComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n @for (field of config(); track field.key) {\n @if (getFieldComponent(field.controlType); as fieldComponent) {\n <div [class]=\"'form-field-wrapper ' + (field.styleClass || '')\">\n <!-- Dynamically render the correct field component -->\n <ng-container [ngComponentOutlet]=\"fieldComponent\" [ngComponentOutletInputs]=\"{ form: form, field: field }\" />\n\n @if (field.hint) {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component -->\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n </div>\n } @else {\n <div class=\"form-field-wrapper\">\n <small class=\"p-error\">Tipo de campo '{{ field.controlType }}' n\u00E3o encontrado.</small>\n </div>\n }\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"] }]
769
+ args: [{ selector: 'vp-dynamic-form', standalone: true, imports: [CommonModule, ReactiveFormsModule, NgComponentOutlet, DynamicFormErrorComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n @for (field of config(); track field.key) { @if (getFieldComponent(field.controlType); as\n fieldComponent) {\n <div [class]=\"'form-field-wrapper ' + (field.styleClass || '')\">\n <!-- Dynamically render the correct field component -->\n <ng-container\n [ngComponentOutlet]=\"fieldComponent\"\n [ngComponentOutletInputs]=\"{ form: form, field: field }\"\n />\n\n @if (field.hint) {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component -->\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n </div>\n } @else {\n <div class=\"form-field-wrapper\">\n <small class=\"p-error\">Tipo de campo '{{ field.controlType }}' n\u00E3o encontrado.</small>\n </div>\n } }\n</form>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%}.dynamic-form-container{display:flex;flex-direction:column;gap:1.75rem;padding:1rem;border:1px solid var(--p-surface-border);border-radius:var(--p-border-radius);background-color:var(--p-surface-section)}.form-field-wrapper{display:flex;flex-direction:column;position:relative}:is(p-inputNumber,p-password,p-select,p-iftalabel){width:100%}:host ::ng-deep .p-password,:host ::ng-deep .p-password input,:host ::ng-deep .p-inputnumber,:host ::ng-deep .p-inputnumber input,:host ::ng-deep .p-datepicker input,:host ::ng-deep .p-select{width:100%!important}input[pInputText]{width:100%}.hint-text{margin-top:.5rem;color:var(--p-text-muted-color)}.error-messages{margin-top:.5rem;display:flex;flex-direction:column}\n"] }]
500
770
  }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], formReady: [{ type: i0.Output, args: ["formReady"] }] } });
501
771
 
502
772
  const PRIMENG_PTBR = {
@@ -664,5 +934,5 @@ function provideDynamicFormConfig(messages) {
664
934
  * Generated bundle index. Do not edit.
665
935
  */
666
936
 
667
- export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
937
+ export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputButtonFieldComponent, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextTransformDirective, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
668
938
  //# sourceMappingURL=vipsolucoes-dynamic-form.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"vipsolucoes-dynamic-form.mjs","sources":["../../../projects/dynamic-form/src/lib/interfaces/error-messages.interface.ts","../../../projects/dynamic-form/src/lib/components/form-field-error/form-field-error.component.ts","../../../projects/dynamic-form/src/lib/fields/datepicker-field.component.ts","../../../projects/dynamic-form/src/lib/fields/input-text-field.component.ts","../../../projects/dynamic-form/src/lib/fields/number-input-field.component.ts","../../../projects/dynamic-form/src/lib/fields/password-field.component.ts","../../../projects/dynamic-form/src/lib/fields/select-field.component.ts","../../../projects/dynamic-form/src/lib/fields/textarea-field.component.ts","../../../projects/dynamic-form/src/lib/fields/toggleswitch-field.component.ts","../../../projects/dynamic-form/src/lib/services/field-registry.service.ts","../../../projects/dynamic-form/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/dynamic-form/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/dynamic-form/src/lib/i18n/primeng-ptbr.ts","../../../projects/dynamic-form/src/lib/providers/dynamic-form.providers.ts","../../../projects/dynamic-form/src/public-api.ts","../../../projects/dynamic-form/src/vipsolucoes-dynamic-form.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Interface para configuração de mensagens de erro customizadas.\n */\nexport interface DynamicFormErrorMessages {\n required?: string;\n email?: string;\n minlength?: (requiredLength: number) => string;\n maxlength?: (requiredLength: number) => string;\n custom?: (error: any) => string;\n}\n\n/**\n * InjectionToken para prover mensagens de erro customizadas.\n */\nexport const DYNAMIC_FORM_ERROR_MESSAGES = new InjectionToken<DynamicFormErrorMessages>('DYNAMIC_FORM_ERROR_MESSAGES');\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport { DYNAMIC_FORM_ERROR_MESSAGES, DynamicFormErrorMessages } from '../../interfaces/error-messages.interface';\n\n@Component({\n selector: 'vp-form-field-error',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (errorMessage) {\n <small class=\"p-error\">{{ errorMessage }}</small>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n margin-top: 0.5rem;\n min-height: 1rem;\n }\n .p-error {\n color: var(--p-red-500, #ef4444);\n font-size: 0.875rem;\n }\n `,\n ],\n})\nexport class DynamicFormErrorComponent {\n control = input.required<AbstractControl>();\n\n private readonly customMessages = inject(DYNAMIC_FORM_ERROR_MESSAGES, { optional: true });\n\n // Mapeamento de erros para mensagens\n private readonly defaultErrorMessages: { [key: string]: (err: any) => string } = {\n required: () => this.customMessages?.required ?? 'Este campo é obrigatório.',\n email: () => this.customMessages?.email ?? 'Por favor, insira um e-mail válido.',\n minlength: (err) => this.customMessages?.minlength?.(err.requiredLength) ?? `Mínimo de ${err.requiredLength} caracteres.`,\n maxlength: (err) => this.customMessages?.maxlength?.(err.requiredLength) ?? `Máximo de ${err.requiredLength} caracteres.`,\n custom: (err) => (this.customMessages?.custom ? this.customMessages.custom(err) : err),\n };\n\n // Getter simples - Angular detecta mudanças automaticamente\n get errorMessage(): string | null {\n const ctrl = this.control();\n if (!ctrl || !ctrl.errors || (!ctrl.touched && !ctrl.dirty)) {\n return null;\n }\n\n const errorKey = Object.keys(ctrl.errors)[0];\n return this.defaultErrorMessages[errorKey] ? this.defaultErrorMessages[errorKey](ctrl.errors[errorKey]) : 'Campo inválido.';\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { IftaLabelModule } from 'primeng/iftalabel';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-datepicker-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, DatePickerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-datepicker\n [inputId]=\"field().key\"\n [formControlName]=\"field().key\"\n [showButtonBar]=\"true\"\n [iconDisplay]=\"'input'\"\n [placeholder]=\"field().placeholder || ''\"\n [dateFormat]=\"dateFormat()\"\n [view]=\"field().dateViewType || 'date'\"\n />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n p-datepicker {\n width: 100%;\n }\n `,\n ],\n})\nexport class DatePickerFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n\n readonly dateFormat = computed(() => {\n const viewType = this.field().dateViewType || 'date';\n const customFormat = this.field().dateFormat;\n\n if (viewType === 'month') {\n return 'mm/yy';\n }\n if (viewType === 'year') {\n return 'yy';\n }\n\n return customFormat || 'dd/mm/yy';\n });\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { InputTextModule } from 'primeng/inputtext';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-input-text-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, InputTextModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <input pInputText [id]=\"field().key\" [type]=\"field().controlType\" [formControlName]=\"field().key\" [placeholder]=\"field().placeholder || ''\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n input {\n width: 100%;\n }\n `,\n ],\n})\nexport class InputTextFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { InputNumberModule } from 'primeng/inputnumber';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-number-input-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, InputNumberModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-inputNumber [id]=\"field().key\" [formControlName]=\"field().key\" [placeholder]=\"field().placeholder || ''\" styleClass=\"w-full\" class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n :host ::ng-deep p-inputNumber,\n :host ::ng-deep .p-inputnumber,\n :host ::ng-deep .p-inputnumber input {\n width: 100%;\n }\n `,\n ],\n})\nexport class NumberInputFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { PasswordModule } from 'primeng/password';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-password-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, PasswordModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-password\n [id]=\"field().key\"\n [formControlName]=\"field().key\"\n [feedback]=\"false\"\n [toggleMask]=\"true\"\n [placeholder]=\"field().placeholder || ''\"\n styleClass=\"w-full\"\n class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n :host ::ng-deep .p-password,\n :host ::ng-deep .p-password input {\n width: 100%;\n }\n `,\n ],\n})\nexport class PasswordFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { SelectModule } from 'primeng/select';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-select-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, SelectModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-select\n [inputId]=\"field().key\"\n [formControlName]=\"field().key\"\n [options]=\"field().options!\"\n [placeholder]=\"field().placeholder || 'Selecione'\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n p-select {\n width: 100%;\n }\n `,\n ],\n})\nexport class SelectFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { TextareaModule } from 'primeng/textarea';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-textarea-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, TextareaModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <textarea\n pTextarea\n [id]=\"field().key\"\n [formControlName]=\"field().key\"\n [placeholder]=\"field().placeholder || ''\"\n [rows]=\"field().textareaRows ?? 1\"\n [cols]=\"field().textareaCols\"\n [autoResize]=\"field().textareaAutoResize ?? false\"\n ></textarea>\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n textarea {\n width: 100%;\n }\n `,\n ],\n})\nexport class TextareaFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-toggleswitch-field',\n standalone: true,\n imports: [ReactiveFormsModule, ToggleSwitchModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\" class=\"toggleswitch-field\">\n <p-toggleswitch\n [formControlName]=\"field().key\"\n [inputId]=\"field().key\"\n [invalid]=\"isInvalid()\"\n [trueValue]=\"field().toggleTrueValue ?? true\"\n [falseValue]=\"field().toggleFalseValue ?? false\" />\n <label [for]=\"field().key\" class=\"toggleswitch-label\">{{ field().label }}</label>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n .toggleswitch-field {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n width: 100%;\n }\n .toggleswitch-label {\n cursor: pointer;\n user-select: none;\n font-size: 0.875rem;\n color: var(--p-text-color, #333);\n margin: 0;\n }\n p-toggleswitch {\n flex-shrink: 0;\n }\n `,\n ],\n})\nexport class ToggleSwitchFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n\n isInvalid = computed(() => {\n const control = this.form().get(this.field().key);\n return control ? control.invalid && (control.touched || control.dirty) : false;\n });\n}\n","import { Injectable, signal, Type } from '@angular/core';\n\n/**\n * Serviço para registro de campos customizados.\n * Permite adicionar novos tipos de campos dinamicamente.\n */\n@Injectable({ providedIn: 'root' })\nexport class FieldRegistryService {\n private readonly registry = signal<Map<string, Type<any>>>(new Map());\n\n /**\n * Registra um novo tipo de campo.\n * @param type Tipo do campo (ex: 'custom', 'file', etc.)\n * @param component Componente Angular que renderiza o campo\n */\n registerField(type: string, component: Type<any>): void {\n this.registry.update((map) => new Map(map).set(type, component));\n }\n\n /**\n * Obtém o componente registrado para um tipo de campo.\n * @param type Tipo do campo\n * @returns Componente Angular ou undefined se não encontrado\n */\n getField(type: string): Type<any> | undefined {\n return this.registry().get(type);\n }\n\n /**\n * Remove um tipo de campo do registro.\n * @param type Tipo do campo a ser removido\n */\n unregisterField(type: string): void {\n this.registry.update((map) => {\n const newMap = new Map(map);\n newMap.delete(type);\n return newMap;\n });\n }\n\n /**\n * Limpa todos os campos registrados.\n */\n clear(): void {\n this.registry.set(new Map());\n }\n}\n","import { CommonModule, NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, output, Type } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { DynamicFormErrorComponent } from '../form-field-error/form-field-error.component';\nimport { DatePickerFieldComponent } from '../../fields/datepicker-field.component';\nimport { InputTextFieldComponent } from '../../fields/input-text-field.component';\nimport { NumberInputFieldComponent } from '../../fields/number-input-field.component';\nimport { PasswordFieldComponent } from '../../fields/password-field.component';\nimport { SelectFieldComponent } from '../../fields/select-field.component';\nimport { TextareaFieldComponent } from '../../fields/textarea-field.component';\nimport { ToggleSwitchFieldComponent } from '../../fields/toggleswitch-field.component';\nimport { iFormConfig } from '../../interfaces/form-config.interface';\nimport { FieldRegistryService } from '../../services/field-registry.service';\n\n@Component({\n selector: 'vp-dynamic-form',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgComponentOutlet, DynamicFormErrorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.scss',\n})\nexport class DynamicFormComponent implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly fieldRegistry = inject(FieldRegistryService);\n\n config = input.required<iFormConfig[]>();\n formReady = output<FormGroup>();\n\n form = new FormGroup({});\n\n readonly fieldComponents: { [key: string]: Type<any> } = {\n text: InputTextFieldComponent,\n email: InputTextFieldComponent,\n password: PasswordFieldComponent,\n number: NumberInputFieldComponent,\n select: SelectFieldComponent,\n datepicker: DatePickerFieldComponent,\n textarea: TextareaFieldComponent,\n toggleswitch: ToggleSwitchFieldComponent,\n };\n\n ngOnInit(): void {\n const configValue = this.config();\n if (configValue && configValue.length > 0) {\n this.buildForm(configValue);\n this.setupFieldDependencies(configValue);\n this.formReady.emit(this.form);\n }\n }\n\n private buildForm(config: iFormConfig[]): void {\n config.forEach((field) => {\n // Para toggle switch, o valor padrão é false se não especificado\n const defaultValue = field.controlType === 'toggleswitch' ? (field.value ?? false) : (field.value ?? '');\n\n // Se o campo tem enabledWhen, ele deve começar desabilitado a menos que o toggle já esteja ativo\n const shouldBeDisabled = field.disabled ?? (field.enabledWhen ? !this.getToggleValue(field.enabledWhen, config) : false);\n\n const control = shouldBeDisabled\n ? new FormControl(\n { value: defaultValue, disabled: true },\n {\n validators: field.validators ?? [],\n }\n )\n : new FormControl(defaultValue, {\n validators: field.validators ?? [],\n });\n this.form.addControl(field.key, control);\n });\n }\n\n private setupFieldDependencies(config: iFormConfig[]): void {\n config.forEach((field) => {\n if (!field.enabledWhen) {\n return;\n }\n\n const toggleField = config.find((f) => f.key === field.enabledWhen);\n\n if (!toggleField) {\n console.warn(\n `DynamicFormComponent: Campo '${field.key}' referencia '${field.enabledWhen}' em enabledWhen, mas este campo não existe no formulário.`\n );\n return;\n }\n\n if (toggleField.controlType !== 'toggleswitch') {\n console.warn(\n `DynamicFormComponent: Campo '${field.key}' referencia '${field.enabledWhen}' em enabledWhen, mas este campo não é do tipo 'toggleswitch'.`\n );\n return;\n }\n\n const toggleControl = this.form.get(field.enabledWhen);\n const dependentControl = this.form.get(field.key);\n\n if (!toggleControl || !dependentControl) {\n console.warn(\n `DynamicFormComponent: Não foi possível encontrar os controles para configurar a dependência entre '${field.enabledWhen}' e '${field.key}'.`\n );\n return;\n }\n\n // Configura a subscription para reagir às mudanças do toggle\n toggleControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((toggleValue) => {\n const isToggleActive = toggleValue === (toggleField.toggleTrueValue ?? true);\n\n if (isToggleActive) {\n dependentControl.enable();\n } else {\n // Limpa o valor do campo antes de desabilitá-lo\n const resetValue = this.getResetValueForFieldType(field.controlType);\n dependentControl.setValue(resetValue, { emitEvent: false });\n dependentControl.disable();\n }\n });\n });\n }\n\n private getToggleValue(toggleKey: string, config: iFormConfig[]): boolean {\n const toggleField = config.find((f) => f.key === toggleKey);\n if (!toggleField || toggleField.controlType !== 'toggleswitch') {\n return false;\n }\n\n const toggleTrueValue = toggleField.toggleTrueValue ?? true;\n const toggleValue = toggleField.value ?? false;\n\n return toggleValue === toggleTrueValue;\n }\n\n /**\n * Retorna o valor padrão de reset para cada tipo de campo.\n * Usado quando um campo dependente é desabilitado e precisa ser limpo.\n */\n private getResetValueForFieldType(controlType: string): any {\n switch (controlType) {\n case 'text':\n case 'email':\n case 'password':\n case 'textarea':\n return '';\n case 'number':\n return null;\n case 'select':\n return null;\n case 'datepicker':\n return null;\n default:\n return '';\n }\n }\n\n /**\n * Obtém o componente a ser renderizado para um tipo de campo.\n * Primeiro verifica no registro customizado, depois nos componentes padrão.\n */\n getFieldComponent(controlType: string): Type<any> | null {\n // Verifica primeiro no registro customizado\n const customComponent = this.fieldRegistry.getField(controlType);\n if (customComponent) {\n return customComponent;\n }\n\n // Fallback para componentes padrão\n return this.fieldComponents[controlType] || null;\n }\n\n getControl(key: string): AbstractControl {\n const control = this.form.get(key);\n if (!control) {\n console.warn(`DynamicFormComponent: Controle não encontrado para a chave: ${key}`);\n }\n return control!;\n }\n}\n","<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n @for (field of config(); track field.key) {\n @if (getFieldComponent(field.controlType); as fieldComponent) {\n <div [class]=\"'form-field-wrapper ' + (field.styleClass || '')\">\n <!-- Dynamically render the correct field component -->\n <ng-container [ngComponentOutlet]=\"fieldComponent\" [ngComponentOutletInputs]=\"{ form: form, field: field }\" />\n\n @if (field.hint) {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component -->\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n </div>\n } @else {\n <div class=\"form-field-wrapper\">\n <small class=\"p-error\">Tipo de campo '{{ field.controlType }}' não encontrado.</small>\n </div>\n }\n }\n</form>\n","import { Translation } from 'primeng/api';\n\nexport const PRIMENG_PTBR: Translation = {\n // Filtros\n startsWith: 'Começa com',\n contains: 'Contém',\n notContains: 'Não contém',\n endsWith: 'Termina com',\n equals: 'Igual',\n notEquals: 'Diferente',\n noFilter: 'Sem filtro',\n lt: 'Menor que',\n lte: 'Menor ou igual a',\n gt: 'Maior que',\n gte: 'Maior ou igual a',\n is: 'É',\n isNot: 'Não é',\n before: 'Antes',\n after: 'Depois',\n dateIs: 'Data é',\n dateIsNot: 'Data não é',\n dateBefore: 'Data antes',\n dateAfter: 'Data depois',\n\n // Regras\n clear: 'Limpar',\n apply: 'Aplicar',\n matchAll: 'Corresponder a todos',\n matchAny: 'Corresponder a qualquer',\n addRule: 'Adicionar regra',\n removeRule: 'Remover regra',\n\n // Ações\n accept: 'Sim',\n reject: 'Não',\n choose: 'Escolher',\n upload: 'Enviar',\n cancel: 'Cancelar',\n completed: 'Concluído',\n pending: 'Pendente',\n\n // Arquivos\n fileSizeTypes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n emptyMessage: 'Nenhum registro encontrado',\n emptyFilterMessage: 'Nenhum resultado encontrado',\n fileChosenMessage: '{0} arquivo(s) selecionado(s)',\n noFileChosenMessage: 'Nenhum arquivo selecionado',\n\n // Datas\n dayNames: ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'],\n dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],\n dayNamesMin: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'],\n monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],\n monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],\n dateFormat: 'dd/mm/yy',\n firstDayOfWeek: 0,\n today: 'Hoje',\n weekHeader: 'Sem',\n\n // Password\n weak: 'Fraca',\n medium: 'Média',\n strong: 'Forte',\n passwordPrompt: 'Digite uma senha',\n\n // Date navigation\n chooseYear: 'Escolher ano',\n chooseMonth: 'Escolher mês',\n chooseDate: 'Escolher data',\n prevDecade: 'Década anterior',\n nextDecade: 'Próxima década',\n prevYear: 'Ano anterior',\n nextYear: 'Próximo ano',\n prevMonth: 'Mês anterior',\n nextMonth: 'Próximo mês',\n prevHour: 'Hora anterior',\n nextHour: 'Próxima hora',\n prevMinute: 'Minuto anterior',\n nextMinute: 'Próximo minuto',\n prevSecond: 'Segundo anterior',\n nextSecond: 'Próximo segundo',\n am: 'AM',\n pm: 'PM',\n\n // Busca / seleção\n searchMessage: 'Digite para pesquisar',\n selectionMessage: '{0} item(ns) selecionado(s)',\n emptySelectionMessage: 'Nenhum item selecionado',\n emptySearchMessage: 'Nenhum resultado encontrado',\n\n // ARIA (acessibilidade)\n aria: {\n trueLabel: 'Verdadeiro',\n falseLabel: 'Falso',\n nullLabel: 'Não selecionado',\n star: '1 estrela',\n stars: '{star} estrelas',\n selectAll: 'Selecionar todos',\n unselectAll: 'Desmarcar todos',\n close: 'Fechar',\n previous: 'Anterior',\n next: 'Próximo',\n navigation: 'Navegação',\n scrollTop: 'Rolar para o topo',\n moveTop: 'Mover para o topo',\n moveUp: 'Mover para cima',\n moveDown: 'Mover para baixo',\n moveBottom: 'Mover para o final',\n moveToTarget: 'Mover para o destino',\n moveToSource: 'Mover para a origem',\n moveAllToTarget: 'Mover todos para o destino',\n moveAllToSource: 'Mover todos para a origem',\n pageLabel: 'Página {page}',\n firstPageLabel: 'Primeira página',\n lastPageLabel: 'Última página',\n nextPageLabel: 'Próxima página',\n prevPageLabel: 'Página anterior',\n rowsPerPageLabel: 'Itens por página',\n previousPageLabel: 'Página anterior',\n jumpToPageDropdownLabel: 'Pular para página',\n jumpToPageInputLabel: 'Ir para página',\n selectRow: 'Selecionar linha',\n unselectRow: 'Desmarcar linha',\n expandRow: 'Expandir linha',\n collapseRow: 'Recolher linha',\n showFilterMenu: 'Mostrar menu de filtro',\n hideFilterMenu: 'Ocultar menu de filtro',\n filterOperator: 'Operador de filtro',\n filterConstraint: 'Restrição de filtro',\n editRow: 'Editar linha',\n saveEdit: 'Salvar edição',\n cancelEdit: 'Cancelar edição',\n listView: 'Visualização em lista',\n gridView: 'Visualização em grade',\n slide: 'Slide',\n slideNumber: 'Slide {slideNumber}',\n zoomImage: 'Ampliar imagem',\n zoomIn: 'Aumentar zoom',\n zoomOut: 'Reduzir zoom',\n rotateRight: 'Girar à direita',\n rotateLeft: 'Girar à esquerda',\n listLabel: 'Lista',\n selectColor: 'Selecionar cor',\n removeLabel: 'Remover',\n browseFiles: 'Procurar arquivos',\n maximizeLabel: 'Maximizar',\n minimizeLabel: 'Minimizar',\n },\n};\n","import { Provider } from '@angular/core';\n\nimport { DYNAMIC_FORM_ERROR_MESSAGES, DynamicFormErrorMessages } from '../interfaces/error-messages.interface';\n\n/**\n * Provider para configurar mensagens de erro customizadas.\n * @param messages Mensagens de erro customizadas\n * @returns Provider configurado\n */\nexport function provideDynamicFormConfig(messages?: DynamicFormErrorMessages): Provider[] {\n const providers: Provider[] = [];\n\n if (messages) {\n providers.push({\n provide: DYNAMIC_FORM_ERROR_MESSAGES,\n useValue: messages,\n });\n }\n\n return providers;\n}\n","import { PRIMENG_PTBR } from './lib/i18n/primeng-ptbr';\n/*\n * Public API Surface of @vipsolucoes/dynamic-form\n */\n\n// Componentes\nexport { DynamicFormComponent } from './lib/components/dynamic-form/dynamic-form.component';\nexport { DynamicFormErrorComponent } from './lib/components/form-field-error/form-field-error.component';\n\n// Fields (para uso standalone)\nexport { InputTextFieldComponent } from './lib/fields/input-text-field.component';\nexport { SelectFieldComponent } from './lib/fields/select-field.component';\nexport { DatePickerFieldComponent } from './lib/fields/datepicker-field.component';\nexport { NumberInputFieldComponent } from './lib/fields/number-input-field.component';\nexport { PasswordFieldComponent } from './lib/fields/password-field.component';\nexport { TextareaFieldComponent } from './lib/fields/textarea-field.component';\nexport { ToggleSwitchFieldComponent } from './lib/fields/toggleswitch-field.component';\n\n// Interfaces\nexport type { iFormConfig, iFieldOption } from './lib/interfaces/form-config.interface';\nexport type { DynamicFormErrorMessages } from './lib/interfaces/error-messages.interface';\nexport { DYNAMIC_FORM_ERROR_MESSAGES } from './lib/interfaces/error-messages.interface';\n\n// Services\nexport { FieldRegistryService } from './lib/services/field-registry.service';\n\n// Utility functions\nexport { PRIMENG_PTBR } from './lib/i18n/primeng-ptbr';\nexport { provideDynamicFormConfig } from './lib/providers/dynamic-form.providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i2","i1"],"mappings":"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"}
1
+ {"version":3,"file":"vipsolucoes-dynamic-form.mjs","sources":["../../../projects/dynamic-form/src/lib/interfaces/error-messages.interface.ts","../../../projects/dynamic-form/src/lib/components/form-field-error/form-field-error.component.ts","../../../projects/dynamic-form/src/lib/fields/datepicker-field.component.ts","../../../projects/dynamic-form/src/lib/directives/text-transform.directive.ts","../../../projects/dynamic-form/src/lib/fields/input-text-field.component.ts","../../../projects/dynamic-form/src/lib/fields/input-button-field.component.ts","../../../projects/dynamic-form/src/lib/fields/number-input-field.component.ts","../../../projects/dynamic-form/src/lib/fields/password-field.component.ts","../../../projects/dynamic-form/src/lib/fields/select-field.component.ts","../../../projects/dynamic-form/src/lib/fields/textarea-field.component.ts","../../../projects/dynamic-form/src/lib/fields/toggleswitch-field.component.ts","../../../projects/dynamic-form/src/lib/services/field-registry.service.ts","../../../projects/dynamic-form/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/dynamic-form/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/dynamic-form/src/lib/i18n/primeng-ptbr.ts","../../../projects/dynamic-form/src/lib/providers/dynamic-form.providers.ts","../../../projects/dynamic-form/src/public-api.ts","../../../projects/dynamic-form/src/vipsolucoes-dynamic-form.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Interface para configuração de mensagens de erro customizadas.\n */\nexport interface DynamicFormErrorMessages {\n required?: string;\n email?: string;\n minlength?: (requiredLength: number) => string;\n maxlength?: (requiredLength: number) => string;\n custom?: (error: any) => string;\n}\n\n/**\n * InjectionToken para prover mensagens de erro customizadas.\n */\nexport const DYNAMIC_FORM_ERROR_MESSAGES = new InjectionToken<DynamicFormErrorMessages>(\n 'DYNAMIC_FORM_ERROR_MESSAGES'\n);\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport { DYNAMIC_FORM_ERROR_MESSAGES, DynamicFormErrorMessages } from '../../interfaces/error-messages.interface';\n\n@Component({\n selector: 'vp-form-field-error',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (errorMessage) {\n <small class=\"p-error\">{{ errorMessage }}</small>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n margin-top: 0.5rem;\n min-height: 1rem;\n }\n .p-error {\n color: var(--p-red-500, #ef4444);\n font-size: 0.875rem;\n }\n `,\n ],\n})\nexport class DynamicFormErrorComponent {\n control = input.required<AbstractControl>();\n\n private readonly customMessages = inject(DYNAMIC_FORM_ERROR_MESSAGES, { optional: true });\n\n // Mapeamento de erros para mensagens\n private readonly defaultErrorMessages: { [key: string]: (err: any) => string } = {\n required: () => this.customMessages?.required ?? 'Este campo é obrigatório.',\n email: () => this.customMessages?.email ?? 'Por favor, insira um e-mail válido.',\n minlength: (err) => this.customMessages?.minlength?.(err.requiredLength) ?? `Mínimo de ${err.requiredLength} caracteres.`,\n maxlength: (err) => this.customMessages?.maxlength?.(err.requiredLength) ?? `Máximo de ${err.requiredLength} caracteres.`,\n custom: (err) => (this.customMessages?.custom ? this.customMessages.custom(err) : err),\n };\n\n // Getter simples - Angular detecta mudanças automaticamente\n get errorMessage(): string | null {\n const ctrl = this.control();\n if (!ctrl || !ctrl.errors || (!ctrl.touched && !ctrl.dirty)) {\n return null;\n }\n\n const errorKey = Object.keys(ctrl.errors)[0];\n return this.defaultErrorMessages[errorKey] ? this.defaultErrorMessages[errorKey](ctrl.errors[errorKey]) : 'Campo inválido.';\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { IftaLabelModule } from 'primeng/iftalabel';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-datepicker-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, DatePickerModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-datepicker\n [inputId]=\"field().key\"\n [formControlName]=\"field().key\"\n [showButtonBar]=\"true\"\n [iconDisplay]=\"'input'\"\n [placeholder]=\"field().placeholder || ''\"\n [dateFormat]=\"dateFormat()\"\n [view]=\"field().dateViewType || 'date'\"\n />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n p-datepicker {\n width: 100%;\n }\n `,\n ],\n})\nexport class DatePickerFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n\n readonly dateFormat = computed(() => {\n const viewType = this.field().dateViewType || 'date';\n const customFormat = this.field().dateFormat;\n\n if (viewType === 'month') {\n return 'mm/yy';\n }\n if (viewType === 'year') {\n return 'yy';\n }\n\n return customFormat || 'dd/mm/yy';\n });\n}\n","import { Directive, ElementRef, HostListener, inject, Input, OnInit } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n/**\n * Diretiva para transformar texto em uppercase ou lowercase em tempo real.\n * Funciona com Reactive Forms (NgControl) e elementos HTML nativos.\n *\n * @example\n * ```html\n * <!-- Uppercase -->\n * <input [vpTextTransform]=\"'uppercase'\" />\n *\n * <!-- Lowercase -->\n * <input [vpTextTransform]=\"'lowercase'\" />\n *\n * <!-- Desabilitado -->\n * <input [vpTextTransform]=\"null\" />\n * ```\n */\n@Directive({\n selector: '[vpTextTransform]',\n standalone: true,\n})\nexport class TextTransformDirective implements OnInit {\n private readonly elementRef = inject(ElementRef<HTMLInputElement | HTMLTextAreaElement>);\n\n /**\n * NgControl opcional - presente quando usado com reactive forms ou ngModel.\n * Usamos `optional: true` e `self: true` para injetar apenas se estiver no mesmo elemento.\n */\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n /**\n * Tipo de transformação a ser aplicada: 'uppercase' | 'lowercase' | null\n * Quando null ou undefined, a transformação é desabilitada.\n */\n @Input() vpTextTransform: 'uppercase' | 'lowercase' | null = null;\n\n ngOnInit(): void {\n // Aplicar transformação no valor inicial se existir\n const element = this.elementRef.nativeElement;\n const transform = this.vpTextTransform;\n\n if (transform && element.value && typeof element.value === 'string') {\n const transformedValue = this.transformValue(element.value, transform);\n if (transformedValue !== element.value) {\n element.value = transformedValue;\n\n // Atualizar o FormControl se existir\n if (this.ngControl?.control) {\n this.ngControl.control.setValue(transformedValue, { emitEvent: false });\n }\n }\n }\n }\n\n @HostListener('input', ['$event'])\n onInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement | HTMLTextAreaElement;\n const transform = this.vpTextTransform;\n\n // Verifica se a transformação está habilitada\n if (!transform || !inputElement.value) {\n return;\n }\n\n const currentValue = inputElement.value;\n if (typeof currentValue !== 'string') {\n return;\n }\n\n // Preserva a posição do cursor\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n\n // Aplica a transformação\n const transformedValue = this.transformValue(currentValue, transform);\n\n // Se o valor já está transformado, não faz nada\n if (currentValue === transformedValue) {\n return;\n }\n\n // Atualiza o valor do elemento\n inputElement.value = transformedValue;\n\n // Restaura a posição do cursor (apenas para inputs de texto)\n if (this.isTextInput(inputElement)) {\n const newStart = Math.min(start ?? 0, transformedValue.length);\n const newEnd = Math.min(end ?? 0, transformedValue.length);\n inputElement.setSelectionRange(newStart, newEnd);\n }\n\n // Se NgControl estiver presente (reactive forms ou ngModel), atualiza através dele\n if (this.ngControl?.control) {\n this.ngControl.control.setValue(transformedValue, { emitEvent: false });\n // Emite o evento manualmente para garantir que os listeners sejam notificados\n this.ngControl.control.updateValueAndValidity({ emitEvent: true });\n } else {\n // Para elementos sem NgControl, dispara evento input manualmente\n // Isso garante compatibilidade com listeners diretos no elemento\n const inputEvent = new Event('input', {\n bubbles: true,\n cancelable: true,\n });\n inputElement.dispatchEvent(inputEvent);\n }\n }\n\n /**\n * Aplica a transformação de texto baseada no tipo especificado.\n */\n private transformValue(value: string, transform: 'uppercase' | 'lowercase'): string {\n return transform === 'uppercase' ? value.toUpperCase() : value.toLowerCase();\n }\n\n /**\n * Verifica se o elemento é um input de texto que suporta seleção de cursor.\n */\n private isTextInput(element: HTMLInputElement | HTMLTextAreaElement): boolean {\n if (element.tagName === 'TEXTAREA') {\n return true;\n }\n\n const inputElement = element as HTMLInputElement;\n return (\n inputElement.type === 'text' ||\n inputElement.type === 'search' ||\n inputElement.type === 'email' ||\n inputElement.type === 'url' ||\n inputElement.type === 'tel' ||\n !inputElement.type // type padrão é 'text'\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { InputTextModule } from 'primeng/inputtext';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\nimport { TextTransformDirective } from '../directives/text-transform.directive';\n\n@Component({\n selector: 'vp-input-text-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, InputTextModule, TextTransformDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <input\n pInputText\n [id]=\"field().key\"\n [type]=\"field().controlType\"\n [formControlName]=\"field().key\"\n [placeholder]=\"field().placeholder || ''\"\n [vpTextTransform]=\"field().textTransform || null\"\n />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n input {\n width: 100%;\n }\n `,\n ],\n})\nexport class InputTextFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\nimport { TextTransformDirective } from '../directives/text-transform.directive';\n\n@Component({\n selector: 'vp-input-button-field',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n IftaLabelModule,\n InputTextModule,\n InputGroupModule,\n InputGroupAddonModule,\n ButtonModule,\n TooltipModule,\n TextTransformDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-inputgroup>\n @if (buttonPosition() === 'left') {\n <p-button\n type=\"button\"\n [icon]=\"buttonConfig()?.icon || ''\"\n [label]=\"buttonConfig()?.label || ''\"\n [severity]=\"buttonConfig()?.severity || 'primary'\"\n [pTooltip]=\"buttonConfig()?.tooltip || ''\"\n tooltipPosition=\"top\"\n (click)=\"onButtonClick()\"\n [disabled]=\"isFieldDisabled()\"\n />\n }\n\n <p-iftalabel>\n <input\n pInputText\n [id]=\"field().key\"\n [formControlName]=\"field().key\"\n [placeholder]=\"field().placeholder || ''\"\n [vpTextTransform]=\"field().textTransform || null\"\n />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n\n @if (buttonPosition() === 'right') {\n <p-button\n type=\"button\"\n [icon]=\"buttonConfig()?.icon || ''\"\n [label]=\"buttonConfig()?.label || ''\"\n [severity]=\"buttonConfig()?.severity || 'primary'\"\n [pTooltip]=\"buttonConfig()?.tooltip || ''\"\n tooltipPosition=\"top\"\n (click)=\"onButtonClick()\"\n [disabled]=\"isFieldDisabled()\"\n />\n }\n </p-inputgroup>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-inputgroup {\n display: flex;\n width: 100%;\n }\n p-iftalabel {\n flex: 1;\n }\n `,\n ],\n})\nexport class InputButtonFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n\n buttonConfig() {\n return this.field().buttonConfig;\n }\n\n buttonPosition(): 'left' | 'right' {\n return this.buttonConfig()?.position || 'right';\n }\n\n isFieldDisabled(): boolean {\n const control = this.form().get(this.field().key);\n return control?.disabled ?? false;\n }\n\n onButtonClick(): void {\n const control = this.form().get(this.field().key);\n const value = control?.value;\n const callback = this.field().buttonCallback;\n\n if (callback) {\n callback(this.field().key, value);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { InputNumberModule } from 'primeng/inputnumber';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-number-input-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, InputNumberModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-inputNumber [id]=\"field().key\" [formControlName]=\"field().key\" [placeholder]=\"field().placeholder || ''\" styleClass=\"w-full\" class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n :host ::ng-deep p-inputNumber,\n :host ::ng-deep .p-inputnumber,\n :host ::ng-deep .p-inputnumber input {\n width: 100%;\n }\n `,\n ],\n})\nexport class NumberInputFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { PasswordModule } from 'primeng/password';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-password-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, PasswordModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-password\n [id]=\"field().key\"\n [formControlName]=\"field().key\"\n [feedback]=\"false\"\n [toggleMask]=\"true\"\n [placeholder]=\"field().placeholder || ''\"\n styleClass=\"w-full\"\n class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n :host ::ng-deep .p-password,\n :host ::ng-deep .p-password input {\n width: 100%;\n }\n `,\n ],\n})\nexport class PasswordFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { SelectModule } from 'primeng/select';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-select-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, SelectModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <p-select\n [inputId]=\"field().key\"\n [formControlName]=\"field().key\"\n [options]=\"field().options!\"\n [placeholder]=\"field().placeholder || 'Selecione'\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\" />\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n p-select {\n width: 100%;\n }\n `,\n ],\n})\nexport class SelectFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { IftaLabelModule } from 'primeng/iftalabel';\nimport { TextareaModule } from 'primeng/textarea';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\nimport { TextTransformDirective } from '../directives/text-transform.directive';\n\n@Component({\n selector: 'vp-textarea-field',\n standalone: true,\n imports: [ReactiveFormsModule, IftaLabelModule, TextareaModule, TextTransformDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\">\n <p-iftalabel>\n <textarea\n pTextarea\n [id]=\"field().key\"\n [formControlName]=\"field().key\"\n [placeholder]=\"field().placeholder || ''\"\n [rows]=\"field().textareaRows ?? 1\"\n [cols]=\"field().textareaCols\"\n [autoResize]=\"field().textareaAutoResize ?? false\"\n [vpTextTransform]=\"field().textTransform || null\"\n ></textarea>\n <label [for]=\"field().key\">{{ field().label }}</label>\n </p-iftalabel>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n p-iftalabel {\n display: block;\n width: 100%;\n }\n textarea {\n width: 100%;\n }\n `,\n ],\n})\nexport class TextareaFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\nimport { iFormConfig } from '../interfaces/form-config.interface';\n\n@Component({\n selector: 'vp-toggleswitch-field',\n standalone: true,\n imports: [ReactiveFormsModule, ToggleSwitchModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div [formGroup]=\"form()\" class=\"toggleswitch-field\">\n <p-toggleswitch\n [formControlName]=\"field().key\"\n [inputId]=\"field().key\"\n [invalid]=\"isInvalid()\"\n [trueValue]=\"field().toggleTrueValue ?? true\"\n [falseValue]=\"field().toggleFalseValue ?? false\" />\n <label [for]=\"field().key\" class=\"toggleswitch-label\">{{ field().label }}</label>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n .toggleswitch-field {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n width: 100%;\n }\n .toggleswitch-label {\n cursor: pointer;\n user-select: none;\n font-size: 0.875rem;\n color: var(--p-text-color, #333);\n margin: 0;\n }\n p-toggleswitch {\n flex-shrink: 0;\n }\n `,\n ],\n})\nexport class ToggleSwitchFieldComponent {\n form = input.required<FormGroup>();\n field = input.required<iFormConfig>();\n\n isInvalid = computed(() => {\n const control = this.form().get(this.field().key);\n return control ? control.invalid && (control.touched || control.dirty) : false;\n });\n}\n","import { Injectable, signal, Type } from '@angular/core';\n\n/**\n * Serviço para registro de campos customizados.\n * Permite adicionar novos tipos de campos dinamicamente.\n */\n@Injectable({ providedIn: 'root' })\nexport class FieldRegistryService {\n private readonly registry = signal<Map<string, Type<any>>>(new Map());\n\n /**\n * Registra um novo tipo de campo.\n * @param type Tipo do campo (ex: 'custom', 'file', etc.)\n * @param component Componente Angular que renderiza o campo\n */\n registerField(type: string, component: Type<any>): void {\n this.registry.update((map) => new Map(map).set(type, component));\n }\n\n /**\n * Obtém o componente registrado para um tipo de campo.\n * @param type Tipo do campo\n * @returns Componente Angular ou undefined se não encontrado\n */\n getField(type: string): Type<any> | undefined {\n return this.registry().get(type);\n }\n\n /**\n * Remove um tipo de campo do registro.\n * @param type Tipo do campo a ser removido\n */\n unregisterField(type: string): void {\n this.registry.update((map) => {\n const newMap = new Map(map);\n newMap.delete(type);\n return newMap;\n });\n }\n\n /**\n * Limpa todos os campos registrados.\n */\n clear(): void {\n this.registry.set(new Map());\n }\n}\n","import { CommonModule, NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, output, Type } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { DynamicFormErrorComponent } from '../form-field-error/form-field-error.component';\nimport { DatePickerFieldComponent } from '../../fields/datepicker-field.component';\nimport { InputTextFieldComponent } from '../../fields/input-text-field.component';\nimport { InputButtonFieldComponent } from '../../fields/input-button-field.component';\nimport { NumberInputFieldComponent } from '../../fields/number-input-field.component';\nimport { PasswordFieldComponent } from '../../fields/password-field.component';\nimport { SelectFieldComponent } from '../../fields/select-field.component';\nimport { TextareaFieldComponent } from '../../fields/textarea-field.component';\nimport { ToggleSwitchFieldComponent } from '../../fields/toggleswitch-field.component';\nimport { iFormConfig } from '../../interfaces/form-config.interface';\nimport { FieldRegistryService } from '../../services/field-registry.service';\n\n@Component({\n selector: 'vp-dynamic-form',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgComponentOutlet, DynamicFormErrorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.scss',\n})\nexport class DynamicFormComponent implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly fieldRegistry = inject(FieldRegistryService);\n\n config = input.required<iFormConfig[]>();\n formReady = output<FormGroup>();\n\n form = new FormGroup({});\n\n readonly fieldComponents: { [key: string]: Type<any> } = {\n text: InputTextFieldComponent,\n email: InputTextFieldComponent,\n password: PasswordFieldComponent,\n number: NumberInputFieldComponent,\n select: SelectFieldComponent,\n datepicker: DatePickerFieldComponent,\n textarea: TextareaFieldComponent,\n toggleswitch: ToggleSwitchFieldComponent,\n 'input-button': InputButtonFieldComponent,\n };\n\n ngOnInit(): void {\n const configValue = this.config();\n if (configValue && configValue.length > 0) {\n this.buildForm(configValue);\n this.setupFieldDependencies(configValue);\n this.formReady.emit(this.form);\n }\n }\n\n private buildForm(config: iFormConfig[]): void {\n config.forEach((field) => {\n // Para toggle switch, o valor padrão é false se não especificado\n const defaultValue = field.controlType === 'toggleswitch' ? (field.value ?? false) : (field.value ?? '');\n\n // Se o campo tem enabledWhen, ele deve começar desabilitado a menos que o toggle já esteja ativo\n const shouldBeDisabled = field.disabled ?? (field.enabledWhen ? !this.getToggleValue(field.enabledWhen, config) : false);\n\n const control = shouldBeDisabled\n ? new FormControl(\n { value: defaultValue, disabled: true },\n {\n validators: field.validators ?? [],\n }\n )\n : new FormControl(defaultValue, {\n validators: field.validators ?? [],\n });\n this.form.addControl(field.key, control);\n });\n }\n\n private setupFieldDependencies(config: iFormConfig[]): void {\n config.forEach((field) => {\n if (!field.enabledWhen) {\n return;\n }\n\n const toggleField = config.find((f) => f.key === field.enabledWhen);\n\n if (!toggleField) {\n console.warn(\n `DynamicFormComponent: Campo '${field.key}' referencia '${field.enabledWhen}' em enabledWhen, mas este campo não existe no formulário.`\n );\n return;\n }\n\n if (toggleField.controlType !== 'toggleswitch') {\n console.warn(\n `DynamicFormComponent: Campo '${field.key}' referencia '${field.enabledWhen}' em enabledWhen, mas este campo não é do tipo 'toggleswitch'.`\n );\n return;\n }\n\n const toggleControl = this.form.get(field.enabledWhen);\n const dependentControl = this.form.get(field.key);\n\n if (!toggleControl || !dependentControl) {\n console.warn(\n `DynamicFormComponent: Não foi possível encontrar os controles para configurar a dependência entre '${field.enabledWhen}' e '${field.key}'.`\n );\n return;\n }\n\n // Configura a subscription para reagir às mudanças do toggle\n toggleControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((toggleValue) => {\n const isToggleActive = toggleValue === (toggleField.toggleTrueValue ?? true);\n\n if (isToggleActive) {\n dependentControl.enable();\n } else {\n // Limpa o valor do campo antes de desabilitá-lo\n const resetValue = this.getResetValueForFieldType(field.controlType);\n dependentControl.setValue(resetValue, { emitEvent: false });\n dependentControl.disable();\n }\n });\n });\n }\n\n private getToggleValue(toggleKey: string, config: iFormConfig[]): boolean {\n const toggleField = config.find((f) => f.key === toggleKey);\n if (!toggleField || toggleField.controlType !== 'toggleswitch') {\n return false;\n }\n\n const toggleTrueValue = toggleField.toggleTrueValue ?? true;\n const toggleValue = toggleField.value ?? false;\n\n return toggleValue === toggleTrueValue;\n }\n\n /**\n * Retorna o valor padrão de reset para cada tipo de campo.\n * Usado quando um campo dependente é desabilitado e precisa ser limpo.\n */\n private getResetValueForFieldType(controlType: string): any {\n switch (controlType) {\n case 'text':\n case 'email':\n case 'password':\n case 'textarea':\n case 'input-button':\n return '';\n case 'number':\n return null;\n case 'select':\n return null;\n case 'datepicker':\n return null;\n default:\n return '';\n }\n }\n\n /**\n * Obtém o componente a ser renderizado para um tipo de campo.\n * Primeiro verifica no registro customizado, depois nos componentes padrão.\n */\n getFieldComponent(controlType: string): Type<any> | null {\n // Verifica primeiro no registro customizado\n const customComponent = this.fieldRegistry.getField(controlType);\n if (customComponent) {\n return customComponent;\n }\n\n // Fallback para componentes padrão\n return this.fieldComponents[controlType] || null;\n }\n\n getControl(key: string): AbstractControl {\n const control = this.form.get(key);\n if (!control) {\n console.warn(`DynamicFormComponent: Controle não encontrado para a chave: ${key}`);\n }\n return control!;\n }\n}\n","<form [formGroup]=\"form\" class=\"dynamic-form-container\">\n @for (field of config(); track field.key) { @if (getFieldComponent(field.controlType); as\n fieldComponent) {\n <div [class]=\"'form-field-wrapper ' + (field.styleClass || '')\">\n <!-- Dynamically render the correct field component -->\n <ng-container\n [ngComponentOutlet]=\"fieldComponent\"\n [ngComponentOutletInputs]=\"{ form: form, field: field }\"\n />\n\n @if (field.hint) {\n <small class=\"hint-text\">{{ field.hint }}</small>\n }\n\n <!-- Reusable error display component -->\n <vp-form-field-error [control]=\"getControl(field.key)\" />\n </div>\n } @else {\n <div class=\"form-field-wrapper\">\n <small class=\"p-error\">Tipo de campo '{{ field.controlType }}' não encontrado.</small>\n </div>\n } }\n</form>\n","import { Translation } from 'primeng/api';\n\nexport const PRIMENG_PTBR: Translation = {\n // Filtros\n startsWith: 'Começa com',\n contains: 'Contém',\n notContains: 'Não contém',\n endsWith: 'Termina com',\n equals: 'Igual',\n notEquals: 'Diferente',\n noFilter: 'Sem filtro',\n lt: 'Menor que',\n lte: 'Menor ou igual a',\n gt: 'Maior que',\n gte: 'Maior ou igual a',\n is: 'É',\n isNot: 'Não é',\n before: 'Antes',\n after: 'Depois',\n dateIs: 'Data é',\n dateIsNot: 'Data não é',\n dateBefore: 'Data antes',\n dateAfter: 'Data depois',\n\n // Regras\n clear: 'Limpar',\n apply: 'Aplicar',\n matchAll: 'Corresponder a todos',\n matchAny: 'Corresponder a qualquer',\n addRule: 'Adicionar regra',\n removeRule: 'Remover regra',\n\n // Ações\n accept: 'Sim',\n reject: 'Não',\n choose: 'Escolher',\n upload: 'Enviar',\n cancel: 'Cancelar',\n completed: 'Concluído',\n pending: 'Pendente',\n\n // Arquivos\n fileSizeTypes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n emptyMessage: 'Nenhum registro encontrado',\n emptyFilterMessage: 'Nenhum resultado encontrado',\n fileChosenMessage: '{0} arquivo(s) selecionado(s)',\n noFileChosenMessage: 'Nenhum arquivo selecionado',\n\n // Datas\n dayNames: ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'],\n dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],\n dayNamesMin: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'],\n monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],\n monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],\n dateFormat: 'dd/mm/yy',\n firstDayOfWeek: 0,\n today: 'Hoje',\n weekHeader: 'Sem',\n\n // Password\n weak: 'Fraca',\n medium: 'Média',\n strong: 'Forte',\n passwordPrompt: 'Digite uma senha',\n\n // Date navigation\n chooseYear: 'Escolher ano',\n chooseMonth: 'Escolher mês',\n chooseDate: 'Escolher data',\n prevDecade: 'Década anterior',\n nextDecade: 'Próxima década',\n prevYear: 'Ano anterior',\n nextYear: 'Próximo ano',\n prevMonth: 'Mês anterior',\n nextMonth: 'Próximo mês',\n prevHour: 'Hora anterior',\n nextHour: 'Próxima hora',\n prevMinute: 'Minuto anterior',\n nextMinute: 'Próximo minuto',\n prevSecond: 'Segundo anterior',\n nextSecond: 'Próximo segundo',\n am: 'AM',\n pm: 'PM',\n\n // Busca / seleção\n searchMessage: 'Digite para pesquisar',\n selectionMessage: '{0} item(ns) selecionado(s)',\n emptySelectionMessage: 'Nenhum item selecionado',\n emptySearchMessage: 'Nenhum resultado encontrado',\n\n // ARIA (acessibilidade)\n aria: {\n trueLabel: 'Verdadeiro',\n falseLabel: 'Falso',\n nullLabel: 'Não selecionado',\n star: '1 estrela',\n stars: '{star} estrelas',\n selectAll: 'Selecionar todos',\n unselectAll: 'Desmarcar todos',\n close: 'Fechar',\n previous: 'Anterior',\n next: 'Próximo',\n navigation: 'Navegação',\n scrollTop: 'Rolar para o topo',\n moveTop: 'Mover para o topo',\n moveUp: 'Mover para cima',\n moveDown: 'Mover para baixo',\n moveBottom: 'Mover para o final',\n moveToTarget: 'Mover para o destino',\n moveToSource: 'Mover para a origem',\n moveAllToTarget: 'Mover todos para o destino',\n moveAllToSource: 'Mover todos para a origem',\n pageLabel: 'Página {page}',\n firstPageLabel: 'Primeira página',\n lastPageLabel: 'Última página',\n nextPageLabel: 'Próxima página',\n prevPageLabel: 'Página anterior',\n rowsPerPageLabel: 'Itens por página',\n previousPageLabel: 'Página anterior',\n jumpToPageDropdownLabel: 'Pular para página',\n jumpToPageInputLabel: 'Ir para página',\n selectRow: 'Selecionar linha',\n unselectRow: 'Desmarcar linha',\n expandRow: 'Expandir linha',\n collapseRow: 'Recolher linha',\n showFilterMenu: 'Mostrar menu de filtro',\n hideFilterMenu: 'Ocultar menu de filtro',\n filterOperator: 'Operador de filtro',\n filterConstraint: 'Restrição de filtro',\n editRow: 'Editar linha',\n saveEdit: 'Salvar edição',\n cancelEdit: 'Cancelar edição',\n listView: 'Visualização em lista',\n gridView: 'Visualização em grade',\n slide: 'Slide',\n slideNumber: 'Slide {slideNumber}',\n zoomImage: 'Ampliar imagem',\n zoomIn: 'Aumentar zoom',\n zoomOut: 'Reduzir zoom',\n rotateRight: 'Girar à direita',\n rotateLeft: 'Girar à esquerda',\n listLabel: 'Lista',\n selectColor: 'Selecionar cor',\n removeLabel: 'Remover',\n browseFiles: 'Procurar arquivos',\n maximizeLabel: 'Maximizar',\n minimizeLabel: 'Minimizar',\n },\n};\n","import { Provider } from '@angular/core';\n\nimport { DYNAMIC_FORM_ERROR_MESSAGES, DynamicFormErrorMessages } from '../interfaces/error-messages.interface';\n\n/**\n * Provider para configurar mensagens de erro customizadas.\n * @param messages Mensagens de erro customizadas\n * @returns Provider configurado\n */\nexport function provideDynamicFormConfig(messages?: DynamicFormErrorMessages): Provider[] {\n const providers: Provider[] = [];\n\n if (messages) {\n providers.push({\n provide: DYNAMIC_FORM_ERROR_MESSAGES,\n useValue: messages,\n });\n }\n\n return providers;\n}\n","import { PRIMENG_PTBR } from './lib/i18n/primeng-ptbr';\n/*\n * Public API Surface of @vipsolucoes/dynamic-form\n */\n\n// Componentes\nexport { DynamicFormComponent } from './lib/components/dynamic-form/dynamic-form.component';\nexport { DynamicFormErrorComponent } from './lib/components/form-field-error/form-field-error.component';\n\n// Fields (para uso standalone)\nexport { InputTextFieldComponent } from './lib/fields/input-text-field.component';\nexport { InputButtonFieldComponent } from './lib/fields/input-button-field.component';\nexport { SelectFieldComponent } from './lib/fields/select-field.component';\nexport { DatePickerFieldComponent } from './lib/fields/datepicker-field.component';\nexport { NumberInputFieldComponent } from './lib/fields/number-input-field.component';\nexport { PasswordFieldComponent } from './lib/fields/password-field.component';\nexport { TextareaFieldComponent } from './lib/fields/textarea-field.component';\nexport { ToggleSwitchFieldComponent } from './lib/fields/toggleswitch-field.component';\n\n// Interfaces\nexport type { iFormConfig, iFieldOption } from './lib/interfaces/form-config.interface';\nexport type { DynamicFormErrorMessages } from './lib/interfaces/error-messages.interface';\nexport { DYNAMIC_FORM_ERROR_MESSAGES } from './lib/interfaces/error-messages.interface';\n\n// Services\nexport { FieldRegistryService } from './lib/services/field-registry.service';\n\n// Directives\nexport { TextTransformDirective } from './lib/directives/text-transform.directive';\n\n// Utility functions\nexport { PRIMENG_PTBR } from './lib/i18n/primeng-ptbr';\nexport { provideDynamicFormConfig } from './lib/providers/dynamic-form.providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i2","i1"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA;;AAEG;MACU,2BAA2B,GAAG,IAAI,cAAc,CAC3D,6BAA6B;;MCYlB,yBAAyB,CAAA;AACpC,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAmB;IAE1B,cAAc,GAAG,MAAM,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAGxE,IAAA,oBAAoB,GAA4C;QAC/E,QAAQ,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE,QAAQ,IAAI,2BAA2B;QAC5E,KAAK,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,qCAAqC;QAChF,SAAS,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,CAAA,UAAA,EAAa,GAAG,CAAC,cAAc,CAAA,YAAA,CAAc;QACzH,SAAS,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,CAAA,UAAA,EAAa,GAAG,CAAC,cAAc,CAAA,YAAA,CAAc;QACzH,MAAM,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;KACvF;;AAGD,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC3D,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,iBAAiB;IAC7H;uGAvBW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnB1B;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,oHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EALS,YAAY,EAAA,CAAA,EAAA,CAAA;;2FAoBX,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAvBrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;AAIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,oHAAA,CAAA,EAAA;;;MC8BU,wBAAwB,CAAA;AACnC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAClC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAe;AAE5B,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,IAAI,MAAM;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU;AAE5C,QAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;AACxB,YAAA,OAAO,OAAO;QAChB;AACA,QAAA,IAAI,QAAQ,KAAK,MAAM,EAAE;AACvB,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,YAAY,IAAI,UAAU;AACnC,IAAA,CAAC,sDAAC;uGAhBS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhCzB;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAjBS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkCrD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBArCpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAChD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,gGAAA,CAAA,EAAA;;;ACxBH;;;;;;;;;;;;;;;AAeG;MAKU,sBAAsB,CAAA;AAChB,IAAA,UAAU,GAAG,MAAM,EAAC,UAAkD,EAAC;AAExF;;;AAGG;AACc,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAE9E;;;AAGG;IACM,eAAe,GAAqC,IAAI;IAEjE,QAAQ,GAAA;;AAEN,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC7C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe;AAEtC,QAAA,IAAI,SAAS,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AACnE,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;AACtE,YAAA,IAAI,gBAAgB,KAAK,OAAO,CAAC,KAAK,EAAE;AACtC,gBAAA,OAAO,CAAC,KAAK,GAAG,gBAAgB;;AAGhC,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBACzE;YACF;QACF;IACF;AAGA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAgD;AAC3E,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe;;QAGtC,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;YACrC;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK;AACvC,QAAA,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;YACpC;QACF;;AAGA,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc;AACzC,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY;;QAGrC,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC;;AAGrE,QAAA,IAAI,YAAY,KAAK,gBAAgB,EAAE;YACrC;QACF;;AAGA,QAAA,YAAY,CAAC,KAAK,GAAG,gBAAgB;;AAGrC,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE;AAClC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC;AAC9D,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC;AAC1D,YAAA,YAAY,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC;QAClD;;AAGA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAEvE,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACpE;aAAO;;;AAGL,YAAA,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACpC,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,UAAU,EAAE,IAAI;AACjB,aAAA,CAAC;AACF,YAAA,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC;QACxC;IACF;AAEA;;AAEG;IACK,cAAc,CAAC,KAAa,EAAE,SAAoC,EAAA;AACxE,QAAA,OAAO,SAAS,KAAK,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE;IAC9E;AAEA;;AAEG;AACK,IAAA,WAAW,CAAC,OAA+C,EAAA;AACjE,QAAA,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE;AAClC,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,YAAY,GAAG,OAA2B;AAChD,QAAA,QACE,YAAY,CAAC,IAAI,KAAK,MAAM;YAC5B,YAAY,CAAC,IAAI,KAAK,QAAQ;YAC9B,YAAY,CAAC,IAAI,KAAK,OAAO;YAC7B,YAAY,CAAC,IAAI,KAAK,KAAK;YAC3B,YAAY,CAAC,IAAI,KAAK,KAAK;AAC3B,YAAA,CAAC,YAAY,CAAC,IAAI;;IAEtB;uGA9GW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAcE;;sBAoBA,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;MCZtB,uBAAuB,CAAA;AAClC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAClC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAe;uGAF1B,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/BxB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhBS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,yNAAE,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAiC5E,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBApCnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,CAAC,EAAA,eAAA,EACvE,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,yFAAA,CAAA,EAAA;;;MCyDU,yBAAyB,CAAA;AACpC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAClC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAe;IAErC,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY;IAClC;IAEA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,IAAI,OAAO;IACjD;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;AACjD,QAAA,OAAO,OAAO,EAAE,QAAQ,IAAI,KAAK;IACnC;IAEA,aAAa,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;AACjD,QAAA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,cAAc;QAE5C,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC;QACnC;IACF;uGAzBW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1D1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAnDC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,qaACb,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA6Db,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAxErC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP;wBACP,mBAAmB;wBACnB,eAAe;wBACf,eAAe;wBACf,gBAAgB;wBAChB,qBAAqB;wBACrB,YAAY;wBACZ,aAAa;wBACb,sBAAsB;qBACvB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2FAAA,CAAA,EAAA;;;MC7BU,yBAAyB,CAAA;AACpC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAClC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAe;uGAF1B,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1B1B;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EATS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA4BtD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA/BrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,CAAC,EAAA,eAAA,EACjD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;AAOT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,qLAAA,CAAA,EAAA;;;MCyBU,sBAAsB,CAAA;AACjC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAClC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAe;uGAF1B,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhCvB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhBS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkCnD,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArClC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,eAAe,EAAE,cAAc,CAAC,EAAA,eAAA,EAC9C,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,iJAAA,CAAA,EAAA;;;MCiBU,oBAAoB,CAAA;AAC/B,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAClC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAe;uGAF1B,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/BrB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhBS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAiCjD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBApChC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,eAAe,EAAE,YAAY,CAAC,EAAA,eAAA,EAC5C,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA;;;MCoBU,sBAAsB,CAAA;AACjC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAClC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAe;uGAF1B,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjCvB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,iPAAE,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAmC3E,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAtClC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cACjB,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,sBAAsB,CAAC,EAAA,eAAA,EACtE,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA;;;MCkBU,0BAA0B,CAAA;AACrC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAClC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAe;AAErC,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACxB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;QACjD,OAAO,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;AAChF,IAAA,CAAC,qDAAC;uGAPS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApC3B;;;;;;;;;;GAUT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAZS,mBAAmB,+lBAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAsCtC,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAzCtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EAAA,eAAA,EACjC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,kRAAA,CAAA,EAAA;;;ACnBH;;;AAGG;MAEU,oBAAoB,CAAA;AACd,IAAA,QAAQ,GAAG,MAAM,CAAyB,IAAI,GAAG,EAAE,oDAAC;AAErE;;;;AAIG;IACH,aAAa,CAAC,IAAY,EAAE,SAAoB,EAAA;QAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClE;AAEA;;;;AAIG;AACH,IAAA,QAAQ,CAAC,IAAY,EAAA;QACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC;AAEA;;;AAGG;AACH,IAAA,eAAe,CAAC,IAAY,EAAA;QAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAC3B,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACnB,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACH,KAAK,GAAA;QACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IAC9B;uGAtCW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCmBrB,oBAAoB,CAAA;AACd,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAE7D,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAiB;IACxC,SAAS,GAAG,MAAM,EAAa;AAE/B,IAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;AAEf,IAAA,eAAe,GAAiC;AACvD,QAAA,IAAI,EAAE,uBAAuB;AAC7B,QAAA,KAAK,EAAE,uBAAuB;AAC9B,QAAA,QAAQ,EAAE,sBAAsB;AAChC,QAAA,MAAM,EAAE,yBAAyB;AACjC,QAAA,MAAM,EAAE,oBAAoB;AAC5B,QAAA,UAAU,EAAE,wBAAwB;AACpC,QAAA,QAAQ,EAAE,sBAAsB;AAChC,QAAA,YAAY,EAAE,0BAA0B;AACxC,QAAA,cAAc,EAAE,yBAAyB;KAC1C;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE;QACjC,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC3B,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC;IACF;AAEQ,IAAA,SAAS,CAAC,MAAqB,EAAA;AACrC,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;;YAEvB,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,KAAK,cAAc,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;;AAGxG,YAAA,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;YAExH,MAAM,OAAO,GAAG;AACd,kBAAE,IAAI,WAAW,CACb,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,EACvC;AACE,oBAAA,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;iBACnC;AAEL,kBAAE,IAAI,WAAW,CAAC,YAAY,EAAE;AAC5B,oBAAA,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;AACnC,iBAAA,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1C,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,sBAAsB,CAAC,MAAqB,EAAA;AAClD,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBACtB;YACF;AAEA,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,WAAW,CAAC;YAEnE,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,OAAO,CAAC,IAAI,CACV,CAAA,6BAAA,EAAgC,KAAK,CAAC,GAAG,CAAA,cAAA,EAAiB,KAAK,CAAC,WAAW,CAAA,0DAAA,CAA4D,CACxI;gBACD;YACF;AAEA,YAAA,IAAI,WAAW,CAAC,WAAW,KAAK,cAAc,EAAE;AAC9C,gBAAA,OAAO,CAAC,IAAI,CACV,CAAA,6BAAA,EAAgC,KAAK,CAAC,GAAG,CAAA,cAAA,EAAiB,KAAK,CAAC,WAAW,CAAA,8DAAA,CAAgE,CAC5I;gBACD;YACF;AAEA,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;AACtD,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAEjD,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB,EAAE;AACvC,gBAAA,OAAO,CAAC,IAAI,CACV,CAAA,mGAAA,EAAsG,KAAK,CAAC,WAAW,CAAA,KAAA,EAAQ,KAAK,CAAC,GAAG,CAAA,EAAA,CAAI,CAC7I;gBACD;YACF;;AAGA,YAAA,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,KAAI;gBAC7F,MAAM,cAAc,GAAG,WAAW,MAAM,WAAW,CAAC,eAAe,IAAI,IAAI,CAAC;gBAE5E,IAAI,cAAc,EAAE;oBAClB,gBAAgB,CAAC,MAAM,EAAE;gBAC3B;qBAAO;;oBAEL,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,WAAW,CAAC;oBACpE,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oBAC3D,gBAAgB,CAAC,OAAO,EAAE;gBAC5B;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,cAAc,CAAC,SAAiB,EAAE,MAAqB,EAAA;AAC7D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC;QAC3D,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,WAAW,KAAK,cAAc,EAAE;AAC9D,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,eAAe,GAAG,WAAW,CAAC,eAAe,IAAI,IAAI;AAC3D,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,KAAK;QAE9C,OAAO,WAAW,KAAK,eAAe;IACxC;AAEA;;;AAGG;AACK,IAAA,yBAAyB,CAAC,WAAmB,EAAA;QACnD,QAAQ,WAAW;AACjB,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,EAAE;AACX,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,IAAI;AACb,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,IAAI;AACb,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,IAAI;AACb,YAAA;AACE,gBAAA,OAAO,EAAE;;IAEf;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,WAAmB,EAAA;;QAEnC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC;QAChE,IAAI,eAAe,EAAE;AACnB,YAAA,OAAO,eAAe;QACxB;;QAGA,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,IAAI;IAClD;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,CAAC,IAAI,CAAC,+DAA+D,GAAG,CAAA,CAAE,CAAC;QACpF;AACA,QAAA,OAAO,OAAQ;IACjB;uGA5JW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,sPCzBjC,s0BAuBA,EAAA,MAAA,EAAA,CAAA,2vBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDHY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,icAAqB,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAK9E,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,yBAAyB,CAAC,EAAA,eAAA,EACzE,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,s0BAAA,EAAA,MAAA,EAAA,CAAA,2vBAAA,CAAA,EAAA;;;AEnB1C,MAAM,YAAY,GAAgB;;AAEvC,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,WAAW,EAAE,YAAY;AACzB,IAAA,QAAQ,EAAE,aAAa;AACvB,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,GAAG,EAAE,kBAAkB;AACvB,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,GAAG,EAAE,kBAAkB;AACvB,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,SAAS,EAAE,aAAa;;AAGxB,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,QAAQ,EAAE,sBAAsB;AAChC,IAAA,QAAQ,EAAE,yBAAyB;AACnC,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,UAAU,EAAE,eAAe;;AAG3B,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,MAAM,EAAE,UAAU;AAClB,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,OAAO,EAAE,UAAU;;AAGnB,IAAA,aAAa,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACpE,IAAA,YAAY,EAAE,4BAA4B;AAC1C,IAAA,kBAAkB,EAAE,6BAA6B;AACjD,IAAA,iBAAiB,EAAE,+BAA+B;AAClD,IAAA,mBAAmB,EAAE,4BAA4B;;AAGjD,IAAA,QAAQ,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,CAAC;AAC9G,IAAA,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAChE,IAAA,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAChD,UAAU,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;IACzI,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACrG,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,UAAU,EAAE,KAAK;;AAGjB,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,cAAc,EAAE,kBAAkB;;AAGlC,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,WAAW,EAAE,cAAc;AAC3B,IAAA,UAAU,EAAE,eAAe;AAC3B,IAAA,UAAU,EAAE,iBAAiB;AAC7B,IAAA,UAAU,EAAE,gBAAgB;AAC5B,IAAA,QAAQ,EAAE,cAAc;AACxB,IAAA,QAAQ,EAAE,aAAa;AACvB,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,SAAS,EAAE,aAAa;AACxB,IAAA,QAAQ,EAAE,eAAe;AACzB,IAAA,QAAQ,EAAE,cAAc;AACxB,IAAA,UAAU,EAAE,iBAAiB;AAC7B,IAAA,UAAU,EAAE,gBAAgB;AAC5B,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,UAAU,EAAE,iBAAiB;AAC7B,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,EAAE,EAAE,IAAI;;AAGR,IAAA,aAAa,EAAE,uBAAuB;AACtC,IAAA,gBAAgB,EAAE,6BAA6B;AAC/C,IAAA,qBAAqB,EAAE,yBAAyB;AAChD,IAAA,kBAAkB,EAAE,6BAA6B;;AAGjD,IAAA,IAAI,EAAE;AACJ,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,SAAS,EAAE,iBAAiB;AAC5B,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,KAAK,EAAE,iBAAiB;AACxB,QAAA,SAAS,EAAE,kBAAkB;AAC7B,QAAA,WAAW,EAAE,iBAAiB;AAC9B,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,QAAQ,EAAE,UAAU;AACpB,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,SAAS,EAAE,mBAAmB;AAC9B,QAAA,OAAO,EAAE,mBAAmB;AAC5B,QAAA,MAAM,EAAE,iBAAiB;AACzB,QAAA,QAAQ,EAAE,kBAAkB;AAC5B,QAAA,UAAU,EAAE,oBAAoB;AAChC,QAAA,YAAY,EAAE,sBAAsB;AACpC,QAAA,YAAY,EAAE,qBAAqB;AACnC,QAAA,eAAe,EAAE,4BAA4B;AAC7C,QAAA,eAAe,EAAE,2BAA2B;AAC5C,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,cAAc,EAAE,iBAAiB;AACjC,QAAA,aAAa,EAAE,eAAe;AAC9B,QAAA,aAAa,EAAE,gBAAgB;AAC/B,QAAA,aAAa,EAAE,iBAAiB;AAChC,QAAA,gBAAgB,EAAE,kBAAkB;AACpC,QAAA,iBAAiB,EAAE,iBAAiB;AACpC,QAAA,uBAAuB,EAAE,mBAAmB;AAC5C,QAAA,oBAAoB,EAAE,gBAAgB;AACtC,QAAA,SAAS,EAAE,kBAAkB;AAC7B,QAAA,WAAW,EAAE,iBAAiB;AAC9B,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,WAAW,EAAE,gBAAgB;AAC7B,QAAA,cAAc,EAAE,wBAAwB;AACxC,QAAA,cAAc,EAAE,wBAAwB;AACxC,QAAA,cAAc,EAAE,oBAAoB;AACpC,QAAA,gBAAgB,EAAE,qBAAqB;AACvC,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,QAAQ,EAAE,eAAe;AACzB,QAAA,UAAU,EAAE,iBAAiB;AAC7B,QAAA,QAAQ,EAAE,uBAAuB;AACjC,QAAA,QAAQ,EAAE,uBAAuB;AACjC,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,qBAAqB;AAClC,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,MAAM,EAAE,eAAe;AACvB,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,WAAW,EAAE,iBAAiB;AAC9B,QAAA,UAAU,EAAE,kBAAkB;AAC9B,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,WAAW,EAAE,gBAAgB;AAC7B,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,WAAW,EAAE,mBAAmB;AAChC,QAAA,aAAa,EAAE,WAAW;AAC1B,QAAA,aAAa,EAAE,WAAW;AAC3B,KAAA;;;AC/IH;;;;AAIG;AACG,SAAU,wBAAwB,CAAC,QAAmC,EAAA;IAC1E,MAAM,SAAS,GAAe,EAAE;IAEhC,IAAI,QAAQ,EAAE;QACZ,SAAS,CAAC,IAAI,CAAC;AACb,YAAA,OAAO,EAAE,2BAA2B;AACpC,YAAA,QAAQ,EAAE,QAAQ;AACnB,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,SAAS;AAClB;;ACnBA;;AAEG;AAEH;;ACLA;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vipsolucoes/dynamic-form",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Biblioteca de formularios dinamicos para Angular com PrimeNG",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -1,6 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { OnInit, Type, InjectionToken, Provider } from '@angular/core';
3
3
  import { ValidatorFn, FormGroup, AbstractControl } from '@angular/forms';
4
+ import * as primeng_button from 'primeng/button';
5
+ import { ButtonSeverity } from 'primeng/button';
4
6
  import { Translation } from 'primeng/api';
5
7
 
6
8
  /**
@@ -21,7 +23,7 @@ interface iFormConfig {
21
23
  /**
22
24
  * O tipo de controle a ser renderizado.
23
25
  */
24
- controlType: 'text' | 'password' | 'email' | 'number' | 'select' | 'datepicker' | 'textarea' | 'toggleswitch';
26
+ controlType: 'text' | 'password' | 'email' | 'number' | 'select' | 'datepicker' | 'textarea' | 'toggleswitch' | 'input-button';
25
27
  /**
26
28
  * Texto a ser exibido no label do campo.
27
29
  */
@@ -88,6 +90,42 @@ interface iFormConfig {
88
90
  * Valor quando o toggle switch está desativado. Default: false. Aplicável apenas para controlType 'toggleswitch'.
89
91
  */
90
92
  toggleFalseValue?: any;
93
+ /**
94
+ * Configuração do botão para campos do tipo 'input-button'
95
+ */
96
+ buttonConfig?: {
97
+ /**
98
+ * Ícone do botão (PrimeIcons). Ex: 'pi pi-search'
99
+ */
100
+ icon?: string;
101
+ /**
102
+ * Label/texto do botão
103
+ */
104
+ label?: string;
105
+ /**
106
+ * Tooltip do botão
107
+ */
108
+ tooltip?: string;
109
+ /**
110
+ * Posição do botão. Default: 'right'
111
+ */
112
+ position?: 'left' | 'right';
113
+ /**
114
+ * Severity do botão. Default: 'primary'
115
+ */
116
+ severity?: ButtonSeverity;
117
+ };
118
+ /**
119
+ * Função callback executada ao clicar no botão do campo 'input-button'.
120
+ * Recebe a key do campo e o valor atual como parâmetros.
121
+ */
122
+ buttonCallback?: (fieldKey: string, fieldValue: any) => void | Promise<void>;
123
+ /**
124
+ * Transformação de texto para o campo. Opções: 'uppercase' | 'lowercase'.
125
+ * Aplicável apenas para campos de texto (text, email, textarea, input-button).
126
+ * Quando definido, o texto é transformado automaticamente conforme o usuário digita.
127
+ */
128
+ textTransform?: 'uppercase' | 'lowercase';
91
129
  }
92
130
 
93
131
  declare class DynamicFormComponent implements OnInit {
@@ -134,6 +172,23 @@ declare class InputTextFieldComponent {
134
172
  static ɵcmp: i0.ɵɵComponentDeclaration<InputTextFieldComponent, "vp-input-text-field", never, { "form": { "alias": "form"; "required": true; "isSignal": true; }; "field": { "alias": "field"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
135
173
  }
136
174
 
175
+ declare class InputButtonFieldComponent {
176
+ form: i0.InputSignal<FormGroup<any>>;
177
+ field: i0.InputSignal<iFormConfig>;
178
+ buttonConfig(): {
179
+ icon?: string;
180
+ label?: string;
181
+ tooltip?: string;
182
+ position?: "left" | "right";
183
+ severity?: primeng_button.ButtonSeverity;
184
+ } | undefined;
185
+ buttonPosition(): 'left' | 'right';
186
+ isFieldDisabled(): boolean;
187
+ onButtonClick(): void;
188
+ static ɵfac: i0.ɵɵFactoryDeclaration<InputButtonFieldComponent, never>;
189
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputButtonFieldComponent, "vp-input-button-field", never, { "form": { "alias": "form"; "required": true; "isSignal": true; }; "field": { "alias": "field"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
190
+ }
191
+
137
192
  declare class SelectFieldComponent {
138
193
  form: i0.InputSignal<FormGroup<any>>;
139
194
  field: i0.InputSignal<iFormConfig>;
@@ -224,6 +279,48 @@ declare class FieldRegistryService {
224
279
  static ɵprov: i0.ɵɵInjectableDeclaration<FieldRegistryService>;
225
280
  }
226
281
 
282
+ /**
283
+ * Diretiva para transformar texto em uppercase ou lowercase em tempo real.
284
+ * Funciona com Reactive Forms (NgControl) e elementos HTML nativos.
285
+ *
286
+ * @example
287
+ * ```html
288
+ * <!-- Uppercase -->
289
+ * <input [vpTextTransform]="'uppercase'" />
290
+ *
291
+ * <!-- Lowercase -->
292
+ * <input [vpTextTransform]="'lowercase'" />
293
+ *
294
+ * <!-- Desabilitado -->
295
+ * <input [vpTextTransform]="null" />
296
+ * ```
297
+ */
298
+ declare class TextTransformDirective implements OnInit {
299
+ private readonly elementRef;
300
+ /**
301
+ * NgControl opcional - presente quando usado com reactive forms ou ngModel.
302
+ * Usamos `optional: true` e `self: true` para injetar apenas se estiver no mesmo elemento.
303
+ */
304
+ private readonly ngControl;
305
+ /**
306
+ * Tipo de transformação a ser aplicada: 'uppercase' | 'lowercase' | null
307
+ * Quando null ou undefined, a transformação é desabilitada.
308
+ */
309
+ vpTextTransform: 'uppercase' | 'lowercase' | null;
310
+ ngOnInit(): void;
311
+ onInput(event: Event): void;
312
+ /**
313
+ * Aplica a transformação de texto baseada no tipo especificado.
314
+ */
315
+ private transformValue;
316
+ /**
317
+ * Verifica se o elemento é um input de texto que suporta seleção de cursor.
318
+ */
319
+ private isTextInput;
320
+ static ɵfac: i0.ɵɵFactoryDeclaration<TextTransformDirective, never>;
321
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TextTransformDirective, "[vpTextTransform]", never, { "vpTextTransform": { "alias": "vpTextTransform"; "required": false; }; }, {}, never, never, true, never>;
322
+ }
323
+
227
324
  declare const PRIMENG_PTBR: Translation;
228
325
 
229
326
  /**
@@ -233,5 +330,5 @@ declare const PRIMENG_PTBR: Translation;
233
330
  */
234
331
  declare function provideDynamicFormConfig(messages?: DynamicFormErrorMessages): Provider[];
235
332
 
236
- export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
333
+ export { DYNAMIC_FORM_ERROR_MESSAGES, DatePickerFieldComponent, DynamicFormComponent, DynamicFormErrorComponent, FieldRegistryService, InputButtonFieldComponent, InputTextFieldComponent, NumberInputFieldComponent, PRIMENG_PTBR, PasswordFieldComponent, SelectFieldComponent, TextTransformDirective, TextareaFieldComponent, ToggleSwitchFieldComponent, provideDynamicFormConfig };
237
334
  export type { DynamicFormErrorMessages, iFieldOption, iFormConfig };