@praxisui/dynamic-fields 0.0.1
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/LICENSE +6 -0
- package/README.md +397 -0
- package/fesm2022/praxisui-dynamic-fields-index-C9IUU4lo.mjs +2 -0
- package/fesm2022/praxisui-dynamic-fields-index-C9IUU4lo.mjs.map +1 -0
- package/fesm2022/praxisui-dynamic-fields-index-GJtthzkD.mjs +2 -0
- package/fesm2022/praxisui-dynamic-fields-index-GJtthzkD.mjs.map +1 -0
- package/fesm2022/praxisui-dynamic-fields.mjs +19338 -0
- package/fesm2022/praxisui-dynamic-fields.mjs.map +1 -0
- package/index.d.ts +3399 -0
- package/package.json +44 -0
package/index.d.ts
ADDED
|
@@ -0,0 +1,3399 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { WritableSignal, OnInit, OnDestroy, AfterViewInit, DestroyRef, ElementRef, ChangeDetectorRef, OnChanges, TemplateRef, EventEmitter, ComponentRef, SimpleChanges, Type, Provider, EnvironmentProviders } from '@angular/core';
|
|
3
|
+
import { AbstractControl, ControlValueAccessor, NgControl, ValidationErrors, FormControl, FormGroup, FormGroupDirective, NgForm } from '@angular/forms';
|
|
4
|
+
import { Observable, BehaviorSubject } from 'rxjs';
|
|
5
|
+
import { ComponentMetadata, GenericCrudService, GlobalConfigService, OptionDTO, FieldMetadata, MaterialButtonMetadata, MaterialInputMetadata, MaterialColorInputMetadata, MaterialDateInputMetadata, MaterialDatepickerMetadata, MaterialDateRangeMetadata, MaterialDatetimeLocalInputMetadata, MaterialEmailInputMetadata, MaterialTextareaMetadata, MaterialNumericMetadata, MaterialCurrencyMetadata, MaterialCpfCnpjMetadata, MaterialPriceRangeMetadata, MaterialMonthInputMetadata, MaterialPasswordMetadata, MaterialSearchInputMetadata, MaterialTreeNode, MaterialMultiSelectTreeMetadata, MaterialTreeSelectMetadata, MaterialToggleMetadata, MaterialSliderMetadata, MaterialPhoneMetadata, MaterialTimeInputMetadata, MaterialTimepickerMetadata, MaterialUrlInputMetadata, MaterialWeekInputMetadata, MaterialColorPickerMetadata, MaterialRangeSliderMetadata, MaterialYearInputMetadata, MaterialTimeRangeMetadata, ComponentDocMeta, FieldControlType } from '@praxisui/core';
|
|
6
|
+
import { Router } from '@angular/router';
|
|
7
|
+
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
|
|
8
|
+
import { MatSelect } from '@angular/material/select';
|
|
9
|
+
import * as _angular_material_error_options_d_CGdTZUYk from '@angular/material/error-options.d-CGdTZUYk';
|
|
10
|
+
import { MatDatepickerInputEvent } from '@angular/material/datepicker';
|
|
11
|
+
import { MatOptionSelectionChange, ErrorStateMatcher } from '@angular/material/core';
|
|
12
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
13
|
+
import { NestedTreeControl } from '@angular/cdk/tree';
|
|
14
|
+
import { MatTreeNestedDataSource } from '@angular/material/tree';
|
|
15
|
+
import { MatChipInputEvent } from '@angular/material/chips';
|
|
16
|
+
import { MatButtonToggleChange } from '@angular/material/button-toggle';
|
|
17
|
+
import { MatSelectionListChange, MatSelectionList } from '@angular/material/list';
|
|
18
|
+
import { MatBottomSheet } from '@angular/material/bottom-sheet';
|
|
19
|
+
import { CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @fileoverview Interface base para todos os componentes de campos dinâmicos
|
|
23
|
+
*
|
|
24
|
+
* Define o contrato comum que todos os componentes dinâmicos devem implementar
|
|
25
|
+
* para garantir compatibilidade com o DynamicFieldLoaderDirective e outros
|
|
26
|
+
* serviços do sistema.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Eventos de lifecycle que os componentes podem emitir
|
|
31
|
+
*/
|
|
32
|
+
interface ComponentLifecycleEvent {
|
|
33
|
+
phase: 'init' | 'afterInit' | 'change' | 'destroy';
|
|
34
|
+
timestamp: number;
|
|
35
|
+
componentId: string;
|
|
36
|
+
metadata?: any;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Opções para métodos de controle de valor
|
|
40
|
+
*/
|
|
41
|
+
interface ValueChangeOptions {
|
|
42
|
+
emitEvent?: boolean;
|
|
43
|
+
updateUI?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Interface base que todos os componentes de campos dinâmicos devem implementar.
|
|
47
|
+
*
|
|
48
|
+
* Esta interface define o contrato mínimo necessário para que um componente
|
|
49
|
+
* seja compatível com o sistema de renderização dinâmica do Praxis.
|
|
50
|
+
*
|
|
51
|
+
* ## Responsabilidades Principais
|
|
52
|
+
*
|
|
53
|
+
* - Gerenciar metadata do componente através de signals
|
|
54
|
+
* - Integrar com Angular Reactive Forms
|
|
55
|
+
* - Fornecer controles de foco e blur
|
|
56
|
+
* - Implementar lifecycle hooks customizados
|
|
57
|
+
* - Manter identificação única do componente
|
|
58
|
+
*
|
|
59
|
+
* ## Implementação
|
|
60
|
+
*
|
|
61
|
+
* Componentes podem implementar esta interface diretamente ou herdar de:
|
|
62
|
+
* - SimpleBaseInputComponent (para campos de entrada)
|
|
63
|
+
* - SimpleBaseButtonComponent (para ações/botões)
|
|
64
|
+
*/
|
|
65
|
+
interface BaseDynamicFieldComponent {
|
|
66
|
+
/**
|
|
67
|
+
* Metadata do componente que define sua configuração e comportamento.
|
|
68
|
+
*
|
|
69
|
+
* Contém informações como label, tipo de controle, validações,
|
|
70
|
+
* propriedades visuais e outras configurações específicas.
|
|
71
|
+
*/
|
|
72
|
+
readonly metadata: WritableSignal<ComponentMetadata | null>;
|
|
73
|
+
/**
|
|
74
|
+
* ID único do componente para identificação e debugging.
|
|
75
|
+
*
|
|
76
|
+
* Gerado automaticamente durante a inicialização e usado
|
|
77
|
+
* para logging, testes e identificação em runtime.
|
|
78
|
+
*/
|
|
79
|
+
readonly componentId: WritableSignal<string>;
|
|
80
|
+
/**
|
|
81
|
+
* FormControl associado ao componente para integração com Angular Reactive Forms.
|
|
82
|
+
*
|
|
83
|
+
* Opcional porque nem todos os componentes precisam de FormControl
|
|
84
|
+
* (ex: botões, labels, componentes de exibição).
|
|
85
|
+
*/
|
|
86
|
+
readonly formControl?: WritableSignal<AbstractControl | null>;
|
|
87
|
+
/**
|
|
88
|
+
* Label textual exibido para o usuário, quando aplicável.
|
|
89
|
+
*
|
|
90
|
+
* Útil para componentes que apresentam uma descrição direta do campo
|
|
91
|
+
* como inputs e seletores. Implementação opcional.
|
|
92
|
+
*/
|
|
93
|
+
label?: string;
|
|
94
|
+
/**
|
|
95
|
+
* Observable de eventos de lifecycle do componente.
|
|
96
|
+
*
|
|
97
|
+
* Permite monitorar o ciclo de vida do componente externamente
|
|
98
|
+
* para debugging, analytics ou integração com outros sistemas.
|
|
99
|
+
*/
|
|
100
|
+
readonly lifecycleEvents$?: Observable<ComponentLifecycleEvent | null>;
|
|
101
|
+
/**
|
|
102
|
+
* Foca no elemento principal do componente.
|
|
103
|
+
*
|
|
104
|
+
* Deve focar no input, botão ou elemento interativo principal.
|
|
105
|
+
* Implementação deve ser robusta e não falhar se elemento não existir.
|
|
106
|
+
*/
|
|
107
|
+
focus(): void;
|
|
108
|
+
/**
|
|
109
|
+
* Remove o foco do elemento principal do componente.
|
|
110
|
+
*
|
|
111
|
+
* Útil para controle programático de foco e navegação por teclado.
|
|
112
|
+
*/
|
|
113
|
+
blur(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Define os metadados de entrada do componente.
|
|
116
|
+
*
|
|
117
|
+
* Permite que o componente ajuste propriedades derivadas (como label
|
|
118
|
+
* e placeholders) antes da configuração padrão.
|
|
119
|
+
*
|
|
120
|
+
* @param metadata Metadados do campo
|
|
121
|
+
*/
|
|
122
|
+
setInputMetadata?(metadata: ComponentMetadata): void;
|
|
123
|
+
/**
|
|
124
|
+
* Injeta um FormControl externo a ser utilizado como fonte de verdade.
|
|
125
|
+
*
|
|
126
|
+
* Componentes que recebem este controle devem utilizá-lo diretamente,
|
|
127
|
+
* sem sincronizações manuais com controles internos.
|
|
128
|
+
*/
|
|
129
|
+
setExternalControl?(control: AbstractControl): void;
|
|
130
|
+
/**
|
|
131
|
+
* Hook chamado após a inicialização completa do componente.
|
|
132
|
+
*
|
|
133
|
+
* Executado depois que metadata e formControl foram configurados.
|
|
134
|
+
* Ideal para configurações específicas do componente.
|
|
135
|
+
*/
|
|
136
|
+
onComponentInit?(): void;
|
|
137
|
+
/**
|
|
138
|
+
* Hook chamado antes da destruição do componente.
|
|
139
|
+
*
|
|
140
|
+
* Usado para limpeza de recursos, cancelamento de subscriptions,
|
|
141
|
+
* ou salvamento de estado.
|
|
142
|
+
*/
|
|
143
|
+
onComponentDestroy?(): void;
|
|
144
|
+
/**
|
|
145
|
+
* Define o valor do campo programaticamente.
|
|
146
|
+
*
|
|
147
|
+
* Implementação opcional para componentes que gerenciam valores.
|
|
148
|
+
* Deve atualizar tanto o FormControl quanto o estado interno.
|
|
149
|
+
*/
|
|
150
|
+
setValue?(value: any, options?: ValueChangeOptions): void;
|
|
151
|
+
/**
|
|
152
|
+
* Obtém o valor atual do campo.
|
|
153
|
+
*
|
|
154
|
+
* @returns Valor atual ou null se não aplicável
|
|
155
|
+
*/
|
|
156
|
+
getValue?(): any;
|
|
157
|
+
/**
|
|
158
|
+
* Marca o componente como tocado (touched).
|
|
159
|
+
*
|
|
160
|
+
* Usado para controle de validação e exibição de mensagens de erro.
|
|
161
|
+
*/
|
|
162
|
+
markAsTouched?(): void;
|
|
163
|
+
/**
|
|
164
|
+
* Marca o componente como modificado (dirty).
|
|
165
|
+
*
|
|
166
|
+
* Indica que o valor foi alterado pelo usuário.
|
|
167
|
+
*/
|
|
168
|
+
markAsDirty?(): void;
|
|
169
|
+
/**
|
|
170
|
+
* Define o estado de loading do componente.
|
|
171
|
+
*
|
|
172
|
+
* Útil para botões e componentes que executam ações assíncronas.
|
|
173
|
+
*/
|
|
174
|
+
setLoading?(loading: boolean): void;
|
|
175
|
+
/**
|
|
176
|
+
* Define o estado de desabilitado do componente.
|
|
177
|
+
*/
|
|
178
|
+
setDisabled?(disabled: boolean): void;
|
|
179
|
+
/**
|
|
180
|
+
* Força a validação do componente.
|
|
181
|
+
*
|
|
182
|
+
* @returns Promise com erros de validação ou null se válido
|
|
183
|
+
*/
|
|
184
|
+
validateField?(): Promise<any>;
|
|
185
|
+
/**
|
|
186
|
+
* Reseta o componente para seu estado inicial.
|
|
187
|
+
*/
|
|
188
|
+
resetField?(): void;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Type guard para verificar se um objeto implementa BaseDynamicFieldComponent
|
|
192
|
+
*/
|
|
193
|
+
declare function isBaseDynamicFieldComponent(obj: any): obj is BaseDynamicFieldComponent;
|
|
194
|
+
/**
|
|
195
|
+
* Type guard para verificar se componente suporta valores (tem FormControl)
|
|
196
|
+
*/
|
|
197
|
+
declare function isValueBasedComponent(component: BaseDynamicFieldComponent): component is BaseDynamicFieldComponent & {
|
|
198
|
+
formControl: WritableSignal<AbstractControl | null>;
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Type guard para verificar se componente suporta loading
|
|
202
|
+
*/
|
|
203
|
+
declare function isLoadingCapableComponent(component: BaseDynamicFieldComponent): component is BaseDynamicFieldComponent & {
|
|
204
|
+
setLoading: (loading: boolean) => void;
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
interface BasicComponentState {
|
|
208
|
+
initialized: boolean;
|
|
209
|
+
focused: boolean;
|
|
210
|
+
disabled: boolean;
|
|
211
|
+
touched: boolean;
|
|
212
|
+
dirty: boolean;
|
|
213
|
+
}
|
|
214
|
+
interface BasicFieldState {
|
|
215
|
+
value: any;
|
|
216
|
+
valid: boolean;
|
|
217
|
+
errors: ValidationErrors | null;
|
|
218
|
+
}
|
|
219
|
+
interface BaseValidationConfig {
|
|
220
|
+
required?: boolean;
|
|
221
|
+
minLength?: number;
|
|
222
|
+
maxLength?: number;
|
|
223
|
+
pattern?: string | RegExp;
|
|
224
|
+
customValidator?: (value: any) => string | null;
|
|
225
|
+
messages?: {
|
|
226
|
+
required?: string;
|
|
227
|
+
minlength?: string;
|
|
228
|
+
maxlength?: string;
|
|
229
|
+
pattern?: string;
|
|
230
|
+
min?: string;
|
|
231
|
+
max?: string;
|
|
232
|
+
email?: string;
|
|
233
|
+
url?: string;
|
|
234
|
+
matchField?: string;
|
|
235
|
+
unique?: string;
|
|
236
|
+
requiredTrue?: string;
|
|
237
|
+
fileType?: string;
|
|
238
|
+
maxFileSize?: string;
|
|
239
|
+
minWords?: string;
|
|
240
|
+
conditionalValidation?: string;
|
|
241
|
+
custom?: string;
|
|
242
|
+
};
|
|
243
|
+
validateOnBlur?: boolean;
|
|
244
|
+
debounceTime?: number;
|
|
245
|
+
}
|
|
246
|
+
type LogLevel$1 = 'trace' | 'debug' | 'info' | 'warn' | 'error';
|
|
247
|
+
declare abstract class SimpleBaseInputComponent implements ControlValueAccessor, OnInit, OnDestroy, AfterViewInit, BaseDynamicFieldComponent {
|
|
248
|
+
protected readonly destroyRef: DestroyRef;
|
|
249
|
+
protected readonly elementRef: ElementRef<any>;
|
|
250
|
+
protected readonly cdr: ChangeDetectorRef;
|
|
251
|
+
private readonly injector;
|
|
252
|
+
private resolvedNgControl;
|
|
253
|
+
/** Subject para eventos de lifecycle */
|
|
254
|
+
readonly lifecycleEvents$: BehaviorSubject<ComponentLifecycleEvent | null>;
|
|
255
|
+
/** Native element registered by subclasses */
|
|
256
|
+
protected nativeElement: HTMLElement | null;
|
|
257
|
+
protected getNgControl(): NgControl | null;
|
|
258
|
+
/** Metadata do componente */
|
|
259
|
+
readonly metadata: _angular_core.WritableSignal<ComponentMetadata | null>;
|
|
260
|
+
/** Estado básico do componente */
|
|
261
|
+
protected readonly componentState: _angular_core.WritableSignal<BasicComponentState>;
|
|
262
|
+
/** Estado básico do campo */
|
|
263
|
+
protected readonly fieldState: _angular_core.WritableSignal<BasicFieldState>;
|
|
264
|
+
/** ID único do componente */
|
|
265
|
+
readonly componentId: _angular_core.WritableSignal<string>;
|
|
266
|
+
/** Rótulo visível do campo */
|
|
267
|
+
label?: string;
|
|
268
|
+
/** Placeholder opcional */
|
|
269
|
+
placeholder?: string;
|
|
270
|
+
/** Indica se o placeholder deve ser exibido */
|
|
271
|
+
get shouldShowPlaceholder(): boolean;
|
|
272
|
+
readonly internalControl: FormControl<any>;
|
|
273
|
+
/** FormControl signal para interface BaseDynamicFieldComponent */
|
|
274
|
+
readonly formControl: _angular_core.WritableSignal<FormControl<any> | null>;
|
|
275
|
+
/**
|
|
276
|
+
* Define um FormControl externo a ser utilizado como fonte de verdade.
|
|
277
|
+
*/
|
|
278
|
+
setExternalControl(control: AbstractControl): void;
|
|
279
|
+
/**
|
|
280
|
+
* Retorna o FormControl em uso pelo componente.
|
|
281
|
+
*
|
|
282
|
+
* Quando um controle externo é fornecido, ele tem precedência;
|
|
283
|
+
* caso contrário, o controle interno é utilizado.
|
|
284
|
+
*/
|
|
285
|
+
control(): FormControl;
|
|
286
|
+
protected onChange: (_value: any) => void;
|
|
287
|
+
private onTouched;
|
|
288
|
+
private syncInProgress;
|
|
289
|
+
readonly valueChange: _angular_core.OutputEmitterRef<any>;
|
|
290
|
+
readonly focusChange: _angular_core.OutputEmitterRef<boolean>;
|
|
291
|
+
readonly nativeBlur: _angular_core.OutputEmitterRef<FocusEvent>;
|
|
292
|
+
readonly nativeChange: _angular_core.OutputEmitterRef<Event>;
|
|
293
|
+
/** Configuração de validação baseada no metadata */
|
|
294
|
+
protected readonly validationConfig: _angular_core.Signal<BaseValidationConfig | null>;
|
|
295
|
+
/** Mensagem de erro atual */
|
|
296
|
+
readonly errorMessage: _angular_core.Signal<any>;
|
|
297
|
+
/** Posição/configuração de erro vinda do metadata */
|
|
298
|
+
readonly errorPosition: _angular_core.Signal<"bottom" | "top" | "tooltip">;
|
|
299
|
+
/** Se deve exibir erros inline (mat-error) */
|
|
300
|
+
readonly showInlineErrors: _angular_core.Signal<boolean>;
|
|
301
|
+
/** Tooltip habilitado quando errorPosition === 'tooltip' */
|
|
302
|
+
readonly tooltipEnabled: _angular_core.Signal<boolean>;
|
|
303
|
+
/** Posição do tooltip mapeada para Angular Material */
|
|
304
|
+
readonly tooltipPosition: _angular_core.Signal<"above" | "below">;
|
|
305
|
+
/** Gate to control when inline errors may display (debounced for 'change') */
|
|
306
|
+
private readonly errorDisplayReady;
|
|
307
|
+
private errorDebounceHandle;
|
|
308
|
+
/** Verifica se há erro de validação (respeita validationTrigger/debounce) */
|
|
309
|
+
readonly hasValidationError: _angular_core.Signal<boolean>;
|
|
310
|
+
/** CSS classes básicas do componente */
|
|
311
|
+
readonly baseCssClasses: _angular_core.Signal<string[]>;
|
|
312
|
+
/** CSS classes completas do componente (extensível por subclasses) */
|
|
313
|
+
readonly componentCssClasses: _angular_core.Signal<string>;
|
|
314
|
+
/** Tipo de input */
|
|
315
|
+
readonly inputType: _angular_core.Signal<any>;
|
|
316
|
+
/** Aparência Material */
|
|
317
|
+
readonly materialAppearance: _angular_core.Signal<any>;
|
|
318
|
+
/** Cor Material */
|
|
319
|
+
readonly materialColor: _angular_core.Signal<any>;
|
|
320
|
+
/** Comportamento do float label (auto | always) */
|
|
321
|
+
readonly floatLabelBehavior: _angular_core.Signal<"auto" | "always">;
|
|
322
|
+
constructor();
|
|
323
|
+
ngOnInit(): void;
|
|
324
|
+
ngAfterViewInit(): void;
|
|
325
|
+
ngOnDestroy(): void;
|
|
326
|
+
writeValue(value: any): void;
|
|
327
|
+
registerOnChange(fn: any): void;
|
|
328
|
+
registerOnTouched(fn: any): void;
|
|
329
|
+
setDisabledState(isDisabled: boolean): void;
|
|
330
|
+
handleInput(event: Event): void;
|
|
331
|
+
handleFocus(): void;
|
|
332
|
+
handleBlur(): void;
|
|
333
|
+
/**
|
|
334
|
+
* Retorna a paleta Material quando a cor for 'primary' | 'accent' | 'warn'.
|
|
335
|
+
* Caso contrário, retorna undefined para não aplicar [color].
|
|
336
|
+
*/
|
|
337
|
+
iconPalette(c?: string): 'primary' | 'accent' | 'warn' | undefined;
|
|
338
|
+
/**
|
|
339
|
+
* Retorna a cor customizada (CSS) quando não for paleta Material.
|
|
340
|
+
* Quando a cor for paleta, retorna null para não conflitar com [color].
|
|
341
|
+
*/
|
|
342
|
+
iconCustomColor(c?: string): string | null;
|
|
343
|
+
/**
|
|
344
|
+
* Define o valor do campo (implementação da interface BaseDynamicFieldComponent)
|
|
345
|
+
*/
|
|
346
|
+
setValue(value: any, options?: ValueChangeOptions): void;
|
|
347
|
+
/**
|
|
348
|
+
* Obtém o valor do campo
|
|
349
|
+
*/
|
|
350
|
+
getValue(): any;
|
|
351
|
+
/**
|
|
352
|
+
* Marca o campo como tocado
|
|
353
|
+
*/
|
|
354
|
+
markAsTouched(): void;
|
|
355
|
+
/**
|
|
356
|
+
* Marca o campo como sujo
|
|
357
|
+
*/
|
|
358
|
+
markAsDirty(): void;
|
|
359
|
+
/**
|
|
360
|
+
* Foca no elemento
|
|
361
|
+
*/
|
|
362
|
+
focus(): void;
|
|
363
|
+
/**
|
|
364
|
+
* Remove foco do elemento
|
|
365
|
+
*/
|
|
366
|
+
blur(): void;
|
|
367
|
+
/**
|
|
368
|
+
* Define metadata do componente
|
|
369
|
+
*/
|
|
370
|
+
protected setMetadata(metadata: ComponentMetadata): void;
|
|
371
|
+
/** Registra elemento nativo e aplica atributos/eventos */
|
|
372
|
+
protected registerInputElement(el: HTMLElement): void;
|
|
373
|
+
/** Aplica atributos e ARIA com base no metadata */
|
|
374
|
+
protected applyNativeAttributes(): void;
|
|
375
|
+
/** Vincula handlers nativos de eventos */
|
|
376
|
+
private attachNativeEventHandlers;
|
|
377
|
+
/**
|
|
378
|
+
* Força validação do campo
|
|
379
|
+
*/
|
|
380
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
381
|
+
/**
|
|
382
|
+
* Hook chamado após inicialização - implementação da interface BaseDynamicFieldComponent
|
|
383
|
+
* Subclasses podem override para implementar comportamento específico
|
|
384
|
+
*/
|
|
385
|
+
onComponentInit?(): void;
|
|
386
|
+
/**
|
|
387
|
+
* Hook chamado antes da destruição - implementação da interface BaseDynamicFieldComponent
|
|
388
|
+
* Subclasses podem override para limpeza específica
|
|
389
|
+
*/
|
|
390
|
+
onComponentDestroy?(): void;
|
|
391
|
+
/**
|
|
392
|
+
* Define estado de loading - implementação da interface BaseDynamicFieldComponent
|
|
393
|
+
*/
|
|
394
|
+
setLoading?(loading: boolean): void;
|
|
395
|
+
/**
|
|
396
|
+
* Define estado desabilitado - implementação da interface BaseDynamicFieldComponent
|
|
397
|
+
*/
|
|
398
|
+
setDisabled?(disabled: boolean): void;
|
|
399
|
+
/**
|
|
400
|
+
* Reset do campo - implementação da interface BaseDynamicFieldComponent
|
|
401
|
+
*/
|
|
402
|
+
resetField?(): void;
|
|
403
|
+
/**
|
|
404
|
+
* Retorna classes CSS específicas da subclasse
|
|
405
|
+
* Subclasses devem implementar este método para adicionar suas próprias classes
|
|
406
|
+
*/
|
|
407
|
+
protected getSpecificCssClasses(): string[];
|
|
408
|
+
private setupFormControlIntegration;
|
|
409
|
+
private refreshErrorTooltip;
|
|
410
|
+
private setupValidators;
|
|
411
|
+
private applyValidators;
|
|
412
|
+
private createCustomValidator;
|
|
413
|
+
private generateUniqueId;
|
|
414
|
+
private getTransformApply;
|
|
415
|
+
private getTransformName;
|
|
416
|
+
private getValidationTrigger;
|
|
417
|
+
private getValidationDebounce;
|
|
418
|
+
private applyErrorDebounceOnChange;
|
|
419
|
+
private applyTransformOnBlur;
|
|
420
|
+
private restoreRawValueForEditing;
|
|
421
|
+
private applyFunctionalDisplayTransformImmediately;
|
|
422
|
+
/**
|
|
423
|
+
* Sistema de logging básico
|
|
424
|
+
*/
|
|
425
|
+
protected log(level: LogLevel$1, message: string, data?: any): void;
|
|
426
|
+
private emitLifecycleEvent;
|
|
427
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SimpleBaseInputComponent, never>;
|
|
428
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SimpleBaseInputComponent, never, never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; }, { "valueChange": "valueChange"; "focusChange": "focusChange"; "nativeBlur": "nativeBlur"; "nativeChange": "nativeChange"; }, never, never, true, never>;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
interface BasicButtonState {
|
|
432
|
+
initialized: boolean;
|
|
433
|
+
loading: boolean;
|
|
434
|
+
disabled: boolean;
|
|
435
|
+
focused: boolean;
|
|
436
|
+
clicked: boolean;
|
|
437
|
+
error: Error | null;
|
|
438
|
+
}
|
|
439
|
+
interface ButtonAction {
|
|
440
|
+
type: 'navigation' | 'external-link' | 'custom' | 'form-action';
|
|
441
|
+
target?: string;
|
|
442
|
+
payload?: any;
|
|
443
|
+
confirmation?: {
|
|
444
|
+
title: string;
|
|
445
|
+
message: string;
|
|
446
|
+
confirmLabel?: string;
|
|
447
|
+
cancelLabel?: string;
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error';
|
|
451
|
+
declare abstract class SimpleBaseButtonComponent implements OnInit, OnDestroy, BaseDynamicFieldComponent {
|
|
452
|
+
protected readonly destroyRef: DestroyRef;
|
|
453
|
+
protected readonly elementRef: ElementRef<any>;
|
|
454
|
+
protected readonly cdr: ChangeDetectorRef;
|
|
455
|
+
protected readonly router: Router;
|
|
456
|
+
protected readonly dialog: MatDialog;
|
|
457
|
+
/** Subject para eventos de lifecycle */
|
|
458
|
+
readonly lifecycleEvents$: BehaviorSubject<ComponentLifecycleEvent | null>;
|
|
459
|
+
/** Metadata do componente */
|
|
460
|
+
readonly metadata: _angular_core.WritableSignal<ComponentMetadata | null>;
|
|
461
|
+
/** Estado básico do botão */
|
|
462
|
+
protected readonly buttonState: _angular_core.WritableSignal<BasicButtonState>;
|
|
463
|
+
/** Ação configurada para o botão */
|
|
464
|
+
protected readonly buttonAction: _angular_core.WritableSignal<ButtonAction | null>;
|
|
465
|
+
/** Métricas de clique */
|
|
466
|
+
private readonly clickMetrics;
|
|
467
|
+
/** ID único do componente */
|
|
468
|
+
readonly componentId: _angular_core.WritableSignal<string>;
|
|
469
|
+
readonly actionExecuted: _angular_core.OutputEmitterRef<any>;
|
|
470
|
+
readonly click: _angular_core.OutputEmitterRef<MouseEvent>;
|
|
471
|
+
readonly focusChange: _angular_core.OutputEmitterRef<boolean>;
|
|
472
|
+
/** CSS classes básicas do botão */
|
|
473
|
+
readonly baseButtonCssClasses: _angular_core.Signal<string[]>;
|
|
474
|
+
/** CSS classes completas do botão (extensível por subclasses) */
|
|
475
|
+
readonly componentCssClasses: _angular_core.Signal<string>;
|
|
476
|
+
/** Tipo de botão Material */
|
|
477
|
+
readonly buttonType: _angular_core.Signal<any>;
|
|
478
|
+
/** Aparência Material */
|
|
479
|
+
readonly materialAppearance: _angular_core.Signal<any>;
|
|
480
|
+
/** Cor Material */
|
|
481
|
+
readonly materialColor: _angular_core.Signal<any>;
|
|
482
|
+
/** Se o botão está desabilitado */
|
|
483
|
+
readonly isDisabled: _angular_core.Signal<any>;
|
|
484
|
+
/** Se o botão está em loading */
|
|
485
|
+
readonly isLoading: _angular_core.Signal<any>;
|
|
486
|
+
/** Texto a ser exibido no botão */
|
|
487
|
+
readonly buttonText: _angular_core.Signal<any>;
|
|
488
|
+
/** Ícone a ser exibido */
|
|
489
|
+
readonly buttonIcon: _angular_core.Signal<any>;
|
|
490
|
+
ngOnInit(): void;
|
|
491
|
+
ngOnDestroy(): void;
|
|
492
|
+
handleClick(event: MouseEvent): Promise<void>;
|
|
493
|
+
handleFocus(): void;
|
|
494
|
+
handleBlur(): void;
|
|
495
|
+
/**
|
|
496
|
+
* Define loading state
|
|
497
|
+
*/
|
|
498
|
+
setLoading(loading: boolean): void;
|
|
499
|
+
/**
|
|
500
|
+
* Define disabled state
|
|
501
|
+
*/
|
|
502
|
+
setDisabled(disabled: boolean): void;
|
|
503
|
+
/**
|
|
504
|
+
* Executa ação programaticamente
|
|
505
|
+
*/
|
|
506
|
+
triggerAction(): Promise<void>;
|
|
507
|
+
/**
|
|
508
|
+
* Foca no botão
|
|
509
|
+
*/
|
|
510
|
+
focus(): void;
|
|
511
|
+
/**
|
|
512
|
+
* Remove foco do botão
|
|
513
|
+
*/
|
|
514
|
+
blur(): void;
|
|
515
|
+
/**
|
|
516
|
+
* Define metadata do componente
|
|
517
|
+
*/
|
|
518
|
+
protected setMetadata(metadata: ComponentMetadata): void;
|
|
519
|
+
/**
|
|
520
|
+
* Retorna classes CSS específicas da subclasse
|
|
521
|
+
*/
|
|
522
|
+
protected getSpecificCssClasses(): string[];
|
|
523
|
+
/**
|
|
524
|
+
* Hook chamado após inicialização - implementação da interface BaseDynamicFieldComponent
|
|
525
|
+
* Subclasses podem override para implementar comportamento específico
|
|
526
|
+
*/
|
|
527
|
+
onComponentInit?(): void;
|
|
528
|
+
/**
|
|
529
|
+
* Hook chamado antes da destruição - implementação da interface BaseDynamicFieldComponent
|
|
530
|
+
* Subclasses podem override para limpeza específica
|
|
531
|
+
*/
|
|
532
|
+
onComponentDestroy?(): void;
|
|
533
|
+
/**
|
|
534
|
+
* Hook chamado antes da execução de ação - para subclasses implementarem
|
|
535
|
+
*/
|
|
536
|
+
protected onBeforeAction(action: ButtonAction): Promise<boolean>;
|
|
537
|
+
/**
|
|
538
|
+
* Hook chamado após execução de ação - para subclasses implementarem
|
|
539
|
+
*/
|
|
540
|
+
protected onAfterAction(action: ButtonAction, result: any): Promise<void>;
|
|
541
|
+
private initializeButtonAction;
|
|
542
|
+
private executeAction;
|
|
543
|
+
private showConfirmation;
|
|
544
|
+
private executeCustomAction;
|
|
545
|
+
private executeFormAction;
|
|
546
|
+
private shouldAllowClick;
|
|
547
|
+
private updateClickMetrics;
|
|
548
|
+
private handleError;
|
|
549
|
+
private generateUniqueId;
|
|
550
|
+
/**
|
|
551
|
+
* Sistema de logging básico
|
|
552
|
+
*/
|
|
553
|
+
protected log(level: LogLevel, message: string, data?: any): void;
|
|
554
|
+
/**
|
|
555
|
+
* Emite evento de lifecycle
|
|
556
|
+
*/
|
|
557
|
+
private emitLifecycleEvent;
|
|
558
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SimpleBaseButtonComponent, never>;
|
|
559
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SimpleBaseButtonComponent, never, never, {}, { "actionExecuted": "actionExecuted"; "click": "click"; "focusChange": "focusChange"; }, never, never, true, never>;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* Generic option definition for select components.
|
|
564
|
+
*/
|
|
565
|
+
interface SelectOption<T = any> {
|
|
566
|
+
/** Display label for the option */
|
|
567
|
+
label: string;
|
|
568
|
+
/** Value associated with the option */
|
|
569
|
+
value: T;
|
|
570
|
+
/** Whether the option is disabled */
|
|
571
|
+
disabled?: boolean;
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* Metadata configuration for simple select components.
|
|
575
|
+
*/
|
|
576
|
+
interface SimpleSelectMetadata<T = any> extends ComponentMetadata {
|
|
577
|
+
/** Available options */
|
|
578
|
+
options?: SelectOption<T>[];
|
|
579
|
+
/** Allow multiple selections */
|
|
580
|
+
multiple?: boolean;
|
|
581
|
+
/** Whether search input should be displayed */
|
|
582
|
+
searchable?: boolean;
|
|
583
|
+
/** Show select all option */
|
|
584
|
+
selectAll?: boolean;
|
|
585
|
+
/** Maximum number of selections allowed */
|
|
586
|
+
maxSelections?: number;
|
|
587
|
+
/**
|
|
588
|
+
* When to load remote options (for async selects)
|
|
589
|
+
* - 'open' (default): first fetch happens when the select is opened
|
|
590
|
+
* - 'init': first fetch happens on component initialization
|
|
591
|
+
* - 'none': do not auto-load; consumer must call retry()/loadMore()
|
|
592
|
+
*/
|
|
593
|
+
loadOn?: 'open' | 'init' | 'none';
|
|
594
|
+
/** Backend resource for dynamic options */
|
|
595
|
+
resourcePath?: string;
|
|
596
|
+
/** Additional filter criteria for backend requests */
|
|
597
|
+
filterCriteria?: Record<string, any>;
|
|
598
|
+
/** Key for option label when loading from backend */
|
|
599
|
+
optionLabelKey?: string;
|
|
600
|
+
/** Key for option value when loading from backend */
|
|
601
|
+
optionValueKey?: string;
|
|
602
|
+
/** Placeholder option text when no value is selected */
|
|
603
|
+
emptyOptionText?: string;
|
|
604
|
+
/** Function to display option values */
|
|
605
|
+
displayWith?: (value: any) => string;
|
|
606
|
+
/** Custom compareWith for MatSelect */
|
|
607
|
+
compareWith?: (a: any, b: any) => boolean;
|
|
608
|
+
}
|
|
609
|
+
/**
|
|
610
|
+
* Base directive providing common select behaviour. Extends
|
|
611
|
+
* `SimpleBaseInputComponent` and manages option handling, multiple
|
|
612
|
+
* selection, selection change events and helper utilities used by the
|
|
613
|
+
* concrete Material components.
|
|
614
|
+
*/
|
|
615
|
+
declare abstract class SimpleBaseSelectComponent<T = any> extends SimpleBaseInputComponent {
|
|
616
|
+
protected readonly matSelectRef: _angular_core.Signal<MatSelect | undefined>;
|
|
617
|
+
/** Available options */
|
|
618
|
+
readonly options: _angular_core.WritableSignal<SelectOption<T>[]>;
|
|
619
|
+
/** Whether multiple selection is enabled */
|
|
620
|
+
readonly multiple: _angular_core.WritableSignal<boolean>;
|
|
621
|
+
/** Whether the component should allow searching */
|
|
622
|
+
readonly searchable: _angular_core.WritableSignal<boolean>;
|
|
623
|
+
/** Current search term when `searchable` is enabled */
|
|
624
|
+
readonly searchTerm: _angular_core.WritableSignal<string>;
|
|
625
|
+
/** Emits whenever the search term changes */
|
|
626
|
+
readonly searchTermChange: _angular_core.OutputEmitterRef<string>;
|
|
627
|
+
/** Whether a "select all" helper should be displayed */
|
|
628
|
+
readonly selectAll: _angular_core.WritableSignal<boolean>;
|
|
629
|
+
/** Maximum number of selections allowed (only applies when multiple=true) */
|
|
630
|
+
readonly maxSelections: _angular_core.WritableSignal<number | null>;
|
|
631
|
+
/** Backend resource path for dynamic option loading */
|
|
632
|
+
readonly resourcePath: _angular_core.WritableSignal<string | null>;
|
|
633
|
+
/** Criteria applied to backend filtering */
|
|
634
|
+
readonly filterCriteria: _angular_core.WritableSignal<Record<string, any>>;
|
|
635
|
+
/** Field used for option labels when loading from backend */
|
|
636
|
+
readonly optionLabelKey: _angular_core.WritableSignal<string>;
|
|
637
|
+
/** Field used for option values when loading from backend */
|
|
638
|
+
readonly optionValueKey: _angular_core.WritableSignal<string>;
|
|
639
|
+
/** Text displayed for an empty option */
|
|
640
|
+
readonly emptyOptionText: _angular_core.WritableSignal<string | null>;
|
|
641
|
+
/** Current page index when fetching remote options */
|
|
642
|
+
readonly pageIndex: _angular_core.WritableSignal<number>;
|
|
643
|
+
/** Number of options retrieved per request */
|
|
644
|
+
readonly pageSize: _angular_core.WritableSignal<number>;
|
|
645
|
+
/** Indicates options are being loaded from backend */
|
|
646
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
647
|
+
/** Holds error message when option loading fails */
|
|
648
|
+
readonly error: _angular_core.WritableSignal<string | null>;
|
|
649
|
+
private readonly matSelectInitEffect;
|
|
650
|
+
/** CRUD service for remote option loading (optional) */
|
|
651
|
+
protected readonly crudService: GenericCrudService<any> | null;
|
|
652
|
+
/** Emits whenever the selected value(s) change */
|
|
653
|
+
readonly selectionChange: _angular_core.OutputEmitterRef<T | T[]>;
|
|
654
|
+
/** Emits whenever a specific option is selected */
|
|
655
|
+
readonly optionSelected: _angular_core.OutputEmitterRef<SelectOption<T>>;
|
|
656
|
+
/** Emits whenever options are loaded remotely */
|
|
657
|
+
readonly optionsLoaded: _angular_core.OutputEmitterRef<SelectOption<T>[]>;
|
|
658
|
+
readonly openedChange: _angular_core.OutputEmitterRef<boolean>;
|
|
659
|
+
protected matSelect: MatSelect | null;
|
|
660
|
+
protected readonly global: GlobalConfigService;
|
|
661
|
+
private dependencySub;
|
|
662
|
+
private hasLoadedOnce;
|
|
663
|
+
/** Options filtered according to the current `searchTerm` */
|
|
664
|
+
readonly filteredOptions: _angular_core.Signal<SelectOption<T>[]>;
|
|
665
|
+
/**
|
|
666
|
+
* Applies typed metadata to the select component.
|
|
667
|
+
*/
|
|
668
|
+
setSelectMetadata(metadata: SimpleSelectMetadata<T>): void;
|
|
669
|
+
protected setMetadata(metadata: ComponentMetadata): void;
|
|
670
|
+
protected registerMatSelect(select: MatSelect): void;
|
|
671
|
+
protected applySelectAttributes(): void;
|
|
672
|
+
/** Whether to show the clear button (if enabled in metadata) */
|
|
673
|
+
showClear(): boolean;
|
|
674
|
+
/** Clears the selection according to single/multiple mode */
|
|
675
|
+
onClearClick(): void;
|
|
676
|
+
/**
|
|
677
|
+
* Updates the current search term and emits the change event.
|
|
678
|
+
*/
|
|
679
|
+
onSearch(term: string): void;
|
|
680
|
+
/**
|
|
681
|
+
* Applies metadata after the component is initialized by the
|
|
682
|
+
* DynamicFieldLoader, ensuring options and remote configuration are
|
|
683
|
+
* processed when using the component declaratively.
|
|
684
|
+
*/
|
|
685
|
+
onComponentInit(): void;
|
|
686
|
+
/**
|
|
687
|
+
* Selects the given option. Handles both single and multiple selection
|
|
688
|
+
* modes and emits the proper events.
|
|
689
|
+
*/
|
|
690
|
+
selectOption(option: SelectOption<T>): void;
|
|
691
|
+
/** Checks if the provided value is currently selected */
|
|
692
|
+
isSelected(value: T): boolean;
|
|
693
|
+
/**
|
|
694
|
+
* Toggles selection of all options when `selectAll` is enabled in multiple
|
|
695
|
+
* selection mode.
|
|
696
|
+
*/
|
|
697
|
+
toggleSelectAll(): void;
|
|
698
|
+
/** Checks whether all options are currently selected */
|
|
699
|
+
isAllSelected(): boolean;
|
|
700
|
+
/** TrackBy function to optimize ngFor over options */
|
|
701
|
+
trackByOption(index: number, option: SelectOption<T>): T;
|
|
702
|
+
/** Adds CSS class hook for select components */
|
|
703
|
+
protected getSpecificCssClasses(): string[];
|
|
704
|
+
/** Configures the CRUD service with the given resource path */
|
|
705
|
+
protected configureCrudService(path: string): void;
|
|
706
|
+
/**
|
|
707
|
+
* Loads schema metadata to infer label/value keys when not provided.
|
|
708
|
+
* After resolving the keys, options are fetched from the backend.
|
|
709
|
+
*/
|
|
710
|
+
protected loadSchema(resolveLabel: boolean, resolveValue: boolean): void;
|
|
711
|
+
/** Loads options from backend using GenericCrudService */
|
|
712
|
+
protected loadOptions(page?: number, searchTerm?: string, criteria?: Record<string, any>): void;
|
|
713
|
+
/** Dev-only warning when legacy alias keys are used instead of canonical ones */
|
|
714
|
+
protected devWarnSelectAliases(meta: any, component?: string): void;
|
|
715
|
+
/** Public API to reload options; overridden by async/searchable variants */
|
|
716
|
+
reload(reset: boolean): void;
|
|
717
|
+
/** Marks that at least one successful load has happened */
|
|
718
|
+
protected markLoadedOnce(): void;
|
|
719
|
+
protected hasLoaded(): boolean;
|
|
720
|
+
/** Setup effect to re-bind dependency observers when FormControl changes */
|
|
721
|
+
private readonly _depEffect;
|
|
722
|
+
/** (Re)configure dependency observers based on metadata and current FormGroup */
|
|
723
|
+
protected setupDependencies(): void;
|
|
724
|
+
protected extractDependencyValue(raw: any, path?: string): any;
|
|
725
|
+
protected applyDependencyCriteria(fragment: Record<string, any>, strategy?: 'merge' | 'replace'): void;
|
|
726
|
+
protected onDependenciesChanged(): void;
|
|
727
|
+
private getByPath;
|
|
728
|
+
private setByPath;
|
|
729
|
+
private unsetByPath;
|
|
730
|
+
private mergeObjectsDeep;
|
|
731
|
+
private replaceMappedKeys;
|
|
732
|
+
private clone;
|
|
733
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SimpleBaseSelectComponent<any>, never>;
|
|
734
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SimpleBaseSelectComponent<any>, never, never, {}, { "searchTermChange": "searchTermChange"; "selectionChange": "selectionChange"; "optionSelected": "optionSelected"; "optionsLoaded": "optionsLoaded"; "openedChange": "openedChange"; }, never, never, true, never>;
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
type OptionSource = 'byId' | 'page';
|
|
738
|
+
declare class OptionStore<ID = string | number> {
|
|
739
|
+
private readonly map;
|
|
740
|
+
private readonly order;
|
|
741
|
+
readonly loadedPages: Set<number>;
|
|
742
|
+
upsertById(option: OptionDTO<ID>, ephemeral?: boolean): void;
|
|
743
|
+
addPage(pageIndex: number, page: OptionDTO<ID>[]): void;
|
|
744
|
+
ensureVisible(ids: ID[]): void;
|
|
745
|
+
clearPages(): void;
|
|
746
|
+
get items(): OptionDTO<ID>[];
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
/**
|
|
750
|
+
* @fileoverview Diretiva para renderização dinâmica de campos de formulário
|
|
751
|
+
*
|
|
752
|
+
* Renderiza campos de formulário dinamicamente com base em metadados,
|
|
753
|
+
* integrando com ComponentRegistryService para resolver tipos de componentes
|
|
754
|
+
* e associando automaticamente com FormGroup controls.
|
|
755
|
+
*
|
|
756
|
+
* @example Uso básico
|
|
757
|
+
* ```html
|
|
758
|
+
* <ng-container
|
|
759
|
+
* dynamicFieldLoader
|
|
760
|
+
* [fields]="fieldMetadata"
|
|
761
|
+
* [formGroup]="userForm"
|
|
762
|
+
* (componentsCreated)="onComponentsReady($event)">
|
|
763
|
+
* </ng-container>
|
|
764
|
+
* ```
|
|
765
|
+
*
|
|
766
|
+
* @example Uso avançado com template personalizado
|
|
767
|
+
* ```html
|
|
768
|
+
* <div class="dynamic-form-container">
|
|
769
|
+
* <ng-container
|
|
770
|
+
* dynamicFieldLoader
|
|
771
|
+
* [fields]="complexFields"
|
|
772
|
+
* [formGroup]="complexForm"
|
|
773
|
+
* (componentsCreated)="handleComponents($event)">
|
|
774
|
+
* </ng-container>
|
|
775
|
+
* </div>
|
|
776
|
+
* ```
|
|
777
|
+
*
|
|
778
|
+
* Concurrency & Stability
|
|
779
|
+
* - The directive may receive rapid, back-to-back input changes (e.g. initial
|
|
780
|
+
* binding triggers ngOnChanges followed immediately by ngOnInit). Because
|
|
781
|
+
* component resolution is async, naive implementations can interleave two
|
|
782
|
+
* render cycles, causing duplicated shells/components. To avoid this, the
|
|
783
|
+
* render pipeline is serialized with a lightweight reentrancy guard
|
|
784
|
+
* (isRendering + pendingRender), coalescing intermediate requests into a
|
|
785
|
+
* single subsequent pass.
|
|
786
|
+
* - All component/shell references and subscriptions are tracked and disposed
|
|
787
|
+
* deterministically to prevent memory leaks.
|
|
788
|
+
*/
|
|
789
|
+
|
|
790
|
+
/**
|
|
791
|
+
* Diretiva que renderiza campos de formulário dinamicamente baseado em metadados.
|
|
792
|
+
*
|
|
793
|
+
* Integra-se com ComponentRegistryService para resolver componentes por tipo,
|
|
794
|
+
* associa automaticamente FormControls e emite referências dos componentes criados.
|
|
795
|
+
*
|
|
796
|
+
* ## 🏗️ Funcionalidades Principais
|
|
797
|
+
*
|
|
798
|
+
* - ✅ Renderização dinâmica baseada em FieldMetadata[]
|
|
799
|
+
* - ✅ Integração automática com Angular Reactive Forms
|
|
800
|
+
* - ✅ Resolução de componentes via ComponentRegistryService
|
|
801
|
+
* - ✅ Validação robusta de inputs
|
|
802
|
+
* - ✅ Emissão de ComponentRef para controle externo
|
|
803
|
+
* - ✅ Lifecycle management completo
|
|
804
|
+
* - ✅ Detecção automática de mudanças
|
|
805
|
+
*
|
|
806
|
+
* ## 🎯 Casos de Uso
|
|
807
|
+
*
|
|
808
|
+
* - Formulários dinâmicos baseados em configuração JSON
|
|
809
|
+
* - Admin panels com campos configuráveis
|
|
810
|
+
* - Workflows com etapas dinâmicas
|
|
811
|
+
* - Formulários gerados por API/backend
|
|
812
|
+
* - A/B testing de interfaces de formulário
|
|
813
|
+
*
|
|
814
|
+
* @selector [dynamicFieldLoader]
|
|
815
|
+
* @usageNotes
|
|
816
|
+
* - Sempre fornecer tanto fields quanto formGroup
|
|
817
|
+
* - FormGroup deve ter controls correspondentes aos field names
|
|
818
|
+
* - Usar ViewChild para capturar referências se necessário
|
|
819
|
+
* - Componentes são criados de forma lazy (apenas quando necessário)
|
|
820
|
+
*/
|
|
821
|
+
declare class DynamicFieldLoaderDirective implements OnInit, OnDestroy, OnChanges {
|
|
822
|
+
private readonly viewContainer;
|
|
823
|
+
private readonly componentRegistry;
|
|
824
|
+
private readonly cdr;
|
|
825
|
+
/**
|
|
826
|
+
* Metadados dos campos a serem renderizados.
|
|
827
|
+
*
|
|
828
|
+
* Array de objetos FieldMetadata que define a estrutura,
|
|
829
|
+
* validação e comportamento de cada campo do formulário.
|
|
830
|
+
*
|
|
831
|
+
* @example
|
|
832
|
+
* ```typescript
|
|
833
|
+
* const fields: FieldMetadata[] = [
|
|
834
|
+
* {
|
|
835
|
+
* name: 'email',
|
|
836
|
+
* label: 'Email',
|
|
837
|
+
* controlType: 'input',
|
|
838
|
+
* required: true,
|
|
839
|
+
* validators: { email: true }
|
|
840
|
+
* },
|
|
841
|
+
* {
|
|
842
|
+
* name: 'password',
|
|
843
|
+
* label: 'Senha',
|
|
844
|
+
* controlType: 'input',
|
|
845
|
+
* inputType: 'password',
|
|
846
|
+
* required: true
|
|
847
|
+
* }
|
|
848
|
+
* ];
|
|
849
|
+
* ```
|
|
850
|
+
*/
|
|
851
|
+
fields: FieldMetadata[];
|
|
852
|
+
/**
|
|
853
|
+
* FormGroup que gerencia os controles dos campos.
|
|
854
|
+
*
|
|
855
|
+
* Deve conter AbstractControl para cada campo definido no array fields.
|
|
856
|
+
* A diretiva associa automaticamente cada componente ao control correspondente.
|
|
857
|
+
*
|
|
858
|
+
* @example
|
|
859
|
+
* ```typescript
|
|
860
|
+
* const formGroup = this.fb.group({
|
|
861
|
+
* email: ['', [Validators.required, Validators.email]],
|
|
862
|
+
* password: ['', [Validators.required, Validators.minLength(8)]]
|
|
863
|
+
* });
|
|
864
|
+
* ```
|
|
865
|
+
*/
|
|
866
|
+
formGroup: FormGroup | null;
|
|
867
|
+
/**
|
|
868
|
+
* Controla se a diretiva deve injetar o AbstractControl externo
|
|
869
|
+
* diretamente no componente via setExternalControl(control).
|
|
870
|
+
*
|
|
871
|
+
* Quando false (padrão), a diretiva apenas atribui o control ao signal
|
|
872
|
+
* formControl, caso o componente o exponha, evitando acoplamento.
|
|
873
|
+
*/
|
|
874
|
+
enableExternalControlBinding: boolean;
|
|
875
|
+
/**
|
|
876
|
+
* Template opcional para embrulhar cada campo renderizado.
|
|
877
|
+
*
|
|
878
|
+
* O contexto fornece:
|
|
879
|
+
* - `field`: metadata do campo
|
|
880
|
+
* - `index`: posição do campo na lista
|
|
881
|
+
* - `content`: `TemplateRef` com o conteúdo do campo a ser projetado
|
|
882
|
+
*
|
|
883
|
+
* @example
|
|
884
|
+
* ```html
|
|
885
|
+
* <ng-template #fieldItem let-field="field" let-index="index" let-content="content">
|
|
886
|
+
* <div class="field-wrapper">
|
|
887
|
+
* <ng-container [ngTemplateOutlet]="content"></ng-container>
|
|
888
|
+
* </div>
|
|
889
|
+
* </ng-template>
|
|
890
|
+
*
|
|
891
|
+
* <ng-container
|
|
892
|
+
* dynamicFieldLoader
|
|
893
|
+
* [fields]="fields"
|
|
894
|
+
* [formGroup]="form"
|
|
895
|
+
* [itemTemplate]="fieldItem">
|
|
896
|
+
* </ng-container>
|
|
897
|
+
* ```
|
|
898
|
+
*
|
|
899
|
+
* O `itemTemplate` permite projetar elementos adicionais ao redor do conteúdo
|
|
900
|
+
* do campo. Não há suporte a arraste no `FieldShellComponent`.
|
|
901
|
+
*/
|
|
902
|
+
itemTemplate?: TemplateRef<{
|
|
903
|
+
field: FieldMetadata;
|
|
904
|
+
index: number;
|
|
905
|
+
content: TemplateRef<any>;
|
|
906
|
+
}>;
|
|
907
|
+
/**
|
|
908
|
+
* Estados globais opcionais aplicados a todos os campos renderizados.
|
|
909
|
+
*
|
|
910
|
+
* Quando definidos, não substituem explicitamente metadados a menos que
|
|
911
|
+
* seja necessário (ex.: readonlyMode/presentationMode = true, visible = false,
|
|
912
|
+
* disabledMode = true). Quando não definidos (null), prevalecem metadados.
|
|
913
|
+
*/
|
|
914
|
+
readonlyMode: boolean | null;
|
|
915
|
+
disabledMode: boolean | null;
|
|
916
|
+
presentationMode: boolean | null;
|
|
917
|
+
visible: boolean | null;
|
|
918
|
+
/** @internal Special input for canvas mode integration */
|
|
919
|
+
canvasMode: boolean;
|
|
920
|
+
/**
|
|
921
|
+
* Emite um mapa com as referências dos componentes criados.
|
|
922
|
+
*
|
|
923
|
+
* Indexado pelo nome do campo (FieldMetadata.name).
|
|
924
|
+
* Útil para controle externo, validação customizada ou manipulação direta.
|
|
925
|
+
*
|
|
926
|
+
* @example
|
|
927
|
+
* ```typescript
|
|
928
|
+
* onComponentsCreated(components: Map<string, ComponentRef<BaseDynamicFieldComponent>>) {
|
|
929
|
+
* // Acessar componente específico
|
|
930
|
+
* const emailComponent = components.get('email');
|
|
931
|
+
* if (emailComponent) {
|
|
932
|
+
* emailComponent.instance.focus();
|
|
933
|
+
* }
|
|
934
|
+
*
|
|
935
|
+
* // Iterar todos os componentes
|
|
936
|
+
* components.forEach((componentRef, fieldName) => {
|
|
937
|
+
* console.log(`Campo ${fieldName} criado:`, componentRef.instance);
|
|
938
|
+
* });
|
|
939
|
+
* }
|
|
940
|
+
* ```
|
|
941
|
+
*/
|
|
942
|
+
componentsCreated: EventEmitter<Map<string, ComponentRef<BaseDynamicFieldComponent>>>;
|
|
943
|
+
/** Evento emitido após a criação individual de um campo */
|
|
944
|
+
fieldCreated: EventEmitter<{
|
|
945
|
+
field: FieldMetadata;
|
|
946
|
+
componentRef: ComponentRef<any>;
|
|
947
|
+
index: number;
|
|
948
|
+
}>;
|
|
949
|
+
/** Evento emitido quando um campo é destruído */
|
|
950
|
+
fieldDestroyed: EventEmitter<{
|
|
951
|
+
fieldName: string;
|
|
952
|
+
}>;
|
|
953
|
+
/** @internal Emits when a field is hovered in canvas mode */
|
|
954
|
+
canvasMouseEnter: EventEmitter<{
|
|
955
|
+
field: FieldMetadata;
|
|
956
|
+
element: HTMLElement;
|
|
957
|
+
}>;
|
|
958
|
+
/** @internal Emits when a field is no longer hovered in canvas mode */
|
|
959
|
+
canvasMouseLeave: EventEmitter<{
|
|
960
|
+
field: FieldMetadata;
|
|
961
|
+
element: HTMLElement;
|
|
962
|
+
}>;
|
|
963
|
+
/** @internal Emits when a field is clicked in canvas mode */
|
|
964
|
+
canvasClick: EventEmitter<{
|
|
965
|
+
field: FieldMetadata;
|
|
966
|
+
element: HTMLElement;
|
|
967
|
+
}>;
|
|
968
|
+
/** Mapa interno de componentes criados */
|
|
969
|
+
private componentRefs;
|
|
970
|
+
/** Mapa de shells criados */
|
|
971
|
+
private shellRefs;
|
|
972
|
+
/** Subscription manager for shell events */
|
|
973
|
+
private shellSubscriptions;
|
|
974
|
+
/** Ordem atual dos nomes de campo renderizados */
|
|
975
|
+
private currentOrder;
|
|
976
|
+
/** Snapshot compacto para detectar mudanças relevantes nos campos (tipo + flags principais) */
|
|
977
|
+
private lastFieldsSnapshot;
|
|
978
|
+
/** First-render guard to ignore transient input changes */
|
|
979
|
+
/** Serialize async renders to avoid duplicate creations on rapid changes */
|
|
980
|
+
private isRendering;
|
|
981
|
+
private pendingRender;
|
|
982
|
+
private _dbgPrevFieldsRef;
|
|
983
|
+
private _dbgPrevFormGroupRef;
|
|
984
|
+
private _dbgNgChangesCount;
|
|
985
|
+
private _dbgRenderCalls;
|
|
986
|
+
private debugEnabled;
|
|
987
|
+
/** Tracks whether at least one successful render has completed */
|
|
988
|
+
private hasRenderedOnce;
|
|
989
|
+
private dbg;
|
|
990
|
+
ngOnInit(): void;
|
|
991
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
992
|
+
ngOnDestroy(): void;
|
|
993
|
+
/**
|
|
994
|
+
* Re-renderiza todos os campos forçadamente.
|
|
995
|
+
*
|
|
996
|
+
* Útil quando metadata ou FormGroup foram alterados externamente
|
|
997
|
+
* e a detecção automática de mudanças não foi suficiente.
|
|
998
|
+
*
|
|
999
|
+
* @example
|
|
1000
|
+
* ```typescript
|
|
1001
|
+
* @ViewChild(DynamicFieldLoaderDirective)
|
|
1002
|
+
* fieldLoader!: DynamicFieldLoaderDirective;
|
|
1003
|
+
*
|
|
1004
|
+
* updateFieldsExternally() {
|
|
1005
|
+
* // Modificar fields ou formGroup externamente
|
|
1006
|
+
* this.fields[0].disabled = true;
|
|
1007
|
+
*
|
|
1008
|
+
* // Forçar re-renderização
|
|
1009
|
+
* this.fieldLoader.refresh();
|
|
1010
|
+
* }
|
|
1011
|
+
* ```
|
|
1012
|
+
*/
|
|
1013
|
+
refresh(): void;
|
|
1014
|
+
/**
|
|
1015
|
+
* Obtém referência de componente específico por nome do campo.
|
|
1016
|
+
*
|
|
1017
|
+
* @param fieldName - Nome do campo conforme FieldMetadata.name
|
|
1018
|
+
* @returns ComponentRef ou undefined se não encontrado
|
|
1019
|
+
*
|
|
1020
|
+
* @example
|
|
1021
|
+
* ```typescript
|
|
1022
|
+
* const emailComponent = this.fieldLoader.getComponent('email');
|
|
1023
|
+
* if (emailComponent) {
|
|
1024
|
+
* emailComponent.instance.setLoading(true);
|
|
1025
|
+
* }
|
|
1026
|
+
* ```
|
|
1027
|
+
*/
|
|
1028
|
+
getComponent(fieldName: string): ComponentRef<BaseDynamicFieldComponent> | undefined;
|
|
1029
|
+
/**
|
|
1030
|
+
* Obtém todos os componentes criados.
|
|
1031
|
+
*
|
|
1032
|
+
* @returns Map com todas as referências de componentes indexadas por nome
|
|
1033
|
+
*/
|
|
1034
|
+
getAllComponents(): Map<string, ComponentRef<BaseDynamicFieldComponent>>;
|
|
1035
|
+
/**
|
|
1036
|
+
* Valida as entradas da diretiva antes de processá-las.
|
|
1037
|
+
*
|
|
1038
|
+
* Verifica se inputs obrigatórios estão presentes e válidos,
|
|
1039
|
+
* emite warnings para problemas não-críticos.
|
|
1040
|
+
*
|
|
1041
|
+
* @throws Error se validação crítica falhar
|
|
1042
|
+
*/
|
|
1043
|
+
private validateInputs;
|
|
1044
|
+
/**
|
|
1045
|
+
* Carrega os campos dinâmicos no contêiner de visualização.
|
|
1046
|
+
*
|
|
1047
|
+
* Processo completo:
|
|
1048
|
+
* 1. Validar inputs
|
|
1049
|
+
* 2. Limpar componentes existentes
|
|
1050
|
+
* 3. Resolver e criar cada componente
|
|
1051
|
+
* 4. Associar propriedades e FormControl
|
|
1052
|
+
* 5. Emitir mapa de componentes criados
|
|
1053
|
+
*/
|
|
1054
|
+
private renderFields;
|
|
1055
|
+
/**
|
|
1056
|
+
* Executa a renderização dos campos com rollback em caso de erro.
|
|
1057
|
+
*
|
|
1058
|
+
* @private
|
|
1059
|
+
*/
|
|
1060
|
+
private executeRendering;
|
|
1061
|
+
/** Builds a minimal snapshot capturing changes that matter for re-rendering. */
|
|
1062
|
+
private buildFieldSnapshot;
|
|
1063
|
+
/**
|
|
1064
|
+
* Reatribui apenas os FormControls existentes aos componentes/shells sem refazer a renderização.
|
|
1065
|
+
*/
|
|
1066
|
+
private rebindControlsOnly;
|
|
1067
|
+
/** Destroi todos os componentes e limpa o container */
|
|
1068
|
+
private destroyComponents;
|
|
1069
|
+
/** Destroi um único campo pelo nome */
|
|
1070
|
+
private destroySingle;
|
|
1071
|
+
/** Cria o componente de campo dentro de um FieldShell e aplica metadados/controle */
|
|
1072
|
+
private createFieldComponent;
|
|
1073
|
+
/**
|
|
1074
|
+
* Aplica os estados globais aos shells já criados, sem re-render completo.
|
|
1075
|
+
*/
|
|
1076
|
+
private applyGlobalStates;
|
|
1077
|
+
/**
|
|
1078
|
+
* Tenta inferir o controlType a partir do próprio field.
|
|
1079
|
+
* Retorna null quando não é possível inferir, mantendo a validação original.
|
|
1080
|
+
*/
|
|
1081
|
+
private inferControlTypeFromField;
|
|
1082
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicFieldLoaderDirective, never>;
|
|
1083
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DynamicFieldLoaderDirective, "[dynamicFieldLoader]", never, { "fields": { "alias": "fields"; "required": true; }; "formGroup": { "alias": "formGroup"; "required": true; }; "enableExternalControlBinding": { "alias": "enableExternalControlBinding"; "required": false; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; }; "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "canvasMode": { "alias": "canvasMode"; "required": false; }; }, { "componentsCreated": "componentsCreated"; "fieldCreated": "fieldCreated"; "fieldDestroyed": "fieldDestroyed"; "canvasMouseEnter": "canvasMouseEnter"; "canvasMouseLeave": "canvasMouseLeave"; "canvasClick": "canvasClick"; }, never, never, true, never>;
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
declare class MaterialButtonComponent extends SimpleBaseButtonComponent implements OnDestroy {
|
|
1087
|
+
private readonly actionResolver;
|
|
1088
|
+
private readonly keyboardService;
|
|
1089
|
+
private unregisterShortcut?;
|
|
1090
|
+
/** Estado adicional específico do Material Button */
|
|
1091
|
+
protected readonly materialButtonState: _angular_core.WritableSignal<{
|
|
1092
|
+
isPressed: boolean;
|
|
1093
|
+
rippleDisabled: boolean;
|
|
1094
|
+
}>;
|
|
1095
|
+
/** Variante do botão Material */
|
|
1096
|
+
readonly buttonVariant: _angular_core.Signal<"basic" | "icon" | "flat" | "raised" | "stroked" | "fab" | "mini-fab">;
|
|
1097
|
+
/** Deve desabilitar ripple */
|
|
1098
|
+
readonly shouldDisableRipple: _angular_core.Signal<boolean>;
|
|
1099
|
+
/** É botão somente ícone */
|
|
1100
|
+
readonly isIconOnlyButton: _angular_core.Signal<boolean>;
|
|
1101
|
+
/** Deve mostrar ícone no texto */
|
|
1102
|
+
readonly shouldShowIcon: _angular_core.Signal<any>;
|
|
1103
|
+
/** Atalho de teclado */
|
|
1104
|
+
readonly keyboardShortcut: _angular_core.Signal<any>;
|
|
1105
|
+
/** Tooltip text */
|
|
1106
|
+
readonly tooltipText: _angular_core.Signal<string>;
|
|
1107
|
+
ngOnInit(): void;
|
|
1108
|
+
ngOnDestroy(): void;
|
|
1109
|
+
/**
|
|
1110
|
+
* Classes CSS específicas do Material Button
|
|
1111
|
+
*/
|
|
1112
|
+
protected getSpecificCssClasses(): string[];
|
|
1113
|
+
/**
|
|
1114
|
+
* Override do handleClick para adicionar comportamento específico do Material Button
|
|
1115
|
+
*/
|
|
1116
|
+
handleClick(event: MouseEvent): Promise<void>;
|
|
1117
|
+
/**
|
|
1118
|
+
* Define metadata específica do Material Button
|
|
1119
|
+
*/
|
|
1120
|
+
setButtonMetadata(metadata: MaterialButtonMetadata): void;
|
|
1121
|
+
/**
|
|
1122
|
+
* Alterna estado de ripple
|
|
1123
|
+
*/
|
|
1124
|
+
toggleRipple(disabled: boolean): void;
|
|
1125
|
+
/**
|
|
1126
|
+
* Obtém informações do botão
|
|
1127
|
+
*/
|
|
1128
|
+
getButtonInfo(): any;
|
|
1129
|
+
private setupKeyboardShortcuts;
|
|
1130
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialButtonComponent, never>;
|
|
1131
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialButtonComponent, "pdx-material-button", never, {}, {}, never, never, true, never>;
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
interface ConfirmDialogData {
|
|
1135
|
+
title: string;
|
|
1136
|
+
message: string;
|
|
1137
|
+
confirmText: string;
|
|
1138
|
+
cancelText: string;
|
|
1139
|
+
type?: 'warning' | 'danger' | 'info';
|
|
1140
|
+
icon?: string;
|
|
1141
|
+
}
|
|
1142
|
+
declare class ConfirmDialogComponent {
|
|
1143
|
+
dialogRef: MatDialogRef<ConfirmDialogComponent>;
|
|
1144
|
+
data: ConfirmDialogData;
|
|
1145
|
+
constructor(dialogRef: MatDialogRef<ConfirmDialogComponent>, data: ConfirmDialogData);
|
|
1146
|
+
getConfirmButtonColor(): 'primary' | 'accent' | 'warn';
|
|
1147
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmDialogComponent, never>;
|
|
1148
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmDialogComponent, "pdx-confirm-dialog", never, {}, {}, never, never, true, never>;
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
declare class TextInputComponent extends SimpleBaseInputComponent {
|
|
1152
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1153
|
+
readonlyMode: boolean;
|
|
1154
|
+
disabledMode: boolean;
|
|
1155
|
+
visible: boolean;
|
|
1156
|
+
presentationMode: boolean;
|
|
1157
|
+
isReadonlyEffective(): boolean;
|
|
1158
|
+
ngOnInit(): void;
|
|
1159
|
+
onComponentInit(): void;
|
|
1160
|
+
/**
|
|
1161
|
+
* Adiciona classes CSS específicas do text-input
|
|
1162
|
+
*/
|
|
1163
|
+
protected getSpecificCssClasses(): string[];
|
|
1164
|
+
/**
|
|
1165
|
+
* Reset do campo
|
|
1166
|
+
*/
|
|
1167
|
+
resetField(): void;
|
|
1168
|
+
/**
|
|
1169
|
+
* Força validação do campo (override para emitir evento)
|
|
1170
|
+
*/
|
|
1171
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1172
|
+
/**
|
|
1173
|
+
* Define metadata e aplica configurações
|
|
1174
|
+
*/
|
|
1175
|
+
setInputMetadata(metadata: MaterialInputMetadata): void;
|
|
1176
|
+
showClear(): boolean;
|
|
1177
|
+
onClearClick(): void;
|
|
1178
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1179
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextInputComponent, never>;
|
|
1180
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextInputComponent, "pdx-text-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
/**
|
|
1184
|
+
* Specialized input component for HTML color inputs.
|
|
1185
|
+
*
|
|
1186
|
+
* Renders a `<mat-form-field>` containing an `<input type="color">` element
|
|
1187
|
+
* with basic validation and hint support. Built on top of the
|
|
1188
|
+
* `SimpleBaseInputComponent` to leverage common functionality such as
|
|
1189
|
+
* reactive forms integration and error handling.
|
|
1190
|
+
*/
|
|
1191
|
+
declare class ColorInputComponent extends SimpleBaseInputComponent {
|
|
1192
|
+
private nativePickerRef?;
|
|
1193
|
+
private menuTrigger?;
|
|
1194
|
+
/** Emits whenever validation state changes. */
|
|
1195
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1196
|
+
readonlyMode: boolean;
|
|
1197
|
+
disabledMode: boolean;
|
|
1198
|
+
visible: boolean;
|
|
1199
|
+
presentationMode: boolean;
|
|
1200
|
+
palettePreset: 'basic' | 'office' | 'material' | string;
|
|
1201
|
+
paletteColors: string[] | undefined;
|
|
1202
|
+
columns: number;
|
|
1203
|
+
popupWidth: number | string;
|
|
1204
|
+
preview: boolean;
|
|
1205
|
+
showRecent: boolean;
|
|
1206
|
+
maxRecent: number;
|
|
1207
|
+
showNativeOption: boolean;
|
|
1208
|
+
panelWidthPx: number;
|
|
1209
|
+
readonly recent: _angular_core.WritableSignal<string[]>;
|
|
1210
|
+
readonly swatches: _angular_core.Signal<string[]>;
|
|
1211
|
+
constructor();
|
|
1212
|
+
ngOnInit(): void;
|
|
1213
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1214
|
+
protected getSpecificCssClasses(): string[];
|
|
1215
|
+
/** Applies component metadata with strong typing. */
|
|
1216
|
+
setInputMetadata(metadata: MaterialColorInputMetadata): void;
|
|
1217
|
+
/** Programmatically opens the native color picker if supported. */
|
|
1218
|
+
openNativePicker(): void;
|
|
1219
|
+
onNativeColorChange(event: Event): void;
|
|
1220
|
+
previewColor(): string;
|
|
1221
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1222
|
+
isReadonlyEffective(): boolean;
|
|
1223
|
+
openMenu(): void;
|
|
1224
|
+
onSwatchClick(c: string): void;
|
|
1225
|
+
isSelected(c: string): boolean;
|
|
1226
|
+
copyCurrent(): void;
|
|
1227
|
+
private applyColor;
|
|
1228
|
+
currentSolidHex(): string;
|
|
1229
|
+
private pushRecent;
|
|
1230
|
+
private normalizeHex;
|
|
1231
|
+
private buildPaletteColors;
|
|
1232
|
+
private coerceWidth;
|
|
1233
|
+
private loadFromStorage;
|
|
1234
|
+
private saveToStorage;
|
|
1235
|
+
trackColor(_: number, c: string): string;
|
|
1236
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColorInputComponent, never>;
|
|
1237
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ColorInputComponent, "pdx-color-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; "palettePreset": { "alias": "palettePreset"; "required": false; }; "paletteColors": { "alias": "paletteColors"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "popupWidth": { "alias": "popupWidth"; "required": false; }; "preview": { "alias": "preview"; "required": false; }; "showRecent": { "alias": "showRecent"; "required": false; }; "maxRecent": { "alias": "maxRecent"; "required": false; }; "showNativeOption": { "alias": "showNativeOption"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
/**
|
|
1241
|
+
* Specialized input component for HTML date inputs.
|
|
1242
|
+
*
|
|
1243
|
+
* Renders a `<mat-form-field>` containing an `<input type="date">` element
|
|
1244
|
+
* with basic validation and hint support. Built on top of the
|
|
1245
|
+
* `SimpleBaseInputComponent` to leverage common functionality such as
|
|
1246
|
+
* reactive forms integration and error handling.
|
|
1247
|
+
*/
|
|
1248
|
+
declare class DateInputComponent extends SimpleBaseInputComponent {
|
|
1249
|
+
/** Emits whenever validation state changes. */
|
|
1250
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1251
|
+
readonlyMode: boolean;
|
|
1252
|
+
disabledMode: boolean;
|
|
1253
|
+
visible: boolean;
|
|
1254
|
+
presentationMode: boolean;
|
|
1255
|
+
isReadonlyEffective(): boolean;
|
|
1256
|
+
ngOnInit(): void;
|
|
1257
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1258
|
+
protected getSpecificCssClasses(): string[];
|
|
1259
|
+
/** Applies component metadata with strong typing. */
|
|
1260
|
+
setInputMetadata(metadata: MaterialDateInputMetadata): void;
|
|
1261
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1262
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateInputComponent, never>;
|
|
1263
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateInputComponent, "pdx-date-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
/**
|
|
1267
|
+
* Specialized component using Angular Material Datepicker.
|
|
1268
|
+
*
|
|
1269
|
+
* Renders a `<mat-form-field>` with an `<input>` bound to a
|
|
1270
|
+
* `mat-datepicker`. Includes toggle button, hint and error support
|
|
1271
|
+
* following the same pattern used by other dynamic field components.
|
|
1272
|
+
*/
|
|
1273
|
+
declare class MaterialDatepickerComponent extends SimpleBaseInputComponent {
|
|
1274
|
+
/** Emits whenever validation state changes. */
|
|
1275
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1276
|
+
readonlyMode: boolean;
|
|
1277
|
+
disabledMode: boolean;
|
|
1278
|
+
visible: boolean;
|
|
1279
|
+
presentationMode: boolean;
|
|
1280
|
+
readonly minDate: _angular_core.Signal<any>;
|
|
1281
|
+
readonly maxDate: _angular_core.Signal<any>;
|
|
1282
|
+
readonly startAt: _angular_core.Signal<any>;
|
|
1283
|
+
onDateChange(event: MatDatepickerInputEvent<Date | null>): void;
|
|
1284
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1285
|
+
protected getSpecificCssClasses(): string[];
|
|
1286
|
+
/** Applies component metadata with strong typing. */
|
|
1287
|
+
setDatepickerMetadata(metadata: MaterialDatepickerMetadata): void;
|
|
1288
|
+
isReadonlyEffective(): boolean;
|
|
1289
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1290
|
+
showClear(): boolean;
|
|
1291
|
+
onClearClick(): void;
|
|
1292
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialDatepickerComponent, never>;
|
|
1293
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialDatepickerComponent, "pdx-material-datepicker", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
/**
|
|
1297
|
+
* Specialized component using Angular Material Date Range picker.
|
|
1298
|
+
*
|
|
1299
|
+
* Renders a `<mat-form-field>` with a `mat-date-range-input` bound to
|
|
1300
|
+
* an internal `FormGroup`. Integrates toggle button, hint and error support
|
|
1301
|
+
* following the same pattern used by other dynamic field components.
|
|
1302
|
+
*/
|
|
1303
|
+
declare class MaterialDateRangeComponent extends SimpleBaseInputComponent implements OnInit {
|
|
1304
|
+
/** Emits whenever validation state changes. */
|
|
1305
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1306
|
+
readonlyMode: boolean;
|
|
1307
|
+
disabledMode: boolean;
|
|
1308
|
+
visible: boolean;
|
|
1309
|
+
presentationMode: boolean;
|
|
1310
|
+
readonly rangeGroup: FormGroup<{
|
|
1311
|
+
start: FormControl<Date | null>;
|
|
1312
|
+
end: FormControl<Date | null>;
|
|
1313
|
+
}>;
|
|
1314
|
+
readonly minDate: _angular_core.Signal<any>;
|
|
1315
|
+
readonly maxDate: _angular_core.Signal<any>;
|
|
1316
|
+
readonly startAt: _angular_core.Signal<any>;
|
|
1317
|
+
ngOnInit(): void;
|
|
1318
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1319
|
+
protected getSpecificCssClasses(): string[];
|
|
1320
|
+
/** Applies component metadata with strong typing. */
|
|
1321
|
+
setDateRangeMetadata(metadata: MaterialDateRangeMetadata): void;
|
|
1322
|
+
isReadonlyEffective(): boolean;
|
|
1323
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1324
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialDateRangeComponent, never>;
|
|
1325
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialDateRangeComponent, "pdx-material-date-range", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
/**
|
|
1329
|
+
* Specialized input component for HTML datetime-local inputs.
|
|
1330
|
+
*
|
|
1331
|
+
* Renders a `<mat-form-field>` containing an `<input type="datetime-local">`
|
|
1332
|
+
* element with basic validation and hint support.
|
|
1333
|
+
*/
|
|
1334
|
+
declare class DatetimeLocalInputComponent extends SimpleBaseInputComponent {
|
|
1335
|
+
/** Emits whenever validation state changes. */
|
|
1336
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1337
|
+
readonlyMode: boolean;
|
|
1338
|
+
disabledMode: boolean;
|
|
1339
|
+
visible: boolean;
|
|
1340
|
+
presentationMode: boolean;
|
|
1341
|
+
isReadonlyEffective(): boolean;
|
|
1342
|
+
ngOnInit(): void;
|
|
1343
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1344
|
+
protected getSpecificCssClasses(): string[];
|
|
1345
|
+
/** Applies component metadata with strong typing. */
|
|
1346
|
+
setInputMetadata(metadata: MaterialDatetimeLocalInputMetadata): void;
|
|
1347
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1348
|
+
private datetimeBoundsValidator;
|
|
1349
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatetimeLocalInputComponent, never>;
|
|
1350
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatetimeLocalInputComponent, "pdx-datetime-local-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1353
|
+
/**
|
|
1354
|
+
* Specialized input component for HTML email inputs.
|
|
1355
|
+
*
|
|
1356
|
+
* Renders a `<mat-form-field>` containing an `<input type="email">` element
|
|
1357
|
+
* with basic validation and hint support. Built on top of the
|
|
1358
|
+
* `SimpleBaseInputComponent` to leverage common functionality such as
|
|
1359
|
+
* reactive forms integration and error handling.
|
|
1360
|
+
*/
|
|
1361
|
+
declare class EmailInputComponent extends SimpleBaseInputComponent {
|
|
1362
|
+
/** Emits whenever validation state changes. */
|
|
1363
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1364
|
+
readonlyMode: boolean;
|
|
1365
|
+
disabledMode: boolean;
|
|
1366
|
+
visible: boolean;
|
|
1367
|
+
presentationMode: boolean;
|
|
1368
|
+
ngOnInit(): void;
|
|
1369
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1370
|
+
protected getSpecificCssClasses(): string[];
|
|
1371
|
+
/** Applies component metadata with strong typing. */
|
|
1372
|
+
setInputMetadata(metadata: MaterialEmailInputMetadata): void;
|
|
1373
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1374
|
+
isReadonlyEffective(): boolean;
|
|
1375
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmailInputComponent, never>;
|
|
1376
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmailInputComponent, "pdx-email-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
/**
|
|
1380
|
+
* Minimal Material Textarea component for isolation/debug
|
|
1381
|
+
*/
|
|
1382
|
+
|
|
1383
|
+
declare class MaterialTextareaComponent extends SimpleBaseInputComponent implements AfterViewInit {
|
|
1384
|
+
readonlyMode: boolean;
|
|
1385
|
+
disabledMode: boolean;
|
|
1386
|
+
visible: boolean;
|
|
1387
|
+
presentationMode: boolean;
|
|
1388
|
+
charCount: number;
|
|
1389
|
+
isReadonlyEffective(): boolean;
|
|
1390
|
+
protected getSpecificCssClasses(): string[];
|
|
1391
|
+
setInputMetadata(metadata: MaterialTextareaMetadata): void;
|
|
1392
|
+
private viewReady;
|
|
1393
|
+
ngAfterViewInit(): void;
|
|
1394
|
+
autoResizeEnabled(): boolean;
|
|
1395
|
+
private toNumber;
|
|
1396
|
+
getRowsAttr(): number;
|
|
1397
|
+
getMinRowsAttr(): number;
|
|
1398
|
+
getMaxRowsAttr(): number;
|
|
1399
|
+
ngOnInit(): void;
|
|
1400
|
+
showCharacterCount(): boolean;
|
|
1401
|
+
showStats(): boolean;
|
|
1402
|
+
getWords(): number;
|
|
1403
|
+
getLines(): number;
|
|
1404
|
+
isNearLimit(): boolean;
|
|
1405
|
+
isAtOrOverLimit(): boolean;
|
|
1406
|
+
private getMode;
|
|
1407
|
+
isCodeLikeMode(): boolean;
|
|
1408
|
+
effectiveSpellcheck(): boolean | null;
|
|
1409
|
+
effectiveWrap(): string | null;
|
|
1410
|
+
private getCurrentLines;
|
|
1411
|
+
private getLineStart;
|
|
1412
|
+
private outdentAtSelection;
|
|
1413
|
+
private _log;
|
|
1414
|
+
enableTabIndent(): boolean;
|
|
1415
|
+
showClear(): boolean;
|
|
1416
|
+
onClearClick(): void;
|
|
1417
|
+
onFocusLog(): void;
|
|
1418
|
+
onBlurLog(): void;
|
|
1419
|
+
onTextareaKeydown(event: KeyboardEvent): void;
|
|
1420
|
+
private getTabSize;
|
|
1421
|
+
private getTabUnit;
|
|
1422
|
+
onInputLog(_event: Event): void;
|
|
1423
|
+
onPaste(_event: ClipboardEvent): void;
|
|
1424
|
+
onCut(_event: ClipboardEvent): void;
|
|
1425
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialTextareaComponent, never>;
|
|
1426
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialTextareaComponent, "pdx-material-textarea", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
/**
|
|
1430
|
+
* Specialized input component for HTML number inputs.
|
|
1431
|
+
*
|
|
1432
|
+
* Renders a `<mat-form-field>` containing an `<input type="number">` element
|
|
1433
|
+
* with basic validation and hint support. Built on top of the
|
|
1434
|
+
* `SimpleBaseInputComponent` to leverage common functionality such as
|
|
1435
|
+
* reactive forms integration and error handling.
|
|
1436
|
+
*/
|
|
1437
|
+
declare class NumberInputComponent extends SimpleBaseInputComponent {
|
|
1438
|
+
/** Emits whenever validation state changes. */
|
|
1439
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1440
|
+
readonlyMode: boolean;
|
|
1441
|
+
disabledMode: boolean;
|
|
1442
|
+
visible: boolean;
|
|
1443
|
+
presentationMode: boolean;
|
|
1444
|
+
isReadonlyEffective(): boolean;
|
|
1445
|
+
ngOnInit(): void;
|
|
1446
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1447
|
+
protected getSpecificCssClasses(): string[];
|
|
1448
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1449
|
+
/** Applies component metadata with strong typing. */
|
|
1450
|
+
setInputMetadata(metadata: MaterialNumericMetadata): void;
|
|
1451
|
+
showClear(): boolean;
|
|
1452
|
+
onClearClick(): void;
|
|
1453
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NumberInputComponent, never>;
|
|
1454
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NumberInputComponent, "pdx-number-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
/**
|
|
1458
|
+
* Input component for currency values with basic formatting support.
|
|
1459
|
+
*
|
|
1460
|
+
* Displays a currency symbol as prefix or suffix and validates numeric input.
|
|
1461
|
+
*/
|
|
1462
|
+
declare class MaterialCurrencyComponent extends SimpleBaseInputComponent {
|
|
1463
|
+
/** Emits whenever validation state changes. */
|
|
1464
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1465
|
+
private readonly currencyPipe;
|
|
1466
|
+
private readonly defaultLocale;
|
|
1467
|
+
private readonly inputRef;
|
|
1468
|
+
/** Currency code used for formatting. */
|
|
1469
|
+
readonly currencyCode: _angular_core.Signal<string>;
|
|
1470
|
+
/** Position of the currency symbol relative to the input. */
|
|
1471
|
+
readonly currencyPosition: _angular_core.Signal<"before" | "after">;
|
|
1472
|
+
/** Decimal places used for formatting. */
|
|
1473
|
+
readonly decimalPlaces: _angular_core.Signal<number>;
|
|
1474
|
+
/** Locale used for formatting and parsing. */
|
|
1475
|
+
readonly locale: _angular_core.Signal<string>;
|
|
1476
|
+
/** Thousands separator based on locale or metadata. */
|
|
1477
|
+
readonly thousandsSeparator: _angular_core.Signal<string>;
|
|
1478
|
+
/** Decimal separator based on locale or metadata. */
|
|
1479
|
+
readonly decimalSeparator: _angular_core.Signal<string>;
|
|
1480
|
+
ngOnInit(): void;
|
|
1481
|
+
/** Handles raw input and keeps numeric value in the control. */
|
|
1482
|
+
onInput(event: Event): void;
|
|
1483
|
+
/** Removes formatting when focusing for easier editing. */
|
|
1484
|
+
onFocus(): void;
|
|
1485
|
+
/** Formats the current value using CurrencyPipe on blur. */
|
|
1486
|
+
onBlur(): void;
|
|
1487
|
+
/** Extracts the symbol for the configured currency. */
|
|
1488
|
+
protected currencySymbol(): string;
|
|
1489
|
+
protected getSpecificCssClasses(): string[];
|
|
1490
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1491
|
+
private escapeRegex;
|
|
1492
|
+
/** Applies component metadata with strong typing. */
|
|
1493
|
+
set metadataInput(metadata: MaterialCurrencyMetadata);
|
|
1494
|
+
setInputMetadata(metadata: MaterialCurrencyMetadata): void;
|
|
1495
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1496
|
+
readonlyMode: boolean;
|
|
1497
|
+
disabledMode: boolean;
|
|
1498
|
+
visible: boolean;
|
|
1499
|
+
presentationMode: boolean;
|
|
1500
|
+
isReadonlyEffective(): boolean;
|
|
1501
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialCurrencyComponent, never>;
|
|
1502
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialCurrencyComponent, "pdx-material-currency", never, { "metadataInput": { "alias": "metadata"; "required": true; }; "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1505
|
+
declare class MaterialCpfCnpjInputComponent extends SimpleBaseInputComponent {
|
|
1506
|
+
readonlyMode: boolean;
|
|
1507
|
+
disabledMode: boolean;
|
|
1508
|
+
visible: boolean;
|
|
1509
|
+
presentationMode: boolean;
|
|
1510
|
+
private dynamicValidator;
|
|
1511
|
+
cpfCnpjMetadata: _angular_core.Signal<MaterialCpfCnpjMetadata | null>;
|
|
1512
|
+
getSpecificCssClasses(): string[];
|
|
1513
|
+
setInputMetadata(metadata: MaterialCpfCnpjMetadata): void;
|
|
1514
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1515
|
+
onComponentInit(): void;
|
|
1516
|
+
private setupDynamicValidator;
|
|
1517
|
+
isReadonlyEffective(): boolean;
|
|
1518
|
+
writeValue(value: any): void;
|
|
1519
|
+
handleInput(event: Event): void;
|
|
1520
|
+
private cleanValue;
|
|
1521
|
+
private formatValue;
|
|
1522
|
+
private applyCpfMask;
|
|
1523
|
+
private applyCnpjMask;
|
|
1524
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialCpfCnpjInputComponent, never>;
|
|
1525
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialCpfCnpjInputComponent, "pdx-material-cpf-cnpj-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
/**
|
|
1529
|
+
* Component for selecting a price range using two currency inputs.
|
|
1530
|
+
*
|
|
1531
|
+
* Reuses `MaterialCurrencyComponent` for both the minimum and maximum
|
|
1532
|
+
* values, keeping formatting and validation consistent.
|
|
1533
|
+
*/
|
|
1534
|
+
declare class MaterialPriceRangeComponent extends SimpleBaseInputComponent implements OnInit {
|
|
1535
|
+
/** Emits whenever validation state changes. */
|
|
1536
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1537
|
+
readonlyMode: boolean;
|
|
1538
|
+
disabledMode: boolean;
|
|
1539
|
+
visible: boolean;
|
|
1540
|
+
presentationMode: boolean;
|
|
1541
|
+
readonly rangeGroup: FormGroup<{
|
|
1542
|
+
minPrice: FormControl<number | null>;
|
|
1543
|
+
maxPrice: FormControl<number | null>;
|
|
1544
|
+
}>;
|
|
1545
|
+
readonly startCurrencyMetadata: _angular_core.Signal<MaterialCurrencyMetadata>;
|
|
1546
|
+
readonly endCurrencyMetadata: _angular_core.Signal<MaterialCurrencyMetadata>;
|
|
1547
|
+
/** Custom error messages for range-specific validations */
|
|
1548
|
+
readonly errorMessage: _angular_core.Signal<string>;
|
|
1549
|
+
ngOnInit(): void;
|
|
1550
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1551
|
+
protected getSpecificCssClasses(): string[];
|
|
1552
|
+
/** Applies component metadata with strong typing. */
|
|
1553
|
+
setPriceRangeMetadata(metadata: MaterialPriceRangeMetadata): void;
|
|
1554
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialPriceRangeComponent, never>;
|
|
1555
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialPriceRangeComponent, "pdx-material-price-range", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1556
|
+
}
|
|
1557
|
+
|
|
1558
|
+
/**
|
|
1559
|
+
* Specialized input component for HTML month inputs.
|
|
1560
|
+
*
|
|
1561
|
+
* Renders a `<mat-form-field>` containing an `<input type="month">` element
|
|
1562
|
+
* with optional min/max constraints, basic validation and hint support.
|
|
1563
|
+
* Built on top of the `SimpleBaseInputComponent` to reuse core features
|
|
1564
|
+
* like reactive forms integration and error handling.
|
|
1565
|
+
*/
|
|
1566
|
+
declare class MonthInputComponent extends SimpleBaseInputComponent {
|
|
1567
|
+
/** Emits whenever validation state changes. */
|
|
1568
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1569
|
+
readonlyMode: boolean;
|
|
1570
|
+
disabledMode: boolean;
|
|
1571
|
+
visible: boolean;
|
|
1572
|
+
presentationMode: boolean;
|
|
1573
|
+
ngOnInit(): void;
|
|
1574
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1575
|
+
protected getSpecificCssClasses(): string[];
|
|
1576
|
+
/** Applies component metadata with strong typing. */
|
|
1577
|
+
setInputMetadata(metadata: MaterialMonthInputMetadata): void;
|
|
1578
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1579
|
+
isReadonlyEffective(): boolean;
|
|
1580
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MonthInputComponent, never>;
|
|
1581
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MonthInputComponent, "pdx-month-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1582
|
+
}
|
|
1583
|
+
|
|
1584
|
+
/**
|
|
1585
|
+
* Specialized input component for password fields.
|
|
1586
|
+
*
|
|
1587
|
+
* Renders a `<mat-form-field>` wrapping an `<input type="password">` element
|
|
1588
|
+
* and leverages `SimpleBaseInputComponent` for common functionality such as
|
|
1589
|
+
* validation, hint display and reactive forms integration.
|
|
1590
|
+
*/
|
|
1591
|
+
declare class PasswordInputComponent extends SimpleBaseInputComponent {
|
|
1592
|
+
/** Emits whenever validation state changes. */
|
|
1593
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1594
|
+
readonlyMode: boolean;
|
|
1595
|
+
disabledMode: boolean;
|
|
1596
|
+
visible: boolean;
|
|
1597
|
+
presentationMode: boolean;
|
|
1598
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1599
|
+
protected getSpecificCssClasses(): string[];
|
|
1600
|
+
/** Applies typed metadata to the component. */
|
|
1601
|
+
setInputMetadata(metadata: MaterialPasswordMetadata): void;
|
|
1602
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1603
|
+
isReadonlyEffective(): boolean;
|
|
1604
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PasswordInputComponent, never>;
|
|
1605
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasswordInputComponent, "pdx-password-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
/**
|
|
1609
|
+
* Specialized input component for HTML search inputs.
|
|
1610
|
+
*
|
|
1611
|
+
* Renders a `<mat-form-field>` containing an `<input type="search">` element
|
|
1612
|
+
* with Material styling and basic validation support. Built on top of the
|
|
1613
|
+
* `SimpleBaseInputComponent` to leverage common functionality such as reactive
|
|
1614
|
+
* forms integration and error handling.
|
|
1615
|
+
*/
|
|
1616
|
+
declare class SearchInputComponent extends SimpleBaseInputComponent {
|
|
1617
|
+
/** Emits whenever validation state changes. */
|
|
1618
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
1619
|
+
readonlyMode: boolean;
|
|
1620
|
+
disabledMode: boolean;
|
|
1621
|
+
visible: boolean;
|
|
1622
|
+
presentationMode: boolean;
|
|
1623
|
+
ngOnInit(): void;
|
|
1624
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
1625
|
+
protected getSpecificCssClasses(): string[];
|
|
1626
|
+
/** Applies component metadata with strong typing. */
|
|
1627
|
+
setInputMetadata(metadata: MaterialSearchInputMetadata): void;
|
|
1628
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1629
|
+
isReadonlyEffective(): boolean;
|
|
1630
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchInputComponent, never>;
|
|
1631
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchInputComponent, "pdx-search-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
declare class MaterialSelectComponent extends SimpleBaseSelectComponent {
|
|
1635
|
+
readonlyMode: boolean;
|
|
1636
|
+
disabledMode: boolean;
|
|
1637
|
+
visible: boolean;
|
|
1638
|
+
presentationMode: boolean;
|
|
1639
|
+
setSelectMetadata(metadata: SimpleSelectMetadata<any>): void;
|
|
1640
|
+
ngOnInit(): void;
|
|
1641
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1642
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialSelectComponent, never>;
|
|
1643
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialSelectComponent, "pdx-material-select", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1644
|
+
}
|
|
1645
|
+
|
|
1646
|
+
declare class MaterialMultiSelectComponent extends SimpleBaseSelectComponent {
|
|
1647
|
+
readonlyMode: boolean;
|
|
1648
|
+
disabledMode: boolean;
|
|
1649
|
+
visible: boolean;
|
|
1650
|
+
presentationMode: boolean;
|
|
1651
|
+
setSelectMetadata(metadata: SimpleSelectMetadata<any>): void;
|
|
1652
|
+
/** Disables options when maxSelections reached */
|
|
1653
|
+
isOptionDisabled(option: SelectOption<any>): boolean;
|
|
1654
|
+
/** Emits optionSelected when a user picks an option */
|
|
1655
|
+
onOptionSelectionChange(option: SelectOption<any>, event: MatOptionSelectionChange): void;
|
|
1656
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1657
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialMultiSelectComponent, never>;
|
|
1658
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialMultiSelectComponent, "pdx-material-multi-select", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1661
|
+
/**
|
|
1662
|
+
* Material wrapper for hierarchical multi select using `mat-tree`.
|
|
1663
|
+
*
|
|
1664
|
+
* Supports recursive selection with checkboxes and optional
|
|
1665
|
+
* "select all" helper. Values are emitted as array of node values.
|
|
1666
|
+
*/
|
|
1667
|
+
declare class MaterialMultiSelectTreeComponent extends SimpleBaseInputComponent {
|
|
1668
|
+
readonlyMode: boolean;
|
|
1669
|
+
disabledMode: boolean;
|
|
1670
|
+
visible: boolean;
|
|
1671
|
+
presentationMode: boolean;
|
|
1672
|
+
/** Tree control managing expansion state */
|
|
1673
|
+
readonly treeControl: NestedTreeControl<MaterialTreeNode, MaterialTreeNode>;
|
|
1674
|
+
/** Data source bound to the tree */
|
|
1675
|
+
readonly dataSource: MatTreeNestedDataSource<MaterialTreeNode>;
|
|
1676
|
+
/** Selection model for nodes */
|
|
1677
|
+
readonly selection: SelectionModel<MaterialTreeNode>;
|
|
1678
|
+
private readonly parentMap;
|
|
1679
|
+
private readonly valueMap;
|
|
1680
|
+
/** Show select all option */
|
|
1681
|
+
readonly selectAll: _angular_core.WritableSignal<boolean>;
|
|
1682
|
+
/** Maximum allowed selections */
|
|
1683
|
+
readonly maxSelections: _angular_core.WritableSignal<number | null>;
|
|
1684
|
+
/** Label for select all option */
|
|
1685
|
+
readonly selectAllLabel: _angular_core.WritableSignal<string>;
|
|
1686
|
+
/** Emits whenever the selection changes */
|
|
1687
|
+
readonly selectionChange: EventEmitter<any[]>;
|
|
1688
|
+
onComponentInit(): void;
|
|
1689
|
+
showClear(): boolean;
|
|
1690
|
+
onClearClick(): void;
|
|
1691
|
+
/** Configure component metadata */
|
|
1692
|
+
setTreeMetadata(metadata: MaterialMultiSelectTreeMetadata): void;
|
|
1693
|
+
private normalizeNodes;
|
|
1694
|
+
/** Whether a node has children */
|
|
1695
|
+
hasChild: (_: number, node: MaterialTreeNode) => boolean;
|
|
1696
|
+
/** Toggle selection state of a node and its descendants */
|
|
1697
|
+
toggleNode(node: MaterialTreeNode): void;
|
|
1698
|
+
private toggleDescendants;
|
|
1699
|
+
private updateAllParents;
|
|
1700
|
+
private updateParentSelection;
|
|
1701
|
+
private getDescendants;
|
|
1702
|
+
private getParent;
|
|
1703
|
+
private buildParentMap;
|
|
1704
|
+
/** Whether descendants of a node are partially selected */
|
|
1705
|
+
descendantsPartiallySelected(node: MaterialTreeNode): boolean;
|
|
1706
|
+
private emitValue;
|
|
1707
|
+
writeValue(value: any): void;
|
|
1708
|
+
/** Toggle select all nodes */
|
|
1709
|
+
toggleSelectAll(): void;
|
|
1710
|
+
private selectAllRecursive;
|
|
1711
|
+
/** Check if all enabled nodes are selected */
|
|
1712
|
+
isAllSelected(): boolean;
|
|
1713
|
+
private getAllEnabledNodes;
|
|
1714
|
+
/** Disable node when maxSelections reached */
|
|
1715
|
+
isNodeDisabled(node: MaterialTreeNode): boolean;
|
|
1716
|
+
/** CSS hook */
|
|
1717
|
+
protected getSpecificCssClasses(): string[];
|
|
1718
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialMultiSelectTreeComponent, never>;
|
|
1719
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialMultiSelectTreeComponent, "pdx-material-multi-select-tree", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1720
|
+
}
|
|
1721
|
+
|
|
1722
|
+
declare class MaterialTreeSelectComponent extends SimpleBaseSelectComponent {
|
|
1723
|
+
private host;
|
|
1724
|
+
readonlyMode: boolean;
|
|
1725
|
+
disabledMode: boolean;
|
|
1726
|
+
visible: boolean;
|
|
1727
|
+
presentationMode: boolean;
|
|
1728
|
+
readonly treeControl: NestedTreeControl<MaterialTreeNode, MaterialTreeNode>;
|
|
1729
|
+
readonly dataSource: MatTreeNestedDataSource<MaterialTreeNode>;
|
|
1730
|
+
readonly leafOnly: _angular_core.WritableSignal<boolean>;
|
|
1731
|
+
readonly autoExpandOnSearch: _angular_core.WritableSignal<boolean>;
|
|
1732
|
+
readonly returnPath: _angular_core.WritableSignal<boolean>;
|
|
1733
|
+
readonly returnObject: _angular_core.WritableSignal<boolean>;
|
|
1734
|
+
private parentMap;
|
|
1735
|
+
private allNodes;
|
|
1736
|
+
private selectedNode;
|
|
1737
|
+
constructor(host: ElementRef<HTMLElement>);
|
|
1738
|
+
onComponentInit(): void;
|
|
1739
|
+
setTreeMetadata(metadata: MaterialTreeSelectMetadata): void;
|
|
1740
|
+
private normalizeNodes;
|
|
1741
|
+
private buildParentMap;
|
|
1742
|
+
hasChild: (_: number, node: MaterialTreeNode) => boolean;
|
|
1743
|
+
selectNode(node: MaterialTreeNode): void;
|
|
1744
|
+
private resolveValue;
|
|
1745
|
+
private getPath;
|
|
1746
|
+
isSelected(node: MaterialTreeNode): boolean;
|
|
1747
|
+
isNodeDisabled(node: MaterialTreeNode): boolean;
|
|
1748
|
+
handleKeydown(event: KeyboardEvent, node: MaterialTreeNode): void;
|
|
1749
|
+
private focusSiblingNode;
|
|
1750
|
+
private focusNode;
|
|
1751
|
+
private getVisibleNodes;
|
|
1752
|
+
private applyFilter;
|
|
1753
|
+
private filterNodes;
|
|
1754
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialTreeSelectComponent, never>;
|
|
1755
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialTreeSelectComponent, "pdx-material-tree-select", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1756
|
+
}
|
|
1757
|
+
|
|
1758
|
+
declare class MaterialSearchableSelectComponent extends SimpleBaseSelectComponent {
|
|
1759
|
+
readonlyMode: boolean;
|
|
1760
|
+
disabledMode: boolean;
|
|
1761
|
+
visible: boolean;
|
|
1762
|
+
presentationMode: boolean;
|
|
1763
|
+
private searchInput?;
|
|
1764
|
+
private readonly store;
|
|
1765
|
+
readonly endReached: _angular_core.WritableSignal<boolean>;
|
|
1766
|
+
private initialLoadStrategy;
|
|
1767
|
+
setSelectMetadata(metadata: any): void;
|
|
1768
|
+
ngOnInit(): void;
|
|
1769
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1770
|
+
onOpened(opened: boolean): void;
|
|
1771
|
+
private getSelectedIds;
|
|
1772
|
+
private preloadSelected;
|
|
1773
|
+
private refreshOptions;
|
|
1774
|
+
protected loadOptions(page?: number, searchTerm?: string, criteria?: Record<string, any>): void;
|
|
1775
|
+
loadNextPage(): void;
|
|
1776
|
+
onSearch(term: string): void;
|
|
1777
|
+
protected registerMatSelect(select: any): void;
|
|
1778
|
+
reload(reset: boolean): void;
|
|
1779
|
+
protected onDependenciesChanged(): void;
|
|
1780
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialSearchableSelectComponent, never>;
|
|
1781
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialSearchableSelectComponent, "pdx-material-searchable-select", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1782
|
+
}
|
|
1783
|
+
|
|
1784
|
+
declare class MaterialAutocompleteComponent extends SimpleBaseSelectComponent<OptionDTO<any>> {
|
|
1785
|
+
readonlyMode: boolean;
|
|
1786
|
+
disabledMode: boolean;
|
|
1787
|
+
visible: boolean;
|
|
1788
|
+
presentationMode: boolean;
|
|
1789
|
+
private readonly store;
|
|
1790
|
+
readonly endReached: _angular_core.WritableSignal<boolean>;
|
|
1791
|
+
displayWith: (opt: OptionDTO<any>) => string;
|
|
1792
|
+
private initialLoadStrategy;
|
|
1793
|
+
setSelectMetadata(metadata: SimpleSelectMetadata<any>): void;
|
|
1794
|
+
ngOnInit(): void;
|
|
1795
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1796
|
+
isReadonlyEffective(): boolean;
|
|
1797
|
+
private getSelectedId;
|
|
1798
|
+
private preloadSelected;
|
|
1799
|
+
private refreshOptions;
|
|
1800
|
+
protected loadOptions(page?: number, searchTerm?: string, criteria?: Record<string, any>): void;
|
|
1801
|
+
onOpened(): void;
|
|
1802
|
+
onScroll(index: number): void;
|
|
1803
|
+
onSearch(term: string): void;
|
|
1804
|
+
trackByOption(index: number, option: SelectOption<OptionDTO<any>>): any;
|
|
1805
|
+
reload(reset: boolean): void;
|
|
1806
|
+
protected onDependenciesChanged(): void;
|
|
1807
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialAutocompleteComponent, never>;
|
|
1808
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialAutocompleteComponent, "pdx-material-autocomplete", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1809
|
+
}
|
|
1810
|
+
|
|
1811
|
+
declare class MaterialChipsComponent extends SimpleBaseSelectComponent {
|
|
1812
|
+
readonlyMode: boolean;
|
|
1813
|
+
disabledMode: boolean;
|
|
1814
|
+
visible: boolean;
|
|
1815
|
+
presentationMode: boolean;
|
|
1816
|
+
readonly removable: _angular_core.WritableSignal<boolean>;
|
|
1817
|
+
readonly addOnBlur: _angular_core.WritableSignal<boolean>;
|
|
1818
|
+
readonly separatorKeys: number[];
|
|
1819
|
+
displayOption: (value: any) => string;
|
|
1820
|
+
selectedOptions(): SelectOption[];
|
|
1821
|
+
removeChip(option: SelectOption): void;
|
|
1822
|
+
onInputTokenEnd(event: MatChipInputEvent): void;
|
|
1823
|
+
setSelectMetadata(metadata: SimpleSelectMetadata<any>): void;
|
|
1824
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1825
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialChipsComponent, never>;
|
|
1826
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialChipsComponent, "pdx-material-chips", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1829
|
+
declare class MaterialButtonToggleComponent extends SimpleBaseSelectComponent {
|
|
1830
|
+
setSelectMetadata(metadata: SimpleSelectMetadata<any>): void;
|
|
1831
|
+
protected getSpecificCssClasses(): string[];
|
|
1832
|
+
onGroupChange(event: MatButtonToggleChange): void;
|
|
1833
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialButtonToggleComponent, never>;
|
|
1834
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialButtonToggleComponent, "pdx-material-button-toggle", never, {}, {}, never, never, true, never>;
|
|
1835
|
+
}
|
|
1836
|
+
|
|
1837
|
+
declare class MaterialSlideToggleComponent extends SimpleBaseInputComponent {
|
|
1838
|
+
readonlyMode: boolean;
|
|
1839
|
+
disabledMode: boolean;
|
|
1840
|
+
visible: boolean;
|
|
1841
|
+
presentationMode: boolean;
|
|
1842
|
+
/** Applies component metadata with strong typing. */
|
|
1843
|
+
setInputMetadata(metadata: MaterialToggleMetadata): void;
|
|
1844
|
+
protected getSpecificCssClasses(): string[];
|
|
1845
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialSlideToggleComponent, never>;
|
|
1846
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialSlideToggleComponent, "pdx-material-slide-toggle", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1847
|
+
}
|
|
1848
|
+
|
|
1849
|
+
declare class MaterialSliderComponent extends SimpleBaseInputComponent {
|
|
1850
|
+
readonlyMode: boolean;
|
|
1851
|
+
disabledMode: boolean;
|
|
1852
|
+
visible: boolean;
|
|
1853
|
+
presentationMode: boolean;
|
|
1854
|
+
/** Display function for slider values */
|
|
1855
|
+
displayWithFn: (value: number) => any;
|
|
1856
|
+
/** Applies component metadata with strong typing. */
|
|
1857
|
+
setInputMetadata(metadata: MaterialSliderMetadata): void;
|
|
1858
|
+
protected getSpecificCssClasses(): string[];
|
|
1859
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialSliderComponent, never>;
|
|
1860
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialSliderComponent, "pdx-material-slider", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1861
|
+
}
|
|
1862
|
+
|
|
1863
|
+
declare class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
1864
|
+
private lastConfiguredPath?;
|
|
1865
|
+
private initialLoadStrategy;
|
|
1866
|
+
private hasPerformedInitialLoad;
|
|
1867
|
+
readonlyMode: boolean;
|
|
1868
|
+
disabledMode: boolean;
|
|
1869
|
+
visible: boolean;
|
|
1870
|
+
presentationMode: boolean;
|
|
1871
|
+
private searchInput?;
|
|
1872
|
+
readonly termControl: FormControl<string | null>;
|
|
1873
|
+
private readonly store;
|
|
1874
|
+
readonly endReached: _angular_core.WritableSignal<boolean>;
|
|
1875
|
+
private cursorAfter;
|
|
1876
|
+
private cursorPageIndex;
|
|
1877
|
+
private dataVersion?;
|
|
1878
|
+
private useCursor;
|
|
1879
|
+
setSelectMetadata(metadata: any): void;
|
|
1880
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
1881
|
+
ngOnInit(): void;
|
|
1882
|
+
onOpened(opened: boolean): void;
|
|
1883
|
+
private getSelectedIds;
|
|
1884
|
+
private preloadSelected;
|
|
1885
|
+
private refreshOptions;
|
|
1886
|
+
private runQuery;
|
|
1887
|
+
loadMore(): void;
|
|
1888
|
+
retry(): void;
|
|
1889
|
+
handleKey(event: KeyboardEvent): void;
|
|
1890
|
+
protected registerMatSelect(select: any): void;
|
|
1891
|
+
reload(reset: boolean): void;
|
|
1892
|
+
protected onDependenciesChanged(): void;
|
|
1893
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialAsyncSelectComponent, never>;
|
|
1894
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialAsyncSelectComponent, "pdx-material-async-select", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1895
|
+
}
|
|
1896
|
+
|
|
1897
|
+
declare class MaterialRadioGroupComponent extends SimpleBaseSelectComponent {
|
|
1898
|
+
readonlyMode: boolean;
|
|
1899
|
+
disabledMode: boolean;
|
|
1900
|
+
visible: boolean;
|
|
1901
|
+
presentationMode: boolean;
|
|
1902
|
+
setSelectMetadata(metadata: SimpleSelectMetadata<any>): void;
|
|
1903
|
+
protected getSpecificCssClasses(): string[];
|
|
1904
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialRadioGroupComponent, never>;
|
|
1905
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialRadioGroupComponent, "pdx-material-radio-group", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1906
|
+
}
|
|
1907
|
+
|
|
1908
|
+
declare class MaterialCheckboxGroupComponent extends SimpleBaseSelectComponent {
|
|
1909
|
+
readonlyMode: boolean;
|
|
1910
|
+
disabledMode: boolean;
|
|
1911
|
+
visible: boolean;
|
|
1912
|
+
presentationMode: boolean;
|
|
1913
|
+
setSelectMetadata(metadata: SimpleSelectMetadata<any>): void;
|
|
1914
|
+
/** Disables options when maxSelections reached */
|
|
1915
|
+
isOptionDisabled(option: SelectOption<any>): boolean;
|
|
1916
|
+
protected getSpecificCssClasses(): string[];
|
|
1917
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialCheckboxGroupComponent, never>;
|
|
1918
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialCheckboxGroupComponent, "pdx-material-checkbox-group", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1919
|
+
}
|
|
1920
|
+
|
|
1921
|
+
declare class MaterialSelectionListComponent extends SimpleBaseSelectComponent {
|
|
1922
|
+
readonlyMode: boolean;
|
|
1923
|
+
disabledMode: boolean;
|
|
1924
|
+
visible: boolean;
|
|
1925
|
+
presentationMode: boolean;
|
|
1926
|
+
setSelectMetadata(metadata: SimpleSelectMetadata<any>): void;
|
|
1927
|
+
protected getSpecificCssClasses(): string[];
|
|
1928
|
+
onSelectionChange(event: MatSelectionListChange): void;
|
|
1929
|
+
isOptionSelected(value: any): boolean;
|
|
1930
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialSelectionListComponent, never>;
|
|
1931
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialSelectionListComponent, "pdx-material-selection-list", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1934
|
+
/**
|
|
1935
|
+
* Placeholder component for file upload fields.
|
|
1936
|
+
*
|
|
1937
|
+
* Currently provides a simple `<input type="file">` element and basic
|
|
1938
|
+
* ControlValueAccessor integration. A full-featured implementation will
|
|
1939
|
+
* be provided in future iterations.
|
|
1940
|
+
*/
|
|
1941
|
+
declare class MaterialFileUploadComponent extends SimpleBaseInputComponent {
|
|
1942
|
+
readonlyMode: boolean;
|
|
1943
|
+
disabledMode: boolean;
|
|
1944
|
+
visible: boolean;
|
|
1945
|
+
presentationMode: boolean;
|
|
1946
|
+
/**
|
|
1947
|
+
* Updates the control value when the user selects a file.
|
|
1948
|
+
*/
|
|
1949
|
+
onFileSelected(event: Event): void;
|
|
1950
|
+
/**
|
|
1951
|
+
* Exposes metadata setter for integration with dynamic form loader.
|
|
1952
|
+
*/
|
|
1953
|
+
setFileUploadMetadata(metadata: ComponentMetadata): void;
|
|
1954
|
+
/**
|
|
1955
|
+
* CSS classes specific to the file upload wrapper.
|
|
1956
|
+
*/
|
|
1957
|
+
protected getSpecificCssClasses(): string[];
|
|
1958
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialFileUploadComponent, never>;
|
|
1959
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialFileUploadComponent, "pdx-material-file-upload", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
1960
|
+
}
|
|
1961
|
+
|
|
1962
|
+
interface PreloadStatus {
|
|
1963
|
+
isPreloading: boolean;
|
|
1964
|
+
progress: number;
|
|
1965
|
+
currentComponent: string | null;
|
|
1966
|
+
totalComponents: number;
|
|
1967
|
+
loadedComponents: number;
|
|
1968
|
+
failedComponents: number;
|
|
1969
|
+
errors: string[];
|
|
1970
|
+
}
|
|
1971
|
+
declare class ComponentPreloaderService {
|
|
1972
|
+
private readonly componentRegistry;
|
|
1973
|
+
private readonly destroyRef;
|
|
1974
|
+
private preloadCompleted;
|
|
1975
|
+
private readonly preloadedComponents;
|
|
1976
|
+
private readonly statusSubject;
|
|
1977
|
+
private readonly componentsToPreload;
|
|
1978
|
+
/**
|
|
1979
|
+
* Observable do status atual do preload
|
|
1980
|
+
*/
|
|
1981
|
+
get status$(): Observable<PreloadStatus>;
|
|
1982
|
+
/**
|
|
1983
|
+
* Verifica se o preload foi completado
|
|
1984
|
+
*/
|
|
1985
|
+
isPreloadCompleted(): boolean;
|
|
1986
|
+
/**
|
|
1987
|
+
* Verifica se um componente específico foi precarregado
|
|
1988
|
+
*/
|
|
1989
|
+
isComponentPreloaded(type: string): boolean;
|
|
1990
|
+
/**
|
|
1991
|
+
* Inicializa o sistema de componentes dinâmicos
|
|
1992
|
+
* Deve ser chamado na inicialização da aplicação
|
|
1993
|
+
*/
|
|
1994
|
+
initialize(): Promise<void>;
|
|
1995
|
+
/**
|
|
1996
|
+
* Força um novo preload (útil para desenvolvimento)
|
|
1997
|
+
*/
|
|
1998
|
+
forceReload(): Promise<void>;
|
|
1999
|
+
/**
|
|
2000
|
+
* Preload de um componente específico (on-demand)
|
|
2001
|
+
*/
|
|
2002
|
+
preloadComponent(type: string): Promise<boolean>;
|
|
2003
|
+
/**
|
|
2004
|
+
* Executa o preload de todos os componentes configurados
|
|
2005
|
+
*/
|
|
2006
|
+
private preloadComponents;
|
|
2007
|
+
/**
|
|
2008
|
+
* Atualiza o status interno do preload
|
|
2009
|
+
*/
|
|
2010
|
+
private updateStatus;
|
|
2011
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComponentPreloaderService, never>;
|
|
2012
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ComponentPreloaderService>;
|
|
2013
|
+
}
|
|
2014
|
+
/**
|
|
2015
|
+
* Factory function para inicialização da aplicação
|
|
2016
|
+
* Usar no app.config.ts com APP_INITIALIZER
|
|
2017
|
+
*
|
|
2018
|
+
* Executa de forma não-bloqueante para não atrasar o bootstrap da app,
|
|
2019
|
+
* mas garante que o TextInputComponent seja pré-carregado em background
|
|
2020
|
+
*/
|
|
2021
|
+
declare function initializeComponentSystem(): () => undefined;
|
|
2022
|
+
/**
|
|
2023
|
+
* Factory function para inicialização síncrona (opcional)
|
|
2024
|
+
* Use apenas se quiser aguardar o preload antes da app inicializar
|
|
2025
|
+
*/
|
|
2026
|
+
declare function initializeComponentSystemSync(): () => Promise<void>;
|
|
2027
|
+
|
|
2028
|
+
/**
|
|
2029
|
+
* @fileoverview Componente para exibir status do preload de componentes
|
|
2030
|
+
*
|
|
2031
|
+
* Componente opcional para debug e monitoramento do preload.
|
|
2032
|
+
* Exibe informações em tempo real sobre o carregamento dos componentes.
|
|
2033
|
+
*/
|
|
2034
|
+
|
|
2035
|
+
declare class PreloadStatusComponent implements OnInit, OnDestroy {
|
|
2036
|
+
private readonly preloader;
|
|
2037
|
+
status: PreloadStatus | null;
|
|
2038
|
+
autoUpdate: boolean;
|
|
2039
|
+
private externalControl;
|
|
2040
|
+
ngOnInit(): void;
|
|
2041
|
+
ngOnDestroy(): void;
|
|
2042
|
+
/**
|
|
2043
|
+
* Força um novo preload
|
|
2044
|
+
*/
|
|
2045
|
+
forceReload(): Promise<void>;
|
|
2046
|
+
/**
|
|
2047
|
+
* Toggle do auto-update
|
|
2048
|
+
*/
|
|
2049
|
+
toggleAutoUpdate(): void;
|
|
2050
|
+
/**
|
|
2051
|
+
* Subscreve às atualizações de status em tempo real
|
|
2052
|
+
*/
|
|
2053
|
+
private subscribeToStatus;
|
|
2054
|
+
/**
|
|
2055
|
+
* Carrega status atual uma vez
|
|
2056
|
+
*/
|
|
2057
|
+
private loadCurrentStatus;
|
|
2058
|
+
setExternalControl(control: AbstractControl): void;
|
|
2059
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PreloadStatusComponent, never>;
|
|
2060
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PreloadStatusComponent, "pdx-preload-status", never, {}, {}, never, never, true, never>;
|
|
2061
|
+
}
|
|
2062
|
+
|
|
2063
|
+
/**
|
|
2064
|
+
* Specialized input component for telephone numbers.
|
|
2065
|
+
*
|
|
2066
|
+
* Renders a `<mat-form-field>` wrapping an `<input type="tel">` element with
|
|
2067
|
+
* Material styling. Built on top of `SimpleBaseInputComponent` to leverage
|
|
2068
|
+
* reactive forms integration, hint/error messaging and validation hooks.
|
|
2069
|
+
*/
|
|
2070
|
+
declare class PhoneInputComponent extends SimpleBaseInputComponent {
|
|
2071
|
+
/** Emits whenever validation state changes. */
|
|
2072
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
2073
|
+
readonlyMode: boolean;
|
|
2074
|
+
disabledMode: boolean;
|
|
2075
|
+
visible: boolean;
|
|
2076
|
+
presentationMode: boolean;
|
|
2077
|
+
ngOnInit(): void;
|
|
2078
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
2079
|
+
protected getSpecificCssClasses(): string[];
|
|
2080
|
+
/** Applies strongly typed metadata to the component. */
|
|
2081
|
+
setInputMetadata(metadata: MaterialPhoneMetadata): void;
|
|
2082
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
2083
|
+
isReadonlyEffective(): boolean;
|
|
2084
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PhoneInputComponent, never>;
|
|
2085
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PhoneInputComponent, "pdx-phone-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
2086
|
+
}
|
|
2087
|
+
|
|
2088
|
+
/**
|
|
2089
|
+
* Specialized input component for HTML time inputs.
|
|
2090
|
+
*
|
|
2091
|
+
* Renders a `<mat-form-field>` containing an `<input type="time">` element
|
|
2092
|
+
* with optional min/max/step constraints, basic validation and hint support.
|
|
2093
|
+
* Built on top of the `SimpleBaseInputComponent` to reuse core features
|
|
2094
|
+
* like reactive forms integration and error handling.
|
|
2095
|
+
*/
|
|
2096
|
+
declare class TimeInputComponent extends SimpleBaseInputComponent {
|
|
2097
|
+
/** Emits whenever validation state changes. */
|
|
2098
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
2099
|
+
readonlyMode: boolean;
|
|
2100
|
+
disabledMode: boolean;
|
|
2101
|
+
visible: boolean;
|
|
2102
|
+
presentationMode: boolean;
|
|
2103
|
+
ngOnInit(): void;
|
|
2104
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
2105
|
+
protected getSpecificCssClasses(): string[];
|
|
2106
|
+
/** Applies component metadata with strong typing. */
|
|
2107
|
+
setInputMetadata(metadata: MaterialTimeInputMetadata): void;
|
|
2108
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
2109
|
+
isReadonlyEffective(): boolean;
|
|
2110
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimeInputComponent, never>;
|
|
2111
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TimeInputComponent, "pdx-time-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
2112
|
+
}
|
|
2113
|
+
|
|
2114
|
+
/**
|
|
2115
|
+
* Angular Material timepicker component used in dynamic forms.
|
|
2116
|
+
*
|
|
2117
|
+
* Provides a form field with an input connected to `mat-timepicker`, allowing
|
|
2118
|
+
* users to select a time of day. Built on top of the `SimpleBaseInputComponent`
|
|
2119
|
+
* to reuse control value accessor integration and validation handling.
|
|
2120
|
+
*/
|
|
2121
|
+
declare class MaterialTimepickerComponent extends SimpleBaseInputComponent {
|
|
2122
|
+
/** Emits whenever validation state changes. */
|
|
2123
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
2124
|
+
readonlyMode: boolean;
|
|
2125
|
+
disabledMode: boolean;
|
|
2126
|
+
visible: boolean;
|
|
2127
|
+
presentationMode: boolean;
|
|
2128
|
+
ngOnInit(): void;
|
|
2129
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
2130
|
+
protected getSpecificCssClasses(): string[];
|
|
2131
|
+
/** Applies component metadata with strong typing. */
|
|
2132
|
+
setInputMetadata(metadata: MaterialTimepickerMetadata): void;
|
|
2133
|
+
isReadonlyEffective(): boolean;
|
|
2134
|
+
/** Calculates step attribute (seconds) based on metadata. */
|
|
2135
|
+
stepAttribute(): number | null;
|
|
2136
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
2137
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialTimepickerComponent, never>;
|
|
2138
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialTimepickerComponent, "pdx-material-timepicker", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
2139
|
+
}
|
|
2140
|
+
|
|
2141
|
+
/**
|
|
2142
|
+
* Specialized input component for HTML URL inputs.
|
|
2143
|
+
*
|
|
2144
|
+
* Renders a `<mat-form-field>` containing an `<input type="url">` element
|
|
2145
|
+
* with basic validation and hint support. Built on top of the
|
|
2146
|
+
* `SimpleBaseInputComponent` to leverage common functionality such as
|
|
2147
|
+
* reactive forms integration and error handling.
|
|
2148
|
+
*/
|
|
2149
|
+
declare class UrlInputComponent extends SimpleBaseInputComponent {
|
|
2150
|
+
/** Emits whenever validation state changes. */
|
|
2151
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
2152
|
+
readonlyMode: boolean;
|
|
2153
|
+
disabledMode: boolean;
|
|
2154
|
+
visible: boolean;
|
|
2155
|
+
presentationMode: boolean;
|
|
2156
|
+
ngOnInit(): void;
|
|
2157
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
2158
|
+
protected getSpecificCssClasses(): string[];
|
|
2159
|
+
/** Applies component metadata with strong typing. */
|
|
2160
|
+
setInputMetadata(metadata: MaterialUrlInputMetadata): void;
|
|
2161
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
2162
|
+
isReadonlyEffective(): boolean;
|
|
2163
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UrlInputComponent, never>;
|
|
2164
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UrlInputComponent, "pdx-url-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
2165
|
+
}
|
|
2166
|
+
|
|
2167
|
+
/**
|
|
2168
|
+
* Specialized input component for HTML week inputs.
|
|
2169
|
+
*
|
|
2170
|
+
* Renders a `<mat-form-field>` containing an `<input type="week">` element
|
|
2171
|
+
* with optional min/max constraints, basic validation and hint support.
|
|
2172
|
+
* Built on top of the `SimpleBaseInputComponent` to reuse core features
|
|
2173
|
+
* like reactive forms integration and error handling.
|
|
2174
|
+
*/
|
|
2175
|
+
declare class WeekInputComponent extends SimpleBaseInputComponent {
|
|
2176
|
+
/** Emits whenever validation state changes. */
|
|
2177
|
+
readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
|
|
2178
|
+
readonlyMode: boolean;
|
|
2179
|
+
disabledMode: boolean;
|
|
2180
|
+
visible: boolean;
|
|
2181
|
+
presentationMode: boolean;
|
|
2182
|
+
ngOnInit(): void;
|
|
2183
|
+
validateField(): Promise<ValidationErrors | null>;
|
|
2184
|
+
protected getSpecificCssClasses(): string[];
|
|
2185
|
+
/** Applies component metadata with strong typing. */
|
|
2186
|
+
setInputMetadata(metadata: MaterialWeekInputMetadata): void;
|
|
2187
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
2188
|
+
isReadonlyEffective(): boolean;
|
|
2189
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<WeekInputComponent, never>;
|
|
2190
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<WeekInputComponent, "pdx-week-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, { "validationChange": "validationChange"; }, never, never, true, never>;
|
|
2191
|
+
}
|
|
2192
|
+
|
|
2193
|
+
/**
|
|
2194
|
+
* Basic color picker component leveraging the native input type="color".
|
|
2195
|
+
*
|
|
2196
|
+
* Renders a text field displaying the selected color value and a palette
|
|
2197
|
+
* icon that opens the browser's color picker. This acts as a starting point
|
|
2198
|
+
* for a more advanced color selection experience.
|
|
2199
|
+
*/
|
|
2200
|
+
declare class MaterialColorPickerComponent extends SimpleBaseInputComponent {
|
|
2201
|
+
private pickerRef;
|
|
2202
|
+
readonlyMode: boolean;
|
|
2203
|
+
disabledMode: boolean;
|
|
2204
|
+
visible: boolean;
|
|
2205
|
+
presentationMode: boolean;
|
|
2206
|
+
/** Applies component metadata with strong typing. */
|
|
2207
|
+
setInputMetadata(metadata: MaterialColorPickerMetadata): void;
|
|
2208
|
+
/** Opens the native color picker dialog. */
|
|
2209
|
+
openPicker(): void;
|
|
2210
|
+
/** Handles color selection from the native input. */
|
|
2211
|
+
onNativeColorChange(event: Event): void;
|
|
2212
|
+
protected getSpecificCssClasses(): string[];
|
|
2213
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
2214
|
+
isReadonlyEffective(): boolean;
|
|
2215
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialColorPickerComponent, never>;
|
|
2216
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialColorPickerComponent, "pdx-material-colorpicker", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
2217
|
+
}
|
|
2218
|
+
|
|
2219
|
+
type SelectionMode = 'continuous' | 'single';
|
|
2220
|
+
type PrecisionMode = 'item' | 'half';
|
|
2221
|
+
interface RatingIconState {
|
|
2222
|
+
index: number;
|
|
2223
|
+
filled: boolean;
|
|
2224
|
+
half: boolean;
|
|
2225
|
+
hover: boolean;
|
|
2226
|
+
}
|
|
2227
|
+
declare class MaterialRatingComponent extends SimpleBaseInputComponent implements ControlValueAccessor {
|
|
2228
|
+
itemsCount: number;
|
|
2229
|
+
selection: SelectionMode;
|
|
2230
|
+
precision: PrecisionMode;
|
|
2231
|
+
icon?: string;
|
|
2232
|
+
svgIcon?: string;
|
|
2233
|
+
svgIconOutline?: string;
|
|
2234
|
+
outlineIcon?: string;
|
|
2235
|
+
disabled: boolean;
|
|
2236
|
+
readonlyMode: boolean;
|
|
2237
|
+
presentationMode: boolean;
|
|
2238
|
+
tabindex: number;
|
|
2239
|
+
size: 'small' | 'medium' | 'large';
|
|
2240
|
+
ariaLabel?: string;
|
|
2241
|
+
ratingColor?: string;
|
|
2242
|
+
outlineColor?: string;
|
|
2243
|
+
itemTemplate?: TemplateRef<any>;
|
|
2244
|
+
itemsRoot?: ElementRef<HTMLElement>;
|
|
2245
|
+
value: number | null;
|
|
2246
|
+
private hoverIndex;
|
|
2247
|
+
private hoverHalf;
|
|
2248
|
+
private normalizeCssColor;
|
|
2249
|
+
writeValue(obj: any): void;
|
|
2250
|
+
setDisabledState(isDisabled: boolean): void;
|
|
2251
|
+
isFilled(index: number): boolean;
|
|
2252
|
+
showHalf(index: number): boolean;
|
|
2253
|
+
iconState(index: number): RatingIconState;
|
|
2254
|
+
onMouseMove(ev: MouseEvent, index: number): void;
|
|
2255
|
+
onMouseLeave(): void;
|
|
2256
|
+
onClick(ev: MouseEvent, index: number): void;
|
|
2257
|
+
onKeyDown(ev: KeyboardEvent): void;
|
|
2258
|
+
private computeValueFromIndex;
|
|
2259
|
+
private getVisualValue;
|
|
2260
|
+
private getActiveIndexAndHalf;
|
|
2261
|
+
private applyValue;
|
|
2262
|
+
readonlyEffective(): boolean;
|
|
2263
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
2264
|
+
setInputMetadata(meta: any): void;
|
|
2265
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialRatingComponent, never>;
|
|
2266
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialRatingComponent, "pdx-material-rating", never, { "itemsCount": { "alias": "itemsCount"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; "precision": { "alias": "precision"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "svgIcon": { "alias": "svgIcon"; "required": false; }; "svgIconOutline": { "alias": "svgIconOutline"; "required": false; }; "outlineIcon": { "alias": "outlineIcon"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; "size": { "alias": "size"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ratingColor": { "alias": "ratingColor"; "required": false; }; "outlineColor": { "alias": "outlineColor"; "required": false; }; }, {}, ["itemTemplate"], never, true, never>;
|
|
2267
|
+
}
|
|
2268
|
+
|
|
2269
|
+
type PickerView = 'gradient' | 'palette';
|
|
2270
|
+
type ColorFormat = 'hex' | 'rgb' | 'rgba' | 'hsl';
|
|
2271
|
+
interface GradientSettings {
|
|
2272
|
+
showOpacity?: boolean;
|
|
2273
|
+
channel?: 'hsv' | 'hsl';
|
|
2274
|
+
}
|
|
2275
|
+
interface PaletteSettings {
|
|
2276
|
+
preset?: 'basic' | 'office' | 'material' | string;
|
|
2277
|
+
colors?: string[];
|
|
2278
|
+
columns?: number;
|
|
2279
|
+
}
|
|
2280
|
+
interface PopupSettings {
|
|
2281
|
+
width?: number | string;
|
|
2282
|
+
anchor?: Element;
|
|
2283
|
+
appendTo?: Element | any;
|
|
2284
|
+
}
|
|
2285
|
+
declare class PdxColorPickerComponent extends SimpleBaseInputComponent implements ControlValueAccessor {
|
|
2286
|
+
private readonly bottomSheet;
|
|
2287
|
+
actionsLayout: 'start' | 'end';
|
|
2288
|
+
activeView: PickerView;
|
|
2289
|
+
adaptiveMode: boolean;
|
|
2290
|
+
adaptiveTitle?: string;
|
|
2291
|
+
adaptiveSubtitle?: any;
|
|
2292
|
+
clearButton: boolean;
|
|
2293
|
+
disabledMode: boolean;
|
|
2294
|
+
readonlyMode: boolean;
|
|
2295
|
+
visible: boolean;
|
|
2296
|
+
presentationMode: boolean;
|
|
2297
|
+
fillMode: 'solid' | 'flat' | 'outline';
|
|
2298
|
+
format: ColorFormat;
|
|
2299
|
+
gradientSettings?: GradientSettings;
|
|
2300
|
+
icon?: string;
|
|
2301
|
+
iconClass?: string | string[] | Record<string, boolean>;
|
|
2302
|
+
svgIcon?: any;
|
|
2303
|
+
paletteSettings?: PaletteSettings;
|
|
2304
|
+
popupSettings?: PopupSettings;
|
|
2305
|
+
preview: boolean;
|
|
2306
|
+
rounded: 'none' | 'small' | 'medium' | 'large' | 'full';
|
|
2307
|
+
size: 'small' | 'medium' | 'large';
|
|
2308
|
+
tabindex: number;
|
|
2309
|
+
views: PickerView[];
|
|
2310
|
+
maxRecent: number;
|
|
2311
|
+
showRecent: boolean;
|
|
2312
|
+
readonly valueChange: _angular_core.OutputEmitterRef<string | null>;
|
|
2313
|
+
readonly open: _angular_core.OutputEmitterRef<void>;
|
|
2314
|
+
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
2315
|
+
readonly cancel: _angular_core.OutputEmitterRef<void>;
|
|
2316
|
+
readonly activeViewChange: _angular_core.OutputEmitterRef<PickerView>;
|
|
2317
|
+
readonly activeColorClick: _angular_core.OutputEmitterRef<string>;
|
|
2318
|
+
readonly focusEvent: _angular_core.OutputEmitterRef<void>;
|
|
2319
|
+
readonly blurEvent: _angular_core.OutputEmitterRef<void>;
|
|
2320
|
+
toggleBtn?: any;
|
|
2321
|
+
private menuTrigger?;
|
|
2322
|
+
private readonly current;
|
|
2323
|
+
private readonly draft;
|
|
2324
|
+
private readonly draftAlpha;
|
|
2325
|
+
panelWidthPx: number;
|
|
2326
|
+
constructor(bottomSheet: MatBottomSheet);
|
|
2327
|
+
ngOnInit(): void;
|
|
2328
|
+
writeValue(obj: any): void;
|
|
2329
|
+
handleFocus(): void;
|
|
2330
|
+
handleBlur(): void;
|
|
2331
|
+
openPicker(): void;
|
|
2332
|
+
onClose(): void;
|
|
2333
|
+
selectedTabIndex: _angular_core.WritableSignal<number>;
|
|
2334
|
+
readonly showGradient: _angular_core.Signal<boolean>;
|
|
2335
|
+
readonly showPalette: _angular_core.Signal<boolean>;
|
|
2336
|
+
onTabIndexChange(i: number): void;
|
|
2337
|
+
draftPreview: _angular_core.Signal<string | null>;
|
|
2338
|
+
draftSolidHex: _angular_core.Signal<string>;
|
|
2339
|
+
draftOpacity: _angular_core.Signal<number>;
|
|
2340
|
+
previewBackground(): string;
|
|
2341
|
+
onNativeGradient(ev: Event): void;
|
|
2342
|
+
onOpacity(ev: Event): void;
|
|
2343
|
+
private readonly customColors;
|
|
2344
|
+
readonly recentColors: _angular_core.WritableSignal<string[]>;
|
|
2345
|
+
paletteColors: _angular_core.Signal<string[]>;
|
|
2346
|
+
trackColor(_: number, c: string): string;
|
|
2347
|
+
onSwatchClick(c: string): void;
|
|
2348
|
+
addPaletteColor(): void;
|
|
2349
|
+
private pushRecent;
|
|
2350
|
+
copyDraft(): void;
|
|
2351
|
+
isSelected(c: string): boolean;
|
|
2352
|
+
onClear(): void;
|
|
2353
|
+
onCancel(): void;
|
|
2354
|
+
onApply(): void;
|
|
2355
|
+
readonlyEffective(): boolean;
|
|
2356
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
2357
|
+
protected getSpecificCssClasses(): string[];
|
|
2358
|
+
setInputMetadata(meta: any): void;
|
|
2359
|
+
private toFormat;
|
|
2360
|
+
private toHex;
|
|
2361
|
+
private toRgb;
|
|
2362
|
+
private toHsl;
|
|
2363
|
+
private extractAlpha;
|
|
2364
|
+
private clamp01;
|
|
2365
|
+
private buildPaletteColors;
|
|
2366
|
+
private coerceWidth;
|
|
2367
|
+
private loadFromStorage;
|
|
2368
|
+
private saveToStorage;
|
|
2369
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PdxColorPickerComponent, never>;
|
|
2370
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PdxColorPickerComponent, "pdx-color-picker", never, { "actionsLayout": { "alias": "actionsLayout"; "required": false; }; "activeView": { "alias": "activeView"; "required": false; }; "adaptiveMode": { "alias": "adaptiveMode"; "required": false; }; "adaptiveTitle": { "alias": "adaptiveTitle"; "required": false; }; "adaptiveSubtitle": { "alias": "adaptiveSubtitle"; "required": false; }; "clearButton": { "alias": "clearButton"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; "fillMode": { "alias": "fillMode"; "required": false; }; "format": { "alias": "format"; "required": false; }; "gradientSettings": { "alias": "gradientSettings"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "iconClass": { "alias": "iconClass"; "required": false; }; "svgIcon": { "alias": "svgIcon"; "required": false; }; "paletteSettings": { "alias": "paletteSettings"; "required": false; }; "popupSettings": { "alias": "popupSettings"; "required": false; }; "preview": { "alias": "preview"; "required": false; }; "rounded": { "alias": "rounded"; "required": false; }; "size": { "alias": "size"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; "views": { "alias": "views"; "required": false; }; "maxRecent": { "alias": "maxRecent"; "required": false; }; "showRecent": { "alias": "showRecent"; "required": false; }; }, { "valueChange": "valueChange"; "open": "open"; "close": "close"; "cancel": "cancel"; "activeViewChange": "activeViewChange"; "activeColorClick": "activeColorClick"; "focusEvent": "focusEvent"; "blurEvent": "blurEvent"; }, never, never, true, never>;
|
|
2371
|
+
}
|
|
2372
|
+
|
|
2373
|
+
declare class PdxMaterialRangeSliderComponent extends SimpleBaseInputComponent implements OnInit {
|
|
2374
|
+
readonlyMode: boolean;
|
|
2375
|
+
disabledMode: boolean;
|
|
2376
|
+
visible: boolean;
|
|
2377
|
+
presentationMode: boolean;
|
|
2378
|
+
metadata: _angular_core.WritableSignal<MaterialRangeSliderMetadata | null>;
|
|
2379
|
+
readonly rangeGroup: FormGroup<{
|
|
2380
|
+
start: FormControl<number | null>;
|
|
2381
|
+
end: FormControl<number | null>;
|
|
2382
|
+
}>;
|
|
2383
|
+
readonly isRangeMode: _angular_core.Signal<boolean>;
|
|
2384
|
+
readonly displayWithFn: _angular_core.Signal<(value: number) => string>;
|
|
2385
|
+
readonly errorMessage: _angular_core.Signal<string>;
|
|
2386
|
+
ngOnInit(): void;
|
|
2387
|
+
/**
|
|
2388
|
+
* Overrides writeValue to handle both single and range modes.
|
|
2389
|
+
*/
|
|
2390
|
+
writeValue(value: any): void;
|
|
2391
|
+
/**
|
|
2392
|
+
* Sets the component metadata and re-initializes validators.
|
|
2393
|
+
* @param metadata The metadata for the component.
|
|
2394
|
+
*/
|
|
2395
|
+
setSliderMetadata(metadata: MaterialRangeSliderMetadata): void;
|
|
2396
|
+
protected getSpecificCssClasses(): string[];
|
|
2397
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PdxMaterialRangeSliderComponent, never>;
|
|
2398
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PdxMaterialRangeSliderComponent, "pdx-material-range-slider", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
2399
|
+
}
|
|
2400
|
+
|
|
2401
|
+
declare class MaterialTransferListComponent extends SimpleBaseSelectComponent {
|
|
2402
|
+
readonlyMode: boolean;
|
|
2403
|
+
disabledMode: boolean;
|
|
2404
|
+
visible: boolean;
|
|
2405
|
+
presentationMode: boolean;
|
|
2406
|
+
leftLabel: string;
|
|
2407
|
+
rightLabel: string;
|
|
2408
|
+
leftPlaceholder: string;
|
|
2409
|
+
rightPlaceholder: string;
|
|
2410
|
+
readonly leftOptions: _angular_core.WritableSignal<SelectOption<any>[]>;
|
|
2411
|
+
readonly rightOptions: _angular_core.WritableSignal<SelectOption<any>[]>;
|
|
2412
|
+
readonly leftFilter: _angular_core.WritableSignal<string>;
|
|
2413
|
+
readonly rightFilter: _angular_core.WritableSignal<string>;
|
|
2414
|
+
readonly filteredLeft: _angular_core.Signal<SelectOption<any>[]>;
|
|
2415
|
+
readonly filteredRight: _angular_core.Signal<SelectOption<any>[]>;
|
|
2416
|
+
constructor();
|
|
2417
|
+
setSelectMetadata(metadata: SimpleSelectMetadata<any>): void;
|
|
2418
|
+
ngOnInit(): void;
|
|
2419
|
+
private updateListsFromValue;
|
|
2420
|
+
getSelectedOptions(list: MatSelectionList): SelectOption[];
|
|
2421
|
+
moveRight(options: SelectOption[]): void;
|
|
2422
|
+
moveLeft(options: SelectOption[]): void;
|
|
2423
|
+
moveAllToRight(): void;
|
|
2424
|
+
moveAllToLeft(): void;
|
|
2425
|
+
drop(event: CdkDragDrop<SelectOption<any>[]>): void;
|
|
2426
|
+
private syncControl;
|
|
2427
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MaterialTransferListComponent, never>;
|
|
2428
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MaterialTransferListComponent, "pdx-material-transfer-list", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
2429
|
+
}
|
|
2430
|
+
|
|
2431
|
+
declare class PdxYearInputComponent extends SimpleBaseInputComponent {
|
|
2432
|
+
private get meta();
|
|
2433
|
+
readonly minYear: _angular_core.Signal<number | undefined>;
|
|
2434
|
+
readonly maxYear: _angular_core.Signal<number | undefined>;
|
|
2435
|
+
readonly step: _angular_core.Signal<number>;
|
|
2436
|
+
readonlyMode: boolean;
|
|
2437
|
+
disabledMode: boolean;
|
|
2438
|
+
visible: boolean;
|
|
2439
|
+
presentationMode: boolean;
|
|
2440
|
+
isReadonlyEffective(): boolean;
|
|
2441
|
+
ngOnInit(): void;
|
|
2442
|
+
setInputMetadata(metadata: MaterialYearInputMetadata): void;
|
|
2443
|
+
errorStateMatcher(): _angular_material_error_options_d_CGdTZUYk.E;
|
|
2444
|
+
onYearInput(event: Event): void;
|
|
2445
|
+
protected getSpecificCssClasses(): string[];
|
|
2446
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PdxYearInputComponent, never>;
|
|
2447
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PdxYearInputComponent, "pdx-year-input", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
2448
|
+
}
|
|
2449
|
+
|
|
2450
|
+
interface TimeRangeValue {
|
|
2451
|
+
start: string | null;
|
|
2452
|
+
end: string | null;
|
|
2453
|
+
}
|
|
2454
|
+
declare class PdxMaterialTimeRangeComponent extends SimpleBaseInputComponent implements OnInit {
|
|
2455
|
+
readonlyMode: boolean;
|
|
2456
|
+
disabledMode: boolean;
|
|
2457
|
+
visible: boolean;
|
|
2458
|
+
presentationMode: boolean;
|
|
2459
|
+
timeRangeForm: FormGroup<{
|
|
2460
|
+
start: FormControl<string | null>;
|
|
2461
|
+
end: FormControl<string | null>;
|
|
2462
|
+
}>;
|
|
2463
|
+
private get meta();
|
|
2464
|
+
startLabel: () => string;
|
|
2465
|
+
endLabel: () => string;
|
|
2466
|
+
startPlaceholder: () => string;
|
|
2467
|
+
endPlaceholder: () => string;
|
|
2468
|
+
ngOnInit(): void;
|
|
2469
|
+
writeValue(value: TimeRangeValue | null): void;
|
|
2470
|
+
setDisabledState(isDisabled: boolean): void;
|
|
2471
|
+
private rangeOrderValidator;
|
|
2472
|
+
private minDistanceValidator;
|
|
2473
|
+
private maxDistanceValidator;
|
|
2474
|
+
private timeToMinutes;
|
|
2475
|
+
setInputMetadata(metadata: MaterialTimeRangeMetadata): void;
|
|
2476
|
+
isReadonlyEffective(): boolean;
|
|
2477
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PdxMaterialTimeRangeComponent, never>;
|
|
2478
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PdxMaterialTimeRangeComponent, "pdx-material-time-range", never, { "readonlyMode": { "alias": "readonlyMode"; "required": false; }; "disabledMode": { "alias": "disabledMode"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "presentationMode": { "alias": "presentationMode"; "required": false; }; }, {}, never, never, true, never>;
|
|
2479
|
+
}
|
|
2480
|
+
|
|
2481
|
+
/** Metadata for TextInputComponent */
|
|
2482
|
+
declare const PDX_TEXT_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2483
|
+
|
|
2484
|
+
/** Metadata for NumberInputComponent */
|
|
2485
|
+
declare const PDX_NUMBER_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2486
|
+
|
|
2487
|
+
/**
|
|
2488
|
+
* Metadata for MaterialSelectComponent
|
|
2489
|
+
*
|
|
2490
|
+
* Documenta inputs/descrição para catálogos e builders. Este componente
|
|
2491
|
+
* não expõe @Output próprios (usa ControlValueAccessor), portanto não há
|
|
2492
|
+
* eventos listados aqui.
|
|
2493
|
+
*/
|
|
2494
|
+
declare const PDX_MATERIAL_SELECT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2495
|
+
|
|
2496
|
+
declare const PDX_COLOR_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2497
|
+
|
|
2498
|
+
declare const PDX_DATE_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2499
|
+
|
|
2500
|
+
declare const PDX_DATETIME_LOCAL_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2501
|
+
|
|
2502
|
+
declare const PDX_EMAIL_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2503
|
+
|
|
2504
|
+
declare const PDX_MATERIAL_DATEPICKER_COMPONENT_METADATA: ComponentDocMeta;
|
|
2505
|
+
|
|
2506
|
+
declare const PDX_MATERIAL_DATE_RANGE_COMPONENT_METADATA: ComponentDocMeta;
|
|
2507
|
+
|
|
2508
|
+
declare const PDX_MATERIAL_CURRENCY_COMPONENT_METADATA: ComponentDocMeta;
|
|
2509
|
+
|
|
2510
|
+
declare const PDX_MATERIAL_TEXTAREA_COMPONENT_METADATA: ComponentDocMeta;
|
|
2511
|
+
|
|
2512
|
+
declare const PDX_MATERIAL_SLIDER_COMPONENT_METADATA: ComponentDocMeta;
|
|
2513
|
+
|
|
2514
|
+
declare const PDX_MATERIAL_TIMEPICKER_COMPONENT_METADATA: ComponentDocMeta;
|
|
2515
|
+
|
|
2516
|
+
declare const PDX_MATERIAL_BUTTON_COMPONENT_METADATA: ComponentDocMeta;
|
|
2517
|
+
|
|
2518
|
+
declare const PDX_MATERIAL_BUTTON_TOGGLE_COMPONENT_METADATA: ComponentDocMeta;
|
|
2519
|
+
|
|
2520
|
+
declare const PDX_MATERIAL_CHECKBOX_GROUP_COMPONENT_METADATA: ComponentDocMeta;
|
|
2521
|
+
|
|
2522
|
+
declare const PDX_MATERIAL_CHIPS_COMPONENT_METADATA: ComponentDocMeta;
|
|
2523
|
+
|
|
2524
|
+
declare const PDX_MATERIAL_COLORPICKER_COMPONENT_METADATA: ComponentDocMeta;
|
|
2525
|
+
|
|
2526
|
+
declare const PDX_MATERIAL_RATING_COMPONENT_METADATA: ComponentDocMeta;
|
|
2527
|
+
|
|
2528
|
+
declare const PDX_COLOR_PICKER_COMPONENT_METADATA: ComponentDocMeta;
|
|
2529
|
+
|
|
2530
|
+
declare const PDX_MATERIAL_CPF_CNPJ_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2531
|
+
|
|
2532
|
+
declare const PDX_MATERIAL_FILE_UPLOAD_COMPONENT_METADATA: ComponentDocMeta;
|
|
2533
|
+
|
|
2534
|
+
declare const PDX_MATERIAL_MULTI_SELECT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2535
|
+
|
|
2536
|
+
declare const PDX_MATERIAL_MULTI_SELECT_TREE_COMPONENT_METADATA: ComponentDocMeta;
|
|
2537
|
+
|
|
2538
|
+
declare const PDX_MATERIAL_RADIO_GROUP_COMPONENT_METADATA: ComponentDocMeta;
|
|
2539
|
+
|
|
2540
|
+
declare const PDX_MATERIAL_SEARCHABLE_SELECT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2541
|
+
|
|
2542
|
+
declare const PDX_MATERIAL_SELECTION_LIST_COMPONENT_METADATA: ComponentDocMeta;
|
|
2543
|
+
|
|
2544
|
+
declare const PDX_MATERIAL_TRANSFER_LIST_COMPONENT_METADATA: ComponentDocMeta;
|
|
2545
|
+
|
|
2546
|
+
declare const PDX_MATERIAL_TREE_SELECT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2547
|
+
|
|
2548
|
+
declare const PDX_MATERIAL_PRICE_RANGE_COMPONENT_METADATA: ComponentDocMeta;
|
|
2549
|
+
|
|
2550
|
+
declare const PDX_MATERIAL_RANGE_SLIDER_COMPONENT_METADATA: ComponentDocMeta;
|
|
2551
|
+
|
|
2552
|
+
declare const PDX_MONTH_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2553
|
+
|
|
2554
|
+
declare const PDX_PASSWORD_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2555
|
+
|
|
2556
|
+
declare const PDX_PHONE_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2557
|
+
|
|
2558
|
+
declare const PDX_PRELOAD_STATUS_COMPONENT_METADATA: ComponentDocMeta;
|
|
2559
|
+
|
|
2560
|
+
declare const PDX_SEARCH_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2561
|
+
|
|
2562
|
+
declare const PDX_TIME_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2563
|
+
|
|
2564
|
+
declare const PDX_URL_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2565
|
+
|
|
2566
|
+
declare const PDX_WEEK_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2567
|
+
|
|
2568
|
+
declare const PDX_MATERIAL_TIME_RANGE_COMPONENT_METADATA: ComponentDocMeta;
|
|
2569
|
+
|
|
2570
|
+
declare const PDX_YEAR_INPUT_COMPONENT_METADATA: ComponentDocMeta;
|
|
2571
|
+
|
|
2572
|
+
declare const PDX_FIELD_SHELL_COMPONENT_METADATA: ComponentDocMeta;
|
|
2573
|
+
|
|
2574
|
+
/**
|
|
2575
|
+
* Context object passed to action handlers containing all relevant data
|
|
2576
|
+
* about the component state and form context when an action is executed.
|
|
2577
|
+
*
|
|
2578
|
+
* This interface provides maximum flexibility for action handlers to access
|
|
2579
|
+
* both component-specific data and broader form/application context.
|
|
2580
|
+
*
|
|
2581
|
+
* @example Basic usage in action handler
|
|
2582
|
+
* ```typescript
|
|
2583
|
+
* this.registerAction('customAction', async (context: ActionContext) => {
|
|
2584
|
+
* console.log('Field:', context.fieldName);
|
|
2585
|
+
* console.log('Value:', context.fieldValue);
|
|
2586
|
+
* console.log('Metadata:', context.metadata);
|
|
2587
|
+
* return { success: true, data: 'Action completed' };
|
|
2588
|
+
* });
|
|
2589
|
+
* ```
|
|
2590
|
+
*
|
|
2591
|
+
* @example Using actionParam for parameterized actions
|
|
2592
|
+
* ```typescript
|
|
2593
|
+
* // Metadata configuration: action: "navigate:/dashboard"
|
|
2594
|
+
* this.registerAction('navigate', async (context: ActionContext) => {
|
|
2595
|
+
* const url = context.actionParam; // "/dashboard"
|
|
2596
|
+
* await this.router.navigate([url]);
|
|
2597
|
+
* return { success: true };
|
|
2598
|
+
* });
|
|
2599
|
+
* ```
|
|
2600
|
+
*/
|
|
2601
|
+
interface ActionContext {
|
|
2602
|
+
/**
|
|
2603
|
+
* Name/identifier of the field that triggered the action.
|
|
2604
|
+
*
|
|
2605
|
+
* Useful for:
|
|
2606
|
+
* - Logging and debugging
|
|
2607
|
+
* - Field-specific business logic
|
|
2608
|
+
* - Form validation context
|
|
2609
|
+
*
|
|
2610
|
+
* @example "email", "firstName", "submitButton"
|
|
2611
|
+
*/
|
|
2612
|
+
fieldName?: string;
|
|
2613
|
+
/**
|
|
2614
|
+
* Current value of the field that triggered the action.
|
|
2615
|
+
*
|
|
2616
|
+
* For different field types:
|
|
2617
|
+
* - Input fields: string value
|
|
2618
|
+
* - Checkboxes: boolean
|
|
2619
|
+
* - Select: selected option value
|
|
2620
|
+
* - Buttons: typically undefined
|
|
2621
|
+
*
|
|
2622
|
+
* @example "john@example.com", true, ["option1", "option2"]
|
|
2623
|
+
*/
|
|
2624
|
+
fieldValue?: any;
|
|
2625
|
+
/**
|
|
2626
|
+
* Complete metadata configuration object for the field.
|
|
2627
|
+
*
|
|
2628
|
+
* Contains all field configuration including:
|
|
2629
|
+
* - Label, placeholder, validation rules
|
|
2630
|
+
* - UI configuration (appearance, icons, etc.)
|
|
2631
|
+
* - Custom properties specific to the field
|
|
2632
|
+
*
|
|
2633
|
+
* @example MaterialButtonMetadata, MaterialInputMetadata, etc.
|
|
2634
|
+
*/
|
|
2635
|
+
metadata?: any;
|
|
2636
|
+
/**
|
|
2637
|
+
* Complete form data object containing all field values.
|
|
2638
|
+
*
|
|
2639
|
+
* Useful for:
|
|
2640
|
+
* - Cross-field validation
|
|
2641
|
+
* - Conditional logic based on other fields
|
|
2642
|
+
* - Form-wide operations
|
|
2643
|
+
*
|
|
2644
|
+
* @example { email: "user@example.com", name: "John", age: 30 }
|
|
2645
|
+
*/
|
|
2646
|
+
formData?: any;
|
|
2647
|
+
/**
|
|
2648
|
+
* Reference to the Angular component instance that triggered the action.
|
|
2649
|
+
*
|
|
2650
|
+
* Provides access to:
|
|
2651
|
+
* - Component methods and properties
|
|
2652
|
+
* - ElementRef for DOM manipulation
|
|
2653
|
+
* - Angular lifecycle and services
|
|
2654
|
+
*
|
|
2655
|
+
* @example MaterialButtonComponent, MaterialInputComponent instances
|
|
2656
|
+
*/
|
|
2657
|
+
componentInstance?: any;
|
|
2658
|
+
/**
|
|
2659
|
+
* Parameter extracted from action reference after colon separator.
|
|
2660
|
+
*
|
|
2661
|
+
* When action is defined as "actionName:parameter", this contains the parameter part.
|
|
2662
|
+
* Enables parameterized actions without separate configuration.
|
|
2663
|
+
*
|
|
2664
|
+
* @example
|
|
2665
|
+
* - Action: "navigate:/dashboard" → actionParam: "/dashboard"
|
|
2666
|
+
* - Action: "showAlert:Data saved successfully" → actionParam: "Data saved successfully"
|
|
2667
|
+
* - Action: "download:https://example.com/file.pdf" → actionParam: "https://example.com/file.pdf"
|
|
2668
|
+
*/
|
|
2669
|
+
actionParam?: string;
|
|
2670
|
+
}
|
|
2671
|
+
/**
|
|
2672
|
+
* Result object returned by action handlers indicating success/failure
|
|
2673
|
+
* and any associated data or error information.
|
|
2674
|
+
*
|
|
2675
|
+
* Provides a standardized way for action handlers to communicate results
|
|
2676
|
+
* back to the calling component for appropriate user feedback.
|
|
2677
|
+
*
|
|
2678
|
+
* @example Successful action result
|
|
2679
|
+
* ```typescript
|
|
2680
|
+
* return {
|
|
2681
|
+
* success: true,
|
|
2682
|
+
* data: 'Form submitted successfully',
|
|
2683
|
+
* redirect: '/dashboard'
|
|
2684
|
+
* };
|
|
2685
|
+
* ```
|
|
2686
|
+
*
|
|
2687
|
+
* @example Failed action result
|
|
2688
|
+
* ```typescript
|
|
2689
|
+
* return {
|
|
2690
|
+
* success: false,
|
|
2691
|
+
* error: 'Validation failed: Email is required'
|
|
2692
|
+
* };
|
|
2693
|
+
* ```
|
|
2694
|
+
*/
|
|
2695
|
+
interface ActionResult {
|
|
2696
|
+
/**
|
|
2697
|
+
* Indicates whether the action completed successfully.
|
|
2698
|
+
*
|
|
2699
|
+
* - true: Action completed without errors
|
|
2700
|
+
* - false: Action failed or encountered an error
|
|
2701
|
+
*
|
|
2702
|
+
* Used by components to determine appropriate user feedback
|
|
2703
|
+
* (success message, error display, etc.)
|
|
2704
|
+
*/
|
|
2705
|
+
success: boolean;
|
|
2706
|
+
/**
|
|
2707
|
+
* Optional data returned by successful actions.
|
|
2708
|
+
*
|
|
2709
|
+
* Can contain:
|
|
2710
|
+
* - Success messages for user display
|
|
2711
|
+
* - Result data from API calls
|
|
2712
|
+
* - State information for further processing
|
|
2713
|
+
* - Any serializable data relevant to the action
|
|
2714
|
+
*
|
|
2715
|
+
* @example "Form submitted", { userId: 123 }, ["item1", "item2"]
|
|
2716
|
+
*/
|
|
2717
|
+
data?: any;
|
|
2718
|
+
/**
|
|
2719
|
+
* Error message when action fails (success = false).
|
|
2720
|
+
*
|
|
2721
|
+
* Should contain:
|
|
2722
|
+
* - User-friendly error descriptions
|
|
2723
|
+
* - Validation error messages
|
|
2724
|
+
* - Technical error details (for logging)
|
|
2725
|
+
*
|
|
2726
|
+
* Displayed to users or logged for debugging purposes.
|
|
2727
|
+
*
|
|
2728
|
+
* @example "Network error occurred", "Invalid email format", "Access denied"
|
|
2729
|
+
*/
|
|
2730
|
+
error?: string;
|
|
2731
|
+
/**
|
|
2732
|
+
* Optional URL for automatic navigation after action completion.
|
|
2733
|
+
*
|
|
2734
|
+
* When provided, the calling component may automatically redirect
|
|
2735
|
+
* the user to this URL after the action succeeds.
|
|
2736
|
+
*
|
|
2737
|
+
* Useful for:
|
|
2738
|
+
* - Post-submit redirects
|
|
2739
|
+
* - Workflow navigation
|
|
2740
|
+
* - Success page redirection
|
|
2741
|
+
*
|
|
2742
|
+
* @example "/dashboard", "/success", "https://external-site.com"
|
|
2743
|
+
*/
|
|
2744
|
+
redirect?: string;
|
|
2745
|
+
}
|
|
2746
|
+
/**
|
|
2747
|
+
* Function signature for action handlers that can be registered with the ActionResolverService.
|
|
2748
|
+
*
|
|
2749
|
+
* Action handlers receive an ActionContext with all relevant component and form data,
|
|
2750
|
+
* and must return an ActionResult indicating success/failure.
|
|
2751
|
+
*
|
|
2752
|
+
* Handlers can be either synchronous or asynchronous to support both immediate
|
|
2753
|
+
* operations and API calls/complex processing.
|
|
2754
|
+
*
|
|
2755
|
+
* @example Synchronous action handler
|
|
2756
|
+
* ```typescript
|
|
2757
|
+
* const logHandler: ActionHandler = (context) => {
|
|
2758
|
+
* console.log('Field value:', context.fieldValue);
|
|
2759
|
+
* return { success: true, data: 'Logged successfully' };
|
|
2760
|
+
* };
|
|
2761
|
+
* ```
|
|
2762
|
+
*
|
|
2763
|
+
* @example Asynchronous action handler
|
|
2764
|
+
* ```typescript
|
|
2765
|
+
* const saveHandler: ActionHandler = async (context) => {
|
|
2766
|
+
* try {
|
|
2767
|
+
* await apiService.saveData(context.formData);
|
|
2768
|
+
* return { success: true, data: 'Data saved' };
|
|
2769
|
+
* } catch (error) {
|
|
2770
|
+
* return { success: false, error: 'Save failed' };
|
|
2771
|
+
* }
|
|
2772
|
+
* };
|
|
2773
|
+
* ```
|
|
2774
|
+
*
|
|
2775
|
+
* @param context - Complete action execution context
|
|
2776
|
+
* @returns Promise<ActionResult> or ActionResult indicating success/failure
|
|
2777
|
+
*/
|
|
2778
|
+
type ActionHandler = (context: ActionContext) => Promise<ActionResult> | ActionResult;
|
|
2779
|
+
declare class ActionResolverService {
|
|
2780
|
+
private readonly router;
|
|
2781
|
+
private readonly http;
|
|
2782
|
+
private readonly dialog;
|
|
2783
|
+
private readonly actionRegistry;
|
|
2784
|
+
constructor();
|
|
2785
|
+
/**
|
|
2786
|
+
* Registra ações relacionadas a diálogos (unificado PraxisDialog)
|
|
2787
|
+
*/
|
|
2788
|
+
private registerDialogActions;
|
|
2789
|
+
/**
|
|
2790
|
+
* Registra uma nova ação
|
|
2791
|
+
*/
|
|
2792
|
+
registerAction(actionName: string, handler: ActionHandler): void;
|
|
2793
|
+
/**
|
|
2794
|
+
* Remove uma ação registrada
|
|
2795
|
+
*/
|
|
2796
|
+
unregisterAction(actionName: string): void;
|
|
2797
|
+
/**
|
|
2798
|
+
* Executa uma ação por nome
|
|
2799
|
+
*/
|
|
2800
|
+
executeAction(actionRef: string, context?: ActionContext): Promise<ActionResult>;
|
|
2801
|
+
/**
|
|
2802
|
+
* Lista todas as ações registradas
|
|
2803
|
+
*/
|
|
2804
|
+
getRegisteredActions(): string[];
|
|
2805
|
+
/**
|
|
2806
|
+
* Verifica se uma ação existe
|
|
2807
|
+
*/
|
|
2808
|
+
hasAction(actionName: string): boolean;
|
|
2809
|
+
/**
|
|
2810
|
+
* Registra ações built-in (pré-definidas) do sistema ActionResolverService.
|
|
2811
|
+
*
|
|
2812
|
+
* Este método é chamado automaticamente no constructor e registra um conjunto
|
|
2813
|
+
* de ações comuns úteis para aplicações corporativas, eliminando a necessidade
|
|
2814
|
+
* de implementar essas funcionalidades básicas repetidamente.
|
|
2815
|
+
*
|
|
2816
|
+
* Todas as ações built-in seguem padrões corporativos de:
|
|
2817
|
+
* - ✅ Tratamento de erros robusto
|
|
2818
|
+
* - ✅ Logging consistente para auditoria
|
|
2819
|
+
* - ✅ Mensagens user-friendly
|
|
2820
|
+
* - ✅ Segurança (noopener, noreferrer)
|
|
2821
|
+
* - ✅ Compatibilidade cross-browser
|
|
2822
|
+
*
|
|
2823
|
+
* ## 📋 Ações Disponíveis
|
|
2824
|
+
*
|
|
2825
|
+
* ### 📝 Formulários
|
|
2826
|
+
* - **submitForm**: Submete o formulário pai do componente
|
|
2827
|
+
* - **resetForm**: Reseta todos os campos do formulário pai
|
|
2828
|
+
*
|
|
2829
|
+
* ### 🧭 Navegação
|
|
2830
|
+
* - **navigate**: Navegação interna via Angular Router ou externa via window.location
|
|
2831
|
+
* - **openUrl**: Abre URL em nova aba com segurança (noopener, noreferrer)
|
|
2832
|
+
*
|
|
2833
|
+
* ### 📥 Downloads e Dados
|
|
2834
|
+
* - **download**: Inicia download de arquivo via URL
|
|
2835
|
+
* - **copyToClipboard**: Copia texto para área de transferência
|
|
2836
|
+
*
|
|
2837
|
+
* ### 🔔 Interface e Feedback
|
|
2838
|
+
* - **showAlert**: Exibe alerta nativo do navegador
|
|
2839
|
+
* - **log**: Registra mensagem no console para debugging
|
|
2840
|
+
*
|
|
2841
|
+
* ## 🎯 Uso no Metadata
|
|
2842
|
+
*
|
|
2843
|
+
* ```typescript
|
|
2844
|
+
* // Ação simples
|
|
2845
|
+
* const submitButton: MaterialButtonMetadata = {
|
|
2846
|
+
* name: 'submit',
|
|
2847
|
+
* label: 'Enviar',
|
|
2848
|
+
* controlType: 'button',
|
|
2849
|
+
* action: 'submitForm' // ← Ação built-in
|
|
2850
|
+
* };
|
|
2851
|
+
*
|
|
2852
|
+
* // Ação com parâmetro
|
|
2853
|
+
* const linkButton: MaterialButtonMetadata = {
|
|
2854
|
+
* name: 'dashboard',
|
|
2855
|
+
* label: 'Dashboard',
|
|
2856
|
+
* controlType: 'button',
|
|
2857
|
+
* action: 'navigate:/dashboard' // ← Parâmetro após ':'
|
|
2858
|
+
* };
|
|
2859
|
+
*
|
|
2860
|
+
* // Ação de download
|
|
2861
|
+
* const downloadButton: MaterialButtonMetadata = {
|
|
2862
|
+
* name: 'download',
|
|
2863
|
+
* label: 'Download PDF',
|
|
2864
|
+
* controlType: 'button',
|
|
2865
|
+
* action: 'download:https://example.com/report.pdf'
|
|
2866
|
+
* };
|
|
2867
|
+
* ```
|
|
2868
|
+
*
|
|
2869
|
+
* ## ⚠️ Notas Importantes
|
|
2870
|
+
*
|
|
2871
|
+
* - Ações são **case-sensitive**: use exatamente como documentado
|
|
2872
|
+
* - Parâmetros são opcionais: ações funcionam com/sem parâmetros
|
|
2873
|
+
* - Tratamento de erro: todas as ações retornam ActionResult padronizado
|
|
2874
|
+
* - Logging: ações importantes são logadas automaticamente para auditoria
|
|
2875
|
+
* - Segurança: URLs externas usam 'noopener,noreferrer' por padrão
|
|
2876
|
+
*
|
|
2877
|
+
* @private
|
|
2878
|
+
* @see ActionContext - Interface de contexto passada para todas as ações
|
|
2879
|
+
* @see ActionResult - Interface de resultado retornada por todas as ações
|
|
2880
|
+
* @see ActionHandler - Tipo de função para implementar ações customizadas
|
|
2881
|
+
*/
|
|
2882
|
+
private registerBuiltInActions;
|
|
2883
|
+
/**
|
|
2884
|
+
* Encontra o elemento <form> pai de um componente Angular.
|
|
2885
|
+
*
|
|
2886
|
+
* Percorre a árvore DOM a partir do elemento do componente até encontrar
|
|
2887
|
+
* um elemento <form> pai ou chegar ao document.body.
|
|
2888
|
+
*
|
|
2889
|
+
* Usado pelas ações submitForm e resetForm para localizar o formulário
|
|
2890
|
+
* que contém o componente que disparou a ação.
|
|
2891
|
+
*
|
|
2892
|
+
* @param componentInstance - Instância do componente Angular
|
|
2893
|
+
* @returns HTMLFormElement se encontrado, null caso contrário
|
|
2894
|
+
*
|
|
2895
|
+
* @example Estrutura HTML típica
|
|
2896
|
+
* ```html
|
|
2897
|
+
* <form>
|
|
2898
|
+
* <mat-form-field>
|
|
2899
|
+
* <input matInput>
|
|
2900
|
+
* </mat-form-field>
|
|
2901
|
+
* <pdx-material-button action="submitForm">Submit</pdx-material-button>
|
|
2902
|
+
* </form>
|
|
2903
|
+
* ```
|
|
2904
|
+
*
|
|
2905
|
+
* @private
|
|
2906
|
+
*/
|
|
2907
|
+
private findParentForm;
|
|
2908
|
+
/**
|
|
2909
|
+
* Registra ações de estado e validação de formulários.
|
|
2910
|
+
* Chamado durante a inicialização do serviço.
|
|
2911
|
+
*/
|
|
2912
|
+
private registerStateValidationActions;
|
|
2913
|
+
/**
|
|
2914
|
+
* Registra ações de API e manipulação de dados.
|
|
2915
|
+
* Chamado durante a inicialização do serviço.
|
|
2916
|
+
*/
|
|
2917
|
+
private registerApiDataActions;
|
|
2918
|
+
/**
|
|
2919
|
+
* Limpa drafts antigos do localStorage para evitar quota exceeded.
|
|
2920
|
+
*
|
|
2921
|
+
* Remove drafts com mais de 7 dias ou que estejam malformados.
|
|
2922
|
+
* Chamado automaticamente antes de salvar novos drafts.
|
|
2923
|
+
*
|
|
2924
|
+
* @private
|
|
2925
|
+
*/
|
|
2926
|
+
private cleanupOldDrafts;
|
|
2927
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionResolverService, never>;
|
|
2928
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ActionResolverService>;
|
|
2929
|
+
}
|
|
2930
|
+
|
|
2931
|
+
declare class DateUtilsService {
|
|
2932
|
+
/**
|
|
2933
|
+
* Parses different date representations into a `Date` object.
|
|
2934
|
+
* Accepts ISO strings, `Date` instances or numeric arrays in the form
|
|
2935
|
+
* `[year, month, day, hour?, minute?, second?, millisecond?]`.
|
|
2936
|
+
* Returns `null` when the input cannot be parsed.
|
|
2937
|
+
*/
|
|
2938
|
+
parseDate(value: any): Date | null;
|
|
2939
|
+
getDefaultDateFormat(controlType?: string): string;
|
|
2940
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateUtilsService, never>;
|
|
2941
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DateUtilsService>;
|
|
2942
|
+
}
|
|
2943
|
+
|
|
2944
|
+
interface ShortcutHandler {
|
|
2945
|
+
callback: () => void;
|
|
2946
|
+
description?: string;
|
|
2947
|
+
componentId?: string;
|
|
2948
|
+
priority?: number;
|
|
2949
|
+
}
|
|
2950
|
+
interface ShortcutInfo {
|
|
2951
|
+
shortcut: string;
|
|
2952
|
+
handlers: ShortcutHandler[];
|
|
2953
|
+
}
|
|
2954
|
+
declare class KeyboardShortcutService {
|
|
2955
|
+
private readonly destroyRef;
|
|
2956
|
+
private readonly shortcuts;
|
|
2957
|
+
private isListening;
|
|
2958
|
+
constructor();
|
|
2959
|
+
/**
|
|
2960
|
+
* Registra um atalho de teclado
|
|
2961
|
+
*/
|
|
2962
|
+
registerShortcut(shortcut: string, handler: ShortcutHandler): () => void;
|
|
2963
|
+
/**
|
|
2964
|
+
* Remove um atalho de teclado específico
|
|
2965
|
+
*/
|
|
2966
|
+
unregisterShortcut(shortcut: string, handler: ShortcutHandler): void;
|
|
2967
|
+
/**
|
|
2968
|
+
* Remove todos os atalhos de um componente específico
|
|
2969
|
+
*/
|
|
2970
|
+
unregisterComponentShortcuts(componentId: string): void;
|
|
2971
|
+
/**
|
|
2972
|
+
* Lista todos os atalhos registrados
|
|
2973
|
+
*/
|
|
2974
|
+
getRegisteredShortcuts(): ShortcutInfo[];
|
|
2975
|
+
/**
|
|
2976
|
+
* Verifica se um atalho está registrado
|
|
2977
|
+
*/
|
|
2978
|
+
hasShortcut(shortcut: string): boolean;
|
|
2979
|
+
/**
|
|
2980
|
+
* Executa manualmente um atalho (para testes)
|
|
2981
|
+
*/
|
|
2982
|
+
executeShortcut(shortcut: string): boolean;
|
|
2983
|
+
/**
|
|
2984
|
+
* Inicia a escuta de eventos de teclado
|
|
2985
|
+
*/
|
|
2986
|
+
private startListening;
|
|
2987
|
+
/**
|
|
2988
|
+
* Verifica se deve processar o evento
|
|
2989
|
+
*/
|
|
2990
|
+
private shouldProcessEvent;
|
|
2991
|
+
/**
|
|
2992
|
+
* Converte um evento de teclado em string de atalho
|
|
2993
|
+
*/
|
|
2994
|
+
private eventToShortcut;
|
|
2995
|
+
/**
|
|
2996
|
+
* Normaliza uma string de atalho
|
|
2997
|
+
*/
|
|
2998
|
+
private normalizeShortcut;
|
|
2999
|
+
/**
|
|
3000
|
+
* Converte atalho em formato legível
|
|
3001
|
+
*/
|
|
3002
|
+
formatShortcut(shortcut: string): string;
|
|
3003
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KeyboardShortcutService, never>;
|
|
3004
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<KeyboardShortcutService>;
|
|
3005
|
+
}
|
|
3006
|
+
|
|
3007
|
+
/**
|
|
3008
|
+
* Interfaces essenciais para o sistema de registro de componentes
|
|
3009
|
+
* Versão ultra-simplificada sem metadados redundantes
|
|
3010
|
+
*/
|
|
3011
|
+
|
|
3012
|
+
/**
|
|
3013
|
+
* Registro de um componente no sistema com cache inteligente
|
|
3014
|
+
*/
|
|
3015
|
+
interface ComponentRegistration<T = any> {
|
|
3016
|
+
/** Factory para carregamento lazy */
|
|
3017
|
+
factory: () => Promise<Type<T>>;
|
|
3018
|
+
/** Componente em cache após carregamento */
|
|
3019
|
+
cached?: Type<T>;
|
|
3020
|
+
/** Timestamp do cache para validação TTL */
|
|
3021
|
+
cachedAt?: number;
|
|
3022
|
+
/** Contador de tentativas de carregamento */
|
|
3023
|
+
loadAttempts?: number;
|
|
3024
|
+
/** Último erro de carregamento */
|
|
3025
|
+
lastError?: Error;
|
|
3026
|
+
}
|
|
3027
|
+
declare const CACHE_TTL: number;
|
|
3028
|
+
declare const MAX_LOAD_ATTEMPTS = 3;
|
|
3029
|
+
declare const RETRY_DELAY = 1000;
|
|
3030
|
+
/**
|
|
3031
|
+
* Interface do serviço de registro
|
|
3032
|
+
*/
|
|
3033
|
+
interface IComponentRegistry {
|
|
3034
|
+
/**
|
|
3035
|
+
* Registra um novo componente
|
|
3036
|
+
*/
|
|
3037
|
+
register<T>(type: FieldControlType, factory: () => Promise<Type<T>>): void;
|
|
3038
|
+
/**
|
|
3039
|
+
* Obtém um componente registrado
|
|
3040
|
+
*/
|
|
3041
|
+
getComponent<T>(type: FieldControlType): Promise<Type<T> | null>;
|
|
3042
|
+
/**
|
|
3043
|
+
* Verifica se um tipo está registrado
|
|
3044
|
+
*/
|
|
3045
|
+
isRegistered(type: FieldControlType): boolean;
|
|
3046
|
+
/**
|
|
3047
|
+
* Lista tipos registrados
|
|
3048
|
+
*/
|
|
3049
|
+
getRegisteredTypes(): FieldControlType[];
|
|
3050
|
+
}
|
|
3051
|
+
/**
|
|
3052
|
+
* Resultado de carregamento de componente
|
|
3053
|
+
*/
|
|
3054
|
+
interface ComponentLoadResult<T = any> {
|
|
3055
|
+
/** Componente carregado */
|
|
3056
|
+
component: Type<T> | null;
|
|
3057
|
+
/** Sucesso no carregamento */
|
|
3058
|
+
success: boolean;
|
|
3059
|
+
/** Erro se houver */
|
|
3060
|
+
error?: Error;
|
|
3061
|
+
}
|
|
3062
|
+
/**
|
|
3063
|
+
* Estatísticas do registro
|
|
3064
|
+
*/
|
|
3065
|
+
interface RegistryStats {
|
|
3066
|
+
/** Número de componentes registrados */
|
|
3067
|
+
registeredComponents: number;
|
|
3068
|
+
/** Número de componentes em cache */
|
|
3069
|
+
cachedComponents: number;
|
|
3070
|
+
/** Tipos registrados */
|
|
3071
|
+
registeredTypes: FieldControlType[];
|
|
3072
|
+
}
|
|
3073
|
+
|
|
3074
|
+
declare class ComponentRegistryService implements IComponentRegistry {
|
|
3075
|
+
/**
|
|
3076
|
+
* Registro interno de componentes
|
|
3077
|
+
*/
|
|
3078
|
+
private readonly registry;
|
|
3079
|
+
constructor();
|
|
3080
|
+
/**
|
|
3081
|
+
* Registra um novo componente
|
|
3082
|
+
*/
|
|
3083
|
+
register<T>(type: FieldControlType, factory: () => Promise<_angular_core.Type<T>>): void;
|
|
3084
|
+
/**
|
|
3085
|
+
* Obtém um componente registrado com cache inteligente
|
|
3086
|
+
* Handles both string literals and enum values for backward compatibility
|
|
3087
|
+
*/
|
|
3088
|
+
getComponent<T>(type: FieldControlType | string): Promise<_angular_core.Type<T> | null>;
|
|
3089
|
+
/**
|
|
3090
|
+
* Verifica se um tipo está registrado
|
|
3091
|
+
* Handles both string literals and enum values
|
|
3092
|
+
*/
|
|
3093
|
+
isRegistered(type: FieldControlType | string): boolean;
|
|
3094
|
+
/**
|
|
3095
|
+
* Lista todos os tipos registrados
|
|
3096
|
+
*/
|
|
3097
|
+
getRegisteredTypes(): FieldControlType[];
|
|
3098
|
+
/**
|
|
3099
|
+
* Limpa o cache de todos os componentes
|
|
3100
|
+
*/
|
|
3101
|
+
clearCache(): void;
|
|
3102
|
+
/**
|
|
3103
|
+
* Obtém estatísticas do registro
|
|
3104
|
+
*/
|
|
3105
|
+
getStats(): RegistryStats;
|
|
3106
|
+
/**
|
|
3107
|
+
* Limpa cache de componentes específicos ou todos
|
|
3108
|
+
*/
|
|
3109
|
+
clearCacheForType(type: FieldControlType): void;
|
|
3110
|
+
/**
|
|
3111
|
+
* Remove um componente do registro
|
|
3112
|
+
*/
|
|
3113
|
+
unregister(type: FieldControlType): boolean;
|
|
3114
|
+
/**
|
|
3115
|
+
* Pré-carrega componentes especificados
|
|
3116
|
+
*/
|
|
3117
|
+
preload(types: FieldControlType[]): Promise<ComponentLoadResult[]>;
|
|
3118
|
+
/**
|
|
3119
|
+
* Normalizes control type to handle both string literals and enum values
|
|
3120
|
+
* This provides backward compatibility for existing code using string literals
|
|
3121
|
+
*/
|
|
3122
|
+
private normalizeControlType;
|
|
3123
|
+
/**
|
|
3124
|
+
* Registra componentes Material Design padrão
|
|
3125
|
+
*/
|
|
3126
|
+
private initializeDefaultComponents;
|
|
3127
|
+
/**
|
|
3128
|
+
* Verifica se o cache de um componente é válido
|
|
3129
|
+
*/
|
|
3130
|
+
private isCacheValid;
|
|
3131
|
+
/**
|
|
3132
|
+
* Carrega componente com lógica de retry
|
|
3133
|
+
*/
|
|
3134
|
+
private loadComponentWithRetry;
|
|
3135
|
+
/**
|
|
3136
|
+
* Verifica se está em ambiente de produção
|
|
3137
|
+
*/
|
|
3138
|
+
private isProduction;
|
|
3139
|
+
/**
|
|
3140
|
+
* Utilitário para delay
|
|
3141
|
+
*/
|
|
3142
|
+
private delay;
|
|
3143
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComponentRegistryService, never>;
|
|
3144
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ComponentRegistryService>;
|
|
3145
|
+
}
|
|
3146
|
+
|
|
3147
|
+
/**
|
|
3148
|
+
* @fileoverview Providers para configuração da biblioteca praxis-dynamic-fields
|
|
3149
|
+
*
|
|
3150
|
+
* Providers necessários para o funcionamento correto da biblioteca,
|
|
3151
|
+
* incluindo HttpClient e outros serviços essenciais.
|
|
3152
|
+
*/
|
|
3153
|
+
|
|
3154
|
+
/**
|
|
3155
|
+
* Providers essenciais para praxis-dynamic-fields
|
|
3156
|
+
*
|
|
3157
|
+
* Inclui HttpClient para data loading e outros providers necessários.
|
|
3158
|
+
*
|
|
3159
|
+
* @example
|
|
3160
|
+
* ```typescript
|
|
3161
|
+
* // No app.config.ts ou main.ts
|
|
3162
|
+
* import { providePraxisDynamicFields } from 'praxis-dynamic-fields';
|
|
3163
|
+
*
|
|
3164
|
+
* bootstrapApplication(AppComponent, {
|
|
3165
|
+
* providers: [
|
|
3166
|
+
* ...providePraxisDynamicFields(),
|
|
3167
|
+
* // outros providers...
|
|
3168
|
+
* ]
|
|
3169
|
+
* });
|
|
3170
|
+
* ```
|
|
3171
|
+
*/
|
|
3172
|
+
declare function providePraxisDynamicFields(): (Provider | EnvironmentProviders)[];
|
|
3173
|
+
/**
|
|
3174
|
+
* Providers básicos sem HttpClient (para casos onde já está configurado)
|
|
3175
|
+
*/
|
|
3176
|
+
declare function providePraxisDynamicFieldsCore(): Provider[];
|
|
3177
|
+
|
|
3178
|
+
/**
|
|
3179
|
+
* @fileoverview Custom Error State Matcher for Praxis Dynamic Fields
|
|
3180
|
+
*
|
|
3181
|
+
* Implements configurable error state matching strategies for Material Design
|
|
3182
|
+
* components based on field metadata configuration.
|
|
3183
|
+
*
|
|
3184
|
+
* This resolves CRITICAL ISSUE #8: ErrorStateMatcher not implemented
|
|
3185
|
+
*/
|
|
3186
|
+
|
|
3187
|
+
type ErrorStateStrategy = 'default' | 'showOnDirtyAndInvalid' | 'showOnSubmitted' | 'showImmediately';
|
|
3188
|
+
/**
|
|
3189
|
+
* Custom Error State Matcher that implements configurable strategies
|
|
3190
|
+
* for when to show validation errors in Material components.
|
|
3191
|
+
*/
|
|
3192
|
+
declare class PraxisErrorStateMatcher implements ErrorStateMatcher {
|
|
3193
|
+
private strategy;
|
|
3194
|
+
constructor(strategy?: ErrorStateStrategy);
|
|
3195
|
+
/**
|
|
3196
|
+
* Determines if a control should be considered to be in an error state.
|
|
3197
|
+
*
|
|
3198
|
+
* @param control - The form control to check
|
|
3199
|
+
* @param form - The parent form (if any)
|
|
3200
|
+
* @returns true if the control should show errors
|
|
3201
|
+
*/
|
|
3202
|
+
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean;
|
|
3203
|
+
}
|
|
3204
|
+
/**
|
|
3205
|
+
* Factory function to create ErrorStateMatcher instances based on strategy
|
|
3206
|
+
*/
|
|
3207
|
+
declare function createErrorStateMatcher(strategy?: ErrorStateStrategy): ErrorStateMatcher;
|
|
3208
|
+
/**
|
|
3209
|
+
* Determines the appropriate error state strategy based on component context
|
|
3210
|
+
*/
|
|
3211
|
+
declare function inferErrorStateStrategy(fieldType: string, isLongForm?: boolean, userPreference?: ErrorStateStrategy): ErrorStateStrategy;
|
|
3212
|
+
/**
|
|
3213
|
+
* Helper function to get ErrorStateMatcher for a dynamic field component
|
|
3214
|
+
*/
|
|
3215
|
+
declare function getErrorStateMatcherForField(metadata: any): ErrorStateMatcher;
|
|
3216
|
+
|
|
3217
|
+
/**
|
|
3218
|
+
* @fileoverview Sistema de logging inteligente para componentes dinâmicos
|
|
3219
|
+
*
|
|
3220
|
+
* Reduz spam de logs e permite controle fino sobre o que é exibido no console.
|
|
3221
|
+
* Especialmente útil para evitar logs repetitivos do DynamicFieldLoader.
|
|
3222
|
+
*/
|
|
3223
|
+
type LoggerLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace';
|
|
3224
|
+
interface LoggerConfig {
|
|
3225
|
+
/** Nível mínimo de log */
|
|
3226
|
+
level: LoggerLevel;
|
|
3227
|
+
/** Prefixos para filtrar (ex: ['DynamicFieldLoader']) */
|
|
3228
|
+
enabledPrefixes: string[];
|
|
3229
|
+
/** Prefixos para silenciar */
|
|
3230
|
+
silencedPrefixes: string[];
|
|
3231
|
+
/** Throttling para logs repetitivos */
|
|
3232
|
+
throttleRepetitive: boolean;
|
|
3233
|
+
/** Limite de logs iguais consecutivos */
|
|
3234
|
+
repetitiveThreshold: number;
|
|
3235
|
+
}
|
|
3236
|
+
declare class DynamicFieldsLogger {
|
|
3237
|
+
private config;
|
|
3238
|
+
private repetitiveMessages;
|
|
3239
|
+
/**
|
|
3240
|
+
* Configura o logger globalmente
|
|
3241
|
+
*/
|
|
3242
|
+
configure(config: Partial<LoggerConfig>): void;
|
|
3243
|
+
/**
|
|
3244
|
+
* Habilita debug para um componente específico
|
|
3245
|
+
*/
|
|
3246
|
+
enableDebugFor(prefix: string): void;
|
|
3247
|
+
/**
|
|
3248
|
+
* Silencia logs de um componente específico
|
|
3249
|
+
*/
|
|
3250
|
+
silencePrefix(prefix: string): void;
|
|
3251
|
+
/**
|
|
3252
|
+
* Log inteligente que considera configuração e throttling
|
|
3253
|
+
*/
|
|
3254
|
+
log(level: LoggerLevel, message: string, data?: any): void;
|
|
3255
|
+
/**
|
|
3256
|
+
* Shortcuts para diferentes níveis
|
|
3257
|
+
*/
|
|
3258
|
+
error(message: string, data?: any): void;
|
|
3259
|
+
warn(message: string, data?: any): void;
|
|
3260
|
+
info(message: string, data?: any): void;
|
|
3261
|
+
debug(message: string, data?: any): void;
|
|
3262
|
+
trace(message: string, data?: any): void;
|
|
3263
|
+
/**
|
|
3264
|
+
* Limpa contadores de mensagens repetitivas (útil para testes)
|
|
3265
|
+
*/
|
|
3266
|
+
clearRepetitiveCounters(): void;
|
|
3267
|
+
private shouldLog;
|
|
3268
|
+
private isRepetitive;
|
|
3269
|
+
private cleanup;
|
|
3270
|
+
private getConsoleFn;
|
|
3271
|
+
}
|
|
3272
|
+
declare const logger: DynamicFieldsLogger;
|
|
3273
|
+
declare function configureDynamicFieldsLogger(config: Partial<LoggerConfig>): void;
|
|
3274
|
+
declare function enableDebugForComponent(componentName: string): void;
|
|
3275
|
+
declare function silenceComponent(componentName: string): void;
|
|
3276
|
+
declare const LoggerPresets: {
|
|
3277
|
+
/** Silencia logs repetitivos mas mantém erros e warnings */
|
|
3278
|
+
PRODUCTION: {
|
|
3279
|
+
level: LoggerLevel;
|
|
3280
|
+
silencedPrefixes: string[];
|
|
3281
|
+
throttleRepetitive: boolean;
|
|
3282
|
+
repetitiveThreshold: number;
|
|
3283
|
+
};
|
|
3284
|
+
/** Habilita debug para componentes específicos */
|
|
3285
|
+
DEVELOPMENT: {
|
|
3286
|
+
level: LoggerLevel;
|
|
3287
|
+
silencedPrefixes: string[];
|
|
3288
|
+
throttleRepetitive: boolean;
|
|
3289
|
+
repetitiveThreshold: number;
|
|
3290
|
+
};
|
|
3291
|
+
/** Máximo de logs para debug profundo */
|
|
3292
|
+
VERBOSE: {
|
|
3293
|
+
level: LoggerLevel;
|
|
3294
|
+
enabledPrefixes: never[];
|
|
3295
|
+
silencedPrefixes: never[];
|
|
3296
|
+
throttleRepetitive: boolean;
|
|
3297
|
+
repetitiveThreshold: number;
|
|
3298
|
+
};
|
|
3299
|
+
/** Silencia quase tudo exceto erros críticos */
|
|
3300
|
+
SILENT: {
|
|
3301
|
+
level: LoggerLevel;
|
|
3302
|
+
silencedPrefixes: string[];
|
|
3303
|
+
throttleRepetitive: boolean;
|
|
3304
|
+
repetitiveThreshold: number;
|
|
3305
|
+
};
|
|
3306
|
+
};
|
|
3307
|
+
|
|
3308
|
+
/**
|
|
3309
|
+
* @fileoverview Utilitários para mapear JSON Schema para FieldMetadata
|
|
3310
|
+
*
|
|
3311
|
+
* Converte estruturas JSON Schema/OpenAPI com extensões x-ui
|
|
3312
|
+
* para o formato FieldMetadata esperado pelos componentes dinâmicos.
|
|
3313
|
+
*
|
|
3314
|
+
* Lida com campos que não possuem controlType definido,
|
|
3315
|
+
* inferindo tipos apropriados baseado no schema JSON.
|
|
3316
|
+
*/
|
|
3317
|
+
|
|
3318
|
+
/**
|
|
3319
|
+
* Interface para propriedades JSON Schema básicas
|
|
3320
|
+
*/
|
|
3321
|
+
interface JsonSchemaProperty {
|
|
3322
|
+
type?: string;
|
|
3323
|
+
format?: string;
|
|
3324
|
+
'x-ui'?: {
|
|
3325
|
+
controlType?: string;
|
|
3326
|
+
label?: string;
|
|
3327
|
+
required?: boolean;
|
|
3328
|
+
[key: string]: any;
|
|
3329
|
+
};
|
|
3330
|
+
$ref?: string;
|
|
3331
|
+
properties?: {
|
|
3332
|
+
[key: string]: JsonSchemaProperty;
|
|
3333
|
+
};
|
|
3334
|
+
items?: JsonSchemaProperty;
|
|
3335
|
+
enum?: any[];
|
|
3336
|
+
[key: string]: any;
|
|
3337
|
+
}
|
|
3338
|
+
/**
|
|
3339
|
+
* Interface para schema completo com required fields
|
|
3340
|
+
*/
|
|
3341
|
+
interface JsonSchema {
|
|
3342
|
+
type: string;
|
|
3343
|
+
properties: {
|
|
3344
|
+
[key: string]: JsonSchemaProperty;
|
|
3345
|
+
};
|
|
3346
|
+
required?: string[];
|
|
3347
|
+
[key: string]: any;
|
|
3348
|
+
}
|
|
3349
|
+
/**
|
|
3350
|
+
* Mapeia um JSON Schema completo para array de FieldMetadata
|
|
3351
|
+
*
|
|
3352
|
+
* @param schema - Schema JSON completo
|
|
3353
|
+
* @returns Array de FieldMetadata prontos para renderização
|
|
3354
|
+
*
|
|
3355
|
+
* @example
|
|
3356
|
+
* ```typescript
|
|
3357
|
+
* const schema = {
|
|
3358
|
+
* type: 'object',
|
|
3359
|
+
* properties: {
|
|
3360
|
+
* name: { type: 'string', 'x-ui': { controlType: 'input', label: 'Nome' } },
|
|
3361
|
+
* age: { type: 'integer' }, // Sem x-ui, será inferido
|
|
3362
|
+
* email: { type: 'string', format: 'email' } // Será inferido como email
|
|
3363
|
+
* },
|
|
3364
|
+
* required: ['name']
|
|
3365
|
+
* };
|
|
3366
|
+
*
|
|
3367
|
+
* const fields = mapJsonSchemaToFields(schema);
|
|
3368
|
+
* ```
|
|
3369
|
+
*/
|
|
3370
|
+
declare function mapJsonSchemaToFields(schema: JsonSchema): FieldMetadata[];
|
|
3371
|
+
/**
|
|
3372
|
+
* Mapeia uma propriedade individual para FieldMetadata
|
|
3373
|
+
*
|
|
3374
|
+
* @param fieldName - Nome do campo
|
|
3375
|
+
* @param property - Propriedade do schema
|
|
3376
|
+
* @param requiredFields - Lista de campos obrigatórios
|
|
3377
|
+
* @returns FieldMetadata ou null se não puder ser mapeado
|
|
3378
|
+
*/
|
|
3379
|
+
declare function mapPropertyToFieldMetadata(fieldName: string, property: JsonSchemaProperty, requiredFields?: string[]): FieldMetadata | null;
|
|
3380
|
+
/**
|
|
3381
|
+
* Valida se um schema tem a estrutura mínima necessária
|
|
3382
|
+
*
|
|
3383
|
+
* @param schema - Schema a ser validado
|
|
3384
|
+
* @returns true se válido, false caso contrário
|
|
3385
|
+
*/
|
|
3386
|
+
declare function isValidJsonSchema(schema: any): schema is JsonSchema;
|
|
3387
|
+
/**
|
|
3388
|
+
* Função de conveniência para processar metadata JSON mista
|
|
3389
|
+
*
|
|
3390
|
+
* Aceita tanto arrays de FieldMetadata quanto JSON Schema,
|
|
3391
|
+
* normalizando tudo para FieldMetadata[]
|
|
3392
|
+
*
|
|
3393
|
+
* @param input - Array de FieldMetadata ou JsonSchema
|
|
3394
|
+
* @returns Array normalizado de FieldMetadata
|
|
3395
|
+
*/
|
|
3396
|
+
declare function normalizeFormMetadata(input: FieldMetadata[] | JsonSchema): FieldMetadata[];
|
|
3397
|
+
|
|
3398
|
+
export { ActionResolverService, CACHE_TTL, ColorInputComponent, ComponentPreloaderService, ComponentRegistryService, ConfirmDialogComponent, DateInputComponent, DateUtilsService, DatetimeLocalInputComponent, DynamicFieldLoaderDirective, EmailInputComponent, KeyboardShortcutService, LoggerPresets, MAX_LOAD_ATTEMPTS, MaterialAsyncSelectComponent, MaterialAutocompleteComponent, MaterialButtonComponent, MaterialButtonToggleComponent, MaterialCheckboxGroupComponent, MaterialChipsComponent, MaterialColorPickerComponent, MaterialCpfCnpjInputComponent, MaterialCurrencyComponent, MaterialDateRangeComponent, MaterialDatepickerComponent, MaterialFileUploadComponent, MaterialMultiSelectComponent, MaterialMultiSelectTreeComponent, MaterialPriceRangeComponent, MaterialRadioGroupComponent, MaterialRatingComponent, MaterialSearchableSelectComponent, MaterialSelectComponent, MaterialSelectionListComponent, MaterialSlideToggleComponent, MaterialSliderComponent, MaterialTextareaComponent, MaterialTimepickerComponent, MaterialTransferListComponent, MaterialTreeSelectComponent, MonthInputComponent, NumberInputComponent, OptionStore, PDX_COLOR_INPUT_COMPONENT_METADATA, PDX_COLOR_PICKER_COMPONENT_METADATA, PDX_DATETIME_LOCAL_INPUT_COMPONENT_METADATA, PDX_DATE_INPUT_COMPONENT_METADATA, PDX_EMAIL_INPUT_COMPONENT_METADATA, PDX_FIELD_SHELL_COMPONENT_METADATA, PDX_MATERIAL_BUTTON_COMPONENT_METADATA, PDX_MATERIAL_BUTTON_TOGGLE_COMPONENT_METADATA, PDX_MATERIAL_CHECKBOX_GROUP_COMPONENT_METADATA, PDX_MATERIAL_CHIPS_COMPONENT_METADATA, PDX_MATERIAL_COLORPICKER_COMPONENT_METADATA, PDX_MATERIAL_CPF_CNPJ_INPUT_COMPONENT_METADATA, PDX_MATERIAL_CURRENCY_COMPONENT_METADATA, PDX_MATERIAL_DATEPICKER_COMPONENT_METADATA, PDX_MATERIAL_DATE_RANGE_COMPONENT_METADATA, PDX_MATERIAL_FILE_UPLOAD_COMPONENT_METADATA, PDX_MATERIAL_MULTI_SELECT_COMPONENT_METADATA, PDX_MATERIAL_MULTI_SELECT_TREE_COMPONENT_METADATA, PDX_MATERIAL_PRICE_RANGE_COMPONENT_METADATA, PDX_MATERIAL_RADIO_GROUP_COMPONENT_METADATA, PDX_MATERIAL_RANGE_SLIDER_COMPONENT_METADATA, PDX_MATERIAL_RATING_COMPONENT_METADATA, PDX_MATERIAL_SEARCHABLE_SELECT_COMPONENT_METADATA, PDX_MATERIAL_SELECTION_LIST_COMPONENT_METADATA, PDX_MATERIAL_SELECT_COMPONENT_METADATA, PDX_MATERIAL_SLIDER_COMPONENT_METADATA, PDX_MATERIAL_TEXTAREA_COMPONENT_METADATA, PDX_MATERIAL_TIMEPICKER_COMPONENT_METADATA, PDX_MATERIAL_TIME_RANGE_COMPONENT_METADATA, PDX_MATERIAL_TRANSFER_LIST_COMPONENT_METADATA, PDX_MATERIAL_TREE_SELECT_COMPONENT_METADATA, PDX_MONTH_INPUT_COMPONENT_METADATA, PDX_NUMBER_INPUT_COMPONENT_METADATA, PDX_PASSWORD_INPUT_COMPONENT_METADATA, PDX_PHONE_INPUT_COMPONENT_METADATA, PDX_PRELOAD_STATUS_COMPONENT_METADATA, PDX_SEARCH_INPUT_COMPONENT_METADATA, PDX_TEXT_INPUT_COMPONENT_METADATA, PDX_TIME_INPUT_COMPONENT_METADATA, PDX_URL_INPUT_COMPONENT_METADATA, PDX_WEEK_INPUT_COMPONENT_METADATA, PDX_YEAR_INPUT_COMPONENT_METADATA, PasswordInputComponent, PdxColorPickerComponent, PdxMaterialRangeSliderComponent, PdxMaterialTimeRangeComponent, PdxYearInputComponent, PhoneInputComponent, PraxisErrorStateMatcher, PreloadStatusComponent, RETRY_DELAY, SearchInputComponent, SimpleBaseButtonComponent, SimpleBaseInputComponent, SimpleBaseSelectComponent, TextInputComponent, TimeInputComponent, UrlInputComponent, WeekInputComponent, configureDynamicFieldsLogger, createErrorStateMatcher, enableDebugForComponent, getErrorStateMatcherForField, inferErrorStateStrategy, initializeComponentSystem, initializeComponentSystemSync, isBaseDynamicFieldComponent, isLoadingCapableComponent, isValidJsonSchema, isValueBasedComponent, logger, mapJsonSchemaToFields, mapPropertyToFieldMetadata, normalizeFormMetadata, providePraxisDynamicFields, providePraxisDynamicFieldsCore, silenceComponent };
|
|
3399
|
+
export type { ActionContext, ActionHandler, ActionResult, BaseDynamicFieldComponent, BaseValidationConfig, ComponentLifecycleEvent, ComponentLoadResult, ComponentRegistration, ConfirmDialogData, ErrorStateStrategy, GradientSettings, IComponentRegistry, JsonSchema, JsonSchemaProperty, LoggerConfig, LoggerLevel, OptionSource, PaletteSettings, PopupSettings, PreloadStatus, RatingIconState, RegistryStats, SelectOption, ShortcutHandler, ShortcutInfo, SimpleSelectMetadata, TimeRangeValue, ValueChangeOptions };
|