@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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"praxisui-dynamic-fields.mjs","sources":["../../../projects/praxis-dynamic-fields/src/lib/base/base-dynamic-field-component.interface.ts","../../../projects/praxis-dynamic-fields/src/lib/base/simple-base-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/base/simple-base-button.component.ts","../../../projects/praxis-dynamic-fields/src/lib/utils/error-state-matcher.ts","../../../projects/praxis-dynamic-fields/src/lib/base/simple-base-select.component.ts","../../../projects/praxis-dynamic-fields/src/lib/base/option-store.ts","../../../projects/praxis-dynamic-fields/src/lib/services/component-registry/component-registry.interface.ts","../../../projects/praxis-dynamic-fields/src/lib/utils/field-state.util.ts","../../../projects/praxis-dynamic-fields/src/lib/components/text-input/text-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/email-input/email-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/password-input/password-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/color-input/color-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/date-input/date-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-datepicker/material-datepicker.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-date-range/material-date-range.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/datetime-local-input/datetime-local-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/month-input/month-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/number-input/number-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-currency/material-currency.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-cpf-cnpj-input/material-cpf-cnpj-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-price-range/material-price-range.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-range-slider/material-range-slider.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-range-slider/material-range-slider.component.html","../../../projects/praxis-dynamic-fields/src/lib/components/search-input/search-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/phone-input/phone-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/time-input/time-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-timepicker/material-timepicker.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/url-input/url-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/week-input/week-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-textarea/material-textarea.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-textarea/material-textarea.component.html","../../../projects/praxis-dynamic-fields/src/lib/components/material-select/material-select.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-multi-select/material-multi-select.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-multi-select-tree/material-multi-select-tree.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-tree-select/material-tree-select.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-file-upload/material-file-upload.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-searchable-select/material-searchable-select.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-autocomplete/material-autocomplete.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-async-select/material-async-select.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-radio-group/material-radio-group.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-checkbox-group/material-checkbox-group.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-chips/material-chips.component.ts","../../../projects/praxis-dynamic-fields/src/lib/services/action-resolver.service.ts","../../../projects/praxis-dynamic-fields/src/lib/services/keyboard-shortcut.service.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-button/material-button.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-button/material-button.component.html","../../../projects/praxis-dynamic-fields/src/lib/components/material-button-toggle/material-button-toggle.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-slide-toggle/material-slide-toggle.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-slider/material-slider.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-selection-list/material-selection-list.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-transfer-list/material-transfer-list.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/pdx-year-input/pdx-year-input.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/pdx-material-time-range/pdx-material-time-range.component.ts","../../../projects/praxis-dynamic-fields/src/lib/services/component-registry/component-registry.service.ts","../../../projects/praxis-dynamic-fields/src/lib/utils/logger.ts","../../../projects/praxis-dynamic-fields/src/lib/utils/format-display.util.ts","../../../projects/praxis-dynamic-fields/src/lib/components/field-shell/field-shell.component.ts","../../../projects/praxis-dynamic-fields/src/lib/directives/dynamic-field-loader.directive.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-button/confirm-dialog.component.ts","../../../projects/praxis-dynamic-fields/src/lib/services/component-preloader.service.ts","../../../projects/praxis-dynamic-fields/src/lib/components/preload-status/preload-status.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-colorpicker/material-colorpicker.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-rating/material-rating.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/color-picker/pdx-color-picker.component.ts","../../../projects/praxis-dynamic-fields/src/lib/components/text-input/text-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/number-input/number-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-select/material-select.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/color-input/color-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/date-input/date-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/datetime-local-input/datetime-local-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/email-input/email-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-datepicker/material-datepicker.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-date-range/material-date-range.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-currency/material-currency.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-textarea/material-textarea.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-slider/material-slider.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-timepicker/material-timepicker.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-button/material-button.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-button-toggle/material-button-toggle.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-checkbox-group/material-checkbox-group.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-chips/material-chips.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-colorpicker/material-colorpicker.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-rating/material-rating.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/color-picker/pdx-color-picker.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-cpf-cnpj-input/material-cpf-cnpj-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-file-upload/material-file-upload.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-multi-select/material-multi-select.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-multi-select-tree/material-multi-select-tree.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-radio-group/material-radio-group.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-searchable-select/material-searchable-select.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-selection-list/material-selection-list.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-transfer-list/material-transfer-list.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-tree-select/material-tree-select.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-price-range/material-price-range.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/material-range-slider/material-range-slider.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/month-input/month-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/password-input/password-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/phone-input/phone-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/preload-status/preload-status.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/search-input/search-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/time-input/time-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/url-input/url-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/week-input/week-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/pdx-material-time-range/pdx-material-time-range.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/pdx-year-input/pdx-year-input.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/components/field-shell/field-shell.metadata.ts","../../../projects/praxis-dynamic-fields/src/lib/services/date-utils.service.ts","../../../projects/praxis-dynamic-fields/src/lib/providers.ts","../../../projects/praxis-dynamic-fields/src/lib/utils/json-schema-mapper.ts","../../../projects/praxis-dynamic-fields/src/public-api.ts","../../../projects/praxis-dynamic-fields/src/praxisui-dynamic-fields.ts"],"sourcesContent":["/**\n * @fileoverview Interface base para todos os componentes de campos dinâmicos\n *\n * Define o contrato comum que todos os componentes dinâmicos devem implementar\n * para garantir compatibilidade com o DynamicFieldLoaderDirective e outros\n * serviços do sistema.\n */\n\nimport { WritableSignal } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { Observable } from 'rxjs';\n\nimport { ComponentMetadata } from '@praxisui/core';\n\n// =============================================================================\n// INTERFACES DE SUPORTE\n// =============================================================================\n\n/**\n * Eventos de lifecycle que os componentes podem emitir\n */\nexport interface ComponentLifecycleEvent {\n phase: 'init' | 'afterInit' | 'change' | 'destroy';\n timestamp: number;\n componentId: string;\n metadata?: any;\n}\n\n/**\n * Opções para métodos de controle de valor\n */\nexport interface ValueChangeOptions {\n emitEvent?: boolean;\n updateUI?: boolean;\n}\n\n// =============================================================================\n// INTERFACE PRINCIPAL\n// =============================================================================\n\n/**\n * Interface base que todos os componentes de campos dinâmicos devem implementar.\n *\n * Esta interface define o contrato mínimo necessário para que um componente\n * seja compatível com o sistema de renderização dinâmica do Praxis.\n *\n * ## Responsabilidades Principais\n *\n * - Gerenciar metadata do componente através de signals\n * - Integrar com Angular Reactive Forms\n * - Fornecer controles de foco e blur\n * - Implementar lifecycle hooks customizados\n * - Manter identificação única do componente\n *\n * ## Implementação\n *\n * Componentes podem implementar esta interface diretamente ou herdar de:\n * - SimpleBaseInputComponent (para campos de entrada)\n * - SimpleBaseButtonComponent (para ações/botões)\n */\nexport interface BaseDynamicFieldComponent {\n // =============================================================================\n // PROPRIEDADES OBRIGATÓRIAS\n // =============================================================================\n\n /**\n * Metadata do componente que define sua configuração e comportamento.\n *\n * Contém informações como label, tipo de controle, validações,\n * propriedades visuais e outras configurações específicas.\n */\n readonly metadata: WritableSignal<ComponentMetadata | null>;\n\n /**\n * ID único do componente para identificação e debugging.\n *\n * Gerado automaticamente durante a inicialização e usado\n * para logging, testes e identificação em runtime.\n */\n readonly componentId: WritableSignal<string>;\n\n // =============================================================================\n // PROPRIEDADES OPCIONAIS\n // =============================================================================\n\n /**\n * FormControl associado ao componente para integração com Angular Reactive Forms.\n *\n * Opcional porque nem todos os componentes precisam de FormControl\n * (ex: botões, labels, componentes de exibição).\n */\n readonly formControl?: WritableSignal<AbstractControl | null>;\n\n /**\n * Label textual exibido para o usuário, quando aplicável.\n *\n * Útil para componentes que apresentam uma descrição direta do campo\n * como inputs e seletores. Implementação opcional.\n */\n label?: string;\n\n /**\n * Observable de eventos de lifecycle do componente.\n *\n * Permite monitorar o ciclo de vida do componente externamente\n * para debugging, analytics ou integração com outros sistemas.\n */\n readonly lifecycleEvents$?: Observable<ComponentLifecycleEvent | null>;\n\n // =============================================================================\n // MÉTODOS OBRIGATÓRIOS\n // =============================================================================\n\n /**\n * Foca no elemento principal do componente.\n *\n * Deve focar no input, botão ou elemento interativo principal.\n * Implementação deve ser robusta e não falhar se elemento não existir.\n */\n focus(): void;\n\n /**\n * Remove o foco do elemento principal do componente.\n *\n * Útil para controle programático de foco e navegação por teclado.\n */\n blur(): void;\n\n // =============================================================================\n // MÉTODOS OPCIONAIS - METADATA\n // =============================================================================\n\n /**\n * Define os metadados de entrada do componente.\n *\n * Permite que o componente ajuste propriedades derivadas (como label\n * e placeholders) antes da configuração padrão.\n *\n * @param metadata Metadados do campo\n */\n setInputMetadata?(metadata: ComponentMetadata): void;\n\n // =============================================================================\n // MÉTODOS OPCIONAIS - FORM CONTROL\n // =============================================================================\n\n /**\n * Injeta um FormControl externo a ser utilizado como fonte de verdade.\n *\n * Componentes que recebem este controle devem utilizá-lo diretamente,\n * sem sincronizações manuais com controles internos.\n */\n setExternalControl?(control: AbstractControl): void;\n\n // =============================================================================\n // MÉTODOS OPCIONAIS - LIFECYCLE\n // =============================================================================\n\n /**\n * Hook chamado após a inicialização completa do componente.\n *\n * Executado depois que metadata e formControl foram configurados.\n * Ideal para configurações específicas do componente.\n */\n onComponentInit?(): void;\n\n /**\n * Hook chamado antes da destruição do componente.\n *\n * Usado para limpeza de recursos, cancelamento de subscriptions,\n * ou salvamento de estado.\n */\n onComponentDestroy?(): void;\n\n // =============================================================================\n // MÉTODOS OPCIONAIS - CONTROLE DE VALOR (para componentes com FormControl)\n // =============================================================================\n\n /**\n * Define o valor do campo programaticamente.\n *\n * Implementação opcional para componentes que gerenciam valores.\n * Deve atualizar tanto o FormControl quanto o estado interno.\n */\n setValue?(value: any, options?: ValueChangeOptions): void;\n\n /**\n * Obtém o valor atual do campo.\n *\n * @returns Valor atual ou null se não aplicável\n */\n getValue?(): any;\n\n /**\n * Marca o componente como tocado (touched).\n *\n * Usado para controle de validação e exibição de mensagens de erro.\n */\n markAsTouched?(): void;\n\n /**\n * Marca o componente como modificado (dirty).\n *\n * Indica que o valor foi alterado pelo usuário.\n */\n markAsDirty?(): void;\n\n // =============================================================================\n // MÉTODOS OPCIONAIS - ESTADO E CONTROLE\n // =============================================================================\n\n /**\n * Define o estado de loading do componente.\n *\n * Útil para botões e componentes que executam ações assíncronas.\n */\n setLoading?(loading: boolean): void;\n\n /**\n * Define o estado de desabilitado do componente.\n */\n setDisabled?(disabled: boolean): void;\n\n /**\n * Força a validação do componente.\n *\n * @returns Promise com erros de validação ou null se válido\n */\n validateField?(): Promise<any>;\n\n /**\n * Reseta o componente para seu estado inicial.\n */\n resetField?(): void;\n}\n\n// =============================================================================\n// TYPES UTILITÁRIOS\n// =============================================================================\n\n/**\n * Type guard para verificar se um objeto implementa BaseDynamicFieldComponent\n */\nexport function isBaseDynamicFieldComponent(\n obj: any,\n): obj is BaseDynamicFieldComponent {\n return (\n obj &&\n typeof obj === 'object' &&\n 'metadata' in obj &&\n 'componentId' in obj &&\n typeof obj.focus === 'function' &&\n typeof obj.blur === 'function' &&\n typeof obj.metadata === 'function' &&\n typeof obj.componentId === 'function'\n );\n}\n\n/**\n * Type guard para verificar se componente suporta valores (tem FormControl)\n */\nexport function isValueBasedComponent(\n component: BaseDynamicFieldComponent,\n): component is BaseDynamicFieldComponent & {\n formControl: WritableSignal<AbstractControl | null>;\n} {\n return 'formControl' in component && component.formControl !== undefined;\n}\n\n/**\n * Type guard para verificar se componente suporta loading\n */\nexport function isLoadingCapableComponent(\n component: BaseDynamicFieldComponent,\n): component is BaseDynamicFieldComponent & {\n setLoading: (loading: boolean) => void;\n} {\n return typeof (component as any).setLoading === 'function';\n}\n","/**\n * @fileoverview Simple base component for input fields with basic ControlValueAccessor functionality\n *\n * This is a simplified base component that provides:\n * ✅ Basic ControlValueAccessor implementation\n * ✅ FormControl integration\n * ✅ Simple state management with signals\n * ✅ Basic event handling\n * ✅ Minimal logging system\n *\n * The goal is to start simple and gradually move functionality from text-input here.\n */\n\nimport {\n ControlValueAccessor,\n FormControl,\n ValidationErrors,\n Validators,\n ValidatorFn,\n AbstractControl,\n NgControl,\n} from '@angular/forms';\nimport {\n signal,\n computed,\n output,\n inject,\n Input,\n OnInit,\n OnDestroy,\n AfterViewInit,\n ElementRef,\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n Injector,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { ComponentMetadata } from '@praxisui/core';\nimport {\n getTextTransformer,\n isCssTextTransform,\n TextTransformName,\n} from '@praxisui/core';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n BaseDynamicFieldComponent,\n ComponentLifecycleEvent,\n ValueChangeOptions,\n} from './base-dynamic-field-component.interface';\n\n// =============================================================================\n// BASIC INTERFACES\n// =============================================================================\n\ninterface BasicComponentState {\n initialized: boolean;\n focused: boolean;\n disabled: boolean;\n touched: boolean;\n dirty: boolean;\n}\n\ninterface BasicFieldState {\n value: any;\n valid: boolean;\n errors: ValidationErrors | null;\n}\n\nexport interface BaseValidationConfig {\n required?: boolean;\n minLength?: number;\n maxLength?: number;\n pattern?: string | RegExp;\n customValidator?: (value: any) => string | null;\n messages?: {\n required?: string;\n minlength?: string;\n maxlength?: string;\n pattern?: string;\n min?: string;\n max?: string;\n email?: string;\n url?: string;\n matchField?: string;\n unique?: string;\n requiredTrue?: string;\n fileType?: string;\n maxFileSize?: string;\n minWords?: string;\n conditionalValidation?: string;\n custom?: string;\n };\n validateOnBlur?: boolean;\n debounceTime?: number;\n}\n\ntype LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error';\n\n// =============================================================================\n// SIMPLE BASE INPUT COMPONENT\n// =============================================================================\n\n@Directive()\nexport abstract class SimpleBaseInputComponent\n implements\n ControlValueAccessor,\n OnInit,\n OnDestroy,\n AfterViewInit,\n BaseDynamicFieldComponent\n{\n // =============================================================================\n // DEPENDENCY INJECTION\n // =============================================================================\n\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly elementRef = inject(ElementRef);\n protected readonly cdr = inject(ChangeDetectorRef);\n private readonly injector = inject(Injector);\n private resolvedNgControl: NgControl | null | undefined;\n /** Subject para eventos de lifecycle */\n readonly lifecycleEvents$ =\n new BehaviorSubject<ComponentLifecycleEvent | null>(null);\n /** Native element registered by subclasses */\n protected nativeElement: HTMLElement | null = null;\n\n protected getNgControl(): NgControl | null {\n if (this.resolvedNgControl === undefined) {\n try {\n this.resolvedNgControl = this.injector.get(\n NgControl as any,\n null,\n ) as NgControl | null;\n } catch {\n this.resolvedNgControl = null;\n }\n if (this.resolvedNgControl && !this.resolvedNgControl.valueAccessor) {\n this.resolvedNgControl.valueAccessor = this;\n }\n }\n return this.resolvedNgControl ?? null;\n }\n\n // =============================================================================\n // SIGNALS\n // =============================================================================\n\n /** Metadata do componente */\n readonly metadata = signal<ComponentMetadata | null>(null);\n\n /** Estado básico do componente */\n protected readonly componentState = signal<BasicComponentState>({\n initialized: false,\n focused: false,\n disabled: false,\n touched: false,\n dirty: false,\n });\n\n /** Estado básico do campo */\n protected readonly fieldState = signal<BasicFieldState>({\n value: null,\n valid: true,\n errors: null,\n });\n\n /** ID único do componente */\n readonly componentId = signal<string>('');\n\n /** Rótulo visível do campo */\n @Input() label?: string;\n /** Placeholder opcional */\n @Input() placeholder?: string;\n\n /** Indica se o placeholder deve ser exibido */\n get shouldShowPlaceholder(): boolean {\n const p = (this.placeholder ?? '').trim();\n const l = (this.label ?? '').trim();\n return !!p && p !== l;\n }\n\n // =============================================================================\n // FORM CONTROL\n // =============================================================================\n\n readonly internalControl = new FormControl();\n\n /** FormControl signal para interface BaseDynamicFieldComponent */\n readonly formControl = signal<FormControl | null>(null);\n\n /**\n * Define um FormControl externo a ser utilizado como fonte de verdade.\n */\n setExternalControl(control: AbstractControl): void {\n if (control instanceof FormControl) {\n this.formControl.set(control);\n } else {\n // Evitar atribuição incorreta e manter controle interno\n this.log('warn', 'setExternalControl recebeu um AbstractControl não suportado (esperado FormControl)');\n }\n }\n\n /**\n * Retorna o FormControl em uso pelo componente.\n *\n * Quando um controle externo é fornecido, ele tem precedência;\n * caso contrário, o controle interno é utilizado.\n */\n control(): FormControl {\n return this.formControl() ?? this.internalControl;\n }\n\n // ControlValueAccessor callbacks\n protected onChange = (_value: any) => {};\n private onTouched = () => {};\n private syncInProgress = false;\n\n // =============================================================================\n // OUTPUTS\n // =============================================================================\n\n readonly valueChange = output<any>();\n readonly focusChange = output<boolean>();\n readonly nativeBlur = output<FocusEvent>();\n readonly nativeChange = output<Event>();\n\n // =============================================================================\n // COMPUTED PROPERTIES\n // =============================================================================\n\n /** Configuração de validação baseada no metadata */\n protected readonly validationConfig = computed(() => {\n const meta = this.metadata();\n if (!meta) return null;\n\n return {\n required: meta.required,\n minLength: (meta as any).minLength,\n maxLength: (meta as any).maxLength,\n pattern: (meta as any).pattern,\n customValidator: meta.validators?.customValidator,\n messages: {\n required: meta.validators?.requiredMessage || 'Campo obrigatório',\n minlength:\n meta.validators?.minLengthMessage ||\n `Mínimo {requiredLength} caracteres`,\n maxlength:\n meta.validators?.maxLengthMessage ||\n `Máximo {requiredLength} caracteres`,\n pattern: meta.validators?.patternMessage || 'Formato inválido',\n min: meta.validators?.minMessage,\n max: meta.validators?.maxMessage,\n email: (meta.validators as any)?.emailMessage,\n url: (meta.validators as any)?.urlMessage,\n matchField: (meta.validators as any)?.matchFieldMessage,\n unique: (meta.validators as any)?.uniqueMessage,\n requiredTrue: (meta.validators as any)?.requiredTrueMessage,\n fileType: (meta.validators as any)?.fileTypeMessage,\n maxFileSize: (meta.validators as any)?.maxFileSizeMessage,\n minWords: (meta.validators as any)?.minWordsMessage,\n conditionalValidation: (meta.validators as any)?.conditionalMessage,\n custom: 'Valor inválido',\n },\n validateOnBlur: meta.validators?.validationTrigger === 'blur',\n debounceTime: meta.validators?.validationDebounce ?? 300,\n } as BaseValidationConfig;\n });\n\n /** Mensagem de erro atual */\n readonly errorMessage = computed(() => {\n // Priorizar erros do controle pai (NgControl) se existirem\n const ngControl = this.getNgControl();\n const parentErrors = ngControl?.errors as\n | ValidationErrors\n | null\n | undefined;\n const errors = parentErrors ?? this.control().errors;\n const config = this.validationConfig();\n\n if (!errors || !config) return '';\n\n // 1) Se qualquer erro tiver propriedade message (string), priorizar\n for (const key of Object.keys(errors)) {\n const errVal: any = (errors as any)[key];\n if (errVal && typeof errVal.message === 'string' && errVal.message) {\n return errVal.message;\n }\n }\n\n const messages = config.messages || {};\n\n // 2) Mapear chaves conhecidas com mensagens de config\n if (errors['required']) return messages.required || 'Campo obrigatório';\n if (errors['requiredTrue'])\n return messages.requiredTrue || 'Confirmação obrigatória';\n\n if (errors['minlength']) {\n const req = errors['minlength'].requiredLength;\n return (\n messages.minlength?.replace('{requiredLength}', req) ||\n `Mínimo ${req} caracteres`\n );\n }\n if (errors['maxlength']) {\n const req = errors['maxlength'].requiredLength;\n return (\n messages.maxlength?.replace('{requiredLength}', req) ||\n `Máximo ${req} caracteres`\n );\n }\n // Angular Material datepicker uses special error keys; normalize them\n if (errors['min'] || (errors as any)['matDatepickerMin']) {\n return messages.min || 'Valor abaixo do mínimo';\n }\n if (errors['max'] || (errors as any)['matDatepickerMax']) {\n return messages.max || 'Valor acima do máximo';\n }\n if ((errors as any)['matDatepickerParse']) return messages.pattern || 'Formato inválido';\n if (errors['pattern']) return messages.pattern || 'Formato inválido';\n if (errors['email']) return messages.email || 'Email inválido';\n if ((errors as any)['url']) return messages.url || 'URL inválida';\n if ((errors as any)['matchField'])\n return messages.matchField || 'Valores não coincidem';\n if ((errors as any)['unique'])\n return messages.unique || 'Valor já utilizado';\n if ((errors as any)['fileType'])\n return messages.fileType || 'Tipo de arquivo não permitido';\n if ((errors as any)['maxFileSize'])\n return messages.maxFileSize || 'Arquivo excede o tamanho máximo';\n if ((errors as any)['minWords'])\n return messages.minWords || 'Texto com poucas palavras';\n if ((errors as any)['conditionalValidation'])\n return (\n messages.conditionalValidation || 'Regra de validação não atendida'\n );\n\n // 3) Custom fallback\n if ((errors as any)['custom'])\n return messages.custom || (errors as any)['custom'];\n\n // 4) Se houver alguma outra chave, retornar a primeira chave como texto\n const firstKey = Object.keys(errors)[0];\n return typeof (errors as any)[firstKey] === 'string'\n ? (errors as any)[firstKey]\n : 'Valor inválido';\n });\n\n /** Posição/configuração de erro vinda do metadata */\n readonly errorPosition = computed<'bottom' | 'top' | 'tooltip'>(() => {\n const pos = (this.metadata()?.validators as any)?.errorPosition as\n | 'bottom'\n | 'top'\n | 'tooltip'\n | undefined;\n return pos ?? 'bottom';\n });\n\n /** Se deve exibir erros inline (mat-error) */\n readonly showInlineErrors = computed(() => {\n const show = (this.metadata()?.validators as any)?.showInlineErrors;\n return show !== false && this.errorPosition() !== 'tooltip';\n });\n\n /** Tooltip habilitado quando errorPosition === 'tooltip' */\n readonly tooltipEnabled = computed(() => this.errorPosition() === 'tooltip');\n\n /** Posição do tooltip mapeada para Angular Material */\n readonly tooltipPosition = computed<'above' | 'below'>(() => {\n // Mapear preferências: 'top' => 'above', default => 'below'\n const pref = (this.metadata()?.validators as any)?.errorPosition;\n return pref === 'top' ? 'above' : 'below';\n });\n\n /** Gate to control when inline errors may display (debounced for 'change') */\n private readonly errorDisplayReady = signal<boolean>(true);\n private errorDebounceHandle: any = null;\n\n /** Verifica se há erro de validação (respeita validationTrigger/debounce) */\n readonly hasValidationError = computed(() => {\n const componentState = this.componentState();\n const ngControl = this.getNgControl();\n const parentInvalid = !!ngControl?.invalid;\n const errors = (ngControl?.errors as any) ?? this.control().errors;\n const meta = this.metadata();\n const trig = (meta?.validators as any)?.validationTrigger as\n | 'change'\n | 'blur'\n | 'submit'\n | 'immediate'\n | undefined;\n // Respeitar configuração para ocultar erros inline\n if (!this.showInlineErrors()) return false;\n if (!errors) return false;\n if (!(parentInvalid || !!this.control().errors)) return false;\n\n switch (trig) {\n case 'immediate':\n return true;\n case 'blur':\n return componentState.touched;\n case 'submit':\n // Praxis onSubmit marca todos como touched; usamos esse sinal\n return componentState.touched;\n case 'change':\n default:\n return (componentState.dirty || componentState.touched) && this.errorDisplayReady();\n }\n });\n\n /** CSS classes básicas do componente */\n readonly baseCssClasses = computed(() => {\n const state = this.componentState();\n const fieldState = this.fieldState();\n const classes: string[] = [];\n\n // Estados do componente\n if (state.focused) classes.push('pdx-focused');\n if (state.disabled) classes.push('pdx-disabled');\n if (state.touched) classes.push('pdx-touched');\n if (state.dirty) classes.push('pdx-dirty');\n\n // Estados do campo\n if (fieldState.valid) classes.push('pdx-valid');\n if (!fieldState.valid) classes.push('pdx-invalid');\n\n return classes;\n });\n\n /** CSS classes completas do componente (extensível por subclasses) */\n readonly componentCssClasses = computed(() => {\n const baseClasses = this.baseCssClasses();\n const specificClasses = this.getSpecificCssClasses();\n\n return [...baseClasses, ...specificClasses].join(' ');\n });\n\n /** Tipo de input */\n readonly inputType = computed(() => {\n const meta = this.metadata();\n return meta?.inputType || 'text';\n });\n\n /** Aparência Material */\n readonly materialAppearance = computed(() => {\n const meta = this.metadata();\n return meta?.materialDesign?.appearance || 'outline';\n });\n\n /** Cor Material */\n readonly materialColor = computed(() => {\n const meta = this.metadata();\n return meta?.materialDesign?.color || 'primary';\n });\n\n /** Comportamento do float label (auto | always) */\n readonly floatLabelBehavior = computed<'auto' | 'always'>(() => {\n const meta = this.metadata();\n return (meta?.materialDesign?.floatLabel as any) || 'auto';\n });\n\n // =============================================================================\n // LIFECYCLE\n // =============================================================================\n\n constructor() {\n }\n\n ngOnInit(): void {\n this.getNgControl();\n this.componentId.set(this.generateUniqueId());\n if (!this.formControl()) {\n this.formControl.set(this.internalControl);\n }\n this.setupFormControlIntegration();\n this.setupValidators();\n this.componentState.update((state) => ({ ...state, initialized: true }));\n this.emitLifecycleEvent('init');\n this.log('debug', 'Simple base component initialized');\n\n // Chamar hook após inicialização completa\n if (this.onComponentInit) {\n this.onComponentInit();\n }\n this.emitLifecycleEvent('afterInit');\n }\n\n ngAfterViewInit(): void {\n const query = () =>\n this.elementRef.nativeElement.querySelector(\n 'input,textarea,select',\n ) as HTMLElement | null;\n\n let el = query();\n if (el) {\n this.registerInputElement(el);\n this.log('debug', `AfterViewInit: registered native element <${el.tagName.toLowerCase()}>`);\n return;\n }\n\n // Tentar novamente no próximo tick (evita falsos negativos em componentes com render tardio)\n setTimeout(() => {\n el = query();\n if (el) {\n this.registerInputElement(el);\n this.log('debug', `AfterViewInit (deferred): registered native element <${el.tagName.toLowerCase()}>`);\n } else {\n // Rebaixar para debug para evitar ruído em componentes que não possuem elemento nativo direto\n this.log('debug', 'AfterViewInit: no native input element found');\n }\n });\n }\n\n ngOnDestroy(): void {\n this.emitLifecycleEvent('destroy');\n\n // Chamar hook antes da destruição\n if (this.onComponentDestroy) {\n this.onComponentDestroy();\n }\n\n this.log('debug', 'Simple base component destroyed');\n }\n\n // =============================================================================\n // CONTROLVVALUEACCESSOR IMPLEMENTATION\n // =============================================================================\n\n writeValue(value: any): void {\n const control = this.control();\n if (value !== control.value && !this.syncInProgress) {\n this.syncInProgress = true;\n try {\n control.setValue(value, { emitEvent: false });\n this.fieldState.update((state) => ({ ...state, value }));\n this.log('debug', 'Value written from parent', { value });\n } finally {\n this.syncInProgress = false;\n }\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.componentState.update((state) => ({ ...state, disabled: isDisabled }));\n\n const control = this.control();\n if (isDisabled) {\n control.disable({ emitEvent: false });\n } else {\n control.enable({ emitEvent: false });\n }\n\n if (this.nativeElement) {\n if ('disabled' in this.nativeElement) {\n (this.nativeElement as any).disabled = isDisabled;\n } else {\n this.nativeElement.setAttribute('aria-disabled', String(isDisabled));\n }\n }\n }\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n\n handleInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = input.value;\n\n if (!this.syncInProgress) {\n this.syncInProgress = true;\n try {\n this.onChange(value);\n this.valueChange.emit(value);\n this.fieldState.update((state) => ({ ...state, value }));\n this.markAsDirty();\n // Debounce inline error display when validationTrigger === 'change'\n this.applyErrorDebounceOnChange();\n } finally {\n this.syncInProgress = false;\n }\n }\n }\n\n handleFocus(): void {\n this.componentState.update((state) => ({ ...state, focused: true }));\n this.focusChange.emit(true);\n this.log('debug', 'Component focused');\n }\n\n handleBlur(): void {\n this.componentState.update((state) => ({ ...state, focused: false }));\n this.focusChange.emit(false);\n this.onTouched();\n this.markAsTouched();\n this.log('debug', 'Component blurred');\n // For 'change' trigger, allow error display after blur\n this.errorDisplayReady.set(true);\n // Apply configured transformations on blur to preserve IME behavior\n this.applyTransformOnBlur();\n }\n\n // =============================================================================\n // PUBLIC METHODS\n // =============================================================================\n\n /**\n * Retorna a paleta Material quando a cor for 'primary' | 'accent' | 'warn'.\n * Caso contrário, retorna undefined para não aplicar [color].\n */\n public iconPalette(c?: string): 'primary' | 'accent' | 'warn' | undefined {\n const v = (c || '').trim().toLowerCase();\n if (v === 'primary' || v === 'accent' || v === 'warn') return v as any;\n return undefined;\n }\n\n /**\n * Retorna a cor customizada (CSS) quando não for paleta Material.\n * Quando a cor for paleta, retorna null para não conflitar com [color].\n */\n public iconCustomColor(c?: string): string | null {\n if (!c) return null;\n const v = c.trim();\n const lower = v.toLowerCase();\n if (lower === 'primary' || lower === 'accent' || lower === 'warn') return null;\n // Conveniência: aceitar hex sem '#', ex.: \"496ddb\" → \"#496ddb\"\n const hexNoHash = v.replace(/^#/, '');\n if (/^(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(hexNoHash)) {\n return '#' + hexNoHash;\n }\n return v;\n }\n\n /**\n * Define o valor do campo (implementação da interface BaseDynamicFieldComponent)\n */\n setValue(value: any, options?: ValueChangeOptions): void {\n if (this.syncInProgress) return;\n\n const opts = { emitEvent: true, ...options };\n this.syncInProgress = true;\n\n try {\n const control = this.control();\n // Emit to Angular forms when requested so valueChanges fire even when the\n // component isn't acting as the active ValueAccessor (e.g. internal [formControl]).\n control.setValue(value, { emitEvent: !!opts.emitEvent });\n\n // Additionally notify CVA listeners when present\n if (opts.emitEvent) {\n try { this.onChange(value); } catch {}\n this.valueChange.emit(value);\n }\n\n this.fieldState.update((state) => ({ ...state, value }));\n this.markAsDirty();\n } finally {\n this.syncInProgress = false;\n }\n }\n\n /**\n * Obtém o valor do campo\n */\n getValue(): any {\n return this.control().value;\n }\n\n /**\n * Marca o campo como tocado\n */\n markAsTouched(): void {\n this.componentState.update((state) => ({ ...state, touched: true }));\n }\n\n /**\n * Marca o campo como sujo\n */\n markAsDirty(): void {\n this.componentState.update((state) => ({ ...state, dirty: true }));\n }\n\n /**\n * Foca no elemento\n */\n focus(): void {\n const input = this.elementRef.nativeElement.querySelector('input');\n if (input) {\n input.focus();\n }\n }\n\n /**\n * Remove foco do elemento\n */\n blur(): void {\n const input = this.elementRef.nativeElement.querySelector('input');\n if (input) {\n input.blur();\n }\n }\n\n // =============================================================================\n // PROTECTED METHODS - PARA SUBCLASSES\n // =============================================================================\n\n /**\n * Define metadata do componente\n */\n protected setMetadata(metadata: ComponentMetadata): void {\n this.metadata.set(metadata);\n this.label = (metadata as any).label;\n this.placeholder = (metadata as any).placeholder;\n this.setDisabledState(!!metadata.disabled);\n // Reaplica validators quando metadata muda\n this.setupValidators();\n this.applyNativeAttributes();\n this.log('debug', `setMetadata: textTransform='${(metadata as any).textTransform ?? ''}', apply='${(metadata as any).textTransformApply ?? 'displayOnly'}'`);\n const tName = (metadata as any).textTransform;\n if (tName != null && tName !== '' && tName !== 'none') {\n this.log('debug', 'setMetadata: textTransform configured', {\n id: this.componentId(),\n textTransform: (metadata as any).textTransform,\n apply: (metadata as any).textTransformApply,\n });\n }\n if (metadata.disabled !== undefined) {\n this.setDisabledState(metadata.disabled);\n }\n // Atualiza apresentação de erros (inline/tooltip) após mudança de metadata\n this.refreshErrorTooltip();\n // Aplicação imediata de transformação visual funcional quando configurada\n this.applyFunctionalDisplayTransformImmediately();\n this.emitLifecycleEvent('change');\n }\n\n /** Registra elemento nativo e aplica atributos/eventos */\n protected registerInputElement(el: HTMLElement): void {\n this.nativeElement = el;\n this.attachNativeEventHandlers();\n this.applyNativeAttributes();\n this.log('debug', 'registerInputElement: element attached and attributes applied');\n }\n\n /** Aplica atributos e ARIA com base no metadata */\n protected applyNativeAttributes(): void {\n if (!this.nativeElement) return;\n const meta = this.metadata();\n if (!meta) return;\n\n if (meta.name) this.nativeElement.setAttribute('name', meta.name);\n if (meta.id) this.nativeElement.id = meta.id;\n if (this.shouldShowPlaceholder && this.placeholder)\n this.nativeElement.setAttribute('placeholder', this.placeholder);\n else this.nativeElement.removeAttribute('placeholder');\n if (meta.readonly) this.nativeElement.setAttribute('readonly', '');\n if (meta.autocomplete)\n this.nativeElement.setAttribute('autocomplete', meta.autocomplete);\n if (meta.inputMode)\n this.nativeElement.setAttribute('inputmode', meta.inputMode);\n if (meta.spellcheck !== undefined)\n this.nativeElement.setAttribute('spellcheck', String(meta.spellcheck));\n if (meta.tabIndex !== undefined)\n (this.nativeElement as any).tabIndex = meta.tabIndex;\n if (meta.maxLength !== undefined)\n (this.nativeElement as any).maxLength = meta.maxLength;\n if (meta.minLength !== undefined)\n (this.nativeElement as any).minLength = meta.minLength;\n if (meta.textTransform && isCssTextTransform(meta.textTransform as any)) {\n (this.nativeElement as HTMLElement).style.textTransform =\n meta.textTransform as any;\n this.log('debug', `applyNativeAttributes: CSS textTransform='${meta.textTransform}' applied`);\n } else if ((meta as any).textTransform) {\n this.log('debug', `applyNativeAttributes: functional textTransform='${(meta as any).textTransform}' (handled by runtime)`);\n (this.nativeElement as HTMLElement).style.textTransform = '';\n }\n if (meta.ariaLabel)\n this.nativeElement.setAttribute('aria-label', meta.ariaLabel);\n if (meta.ariaDescribedby)\n this.nativeElement.setAttribute('aria-describedby', meta.ariaDescribedby);\n if (meta.ariaLabelledby)\n this.nativeElement.setAttribute('aria-labelledby', meta.ariaLabelledby);\n if (meta.required !== undefined) {\n this.nativeElement.setAttribute(\n 'aria-required',\n meta.required ? 'true' : 'false',\n );\n }\n if (\n meta.dataAttributes &&\n typeof (meta as any).dataAttributes === 'object' &&\n !Array.isArray((meta as any).dataAttributes)\n ) {\n for (const [key, value] of Object.entries(meta.dataAttributes)) {\n this.nativeElement.setAttribute(`data-${key}`, String(value));\n }\n }\n if (meta.autoFocus) {\n this.nativeElement.setAttribute('autofocus', '');\n setTimeout(() => this.nativeElement?.focus());\n }\n }\n\n /** Vincula handlers nativos de eventos */\n private attachNativeEventHandlers(): void {\n if (!this.nativeElement) return;\n const focusHandler = (_event: FocusEvent) => {\n // Restore raw value for editing when using functional display transforms\n this.restoreRawValueForEditing();\n this.handleFocus();\n };\n const blurHandler = (_event: FocusEvent) => {\n this.handleBlur();\n this.nativeBlur.emit(_event);\n };\n const changeHandler = (_event: Event) => {\n this.nativeChange.emit(_event);\n };\n const inputHandler = (event: Event) => this.handleInput(event);\n\n this.nativeElement.addEventListener('focus', focusHandler);\n this.nativeElement.addEventListener('blur', blurHandler);\n this.nativeElement.addEventListener('change', changeHandler);\n this.nativeElement.addEventListener('input', inputHandler);\n\n this.destroyRef.onDestroy(() => {\n this.nativeElement?.removeEventListener('focus', focusHandler);\n this.nativeElement?.removeEventListener('blur', blurHandler);\n this.nativeElement?.removeEventListener('change', changeHandler);\n this.nativeElement?.removeEventListener('input', inputHandler);\n });\n }\n\n /**\n * Força validação do campo\n */\n async validateField(): Promise<ValidationErrors | null> {\n try {\n const control = this.control();\n control.updateValueAndValidity();\n const errors = control.errors;\n\n this.fieldState.update((state) => ({\n ...state,\n errors,\n valid: !errors,\n }));\n\n return errors;\n } catch (error) {\n this.log('error', 'Validation failed', { error });\n return { validationError: { message: 'Validation failed' } };\n }\n }\n\n /**\n * Hook chamado após inicialização - implementação da interface BaseDynamicFieldComponent\n * Subclasses podem override para implementar comportamento específico\n */\n onComponentInit?(): void {\n // Default implementation - subclasses can override\n }\n\n /**\n * Hook chamado antes da destruição - implementação da interface BaseDynamicFieldComponent\n * Subclasses podem override para limpeza específica\n */\n onComponentDestroy?(): void {\n // Default implementation - subclasses can override\n }\n\n /**\n * Define estado de loading - implementação da interface BaseDynamicFieldComponent\n */\n setLoading?(loading: boolean): void {\n // Default implementation - subclasses can override para components com loading\n this.log('debug', `Loading state changed: ${loading}`);\n }\n\n /**\n * Define estado desabilitado - implementação da interface BaseDynamicFieldComponent\n */\n setDisabled?(disabled: boolean): void {\n this.setDisabledState(disabled);\n }\n\n /**\n * Reset do campo - implementação da interface BaseDynamicFieldComponent\n */\n resetField?(): void {\n const meta = this.metadata();\n const defaultValue = meta?.defaultValue ?? null;\n\n this.setValue(defaultValue, { emitEvent: false });\n\n this.componentState.update((state) => ({\n ...state,\n touched: false,\n dirty: false,\n }));\n\n this.fieldState.update((state) => ({\n ...state,\n value: defaultValue,\n valid: true,\n errors: null,\n }));\n\n const control = this.control();\n control.markAsPristine();\n control.markAsUntouched();\n }\n\n /**\n * Retorna classes CSS específicas da subclasse\n * Subclasses devem implementar este método para adicionar suas próprias classes\n */\n protected getSpecificCssClasses(): string[] {\n return []; // Default implementation - subclasses can override\n }\n\n // =============================================================================\n // PRIVATE METHODS\n // =============================================================================\n\n private setupFormControlIntegration(): void {\n const control = this.control();\n\n control.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.fieldState.update((state) => ({ ...state, value }));\n });\n\n control.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((status) => {\n this.fieldState.update((state) => ({\n ...state,\n valid: status === 'VALID',\n errors: control.errors,\n }));\n this.refreshErrorTooltip();\n });\n\n // Sincronizar erros/estado do controle pai apenas quando usando controle interno\n const ngControl = this.getNgControl();\n if (ngControl?.statusChanges && control === this.internalControl) {\n ngControl.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const errs = ngControl?.errors ?? null;\n control.setErrors(errs as any, { emitEvent: false } as any);\n this.fieldState.update((s) => ({\n ...s,\n errors: errs as any,\n valid: !errs,\n }));\n this.refreshErrorTooltip();\n this.cdr.markForCheck();\n });\n }\n }\n\n // Atualiza tooltip/atributos de erro quando erros mudam e quando inline errors estiverem desabilitados\n private refreshErrorTooltip(): void {\n if (!this.nativeElement) return;\n // Só aplica tooltip nativo quando errorPosition === 'tooltip' e não houver MatTooltip no template\n // Força avaliação de tooltipPosition para evitar aviso de membro não utilizado\n void this.tooltipPosition();\n if (!this.tooltipEnabled()) {\n this.nativeElement.removeAttribute('title');\n this.nativeElement.removeAttribute('aria-invalid');\n return;\n }\n const hasErrors = !!(this.getNgControl()?.errors ?? this.control().errors);\n if (hasErrors) {\n const msg = this.errorMessage();\n if (msg) this.nativeElement.setAttribute('title', msg);\n this.nativeElement.setAttribute('aria-invalid', 'true');\n } else {\n this.nativeElement.removeAttribute('title');\n this.nativeElement.removeAttribute('aria-invalid');\n }\n }\n\n private setupValidators(): void {\n const config = this.validationConfig();\n if (config) {\n this.applyValidators(config);\n }\n }\n\n private applyValidators(config: BaseValidationConfig): void {\n const validators: ValidatorFn[] = [];\n\n // Validadores básicos\n if (config.required) validators.push(Validators.required);\n if (config.minLength)\n validators.push(Validators.minLength(config.minLength));\n if (config.maxLength)\n validators.push(Validators.maxLength(config.maxLength));\n if (config.pattern) validators.push(Validators.pattern(config.pattern));\n\n // Validador customizado\n if (config.customValidator) {\n validators.push(this.createCustomValidator(config.customValidator));\n }\n\n const control = this.control();\n control.setValidators(validators);\n control.updateValueAndValidity();\n }\n\n private createCustomValidator(\n validatorFn: (value: any) => string | null,\n ): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const result = validatorFn(control.value);\n return result ? { custom: result } : null;\n };\n }\n\n private generateUniqueId(): string {\n return `pdx-simple-input-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private getTransformApply(): 'displayOnly' | 'saveOnly' | 'both' {\n const meta = this.metadata() as any;\n return (meta?.textTransformApply as any) || 'displayOnly';\n }\n\n private getTransformName(): TextTransformName | undefined {\n const meta = this.metadata() as any;\n return (meta?.textTransform as any) as TextTransformName | undefined;\n }\n\n private getValidationTrigger(): 'change' | 'blur' | 'submit' | 'immediate' | undefined {\n const meta = this.metadata() as any;\n return meta?.validators?.validationTrigger as any;\n }\n\n private getValidationDebounce(): number {\n const meta = this.metadata() as any;\n const n = Number(meta?.validators?.validationDebounce ?? 300);\n return Number.isFinite(n) && n >= 0 ? n : 300;\n }\n\n private applyErrorDebounceOnChange(): void {\n if (this.getValidationTrigger() !== 'change') return;\n const ms = this.getValidationDebounce();\n if (!ms) return;\n this.errorDisplayReady.set(false);\n if (this.errorDebounceHandle) {\n clearTimeout(this.errorDebounceHandle);\n }\n this.errorDebounceHandle = setTimeout(() => {\n this.errorDebounceHandle = null;\n this.errorDisplayReady.set(true);\n this.cdr.markForCheck();\n }, ms);\n }\n\n private applyTransformOnBlur(): void {\n const name = this.getTransformName();\n if (!name || name === 'none') return;\n const apply = this.getTransformApply();\n const transformer = getTextTransformer(name);\n if (!transformer) return;\n\n const control = this.control();\n const rawVal = control.value;\n this.log('debug', `applyTransformOnBlur: name='${name}', apply='${apply}', raw='${rawVal ?? ''}'`);\n \n\n // Save transform first if configured\n if (apply === 'saveOnly' || apply === 'both') {\n const newVal = transformer(rawVal);\n if (newVal !== rawVal && !this.syncInProgress) {\n this.syncInProgress = true;\n try {\n control.setValue(newVal, { emitEvent: true });\n this.onChange(newVal);\n this.valueChange.emit(newVal);\n this.fieldState.update((s) => ({ ...s, value: newVal }));\n this.log('debug', `applyTransformOnBlur(save): transformed='${newVal ?? ''}'`);\n } finally {\n this.syncInProgress = false;\n }\n }\n }\n\n // Display transform for functional transforms (CSS handled by style)\n if ((apply === 'displayOnly' || apply === 'both') && this.nativeElement) {\n if (!isCssTextTransform(name)) {\n const displayVal = transformer(control.value);\n (this.nativeElement as any).value = displayVal ?? '';\n this.log('debug', `applyTransformOnBlur(display): domValue='${displayVal ?? ''}'`);\n }\n }\n }\n\n private restoreRawValueForEditing(): void {\n const name = this.getTransformName();\n if (!name || name === 'none') return;\n const apply = this.getTransformApply();\n if ((apply === 'displayOnly' || apply === 'both') && this.nativeElement) {\n if (!isCssTextTransform(name)) {\n // Restore control's raw value into the input for editing\n const raw = this.control().value ?? '';\n (this.nativeElement as any).value = raw;\n this.log('debug', `restoreRawValueForEditing: restored='${raw}'`);\n }\n }\n }\n\n private applyFunctionalDisplayTransformImmediately(): void {\n if (!this.nativeElement) return;\n const name = this.getTransformName();\n if (!name || name === 'none') return;\n const apply = this.getTransformApply();\n if (!(apply === 'displayOnly' || apply === 'both')) return;\n if (this.componentState().focused) return; // não alterar enquanto editando\n if (isCssTextTransform(name)) return; // CSS já aplicado\n const transformer = getTextTransformer(name);\n if (!transformer) return;\n const val = this.control().value;\n (this.nativeElement as any).value = val == null ? '' : transformer(val);\n this.log('debug', `applyFunctionalDisplayTransformImmediately: name='${name}', domValue='${(this.nativeElement as any).value}'`);\n }\n\n /**\n * Sistema de logging básico\n */\n protected log(level: LogLevel, message: string, data?: any): void {\n if (level === 'error' || level === 'warn') {\n const logEntry = {\n level,\n message: `[${this.componentId()}] ${message}`,\n timestamp: new Date().toISOString(),\n data,\n };\n\n const consoleFn = level === 'error' ? console.error : console.warn;\n consoleFn(logEntry.message, data || '');\n }\n // Para debug/info, só logamos quando habilitado explicitamente em dev\n else if (level === 'debug') {\n const isDev = (() => {\n try {\n return typeof (globalThis as any).ngDevMode !== 'undefined'\n ? !!(globalThis as any).ngDevMode\n : false;\n } catch {\n return false;\n }\n })();\n const debugEnabled = isDev && (\n (globalThis as any).__PRAXIS_DEBUG_FIELDS__ ||\n (globalThis as any).__PRAXIS_DEBUG__\n );\n if (debugEnabled) {\n console.debug(`[${this.componentId()}] ${message}`, data || '');\n }\n }\n }\n\n private emitLifecycleEvent(phase: ComponentLifecycleEvent['phase']): void {\n const event: ComponentLifecycleEvent = {\n phase,\n timestamp: Date.now(),\n componentId: this.componentId(),\n metadata: this.metadata(),\n };\n\n this.lifecycleEvents$.next(event);\n }\n}\n","/**\n * @fileoverview Simple base component for button-type components\n * \n * This is a specialized base component that provides:\n * ✅ Basic button state management\n * ✅ Action execution system\n * ✅ Loading states and feedback\n * ✅ Click handling and debouncing\n * ✅ Material Design properties\n * ✅ CSS classes for button states\n * ✅ Accessibility support\n * \n * Unlike SimpleBaseInputComponent, this is focused on actions, not form values.\n */\n\nimport {\n signal,\n computed,\n output,\n inject,\n OnInit,\n OnDestroy,\n ElementRef,\n ChangeDetectorRef,\n DestroyRef,\n Directive,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { ComponentMetadata } from '@praxisui/core';\nimport { BaseDynamicFieldComponent, ComponentLifecycleEvent } from './base-dynamic-field-component.interface';\nimport { BehaviorSubject } from 'rxjs';\n\n// =============================================================================\n// BASIC INTERFACES FOR BUTTONS\n// =============================================================================\n\ninterface BasicButtonState {\n initialized: boolean;\n loading: boolean;\n disabled: boolean;\n focused: boolean;\n clicked: boolean;\n error: Error | null;\n}\n\ninterface ButtonAction {\n type: 'navigation' | 'external-link' | 'custom' | 'form-action';\n target?: string;\n payload?: any;\n confirmation?: {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n };\n}\n\ninterface ClickMetrics {\n clickCount: number;\n lastClickTime: number;\n debounceTime: number;\n}\n\ntype LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error';\n\n// =============================================================================\n// SIMPLE BASE BUTTON COMPONENT\n// =============================================================================\n\n@Directive()\nexport abstract class SimpleBaseButtonComponent implements OnInit, OnDestroy, BaseDynamicFieldComponent {\n\n // =============================================================================\n // DEPENDENCY INJECTION\n // =============================================================================\n\n protected readonly destroyRef = inject(DestroyRef);\n protected readonly elementRef = inject(ElementRef);\n protected readonly cdr = inject(ChangeDetectorRef);\n protected readonly router = inject(Router);\n protected readonly dialog = inject(MatDialog);\n \n /** Subject para eventos de lifecycle */\n readonly lifecycleEvents$ = new BehaviorSubject<ComponentLifecycleEvent | null>(null);\n\n // =============================================================================\n // SIGNALS\n // =============================================================================\n\n /** Metadata do componente */\n readonly metadata = signal<ComponentMetadata | null>(null);\n\n /** Estado básico do botão */\n protected readonly buttonState = signal<BasicButtonState>({\n initialized: false,\n loading: false,\n disabled: false,\n focused: false,\n clicked: false,\n error: null\n });\n\n /** Ação configurada para o botão */\n protected readonly buttonAction = signal<ButtonAction | null>(null);\n\n /** Métricas de clique */\n private readonly clickMetrics = signal<ClickMetrics>({\n clickCount: 0,\n lastClickTime: 0,\n debounceTime: 300\n });\n\n /** ID único do componente */\n readonly componentId = signal<string>('');\n\n // =============================================================================\n // OUTPUTS\n // =============================================================================\n\n readonly actionExecuted = output<any>();\n readonly click = output<MouseEvent>();\n readonly focusChange = output<boolean>();\n\n // =============================================================================\n // COMPUTED PROPERTIES\n // =============================================================================\n\n /** CSS classes básicas do botão */\n readonly baseButtonCssClasses = computed(() => {\n const state = this.buttonState();\n const classes: string[] = [];\n\n // Estados do botão\n if (state.loading) classes.push('pdx-loading');\n if (state.disabled) classes.push('pdx-disabled');\n if (state.focused) classes.push('pdx-focused');\n if (state.clicked) classes.push('pdx-clicked');\n if (state.error) classes.push('pdx-error');\n\n return classes;\n });\n\n /** CSS classes completas do botão (extensível por subclasses) */\n readonly componentCssClasses = computed(() => {\n const baseClasses = this.baseButtonCssClasses();\n const specificClasses = this.getSpecificCssClasses();\n \n return [...baseClasses, ...specificClasses].join(' ');\n });\n\n /** Tipo de botão Material */\n readonly buttonType = computed(() => {\n const meta = this.metadata();\n return meta?.controlType || 'basic';\n });\n\n /** Aparência Material */\n readonly materialAppearance = computed(() => {\n const meta = this.metadata();\n return meta?.materialDesign?.appearance || 'contained';\n });\n\n /** Cor Material */\n readonly materialColor = computed(() => {\n const meta = this.metadata();\n return meta?.materialDesign?.color || 'primary';\n });\n\n /** Se o botão está desabilitado */\n readonly isDisabled = computed(() => {\n const state = this.buttonState();\n const meta = this.metadata();\n return state.disabled || meta?.disabled || state.loading;\n });\n\n /** Se o botão está em loading */\n readonly isLoading = computed(() => {\n const state = this.buttonState();\n const meta = this.metadata();\n return state.loading || meta?.loading;\n });\n\n /** Texto a ser exibido no botão */\n readonly buttonText = computed(() => {\n const meta = this.metadata();\n const state = this.buttonState();\n \n if (state.loading && meta?.loadingText) {\n return meta.loadingText;\n }\n \n return meta?.label || 'Button';\n });\n\n /** Ícone a ser exibido */\n readonly buttonIcon = computed(() => {\n const meta = this.metadata();\n const state = this.buttonState();\n \n if (state.loading) {\n return null; // Spinner será mostrado\n }\n \n return meta?.icon || meta?.iconName;\n });\n\n // =============================================================================\n // LIFECYCLE\n // =============================================================================\n\n ngOnInit(): void {\n this.componentId.set(this.generateUniqueId());\n this.initializeButtonAction();\n this.buttonState.update(state => ({ ...state, initialized: true }));\n this.emitLifecycleEvent('init');\n this.log('debug', 'Simple base button component initialized');\n \n // Chamar hook após inicialização completa\n if (this.onComponentInit) {\n this.onComponentInit();\n }\n this.emitLifecycleEvent('afterInit');\n }\n\n ngOnDestroy(): void {\n this.emitLifecycleEvent('destroy');\n \n // Chamar hook antes da destruição\n if (this.onComponentDestroy) {\n this.onComponentDestroy();\n }\n \n this.log('debug', 'Simple base button component destroyed');\n }\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n\n async handleClick(event: MouseEvent): Promise<void> {\n const state = this.buttonState();\n \n // Prevenir cliques se desabilitado ou em loading\n if (state.disabled || state.loading) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n // Debounce protection\n if (!this.shouldAllowClick()) {\n return;\n }\n\n try {\n // Marcar como clicado\n this.buttonState.update(s => ({ ...s, clicked: true }));\n this.updateClickMetrics();\n\n // Emitir evento\n this.click.emit(event);\n\n // Executar ação se configurada\n const action = this.buttonAction();\n if (action) {\n await this.executeAction(action);\n }\n\n this.log('debug', 'Button clicked', { action: action?.type });\n\n } catch (error) {\n this.handleError(error as Error);\n } finally {\n // Reset clicked state\n setTimeout(() => {\n this.buttonState.update(s => ({ ...s, clicked: false }));\n }, 150);\n }\n }\n\n handleFocus(): void {\n this.buttonState.update(state => ({ ...state, focused: true }));\n this.focusChange.emit(true);\n this.log('debug', 'Button focused');\n }\n\n handleBlur(): void {\n this.buttonState.update(state => ({ ...state, focused: false }));\n this.focusChange.emit(false);\n this.log('debug', 'Button blurred');\n }\n\n // =============================================================================\n // PUBLIC METHODS\n // =============================================================================\n\n /**\n * Define loading state\n */\n setLoading(loading: boolean): void {\n this.buttonState.update(state => ({ ...state, loading }));\n }\n\n /**\n * Define disabled state\n */\n setDisabled(disabled: boolean): void {\n this.buttonState.update(state => ({ ...state, disabled }));\n }\n\n /**\n * Executa ação programaticamente\n */\n async triggerAction(): Promise<void> {\n const action = this.buttonAction();\n if (action) {\n await this.executeAction(action);\n }\n }\n\n /**\n * Foca no botão\n */\n focus(): void {\n const button = this.elementRef.nativeElement.querySelector('button');\n if (button) {\n button.focus();\n }\n }\n\n /**\n * Remove foco do botão\n */\n blur(): void {\n const button = this.elementRef.nativeElement.querySelector('button');\n if (button) {\n button.blur();\n }\n }\n\n // =============================================================================\n // PROTECTED METHODS - PARA SUBCLASSES\n // =============================================================================\n\n /**\n * Define metadata do componente\n */\n protected setMetadata(metadata: ComponentMetadata): void {\n this.metadata.set(metadata);\n this.initializeButtonAction();\n this.emitLifecycleEvent('change');\n }\n\n /**\n * Retorna classes CSS específicas da subclasse\n */\n protected getSpecificCssClasses(): string[] {\n return []; // Default implementation - subclasses can override\n }\n\n /**\n * Hook chamado após inicialização - implementação da interface BaseDynamicFieldComponent\n * Subclasses podem override para implementar comportamento específico\n */\n onComponentInit?(): void {\n // Default implementation - subclasses can override\n }\n \n /**\n * Hook chamado antes da destruição - implementação da interface BaseDynamicFieldComponent\n * Subclasses podem override para limpeza específica\n */\n onComponentDestroy?(): void {\n // Default implementation - subclasses can override\n }\n\n /**\n * Hook chamado antes da execução de ação - para subclasses implementarem\n */\n protected async onBeforeAction(action: ButtonAction): Promise<boolean> {\n return true; // Default: allow action\n }\n\n /**\n * Hook chamado após execução de ação - para subclasses implementarem\n */\n protected async onAfterAction(action: ButtonAction, result: any): Promise<void> {\n // Default implementation - subclasses can override\n }\n\n // =============================================================================\n // PRIVATE METHODS\n // =============================================================================\n\n private initializeButtonAction(): void {\n const meta = this.metadata();\n if (!meta) return;\n\n let action: ButtonAction | null = null;\n\n // Determinar tipo de ação baseado no metadata\n if (meta.routerLink) {\n action = {\n type: 'navigation',\n target: meta.routerLink\n };\n } else if (meta.link || meta.href) {\n action = {\n type: 'external-link',\n target: meta.link || meta.href\n };\n } else if (meta.action) {\n action = {\n type: 'custom',\n payload: meta.action\n };\n }\n\n // Adicionar confirmação se configurada\n if (action && meta.confirmDialog) {\n action.confirmation = {\n title: meta.confirmDialog.title || 'Confirmar',\n message: meta.confirmDialog.message || 'Tem certeza?',\n confirmLabel: meta.confirmDialog.confirmLabel || 'Confirmar',\n cancelLabel: meta.confirmDialog.cancelLabel || 'Cancelar'\n };\n }\n\n this.buttonAction.set(action);\n }\n\n private async executeAction(action: ButtonAction): Promise<void> {\n // Hook pre-action\n const shouldProceed = await this.onBeforeAction(action);\n if (!shouldProceed) return;\n\n // Mostrar confirmação se necessária\n if (action.confirmation) {\n const confirmed = await this.showConfirmation(action.confirmation);\n if (!confirmed) return;\n }\n\n this.setLoading(true);\n\n try {\n let result: any = null;\n\n switch (action.type) {\n case 'navigation':\n if (action.target) {\n await this.router.navigateByUrl(action.target);\n result = { navigated: true, target: action.target };\n }\n break;\n\n case 'external-link':\n if (action.target) {\n window.open(action.target, '_blank');\n result = { opened: true, target: action.target };\n }\n break;\n\n case 'custom':\n result = await this.executeCustomAction(action.payload);\n break;\n\n case 'form-action':\n result = await this.executeFormAction(action.payload);\n break;\n }\n\n this.actionExecuted.emit(result);\n await this.onAfterAction(action, result);\n\n } finally {\n this.setLoading(false);\n }\n }\n\n private async showConfirmation(confirmation: ButtonAction['confirmation']): Promise<boolean> {\n // Implementação básica - subclasses podem override\n return window.confirm(`${confirmation?.title}\\n\\n${confirmation?.message}`);\n }\n\n private async executeCustomAction(payload: any): Promise<any> {\n // Hook para subclasses implementarem ações customizadas\n this.log('debug', 'Custom action executed', { payload });\n return payload;\n }\n\n private async executeFormAction(payload: any): Promise<any> {\n // Hook para ações relacionadas a formulário\n this.log('debug', 'Form action executed', { payload });\n return payload;\n }\n\n private shouldAllowClick(): boolean {\n const metrics = this.clickMetrics();\n const now = Date.now();\n const timeSinceLastClick = now - metrics.lastClickTime;\n \n return timeSinceLastClick >= metrics.debounceTime;\n }\n\n private updateClickMetrics(): void {\n const current = this.clickMetrics();\n this.clickMetrics.set({\n clickCount: current.clickCount + 1,\n lastClickTime: Date.now(),\n debounceTime: current.debounceTime\n });\n }\n\n private handleError(error: Error): void {\n this.buttonState.update(state => ({ ...state, error, loading: false }));\n this.log('error', 'Button action failed', { error: error.message });\n }\n\n private generateUniqueId(): string {\n return `pdx-simple-button-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Sistema de logging básico\n */\n protected log(level: LogLevel, message: string, data?: any): void {\n if (level === 'error' || level === 'warn') {\n const logEntry = {\n level,\n message: `[${this.componentId()}] ${message}`,\n timestamp: new Date().toISOString(),\n data\n };\n\n const consoleFn = level === 'error' ? console.error : console.warn;\n consoleFn(logEntry.message, data || '');\n }\n // Para debug/info, só logamos em desenvolvimento\n else if (level === 'debug') {\n console.debug(`[${this.componentId()}] ${message}`, data || '');\n }\n }\n \n /**\n * Emite evento de lifecycle\n */\n private emitLifecycleEvent(phase: ComponentLifecycleEvent['phase']): void {\n const event: ComponentLifecycleEvent = {\n phase,\n timestamp: Date.now(),\n componentId: this.componentId(),\n metadata: this.metadata()\n };\n\n this.lifecycleEvents$.next(event);\n }\n}\n","/**\n * @fileoverview Custom Error State Matcher for Praxis Dynamic Fields\n * \n * Implements configurable error state matching strategies for Material Design\n * components based on field metadata configuration.\n * \n * This resolves CRITICAL ISSUE #8: ErrorStateMatcher not implemented\n */\n\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { FormControl, FormGroupDirective, NgForm } from '@angular/forms';\n\n// =============================================================================\n// ERROR STATE MATCHING STRATEGIES\n// =============================================================================\n\nexport type ErrorStateStrategy = \n | 'default' \n | 'showOnDirtyAndInvalid' \n | 'showOnSubmitted' \n | 'showImmediately';\n\n// =============================================================================\n// CUSTOM ERROR STATE MATCHER IMPLEMENTATION\n// =============================================================================\n\n/**\n * Custom Error State Matcher that implements configurable strategies\n * for when to show validation errors in Material components.\n */\nexport class PraxisErrorStateMatcher implements ErrorStateMatcher {\n \n constructor(private strategy: ErrorStateStrategy = 'default') {}\n\n /**\n * Determines if a control should be considered to be in an error state.\n * \n * @param control - The form control to check\n * @param form - The parent form (if any)\n * @returns true if the control should show errors\n */\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n if (!control) {\n return false;\n }\n\n const isInvalid = control.invalid;\n const hasErrors = control.errors !== null;\n\n // Early return if valid or no errors\n if (!isInvalid || !hasErrors) {\n return false;\n }\n\n switch (this.strategy) {\n case 'showImmediately':\n // Show errors as soon as the control becomes invalid\n return true;\n\n case 'showOnDirtyAndInvalid':\n // Show errors only when the field has been modified and is invalid\n return control.dirty && isInvalid;\n\n case 'showOnSubmitted':\n // Show errors only after form submission attempt\n return !!(form && form.submitted && isInvalid);\n\n case 'default':\n default:\n // Material Design default: show when invalid and (dirty or touched)\n return isInvalid && (control.dirty || control.touched);\n }\n }\n}\n\n// =============================================================================\n// ERROR STATE MATCHER FACTORY\n// =============================================================================\n\n/**\n * Factory function to create ErrorStateMatcher instances based on strategy\n */\nexport function createErrorStateMatcher(strategy?: ErrorStateStrategy): ErrorStateMatcher {\n return new PraxisErrorStateMatcher(strategy || 'default');\n}\n\n// =============================================================================\n// UTILITY FUNCTIONS\n// =============================================================================\n\n/**\n * Determines the appropriate error state strategy based on component context\n */\nexport function inferErrorStateStrategy(\n fieldType: string,\n isLongForm: boolean = false,\n userPreference?: ErrorStateStrategy\n): ErrorStateStrategy {\n \n // Use explicit user preference if provided\n if (userPreference) {\n return userPreference;\n }\n\n // Context-based inference\n switch (fieldType) {\n case 'password':\n // Passwords should show errors only after user stops typing\n return 'showOnDirtyAndInvalid';\n \n case 'email':\n case 'tel':\n case 'url':\n // Formatted inputs should show errors after user interaction\n return 'showOnDirtyAndInvalid';\n \n case 'textarea':\n // Long text fields should be less aggressive\n return isLongForm ? 'showOnSubmitted' : 'showOnDirtyAndInvalid';\n \n case 'number':\n case 'date':\n // Structured inputs can show errors immediately for better UX\n return 'default';\n \n default:\n // Conservative default for unknown field types\n return 'default';\n }\n}\n\n// =============================================================================\n// INTEGRATION HELPER\n// =============================================================================\n\n/**\n * Helper function to get ErrorStateMatcher for a dynamic field component\n */\nexport function getErrorStateMatcherForField(metadata: any): ErrorStateMatcher {\n // Prefer explicit per-field strategy when provided\n const explicit = metadata?.errorStateMatcher as ErrorStateStrategy | undefined;\n if (explicit) return createErrorStateMatcher(explicit);\n\n // Derive from validators.validationTrigger when no explicit strategy is set\n const trig = metadata?.validators?.validationTrigger as\n | 'change'\n | 'blur'\n | 'submit'\n | 'immediate'\n | undefined;\n\n switch (trig) {\n case 'immediate':\n return createErrorStateMatcher('showImmediately');\n case 'submit':\n return createErrorStateMatcher('showOnSubmitted');\n case 'change':\n return createErrorStateMatcher('showOnDirtyAndInvalid');\n case 'blur':\n default:\n return createErrorStateMatcher('default');\n }\n}\n","import {\n Directive,\n signal,\n output,\n computed,\n inject,\n viewChild,\n effect,\n} from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ComponentMetadata, GenericCrudService, Page, GlobalConfigService } from '@praxisui/core';\nimport { SimpleBaseInputComponent } from './simple-base-input.component';\nimport { Observable, Subscription } from 'rxjs';\nimport { combineLatest, of } from 'rxjs';\nimport { debounceTime, startWith, take } from 'rxjs/operators';\nimport { MatSelect } from '@angular/material/select';\nimport { getErrorStateMatcherForField } from '../utils/error-state-matcher';\n\n/**\n * Generic option definition for select components.\n */\nexport interface SelectOption<T = any> {\n /** Display label for the option */\n label: string;\n /** Value associated with the option */\n value: T;\n /** Whether the option is disabled */\n disabled?: boolean;\n}\n\n/**\n * Metadata configuration for simple select components.\n */\nexport interface SimpleSelectMetadata<T = any> extends ComponentMetadata {\n /** Available options */\n options?: SelectOption<T>[];\n /** Allow multiple selections */\n multiple?: boolean;\n /** Whether search input should be displayed */\n searchable?: boolean;\n /** Show select all option */\n selectAll?: boolean;\n /** Maximum number of selections allowed */\n maxSelections?: number;\n /**\n * When to load remote options (for async selects)\n * - 'open' (default): first fetch happens when the select is opened\n * - 'init': first fetch happens on component initialization\n * - 'none': do not auto-load; consumer must call retry()/loadMore()\n */\n loadOn?: 'open' | 'init' | 'none';\n /** Backend resource for dynamic options */\n resourcePath?: string;\n /** Additional filter criteria for backend requests */\n filterCriteria?: Record<string, any>;\n /** Key for option label when loading from backend */\n optionLabelKey?: string;\n /** Key for option value when loading from backend */\n optionValueKey?: string;\n /** Placeholder option text when no value is selected */\n emptyOptionText?: string;\n /** Function to display option values */\n displayWith?: (value: any) => string;\n /** Custom compareWith for MatSelect */\n compareWith?: (a: any, b: any) => boolean;\n}\n\n/**\n * Base directive providing common select behaviour. Extends\n * `SimpleBaseInputComponent` and manages option handling, multiple\n * selection, selection change events and helper utilities used by the\n * concrete Material components.\n */\n@Directive()\nexport abstract class SimpleBaseSelectComponent<\n T = any,\n> extends SimpleBaseInputComponent {\n protected readonly matSelectRef = viewChild(MatSelect);\n /** Available options */\n readonly options = signal<SelectOption<T>[]>([]);\n\n /** Whether multiple selection is enabled */\n readonly multiple = signal<boolean>(false);\n\n /** Whether the component should allow searching */\n readonly searchable = signal<boolean>(false);\n\n /** Current search term when `searchable` is enabled */\n readonly searchTerm = signal<string>('');\n\n /** Emits whenever the search term changes */\n readonly searchTermChange = output<string>();\n\n /** Whether a \"select all\" helper should be displayed */\n readonly selectAll = signal<boolean>(false);\n\n /** Maximum number of selections allowed (only applies when multiple=true) */\n readonly maxSelections = signal<number | null>(null);\n\n /** Backend resource path for dynamic option loading */\n readonly resourcePath = signal<string | null>(null);\n /** Criteria applied to backend filtering */\n readonly filterCriteria = signal<Record<string, any>>({});\n /** Field used for option labels when loading from backend */\n readonly optionLabelKey = signal<string>('label');\n /** Field used for option values when loading from backend */\n readonly optionValueKey = signal<string>('value');\n /** Text displayed for an empty option */\n readonly emptyOptionText = signal<string | null>(null);\n /** Current page index when fetching remote options */\n readonly pageIndex = signal(0);\n /** Number of options retrieved per request */\n readonly pageSize = signal(50);\n\n /** Indicates options are being loaded from backend */\n readonly loading = signal<boolean>(false);\n /** Holds error message when option loading fails */\n readonly error = signal<string | null>(null);\n\n private readonly matSelectInitEffect = effect(() => {\n const select = this.matSelectRef();\n if (select && select !== this.matSelect) {\n this.registerMatSelect(select);\n }\n });\n\n /** CRUD service for remote option loading (optional) */\n protected readonly crudService = inject(GenericCrudService as any, {\n optional: true,\n }) as GenericCrudService<any> | null;\n\n /** Emits whenever the selected value(s) change */\n readonly selectionChange = output<T | T[]>();\n\n /** Emits whenever a specific option is selected */\n readonly optionSelected = output<SelectOption<T>>();\n\n /** Emits whenever options are loaded remotely */\n readonly optionsLoaded = output<SelectOption<T>[]>();\n readonly openedChange = output<boolean>();\n\n protected matSelect: MatSelect | null = null;\n\n // Global configuration access (available to subclasses)\n protected readonly global = inject(GlobalConfigService);\n\n // Dependency cascade support (Phase 1)\n private dependencySub: Subscription | null = null;\n private hasLoadedOnce = false;\n\n /** Options filtered according to the current `searchTerm` */\n readonly filteredOptions = computed(() => {\n if (this.resourcePath()) {\n return this.options();\n }\n const term = this.searchTerm().toLowerCase();\n return term\n ? this.options().filter((o) => o.label.toLowerCase().includes(term))\n : this.options();\n });\n\n /**\n * Applies typed metadata to the select component.\n */\n setSelectMetadata(metadata: SimpleSelectMetadata<T>): void {\n // Dev warning when legacy aliases are present\n this.devWarnSelectAliases(metadata, this.constructor?.name);\n this.setMetadata(metadata);\n if (metadata.options) {\n this.options.set(metadata.options);\n }\n const isMultiple = !!metadata.multiple;\n this.multiple.set(isMultiple);\n this.searchable.set(!!metadata.searchable);\n this.selectAll.set(!!metadata.selectAll);\n this.maxSelections.set(metadata.maxSelections ?? null);\n this.emptyOptionText.set(\n isMultiple ? null : (metadata.emptyOptionText ?? null),\n );\n\n const path = metadata.resourcePath;\n if (path) {\n this.resourcePath.set(path);\n this.filterCriteria.set(metadata.filterCriteria ?? {});\n const needLabel = !metadata.optionLabelKey;\n const needValue = !metadata.optionValueKey;\n if (metadata.optionLabelKey) {\n this.optionLabelKey.set(metadata.optionLabelKey);\n }\n if (metadata.optionValueKey) {\n this.optionValueKey.set(metadata.optionValueKey);\n }\n this.configureCrudService(path);\n if (needLabel || needValue) {\n this.loadSchema(needLabel, needValue);\n } else {\n this.loadOptions();\n }\n }\n }\n\n protected override setMetadata(metadata: ComponentMetadata): void {\n const { placeholder, ...rest } = metadata as any;\n super.setMetadata(rest);\n this.placeholder = undefined;\n this.applySelectAttributes();\n }\n\n protected registerMatSelect(select: MatSelect): void {\n this.matSelect = select;\n this.registerInputElement(select._elementRef.nativeElement);\n this.applySelectAttributes();\n select.openedChange\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((v) => this.openedChange.emit(v));\n select.selectionChange\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.selectionChange.emit(event.value as any);\n });\n }\n\n protected applySelectAttributes(): void {\n if (!this.matSelect) return;\n const meta: any = this.metadata();\n if (!meta) return;\n\n if (meta.compareWith) this.matSelect.compareWith = meta.compareWith;\n // MatSelect does not support a displayWith property; formatting should\n // be handled via option labels or mat-select-trigger in templates.\n if (meta.panelClass) this.matSelect.panelClass = meta.panelClass;\n if (meta.disableRipple !== undefined)\n this.matSelect.disableRipple = meta.disableRipple;\n if (meta.disableOptionCentering !== undefined)\n this.matSelect.disableOptionCentering = meta.disableOptionCentering;\n if (meta.tabIndex !== undefined) this.matSelect.tabIndex = meta.tabIndex;\n if (meta.required !== undefined) this.matSelect.required = meta.required;\n if (this.matSelect)\n this.matSelect.errorStateMatcher = getErrorStateMatcherForField(meta);\n if (meta.ariaLabel) this.matSelect.ariaLabel = meta.ariaLabel;\n if (meta.ariaLabelledby)\n this.matSelect.ariaLabelledby = meta.ariaLabelledby;\n }\n\n /** Whether to show the clear button (if enabled in metadata) */\n showClear(): boolean {\n const cfg: any = (this.metadata() as any)?.clearButton;\n if (!cfg || cfg.enabled !== true) return false;\n // Visibility based on current value when showOnlyWhenFilled\n if (cfg.showOnlyWhenFilled) {\n const v = this.control().value as any;\n return Array.isArray(v) ? v.length > 0 : v !== null && v !== undefined && String(v) !== '';\n }\n return true;\n }\n\n /** Clears the selection according to single/multiple mode */\n onClearClick(): void {\n const isMulti = !!(this.metadata() as any)?.multiple;\n this.setValue(isMulti ? [] : null, { emitEvent: true });\n const control = this.control();\n control.markAsDirty();\n control.markAsTouched();\n }\n\n /**\n * Updates the current search term and emits the change event.\n */\n onSearch(term: string): void {\n this.searchTerm.set(term);\n this.searchTermChange.emit(term);\n if (this.resourcePath()) {\n this.loadOptions(this.pageIndex(), term);\n }\n }\n\n /**\n * Applies metadata after the component is initialized by the\n * DynamicFieldLoader, ensuring options and remote configuration are\n * processed when using the component declaratively.\n */\n override onComponentInit(): void {\n // Apply global defaults for page size (remote option pagination)\n try {\n const globalPageSize = this.global.getDynamicFields()?.asyncSelect?.pageSize;\n if (typeof globalPageSize === 'number' && Number.isFinite(globalPageSize)) {\n this.pageSize.set(globalPageSize);\n }\n } catch {}\n const meta = this.metadata();\n if (meta) {\n this.setSelectMetadata(meta as SimpleSelectMetadata<T>);\n }\n // Setup dependency cascade after metadata/control are ready\n this.setupDependencies();\n }\n\n /**\n * Selects the given option. Handles both single and multiple selection\n * modes and emits the proper events.\n */\n selectOption(option: SelectOption<T>): void {\n if (option.disabled) return;\n\n if (this.multiple()) {\n const current = Array.isArray(this.control().value)\n ? [...(this.control().value as any[])]\n : [];\n const exists = current.includes(option.value);\n\n if (exists) {\n // remove if already selected\n const updated = current.filter((v) => v !== option.value);\n this.setValue(updated);\n } else {\n if (this.maxSelections() && current.length >= this.maxSelections()!) {\n return; // respect max selection limit\n }\n current.push(option.value);\n this.setValue(current);\n }\n } else {\n this.setValue(option.value);\n }\n\n this.optionSelected.emit(option);\n this.selectionChange.emit(this.control().value as any);\n }\n\n /** Checks if the provided value is currently selected */\n isSelected(value: T): boolean {\n const current = this.control().value as any;\n return this.multiple()\n ? Array.isArray(current) && current.includes(value)\n : current === value;\n }\n\n /**\n * Toggles selection of all options when `selectAll` is enabled in multiple\n * selection mode.\n */\n toggleSelectAll(): void {\n if (!this.multiple() || !this.selectAll()) return;\n\n const selectable = this.options()\n .filter((o) => !o.disabled)\n .map((o) => o.value);\n const target = selectable.slice(\n 0,\n this.maxSelections() ?? selectable.length,\n );\n\n if (this.isAllSelected()) {\n this.setValue([]);\n } else {\n this.setValue(target);\n }\n\n this.selectionChange.emit(this.control().value as any);\n }\n\n /** Checks whether all options are currently selected */\n isAllSelected(): boolean {\n if (!this.multiple()) return false;\n const current = Array.isArray(this.control().value)\n ? (this.control().value as any[])\n : [];\n const selectable = this.options()\n .filter((o) => !o.disabled)\n .map((o) => o.value);\n const target = selectable.slice(\n 0,\n this.maxSelections() ?? selectable.length,\n );\n return (\n current.length === target.length &&\n target.length > 0 &&\n target.every((v) => current.includes(v))\n );\n }\n\n /** TrackBy function to optimize ngFor over options */\n trackByOption(index: number, option: SelectOption<T>): T {\n return option.value;\n }\n\n /** Adds CSS class hook for select components */\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-simple-select'];\n }\n\n /** Configures the CRUD service with the given resource path */\n protected configureCrudService(path: string): void {\n this.crudService?.configure(path);\n }\n\n /**\n * Loads schema metadata to infer label/value keys when not provided.\n * After resolving the keys, options are fetched from the backend.\n */\n protected loadSchema(resolveLabel: boolean, resolveValue: boolean): void {\n if (!this.crudService) {\n return;\n }\n this.crudService\n .getSchema()\n .pipe(take(1))\n .subscribe({\n next: (fields: any[]) => {\n const names = fields.map((f: any) => f.name);\n if (resolveLabel) {\n if (names.includes('name')) {\n this.optionLabelKey.set('name');\n } else if (names.includes('label')) {\n this.optionLabelKey.set('label');\n } else if (names.length > 1) {\n this.optionLabelKey.set(names[1]);\n } else if (names.length) {\n this.optionLabelKey.set(names[0]);\n }\n }\n if (resolveValue) {\n if (names.includes('id')) {\n this.optionValueKey.set('id');\n } else if (names.length) {\n this.optionValueKey.set(names[0]);\n }\n }\n this.loadOptions();\n },\n error: (err: any) => {\n this.error.set(err.message || 'Error loading schema');\n },\n });\n }\n\n /** Loads options from backend using GenericCrudService */\n protected loadOptions(\n page = 0,\n searchTerm = this.searchTerm(),\n criteria: Record<string, any> = this.filterCriteria(),\n ): void {\n if (!this.crudService || !this.resourcePath()) {\n return;\n }\n\n const filter = { ...criteria };\n if (searchTerm) {\n filter[this.optionLabelKey()] = searchTerm;\n }\n\n this.loading.set(true);\n this.crudService\n .filter(filter, { pageNumber: page, pageSize: this.pageSize() })\n .pipe(take(1))\n .subscribe({\n next: (resp: Page<any>) => {\n const opts = resp.content.map((item: any) => ({\n label: item[this.optionLabelKey()],\n value: item[this.optionValueKey()],\n }));\n this.options.set(opts);\n this.optionsLoaded.emit(opts);\n this.loading.set(false);\n this.error.set(null);\n this.markLoadedOnce();\n },\n error: (err: any) => {\n this.loading.set(false);\n this.error.set(err.message || 'Error loading options');\n },\n });\n }\n\n /** Dev-only warning when legacy alias keys are used instead of canonical ones */\n protected devWarnSelectAliases(meta: any, component?: string): void {\n const isDev = () =>\n typeof (globalThis as any).ngDevMode !== 'undefined'\n ? !!(globalThis as any).ngDevMode\n : true;\n if (!isDev() || !meta) return;\n const issues: string[] = [];\n // legacy label/value keys are handled by core normalizers\n // legacy remote-source key is no longer supported here (handled by core normalizers)\n if (issues.length) {\n try {\n console.warn('[SelectComponent] Legacy alias detected; normalize metadata', {\n field: meta.name,\n controlType: meta.controlType,\n component: component ?? this.constructor?.name,\n issues,\n });\n } catch {}\n }\n }\n\n // ==========================================================================\n // Dependency cascade (Phase 1)\n // ==========================================================================\n\n /** Public API to reload options; overridden by async/searchable variants */\n public reload(reset: boolean): void {\n if (!this.resourcePath()) return;\n // Base select is simple: ignore reset; always load from page 0\n this.pageIndex.set(0);\n this.loadOptions(0, this.searchTerm(), this.filterCriteria());\n }\n\n /** Marks that at least one successful load has happened */\n protected markLoadedOnce(): void {\n this.hasLoadedOnce = true;\n }\n\n protected hasLoaded(): boolean {\n return this.hasLoadedOnce;\n }\n\n /** Setup effect to re-bind dependency observers when FormControl changes */\n private readonly _depEffect = effect(() => {\n // Touch the current external FormControl to register dependency on it\n const _ctrl = this.formControl();\n // Recreate subscriptions when the bound control instance changes\n queueMicrotask(() => this.setupDependencies());\n });\n\n /** (Re)configure dependency observers based on metadata and current FormGroup */\n protected setupDependencies(): void {\n // Teardown previous subscriptions if any\n if (this.dependencySub) {\n try { this.dependencySub.unsubscribe(); } catch {}\n this.dependencySub = null;\n }\n\n const meta: any = this.metadata();\n if (!meta) return;\n // Resolve cascade enablement with global fallback (default true)\n const enable = (meta.enableDependencyCascade as boolean | undefined) ??\n (this.global.getDynamicFields()?.cascade?.enable ?? true);\n const deps: string[] | undefined = meta.dependencyFields;\n const path = this.resourcePath();\n // Only apply for remote selects and when explicitly enabled (default true)\n if (!path || !deps || deps.length === 0 || enable === false) {\n return;\n }\n\n const form = (this.control()?.parent as FormGroup | null) ?? null;\n if (!form) return;\n\n // Collect dependent controls\n const controls: Array<{ name: string; control: FormControl | null }> = deps.map((name) => ({\n name,\n control: (form.get(name) as FormControl) ?? null,\n }));\n const missing = controls.filter((c) => !c.control).map((c) => c.name);\n if (missing.length) {\n try {\n console.warn('[Select] dependency controls not found', {\n field: meta?.name,\n missing,\n });\n } catch {}\n // Continue with those available\n }\n\n const streams = controls\n .filter((c) => !!c.control)\n .map((c) => (c.control as FormControl).valueChanges.pipe(startWith((c.control as FormControl).value)));\n if (!streams.length) return;\n\n const debounceMs: number = Number(\n meta.dependencyDebounceMs ?? this.global.getDynamicFields()?.cascade?.debounceMs ?? 150,\n );\n const valuePathCfg: string | Record<string, string> | undefined = meta.dependencyValuePath;\n const mapCfg: Record<string, any> | undefined = meta.dependencyFilterMap;\n const mergeStrategy: 'merge' | 'replace' = (meta.dependencyMergeStrategy as any) ?? 'merge';\n const loadOnChange: 'respectLoadOn' | 'immediate' | 'manual' =\n (meta.dependencyLoadOnChange as any) ?? (this.global.getDynamicFields()?.cascade?.loadOnChange as any) ?? 'respectLoadOn';\n\n // Subscribe to combined changes\n this.dependencySub = combineLatest(streams)\n .pipe(debounceTime(debounceMs))\n .subscribe((values) => {\n // Build fragment from all deps\n const fragment: Record<string, any> = {};\n\n controls\n .filter((c) => !!c.control)\n .forEach((c, idx) => {\n const raw = values[idx];\n // Determine valuePath for this dep\n let valuePath: string | undefined;\n if (valuePathCfg && typeof valuePathCfg === 'object') {\n valuePath = valuePathCfg[c.name];\n } else if (typeof valuePathCfg === 'string') {\n valuePath = valuePathCfg;\n } else {\n // default: use this component's optionValueKey or 'id'\n valuePath = this.optionValueKey?.() || 'id';\n }\n\n const extracted = this.extractDependencyValue(raw, valuePath);\n\n // Determine key mapping\n const mapEntry = mapCfg?.[c.name] ?? c.name;\n const targetKey = typeof mapEntry === 'string' ? mapEntry : mapEntry?.key ?? c.name;\n\n if (extracted == null || (Array.isArray(extracted) && extracted.length === 0)) {\n // remove mapped key when null/empty\n this.applyDependencyCriteria({ __remove__: targetKey }, mergeStrategy);\n return;\n }\n\n // Support dot-path keys (e.g., 'rota.id')\n const fragRoot: any = {};\n this.setByPath(fragRoot, targetKey, extracted);\n // Shallow merge fragment root-level keys\n Object.keys(fragRoot).forEach((k) => {\n fragment[k] = this.mergeObjectsDeep(fragment[k], fragRoot[k]);\n });\n });\n\n // Apply built fragment\n if (Object.keys(fragment).length > 0) {\n this.applyDependencyCriteria(fragment, mergeStrategy);\n }\n\n // Reset value when configured\n if (meta.resetOnDependentChange) {\n this.setValue(null, { emitEvent: false });\n }\n\n // Trigger reload according to strategy\n if (!this.resourcePath()) return; // safety\n switch (loadOnChange) {\n case 'manual':\n return;\n case 'immediate':\n this.reload(true);\n break;\n case 'respectLoadOn':\n default:\n if (this.hasLoadedOnce) this.reload(true);\n break;\n }\n // Dev log\n try {\n const isDev = typeof (globalThis as any).ngDevMode !== 'undefined' ? !!(globalThis as any).ngDevMode : false;\n if (isDev || (globalThis as any).__PRAXIS_DEBUG_FIELDS__) {\n console.debug('[Select] dependencies changed', {\n field: meta?.name,\n deps,\n fragment,\n mergeStrategy,\n reloaded: loadOnChange === 'immediate' || (loadOnChange === 'respectLoadOn' && this.hasLoadedOnce),\n });\n }\n } catch {}\n });\n }\n\n protected extractDependencyValue(raw: any, path?: string): any {\n if (raw == null) return raw;\n if (Array.isArray(raw)) {\n return raw.map((item) => this.extractDependencyValue(item, path));\n }\n if (typeof raw === 'object') {\n return path ? this.getByPath(raw, path) : this.getByPath(raw, this.optionValueKey?.() || 'id');\n }\n return raw;\n }\n\n protected applyDependencyCriteria(fragment: Record<string, any>, strategy: 'merge' | 'replace' = 'merge'): void {\n const current = { ...(this.filterCriteria() || {}) } as any;\n\n // Handle deletions via special marker { __remove__: 'a.b.c' }\n if ('__remove__' in fragment) {\n const key = (fragment as any)['__remove__'];\n if (typeof key === 'string') {\n this.unsetByPath(current, key);\n }\n this.filterCriteria.set(current);\n return;\n }\n\n const next = strategy === 'merge' ? this.mergeObjectsDeep(current, fragment) : this.replaceMappedKeys(current, fragment);\n this.filterCriteria.set(next);\n }\n\n protected onDependenciesChanged(): void {\n // Base behavior delegates to reload() and respects loadOnChange via setupDependencies\n this.reload(true);\n }\n\n // Helpers: object path ops and merges\n private getByPath(obj: any, dotPath: string): any {\n if (!obj || !dotPath) return undefined;\n return dotPath.split('.').reduce((acc, key) => (acc == null ? acc : acc[key]), obj);\n }\n private setByPath(target: any, dotPath: string, value: any): void {\n const parts = dotPath.split('.');\n let ref = target;\n for (let i = 0; i < parts.length - 1; i++) {\n const p = parts[i];\n if (typeof ref[p] !== 'object' || ref[p] == null) ref[p] = {};\n ref = ref[p];\n }\n ref[parts[parts.length - 1]] = value;\n }\n private unsetByPath(target: any, dotPath: string): void {\n const parts = dotPath.split('.');\n let ref = target;\n for (let i = 0; i < parts.length - 1; i++) {\n const p = parts[i];\n if (typeof ref[p] !== 'object' || ref[p] == null) return;\n ref = ref[p];\n }\n delete ref[parts[parts.length - 1]];\n }\n private mergeObjectsDeep(a: any, b: any): any {\n if (a == null) return this.clone(b);\n if (b == null) return this.clone(a);\n if (Array.isArray(a) || Array.isArray(b) || typeof a !== 'object' || typeof b !== 'object') {\n return this.clone(b); // prefer b for non-objects/arrays\n }\n const out: any = { ...a };\n for (const key of Object.keys(b)) {\n out[key] = key in a ? this.mergeObjectsDeep(a[key], b[key]) : this.clone(b[key]);\n }\n return out;\n }\n private replaceMappedKeys(current: any, fragment: any): any {\n // Replace only keys present in fragment, preserving others\n if (fragment == null || typeof fragment !== 'object') return current;\n const out = { ...current };\n for (const key of Object.keys(fragment)) {\n out[key] = this.clone(fragment[key]);\n }\n return out;\n }\n private clone<T>(v: T): T {\n if (v == null) return v;\n if (typeof v !== 'object') return v;\n try { return JSON.parse(JSON.stringify(v)); } catch { return v; }\n }\n}\n","import { OptionDTO } from '@praxisui/core';\n\nexport type OptionSource = 'byId' | 'page';\n\ninterface StoredOption<ID> {\n value: OptionDTO<ID>;\n source: OptionSource;\n ephemeral: boolean;\n}\n\nexport class OptionStore<ID = string | number> {\n private readonly map = new Map<ID, StoredOption<ID>>();\n private readonly order: ID[] = [];\n readonly loadedPages = new Set<number>();\n\n upsertById(option: OptionDTO<ID>, ephemeral = false): void {\n const id = option.id as ID;\n const existing = this.map.get(id);\n this.map.set(id, { value: option, source: 'byId', ephemeral });\n if (!existing) {\n this.order.unshift(id);\n }\n }\n\n addPage(pageIndex: number, page: OptionDTO<ID>[]): void {\n if (this.loadedPages.has(pageIndex)) return;\n this.loadedPages.add(pageIndex);\n\n for (const opt of page) {\n const id = opt.id as ID;\n const existing = this.map.get(id);\n if (existing) {\n if (existing.source === 'byId') {\n this.map.set(id, {\n value: opt,\n source: 'page',\n ephemeral: existing.ephemeral,\n });\n }\n continue;\n }\n this.map.set(id, { value: opt, source: 'page', ephemeral: false });\n this.order.push(id);\n }\n }\n\n ensureVisible(ids: ID[]): void {\n for (let i = ids.length - 1; i >= 0; i--) {\n const id = ids[i];\n const idx = this.order.indexOf(id);\n if (idx > 0) {\n this.order.splice(idx, 1);\n this.order.unshift(id);\n }\n }\n }\n\n clearPages(): void {\n this.loadedPages.clear();\n for (const id of [...this.order]) {\n const entry = this.map.get(id);\n if (entry && entry.source === 'page') {\n this.map.delete(id);\n const idx = this.order.indexOf(id);\n if (idx > -1) this.order.splice(idx, 1);\n }\n }\n }\n\n get items(): OptionDTO<ID>[] {\n return this.order.map((id) => this.map.get(id)!.value);\n }\n}\n\nexport default OptionStore;\n","/**\n * Interfaces essenciais para o sistema de registro de componentes\n * Versão ultra-simplificada sem metadados redundantes\n */\n\nimport { Type } from '@angular/core';\nimport { FieldControlType } from '@praxisui/core';\n\n// =============================================================================\n// INTERFACES ESSENCIAIS\n// =============================================================================\n\n/**\n * Registro de um componente no sistema com cache inteligente\n */\nexport interface ComponentRegistration<T = any> {\n /** Factory para carregamento lazy */\n factory: () => Promise<Type<T>>;\n \n /** Componente em cache após carregamento */\n cached?: Type<T>;\n \n /** Timestamp do cache para validação TTL */\n cachedAt?: number;\n \n /** Contador de tentativas de carregamento */\n loadAttempts?: number;\n \n /** Último erro de carregamento */\n lastError?: Error;\n}\n\n// Configurações do cache\nexport const CACHE_TTL = 5 * 60 * 1000; // 5 minutos em desenvolvimento\nexport const MAX_LOAD_ATTEMPTS = 3;\nexport const RETRY_DELAY = 1000; // 1 segundo\n\n/**\n * Interface do serviço de registro\n */\nexport interface IComponentRegistry {\n /**\n * Registra um novo componente\n */\n register<T>(\n type: FieldControlType, \n factory: () => Promise<Type<T>>\n ): void;\n \n /**\n * Obtém um componente registrado\n */\n getComponent<T>(type: FieldControlType): Promise<Type<T> | null>;\n \n /**\n * Verifica se um tipo está registrado\n */\n isRegistered(type: FieldControlType): boolean;\n \n /**\n * Lista tipos registrados\n */\n getRegisteredTypes(): FieldControlType[];\n}\n\n// =============================================================================\n// TIPOS AUXILIARES\n// =============================================================================\n\n/**\n * Resultado de carregamento de componente\n */\nexport interface ComponentLoadResult<T = any> {\n /** Componente carregado */\n component: Type<T> | null;\n \n /** Sucesso no carregamento */\n success: boolean;\n \n /** Erro se houver */\n error?: Error;\n}\n\n/**\n * Estatísticas do registro\n */\nexport interface RegistryStats {\n /** Número de componentes registrados */\n registeredComponents: number;\n \n /** Número de componentes em cache */\n cachedComponents: number;\n \n /** Tipos registrados */\n registeredTypes: FieldControlType[];\n}\n","import { FieldMetadata } from '@praxisui/core';\n\nexport interface FieldStateOverrides {\n readonlyMode?: boolean | null;\n disabledMode?: boolean | null;\n presentationMode?: boolean | null;\n visible?: boolean | null;\n}\n\nexport interface EffectiveFieldState {\n readonly: boolean;\n disabled: boolean;\n presentation: boolean;\n visible: boolean;\n}\n\n/**\n * Computes the effective field state from metadata and optional overrides.\n * - readonly: true when readonlyMode OR presentationMode OR metadata.readonly/readOnly\n * - disabled: true when disabledMode OR metadata.disabled\n * - presentation: true when presentationMode\n * - visible: false when overrides.visible === false OR metadata.hidden/formHidden\n */\nexport function computeEffectiveState(\n metadata: FieldMetadata | any | null | undefined,\n overrides: FieldStateOverrides = {},\n): EffectiveFieldState {\n const meta = metadata as any;\n const presentation = overrides.presentationMode === true;\n const readonly =\n overrides.readonlyMode === true ||\n presentation ||\n Boolean(meta?.readonly || meta?.readOnly);\n const disabled =\n overrides.disabledMode === true || Boolean(meta?.disabled === true);\n const metaHidden = Boolean(meta?.hidden === true || meta?.formHidden === true);\n const visible = overrides.visible === false ? false : !metaHidden;\n\n return { readonly, disabled, presentation, visible };\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n Validators,\n ValidatorFn,\n AbstractControl,\n ValidationErrors,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialInputMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n// =============================================================================\n// INTERFACES ESPECÍFICAS DO TEXT-INPUT (herda BaseValidationConfig)\n// =============================================================================\n\n@Component({\n selector: 'pdx-text-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n floatLabel=\"auto\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [type]=\"inputType()\"\n [autocomplete]=\"metadata()?.autocomplete || 'off'\"\n [spellcheck]=\"metadata()?.spellcheck ?? true\"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [maxlength]=\"metadata()?.maxLength || null\"\n [minlength]=\"metadata()?.minLength || null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (showClear()) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"onClearClick()\"\n [disabled]=\"disabledMode || isReadonlyEffective() || presentationMode\"\n [matTooltip]=\"metadata()?.clearButton?.tooltip || null\"\n [attr.aria-label]=\"metadata()?.clearButton?.ariaLabel || 'Limpar'\"\n >\n <mat-icon\n [color]=\"iconPalette(metadata()?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.clearButton?.iconColor)\"\n [praxisIcon]=\"metadata()?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">{{\n metadata()!.hint\n }}</mat-hint>\n }\n\n @if (metadata()?.showCharacterCount && metadata()?.maxLength) {\n <mat-hint align=\"end\">\n {{ (control().value || '').length }} /\n {{ metadata()!.maxLength }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"input\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class TextInputComponent extends SimpleBaseInputComponent {\n // =============================================================================\n // OUTPUTS ESPECÍFICOS\n // =============================================================================\n\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n // =============================================================================\n // COMPUTED PROPERTIES (validação e classes herdadas da base)\n // =============================================================================\n\n // Todas as computed properties (CSS classes, validação, Material Design) estão na base class\n\n // =============================================================================\n // LIFECYCLE\n // =============================================================================\n\n override ngOnInit(): void {\n super.ngOnInit(); // Chama a inicialização da classe base (já inclui setupValidators)\n\n try {\n this.log('debug', 'TextInput initialized');\n } catch (error) {\n this.log('error', 'TextInput initialization failed', { error });\n }\n }\n\n override onComponentInit(): void {\n // Inicialização específica do text-input\n const meta = this.metadata();\n if (meta) {\n // Inicializar valor padrão se definido\n if (meta.defaultValue !== undefined && this.control().value == null) {\n this.control().setValue(meta.defaultValue, { emitEvent: false });\n }\n }\n }\n\n /**\n * Adiciona classes CSS específicas do text-input\n */\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-text-input'];\n }\n\n // =============================================================================\n // EVENT HANDLERS (inherited from base, pode ser customizado se necessário)\n // =============================================================================\n\n // =============================================================================\n // MÉTODOS PÚBLICOS ESPECÍFICOS\n // =============================================================================\n\n /**\n * Reset do campo\n */\n override resetField(): void {\n const meta = this.metadata();\n const defaultValue = meta?.defaultValue ?? null;\n\n this.setValue(defaultValue, { emitEvent: false });\n\n // Reset estados via base class\n this.componentState.update((state) => ({\n ...state,\n touched: false,\n dirty: false,\n }));\n\n this.fieldState.update((state) => ({\n ...state,\n value: defaultValue,\n valid: true,\n errors: null,\n }));\n\n const control = this.control();\n control.markAsPristine();\n control.markAsUntouched();\n }\n\n /**\n * Força validação do campo (override para emitir evento)\n */\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n /**\n * Define metadata e aplica configurações\n */\n setInputMetadata(metadata: MaterialInputMetadata): void {\n this.setMetadata(metadata); // Base class já reaplica validators\n // Reaplicar defaultValue dinamicamente sem recriar componente\n const ctrl = this.control();\n if (\n ctrl && ctrl.pristine && (ctrl.value == null || ctrl.value === '') &&\n metadata.defaultValue !== undefined\n ) {\n ctrl.setValue(metadata.defaultValue, { emitEvent: false });\n }\n }\n\n showClear(): boolean {\n const cfg: any = (this.metadata() as any)?.clearButton;\n if (!cfg || cfg.enabled !== true) return false;\n if (this.disabledMode || this.isReadonlyEffective() || this.presentationMode) return false;\n if (cfg.showOnlyWhenFilled) {\n const v = this.control().value;\n return v !== null && v !== undefined && String(v) !== '';\n }\n return true;\n }\n\n onClearClick(): void {\n // Prefer empty string for text input\n this.setValue('', { emitEvent: true });\n const control = this.control();\n control.markAsDirty();\n control.markAsTouched();\n }\n\n // Material error state matcher derived from metadata configuration\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialEmailInputMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for HTML email inputs.\n *\n * Renders a `<mat-form-field>` containing an `<input type=\"email\">` element\n * with basic validation and hint support. Built on top of the\n * `SimpleBaseInputComponent` to leverage common functionality such as\n * reactive forms integration and error handling.\n */\n@Component({\n selector: 'pdx-email-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [type]=\"inputType()\"\n [autocomplete]=\"metadata()?.autocomplete || 'off'\"\n [spellcheck]=\"metadata()?.spellcheck ?? false\"\n [maxlength]=\"metadata()?.maxLength || null\"\n [minlength]=\"metadata()?.minLength || null\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">{{\n metadata()!.hint\n }}</mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EmailInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"email\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class EmailInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n override ngOnInit(): void {\n this.control().addValidators(Validators.email);\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-email-input'];\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialEmailInputMetadata): void {\n this.setMetadata(metadata);\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialPasswordMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for password fields.\n *\n * Renders a `<mat-form-field>` wrapping an `<input type=\"password\">` element\n * and leverages `SimpleBaseInputComponent` for common functionality such as\n * validation, hint display and reactive forms integration.\n */\n@Component({\n selector: 'pdx-password-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [type]=\"inputType()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.autocomplete]=\"metadata()?.autocomplete || 'off'\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PasswordInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"password\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class PasswordInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-password-input'];\n }\n\n /** Applies typed metadata to the component. */\n setInputMetadata(metadata: MaterialPasswordMetadata): void {\n this.setMetadata(metadata);\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n}\n","import { Component, forwardRef, output, Input, ViewChild, ElementRef, signal, computed, effect } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\n\nimport { MaterialColorInputMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for HTML color inputs.\n *\n * Renders a `<mat-form-field>` containing an `<input type=\"color\">` element\n * with basic validation and hint support. Built on top of the\n * `SimpleBaseInputComponent` to leverage common functionality such as\n * reactive forms integration and error handling.\n */\n@Component({\n selector: 'pdx-color-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <span\n matPrefix\n class=\"pdx-color-preview\"\n [style.background]=\"previewColor()\"\n aria-hidden=\"true\"\n ></span>\n\n <input\n matInput\n [formControl]=\"control()\"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n type=\"text\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n />\n\n <input\n #nativePicker\n type=\"color\"\n class=\"pdx-hidden-input\"\n (input)=\"onNativeColorChange($event)\"\n />\n\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n [matMenuTriggerFor]=\"menu\"\n [disabled]=\"disabledMode || isReadonlyEffective()\"\n [attr.aria-label]=\"'Selecionar cor'\"\n matTooltip=\"Selecionar cor\"\n >\n <mat-icon [praxisIcon]=\"'mi:palette'\"></mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\" [overlapTrigger]=\"false\">\n <div class=\"pdx-color-panel\" [style.width.px]=\"panelWidthPx\" (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <div class=\"pdx-panel-header\" *ngIf=\"preview\">\n <div class=\"pdx-preview-box\">\n <span class=\"pdx-preview-swatch\" [style.background]=\"previewColor()\"></span>\n <span class=\"pdx-preview-text\">{{ control().value || '—' }}</span>\n <span class=\"pdx-preview-spacer\"></span>\n <button mat-icon-button type=\"button\" [disabled]=\"!control().value\" (click)=\"copyCurrent()\" [matTooltip]=\"'Copiar'\" aria-label=\"Copiar valor\">\n <mat-icon [praxisIcon]=\"'mi:content_copy'\"></mat-icon>\n </button>\n </div>\n </div>\n <div class=\"pdx-native-row\" *ngIf=\"showNativeOption\" (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <input type=\"color\" class=\"pdx-native-anchor\" [value]=\"currentSolidHex()\" (input)=\"onNativeColorChange($event)\" aria-label=\"Escolher cor (nativo)\" />\n </div>\n <div class=\"pdx-recent\" *ngIf=\"showRecent && recent().length > 0\">\n <div class=\"pdx-section-title\">Recentes</div>\n <div class=\"pdx-palette-view\" role=\"grid\" [style.--pdx-cols]=\"columns\">\n <button type=\"button\" class=\"pdx-swatch\" *ngFor=\"let c of recent(); trackBy: trackColor\" [style.background]=\"c\" [class.selected]=\"isSelected(c)\" [attr.aria-selected]=\"isSelected(c) ? 'true' : null\" (click)=\"onSwatchClick(c)\" [matTooltip]=\"c\" [attr.aria-label]=\"'Selecionar cor ' + c\"></button>\n </div>\n </div>\n <div class=\"pdx-palette-view\" role=\"grid\" [style.--pdx-cols]=\"columns\">\n <button type=\"button\" class=\"pdx-swatch\" *ngFor=\"let c of swatches(); trackBy: trackColor\" [style.background]=\"c\" [class.selected]=\"isSelected(c)\" [attr.aria-selected]=\"isSelected(c) ? 'true' : null\" (click)=\"onSwatchClick(c)\" [matTooltip]=\"c\" [attr.aria-label]=\"'Selecionar cor ' + c\"></button>\n </div>\n </div>\n </mat-menu>\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">{{\n metadata()!.hint\n }}</mat-hint>\n }\n </mat-form-field>\n `,\n styles: [\n `\n .pdx-color-preview {\n width: 24px;\n height: 24px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0.2);\n display: inline-block;\n margin-right: 8px;\n }\n .pdx-hidden-input { display: none; }\n .pdx-color-panel { padding: 8px; max-width: 100%; box-sizing: border-box; }\n .pdx-panel-header { padding: 4px 0 8px; }\n .pdx-preview-box { display: flex; align-items: center; gap: 8px; }\n .pdx-preview-swatch { width: 24px; height: 24px; border: 1px solid rgba(0,0,0,0.2); border-radius: 4px; }\n .pdx-preview-spacer { flex: 1 1 auto; }\n .pdx-section-title { font-size: 12px; opacity: .8; margin-top: 4px; }\n .pdx-recent { padding: 4px 0; }\n .pdx-native-row { padding: 4px 0; display: flex; justify-content: flex-end; }\n .pdx-native-anchor { width: 48px; height: 28px; border: 1px solid rgba(0,0,0,0.2); border-radius: 6px; background: transparent; cursor: pointer; }\n .pdx-palette-view { display: grid; grid-template-columns: repeat(var(--pdx-cols, 8), 24px); gap: 8px; padding: 8px 0; }\n .pdx-swatch { width: 24px; height: 24px; border-radius: 4px; border: 1px solid rgba(0,0,0,0.2); cursor: pointer; }\n .pdx-swatch.selected { border: 2px solid #3f51b5; box-shadow: 0 0 0 2px rgba(63,81,181,0.2); }\n `,\n ],\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n MatMenuModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"color\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class ColorInputComponent extends SimpleBaseInputComponent {\n @ViewChild('nativePicker') private nativePickerRef?: ElementRef<HTMLInputElement>;\n @ViewChild(MatMenuTrigger) private menuTrigger?: MatMenuTrigger;\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n // Palette inputs (solid colors only)\n @Input() palettePreset: 'basic' | 'office' | 'material' | string = 'material';\n @Input() paletteColors: string[] | undefined;\n @Input() columns = 8;\n @Input() popupWidth: number | string = 320;\n @Input() preview = true;\n @Input() showRecent = true;\n @Input() maxRecent = 12;\n @Input() showNativeOption = true;\n\n // Internal state for overlay\n panelWidthPx = 320;\n readonly recent = signal<string[]>([]);\n readonly swatches = computed(() => {\n const base = this.buildPaletteColors(this.palettePreset, this.paletteColors);\n const seen = new Set<string>();\n return base.filter((c) => {\n const k = (c || '').toLowerCase();\n if (seen.has(k)) return false;\n seen.add(k);\n return true;\n });\n });\n\n constructor() {\n super();\n effect(() => {\n this.panelWidthPx = this.coerceWidth(this.popupWidth);\n });\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n // Load persisted recents\n this.recent.set(this.loadFromStorage('pdxColorInput.recent'));\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-color-input'];\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialColorInputMetadata): void {\n const { placeholder, ...rest } = metadata;\n this.setMetadata(rest);\n // Map optional overlay props if present in metadata (non-breaking)\n const md: any = metadata as any;\n if (md.palettePreset) this.palettePreset = md.palettePreset;\n if (Array.isArray(md.paletteColors)) this.paletteColors = md.paletteColors;\n if (md.columns != null) this.columns = Number(md.columns) || this.columns;\n if (md.popupWidth != null) this.popupWidth = md.popupWidth;\n if (md.preview != null) this.preview = !!md.preview;\n if (md.showRecent != null) this.showRecent = !!md.showRecent;\n if (md.maxRecent != null) this.maxRecent = Number(md.maxRecent) || this.maxRecent;\n }\n\n /** Programmatically opens the native color picker if supported. */\n openNativePicker(): void {\n // Close overlay first to avoid odd positioning at top of the window\n try { this.menuTrigger?.closeMenu(); } catch {}\n // Open native picker after overlay closes to ensure better UX\n setTimeout(() => {\n try {\n // Create a temporary color input near the current viewport\n const tmp = document.createElement('input');\n tmp.type = 'color';\n tmp.value = this.normalizeHex(String(this.control().value ?? ''));\n tmp.style.position = 'fixed';\n tmp.style.left = '-1000px';\n tmp.style.top = '0';\n tmp.style.opacity = '0';\n tmp.style.pointerEvents = 'none';\n document.body.appendChild(tmp);\n const cleanup = () => {\n try { document.body.removeChild(tmp); } catch {}\n };\n const onPick = (ev: Event) => {\n const val = (ev.target as HTMLInputElement).value;\n this.applyColor(val);\n cleanup();\n };\n tmp.addEventListener('input', onPick, { once: true });\n tmp.addEventListener('change', onPick, { once: true });\n if (typeof (tmp as any).showPicker === 'function') {\n (tmp as any).showPicker();\n } else {\n tmp.click();\n }\n } catch {}\n }, 30);\n }\n\n onNativeColorChange(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.applyColor(value);\n }\n\n previewColor(): string {\n const v = String(this.control().value ?? '').trim();\n if (!v) return '#000000';\n const hexNoHash = v.replace(/^#/, '');\n if (/^(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(hexNoHash)) {\n return '#' + hexNoHash;\n }\n return v;\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n // =============================================\n // Overlay palette (solid colors)\n // =============================================\n openMenu(): void {\n // no-op; the template trigger opens it\n }\n\n onSwatchClick(c: string): void {\n this.applyColor(c);\n this.menuTrigger?.closeMenu();\n }\n\n isSelected(c: string): boolean {\n const v = String(this.control().value ?? '').trim();\n return this.normalizeHex(v).toLowerCase() === this.normalizeHex(c).toLowerCase();\n }\n\n copyCurrent(): void {\n const val = this.normalizeHex(String(this.control().value ?? ''));\n try {\n if ((navigator as any)?.clipboard?.writeText) (navigator as any).clipboard.writeText(val);\n } catch {}\n }\n\n private applyColor(value: string): void {\n const hex = this.normalizeHex(value);\n this.setValue(hex, { emitEvent: true });\n this.pushRecent(hex);\n }\n\n currentSolidHex(): string {\n const v = String(this.control().value ?? '');\n const hex = this.normalizeHex(v);\n return /^#[0-9a-fA-F]{6}$/.test(hex) ? hex : '#000000';\n }\n\n private pushRecent(v: string): void {\n if (!v) return;\n const key = v.toLowerCase();\n const cur = this.recent();\n const filtered = cur.filter((x) => (x || '').toLowerCase() !== key);\n const next = [key, ...filtered].slice(0, Math.max(1, this.maxRecent || 12));\n this.recent.set(next);\n this.saveToStorage('pdxColorInput.recent', next);\n }\n\n private normalizeHex(v: string): string {\n const s = String(v || '').trim().replace(/^#/, '');\n if (/^[0-9a-fA-F]{3}$/.test(s)) {\n return '#' + s.split('').map((ch) => ch + ch).join('');\n }\n if (/^[0-9a-fA-F]{6}$/.test(s)) return '#' + s;\n // Fallback: return input if already looks like hex (# included)\n return v.startsWith('#') ? v : ('#' + s);\n }\n\n private buildPaletteColors(preset?: string, colors?: string[]): string[] {\n const presets: Record<string, string[]> = {\n basic: ['#000000','#ffffff','#ff0000','#00ff00','#0000ff','#ffff00','#ff00ff','#00ffff'],\n office: ['#c00000','#ff0000','#ffc000','#ffff00','#92d050','#00b050','#00b0f0','#0070c0','#002060','#7030a0'],\n material: [\n '#F44336','#E91E63','#9C27B0','#673AB7','#3F51B5','#2196F3','#03A9F4','#00BCD4','#009688','#4CAF50',\n '#8BC34A','#CDDC39','#FFEB3B','#FFC107','#FF9800','#FF5722','#795548','#9E9E9E','#607D8B'\n ]\n };\n if (Array.isArray(colors) && colors.length) return colors;\n const name = preset || 'material';\n return presets[name] || presets['material'];\n }\n\n private coerceWidth(w: number | string): number {\n if (typeof w === 'number') return w;\n const m = String(w).match(/(\\d+)/);\n return m ? parseInt(m[1], 10) : 320;\n }\n\n private loadFromStorage(key: string): string[] {\n try {\n const raw = localStorage.getItem(key);\n if (!raw) return [];\n const arr = JSON.parse(raw);\n return Array.isArray(arr) ? (arr.filter((x) => typeof x === 'string') as string[]) : [];\n } catch { return []; }\n }\n\n private saveToStorage(key: string, value: string[]): void {\n try { localStorage.setItem(key, JSON.stringify(value || [])); } catch {}\n }\n\n trackColor(_: number, c: string) { return c; }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialDateInputMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for HTML date inputs.\n *\n * Renders a `<mat-form-field>` containing an `<input type=\"date\">` element\n * with basic validation and hint support. Built on top of the\n * `SimpleBaseInputComponent` to leverage common functionality such as\n * reactive forms integration and error handling.\n */\n@Component({\n selector: 'pdx-date-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [type]=\"inputType()\"\n [min]=\"metadata()?.min || null\"\n [max]=\"metadata()?.max || null\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">{{\n metadata()!.hint\n }}</mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"dateInput\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class DateInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n override ngOnInit(): void {\n this.control().addValidators(Validators.pattern(/^\\d{4}-\\d{2}-\\d{2}$/));\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-date-input'];\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialDateInputMetadata): void {\n this.setMetadata(metadata);\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n}\n","import { Component, forwardRef, output, computed, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n MatDatepickerModule,\n MatDatepickerInputEvent,\n} from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialDatepickerMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized component using Angular Material Datepicker.\n *\n * Renders a `<mat-form-field>` with an `<input>` bound to a\n * `mat-datepicker`. Includes toggle button, hint and error support\n * following the same pattern used by other dynamic field components.\n */\n@Component({\n selector: 'pdx-material-datepicker',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [errorStateMatcher]=\"errorStateMatcher()\"\n [matDatepicker]=\"picker\"\n [matDatepickerFilter]=\"metadata()?.dateFilter\"\n [formControl]=\"control()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n (dateChange)=\"onDateChange($event)\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (showClear()) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"onClearClick()\"\n [disabled]=\"disabledMode || isReadonlyEffective() || presentationMode\"\n [matTooltip]=\"metadata()?.clearButton?.tooltip || null\"\n [attr.aria-label]=\"metadata()?.clearButton?.ariaLabel || 'Limpar'\"\n >\n <mat-icon\n [color]=\"iconPalette(metadata()?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.clearButton?.iconColor)\"\n [praxisIcon]=\"metadata()?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n\n <mat-datepicker\n #picker\n [startView]=\"metadata()?.startView || 'month'\"\n [startAt]=\"startAt()\"\n [touchUi]=\"metadata()?.touchUi || false\"\n [color]=\"materialColor()\"\n ></mat-datepicker>\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialDatepickerComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"date\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialDatepickerComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n readonly minDate = computed(() => {\n const md = this.metadata()?.minDate;\n return typeof md === 'string' ? new Date(md) : md;\n });\n\n readonly maxDate = computed(() => {\n const md = this.metadata()?.maxDate;\n return typeof md === 'string' ? new Date(md) : md;\n });\n\n readonly startAt = computed(() => {\n const sa = this.metadata()?.startAt;\n return typeof sa === 'string' ? new Date(sa) : (sa ?? null);\n });\n\n onDateChange(event: MatDatepickerInputEvent<Date | null>): void {\n this.setValue(event.value ?? null);\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-material-datepicker'];\n }\n\n /** Applies component metadata with strong typing. */\n setDatepickerMetadata(metadata: MaterialDatepickerMetadata): void {\n this.setMetadata(metadata);\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n showClear(): boolean {\n const cfg: any = (this.metadata() as any)?.clearButton;\n if (!cfg || cfg.enabled !== true) return false;\n if (this.disabledMode || this.isReadonlyEffective() || this.presentationMode) return false;\n if (cfg.showOnlyWhenFilled) {\n const v = this.control().value as Date | null;\n return !!v;\n }\n return true;\n }\n\n onClearClick(): void {\n this.setValue(null, { emitEvent: true });\n const control = this.control();\n control.markAsDirty();\n control.markAsTouched();\n }\n}\n","import { Component, forwardRef, output, computed, OnInit, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n FormGroup,\n FormControl,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { MaterialDateRangeMetadata, DateRangeValue } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\nimport { computeEffectiveState } from '../../utils/field-state.util';\n\n/**\n * Specialized component using Angular Material Date Range picker.\n *\n * Renders a `<mat-form-field>` with a `mat-date-range-input` bound to\n * an internal `FormGroup`. Integrates toggle button, hint and error support\n * following the same pattern used by other dynamic field components.\n */\n@Component({\n selector: 'pdx-material-date-range',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <mat-date-range-input\n [formGroup]=\"rangeGroup\"\n [rangePicker]=\"picker\"\n [min]=\"minDate()\"\n [max]=\"maxDate()\"\n [dateFilter]=\"metadata()?.dateFilter\"\n [required]=\"metadata()?.required || false\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n <input\n matStartDate\n formControlName=\"start\"\n [attr.placeholder]=\"\n metadata()?.startPlaceholder &&\n metadata()?.startPlaceholder.trim() !== (label ?? '').trim()\n ? metadata()!.startPlaceholder\n : null\n \"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"\n metadata()?.startAriaLabel ||\n (!label && metadata()?.startPlaceholder\n ? metadata()?.startPlaceholder\n : null)\n \"\n />\n <input\n matEndDate\n formControlName=\"end\"\n [attr.placeholder]=\"\n metadata()?.endPlaceholder &&\n metadata()?.endPlaceholder.trim() !== (label ?? '').trim()\n ? metadata()!.endPlaceholder\n : null\n \"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"\n metadata()?.endAriaLabel ||\n (!label && metadata()?.endPlaceholder\n ? metadata()?.endPlaceholder\n : null)\n \"\n />\n </mat-date-range-input>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n <mat-date-range-picker\n #picker\n [startView]=\"metadata()?.startView || 'month'\"\n [startAt]=\"startAt()\"\n [touchUi]=\"metadata()?.touchUi || false\"\n [color]=\"materialColor()\"\n ></mat-date-range-picker>\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialDateRangeComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"dateRange\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialDateRangeComponent\n extends SimpleBaseInputComponent\n implements OnInit\n{\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n readonly rangeGroup = new FormGroup({\n start: new FormControl<Date | null>(null),\n end: new FormControl<Date | null>(null),\n });\n\n readonly minDate = computed(() => {\n const md = this.metadata()?.minDate;\n return typeof md === 'string' ? new Date(md) : md;\n });\n\n readonly maxDate = computed(() => {\n const md = this.metadata()?.maxDate;\n return typeof md === 'string' ? new Date(md) : md;\n });\n\n readonly startAt = computed(() => {\n const sa = this.metadata()?.startAt;\n return typeof sa === 'string' ? new Date(sa) : (sa ?? null);\n });\n\n override ngOnInit(): void {\n // Contextual validator: start <= end\n this.rangeGroup.addValidators((group) => {\n const s = group.get('start')?.value as Date | null;\n const e = group.get('end')?.value as Date | null;\n if (!s || !e) return null;\n return s.getTime() <= e.getTime() ? null : { rangeOrder: true };\n });\n this.rangeGroup.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ start, end }) => {\n const value: DateRangeValue = {\n startDate: start ?? null,\n endDate: end ?? null,\n };\n this.setValue(value);\n });\n\n this.rangeGroup.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const errors = this.rangeGroup.errors;\n this.control().setErrors(errors);\n });\n\n this.control()\n .valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((val: DateRangeValue | null) => {\n this.rangeGroup.patchValue(\n { start: val?.startDate ?? null, end: val?.endDate ?? null },\n { emitEvent: false },\n );\n });\n\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-material-date-range'];\n }\n\n /** Applies component metadata with strong typing. */\n setDateRangeMetadata(metadata: MaterialDateRangeMetadata): void {\n this.setMetadata(metadata);\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialDatetimeLocalInputMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for HTML datetime-local inputs.\n *\n * Renders a `<mat-form-field>` containing an `<input type=\"datetime-local\">`\n * element with basic validation and hint support.\n */\n@Component({\n selector: 'pdx-datetime-local-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [type]=\"inputType()\"\n [min]=\"metadata()?.min || null\"\n [max]=\"metadata()?.max || null\"\n [step]=\"metadata()?.step || null\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatetimeLocalInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"dateTimeLocal\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class DatetimeLocalInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n override ngOnInit(): void {\n this.control().addValidators(\n Validators.pattern(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/),\n );\n // Custom min/max validator for ISO local datetime strings\n this.control().addValidators(() => this.datetimeBoundsValidator());\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-datetime-local-input'];\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialDatetimeLocalInputMetadata): void {\n this.setMetadata(metadata);\n // Re-validate when bounds change via metadata\n const ctrl = this.control();\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n private datetimeBoundsValidator() {\n const meta = this.metadata() as any;\n const val = this.control().value as string | null | undefined;\n if (!val) return null;\n const min = meta?.min as string | undefined;\n const max = meta?.max as string | undefined;\n // compare ISO-like strings lexicographically when same length\n if (min && typeof min === 'string' && val < min) {\n return { min: true } as any;\n }\n if (max && typeof max === 'string' && val > max) {\n return { max: true } as any;\n }\n return null;\n }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialMonthInputMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for HTML month inputs.\n *\n * Renders a `<mat-form-field>` containing an `<input type=\"month\">` element\n * with optional min/max constraints, basic validation and hint support.\n * Built on top of the `SimpleBaseInputComponent` to reuse core features\n * like reactive forms integration and error handling.\n */\n@Component({\n selector: 'pdx-month-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [type]=\"inputType()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [min]=\"metadata()?.min || null\"\n [max]=\"metadata()?.max || null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MonthInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"month\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MonthInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n override ngOnInit(): void {\n this.control().addValidators(Validators.pattern(/^\\d{4}-\\d{2}$/));\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-month-input'];\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialMonthInputMetadata): void {\n this.setMetadata(metadata);\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialNumericMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for HTML number inputs.\n *\n * Renders a `<mat-form-field>` containing an `<input type=\"number\">` element\n * with basic validation and hint support. Built on top of the\n * `SimpleBaseInputComponent` to leverage common functionality such as\n * reactive forms integration and error handling.\n */\n@Component({\n selector: 'pdx-number-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n type=\"number\"\n [min]=\"metadata()?.min ?? null\"\n [max]=\"metadata()?.max ?? null\"\n [step]=\"metadata()?.step ?? null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">{{\n metadata()!.hint\n }}</mat-hint>\n }\n\n @if (showClear()) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"onClearClick()\"\n [disabled]=\"disabledMode || isReadonlyEffective() || presentationMode\"\n [matTooltip]=\"metadata()?.clearButton?.tooltip || null\"\n [attr.aria-label]=\"metadata()?.clearButton?.ariaLabel || 'Limpar'\"\n >\n <mat-icon\n [color]=\"iconPalette(metadata()?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.clearButton?.iconColor)\"\n [praxisIcon]=\"metadata()?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"numericTextBox\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class NumberInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n // Apply numeric validators AFTER base sets base validators\n const ctrl = this.control();\n ctrl.addValidators(Validators.pattern(/^\\d*(\\.\\d+)?$/));\n const min = this.metadata()?.min;\n const max = this.metadata()?.max;\n if (min !== undefined) {\n ctrl.addValidators(Validators.min(min));\n }\n if (max !== undefined) {\n ctrl.addValidators(Validators.max(max));\n }\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-number-input'];\n }\n\n // Error state matcher based on metadata strategy\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialNumericMetadata): void {\n this.setMetadata(metadata);\n // Re-apply numeric validators dynamically when metadata updates\n const ctrl = this.control();\n const min = metadata?.min;\n const max = metadata?.max;\n ctrl.addValidators(Validators.pattern(/^\\d*(\\.\\d+)?$/));\n if (min !== undefined) ctrl.addValidators(Validators.min(min));\n if (max !== undefined) ctrl.addValidators(Validators.max(max));\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n\n showClear(): boolean {\n const cfg: any = (this.metadata() as any)?.clearButton;\n if (!cfg || cfg.enabled !== true) return false;\n if (this.disabledMode || this.isReadonlyEffective() || this.presentationMode) return false;\n if (cfg.showOnlyWhenFilled) {\n const v = this.control().value;\n return v !== null && v !== undefined && String(v) !== '';\n }\n return true;\n }\n\n onClearClick(): void {\n this.setValue(null, { emitEvent: true });\n const control = this.control();\n control.markAsDirty();\n control.markAsTouched();\n }\n}\n","import {\n Component,\n ElementRef,\n ViewChild,\n forwardRef,\n computed,\n output,\n inject,\n Input,\n LOCALE_ID,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport {\n CommonModule,\n CurrencyPipe,\n registerLocaleData,\n} from '@angular/common';\nimport localePt from '@angular/common/locales/pt';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n// Ensure locale data is registered once; ignore if already present\ntry { registerLocaleData(localePt); } catch {}\ntry { registerLocaleData(localePt, 'pt-BR'); } catch {}\n\nimport { MaterialCurrencyMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n// Already registered above\n\n/**\n * Input component for currency values with basic formatting support.\n *\n * Displays a currency symbol as prefix or suffix and validates numeric input.\n */\n@Component({\n selector: 'pdx-material-currency',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n @if (currencyPosition() === 'before') {\n <span matPrefix class=\"currency-symbol\">{{ currencySymbol() }}</span>\n }\n\n <input\n matInput\n #currencyInput\n type=\"text\"\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (currencyPosition() === 'after') {\n <span matSuffix class=\"currency-symbol\">{{ currencySymbol() }}</span>\n }\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n CurrencyPipe,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialCurrencyComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"currency\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialCurrencyComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n private readonly currencyPipe = inject(CurrencyPipe);\n private readonly defaultLocale =\n inject(LOCALE_ID, { optional: true }) || 'en-US';\n\n @ViewChild('currencyInput', { static: true })\n private readonly inputRef!: ElementRef<HTMLInputElement>;\n\n /** Currency code used for formatting. */\n readonly currencyCode = computed(\n () =>\n (this.metadata() as MaterialCurrencyMetadata | null)?.currency || 'USD',\n );\n\n /** Position of the currency symbol relative to the input. */\n readonly currencyPosition = computed(\n () =>\n (this.metadata() as MaterialCurrencyMetadata | null)?.currencyPosition ||\n 'before',\n );\n\n /** Decimal places used for formatting. */\n readonly decimalPlaces = computed(\n () =>\n (this.metadata() as MaterialCurrencyMetadata | null)?.decimalPlaces ?? 2,\n );\n\n /** Locale used for formatting and parsing. */\n readonly locale = computed(\n () =>\n (this.metadata() as MaterialCurrencyMetadata | null)?.locale ||\n this.defaultLocale,\n );\n\n /** Thousands separator based on locale or metadata. */\n readonly thousandsSeparator = computed(() => {\n const md = this.metadata() as MaterialCurrencyMetadata | null;\n if (md?.thousandsSeparator) {\n return md.thousandsSeparator;\n }\n const formatted = new Intl.NumberFormat(this.locale()).format(1111);\n return formatted.replace(/1/g, '') || ',';\n });\n\n /** Decimal separator based on locale or metadata. */\n readonly decimalSeparator = computed(() => {\n const md = this.metadata() as MaterialCurrencyMetadata | null;\n if (md?.decimalSeparator) {\n return md.decimalSeparator;\n }\n const formatted = new Intl.NumberFormat(this.locale()).format(1.1);\n return formatted.replace(/1/g, '') || '.';\n });\n\n override ngOnInit(): void {\n const allowNegative =\n (this.metadata() as MaterialCurrencyMetadata | null)?.allowNegative ??\n false;\n const escapedDecimal = this.escapeRegex(this.decimalSeparator());\n const pattern = allowNegative\n ? new RegExp(`^-?\\\\d*(?:${escapedDecimal}\\\\d*)?$`)\n : new RegExp(`^\\\\d*(?:${escapedDecimal}\\\\d*)?$`);\n const control = this.control();\n control.addValidators(Validators.pattern(pattern));\n if (!allowNegative) {\n control.addValidators(Validators.min(0));\n }\n super.ngOnInit();\n // Format default value if provided\n queueMicrotask(() => this.onBlur());\n }\n\n /** Handles raw input and keeps numeric value in the control. */\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const raw = input.value\n .replace(new RegExp(this.escapeRegex(this.thousandsSeparator()), 'g'), '')\n .replace(this.decimalSeparator(), '.')\n .replace(/[^0-9.-]/g, '');\n const number = Number(raw);\n this.setValue(isNaN(number) ? null : number);\n }\n\n /** Removes formatting when focusing for easier editing. */\n onFocus(): void {\n this.handleFocus();\n const control = this.control();\n const value = control.value;\n this.inputRef.nativeElement.value =\n value === null || value === undefined\n ? ''\n : String(value).replace('.', this.decimalSeparator());\n }\n\n /** Formats the current value using CurrencyPipe on blur. */\n onBlur(): void {\n this.handleBlur();\n const control = this.control();\n const value = control.value;\n if (value === null || value === undefined || value === '') {\n return;\n }\n let formatted: string;\n try {\n formatted =\n this.currencyPipe.transform(\n value,\n this.currencyCode(),\n '',\n `1.0-${this.decimalPlaces()}`,\n this.locale(),\n ) ?? String(value);\n } catch {\n formatted = new Intl.NumberFormat(this.locale() || 'en-US', {\n style: 'currency',\n currency: this.currencyCode(),\n minimumFractionDigits: 0,\n maximumFractionDigits: this.decimalPlaces(),\n }).format(value);\n }\n this.inputRef.nativeElement.value = formatted;\n }\n\n /** Extracts the symbol for the configured currency. */\n protected currencySymbol(): string {\n const formatted = this.currencyPipe.transform(\n 0,\n this.currencyCode(),\n '',\n `1.0-0`,\n this.locale(),\n );\n return formatted ? formatted.replace(/[0]/g, '').trim() : '$';\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-material-currency'];\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n private escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n /** Applies component metadata with strong typing. */\n @Input({ alias: 'metadata', required: true })\n set metadataInput(metadata: MaterialCurrencyMetadata) {\n this.setInputMetadata(metadata);\n }\n\n setInputMetadata(metadata: MaterialCurrencyMetadata): void {\n this.setMetadata(metadata);\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n}\n","import { Component, forwardRef, computed, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidatorFn,\n AbstractControl,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialCpfCnpjMetadata, createCpfCnpjValidator } from '@praxisui/core';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\n\n@Component({\n selector: 'pdx-material-cpf-cnpj-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n floatLabel=\"auto\"\n [class]=\"componentCssClasses()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (cpfCnpjMetadata()?.prefixIcon) {\n <mat-icon\n matPrefix\n [color]=\"iconPalette(cpfCnpjMetadata()?.prefixIconColor)\"\n [style.color]=\"iconCustomColor(cpfCnpjMetadata()?.prefixIconColor)\"\n [praxisIcon]=\"cpfCnpjMetadata()!.prefixIcon\"\n ></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [placeholder]=\"placeholder || ''\"\n [required]=\"cpfCnpjMetadata()?.required || false\"\n type=\"text\"\n [autocomplete]=\"cpfCnpjMetadata()?.autocomplete || 'off'\"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n (input)=\"handleInput($event)\"\n />\n\n @if (cpfCnpjMetadata()?.suffixIcon) {\n <mat-icon\n matSuffix\n [color]=\"iconPalette(cpfCnpjMetadata()?.suffixIconColor)\"\n [style.color]=\"iconCustomColor(cpfCnpjMetadata()?.suffixIconColor)\"\n [praxisIcon]=\"cpfCnpjMetadata()!.suffixIcon\"\n ></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (cpfCnpjMetadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"cpfCnpjMetadata()?.hintAlign || 'start'\">{{\n cpfCnpjMetadata()!.hint\n }}</mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialCpfCnpjInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"cpfCnpj\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialCpfCnpjInputComponent extends SimpleBaseInputComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n private dynamicValidator: ValidatorFn | null = null;\n cpfCnpjMetadata = computed(\n () => this.metadata() as MaterialCpfCnpjMetadata | null,\n );\n\n override getSpecificCssClasses(): string[] {\n return ['pdx-cpf-cnpj-input'];\n }\n\n public setInputMetadata(metadata: MaterialCpfCnpjMetadata): void {\n super.setMetadata(metadata);\n this.setupDynamicValidator();\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n override onComponentInit(): void {\n super.onComponentInit?.();\n // This hook is called after the base component is initialized.\n // We set up our specific validator here.\n this.setupDynamicValidator();\n }\n\n private setupDynamicValidator(): void {\n // Remove the previous validator if it exists, to avoid stacking them\n const ctrl = this.control();\n if (this.dynamicValidator) {\n ctrl.removeValidators(this.dynamicValidator);\n }\n\n const meta = this.cpfCnpjMetadata();\n if (meta) {\n // Create and add the new dynamic validator\n this.dynamicValidator = createCpfCnpjValidator(meta);\n ctrl.addValidators(this.dynamicValidator!);\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n override writeValue(value: any): void {\n const formatted = this.formatValue(value);\n super.writeValue(formatted);\n }\n\n override handleInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = input.value;\n const cursorPos = input.selectionStart || 0;\n\n // Limpa e formata\n const cleaned = this.cleanValue(value);\n const formatted = this.formatValue(cleaned);\n\n // Atualiza o controle sem emitir evento (evita loop)\n const ctrl = this.control();\n ctrl.setValue(formatted, { emitEvent: false });\n\n // Ajusta cursor: conta caracteres não-máscara até a posição original\n const originalCleanedLength = this.cleanValue(\n value.substring(0, cursorPos),\n ).length;\n let newPos = 0;\n let cleanCount = 0;\n while (newPos < formatted.length && cleanCount < originalCleanedLength) {\n if (/[A-Z0-9]/.test(formatted[newPos])) {\n cleanCount++;\n }\n newPos++;\n }\n input.setSelectionRange(newPos, newPos);\n\n // Propaga valor (unmask se configurado)\n const unmask = this.cpfCnpjMetadata()?.unmaskOnSubmit ?? true;\n const modelValue = unmask ? cleaned : formatted;\n this.onChange(modelValue);\n this.valueChange.emit(modelValue);\n this.markAsDirty();\n\n // Validação imediata (opcional: pode ser debounce se necessário)\n ctrl.updateValueAndValidity();\n }\n\n // Método de limpeza aprimorado: respeita 'version' do metadata\n private cleanValue(value: string | null | undefined): string {\n const meta = this.cpfCnpjMetadata();\n const version = meta?.version ?? 'auto';\n let cleaned = (value || '').toUpperCase();\n\n // Se permitir input formatado, remova máscara primeiro\n if (meta?.allowFormattedInput ?? true) {\n cleaned = cleaned.replace(/[^A-Z0-9]/g, ''); // Remove máscara existente\n }\n\n // Aplique restrições baseadas em version\n if (version === 'legacy') {\n return cleaned.replace(/[^0-9]/g, ''); // Apenas dígitos\n } else if (version === 'alpha') {\n return cleaned.replace(/[^A-Z0-9]/g, ''); // Alfanumérico\n } else {\n // 'auto': detecta baseado em caracteres\n return cleaned.match(/[A-Z]/)\n ? cleaned.replace(/[^A-Z0-9]/g, '')\n : cleaned.replace(/[^0-9]/g, '');\n }\n }\n\n // Método de formatação (atualizado para respeitar documentType e version)\n private formatValue(value: string | null | undefined): string {\n const cleaned = this.cleanValue(value);\n if (!cleaned) return '';\n\n const meta = this.cpfCnpjMetadata();\n const docType = meta?.documentType ?? 'auto';\n const version = meta?.version ?? 'auto';\n\n // Decida tipo: CPF (numérico, 11 chars) ou CNPJ (14 chars, alfanumérico em 'alpha')\n let isCpf =\n docType === 'cpf' || (docType === 'auto' && cleaned.length <= 11);\n if (version === 'alpha' && cleaned.match(/[A-Z]/)) {\n isCpf = false; // Força CNPJ se houver letras em 'alpha'\n }\n\n return isCpf ? this.applyCpfMask(cleaned) : this.applyCnpjMask(cleaned);\n }\n\n // Máscara CPF (apenas numérico, limite 11)\n private applyCpfMask(value: string): string {\n const v = value.substring(0, 11);\n\n if (v.length <= 3) {\n return v;\n } else if (v.length <= 6) {\n return v.replace(/^(\\d{3})(\\d{1,3})/, '$1.$2');\n } else if (v.length <= 9) {\n return v.replace(/^(\\d{3})(\\d{3})(\\d{1,3})/, '$1.$2.$3');\n } else {\n return v.replace(/^(\\d{3})(\\d{3})(\\d{3})(\\d{1,2})/, '$1.$2.$3-$4');\n }\n }\n\n // Máscara CNPJ (alfanumérico, limite 14)\n private applyCnpjMask(value: string): string {\n const v = value.substring(0, 14);\n\n if (v.length <= 2) {\n return v;\n } else if (v.length <= 5) {\n return v.replace(/^([A-Z0-9]{2})([A-Z0-9]{1,3})/, '$1.$2');\n } else if (v.length <= 8) {\n return v.replace(\n /^([A-Z0-9]{2})([A-Z0-9]{3})([A-Z0-9]{1,3})/,\n '$1.$2.$3',\n );\n } else if (v.length <= 12) {\n return v.replace(\n /^([A-Z0-9]{2})([A-Z0-9]{3})([A-Z0-9]{3})([A-Z0-9]{1,4})/,\n '$1.$2.$3/$4',\n );\n } else {\n return v.replace(\n /^([A-Z0-9]{2})([A-Z0-9]{3})([A-Z0-9]{3})([A-Z0-9]{4})([A-Z0-9]{1,2})/,\n '$1.$2.$3/$4-$5',\n );\n }\n }\n}\n","import { Component, forwardRef, computed, OnInit, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n FormGroup,\n FormControl,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport {\n MaterialPriceRangeMetadata,\n PriceRangeValue,\n FieldControlType,\n MaterialCurrencyMetadata,\n} from '@praxisui/core';\nimport { MaterialCurrencyComponent } from '../material-currency';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Component for selecting a price range using two currency inputs.\n *\n * Reuses `MaterialCurrencyComponent` for both the minimum and maximum\n * values, keeping formatting and validation consistent.\n */\n@Component({\n selector: 'pdx-material-price-range',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MaterialCurrencyComponent,\n MatTooltipModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialPriceRangeComponent),\n multi: true,\n },\n ],\n template: `\n <div\n class=\"price-range-container\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n <label class=\"range-label\">\n {{ label }}\n @if (metadata()?.required) {\n <span class=\"mat-form-field-required-marker\" aria-hidden=\"true\">*</span>\n }\n </label>\n <div class=\"range-inputs\" [formGroup]=\"rangeGroup\">\n <pdx-material-currency\n formControlName=\"minPrice\"\n [metadata]=\"startCurrencyMetadata()\"\n ></pdx-material-currency>\n <pdx-material-currency\n formControlName=\"maxPrice\"\n [metadata]=\"endCurrencyMetadata()\"\n ></pdx-material-currency>\n </div>\n\n @if (hasValidationError()) {\n <div class=\"mat-error\">{{ errorMessage() }}</div>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <div class=\"mat-hint\">{{ metadata()!.hint }}</div>\n }\n </div>\n `,\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"priceRange\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialPriceRangeComponent\n extends SimpleBaseInputComponent\n implements OnInit\n{\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n readonly rangeGroup = new FormGroup({\n minPrice: new FormControl<number | null>(null),\n maxPrice: new FormControl<number | null>(null),\n });\n\n readonly startCurrencyMetadata = computed<MaterialCurrencyMetadata>(() => {\n const md = this.metadata() as MaterialPriceRangeMetadata;\n return {\n controlType: FieldControlType.CURRENCY_INPUT,\n name: `${md.name}_min`,\n label: md.startLabel || 'Min',\n inputType: 'text',\n currency: md.currency,\n currencyPosition: md.currencyPosition,\n decimalPlaces: md.decimalPlaces,\n locale: md.locale,\n decimalSeparator: md.decimalSeparator,\n thousandsSeparator: md.thousandsSeparator,\n allowNegative: md.allowNegative,\n placeholder: md.startPlaceholder,\n required: md.required,\n };\n });\n\n readonly endCurrencyMetadata = computed<MaterialCurrencyMetadata>(() => {\n const md = this.metadata() as MaterialPriceRangeMetadata;\n return {\n controlType: FieldControlType.CURRENCY_INPUT,\n name: `${md.name}_max`,\n label: md.endLabel || 'Max',\n inputType: 'text',\n currency: md.currency,\n currencyPosition: md.currencyPosition,\n decimalPlaces: md.decimalPlaces,\n locale: md.locale,\n decimalSeparator: md.decimalSeparator,\n thousandsSeparator: md.thousandsSeparator,\n allowNegative: md.allowNegative,\n placeholder: md.endPlaceholder,\n required: md.required,\n };\n });\n\n /** Custom error messages for range-specific validations */\n override readonly errorMessage = computed(() => {\n const errors = this.control().errors;\n const md = this.metadata() as MaterialPriceRangeMetadata | null;\n if (!errors) return '';\n\n if (errors['rangeOrder']) {\n return 'O valor inicial deve ser menor ou igual ao final';\n }\n if (errors['minValue'] && md?.min != null) {\n return `Valor mínimo permitido é ${md.min}`;\n }\n if (errors['maxValue'] && md?.max != null) {\n return `Valor máximo permitido é ${md.max}`;\n }\n\n return '';\n });\n\n override ngOnInit(): void {\n const md = this.metadata() as MaterialPriceRangeMetadata | null;\n if (md) {\n this.rangeGroup.addValidators((group) => {\n const val = group.value as PriceRangeValue;\n const start = val.minPrice;\n const end = val.maxPrice;\n if (start != null && end != null && start > end) {\n return { rangeOrder: true };\n }\n if (\n md.min != null &&\n ((start != null && start < md.min) || (end != null && end < md.min))\n ) {\n return { minValue: true };\n }\n if (\n md.max != null &&\n ((start != null && start > md.max) || (end != null && end > md.max))\n ) {\n return { maxValue: true };\n }\n return null;\n });\n }\n\n this.rangeGroup.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ minPrice, maxPrice }) => {\n const value: PriceRangeValue = {\n minPrice: minPrice ?? null,\n maxPrice: maxPrice ?? null,\n };\n this.setValue(value);\n });\n\n this.rangeGroup.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const errors = this.rangeGroup.errors;\n this.control().setErrors(errors);\n });\n\n this.control()\n .valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((val: PriceRangeValue | null) => {\n this.rangeGroup.patchValue(\n {\n minPrice: val?.minPrice ?? null,\n maxPrice: val?.maxPrice ?? null,\n },\n { emitEvent: false },\n );\n });\n\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-material-price-range'];\n }\n\n /** Applies component metadata with strong typing. */\n setPriceRangeMetadata(metadata: MaterialPriceRangeMetadata): void {\n this.setMetadata(metadata);\n }\n}\n","import { Component, forwardRef, computed, OnInit, signal, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n FormGroup,\n FormControl,\n ValidatorFn,\n AbstractControl,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { MaterialRangeSliderMetadata, RangeSliderValue } from '@praxisui/core';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n@Component({\n selector: 'pdx-material-range-slider',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatSliderModule,\n MatTooltipModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PdxMaterialRangeSliderComponent),\n multi: true,\n },\n ],\n templateUrl: './material-range-slider.component.html',\n styleUrls: ['./material-range-slider.component.scss'],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"range-slider\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class PdxMaterialRangeSliderComponent\n extends SimpleBaseInputComponent\n implements OnInit\n{\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n override metadata = signal<MaterialRangeSliderMetadata | null>(null);\n\n // =============================================================================\n // 'range' mode specific properties\n // =============================================================================\n readonly rangeGroup = new FormGroup({\n start: new FormControl<number | null>(null),\n end: new FormControl<number | null>(null),\n });\n\n // =============================================================================\n // COMPUTED PROPERTIES\n // =============================================================================\n\n readonly isRangeMode = computed(() => this.metadata()?.mode === 'range');\n\n readonly displayWithFn = computed(() => {\n return (\n this.metadata()?.displayWith || ((value: number) => value.toString())\n );\n });\n\n override readonly errorMessage = computed(() => {\n const errors = this.isRangeMode()\n ? this.rangeGroup.errors\n : this.control().errors;\n const md = this.metadata();\n if (!errors) return '';\n\n const customMessages = md?.validators;\n\n if (errors['rangeOrder']) {\n return (\n customMessages?.rangeMessage ??\n 'The start value must be less than the end value.'\n );\n }\n if (errors['minDistance']) {\n return (\n customMessages?.distanceMessage ??\n `The distance between values must be at least ${md?.minDistance}.`\n );\n }\n if (errors['maxDistance']) {\n return (\n customMessages?.distanceMessage ??\n `The distance between values must be less than ${md?.maxDistance}.`\n );\n }\n if (errors['min']) {\n return (\n customMessages?.minMessage ??\n `The value cannot be less than ${md?.min}.`\n );\n }\n if (errors['max']) {\n return (\n customMessages?.maxMessage ??\n `The value cannot be greater than ${md?.max}.`\n );\n }\n if (errors['required']) {\n return customMessages?.requiredMessage ?? 'This field is required.';\n }\n\n // Generic fallback\n const firstKey = Object.keys(errors)[0];\n return `Validation error: ${firstKey}`;\n });\n\n override ngOnInit(): void {\n super.ngOnInit();\n\n // When the main control's value changes, update the internal UI controls\n this.control()\n .valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n if (this.isRangeMode()) {\n // If the external value is an object, patch the internal form group\n if (typeof value === 'object' && value !== null) {\n this.rangeGroup.patchValue(value, { emitEvent: false });\n }\n } else {\n // For single mode, the control is the source of truth, no-op.\n }\n });\n\n // When the internal rangeGroup changes, update the main control's value\n this.rangeGroup.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n if (this.isRangeMode()) {\n this.setValue({\n start: value.start ?? null,\n end: value.end ?? null,\n });\n }\n });\n }\n\n /**\n * Overrides writeValue to handle both single and range modes.\n */\n override writeValue(value: any): void {\n if (this.isRangeMode()) {\n const rangeValue = value as RangeSliderValue;\n this.rangeGroup.patchValue(\n {\n start: rangeValue?.start ?? null,\n end: rangeValue?.end ?? null,\n },\n { emitEvent: false },\n );\n } else {\n super.writeValue(value);\n }\n }\n\n /**\n * Sets the component metadata and re-initializes validators.\n * @param metadata The metadata for the component.\n */\n setSliderMetadata(metadata: MaterialRangeSliderMetadata): void {\n this.setMetadata(metadata);\n\n const startControl = this.rangeGroup.get('start');\n const endControl = this.rangeGroup.get('end');\n\n if (!startControl || !endControl) return;\n\n // Set validators for individual controls\n const min = metadata.min ?? -Infinity;\n const max = metadata.max ?? Infinity;\n startControl.setValidators([Validators.min(min), Validators.max(max)]);\n endControl.setValidators([Validators.min(min), Validators.max(max)]);\n startControl.updateValueAndValidity();\n endControl.updateValueAndValidity();\n\n // Clear existing validators and add new ones based on metadata\n this.rangeGroup.clearValidators();\n const groupValidators: ValidatorFn[] = [];\n\n if (this.isRangeMode()) {\n groupValidators.push(\n (group: AbstractControl): ValidationErrors | null => {\n const formGroup = group as FormGroup;\n const start = formGroup.get('start')?.value;\n const end = formGroup.get('end')?.value;\n const md = this.metadata();\n\n if (start !== null && end !== null) {\n // Range Order\n if (start > end) {\n return { rangeOrder: true };\n }\n // Min Distance\n if (md?.minDistance && end - start < md.minDistance) {\n return { minDistance: true };\n }\n // Max Distance\n if (md?.maxDistance && end - start > md.maxDistance) {\n return { maxDistance: true };\n }\n }\n return null;\n },\n );\n }\n\n this.rangeGroup.setValidators(groupValidators);\n this.rangeGroup.updateValueAndValidity();\n }\n\n protected override getSpecificCssClasses(): string[] {\n const classes = ['pdx-material-range-slider'];\n const md = this.metadata();\n\n if (this.isRangeMode()) {\n classes.push('pdx-range-mode');\n } else {\n classes.push('pdx-single-mode');\n }\n if (md?.vertical) {\n classes.push('pdx-vertical');\n }\n if (md?.readonly) {\n classes.push('pdx-readonly');\n }\n return classes;\n }\n}\n","<div\n class=\"pdx-range-slider-container\"\n [ngClass]=\"{ 'pdx-range-slider-vertical': metadata()?.vertical }\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : ''\"\n [matTooltipDisabled]=\"!tooltipEnabled() || !errorMessage()\"\n [matTooltipPosition]=\"tooltipPosition()\"\n>\n <label\n *ngIf=\"label\"\n class=\"pdx-slider-label\"\n [id]=\"componentId() + '-label'\"\n >{{ label }}</label\n >\n\n <div\n class=\"pdx-slider-wrapper\"\n role=\"group\"\n [attr.aria-labelledby]=\"componentId() + '-label'\"\n >\n <!-- Single Slider Mode -->\n <ng-container *ngIf=\"!isRangeMode()\">\n <mat-slider\n class=\"pdx-single-slider\"\n [attr.aria-label]=\"label\"\n [attr.aria-invalid]=\"control().invalid\"\n [attr.aria-required]=\"metadata()?.required\"\n [max]=\"metadata()?.max ?? 100\"\n [min]=\"metadata()?.min ?? 0\"\n [step]=\"metadata()?.step ?? 1\"\n [discrete]=\"metadata()?.discrete ?? false\"\n [showTickMarks]=\"metadata()?.showTicks ?? false\"\n [displayWith]=\"displayWithFn()\"\n [color]=\"materialColor()\"\n >\n <input matSliderThumb [formControl]=\"control()\" />\n </mat-slider>\n </ng-container>\n\n <!-- Range Slider Mode -->\n <ng-container *ngIf=\"isRangeMode()\">\n <div class=\"pdx-range-slider\" [formGroup]=\"rangeGroup\">\n <mat-slider\n class=\"pdx-range-slider-range\"\n [attr.aria-label]=\"label\"\n [attr.aria-required]=\"metadata()?.required\"\n [max]=\"metadata()?.max ?? 100\"\n [min]=\"metadata()?.min ?? 0\"\n [step]=\"metadata()?.step ?? 1\"\n [discrete]=\"metadata()?.discrete ?? false\"\n [showTickMarks]=\"metadata()?.showTicks ?? false\"\n [displayWith]=\"displayWithFn()\"\n [color]=\"materialColor()\"\n >\n <input matSliderStartThumb formControlName=\"start\" [attr.aria-label]=\"(label ?? 'Start') + ' value'\" />\n <input matSliderEndThumb formControlName=\"end\" [attr.aria-label]=\"(label ?? 'End') + ' value'\" />\n </mat-slider>\n </div>\n </ng-container>\n </div>\n\n <!-- Optional Inputs -->\n <div *ngIf=\"metadata()?.showInputs\" class=\"pdx-slider-inputs-container\">\n <ng-container *ngIf=\"isRangeMode(); else singleInput\">\n <div class=\"pdx-slider-inputs\" [formGroup]=\"rangeGroup\">\n <input\n type=\"number\"\n formControlName=\"start\"\n class=\"pdx-slider-input pdx-slider-input-start\"\n [readonly]=\"readonlyMode || presentationMode || (metadata()?.readonly || false)\"\n [step]=\"metadata()?.step ?? 1\"\n [min]=\"metadata()?.min ?? 0\"\n [max]=\"rangeGroup.get('end')?.value ?? metadata()?.max ?? 100\"\n />\n <span class=\"pdx-slider-input-separator\">-</span>\n <input\n type=\"number\"\n formControlName=\"end\"\n class=\"pdx-slider-input pdx-slider-input-end\"\n [readonly]=\"readonlyMode || presentationMode || (metadata()?.readonly || false)\"\n [step]=\"metadata()?.step ?? 1\"\n [min]=\"rangeGroup.get('start')?.value ?? metadata()?.min ?? 0\"\n [max]=\"metadata()?.max ?? 100\"\n />\n </div>\n </ng-container>\n <ng-template #singleInput>\n <div class=\"pdx-slider-inputs\">\n <input\n type=\"number\"\n [formControl]=\"control()\"\n class=\"pdx-slider-input\"\n [readonly]=\"readonlyMode || presentationMode || (metadata()?.readonly || false)\"\n [step]=\"metadata()?.step ?? 1\"\n [min]=\"metadata()?.min ?? 0\"\n [max]=\"metadata()?.max ?? 100\"\n />\n </div>\n </ng-template>\n </div>\n\n <div\n *ngIf=\"hasValidationError() || (isRangeMode() && rangeGroup.invalid)\"\n class=\"mat-error\"\n >\n {{ errorMessage() }}\n </div>\n\n <div\n *ngIf=\"\n metadata()?.hint &&\n !hasValidationError() &&\n !(isRangeMode() && rangeGroup.invalid)\n \"\n class=\"mat-hint\"\n >\n {{ metadata()?.hint }}\n </div>\n</div>\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialSearchInputMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for HTML search inputs.\n *\n * Renders a `<mat-form-field>` containing an `<input type=\"search\">` element\n * with Material styling and basic validation support. Built on top of the\n * `SimpleBaseInputComponent` to leverage common functionality such as reactive\n * forms integration and error handling.\n */\n@Component({\n selector: 'pdx-search-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [autocomplete]=\"metadata()?.autocomplete || 'off'\"\n [spellcheck]=\"metadata()?.spellcheck ?? true\"\n [type]=\"inputType()\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">{{\n metadata()!.hint\n }}</mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SearchInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"search\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class SearchInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-search-input'];\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialSearchInputMetadata): void {\n this.setMetadata(metadata);\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialPhoneMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for telephone numbers.\n *\n * Renders a `<mat-form-field>` wrapping an `<input type=\"tel\">` element with\n * Material styling. Built on top of `SimpleBaseInputComponent` to leverage\n * reactive forms integration, hint/error messaging and validation hooks.\n */\n@Component({\n selector: 'pdx-phone-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [autocomplete]=\"metadata()?.autocomplete || 'tel'\"\n [type]=\"inputType()\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">{{\n metadata()!.hint\n }}</mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PhoneInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"phone\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class PhoneInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n override ngOnInit(): void {\n this.control().addValidators(Validators.pattern(/^[0-9()+\\-\\s]*$/));\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-phone-input'];\n }\n\n /** Applies strongly typed metadata to the component. */\n setInputMetadata(metadata: MaterialPhoneMetadata): void {\n this.setMetadata(metadata);\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { MaterialTimeInputMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for HTML time inputs.\n *\n * Renders a `<mat-form-field>` containing an `<input type=\"time\">` element\n * with optional min/max/step constraints, basic validation and hint support.\n * Built on top of the `SimpleBaseInputComponent` to reuse core features\n * like reactive forms integration and error handling.\n */\n@Component({\n selector: 'pdx-time-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [type]=\"inputType()\"\n [min]=\"metadata()?.min || null\"\n [max]=\"metadata()?.max || null\"\n [step]=\"metadata()?.step || null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n PraxisIconDirective,\n MatTooltipModule,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimeInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"time\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class TimeInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n override ngOnInit(): void {\n this.control().addValidators(Validators.pattern(/^\\d{2}:\\d{2}$/));\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-time-input'];\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialTimeInputMetadata): void {\n this.setMetadata(metadata);\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport {\n MatTimepickerModule,\n MatTimepicker,\n} from '@angular/material/timepicker';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialTimepickerMetadata } from '@praxisui/core';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\n\n/**\n * Angular Material timepicker component used in dynamic forms.\n *\n * Provides a form field with an input connected to `mat-timepicker`, allowing\n * users to select a time of day. Built on top of the `SimpleBaseInputComponent`\n * to reuse control value accessor integration and validation handling.\n */\n@Component({\n selector: 'pdx-material-timepicker',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [matTimepicker]=\"picker\"\n [step]=\"stepAttribute()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n <mat-timepicker-toggle matSuffix [for]=\"picker\"></mat-timepicker-toggle>\n\n <mat-timepicker\n #picker\n [interval]=\"metadata()?.interval || null\"\n [options]=\"metadata()?.timeOptions || null\"\n [disableRipple]=\"metadata()?.disableRipple || false\"\n ></mat-timepicker>\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatTimepickerModule,\n MatIconModule,\n MatNativeDateModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialTimepickerComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"timePicker\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialTimepickerComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n override ngOnInit(): void {\n const meta = this.metadata();\n\n // Accept times in HH:mm or HH:mm:ss formats.\n this.control().addValidators(\n Validators.pattern(/^\\d{2}:\\d{2}(?::\\d{2})?$/),\n );\n\n if (meta?.stepMinute) {\n this.control().addValidators((control) => {\n const value = control.value as string | null;\n if (!value) return null;\n const minute = Number(value.split(':')[1]);\n return minute % meta.stepMinute! === 0 ? null : { stepMinute: true };\n });\n }\n\n if (meta?.showSeconds && meta.stepSecond) {\n this.control().addValidators((control) => {\n const value = control.value as string | null;\n if (!value) return null;\n const second = Number(value.split(':')[2] || 0);\n return second % meta.stepSecond! === 0 ? null : { stepSecond: true };\n });\n }\n\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n const classes = ['pdx-material-timepicker'];\n const meta = this.metadata();\n if (meta?.cssClass) classes.push(meta.cssClass);\n if (meta?.touchUi) classes.push('pdx-touch-ui');\n return classes;\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialTimepickerMetadata): void {\n this.setMetadata(metadata);\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n /** Calculates step attribute (seconds) based on metadata. */\n stepAttribute(): number | null {\n const meta = this.metadata();\n if (meta?.showSeconds && meta.stepSecond) {\n return meta.stepSecond;\n }\n if (meta?.stepMinute) {\n return meta.stepMinute * 60;\n }\n return null;\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialUrlInputMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for HTML URL inputs.\n *\n * Renders a `<mat-form-field>` containing an `<input type=\"url\">` element\n * with basic validation and hint support. Built on top of the\n * `SimpleBaseInputComponent` to leverage common functionality such as\n * reactive forms integration and error handling.\n */\n@Component({\n selector: 'pdx-url-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [type]=\"inputType()\"\n [autocomplete]=\"metadata()?.autocomplete || 'off'\"\n [spellcheck]=\"metadata()?.spellcheck ?? false\"\n [maxlength]=\"metadata()?.maxLength || null\"\n [minlength]=\"metadata()?.minLength || null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UrlInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"url\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class UrlInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n override ngOnInit(): void {\n this.control().addValidators(Validators.pattern(/^https?:\\/\\//i));\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-url-input'];\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialUrlInputMetadata): void {\n this.setMetadata(metadata);\n }\n\n // Error state matcher based on metadata strategy\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n}\n","import { Component, forwardRef, output, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { MaterialWeekInputMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Specialized input component for HTML week inputs.\n *\n * Renders a `<mat-form-field>` containing an `<input type=\"week\">` element\n * with optional min/max constraints, basic validation and hint support.\n * Built on top of the `SimpleBaseInputComponent` to reuse core features\n * like reactive forms integration and error handling.\n */\n@Component({\n selector: 'pdx-week-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [attr.placeholder]=\"\n shouldShowPlaceholder && placeholder ? placeholder : null\n \"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [type]=\"inputType()\"\n [min]=\"metadata()?.min || null\"\n [max]=\"metadata()?.max || null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n PraxisIconDirective,\n MatTooltipModule,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => WeekInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"week\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class WeekInputComponent extends SimpleBaseInputComponent {\n /** Emits whenever validation state changes. */\n readonly validationChange = output<ValidationErrors | null>();\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n override ngOnInit(): void {\n this.control().addValidators(Validators.pattern(/^\\d{4}-W\\d{2}$/));\n super.ngOnInit();\n }\n\n override async validateField(): Promise<ValidationErrors | null> {\n const errors = await super.validateField();\n this.validationChange.emit(errors);\n return errors;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-week-input'];\n }\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialWeekInputMetadata): void {\n this.setMetadata(metadata);\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n}\n","/**\n * Minimal Material Textarea component for isolation/debug\n */\n\nimport { AfterViewInit, Component, Input, forwardRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\nimport { MaterialTextareaMetadata } from '@praxisui/core';\nimport { computeEffectiveState } from '../../utils/field-state.util';\n\n@Component({\n selector: 'pdx-material-textarea',\n standalone: true,\n templateUrl: './material-textarea.component.html',\n styleUrls: ['./material-textarea.component.scss'],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n TextFieldModule,\n MatTooltipModule,\n PraxisIconDirective,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialTextareaComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"textarea\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialTextareaComponent extends SimpleBaseInputComponent implements AfterViewInit {\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n // Simple character count state (used only when enabled via metadata)\n charCount = 0;\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-material-textarea'];\n }\n\n setInputMetadata(metadata: MaterialTextareaMetadata): void {\n this.setMetadata(metadata);\n this._log('metadata:set', {\n name: (metadata as any)?.name,\n autoSize: (metadata as any)?.autoSize,\n rows: (metadata as any)?.rows,\n minRows: (metadata as any)?.minRows,\n maxRows: (metadata as any)?.maxRows,\n maxLength: (metadata as any)?.maxLength,\n hint: (metadata as any)?.hint,\n });\n }\n\n // ================================\n // Autosize (opt-in via metadata.autoSize)\n // ================================\n private viewReady = false;\n override ngAfterViewInit(): void {\n // Enable autosize only after initial render to avoid layout thrash\n queueMicrotask?.(() => (this.viewReady = true));\n this._log('view:ready', { autoResizeEnabled: this.autoResizeEnabled(), rows: this.getRowsAttr(), minRows: this.getMinRowsAttr(), maxRows: this.getMaxRowsAttr() });\n }\n\n autoResizeEnabled(): boolean {\n const md: any = this.metadata();\n return this.viewReady && !!md?.autoSize;\n }\n\n private toNumber(val: any, fallback: number): number {\n if (val === null || val === undefined || val === '') return fallback;\n const n = Number(val);\n return Number.isFinite(n) ? n : fallback;\n }\n\n getRowsAttr(): number {\n const md: any = this.metadata();\n const r = this.toNumber(md?.rows, 4);\n return Math.max(1, r);\n }\n\n getMinRowsAttr(): number {\n const md: any = this.metadata();\n const v = this.toNumber(md?.minRows, 4);\n return Math.max(1, v);\n }\n\n getMaxRowsAttr(): number {\n const min = this.getMinRowsAttr();\n const md: any = this.metadata();\n let v = this.toNumber(md?.maxRows, 12);\n if (!Number.isFinite(v) || v < min) v = min;\n return v;\n }\n\n // ================================\n // Character count (opt-in via metadata.showCharacterCount and maxLength)\n // ================================\n override ngOnInit(): void {\n super.ngOnInit();\n const v = this.control().value;\n this.charCount = (v == null ? '' : String(v)).length;\n this.control()\n .valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((val) => {\n this.charCount = (val == null ? '' : String(val)).length;\n this._log('value:change', { length: this.charCount });\n });\n }\n\n showCharacterCount(): boolean {\n const md: any = this.metadata();\n const enabled = !!md?.showCharacterCount;\n const max = this.toNumber(md?.maxLength, NaN);\n return enabled && Number.isFinite(max) && max > 0;\n }\n\n showStats(): boolean {\n const md: any = this.metadata();\n return !!md?.showStats; // opt‑in: exibe palavras/linhas\n }\n\n getWords(): number {\n const v = this.control().value;\n const s = (v == null ? '' : String(v)).trim();\n return s ? s.split(/\\s+/).length : 0;\n }\n\n getLines(): number {\n const v = this.control().value;\n const s = (v == null ? '' : String(v)) as string;\n return s.split('\\n').length;\n }\n\n isNearLimit(): boolean {\n if (!this.showCharacterCount()) return false;\n const max = this.toNumber((this.metadata() as any)?.maxLength, NaN);\n return Number.isFinite(max) && this.charCount >= Math.floor(0.8 * max) && this.charCount < max;\n }\n\n isAtOrOverLimit(): boolean {\n if (!this.showCharacterCount()) return false;\n const max = this.toNumber((this.metadata() as any)?.maxLength, NaN);\n return Number.isFinite(max) && this.charCount >= max;\n }\n\n // ================================\n // Mode helpers (plain | code | json | xml | sql | log | markdown)\n // ================================\n private getMode(): string {\n const md: any = this.metadata();\n const m = (md?.textAreaMode as string) || 'plain';\n return m.toLowerCase();\n }\n\n isCodeLikeMode(): boolean {\n const m = this.getMode();\n return ['code', 'json', 'xml', 'sql', 'log', 'markdown'].includes(m) || !!(this.metadata() as any)?.monospace;\n }\n\n effectiveSpellcheck(): boolean | null {\n const m = this.getMode();\n if (m === 'markdown') return false;\n if (this.isCodeLikeMode()) return false;\n const md: any = this.metadata();\n return md?.spellcheck ?? null;\n }\n\n effectiveWrap(): string | null {\n const m = this.getMode();\n if (m === 'markdown') return 'soft';\n if (this.isCodeLikeMode()) return 'off';\n const md: any = this.metadata();\n return md?.wrap || null;\n }\n\n // ================================\n // Enter/maxLines and Shift+Tab outdent (opt‑in via enableTabIndent/maxLines)\n // ================================\n private getCurrentLines(text: string): string[] { return text.split('\\n'); }\n private getLineStart(text: string, pos: number): number {\n const upto = text.slice(0, pos);\n const idx = upto.lastIndexOf('\\n');\n return idx === -1 ? 0 : idx + 1;\n }\n\n private outdentAtSelection(el: HTMLTextAreaElement): void {\n const control = this.control();\n const value = (control.value == null ? '' : String(control.value)) as string;\n const start = el.selectionStart ?? 0;\n const end = el.selectionEnd ?? start;\n const lineStart = this.getLineStart(value, start);\n const before = value.slice(0, lineStart);\n const line = value.slice(lineStart);\n const unit = this.getTabUnit();\n if (line.startsWith(unit)) {\n const newLine = line.slice(unit.length);\n const next = before + newLine;\n this.setValue(next);\n const delta = unit.length;\n queueMicrotask?.(() => {\n const newStart = Math.max(lineStart, start - delta);\n const newEnd = Math.max(lineStart, end - delta);\n el.setSelectionRange(newStart, newEnd);\n });\n this._log('key:shift-tab-outdent');\n }\n }\n\n // ================================\n // Logging helper\n // ================================\n private _log(event: string, data?: any): void {\n try {\n const name = (this.metadata() as any)?.name;\n // eslint-disable-next-line no-console\n console.debug('[Textarea]', event, { field: name, id: this.componentId(), ...(data || {}) });\n } catch {}\n }\n\n // ================================\n // UI helpers and events\n // ================================\n enableTabIndent(): boolean {\n const md: any = this.metadata();\n return !!md?.enableTabIndent; // opt‑in to avoid unexpected behavior\n }\n\n showClear(): boolean {\n const md: any = this.metadata();\n const cfg: any = md?.clearButton;\n if (!cfg || cfg.enabled !== true) return false;\n if (this.disabledMode || this.isReadonlyEffective() || this.presentationMode) return false;\n if (cfg.showOnlyWhenFilled) {\n const v = this.control().value;\n return v !== null && v !== undefined && String(v) !== '';\n }\n return true;\n }\n\n onClearClick(): void {\n this._log('clear:click');\n this.setValue('', { emitEvent: true });\n const control = this.control();\n control.markAsDirty();\n control.markAsTouched();\n }\n\n onFocusLog(): void { this._log('focus'); }\n onBlurLog(): void { this._log('blur'); }\n\n onTextareaKeydown(event: KeyboardEvent): void {\n const el = event.target as HTMLTextAreaElement;\n const control = this.control();\n const value = (control.value == null ? '' : String(control.value)) as string;\n\n // Max lines guard (opt-in via maxLines)\n const maxLines = this.toNumber((this.metadata() as any)?.maxLines, NaN);\n if (event.key === 'Enter' && Number.isFinite(maxLines)) {\n const currentLines = this.getCurrentLines(value).length;\n if (currentLines >= maxLines) {\n event.preventDefault();\n this._log('key:enter-blocked', { lines: currentLines, maxLines });\n return;\n }\n }\n\n // Tab/Shift+Tab indent/outdent (opt-in)\n if (event.key === 'Tab' && this.enableTabIndent()) {\n event.preventDefault();\n if (event.shiftKey) {\n this.outdentAtSelection(el);\n } else {\n const start = el.selectionStart ?? 0;\n const end = el.selectionEnd ?? start;\n const inserted = this.getTabUnit();\n const next = value.slice(0, start) + inserted + value.slice(end);\n this.setValue(next);\n queueMicrotask?.(() => {\n const pos = start + inserted.length;\n el.setSelectionRange(pos, pos);\n });\n this._log('key:tab-insert', { length: next.length });\n }\n }\n }\n\n private getTabSize(): number {\n const md: any = this.metadata();\n const size = Number(md?.tabSize);\n if (!Number.isFinite(size) || size < 1) return 2;\n if (size > 8) return 8;\n return Math.floor(size);\n }\n\n private getTabUnit(): string {\n return ' '.repeat(this.getTabSize());\n }\n\n onInputLog(_event: Event): void {\n // Base class already handles input → onChange/valueChanges; we just log here\n const len = (this.control().value == null ? '' : String(this.control().value)).length;\n this._log('input', { length: len });\n }\n\n onPaste(_event: ClipboardEvent): void {\n // update after the DOM applies paste\n setTimeout(() => {\n const val = this.control().value;\n this.charCount = (val == null ? '' : String(val)).length;\n this._log('paste', { length: this.charCount });\n });\n }\n\n onCut(_event: ClipboardEvent): void {\n setTimeout(() => {\n const val = this.control().value;\n this.charCount = (val == null ? '' : String(val)).length;\n this._log('cut', { length: this.charCount });\n });\n }\n}\n","<mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [class.pdx-textarea-auto-resize]=\"autoResizeEnabled()\"\n [class.pdx-textarea-spellcheck]=\"metadata()?.spellcheck\"\n [class.pdx-textarea-code]=\"isCodeLikeMode()\"\n>\n <mat-label>\n <span\n [matTooltip]=\"metadata()?.description || null\"\n [matTooltipDisabled]=\"!metadata()?.description\"\n matTooltipPosition=\"above\"\n >\n {{ label }}\n </span>\n </mat-label>\n <!-- Optional prefix icon -->\n @if (metadata()?.prefixIcon) {\n <mat-icon\n matPrefix\n [matTooltip]=\"'Icon: ' + metadata()?.prefixIcon\"\n matTooltipPosition=\"above\"\n [color]=\"iconPalette(metadata()?.prefixIconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\"\n [praxisIcon]=\"metadata()?.prefixIcon\"\n ></mat-icon>\n }\n\n <textarea\n matInput\n [formControl]=\"control()\"\n [attr.placeholder]=\"shouldShowPlaceholder && placeholder ? placeholder : null\"\n [readonly]=\"isReadonlyEffective()\"\n [rows]=\"getRowsAttr()\"\n [cdkTextareaAutosize]=\"autoResizeEnabled()\"\n [cdkAutosizeMinRows]=\"getMinRowsAttr()\"\n [cdkAutosizeMaxRows]=\"getMaxRowsAttr()\"\n [maxlength]=\"metadata()?.maxLength || null\"\n [minlength]=\"metadata()?.minLength || null\"\n [attr.aria-describedby]=\"metadata()?.hint ? componentId() + '-hint' : null\"\n [attr.spellcheck]=\"effectiveSpellcheck() === null ? null : effectiveSpellcheck()\"\n [attr.wrap]=\"effectiveWrap()\"\n [attr.cols]=\"metadata()?.cols || null\"\n [style.resize]=\"metadata()?.resize || null\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && hasValidationError())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (focus)=\"onFocusLog()\"\n (blur)=\"onBlurLog()\"\n (input)=\"onInputLog($event)\"\n (paste)=\"onPaste($event)\"\n (cut)=\"onCut($event)\"\n (keydown)=\"onTextareaKeydown($event)\"\n ></textarea>\n <!-- Optional suffix icon -->\n @if (metadata()?.suffixIcon) {\n <mat-icon\n matSuffix\n [matTooltip]=\"'Icon: ' + metadata()?.suffixIcon\"\n matTooltipPosition=\"above\"\n [color]=\"iconPalette(metadata()?.suffixIconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\"\n [praxisIcon]=\"metadata()?.suffixIcon\"\n ></mat-icon>\n }\n <!-- Optional clear button -->\n @if (showClear()) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"onClearClick()\"\n [matTooltip]=\"metadata()?.clearButton?.tooltip || 'Limpar'\"\n matTooltipPosition=\"above\"\n [attr.aria-label]=\"metadata()?.clearButton?.ariaLabel || 'Limpar'\"\n >\n <mat-icon\n [color]=\"iconPalette(metadata()?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.clearButton?.iconColor)\"\n [praxisIcon]=\"metadata()?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n @if (metadata()?.hint) {\n <mat-hint [id]=\"componentId() + '-hint'\" align=\"start\">{{ metadata()?.hint }}</mat-hint>\n }\n @if (showCharacterCount()) {\n <mat-hint align=\"end\" [class.pdx-character-count-warning]=\"isNearLimit()\" [class.pdx-character-count-error]=\"isAtOrOverLimit()\">\n {{ charCount }}/{{ metadata()?.maxLength }}\n </mat-hint>\n }\n @if (showStats()) {\n <mat-hint align=\"end\">{{ getWords() }} palavras • {{ getLines() }} linhas</mat-hint>\n }\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n</mat-form-field>\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialSelectMetadata, GenericCrudService } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport {\n SimpleBaseSelectComponent,\n SimpleSelectMetadata,\n} from '../../base/simple-base-select.component';\n\n@Component({\n selector: 'pdx-material-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatTooltipModule,\n MatIconModule,\n PraxisIconDirective,\n ],\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n floatLabel=\"auto\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n @if (metadata()?.prefixIcon) {\n <mat-icon\n matPrefix\n [color]=\"iconPalette(metadata()?.prefixIconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\"\n [praxisIcon]=\"metadata()!.prefixIcon\"\n ></mat-icon>\n }\n <mat-select\n [errorStateMatcher]=\"errorStateMatcher()\"\n [formControl]=\"control()\"\n [required]=\"metadata()?.required || false\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n <mat-option\n *ngIf=\"emptyOptionText()\"\n [value]=\"null\"\n (click)=\"selectOption({ label: emptyOptionText()!, value: null })\"\n >\n {{ emptyOptionText() }}\n </mat-option>\n <mat-option\n *ngFor=\"let option of options(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n >\n {{ option.label }}\n </mat-option>\n </mat-select>\n @if (metadata()?.suffixIcon) {\n <mat-icon\n matSuffix\n [color]=\"iconPalette(metadata()?.suffixIconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\"\n [praxisIcon]=\"metadata()!.suffixIcon\"\n ></mat-icon>\n }\n @if (showClear()) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"onClearClick()\"\n [matTooltip]=\"metadata()?.clearButton?.tooltip || null\"\n [attr.aria-label]=\"metadata()?.clearButton?.ariaLabel || 'Limpar'\"\n >\n <mat-icon\n [color]=\"iconPalette(metadata()?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.clearButton?.iconColor)\"\n [praxisIcon]=\"metadata()?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint>{{ metadata()!.hint }}</mat-hint>\n }\n </mat-form-field>\n `,\n providers: [\n GenericCrudService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialSelectComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"select\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialSelectComponent extends SimpleBaseSelectComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n override setSelectMetadata(metadata: SimpleSelectMetadata<any>): void {\n const matMetadata = metadata as MaterialSelectMetadata;\n this.devWarnSelectAliases(matMetadata, 'MaterialSelectComponent');\n const source = matMetadata.selectOptions ?? (matMetadata as any).options;\n const mappedOptions = source?.map((o: any) => ({\n label: o.label ?? o.text,\n value: o.value,\n disabled: o.disabled,\n }));\n\n super.setSelectMetadata({\n ...matMetadata,\n options: mappedOptions,\n multiple: false,\n searchable: matMetadata.searchable,\n resourcePath: matMetadata.resourcePath,\n filterCriteria: matMetadata.filterCriteria,\n optionLabelKey: matMetadata.optionLabelKey,\n optionValueKey: matMetadata.optionValueKey,\n });\n }\n\n override ngOnInit(): void {\n // Estados visuais/orquestração via FieldShell; evitar controle.disable()\n super.ngOnInit();\n }\n\n // Error state matcher used by mat-form-field wrapper\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n}\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatOptionSelectionChange } from '@angular/material/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialSelectMetadata, GenericCrudService } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport {\n SimpleBaseSelectComponent,\n SelectOption,\n SimpleSelectMetadata,\n} from '../../base/simple-base-select.component';\n\n@Component({\n selector: 'pdx-material-multi-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatTooltipModule,\n MatIconModule,\n MatButtonModule,\n PraxisIconDirective,\n ],\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n @if (metadata()?.prefixIcon) {\n <mat-icon\n matPrefix\n [color]=\"iconPalette(metadata()?.prefixIconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\"\n [praxisIcon]=\"metadata()!.prefixIcon\"\n ></mat-icon>\n }\n <mat-select\n [errorStateMatcher]=\"errorStateMatcher()\"\n multiple\n [formControl]=\"control()\"\n [required]=\"metadata()?.required || false\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n @if (selectAll()) {\n <mat-option\n (click)=\"$event.stopPropagation(); toggleSelectAll()\"\n [value]=\"null\"\n >\n {{ isAllSelected() ? '✓ ' : '' }}Selecionar todos\n </mat-option>\n }\n <mat-option\n *ngFor=\"let option of options(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [disabled]=\"isOptionDisabled(option)\"\n (onSelectionChange)=\"onOptionSelectionChange(option, $event)\"\n >\n {{ option.label }}\n </mat-option>\n </mat-select>\n @if (metadata()?.suffixIcon) {\n <mat-icon\n matSuffix\n [color]=\"iconPalette(metadata()?.suffixIconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\"\n [praxisIcon]=\"metadata()!.suffixIcon\"\n ></mat-icon>\n }\n @if (showClear()) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"onClearClick()\"\n [matTooltip]=\"metadata()?.clearButton?.tooltip || null\"\n [attr.aria-label]=\"metadata()?.clearButton?.ariaLabel || 'Limpar'\"\n >\n <mat-icon\n [color]=\"iconPalette(metadata()?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.clearButton?.iconColor)\"\n [praxisIcon]=\"metadata()?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint>{{ metadata()!.hint }}</mat-hint>\n }\n </mat-form-field>\n `,\n providers: [\n GenericCrudService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialMultiSelectComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"multi-select\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialMultiSelectComponent extends SimpleBaseSelectComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n override setSelectMetadata(metadata: SimpleSelectMetadata<any>): void {\n const matMetadata = metadata as MaterialSelectMetadata;\n this.devWarnSelectAliases(matMetadata, 'MaterialMultiSelectComponent');\n const source:\n | Array<{ label?: string; text?: string; value: any; disabled?: boolean }>\n | undefined = matMetadata.selectOptions ?? (matMetadata as any).options;\n const mappedOptions = source?.map((o) => ({\n label: o.label ?? o.text ?? '',\n value: o.value,\n disabled: o.disabled,\n }));\n\n super.setSelectMetadata({\n ...matMetadata,\n options: mappedOptions,\n multiple: true,\n searchable: matMetadata.searchable,\n selectAll: matMetadata.selectAll,\n maxSelections: matMetadata.maxSelections,\n resourcePath: matMetadata.resourcePath,\n filterCriteria: matMetadata.filterCriteria,\n optionLabelKey: matMetadata.optionLabelKey,\n optionValueKey: matMetadata.optionValueKey,\n });\n }\n\n /** Disables options when maxSelections reached */\n isOptionDisabled(option: SelectOption<any>): boolean {\n if (option.disabled) return true;\n if (!this.maxSelections()) return false;\n const current = Array.isArray(this.control().value)\n ? (this.control().value as any[])\n : [];\n const isSelected = current.includes(option.value);\n return !isSelected && current.length >= this.maxSelections()!;\n }\n\n /** Emits optionSelected when a user picks an option */\n onOptionSelectionChange(\n option: SelectOption<any>,\n event: MatOptionSelectionChange,\n ): void {\n if (event.isUserInput && event.source.selected) {\n this.optionSelected.emit(option);\n }\n }\n\n // Error state matcher for mat-form-field wrapper\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n}\n","import { Component, EventEmitter, forwardRef, signal, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { NestedTreeControl } from '@angular/cdk/tree';\nimport { MatTreeModule, MatTreeNestedDataSource } from '@angular/material/tree';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport {\n MaterialMultiSelectTreeMetadata,\n MaterialTreeNode,\n} from '@praxisui/core';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n/**\n * Material wrapper for hierarchical multi select using `mat-tree`.\n *\n * Supports recursive selection with checkboxes and optional\n * \"select all\" helper. Values are emitted as array of node values.\n */\n@Component({\n selector: 'pdx-material-multi-select-tree',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatTreeModule,\n MatCheckboxModule,\n MatIconModule,\n PraxisIconDirective,\n MatButtonModule,\n MatTooltipModule,\n ],\n template: `\n <div\n class=\"pdx-multi-select-tree-wrapper\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n @if (label) {\n <label class=\"pdx-tree-label\">{{ label }}</label>\n }\n @if (showClear()) {\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"onClearClick()\"\n [matTooltip]=\"$any(metadata())?.clearButton?.tooltip || null\"\n [attr.aria-label]=\"$any(metadata())?.clearButton?.ariaLabel || 'Limpar'\"\n style=\"float: right; margin-top: -4px;\"\n >\n <mat-icon\n [color]=\"iconPalette($any(metadata())?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor($any(metadata())?.clearButton?.iconColor)\"\n [praxisIcon]=\"$any(metadata())?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n\n @if (selectAll()) {\n <mat-checkbox\n class=\"pdx-select-all\"\n [checked]=\"isAllSelected()\"\n (change)=\"toggleSelectAll()\"\n [disabled]=\"control().disabled\"\n >\n {{ selectAllLabel() }}\n </mat-checkbox>\n }\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"pdx-tree-node\">\n <button\n mat-icon-button\n matTreeNodeToggle\n [attr.aria-label]=\"\n treeControl.isExpanded(node) ? 'Recolher' : 'Expandir'\n \"\n >\n <mat-icon class=\"mat-icon-rtl-mirror\" [praxisIcon]=\"treeControl.isExpanded(node) ? 'mi:expand_more' : 'mi:chevron_right'\"></mat-icon>\n </button>\n <mat-checkbox\n [checked]=\"selection.isSelected(node)\"\n [indeterminate]=\"descendantsPartiallySelected(node)\"\n (change)=\"toggleNode(node)\"\n [disabled]=\"isNodeDisabled(node)\"\n >\n {{ node.label }}\n </mat-checkbox>\n </div>\n <div\n class=\"pdx-tree-children\"\n role=\"group\"\n [class.pdx-tree-hidden]=\"!treeControl.isExpanded(node)\"\n >\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </mat-nested-tree-node>\n\n <mat-tree-node *matTreeNodeDef=\"let node\">\n <div class=\"pdx-tree-node\">\n <mat-checkbox\n [checked]=\"selection.isSelected(node)\"\n (change)=\"toggleNode(node)\"\n [disabled]=\"isNodeDisabled(node)\"\n >\n {{ node.label }}\n </mat-checkbox>\n </div>\n </mat-tree-node>\n </mat-tree>\n\n @if (hasValidationError()) {\n <div class=\"pdx-error\">{{ errorMessage() }}</div>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <div class=\"pdx-hint\">{{ metadata()!.hint }}</div>\n }\n </div>\n `,\n styles: [\n `\n .pdx-tree-children {\n margin-left: 24px;\n }\n .pdx-tree-hidden {\n display: none;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialMultiSelectTreeComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"multi-select-tree\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialMultiSelectTreeComponent extends SimpleBaseInputComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n /** Tree control managing expansion state */\n readonly treeControl = new NestedTreeControl<MaterialTreeNode>(\n (node) => node.children ?? [],\n );\n /** Data source bound to the tree */\n readonly dataSource = new MatTreeNestedDataSource<MaterialTreeNode>();\n /** Selection model for nodes */\n readonly selection = new SelectionModel<MaterialTreeNode>(true);\n\n private readonly parentMap = new Map<\n MaterialTreeNode,\n MaterialTreeNode | null\n >();\n private readonly valueMap = new Map<any, MaterialTreeNode>();\n\n /** Show select all option */\n readonly selectAll = signal<boolean>(false);\n /** Maximum allowed selections */\n readonly maxSelections = signal<number | null>(null);\n /** Label for select all option */\n readonly selectAllLabel = signal<string>('Selecionar todos');\n /** Emits whenever the selection changes */\n readonly selectionChange = new EventEmitter<any[]>();\n\n override onComponentInit(): void {\n const meta = this.metadata() as MaterialMultiSelectTreeMetadata | null;\n if (meta) {\n this.setTreeMetadata(meta);\n }\n }\n\n // Clear support (align with select-like components)\n showClear(): boolean {\n const cfg: any = (this.metadata() as any)?.clearButton;\n if (!cfg || cfg.enabled !== true) return false;\n if (cfg.showOnlyWhenFilled) {\n const v = this.control().value as any[];\n return Array.isArray(v) && v.length > 0;\n }\n return true;\n }\n\n onClearClick(): void {\n this.setValue([], { emitEvent: true });\n const control = this.control();\n control.markAsDirty();\n control.markAsTouched();\n }\n\n /** Configure component metadata */\n setTreeMetadata(metadata: MaterialMultiSelectTreeMetadata): void {\n const { options, nodes: rawNodes, ...rest } = metadata as any;\n const nodes = this.normalizeNodes(rawNodes ?? options ?? []);\n this.dataSource.data = nodes;\n this.selection.clear();\n this.parentMap.clear();\n this.valueMap.clear();\n this.buildParentMap(nodes, null);\n this.selectAll.set(!!metadata.selectAll);\n this.maxSelections.set(metadata.maxSelections ?? null);\n this.selectAllLabel.set(\n (metadata as any).selectAllLabel ?? 'Selecionar todos',\n );\n super.setMetadata({ ...rest, nodes });\n }\n\n private normalizeNodes(nodes: any[]): MaterialTreeNode[] {\n return nodes.map((n) => ({\n label: n.label ?? n.name ?? n.text ?? '',\n value: n.value,\n disabled: n.disabled,\n children: n.children ? this.normalizeNodes(n.children) : undefined,\n }));\n }\n\n /** Whether a node has children */\n hasChild = (_: number, node: MaterialTreeNode) =>\n !!node.children && node.children.length > 0;\n\n /** Toggle selection state of a node and its descendants */\n toggleNode(node: MaterialTreeNode): void {\n const willSelect = !this.selection.isSelected(node);\n if (willSelect && this.maxSelections()) {\n const nodesToSelect = [node, ...this.getDescendants(node)].filter(\n (n) => !this.selection.isSelected(n) && !this.isNodeDisabled(n),\n ).length;\n if (\n this.selection.selected.length + nodesToSelect >\n this.maxSelections()!\n ) {\n return;\n }\n }\n\n this.selection.toggle(node);\n const isSelected = this.selection.isSelected(node);\n this.toggleDescendants(node, isSelected);\n this.updateAllParents(node);\n this.emitValue();\n }\n\n private toggleDescendants(node: MaterialTreeNode, selected: boolean): void {\n node.children?.forEach((child) => {\n if (selected) {\n this.selection.select(child);\n } else {\n this.selection.deselect(child);\n }\n this.toggleDescendants(child, selected);\n });\n }\n\n private updateAllParents(node: MaterialTreeNode): void {\n let parent = this.getParent(node);\n while (parent) {\n this.updateParentSelection(parent);\n parent = this.getParent(parent);\n }\n }\n\n private updateParentSelection(node: MaterialTreeNode): void {\n const descendants = this.getDescendants(node);\n if (descendants.every((d) => this.selection.isSelected(d))) {\n this.selection.select(node);\n } else {\n this.selection.deselect(node);\n }\n }\n\n private getDescendants(node: MaterialTreeNode): MaterialTreeNode[] {\n const descendants: MaterialTreeNode[] = [];\n node.children?.forEach((child) => {\n descendants.push(child, ...this.getDescendants(child));\n });\n return descendants;\n }\n\n private getParent(node: MaterialTreeNode): MaterialTreeNode | null {\n return this.parentMap.get(node) ?? null;\n }\n\n private buildParentMap(\n nodes: MaterialTreeNode[],\n parent: MaterialTreeNode | null,\n ): void {\n nodes.forEach((n) => {\n this.parentMap.set(n, parent);\n this.valueMap.set(n.value, n);\n if (n.children) {\n this.buildParentMap(n.children, n);\n }\n });\n }\n\n /** Whether descendants of a node are partially selected */\n descendantsPartiallySelected(node: MaterialTreeNode): boolean {\n const descendants = this.getDescendants(node);\n const someSelected = descendants.some((d) => this.selection.isSelected(d));\n return (\n someSelected && !descendants.every((d) => this.selection.isSelected(d))\n );\n }\n\n private emitValue(): void {\n const values = this.selection.selected.map((n) => n.value);\n this.setValue(values);\n this.selectionChange.emit(values);\n }\n\n override writeValue(value: any): void {\n super.writeValue(value);\n this.selection.clear();\n if (Array.isArray(value)) {\n value.forEach((val) => {\n const node = this.valueMap.get(val);\n if (node) {\n this.selection.select(node);\n this.toggleDescendants(node, true);\n this.updateAllParents(node);\n }\n });\n }\n }\n\n /** Toggle select all nodes */\n toggleSelectAll(): void {\n if (this.isAllSelected()) {\n this.selection.clear();\n } else {\n this.selectAllRecursive(this.dataSource.data);\n }\n this.emitValue();\n }\n\n private selectAllRecursive(nodes: MaterialTreeNode[]): void {\n for (const node of nodes) {\n if (!this.isNodeDisabled(node)) {\n this.selection.select(node);\n this.updateAllParents(node);\n }\n if (node.children) {\n this.selectAllRecursive(node.children);\n }\n if (\n this.maxSelections() &&\n this.selection.selected.length >= this.maxSelections()!\n ) {\n return;\n }\n }\n }\n\n /** Check if all enabled nodes are selected */\n isAllSelected(): boolean {\n const nodes = this.getAllEnabledNodes(this.dataSource.data);\n return nodes.length > 0 && nodes.every((n) => this.selection.isSelected(n));\n }\n\n private getAllEnabledNodes(nodes: MaterialTreeNode[]): MaterialTreeNode[] {\n const list: MaterialTreeNode[] = [];\n nodes.forEach((n) => {\n if (!this.isNodeDisabled(n)) {\n list.push(n);\n }\n if (n.children) {\n list.push(...this.getAllEnabledNodes(n.children));\n }\n });\n return list;\n }\n\n /** Disable node when maxSelections reached */\n isNodeDisabled(node: MaterialTreeNode): boolean {\n if (this.control().disabled || node.disabled) return true;\n if (!this.maxSelections()) return false;\n const isSelected = this.selection.isSelected(node);\n return (\n !isSelected && this.selection.selected.length >= this.maxSelections()!\n );\n }\n\n /** CSS hook */\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-multi-select-tree'];\n }\n}\n","import { Component, ElementRef, forwardRef, signal, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { NestedTreeControl } from '@angular/cdk/tree';\nimport { MatTreeModule, MatTreeNestedDataSource } from '@angular/material/tree';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport {\n SimpleBaseSelectComponent,\n SimpleSelectMetadata,\n} from '../../base/simple-base-select.component';\nimport { MaterialTreeNode, MaterialTreeSelectMetadata } from '@praxisui/core';\n\n@Component({\n selector: 'pdx-material-tree-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatTreeModule,\n MatIconModule,\n PraxisIconDirective,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatTooltipModule,\n ],\n template: `\n <div\n class=\"pdx-tree-select-wrapper\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n @if (label) {\n <label class=\"pdx-tree-label\">{{ label }}</label>\n }\n @if (showClear()) {\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"onClearClick()\"\n [matTooltip]=\"metadata()?.clearButton?.tooltip || null\"\n [attr.aria-label]=\"metadata()?.clearButton?.ariaLabel || 'Limpar'\"\n style=\"float: right; margin-top: -4px;\"\n >\n <mat-icon\n [color]=\"iconPalette(metadata()?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.clearButton?.iconColor)\"\n [praxisIcon]=\"metadata()?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n\n @if (searchable()) {\n <mat-form-field appearance=\"outline\" class=\"pdx-tree-search\">\n <input\n matInput\n type=\"search\"\n [placeholder]=\"metadata()?.placeholder ?? 'Buscar'\"\n [value]=\"searchTerm()\"\n (input)=\"onSearch($any($event.target).value)\"\n />\n </mat-form-field>\n }\n\n <mat-tree\n [dataSource]=\"dataSource\"\n [treeControl]=\"treeControl\"\n role=\"tree\"\n >\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node; when: hasChild\"\n role=\"treeitem\"\n [attr.aria-expanded]=\"treeControl.isExpanded(node)\"\n [attr.aria-selected]=\"isSelected(node)\"\n >\n <div\n class=\"pdx-tree-node\"\n [class.pdx-selected]=\"isSelected(node)\"\n [attr.tabindex]=\"isNodeDisabled(node) ? -1 : 0\"\n (keydown)=\"handleKeydown($event, node)\"\n [attr.data-node-value]=\"node.value\"\n >\n <button\n mat-icon-button\n matTreeNodeToggle\n [attr.aria-label]=\"\n treeControl.isExpanded(node) ? 'Recolher' : 'Expandir'\n \"\n >\n <mat-icon class=\"mat-icon-rtl-mirror\" [praxisIcon]=\"treeControl.isExpanded(node) ? 'mi:expand_more' : 'mi:chevron_right'\"></mat-icon>\n </button>\n <span\n class=\"pdx-tree-node-label\"\n [class.pdx-node-disabled]=\"isNodeDisabled(node)\"\n (click)=\"selectNode(node)\"\n >\n {{ node.label }}\n </span>\n </div>\n <div\n class=\"pdx-tree-children\"\n role=\"group\"\n [class.pdx-tree-hidden]=\"!treeControl.isExpanded(node)\"\n >\n <ng-container matTreeNodeOutlet></ng-container>\n </div>\n </mat-nested-tree-node>\n\n <mat-tree-node\n *matTreeNodeDef=\"let node\"\n role=\"treeitem\"\n [attr.aria-selected]=\"isSelected(node)\"\n >\n <div\n class=\"pdx-tree-node\"\n [class.pdx-selected]=\"isSelected(node)\"\n [attr.tabindex]=\"isNodeDisabled(node) ? -1 : 0\"\n (keydown)=\"handleKeydown($event, node)\"\n [attr.data-node-value]=\"node.value\"\n >\n <span\n class=\"pdx-tree-node-label\"\n [class.pdx-node-disabled]=\"isNodeDisabled(node)\"\n (click)=\"selectNode(node)\"\n >\n {{ node.label }}\n </span>\n </div>\n </mat-tree-node>\n </mat-tree>\n\n @if (hasValidationError()) {\n <div class=\"pdx-error\">{{ errorMessage() }}</div>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <div class=\"pdx-hint\">{{ metadata()!.hint }}</div>\n }\n </div>\n `,\n styles: [\n `\n .pdx-tree-children {\n margin-left: 24px;\n }\n .pdx-tree-hidden {\n display: none;\n }\n .pdx-tree-node {\n display: flex;\n align-items: center;\n }\n .pdx-tree-node-label {\n cursor: pointer;\n }\n .pdx-node-disabled {\n pointer-events: none;\n opacity: 0.5;\n }\n .pdx-selected .pdx-tree-node-label {\n font-weight: 600;\n }\n .pdx-tree-search {\n width: 100%;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialTreeSelectComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"tree-select\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialTreeSelectComponent extends SimpleBaseSelectComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n readonly treeControl = new NestedTreeControl<MaterialTreeNode>(\n (node) => node.children ?? [],\n );\n readonly dataSource = new MatTreeNestedDataSource<MaterialTreeNode>();\n\n readonly leafOnly = signal<boolean>(true);\n readonly autoExpandOnSearch = signal<boolean>(true);\n readonly returnPath = signal<boolean>(false);\n readonly returnObject = signal<boolean>(false);\n\n private parentMap = new Map<MaterialTreeNode, MaterialTreeNode | null>();\n private allNodes: MaterialTreeNode[] = [];\n private selectedNode = signal<MaterialTreeNode | null>(null);\n\n constructor(private host: ElementRef<HTMLElement>) {\n super();\n }\n\n override onComponentInit(): void {\n const meta = this.metadata() as MaterialTreeSelectMetadata | null;\n if (meta) {\n this.setTreeMetadata(meta);\n }\n this.searchTermChange.subscribe((term) => this.applyFilter(term));\n }\n\n setTreeMetadata(metadata: MaterialTreeSelectMetadata): void {\n const {\n options,\n nodes: rawNodes,\n leafOnly,\n autoExpandOnSearch,\n returnPath,\n returnObject,\n ...rest\n } = metadata as any;\n const nodes = this.normalizeNodes(rawNodes ?? options ?? []);\n this.allNodes = nodes;\n this.parentMap.clear();\n this.buildParentMap(nodes, null);\n this.dataSource.data = nodes;\n this.leafOnly.set(leafOnly !== false);\n this.autoExpandOnSearch.set(autoExpandOnSearch !== false);\n this.returnPath.set(!!returnPath);\n this.returnObject.set(!!returnObject);\n super.setSelectMetadata({\n ...(rest as SimpleSelectMetadata<any>),\n multiple: false,\n searchable: true,\n });\n }\n\n private normalizeNodes(nodes: any[]): MaterialTreeNode[] {\n return nodes.map((n) => ({\n label: n.label ?? n.name ?? n.text ?? '',\n value: n.value,\n disabled: n.disabled,\n children: n.children ? this.normalizeNodes(n.children) : undefined,\n }));\n }\n\n private buildParentMap(\n nodes: MaterialTreeNode[],\n parent: MaterialTreeNode | null,\n ): void {\n for (const node of nodes) {\n this.parentMap.set(node, parent);\n if (node.children) {\n this.buildParentMap(node.children, node);\n }\n }\n }\n\n hasChild = (_: number, node: MaterialTreeNode) =>\n !!node.children && node.children.length > 0;\n\n selectNode(node: MaterialTreeNode): void {\n if (this.isNodeDisabled(node)) return;\n this.selectedNode.set(node);\n const value = this.resolveValue(node);\n this.setValue(value);\n this.selectionChange.emit(value);\n }\n\n private resolveValue(node: MaterialTreeNode): any {\n if (this.returnObject()) {\n return node;\n }\n if (this.returnPath()) {\n return this.getPath(node).map((n) => n.value);\n }\n return node.value;\n }\n\n private getPath(node: MaterialTreeNode): MaterialTreeNode[] {\n const path: MaterialTreeNode[] = [];\n let current: MaterialTreeNode | null = node;\n while (current) {\n path.unshift(current);\n current = this.parentMap.get(current) ?? null;\n }\n return path;\n }\n\n override isSelected(node: MaterialTreeNode): boolean {\n return this.selectedNode() === node;\n }\n\n isNodeDisabled(node: MaterialTreeNode): boolean {\n return (\n !!node.disabled ||\n (this.leafOnly() && !!node.children && node.children.length > 0)\n );\n }\n\n handleKeydown(event: KeyboardEvent, node: MaterialTreeNode): void {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.selectNode(node);\n break;\n }\n case 'ArrowRight': {\n if (this.hasChild(0, node)) {\n this.treeControl.expand(node);\n }\n break;\n }\n case 'ArrowLeft': {\n if (this.treeControl.isExpanded(node)) {\n this.treeControl.collapse(node);\n } else {\n const parent = this.parentMap.get(node);\n if (parent) {\n this.focusNode(parent);\n }\n }\n break;\n }\n case 'ArrowDown':\n case 'ArrowUp': {\n event.preventDefault();\n this.focusSiblingNode(node, event.key === 'ArrowDown');\n break;\n }\n }\n }\n\n private focusSiblingNode(node: MaterialTreeNode, next: boolean): void {\n const nodes = this.getVisibleNodes();\n const index = nodes.indexOf(node);\n const target = nodes[index + (next ? 1 : -1)];\n if (target) {\n this.focusNode(target);\n }\n }\n\n private focusNode(node: MaterialTreeNode): void {\n const el = this.host.nativeElement.querySelector<HTMLElement>(\n `[data-node-value=\"${node.value}\"]`,\n );\n el?.focus();\n }\n\n private getVisibleNodes(): MaterialTreeNode[] {\n return this.treeControl.dataNodes.filter((n) => {\n let parent = this.parentMap.get(n);\n while (parent) {\n if (!this.treeControl.isExpanded(parent)) {\n return false;\n }\n parent = this.parentMap.get(parent) ?? undefined;\n }\n return true;\n });\n }\n\n private applyFilter(term: string): void {\n const filtered = term\n ? this.filterNodes(this.allNodes, term.toLowerCase())\n : this.allNodes;\n this.dataSource.data = filtered;\n if (term && this.autoExpandOnSearch()) {\n this.treeControl.expandAll();\n } else {\n this.treeControl.collapseAll();\n }\n }\n\n private filterNodes(\n nodes: MaterialTreeNode[],\n term: string,\n ): MaterialTreeNode[] {\n const result: MaterialTreeNode[] = [];\n for (const node of nodes) {\n const children = node.children\n ? this.filterNodes(node.children, term)\n : [];\n const matches = node.label.toLowerCase().includes(term);\n if (matches || children.length) {\n result.push({\n ...node,\n children: children.length ? children : undefined,\n });\n }\n }\n return result;\n }\n}\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\nimport { ComponentMetadata } from '@praxisui/core';\n\n/**\n * Placeholder component for file upload fields.\n *\n * Currently provides a simple `<input type=\"file\">` element and basic\n * ControlValueAccessor integration. A full-featured implementation will\n * be provided in future iterations.\n */\n@Component({\n selector: 'pdx-material-file-upload',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatTooltipModule],\n template: `\n <div\n class=\"pdx-file-upload\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n <label [attr.for]=\"componentId()\">{{ label }}</label>\n <input\n [attr.id]=\"componentId()\"\n type=\"file\"\n (change)=\"onFileSelected($event)\"\n [formControl]=\"control()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n />\n @if (hasValidationError()) {\n <div class=\"error\">{{ errorMessage() }}</div>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <div class=\"hint\">{{ metadata()!.hint }}</div>\n }\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialFileUploadComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"file-upload\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialFileUploadComponent extends SimpleBaseInputComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n /**\n * Updates the control value when the user selects a file.\n */\n onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0] ?? null;\n this.setValue(file);\n }\n\n /**\n * Exposes metadata setter for integration with dynamic form loader.\n */\n setFileUploadMetadata(metadata: ComponentMetadata): void {\n const { placeholder, ...rest } = metadata as any;\n this.setMetadata(rest);\n }\n\n /**\n * CSS classes specific to the file upload wrapper.\n */\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-material-file-upload'];\n }\n}\n","import {\n Component,\n ElementRef,\n ViewChild,\n forwardRef,\n signal,\n Input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { GenericCrudService, OptionDTO, Page } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { OptionStore } from '../../base/option-store';\nimport { SimpleBaseSelectComponent } from '../../base/simple-base-select.component';\nimport { take } from 'rxjs';\n\n@Component({\n selector: 'pdx-material-searchable-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatTooltipModule,\n ],\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n @if (multiple()) {\n <mat-select\n multiple\n [formControl]=\"control()\"\n [required]=\"metadata()?.required || false\"\n (openedChange)=\"onOpened($event)\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n >\n <mat-option *ngIf=\"searchable()\" disabled>\n <input\n #searchInput\n matInput\n type=\"text\"\n (input)=\"onSearch($any($event.target).value)\"\n (keydown)=\"$event.stopPropagation()\"\n placeholder=\"Search...\"\n />\n </mat-option>\n <mat-option\n *ngFor=\"let option of filteredOptions(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n >\n {{ option.label }}\n </mat-option>\n <mat-option *ngIf=\"loading()\" disabled>Carregando...</mat-option>\n <mat-option\n *ngIf=\"!loading() && !endReached()\"\n (click)=\"loadNextPage()\"\n >\n Carregar mais\n </mat-option>\n <mat-option *ngIf=\"endReached() && options().length === 0\" disabled>\n Fim de lista\n </mat-option>\n </mat-select>\n } @else {\n <mat-select\n [formControl]=\"control()\"\n [required]=\"metadata()?.required || false\"\n (openedChange)=\"onOpened($event)\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n >\n <mat-option *ngIf=\"searchable()\" disabled>\n <input\n #searchInput\n matInput\n type=\"text\"\n (input)=\"onSearch($any($event.target).value)\"\n (keydown)=\"$event.stopPropagation()\"\n placeholder=\"Search...\"\n />\n </mat-option>\n <mat-option\n *ngIf=\"emptyOptionText()\"\n [value]=\"null\"\n (click)=\"selectOption({ label: emptyOptionText()!, value: null })\"\n >\n {{ emptyOptionText() }}\n </mat-option>\n <mat-option\n *ngFor=\"let option of filteredOptions(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n >\n {{ option.label }}\n </mat-option>\n <mat-option *ngIf=\"loading()\" disabled>Carregando...</mat-option>\n <mat-option\n *ngIf=\"!loading() && !endReached()\"\n (click)=\"loadNextPage()\"\n >\n Carregar mais\n </mat-option>\n <mat-option *ngIf=\"endReached() && options().length === 0\" disabled>\n Fim de lista\n </mat-option>\n </mat-select>\n }\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint>{{ metadata()!.hint }}</mat-hint>\n }\n </mat-form-field>\n `,\n providers: [\n GenericCrudService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialSearchableSelectComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"searchable-select\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialSearchableSelectComponent extends SimpleBaseSelectComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n @ViewChild('searchInput') private searchInput?: ElementRef<HTMLInputElement>;\n private readonly store = new OptionStore<any>();\n readonly endReached = signal(false);\n private initialLoadStrategy: 'open' | 'init' | 'none' = 'open';\n\n override setSelectMetadata(metadata: any): void {\n this.devWarnSelectAliases(metadata, 'MaterialSearchableSelectComponent');\n const source = metadata.selectOptions ?? metadata.options;\n const mappedOptions = source?.map((o: any) => ({\n label: o.label ?? o.text,\n value: o.value,\n disabled: o.disabled,\n }));\n\n super.setSelectMetadata({\n ...metadata,\n options: mappedOptions,\n searchable: true,\n multiple: metadata.multiple,\n selectAll: metadata.selectAll,\n maxSelections: metadata.maxSelections,\n resourcePath: metadata.resourcePath,\n filterCriteria: metadata.filterCriteria,\n optionLabelKey: metadata.optionLabelKey,\n optionValueKey: metadata.optionValueKey,\n });\n const loadOn =\n (metadata.loadOn as 'open' | 'init' | 'none' | undefined) ??\n (this.global.getDynamicFields()?.asyncSelect?.loadOn as any) ??\n 'open';\n this.initialLoadStrategy = loadOn;\n }\n\n override ngOnInit(): void {\n // Estados orquestrados pelo shell; não desabilitar controle\n super.ngOnInit();\n this.preloadSelected();\n // Perform initial load if configured as 'init'; otherwise defer to open\n queueMicrotask(() => {\n if (this.initialLoadStrategy === 'init' && this.resourcePath() && this.options().length === 0) {\n this.loadOptions(0);\n } else if (this.initialLoadStrategy === 'open') {\n try {\n const isDev = typeof (globalThis as any).ngDevMode !== 'undefined' ? !!(globalThis as any).ngDevMode : false;\n if (isDev || (globalThis as any).__PRAXIS_DEBUG_FIELDS__) {\n console.debug('[SearchableSelect] deferring first load until opened', {\n field: this.metadata()?.name,\n });\n }\n } catch {}\n }\n });\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n onOpened(opened: boolean): void {\n if (opened && this.searchable() && this.searchInput) {\n queueMicrotask(() => this.searchInput!.nativeElement.focus());\n }\n if (opened && this.resourcePath()) {\n if (this.initialLoadStrategy !== 'none' && this.options().length === 0 && !this.loading()) {\n this.loadOptions(0);\n }\n }\n }\n\n private getSelectedIds(): any[] {\n const val = this.control().value as any;\n if (!val) return [];\n if (Array.isArray(val)) return val.map((v) => v?.id ?? v);\n return [val?.id ?? val];\n }\n\n private preloadSelected(): void {\n if (!this.crudService) return;\n const ids = this.getSelectedIds();\n if (!ids.length) return;\n this.crudService\n .getOptionsByIds(ids)\n .pipe(take(1))\n .subscribe((opts: OptionDTO<any>[]) => {\n const returned = new Set(opts.map((o) => o.id));\n opts.forEach((o) => this.store.upsertById(o));\n ids\n .filter((id) => !returned.has(id))\n .forEach((id) =>\n this.store.upsertById(\n { id, label: `[Removido] (#${id})` } as OptionDTO<any>,\n true,\n ),\n );\n this.store.ensureVisible(ids as any);\n this.refreshOptions();\n });\n }\n\n private refreshOptions(): void {\n const mapped = this.store.items.map((o) => ({ label: o.label, value: o }));\n this.options.set(mapped);\n }\n\n protected override loadOptions(\n page = 0,\n searchTerm = this.searchTerm(),\n criteria: Record<string, any> = this.filterCriteria(),\n ): void {\n if (!this.crudService || !this.resourcePath()) {\n return;\n }\n\n const filter = { ...criteria };\n if (searchTerm) {\n filter[this.optionLabelKey()] = searchTerm;\n }\n\n const selected = this.getSelectedIds();\n const opts =\n page === 0 && selected.length ? { includeIds: selected } : undefined;\n\n this.loading.set(true);\n this.crudService\n .filterOptions(\n filter,\n { pageNumber: page, pageSize: this.pageSize() },\n opts as any,\n )\n .pipe(take(1))\n .subscribe({\n next: (resp: Page<OptionDTO<any>>) => {\n this.store.addPage(page, resp.content);\n this.store.ensureVisible(selected as any);\n this.endReached.set(resp.content.length < this.pageSize());\n this.refreshOptions();\n this.loading.set(false);\n this.error.set(null);\n // Phase 1: align with base by emitting when options are ready\n this.optionsLoaded.emit(this.options());\n this.markLoadedOnce();\n },\n error: (err: any) => {\n this.loading.set(false);\n this.error.set(err.message || 'Error loading options');\n },\n });\n }\n\n loadNextPage(): void {\n const next = this.pageIndex() + 1;\n this.pageIndex.set(next);\n this.loadOptions(next);\n }\n\n override onSearch(term: string): void {\n this.pageIndex.set(0);\n this.store.clearPages();\n this.endReached.set(false);\n super.onSearch(term);\n }\n\n protected override registerMatSelect(select: any): void {\n super.registerMatSelect(select);\n select.displayWith = (opt: any) => opt?.label ?? '';\n select.compareWith = (a: any, b: any) => a?.id === b?.id;\n }\n\n // ---------------------------------------------------------------------------\n // Phase 1: explicit reload API and dependency handling\n // ---------------------------------------------------------------------------\n public override reload(reset: boolean): void {\n if (!this.crudService || !this.resourcePath()) return;\n if (reset) {\n this.pageIndex.set(0);\n this.store.clearPages();\n this.endReached.set(false);\n }\n this.loadOptions(0, this.searchTerm(), this.filterCriteria());\n }\n\n protected override onDependenciesChanged(): void {\n const meta: any = this.metadata();\n const mode: 'respectLoadOn' | 'immediate' | 'manual' = (meta?.dependencyLoadOnChange as any) ?? 'respectLoadOn';\n if (!this.resourcePath()) return;\n if (mode === 'manual') return;\n if (mode === 'immediate') {\n this.reload(true);\n return;\n }\n // respectLoadOn: reload only after first load occurred (e.g., opened once)\n // Uses protected `global` from base class\n if (this.hasLoaded()) this.reload(true);\n }\n}\n","import { Component, forwardRef, signal, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\nimport { GenericCrudService, OptionDTO, Page, MaterialAutocompleteMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport {\n SimpleBaseSelectComponent,\n SimpleSelectMetadata,\n SelectOption,\n} from '../../base/simple-base-select.component';\nimport { OptionStore } from '../../base/option-store';\nimport { take } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'pdx-material-autocomplete',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatAutocompleteModule,\n MatTooltipModule,\n MatProgressSpinnerModule,\n ScrollingModule,\n MatIconModule,\n MatButtonModule,\n PraxisIconDirective,\n ],\n styleUrls: ['./material-autocomplete.component.scss'],\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n @if (metadata()?.prefixIcon) {\n <mat-icon\n matPrefix\n [color]=\"iconPalette(metadata()?.prefixIconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\"\n [praxisIcon]=\"metadata()!.prefixIcon\"\n ></mat-icon>\n }\n <input\n matInput\n [formControl]=\"control()\"\n [matAutocomplete]=\"auto\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n (input)=\"onSearch($any($event.target).value)\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayWith\"\n panelClass=\"pdx-autocomplete-panel\"\n (opened)=\"onOpened()\"\n >\n <cdk-virtual-scroll-viewport\n itemSize=\"48\"\n class=\"pdx-autocomplete-viewport\"\n (scrolledIndexChange)=\"onScroll($event)\"\n >\n <mat-option\n *cdkVirtualFor=\"let option of options(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </mat-option>\n </cdk-virtual-scroll-viewport>\n <mat-option *ngIf=\"loading()\" disabled>\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\" />\n </mat-option>\n <mat-option\n *ngIf=\"!loading() && options().length === 0\"\n disabled\n >\n No results\n </mat-option>\n </mat-autocomplete>\n @if (metadata()?.suffixIcon) {\n <mat-icon\n matSuffix\n [color]=\"iconPalette(metadata()?.suffixIconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\"\n [praxisIcon]=\"metadata()!.suffixIcon\"\n ></mat-icon>\n }\n @if (showClear()) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"onClearClick()\"\n [matTooltip]=\"metadata()?.clearButton?.tooltip || null\"\n [attr.aria-label]=\"metadata()?.clearButton?.ariaLabel || 'Limpar'\"\n >\n <mat-icon\n [color]=\"iconPalette(metadata()?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.clearButton?.iconColor)\"\n [praxisIcon]=\"metadata()?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint>{{ metadata()!.hint }}</mat-hint>\n }\n </mat-form-field>\n `,\n providers: [\n GenericCrudService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialAutocompleteComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"autocomplete\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialAutocompleteComponent extends SimpleBaseSelectComponent<OptionDTO<any>> {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n private readonly store = new OptionStore<any>();\n readonly endReached = signal(false);\n\n displayWith = (opt: OptionDTO<any>): string => opt?.label ?? '';\n private initialLoadStrategy: 'open' | 'init' | 'none' = 'open';\n\n override setSelectMetadata(metadata: SimpleSelectMetadata<any>): void {\n const matMetadata = metadata as MaterialAutocompleteMetadata;\n this.devWarnSelectAliases(matMetadata, 'MaterialAutocompleteComponent');\n const source = matMetadata.selectOptions ?? (matMetadata as any).options;\n const mappedOptions = source?.map((o: any) => ({\n label: o.label ?? o.text,\n value: o,\n disabled: o.disabled,\n }));\n\n super.setSelectMetadata({\n ...matMetadata,\n options: mappedOptions,\n multiple: false,\n searchable: true,\n resourcePath: matMetadata.resourcePath,\n filterCriteria: matMetadata.filterCriteria,\n optionLabelKey: matMetadata.optionLabelKey,\n optionValueKey: matMetadata.optionValueKey,\n displayWith: this.displayWith,\n compareWith: (a: any, b: any) => a?.id === b?.id,\n });\n const loadOn = (matMetadata as any)?.loadOn as 'open' | 'init' | 'none' | undefined;\n this.initialLoadStrategy = loadOn ?? 'open';\n }\n\n override ngOnInit(): void {\n // Evitar controle.disable(); estados orquestrados pelo shell\n super.ngOnInit();\n this.preloadSelected();\n queueMicrotask(() => {\n if (this.initialLoadStrategy === 'init' && this.resourcePath() && this.options().length === 0) {\n this.loadOptions(0);\n } else if (this.initialLoadStrategy === 'open') {\n try {\n const isDev = typeof (globalThis as any).ngDevMode !== 'undefined' ? !!(globalThis as any).ngDevMode : false;\n if (isDev || (globalThis as any).__PRAXIS_DEBUG_FIELDS__) {\n console.debug('[Autocomplete] deferring first load until opened', {\n field: this.metadata()?.name,\n });\n }\n } catch {}\n }\n });\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n private getSelectedId(): any {\n const val = this.control().value as any;\n return val?.id ?? val;\n }\n\n private preloadSelected(): void {\n if (!this.crudService) return;\n const id = this.getSelectedId();\n if (id == null) return;\n this.crudService\n .getOptionsByIds([id])\n .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n .subscribe((opts: OptionDTO<any>[]) => {\n const opt = opts[0];\n if (opt) {\n this.store.upsertById(opt);\n this.control().setValue(opt, { emitEvent: false });\n } else {\n this.store.upsertById(\n { id, label: `[Removido] (#${id})` } as OptionDTO<any>,\n true,\n );\n }\n this.store.ensureVisible([id]);\n this.refreshOptions();\n });\n }\n\n private refreshOptions(): void {\n const mapped: SelectOption<OptionDTO<any>>[] = this.store.items.map((o) => ({\n label: o.label,\n value: o,\n }));\n this.options.set(mapped);\n }\n\n protected override loadOptions(\n page = 0,\n searchTerm = this.searchTerm(),\n criteria: Record<string, any> = this.filterCriteria(),\n ): void {\n if (!this.crudService || !this.resourcePath()) {\n return;\n }\n\n const filter = { ...criteria };\n if (searchTerm) {\n filter[this.optionLabelKey()] = searchTerm;\n }\n\n const id = this.getSelectedId();\n const opts = page === 0 && id != null ? { includeIds: [id] } : undefined;\n\n this.loading.set(true);\n this.crudService\n .filterOptions(\n filter,\n { pageNumber: page, pageSize: this.pageSize() },\n opts as any,\n )\n .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (resp: Page<OptionDTO<any>>) => {\n this.store.addPage(page, resp.content);\n if (id != null) this.store.ensureVisible([id]);\n this.endReached.set(resp.content.length < this.pageSize());\n this.refreshOptions();\n this.loading.set(false);\n this.error.set(null);\n // Phase 1: align with base by emitting when options are ready\n this.optionsLoaded.emit(this.options());\n this.markLoadedOnce();\n },\n error: (err: any) => {\n this.loading.set(false);\n this.error.set(err.message || 'Error loading options');\n },\n });\n }\n\n onOpened(): void {\n if (this.initialLoadStrategy !== 'none' && this.options().length === 0 && !this.loading()) {\n this.loadOptions(0);\n }\n }\n\n onScroll(index: number): void {\n if (this.loading() || this.endReached()) return;\n if (index > this.options().length - 10) {\n const next = this.pageIndex() + 1;\n this.pageIndex.set(next);\n this.loadOptions(next);\n }\n }\n\n override onSearch(term: string): void {\n this.pageIndex.set(0);\n this.store.clearPages();\n this.endReached.set(false);\n super.onSearch(term);\n }\n\n override trackByOption(\n index: number,\n option: SelectOption<OptionDTO<any>>,\n ): any {\n return option.value.id;\n }\n\n // ---------------------------------------------------------------------------\n // Phase 1: explicit reload API and dependency handling\n // ---------------------------------------------------------------------------\n public override reload(reset: boolean): void {\n if (!this.crudService || !this.resourcePath()) return;\n if (reset) {\n this.pageIndex.set(0);\n this.store.clearPages();\n this.endReached.set(false);\n }\n this.loadOptions(0, this.searchTerm(), this.filterCriteria());\n }\n\n protected override onDependenciesChanged(): void {\n const meta: any = this.metadata();\n const mode: 'respectLoadOn' | 'immediate' | 'manual' = (meta?.dependencyLoadOnChange as any) ?? 'respectLoadOn';\n if (!this.resourcePath()) return;\n if (mode === 'manual') return;\n if (mode === 'immediate') {\n this.reload(true);\n return;\n }\n if (this.hasLoaded()) this.reload(true);\n }\n}\n","import {\n Component,\n ElementRef,\n ViewChild,\n forwardRef,\n signal,\n Input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ReactiveFormsModule,\n NG_VALUE_ACCESSOR,\n FormControl,\n} from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { GenericCrudService, OptionDTO, Page, CursorPage } from '@praxisui/core';\nimport { OptionStore } from '../../base/option-store';\nimport { SimpleBaseSelectComponent } from '../../base/simple-base-select.component';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport {\n debounceTime,\n distinctUntilChanged,\n switchMap,\n tap,\n catchError,\n} from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { of, EMPTY } from 'rxjs';\n\n@Component({\n selector: 'pdx-material-async-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n ],\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n <mat-select\n [errorStateMatcher]=\"errorStateMatcher()\"\n [formControl]=\"control()\"\n [multiple]=\"multiple()\"\n [required]=\"metadata()?.required || false\"\n (openedChange)=\"onOpened($event)\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n <mat-option disabled>\n <input\n #searchInput\n matInput\n type=\"text\"\n [formControl]=\"termControl\"\n (keydown)=\"handleKey($event)\"\n placeholder=\"Search...\"\n />\n </mat-option>\n <mat-option\n *ngIf=\"!multiple() && emptyOptionText()\"\n [value]=\"null\"\n (click)=\"selectOption({ label: emptyOptionText()!, value: null })\"\n >\n {{ emptyOptionText() }}\n </mat-option>\n <mat-option\n *ngFor=\"let option of options(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n (click)=\"selectOption(option)\"\n >\n {{ option.label }}\n </mat-option>\n <mat-option *ngIf=\"loading()\" disabled>\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\" />\n </mat-option>\n <mat-option\n *ngIf=\"!loading() && !endReached()\"\n (click)=\"loadMore()\"\n >\n Carregar mais\n </mat-option>\n <mat-option *ngIf=\"endReached() && options().length === 0\" disabled>\n Fim de lista\n </mat-option>\n </mat-select>\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint>{{ metadata()!.hint }}</mat-hint>\n }\n </mat-form-field>\n `,\n providers: [\n GenericCrudService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialAsyncSelectComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"async-select\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {\n private lastConfiguredPath?: string;\n private initialLoadStrategy: 'open' | 'init' | 'none' = 'open';\n private hasPerformedInitialLoad = false;\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n @ViewChild('searchInput') private searchInput?: ElementRef<HTMLInputElement>;\n readonly termControl = new FormControl<string>('');\n private readonly store = new OptionStore<any>();\n readonly endReached = signal(false);\n private cursorAfter: string | null = null;\n private cursorPageIndex = 0;\n private dataVersion?: string;\n private useCursor = false;\n // Uses protected `global` from base class\n\n override setSelectMetadata(metadata: any): void {\n // Normalize and store metadata without triggering the base's remote load\n this.devWarnSelectAliases(metadata, 'MaterialAsyncSelectComponent');\n const source = metadata.selectOptions ?? metadata.options;\n const mappedOptions = source?.map((o: any) => ({\n label: o.label ?? o.text,\n value: o.value,\n disabled: o.disabled,\n }));\n\n // useCursor: respect metadata, else fallback to global setting\n if (metadata.useCursor === undefined) {\n this.useCursor = !!this.global.getDynamicFields()?.asyncSelect?.useCursor;\n } else {\n this.useCursor = !!metadata.useCursor;\n }\n\n // Apply base input metadata (placeholder, validators, a11y, etc.)\n super.setMetadata({ ...metadata });\n\n // Local select configuration\n if (mappedOptions) this.options.set(mappedOptions);\n this.multiple.set(!!metadata.multiple);\n this.searchable.set(true);\n this.selectAll.set(!!metadata.selectAll);\n this.maxSelections.set(metadata.maxSelections ?? null);\n this.emptyOptionText.set(this.multiple() ? null : (metadata.emptyOptionText ?? null));\n // Load strategy: default 'open' to avoid unnecessary requests\n const loadOn =\n (metadata.loadOn as 'open' | 'init' | 'none' | undefined) ??\n (this.global.getDynamicFields()?.asyncSelect?.loadOn as any) ??\n 'open';\n this.initialLoadStrategy = loadOn;\n\n // Remote config without auto-loading here (avoid duplicate /filter on init)\n const path = metadata.resourcePath as string | undefined;\n if (path) {\n this.resourcePath.set(path);\n this.filterCriteria.set(metadata.filterCriteria ?? {});\n if (metadata.optionLabelKey) this.optionLabelKey.set(metadata.optionLabelKey);\n if (metadata.optionValueKey) this.optionValueKey.set(metadata.optionValueKey);\n if (this.lastConfiguredPath !== path) {\n this.configureCrudService(path);\n this.lastConfiguredPath = path;\n }\n }\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n // Evitar desabilitar o controle; o shell aplica overlay/estilo\n this.preloadSelected();\n this.termControl.valueChanges\n .pipe(\n debounceTime(300),\n distinctUntilChanged(),\n switchMap(() => {\n this.pageIndex.set(0);\n this.cursorAfter = null;\n this.cursorPageIndex = 0;\n this.store.clearPages();\n this.endReached.set(false);\n return this.runQuery(true);\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n\n // Perform initial load on init if configured so, otherwise load on first open\n queueMicrotask(() => {\n if (this.initialLoadStrategy === 'init' && this.options().length === 0) {\n this.pageIndex.set(0);\n this.cursorAfter = null;\n this.cursorPageIndex = 0;\n this.store.clearPages();\n this.endReached.set(false);\n this.runQuery(true)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({ complete: () => (this.hasPerformedInitialLoad = true) });\n } else if (this.initialLoadStrategy === 'open') {\n try {\n const isDev = typeof (globalThis as any).ngDevMode !== 'undefined' ? !!(globalThis as any).ngDevMode : false;\n if (isDev || (globalThis as any).__PRAXIS_DEBUG_FIELDS__) {\n console.debug('[AsyncSelect] deferring first load until opened', {\n field: this.metadata()?.name,\n });\n }\n } catch {}\n }\n });\n }\n\n onOpened(opened: boolean): void {\n if (opened && this.searchInput) {\n queueMicrotask(() => this.searchInput!.nativeElement.focus());\n // Lazy-load on first open if not already loaded\n if (this.initialLoadStrategy !== 'none' && this.options().length === 0 && !this.loading()) {\n // Use explicit reload to ensure hasPerformedInitialLoad is set on success/complete\n this.reload(true);\n }\n }\n }\n\n private getSelectedIds(): any[] {\n const val = this.control().value as any;\n if (!val) return [];\n if (Array.isArray(val)) return val.map((v) => v?.id ?? v);\n return [val?.id ?? val];\n }\n\n private preloadSelected(): void {\n if (!this.crudService) return;\n const ids = this.getSelectedIds();\n if (!ids.length) return;\n this.crudService\n .getOptionsByIds(ids)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((opts: OptionDTO<any>[]) => {\n const returned = new Set(opts.map((o) => o.id));\n opts.forEach((o) => this.store.upsertById(o));\n ids\n .filter((id) => !returned.has(id))\n .forEach((id) =>\n this.store.upsertById(\n { id, label: `[Removido] (#${id})` } as OptionDTO<any>,\n true,\n ),\n );\n this.store.ensureVisible(ids as any);\n this.refreshOptions();\n });\n }\n\n private refreshOptions(): void {\n const mapped = this.store.items.map((o) => ({ label: o.label, value: o }));\n this.options.set(mapped);\n }\n\n private runQuery(reset: boolean): import('rxjs').Observable<unknown> {\n if (!this.crudService || !this.resourcePath()) {\n return of(void 0);\n }\n const term = this.termControl.value || '';\n const filter = { ...this.filterCriteria() } as any;\n if (term) {\n filter[this.optionLabelKey()] = term;\n }\n const selected = this.getSelectedIds();\n const include =\n reset && !this.useCursor && selected.length ? { includeIds: selected } : undefined;\n const observeVersion = reset;\n this.loading.set(true);\n if (this.useCursor) {\n const req = { size: this.pageSize(), after: reset ? undefined : this.cursorAfter ?? undefined };\n return this.crudService\n .filterByCursor(filter, req)\n .pipe(\n tap((resp: CursorPage<OptionDTO<any>>) => {\n this.cursorAfter = resp.next ?? null;\n this.store.addPage(this.cursorPageIndex++, resp.content);\n this.store.ensureVisible(selected as any);\n this.endReached.set(!resp.next);\n this.refreshOptions();\n this.loading.set(false);\n this.error.set(null);\n }),\n catchError((err) => {\n this.loading.set(false);\n this.error.set(err.message || 'Error loading options');\n return EMPTY;\n }),\n );\n }\n const page = this.pageIndex();\n return this.crudService\n .filterOptions(filter, { pageNumber: page, pageSize: this.pageSize() }, {\n ...(include || {}),\n observeVersionHeader: observeVersion,\n })\n .pipe(\n tap((resp: Page<OptionDTO<any>> & { dataVersion?: string }) => {\n if (resp.dataVersion) this.dataVersion = resp.dataVersion;\n this.store.addPage(page, resp.content);\n this.store.ensureVisible(selected as any);\n this.endReached.set(resp.content.length < this.pageSize());\n this.refreshOptions();\n this.loading.set(false);\n this.error.set(null);\n }),\n catchError((err) => {\n this.loading.set(false);\n this.error.set(err.message || 'Error loading options');\n return EMPTY;\n }),\n );\n }\n\n loadMore(): void {\n if (this.endReached()) return;\n if (!this.useCursor) {\n this.pageIndex.set(this.pageIndex() + 1);\n }\n this.runQuery(false).subscribe();\n }\n\n retry(): void {\n this.runQuery(true).subscribe();\n }\n\n handleKey(event: KeyboardEvent): void {\n if (!this.matSelect) return;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Enter') {\n this.matSelect.open();\n } else if (event.key === 'Escape') {\n this.matSelect.close();\n }\n }\n\n protected override registerMatSelect(select: any): void {\n super.registerMatSelect(select);\n select.displayWith = (opt: any) => opt?.label ?? '';\n select.compareWith = (a: any, b: any) => a?.id === b?.id;\n }\n\n // ---------------------------------------------------------------------------\n // Phase 1: explicit reload API and dependency handling\n // ---------------------------------------------------------------------------\n public override reload(reset: boolean): void {\n if (!this.crudService || !this.resourcePath()) return;\n if (reset) {\n this.pageIndex.set(0);\n this.cursorAfter = null;\n this.cursorPageIndex = 0;\n this.store.clearPages();\n this.endReached.set(false);\n }\n this.runQuery(true)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n complete: () => {\n this.hasPerformedInitialLoad = true;\n this.markLoadedOnce();\n },\n });\n }\n\n protected override onDependenciesChanged(): void {\n const meta: any = this.metadata();\n const mode: 'respectLoadOn' | 'immediate' | 'manual' = (meta?.dependencyLoadOnChange as any) ?? 'respectLoadOn';\n if (!this.resourcePath()) return;\n if (mode === 'manual') return;\n if (mode === 'immediate') {\n this.reload(true);\n return;\n }\n // respectLoadOn\n if (this.hasPerformedInitialLoad) {\n this.reload(true);\n }\n }\n}\n\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { MaterialRadioMetadata, GenericCrudService } from '@praxisui/core';\nimport {\n SimpleBaseSelectComponent,\n SimpleSelectMetadata,\n} from '../../base/simple-base-select.component';\n\n@Component({\n selector: 'pdx-material-radio-group',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatRadioModule,\n MatTooltipModule,\n ],\n template: `\n <div class=\"pdx-radio-group-wrapper\">\n @if (label) {\n <label class=\"pdx-radio-label\">{{ label }}</label>\n }\n <mat-radio-group\n [formControl]=\"control()\"\n [color]=\"metadata()?.color\"\n [labelPosition]=\"metadata()?.labelPosition || 'after'\"\n [class.pdx-radio-horizontal]=\"metadata()?.layout === 'horizontal'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n <mat-radio-button\n *ngFor=\"let option of options(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n (change)=\"selectOption(option)\"\n >\n {{ option.label }}\n </mat-radio-button>\n </mat-radio-group>\n @if (hasValidationError()) {\n <div class=\"pdx-error\">{{ errorMessage() }}</div>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <div class=\"pdx-hint\">{{ metadata()!.hint }}</div>\n }\n </div>\n `,\n styles: [\n `\n .pdx-radio-group-wrapper {\n display: flex;\n align-items: center;\n width: 100%;\n min-height: 56px; /* alinhar com altura do MatFormField */\n padding: 4px 0;\n }\n :host { display: block; width: 100%; }\n mat-radio-group { width: 100%; }\n `,\n ],\n providers: [\n GenericCrudService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialRadioGroupComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.aria-disabled]': 'disabledMode ? \"true\" : null',\n '[attr.data-field-type]': '\"radio\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialRadioGroupComponent extends SimpleBaseSelectComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n override setSelectMetadata(metadata: SimpleSelectMetadata<any>): void {\n const matMetadata = metadata as MaterialRadioMetadata;\n this.devWarnSelectAliases(matMetadata, 'MaterialRadioGroupComponent');\n const source = matMetadata.radioOptions ?? (matMetadata as any).options;\n const mappedOptions = source?.map((o: any) => ({\n label: o.label ?? o.text,\n value: o.value,\n disabled: o.disabled,\n }));\n\n super.setSelectMetadata({\n ...matMetadata,\n options: mappedOptions,\n multiple: false,\n resourcePath: matMetadata.resourcePath,\n filterCriteria: matMetadata.filterCriteria,\n optionLabelKey: matMetadata.optionLabelKey,\n optionValueKey: matMetadata.optionValueKey,\n });\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-simple-select', 'pdx-material-radio-group'];\n }\n}\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { MaterialCheckboxMetadata, GenericCrudService } from '@praxisui/core';\nimport {\n SimpleBaseSelectComponent,\n SimpleSelectMetadata,\n SelectOption,\n} from '../../base/simple-base-select.component';\n\n@Component({\n selector: 'pdx-material-checkbox-group',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatCheckboxModule,\n MatTooltipModule,\n ],\n template: `\n <div\n class=\"pdx-checkbox-group-wrapper\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n @if (label) {\n <label class=\"pdx-checkbox-label\">{{ label }}</label>\n }\n @if (selectAll()) {\n <mat-checkbox\n [checked]=\"isAllSelected()\"\n (change)=\"toggleSelectAll()\"\n [color]=\"metadata()?.color\"\n [labelPosition]=\"metadata()?.labelPosition || 'after'\"\n >\n Selecionar todos\n </mat-checkbox>\n }\n <div\n class=\"pdx-checkbox-options\"\n [class.pdx-checkbox-horizontal]=\"metadata()?.layout === 'horizontal'\"\n >\n <mat-checkbox\n *ngFor=\"let option of options(); trackBy: trackByOption\"\n [checked]=\"isSelected(option.value)\"\n [disabled]=\"isOptionDisabled(option)\"\n (change)=\"selectOption(option)\"\n [color]=\"metadata()?.color\"\n [labelPosition]=\"metadata()?.labelPosition || 'after'\"\n >\n {{ option.label }}\n </mat-checkbox>\n </div>\n @if (hasValidationError()) {\n <div class=\"pdx-error\">{{ errorMessage() }}</div>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <div class=\"pdx-hint\">{{ metadata()!.hint }}</div>\n }\n </div>\n `,\n providers: [\n GenericCrudService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialCheckboxGroupComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.aria-disabled]': 'disabledMode ? \"true\" : null',\n '[attr.data-field-type]': '\"checkbox\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialCheckboxGroupComponent extends SimpleBaseSelectComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n override setSelectMetadata(metadata: SimpleSelectMetadata<any>): void {\n const matMetadata = metadata as MaterialCheckboxMetadata;\n this.devWarnSelectAliases(matMetadata, 'MaterialCheckboxGroupComponent');\n const source = matMetadata.checkboxOptions ?? (matMetadata as any).options;\n const mappedOptions = source?.map((o: any) => ({\n label: o.label ?? o.text,\n value: o.value,\n disabled: o.disabled,\n }));\n\n super.setSelectMetadata({\n ...matMetadata,\n options: mappedOptions,\n multiple: true,\n searchable: matMetadata.searchable,\n selectAll: matMetadata.selectAll,\n maxSelections: matMetadata.maxSelections,\n resourcePath: matMetadata.resourcePath,\n filterCriteria: matMetadata.filterCriteria,\n optionLabelKey: matMetadata.optionLabelKey,\n optionValueKey: matMetadata.optionValueKey,\n });\n }\n\n /** Disables options when maxSelections reached */\n isOptionDisabled(option: SelectOption<any>): boolean {\n if (option.disabled) return true;\n if (!this.maxSelections()) return false;\n const current = Array.isArray(this.control().value)\n ? (this.control().value as any[])\n : [];\n const isSelected = current.includes(option.value);\n return !isSelected && current.length >= this.maxSelections()!;\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-simple-select', 'pdx-material-checkbox-group'];\n }\n}\n","import { Component, forwardRef, signal, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatChipsModule, MatChipInputEvent } from '@angular/material/chips';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\n\nimport { GenericCrudService, MaterialChipsMetadata } from '@praxisui/core';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport {\n SimpleBaseSelectComponent,\n SimpleSelectMetadata,\n SelectOption,\n} from '../../base/simple-base-select.component';\n\n@Component({\n selector: 'pdx-material-chips',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatChipsModule,\n MatInputModule,\n MatAutocompleteModule,\n MatTooltipModule,\n MatIconModule,\n PraxisIconDirective,\n MatProgressSpinnerModule,\n ],\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n <mat-chip-grid #chipGrid>\n <mat-chip-row\n *ngFor=\"let option of selectedOptions(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [removable]=\"removable()\"\n (removed)=\"removeChip(option)\"\n >\n {{ option.label }}\n <button matChipRemove *ngIf=\"removable()\">\n <mat-icon [praxisIcon]=\"'mi:cancel'\"></mat-icon>\n </button>\n </mat-chip-row>\n <input\n [matChipInputFor]=\"chipGrid\"\n [matChipInputAddOnBlur]=\"addOnBlur()\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeys\"\n [matAutocomplete]=\"auto\"\n [required]=\"metadata()?.required || false\"\n (input)=\"onSearch($any($event.target).value)\"\n (matChipInputTokenEnd)=\"onInputTokenEnd($event)\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n </mat-chip-grid>\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayOption\"\n (optionSelected)=\"selectOption($event.option.value)\"\n >\n <mat-option *ngIf=\"loading()\" disabled>\n <mat-progress-spinner diameter=\"20\" mode=\"indeterminate\" />\n </mat-option>\n <ng-container *ngIf=\"!loading()\">\n <mat-option *ngIf=\"filteredOptions().length === 0\" disabled>\n No results\n </mat-option>\n <mat-option\n *ngFor=\"let option of filteredOptions(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint>{{ metadata()!.hint }}</mat-hint>\n }\n @if (metadata()?.maxSelections) {\n <mat-hint align=\"end\">\n {{ control().value?.length || 0 }}/{{ metadata()!.maxSelections }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n providers: [\n GenericCrudService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialChipsComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"chipInput\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialChipsComponent extends SimpleBaseSelectComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n readonly removable = signal(true);\n readonly addOnBlur = signal(false);\n readonly separatorKeys = [ENTER, COMMA];\n\n displayOption = (value: any): string => {\n const option = this.options().find((o) => o.value === value);\n return option ? option.label : '';\n };\n\n selectedOptions(): SelectOption[] {\n const current = this.control().value as any[];\n return this.options().filter(\n (o) => Array.isArray(current) && current.includes(o.value),\n );\n }\n\n removeChip(option: SelectOption): void {\n this.selectOption(option);\n }\n\n onInputTokenEnd(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n const option = this.options().find(\n (o) => o.label === value || o.value === value,\n );\n if (option) {\n this.selectOption(option);\n }\n }\n event.chipInput?.clear();\n this.searchTerm.set('');\n }\n\n override setSelectMetadata(metadata: SimpleSelectMetadata<any>): void {\n const matMetadata = metadata as MaterialChipsMetadata;\n this.devWarnSelectAliases(matMetadata, 'MaterialChipsComponent');\n const source = matMetadata.selectOptions ?? (matMetadata as any).options;\n const mappedOptions = source?.map((o: any) => ({\n label: o.label ?? o.text,\n value: o.value,\n disabled: o.disabled,\n }));\n\n super.setSelectMetadata({\n ...matMetadata,\n options: mappedOptions,\n multiple: true,\n searchable: true,\n resourcePath: matMetadata.resourcePath,\n filterCriteria: matMetadata.filterCriteria,\n optionLabelKey: matMetadata.optionLabelKey,\n optionValueKey: matMetadata.optionValueKey,\n });\n\n this.removable.set(matMetadata.removable ?? true);\n this.addOnBlur.set(matMetadata.addOnBlur ?? false);\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n}\n","/**\n * @fileoverview Serviço para resolução de ações customizadas por string reference\n * \n * Permite registrar e executar ações dinâmicas definidas por string no metadata.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { PraxisDialog, PraxisDialogConfig } from '@praxisui/dialog';\nimport { Router } from '@angular/router';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { firstValueFrom } from 'rxjs';\n\n/**\n * Context object passed to action handlers containing all relevant data\n * about the component state and form context when an action is executed.\n * \n * This interface provides maximum flexibility for action handlers to access\n * both component-specific data and broader form/application context.\n * \n * @example Basic usage in action handler\n * ```typescript\n * this.registerAction('customAction', async (context: ActionContext) => {\n * console.log('Field:', context.fieldName);\n * console.log('Value:', context.fieldValue);\n * console.log('Metadata:', context.metadata);\n * return { success: true, data: 'Action completed' };\n * });\n * ```\n * \n * @example Using actionParam for parameterized actions\n * ```typescript\n * // Metadata configuration: action: \"navigate:/dashboard\"\n * this.registerAction('navigate', async (context: ActionContext) => {\n * const url = context.actionParam; // \"/dashboard\"\n * await this.router.navigate([url]);\n * return { success: true };\n * });\n * ```\n */\nexport interface ActionContext {\n /** \n * Name/identifier of the field that triggered the action.\n * \n * Useful for:\n * - Logging and debugging\n * - Field-specific business logic\n * - Form validation context\n * \n * @example \"email\", \"firstName\", \"submitButton\"\n */\n fieldName?: string;\n \n /** \n * Current value of the field that triggered the action.\n * \n * For different field types:\n * - Input fields: string value\n * - Checkboxes: boolean\n * - Select: selected option value\n * - Buttons: typically undefined\n * \n * @example \"john@example.com\", true, [\"option1\", \"option2\"]\n */\n fieldValue?: any;\n \n /** \n * Complete metadata configuration object for the field.\n * \n * Contains all field configuration including:\n * - Label, placeholder, validation rules\n * - UI configuration (appearance, icons, etc.)\n * - Custom properties specific to the field\n * \n * @example MaterialButtonMetadata, MaterialInputMetadata, etc.\n */\n metadata?: any;\n \n /** \n * Complete form data object containing all field values.\n * \n * Useful for:\n * - Cross-field validation\n * - Conditional logic based on other fields\n * - Form-wide operations\n * \n * @example { email: \"user@example.com\", name: \"John\", age: 30 }\n */\n formData?: any;\n \n /** \n * Reference to the Angular component instance that triggered the action.\n * \n * Provides access to:\n * - Component methods and properties\n * - ElementRef for DOM manipulation\n * - Angular lifecycle and services\n * \n * @example MaterialButtonComponent, MaterialInputComponent instances\n */\n componentInstance?: any;\n \n /** \n * Parameter extracted from action reference after colon separator.\n * \n * When action is defined as \"actionName:parameter\", this contains the parameter part.\n * Enables parameterized actions without separate configuration.\n * \n * @example \n * - Action: \"navigate:/dashboard\" → actionParam: \"/dashboard\"\n * - Action: \"showAlert:Data saved successfully\" → actionParam: \"Data saved successfully\"\n * - Action: \"download:https://example.com/file.pdf\" → actionParam: \"https://example.com/file.pdf\"\n */\n actionParam?: string;\n}\n\n/**\n * Result object returned by action handlers indicating success/failure\n * and any associated data or error information.\n * \n * Provides a standardized way for action handlers to communicate results\n * back to the calling component for appropriate user feedback.\n * \n * @example Successful action result\n * ```typescript\n * return {\n * success: true,\n * data: 'Form submitted successfully',\n * redirect: '/dashboard'\n * };\n * ```\n * \n * @example Failed action result\n * ```typescript\n * return {\n * success: false,\n * error: 'Validation failed: Email is required'\n * };\n * ```\n */\nexport interface ActionResult {\n /** \n * Indicates whether the action completed successfully.\n * \n * - true: Action completed without errors\n * - false: Action failed or encountered an error\n * \n * Used by components to determine appropriate user feedback\n * (success message, error display, etc.)\n */\n success: boolean;\n \n /** \n * Optional data returned by successful actions.\n * \n * Can contain:\n * - Success messages for user display\n * - Result data from API calls\n * - State information for further processing\n * - Any serializable data relevant to the action\n * \n * @example \"Form submitted\", { userId: 123 }, [\"item1\", \"item2\"]\n */\n data?: any;\n \n /** \n * Error message when action fails (success = false).\n * \n * Should contain:\n * - User-friendly error descriptions\n * - Validation error messages\n * - Technical error details (for logging)\n * \n * Displayed to users or logged for debugging purposes.\n * \n * @example \"Network error occurred\", \"Invalid email format\", \"Access denied\"\n */\n error?: string;\n \n /** \n * Optional URL for automatic navigation after action completion.\n * \n * When provided, the calling component may automatically redirect\n * the user to this URL after the action succeeds.\n * \n * Useful for:\n * - Post-submit redirects\n * - Workflow navigation\n * - Success page redirection\n * \n * @example \"/dashboard\", \"/success\", \"https://external-site.com\"\n */\n redirect?: string;\n}\n\n/**\n * Function signature for action handlers that can be registered with the ActionResolverService.\n * \n * Action handlers receive an ActionContext with all relevant component and form data,\n * and must return an ActionResult indicating success/failure.\n * \n * Handlers can be either synchronous or asynchronous to support both immediate\n * operations and API calls/complex processing.\n * \n * @example Synchronous action handler\n * ```typescript\n * const logHandler: ActionHandler = (context) => {\n * console.log('Field value:', context.fieldValue);\n * return { success: true, data: 'Logged successfully' };\n * };\n * ```\n * \n * @example Asynchronous action handler\n * ```typescript\n * const saveHandler: ActionHandler = async (context) => {\n * try {\n * await apiService.saveData(context.formData);\n * return { success: true, data: 'Data saved' };\n * } catch (error) {\n * return { success: false, error: 'Save failed' };\n * }\n * };\n * ```\n * \n * @param context - Complete action execution context\n * @returns Promise<ActionResult> or ActionResult indicating success/failure\n */\nexport type ActionHandler = (context: ActionContext) => Promise<ActionResult> | ActionResult;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionResolverService {\n private readonly router = inject(Router, { optional: true });\n private readonly http = inject(HttpClient, { optional: true });\n private readonly dialog = inject(PraxisDialog, { optional: true });\n private readonly actionRegistry = new Map<string, ActionHandler>();\n\n constructor() {\n this.registerBuiltInActions();\n this.registerStateValidationActions();\n this.registerApiDataActions();\n this.registerDialogActions();\n }\n\n /**\n * Registra ações relacionadas a diálogos (unificado PraxisDialog)\n */\n private registerDialogActions(): void {\n // openDialog com payload JSON (x-ui)\n this.registerAction('openDialog', async (context) => {\n if (!this.dialog) return { success: false, error: 'PraxisDialog service not available' };\n const cfgRaw = context.metadata?.dialog || context.formData?.dialog || {};\n const content = cfgRaw?.content;\n const cfg: PraxisDialogConfig = {\n title: cfgRaw?.title,\n actions: cfgRaw?.actions,\n actionsLayout: cfgRaw?.actionsLayout,\n animation: cfgRaw?.animation,\n width: cfgRaw?.width,\n height: cfgRaw?.height,\n minWidth: cfgRaw?.minWidth,\n maxWidth: cfgRaw?.maxWidth,\n minHeight: cfgRaw?.minHeight,\n maxHeight: cfgRaw?.maxHeight,\n themeColor: cfgRaw?.themeColor,\n disableClose: cfgRaw?.disableClose,\n hasBackdrop: cfgRaw?.hasBackdrop,\n backdropClass: cfgRaw?.backdropClass,\n panelClass: cfgRaw?.panelClass,\n position: cfgRaw?.position,\n autoFocusedElement: cfgRaw?.autoFocusedElement,\n restoreFocus: cfgRaw?.restoreFocus,\n id: cfgRaw?.id,\n ariaRole: cfgRaw?.a11y?.ariaRole || cfgRaw?.ariaRole,\n ariaLabel: cfgRaw?.a11y?.ariaLabel || cfgRaw?.ariaLabel,\n ariaLabelledBy: cfgRaw?.a11y?.ariaLabelledBy || cfgRaw?.ariaLabelledBy,\n ariaDescribedBy: cfgRaw?.a11y?.ariaDescribedBy || cfgRaw?.ariaDescribedBy,\n data: content?.data,\n };\n\n try {\n if (content?.type === 'component' && content?.componentRef) {\n const ref = this.dialog!.openByRegistry(content.componentRef, cfg);\n await firstValueFrom(ref.afterClosed());\n return { success: true };\n }\n if (content?.type === 'template' && content?.templateId) {\n const ref = this.dialog!.openTemplateById(content.templateId, cfg);\n await firstValueFrom(ref.afterClosed());\n return { success: true };\n }\n if (content?.type === 'html' && content?.safeHtml) {\n const ref = this.dialog!.openSafeHtml(content.safeHtml, cfg);\n await firstValueFrom(ref.afterClosed());\n return { success: true };\n }\n return { success: false, error: 'Unsupported dialog content' };\n } catch (e: any) {\n return { success: false, error: e?.message || 'Failed to open dialog' };\n }\n });\n\n // confirm\n this.registerAction('confirm', async (context) => {\n if (!this.dialog) return { success: false, error: 'PraxisDialog service not available' };\n const d = context.metadata?.dialog || {};\n const ref = this.dialog.confirm({ title: d.title, message: d.message, themeColor: d.themeColor });\n const result = await firstValueFrom(ref.afterClosed());\n return { success: true, data: !!result };\n });\n\n // alert\n this.registerAction('alert', async (context) => {\n if (!this.dialog) return { success: false, error: 'PraxisDialog service not available' };\n const d = context.metadata?.dialog || {};\n const ref = this.dialog.alert({ title: d.title, message: d.message, themeColor: d.themeColor });\n await firstValueFrom(ref.afterClosed());\n return { success: true };\n });\n\n // prompt\n this.registerAction('prompt', async (context) => {\n if (!this.dialog) return { success: false, error: 'PraxisDialog service not available' };\n const d = context.metadata?.dialog || {};\n const ref = this.dialog.prompt({ title: d.title, message: d.message, themeColor: d.themeColor, placeholder: d.placeholder });\n const value = await firstValueFrom(ref.afterClosed());\n return { success: true, data: value };\n });\n }\n\n /**\n * Registra uma nova ação\n */\n registerAction(actionName: string, handler: ActionHandler): void {\n this.actionRegistry.set(actionName, handler);\n }\n\n /**\n * Remove uma ação registrada\n */\n unregisterAction(actionName: string): void {\n this.actionRegistry.delete(actionName);\n }\n\n /**\n * Executa uma ação por nome\n */\n async executeAction(actionRef: string, context: ActionContext = {}): Promise<ActionResult> {\n try {\n // Parse do action reference (pode ser \"actionName\" ou \"actionName:param\")\n const [actionName, actionParam] = actionRef.split(':', 2);\n \n // Verificações preventivas para dependências opicionais\n if (actionName === 'navigate' && !this.router) {\n return {\n success: false,\n error: 'Router service not available for navigation actions'\n };\n }\n \n if (actionName === 'apiCall' && !this.http) {\n return {\n success: false,\n error: 'HttpClient service not available for API actions'\n };\n }\n \n const handler = this.actionRegistry.get(actionName);\n if (!handler) {\n return {\n success: false,\n error: `Action '${actionName}' not found in registry`\n };\n }\n\n // Adicionar parâmetro ao context se disponível\n const enrichedContext: ActionContext = {\n ...context,\n actionParam\n };\n\n const result = await handler(enrichedContext);\n return result;\n\n } catch (error) {\n return {\n success: false,\n error: `Error executing action '${actionRef}': ${error}`\n };\n }\n }\n\n /**\n * Lista todas as ações registradas\n */\n getRegisteredActions(): string[] {\n return Array.from(this.actionRegistry.keys());\n }\n\n /**\n * Verifica se uma ação existe\n */\n hasAction(actionName: string): boolean {\n return this.actionRegistry.has(actionName);\n }\n\n /**\n * Registra ações built-in (pré-definidas) do sistema ActionResolverService.\n * \n * Este método é chamado automaticamente no constructor e registra um conjunto\n * de ações comuns úteis para aplicações corporativas, eliminando a necessidade\n * de implementar essas funcionalidades básicas repetidamente.\n * \n * Todas as ações built-in seguem padrões corporativos de:\n * - ✅ Tratamento de erros robusto\n * - ✅ Logging consistente para auditoria\n * - ✅ Mensagens user-friendly\n * - ✅ Segurança (noopener, noreferrer)\n * - ✅ Compatibilidade cross-browser\n * \n * ## 📋 Ações Disponíveis\n * \n * ### 📝 Formulários\n * - **submitForm**: Submete o formulário pai do componente\n * - **resetForm**: Reseta todos os campos do formulário pai\n * \n * ### 🧭 Navegação\n * - **navigate**: Navegação interna via Angular Router ou externa via window.location\n * - **openUrl**: Abre URL em nova aba com segurança (noopener, noreferrer)\n * \n * ### 📥 Downloads e Dados\n * - **download**: Inicia download de arquivo via URL\n * - **copyToClipboard**: Copia texto para área de transferência\n * \n * ### 🔔 Interface e Feedback\n * - **showAlert**: Exibe alerta nativo do navegador\n * - **log**: Registra mensagem no console para debugging\n * \n * ## 🎯 Uso no Metadata\n * \n * ```typescript\n * // Ação simples\n * const submitButton: MaterialButtonMetadata = {\n * name: 'submit',\n * label: 'Enviar',\n * controlType: 'button',\n * action: 'submitForm' // ← Ação built-in\n * };\n * \n * // Ação com parâmetro\n * const linkButton: MaterialButtonMetadata = {\n * name: 'dashboard',\n * label: 'Dashboard',\n * controlType: 'button',\n * action: 'navigate:/dashboard' // ← Parâmetro após ':'\n * };\n * \n * // Ação de download\n * const downloadButton: MaterialButtonMetadata = {\n * name: 'download',\n * label: 'Download PDF',\n * controlType: 'button',\n * action: 'download:https://example.com/report.pdf'\n * };\n * ```\n * \n * ## ⚠️ Notas Importantes\n * \n * - Ações são **case-sensitive**: use exatamente como documentado\n * - Parâmetros são opcionais: ações funcionam com/sem parâmetros\n * - Tratamento de erro: todas as ações retornam ActionResult padronizado\n * - Logging: ações importantes são logadas automaticamente para auditoria\n * - Segurança: URLs externas usam 'noopener,noreferrer' por padrão\n * \n * @private\n * @see ActionContext - Interface de contexto passada para todas as ações\n * @see ActionResult - Interface de resultado retornada por todas as ações\n * @see ActionHandler - Tipo de função para implementar ações customizadas\n */\n private registerBuiltInActions(): void {\n // =============================================================================\n // 📝 AÇÕES DE FORMULÁRIO\n // =============================================================================\n\n /**\n * 📤 submitForm - Submete o formulário pai do componente\n * \n * Localiza o elemento <form> pai do componente e chama form.submit().\n * Útil para botões de submit que precisam acionar submissão programática.\n * \n * ✅ Uso: action: \"submitForm\"\n * 📋 Parâmetros: Nenhum (ignora actionParam)\n * 🎯 Contexto: Qualquer campo dentro de um <form>\n * \n * @example Metadata configuration\n * ```typescript\n * const submitBtn: MaterialButtonMetadata = {\n * name: 'submit',\n * label: 'Enviar Dados',\n * controlType: 'button',\n * action: 'submitForm'\n * };\n * ```\n */\n this.registerAction('submitForm', async (context) => {\n const form = this.findParentForm(context.componentInstance);\n if (form) {\n form.submit();\n return { success: true, data: 'Form submitted' };\n }\n return { success: false, error: 'No parent form found' };\n });\n\n /**\n * 🔄 resetForm - Reseta todos os campos do formulário pai\n * \n * Localiza o elemento <form> pai e chama form.reset() para limpar todos os campos.\n * Restaura valores para o estado inicial/default do formulário.\n * \n * ✅ Uso: action: \"resetForm\"\n * 📋 Parâmetros: Nenhum (ignora actionParam)\n * 🎯 Contexto: Qualquer campo dentro de um <form>\n * ⚠️ Cuidado: Remove TODOS os dados não salvos do formulário\n * \n * @example Metadata configuration\n * ```typescript\n * const clearBtn: MaterialButtonMetadata = {\n * name: 'clear',\n * label: 'Limpar Formulário',\n * controlType: 'button',\n * action: 'resetForm',\n * confirmDialog: {\n * enabled: true,\n * title: 'Confirmar Limpeza',\n * message: 'Deseja limpar todos os campos?'\n * }\n * };\n * ```\n */\n this.registerAction('resetForm', async (context) => {\n const form = this.findParentForm(context.componentInstance);\n if (form) {\n form.reset();\n return { success: true, data: 'Form reset' };\n }\n return { success: false, error: 'No parent form found' };\n });\n\n // =============================================================================\n // 🧭 AÇÕES DE NAVEGAÇÃO\n // =============================================================================\n\n /**\n * 🧭 navigate - Navegação interna (Angular Router) ou externa (window.location)\n * \n * Navega para URL especificada usando a estratégia mais apropriada:\n * - URLs internas (/path): Angular Router (SPA navigation)\n * - URLs externas (http://): window.location.href (page reload)\n * \n * ✅ Uso: action: \"navigate:/dashboard\" ou action: \"navigate:https://external.com\"\n * 📋 Parâmetros: URL de destino (obrigatório)\n * 🎯 Contexto: Qualquer componente com ação\n * 🔒 Segurança: URLs externas são validadas\n * \n * @example Internal navigation (SPA)\n * ```typescript\n * const dashboardBtn: MaterialButtonMetadata = {\n * name: 'dashboard',\n * label: 'Ir para Dashboard',\n * controlType: 'button',\n * action: 'navigate:/dashboard'\n * };\n * ```\n * \n * @example External navigation (new page)\n * ```typescript\n * const helpBtn: MaterialButtonMetadata = {\n * name: 'help',\n * label: 'Central de Ajuda',\n * controlType: 'button',\n * action: 'navigate:https://help.empresa.com'\n * };\n * ```\n */\n this.registerAction('navigate', async (context) => {\n const url = context.actionParam;\n if (!url) {\n return { success: false, error: 'No URL provided for navigation' };\n }\n\n if (this.router && url.startsWith('/')) {\n await this.router.navigate([url]);\n return { success: true, data: `Navigated to ${url}` };\n } else {\n window.location.href = url;\n return { success: true, data: `Redirected to ${url}` };\n }\n });\n\n /**\n * 🔗 openUrl - Abre URL em nova aba/janela com segurança\n * \n * Abre URL especificada em nova aba usando window.open() com flags de segurança.\n * Sempre aplica 'noopener,noreferrer' para prevenir ataques de tabnabbing.\n * \n * ✅ Uso: action: \"openUrl:https://example.com\"\n * 📋 Parâmetros: URL completa (obrigatório)\n * 🎯 Contexto: Links externos, documentação, ferramentas\n * 🔒 Segurança: noopener + noreferrer automático\n * 📱 Mobile: Compatível com todos os navegadores mobile\n * \n * @example External documentation link\n * ```typescript\n * const docsBtn: MaterialButtonMetadata = {\n * name: 'docs',\n * label: 'Ver Documentação',\n * controlType: 'button',\n * action: 'openUrl:https://docs.empresa.com/api',\n * icon: 'open_in_new'\n * };\n * ```\n * \n * @example Report viewer\n * ```typescript\n * const reportBtn: MaterialButtonMetadata = {\n * name: 'viewReport',\n * label: 'Ver Relatório',\n * controlType: 'button',\n * action: 'openUrl:https://reports.empresa.com/monthly/2024-01'\n * };\n * ```\n */\n this.registerAction('openUrl', async (context) => {\n const url = context.actionParam;\n if (!url) {\n return { success: false, error: 'No URL provided' };\n }\n\n window.open(url, '_blank', 'noopener,noreferrer');\n return { success: true, data: `Opened ${url}` };\n });\n\n // =============================================================================\n // 🔔 AÇÕES DE INTERFACE E FEEDBACK\n // =============================================================================\n\n /**\n * 🚨 showAlert - Exibe alerta nativo do navegador\n * \n * Mostra dialog modal nativo usando alert() do navegador.\n * Útil para notificações simples, avisos e confirmações de ação.\n * \n * ✅ Uso: action: \"showAlert:Mensagem personalizada\"\n * 📋 Parâmetros: Texto da mensagem (opcional)\n * 🎯 Contexto: Feedback imediato, avisos, debug\n * ⚠️ UX: Use com moderação - interrompe fluxo do usuário\n * 📱 Mobile: Funciona em todos os dispositivos\n * \n * @example Success notification\n * ```typescript\n * const saveBtn: MaterialButtonMetadata = {\n * name: 'save',\n * label: 'Salvar',\n * controlType: 'button',\n * action: 'showAlert:Dados salvos com sucesso!'\n * };\n * ```\n * \n * @example Debug/development usage\n * ```typescript\n * const debugBtn: MaterialButtonMetadata = {\n * name: 'debug',\n * label: 'Test Action',\n * controlType: 'button',\n * action: 'showAlert' // Usa mensagem padrão\n * };\n * ```\n */\n this.registerAction('showAlert', async (context) => {\n const message = context.actionParam || 'Action executed successfully';\n alert(message);\n return { success: true, data: message };\n });\n\n /**\n * 🐛 log - Registra mensagem no console para debugging\n * \n * Escreve mensagem no console.log() com prefixo [ActionResolver] padronizado.\n * Inclui contexto completo para facilitar debugging e auditoria.\n * \n * ✅ Uso: action: \"log:Custom debug message\"\n * 📋 Parâmetros: Mensagem personalizada (opcional)\n * 🎯 Contexto: Development, debugging, auditoria\n * 📊 Output: console.log() com contexto completo\n * 🔍 Debug: Útil para rastrear fluxo de ações\n * \n * @example Development debugging\n * ```typescript\n * const testBtn: MaterialButtonMetadata = {\n * name: 'test',\n * label: 'Test Button',\n * controlType: 'button',\n * action: 'log:Test button clicked - form data logged'\n * };\n * ```\n * \n * @example Audit trail\n * ```typescript\n * const auditBtn: MaterialButtonMetadata = {\n * name: 'audit',\n * label: 'Audit Action',\n * controlType: 'button',\n * action: 'log:User performed audit action'\n * };\n * ```\n */\n this.registerAction('log', async (context) => {\n const message = context.actionParam || 'Button action executed';\n console.log('[ActionResolver]', message, context);\n return { success: true, data: message };\n });\n\n // =============================================================================\n // 📥 AÇÕES DE DADOS E ARQUIVOS\n // =============================================================================\n\n /**\n * 📥 download - Inicia download de arquivo via URL\n * \n * Cria elemento <a> temporário com atributo download para forçar download\n * ao invés de navegação. Remove elemento após uso para manter DOM limpo.\n * \n * ✅ Uso: action: \"download:https://example.com/file.pdf\"\n * 📋 Parâmetros: URL do arquivo (obrigatório)\n * 🎯 Contexto: Relatórios, documentos, exports\n * 📁 Filename: Extraído automaticamente da URL\n * 🔒 CORS: Sujeito a políticas de same-origin\n * 📱 Mobile: Funciona na maioria dos navegadores mobile\n * \n * @example PDF report download\n * ```typescript\n * const pdfBtn: MaterialButtonMetadata = {\n * name: 'downloadPdf',\n * label: 'Download PDF',\n * controlType: 'button',\n * action: 'download:https://api.empresa.com/reports/monthly.pdf',\n * icon: 'download'\n * };\n * ```\n * \n * @example CSV export\n * ```typescript\n * const csvBtn: MaterialButtonMetadata = {\n * name: 'exportCsv',\n * label: 'Exportar CSV',\n * controlType: 'button',\n * action: 'download:https://api.empresa.com/data/export.csv'\n * };\n * ```\n */\n this.registerAction('download', async (context) => {\n const url = context.actionParam;\n if (!url) {\n return { success: false, error: 'No URL provided for download' };\n }\n\n const link = document.createElement('a');\n link.href = url;\n link.download = url.split('/').pop() || 'download';\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n return { success: true, data: `Download started: ${url}` };\n });\n\n /**\n * 📋 copyToClipboard - Copia texto para área de transferência\n * \n * Usa Clipboard API moderna (navigator.clipboard) para copiar texto.\n * Com fallback para tratamento de erro em navegadores mais antigos.\n * \n * ✅ Uso: action: \"copyToClipboard:Texto customizado\"\n * 📋 Parâmetros: Texto a copiar (opcional - usa fieldValue se não fornecido)\n * 🎯 Contexto: Códigos, links, IDs, dados para compartilhar\n * 🔒 Segurança: Requer HTTPS em produção\n * 📱 Mobile: Suporte limitado em alguns navegadores antigos\n * ⚡ Performance: Operação assíncrona não bloqueia UI\n * \n * @example Copy field value\n * ```typescript\n * const copyBtn: MaterialButtonMetadata = {\n * name: 'copyId',\n * label: 'Copiar ID',\n * controlType: 'button',\n * action: 'copyToClipboard', // Usa o valor do campo\n * icon: 'content_copy'\n * };\n * ```\n * \n * @example Copy custom text\n * ```typescript\n * const shareBtn: MaterialButtonMetadata = {\n * name: 'shareLink',\n * label: 'Copiar Link',\n * controlType: 'button',\n * action: 'copyToClipboard:https://app.empresa.com/share/abc123',\n * icon: 'share'\n * };\n * ```\n * \n * @example Copy generated content\n * ```typescript\n * const apiKeyBtn: MaterialButtonMetadata = {\n * name: 'copyApiKey',\n * label: 'Copiar API Key',\n * controlType: 'button',\n * action: 'copyToClipboard:sk-1234567890abcdef'\n * };\n * ```\n */\n this.registerAction('copyToClipboard', async (context) => {\n const text = context.actionParam || context.fieldValue?.toString() || '';\n \n try {\n await navigator.clipboard.writeText(text);\n return { success: true, data: `Copied to clipboard: ${text}` };\n } catch (error) {\n return { success: false, error: 'Failed to copy to clipboard' };\n }\n });\n }\n\n /**\n * Encontra o elemento <form> pai de um componente Angular.\n * \n * Percorre a árvore DOM a partir do elemento do componente até encontrar\n * um elemento <form> pai ou chegar ao document.body.\n * \n * Usado pelas ações submitForm e resetForm para localizar o formulário\n * que contém o componente que disparou a ação.\n * \n * @param componentInstance - Instância do componente Angular\n * @returns HTMLFormElement se encontrado, null caso contrário\n * \n * @example Estrutura HTML típica\n * ```html\n * <form>\n * <mat-form-field>\n * <input matInput>\n * </mat-form-field>\n * <pdx-material-button action=\"submitForm\">Submit</pdx-material-button>\n * </form>\n * ```\n * \n * @private\n */\n private findParentForm(componentInstance: any): HTMLFormElement | null {\n // Validar se o componente tem ElementRef (padrão Angular)\n if (!componentInstance?.elementRef?.nativeElement) {\n console.warn('[ActionResolver] Component instance does not have elementRef');\n return null;\n }\n\n // Percorrer árvore DOM procurando elemento <form> com proteção contra loop infinito\n let element: HTMLElement | null = componentInstance.elementRef.nativeElement;\n let depth = 0;\n const MAX_DEPTH = 20; // Evitar loop infinito\n\n while (element && element !== document.body && depth < MAX_DEPTH) {\n if (element.tagName === 'FORM') {\n return element as HTMLFormElement;\n }\n element = element.parentElement;\n depth++;\n }\n \n if (depth >= MAX_DEPTH) {\n console.warn('[ActionResolver] Max depth reached while searching for parent form');\n }\n \n // Não encontrou formulário pai\n return null;\n }\n\n // =============================================================================\n // 🔄 NOVAS AÇÕES DE ESTADO E VALIDAÇÃO\n // =============================================================================\n\n /**\n * Registra ações de estado e validação de formulários.\n * Chamado durante a inicialização do serviço.\n */\n private registerStateValidationActions(): void {\n /**\n * ✅ validateForm - Valida formulário sem submissão\n * \n * Executa validação completa do formulário pai sem disparar o submit.\n * Mostra erros de validação nos campos mas não envia dados.\n * Útil para validação em tempo real ou antes de ações específicas.\n * \n * ✅ Uso: action: \"validateForm\"\n * 📋 Parâmetros: Nenhum (ignora actionParam)\n * 🎯 Contexto: Botões de validação, workflows multi-step\n * 📊 Output: Lista de erros encontrados ou confirmação de sucesso\n * \n * @example Validação antes de salvar rascunho\n * ```typescript\n * const validateBtn: MaterialButtonMetadata = {\n * name: 'validate',\n * label: 'Validar Dados',\n * controlType: 'button',\n * action: 'validateForm',\n * icon: 'check_circle'\n * };\n * ```\n */\n this.registerAction('validateForm', async (context) => {\n const form = this.findParentForm(context.componentInstance);\n if (!form) {\n return { success: false, error: 'No parent form found for validation' };\n }\n\n // Trigger validation sem submit\n const formData = new FormData(form);\n const inputs = form.querySelectorAll('input, select, textarea');\n const errors: string[] = [];\n\n inputs.forEach((input: Element) => {\n const htmlInput = input as HTMLInputElement;\n if (!htmlInput.checkValidity()) {\n const label = form.querySelector(`label[for=\"${htmlInput.id}\"]`)?.textContent || htmlInput.name;\n errors.push(`${label}: ${htmlInput.validationMessage}`);\n }\n });\n\n if (errors.length > 0) {\n return { \n success: false, \n error: `Validation failed: ${errors.join(', ')}`,\n data: { errors }\n };\n }\n\n return { \n success: true, \n data: 'Form validation passed successfully',\n validationErrors: []\n };\n });\n\n /**\n * 🧹 clearValidation - Limpa erros de validação do formulário\n * \n * Remove mensagens de erro de validação de todos os campos do formulário pai.\n * Útil para resetar estado visual sem limpar os dados.\n * \n * ✅ Uso: action: \"clearValidation\"\n * 📋 Parâmetros: Nenhum (ignora actionParam)\n * 🎯 Contexto: Botões de reset visual, início de nova validação\n * \n * @example Limpar erros antes de nova tentativa\n * ```typescript\n * const clearBtn: MaterialButtonMetadata = {\n * name: 'clearErrors',\n * label: 'Limpar Erros',\n * controlType: 'button',\n * action: 'clearValidation',\n * icon: 'clear_all'\n * };\n * ```\n */\n this.registerAction('clearValidation', async (context) => {\n const form = this.findParentForm(context.componentInstance);\n if (!form) {\n return { success: false, error: 'No parent form found' };\n }\n\n // Remove custom validity messages\n const inputs = form.querySelectorAll('input, select, textarea');\n inputs.forEach((input: Element) => {\n const htmlInput = input as HTMLInputElement;\n htmlInput.setCustomValidity('');\n });\n\n // Remove error classes (se seguir padrão Material)\n const errorElements = form.querySelectorAll('.mat-form-field-invalid, .mat-error');\n errorElements.forEach(el => {\n el.classList.remove('mat-form-field-invalid');\n if (el.classList.contains('mat-error')) {\n el.remove();\n }\n });\n\n return { success: true, data: 'Validation errors cleared' };\n });\n\n /**\n * 💾 saveFormDraft - Salva rascunho do formulário no localStorage\n * \n * Salva estado atual do formulário no localStorage do navegador.\n * Útil para preservar dados durante navegação ou em caso de fechamento acidental.\n * \n * ✅ Uso: action: \"saveFormDraft\" ou action: \"saveFormDraft:customKey\"\n * 📋 Parâmetros: Chave personalizada (opcional - usa URL atual se não fornecido)\n * 🎯 Contexto: Auto-save, formulários longos, prevenção de perda de dados\n * 💾 Storage: localStorage (persistente entre sessões)\n * 🔒 Privacidade: Dados ficam apenas no navegador do usuário\n * \n * @example Auto-save periódico\n * ```typescript\n * const autoSaveBtn: MaterialButtonMetadata = {\n * name: 'autoSave',\n * label: 'Salvar Rascunho',\n * controlType: 'button',\n * action: 'saveFormDraft:userForm',\n * icon: 'save_alt'\n * };\n * ```\n */\n this.registerAction('saveFormDraft', async (context) => {\n const form = this.findParentForm(context.componentInstance);\n if (!form) {\n return { success: false, error: 'No parent form found' };\n }\n\n try {\n const formData = new FormData(form);\n const draftData: Record<string, any> = {};\n \n // Converter FormData para objeto serializável\n formData.forEach((value, key) => {\n if (draftData[key]) {\n // Múltiplos valores (checkboxes, selects múltiplos)\n if (Array.isArray(draftData[key])) {\n draftData[key].push(value);\n } else {\n draftData[key] = [draftData[key], value];\n }\n } else {\n draftData[key] = value;\n }\n });\n\n const draftKey = context.actionParam || `formDraft_${window.location.pathname}`;\n const draftObject = {\n data: draftData,\n timestamp: new Date().toISOString(),\n url: window.location.href\n };\n\n // Verificar tamanho antes de salvar\n const draftString = JSON.stringify(draftObject);\n if (draftString.length > 500000) { // 500KB limit\n return { success: false, error: 'Draft too large to save (max 500KB)' };\n }\n\n // Cleanup drafts antigos antes de salvar\n this.cleanupOldDrafts();\n\n localStorage.setItem(draftKey, draftString);\n\n return { \n success: true, \n data: `Form draft saved with key: ${draftKey}`,\n draftKey\n };\n\n } catch (error: any) {\n if (error.name === 'QuotaExceededError') {\n return { \n success: false, \n error: 'Storage quota exceeded. Please clear old drafts or reduce form data.' \n };\n }\n return { \n success: false, \n error: `Failed to save form draft: ${error.message || error}`\n };\n }\n });\n\n /**\n * 📂 loadFormDraft - Carrega rascunho salvo do localStorage\n * \n * Restaura dados de formulário previamente salvos no localStorage.\n * Preenche automaticamente os campos com valores salvos.\n * \n * ✅ Uso: action: \"loadFormDraft\" ou action: \"loadFormDraft:customKey\"\n * 📋 Parâmetros: Chave personalizada (opcional - usa URL atual se não fornecido)\n * 🎯 Contexto: Recuperação de dados, continuação de formulários\n * 🔍 Validação: Verifica se rascunho existe antes de tentar carregar\n * \n * @example Carregar dados salvos\n * ```typescript\n * const loadBtn: MaterialButtonMetadata = {\n * name: 'loadDraft',\n * label: 'Carregar Rascunho',\n * controlType: 'button',\n * action: 'loadFormDraft:userForm',\n * icon: 'restore'\n * };\n * ```\n */\n this.registerAction('loadFormDraft', async (context) => {\n const form = this.findParentForm(context.componentInstance);\n if (!form) {\n return { success: false, error: 'No parent form found' };\n }\n\n try {\n const draftKey = context.actionParam || `formDraft_${window.location.pathname}`;\n const savedDraft = localStorage.getItem(draftKey);\n\n if (!savedDraft) {\n return { \n success: false, \n error: `No draft found with key: ${draftKey}`\n };\n }\n\n const draftObject = JSON.parse(savedDraft);\n const draftData = draftObject.data;\n\n // Preencher campos do formulário\n Object.entries(draftData).forEach(([fieldName, value]) => {\n const field = form.querySelector(`[name=\"${fieldName}\"]`) as HTMLInputElement;\n if (field) {\n if (field.type === 'checkbox' || field.type === 'radio') {\n field.checked = Array.isArray(value) ? value.includes(field.value) : value === field.value;\n } else {\n field.value = Array.isArray(value) ? value[0] : String(value);\n }\n \n // Disparar evento de mudança para Angular detectar\n field.dispatchEvent(new Event('input', { bubbles: true }));\n field.dispatchEvent(new Event('change', { bubbles: true }));\n }\n });\n\n return { \n success: true, \n data: `Form draft loaded from ${draftObject.timestamp}`,\n draftData,\n loadedAt: new Date().toISOString()\n };\n\n } catch (error) {\n return { \n success: false, \n error: `Failed to load form draft: ${error}`\n };\n }\n });\n\n /**\n * 🗑️ clearFormDraft - Remove rascunho salvo do localStorage\n * \n * Deleta rascunho específico do localStorage.\n * Útil para limpeza após submissão bem-sucedida ou quando não precisar mais dos dados.\n * \n * ✅ Uso: action: \"clearFormDraft\" ou action: \"clearFormDraft:customKey\"\n * 📋 Parâmetros: Chave personalizada (opcional - usa URL atual se não fornecido)\n * 🎯 Contexto: Limpeza pós-submit, gerenciamento de storage\n * \n * @example Limpar após envio\n * ```typescript\n * const clearDraftBtn: MaterialButtonMetadata = {\n * name: 'clearDraft',\n * label: 'Remover Rascunho',\n * controlType: 'button',\n * action: 'clearFormDraft:userForm',\n * icon: 'delete_forever'\n * };\n * ```\n */\n this.registerAction('clearFormDraft', async (context) => {\n try {\n const draftKey = context.actionParam || `formDraft_${window.location.pathname}`;\n const existed = localStorage.getItem(draftKey) !== null;\n \n localStorage.removeItem(draftKey);\n\n return { \n success: true, \n data: existed \n ? `Form draft cleared: ${draftKey}` \n : `No draft found to clear: ${draftKey}`,\n existed\n };\n\n } catch (error) {\n return { \n success: false, \n error: `Failed to clear form draft: ${error}`\n };\n }\n });\n }\n\n // =============================================================================\n // 📡 NOVAS AÇÕES DE API E DADOS\n // =============================================================================\n\n /**\n * Registra ações de API e manipulação de dados.\n * Chamado durante a inicialização do serviço.\n */\n private registerApiDataActions(): void {\n /**\n * 🌐 apiCall - Requisição HTTP configurável\n * \n * Executa chamada HTTP com método e URL configuráveis.\n * Suporta GET, POST, PUT, DELETE com headers e body personalizáveis.\n * \n * ✅ Uso: action: \"apiCall:GET:https://api.com/data\"\n * ✅ Uso: action: \"apiCall:POST:https://api.com/save\"\n * 📋 Parâmetros: \"METHOD:URL\" (ambos obrigatórios)\n * 🎯 Contexto: Integração com APIs, CRUD operations\n * 🔒 Segurança: Headers de autenticação via contexto\n * 📊 Response: Retorna dados da resposta ou erro HTTP\n * \n * @example GET request\n * ```typescript\n * const loadDataBtn: MaterialButtonMetadata = {\n * name: 'loadData',\n * label: 'Carregar Dados',\n * controlType: 'button',\n * action: 'apiCall:GET:https://api.empresa.com/users'\n * };\n * ```\n * \n * @example POST with form data\n * ```typescript\n * const saveBtn: MaterialButtonMetadata = {\n * name: 'saveData',\n * label: 'Salvar via API',\n * controlType: 'button',\n * action: 'apiCall:POST:https://api.empresa.com/users'\n * };\n * ```\n */\n this.registerAction('apiCall', async (context) => {\n if (!this.http) {\n return { success: false, error: 'HttpClient not available' };\n }\n\n const actionParam = context.actionParam;\n if (!actionParam) {\n return { success: false, error: 'API call requires METHOD:URL format' };\n }\n\n const [method, url] = actionParam.split(':', 2);\n if (!method || !url) {\n return { success: false, error: 'Invalid format. Use METHOD:URL (e.g., GET:https://api.com/data)' };\n }\n\n const httpMethod = method.toUpperCase();\n if (!['GET', 'POST', 'PUT', 'DELETE', 'PATCH'].includes(httpMethod)) {\n return { success: false, error: `Unsupported HTTP method: ${httpMethod}` };\n }\n\n try {\n // Configurar headers padrão\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n });\n\n let request;\n const options = { headers };\n\n // Preparar body para métodos que suportam\n if (['POST', 'PUT', 'PATCH'].includes(httpMethod)) {\n const body = context.formData || context.fieldValue || {};\n \n switch (httpMethod) {\n case 'POST':\n request = this.http.post(url, body, options);\n break;\n case 'PUT':\n request = this.http.put(url, body, options);\n break;\n case 'PATCH':\n request = this.http.patch(url, body, options);\n break;\n }\n } else {\n // GET, DELETE\n switch (httpMethod) {\n case 'GET':\n request = this.http.get(url, options);\n break;\n case 'DELETE':\n request = this.http.delete(url, options);\n break;\n }\n }\n\n if (!request) {\n return { success: false, error: `Failed to create ${httpMethod} request` };\n }\n\n const response = await firstValueFrom(request);\n\n return {\n success: true,\n data: response,\n apiResponse: {\n method: httpMethod,\n url,\n status: 'success',\n timestamp: new Date().toISOString()\n }\n };\n\n } catch (error: any) {\n return {\n success: false,\n error: `API call failed: ${error.message || error}`,\n apiResponse: {\n method: httpMethod,\n url,\n status: 'error',\n error: error.message || error,\n timestamp: new Date().toISOString()\n }\n };\n }\n });\n\n /**\n * 🔄 refreshOptions - Recarrega opções de campo select\n * \n * Recarrega as opções de um campo select específico via API ou configuração.\n * Útil para listas dependentes ou dados que mudam frequentemente.\n * \n * ✅ Uso: action: \"refreshOptions:fieldName\"\n * 📋 Parâmetros: Nome do campo select (obrigatório)\n * 🎯 Contexto: Campos dependentes, atualização de listas\n * 🔄 Processo: Encontra campo, recarrega dados, atualiza opções\n * \n * @example Atualizar lista de cidades baseado no estado\n * ```typescript\n * const refreshBtn: MaterialButtonMetadata = {\n * name: 'refreshCities',\n * label: 'Atualizar Cidades',\n * controlType: 'button',\n * action: 'refreshOptions:citySelect',\n * icon: 'refresh'\n * };\n * ```\n */\n this.registerAction('refreshOptions', async (context) => {\n const fieldName = context.actionParam;\n if (!fieldName) {\n return { success: false, error: 'Field name required for refreshOptions' };\n }\n\n const form = this.findParentForm(context.componentInstance);\n if (!form) {\n return { success: false, error: 'No parent form found' };\n }\n\n const selectField = form.querySelector(`[name=\"${fieldName}\"]`) as HTMLSelectElement;\n if (!selectField || selectField.tagName !== 'SELECT') {\n return { success: false, error: `Select field '${fieldName}' not found` };\n }\n\n try {\n // Esta é uma implementação básica. Em uma implementação real,\n // você pegaria a URL de reload do metadata do campo ou configuração\n const refreshEvent = new CustomEvent('refreshOptions', {\n detail: { fieldName, selectField },\n bubbles: true\n });\n \n selectField.dispatchEvent(refreshEvent);\n\n return {\n success: true,\n data: `Options refreshed for field: ${fieldName}`,\n fieldName,\n timestamp: new Date().toISOString()\n };\n\n } catch (error) {\n return {\n success: false,\n error: `Failed to refresh options for '${fieldName}': ${error}`\n };\n }\n });\n\n /**\n * 📊 loadDependentData - Carrega dados baseado em outro campo\n * \n * Carrega dados para um campo baseado no valor de outro campo.\n * Útil para implementar relacionamentos master-detail entre campos.\n * \n * ✅ Uso: action: \"loadDependentData:targetField\"\n * 📋 Parâmetros: Nome do campo de destino (obrigatório)\n * 🎯 Contexto: Relacionamentos entre campos, cascading dropdowns\n * 🔗 Dependência: Usa valor do campo atual como filtro\n * \n * @example Carregar produtos baseado na categoria selecionada\n * ```typescript\n * // No campo categoria\n * const categoryField: MaterialSelectMetadata = {\n * name: 'category',\n * label: 'Categoria',\n * controlType: 'select',\n * // Quando categoria mudar, carrega produtos relacionados\n * onChange: 'loadDependentData:products'\n * };\n * ```\n */\n this.registerAction('loadDependentData', async (context) => {\n const targetFieldName = context.actionParam;\n if (!targetFieldName) {\n return { success: false, error: 'Target field name required' };\n }\n\n const sourceValue = context.fieldValue;\n if (!sourceValue) {\n return { success: false, error: 'No source value to load dependent data' };\n }\n\n const form = this.findParentForm(context.componentInstance);\n if (!form) {\n return { success: false, error: 'No parent form found' };\n }\n\n const targetField = form.querySelector(`[name=\"${targetFieldName}\"]`);\n if (!targetField) {\n return { success: false, error: `Target field '${targetFieldName}' not found` };\n }\n\n try {\n // Disparar evento customizado para que o componente/serviço apropriado\n // possa interceptar e carregar os dados dependentes\n const loadEvent = new CustomEvent('loadDependentData', {\n detail: {\n sourceField: context.fieldName,\n sourceValue,\n targetField: targetFieldName,\n targetElement: targetField\n },\n bubbles: true\n });\n\n targetField.dispatchEvent(loadEvent);\n\n return {\n success: true,\n data: `Dependent data loading triggered for '${targetFieldName}' based on '${context.fieldName}' = '${sourceValue}'`,\n sourceField: context.fieldName,\n sourceValue,\n targetField: targetFieldName,\n timestamp: new Date().toISOString()\n };\n\n } catch (error) {\n return {\n success: false,\n error: `Failed to load dependent data: ${error}`\n };\n }\n });\n }\n\n /**\n * Limpa drafts antigos do localStorage para evitar quota exceeded.\n * \n * Remove drafts com mais de 7 dias ou que estejam malformados.\n * Chamado automaticamente antes de salvar novos drafts.\n * \n * @private\n */\n private cleanupOldDrafts(): void {\n const maxAge = 7 * 24 * 60 * 60 * 1000; // 7 dias em milliseconds\n const now = Date.now();\n \n try {\n // Iterar através das chaves do localStorage\n const keysToRemove: string[] = [];\n \n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith('formDraft_')) {\n try {\n const item = localStorage.getItem(key);\n if (!item) {\n keysToRemove.push(key);\n continue;\n }\n \n const draftObject = JSON.parse(item);\n if (!draftObject.timestamp) {\n // Draft sem timestamp é inválido\n keysToRemove.push(key);\n continue;\n }\n \n const draftTime = new Date(draftObject.timestamp).getTime();\n if (isNaN(draftTime) || (now - draftTime) > maxAge) {\n keysToRemove.push(key);\n }\n \n } catch (parseError) {\n // Item malformado, remover\n keysToRemove.push(key);\n }\n }\n }\n \n // Remover chaves identificadas (fazer em separado para não interferir na iteração)\n keysToRemove.forEach(key => {\n try {\n localStorage.removeItem(key);\n } catch (error) {\n console.warn(`[ActionResolver] Failed to remove old draft '${key}':`, error);\n }\n });\n \n if (keysToRemove.length > 0) {\n console.debug(`[ActionResolver] Cleaned up ${keysToRemove.length} old form drafts`);\n }\n \n } catch (error) {\n console.warn('[ActionResolver] Error during draft cleanup:', error);\n }\n }\n}\n","/**\n * @fileoverview Serviço para gerenciamento de atalhos de teclado globais\n * \n * Permite registrar e executar atalhos de teclado definidos nos componentes.\n */\n\nimport { Injectable, inject, DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nexport interface ShortcutHandler {\n callback: () => void;\n description?: string;\n componentId?: string;\n priority?: number; // Maior prioridade executa primeiro\n}\n\nexport interface ShortcutInfo {\n shortcut: string;\n handlers: ShortcutHandler[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class KeyboardShortcutService {\n private readonly destroyRef = inject(DestroyRef);\n private readonly shortcuts = new Map<string, ShortcutHandler[]>();\n private isListening = false;\n\n constructor() {\n this.startListening();\n }\n\n /**\n * Registra um atalho de teclado\n */\n registerShortcut(\n shortcut: string, \n handler: ShortcutHandler\n ): () => void {\n const normalizedShortcut = this.normalizeShortcut(shortcut);\n \n if (!this.shortcuts.has(normalizedShortcut)) {\n this.shortcuts.set(normalizedShortcut, []);\n }\n\n const handlers = this.shortcuts.get(normalizedShortcut)!;\n handlers.push(handler);\n \n // Ordenar por prioridade (maior primeiro)\n handlers.sort((a, b) => (b.priority || 0) - (a.priority || 0));\n\n // Retorna função para remover o atalho\n return () => {\n this.unregisterShortcut(normalizedShortcut, handler);\n };\n }\n\n /**\n * Remove um atalho de teclado específico\n */\n unregisterShortcut(shortcut: string, handler: ShortcutHandler): void {\n const normalizedShortcut = this.normalizeShortcut(shortcut);\n const handlers = this.shortcuts.get(normalizedShortcut);\n \n if (handlers) {\n // Fix: Use findIndex with proper object comparison instead of indexOf\n // indexOf never finds objects due to reference comparison, causing memory leaks\n const index = handlers.findIndex(h => \n h.callback === handler.callback && \n h.componentId === handler.componentId\n );\n if (index > -1) {\n handlers.splice(index, 1);\n }\n \n // Remove a entrada se não há mais handlers\n if (handlers.length === 0) {\n this.shortcuts.delete(normalizedShortcut);\n }\n }\n }\n\n /**\n * Remove todos os atalhos de um componente específico\n */\n unregisterComponentShortcuts(componentId: string): void {\n for (const [shortcut, handlers] of this.shortcuts.entries()) {\n const filteredHandlers = handlers.filter(h => h.componentId !== componentId);\n \n if (filteredHandlers.length === 0) {\n this.shortcuts.delete(shortcut);\n } else if (filteredHandlers.length !== handlers.length) {\n this.shortcuts.set(shortcut, filteredHandlers);\n }\n }\n }\n\n /**\n * Lista todos os atalhos registrados\n */\n getRegisteredShortcuts(): ShortcutInfo[] {\n return Array.from(this.shortcuts.entries()).map(([shortcut, handlers]) => ({\n shortcut,\n handlers: [...handlers]\n }));\n }\n\n /**\n * Verifica se um atalho está registrado\n */\n hasShortcut(shortcut: string): boolean {\n const normalizedShortcut = this.normalizeShortcut(shortcut);\n return this.shortcuts.has(normalizedShortcut);\n }\n\n /**\n * Executa manualmente um atalho (para testes)\n */\n executeShortcut(shortcut: string): boolean {\n const normalizedShortcut = this.normalizeShortcut(shortcut);\n const handlers = this.shortcuts.get(normalizedShortcut);\n \n if (handlers && handlers.length > 0) {\n // Executa o handler com maior prioridade\n handlers[0].callback();\n return true;\n }\n \n return false;\n }\n\n /**\n * Inicia a escuta de eventos de teclado\n */\n private startListening(): void {\n if (this.isListening) return;\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(event => this.shouldProcessEvent(event))\n )\n .subscribe(event => {\n const shortcut = this.eventToShortcut(event);\n const handlers = this.shortcuts.get(shortcut);\n \n if (handlers && handlers.length > 0) {\n // Previne comportamento padrão apenas se há handlers\n event.preventDefault();\n event.stopPropagation();\n \n // Executa o primeiro handler (maior prioridade)\n handlers[0].callback();\n }\n });\n\n this.isListening = true;\n }\n\n /**\n * Verifica se deve processar o evento\n */\n private shouldProcessEvent(event: KeyboardEvent): boolean {\n // Ignora eventos em inputs, textareas, etc.\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toLowerCase();\n \n if (['input', 'textarea', 'select'].includes(tagName)) {\n return false;\n }\n \n // Ignora se elemento tem contenteditable\n if (target.contentEditable === 'true') {\n return false;\n }\n \n return true;\n }\n\n /**\n * Converte um evento de teclado em string de atalho\n */\n private eventToShortcut(event: KeyboardEvent): string {\n const parts: string[] = [];\n \n if (event.ctrlKey) parts.push('ctrl');\n if (event.altKey) parts.push('alt');\n if (event.shiftKey) parts.push('shift');\n if (event.metaKey) parts.push('meta');\n \n const key = event.key.toLowerCase();\n parts.push(key);\n \n return parts.join('+');\n }\n\n /**\n * Normaliza uma string de atalho\n */\n private normalizeShortcut(shortcut: string): string {\n const parts = shortcut.toLowerCase()\n .split(/[\\s+\\-_]/)\n .filter(part => part.length > 0);\n \n // Ordenar modificadores para consistência\n const modifiers: string[] = [];\n const keys: string[] = [];\n \n for (const part of parts) {\n if (['ctrl', 'alt', 'shift', 'meta', 'cmd', 'command'].includes(part)) {\n let modifier = part;\n if (modifier === 'cmd' || modifier === 'command') {\n modifier = 'meta';\n }\n if (!modifiers.includes(modifier)) {\n modifiers.push(modifier);\n }\n } else {\n keys.push(part);\n }\n }\n \n // Ordenar modificadores\n const orderedModifiers = ['ctrl', 'alt', 'shift', 'meta']\n .filter(mod => modifiers.includes(mod));\n \n return [...orderedModifiers, ...keys].join('+');\n }\n\n /**\n * Converte atalho em formato legível\n */\n formatShortcut(shortcut: string): string {\n const normalized = this.normalizeShortcut(shortcut);\n const parts = normalized.split('+');\n \n return parts\n .map(part => {\n switch (part) {\n case 'ctrl': return 'Ctrl';\n case 'alt': return 'Alt';\n case 'shift': return 'Shift';\n case 'meta': return 'Cmd';\n case 'enter': return 'Enter';\n case 'escape': return 'Esc';\n case 'arrowup': return '↑';\n case 'arrowdown': return '↓';\n case 'arrowleft': return '←';\n case 'arrowright': return '→';\n default: return part.toUpperCase();\n }\n })\n .join(' + ');\n }\n}","/**\n * @fileoverview Componente Material Button dinâmico - Versão Refatorada\n * \n * Button avançado com suporte a:\n * ✅ Todos os variants Material (basic, raised, stroked, flat, icon, fab, mini-fab)\n * ✅ Ações configuráveis e navegação\n * ✅ Estados de loading com feedback visual\n * ✅ Diálogos de confirmação\n * ✅ Atalhos de teclado\n * ✅ Acessibilidade WCAG 2.1 AA\n */\n\nimport { \n Component, \n computed,\n signal,\n inject,\n OnDestroy\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { CommonModule } from '@angular/common';\n\nimport { SimpleBaseButtonComponent } from '../../base/simple-base-button.component';\nimport { MaterialButtonMetadata } from '@praxisui/core';\nimport { ActionResolverService } from '../../services/action-resolver.service';\nimport { KeyboardShortcutService } from '../../services/keyboard-shortcut.service';\n\n// =============================================================================\n// TYPE HELPERS\n// =============================================================================\n\nfunction safeButtonMetadata(metadata: any): MaterialButtonMetadata {\n return (metadata || {}) as MaterialButtonMetadata;\n}\n\n// =============================================================================\n// COMPONENTE MATERIAL BUTTON\n// =============================================================================\n\n@Component({\n selector: 'pdx-material-button',\n standalone: true,\n templateUrl: './material-button.component.html',\n styleUrls: ['./material-button.component.scss'],\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n PraxisIconDirective,\n MatProgressSpinnerModule\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[attr.data-field-type]': '\"button\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-button-variant]': 'buttonVariant()',\n '[attr.data-component-id]': 'componentId()'\n }\n})\nexport class MaterialButtonComponent \n extends SimpleBaseButtonComponent \n implements OnDestroy {\n\n // =============================================================================\n // DEPENDENCIES ESPECÍFICAS\n // =============================================================================\n\n private readonly actionResolver = inject(ActionResolverService, { optional: true });\n private readonly keyboardService = inject(KeyboardShortcutService, { optional: true });\n \n private unregisterShortcut?: () => void;\n\n // =============================================================================\n // SIGNALS ESPECÍFICOS DO MATERIAL BUTTON\n // =============================================================================\n\n /** Estado adicional específico do Material Button */\n protected readonly materialButtonState = signal({\n isPressed: false,\n rippleDisabled: false\n });\n\n // =============================================================================\n // COMPUTED PROPERTIES ESPECÍFICAS\n // =============================================================================\n\n /** Variante do botão Material */\n readonly buttonVariant = computed(() => {\n const metadata = safeButtonMetadata(this.metadata());\n return metadata?.variant || 'basic';\n });\n\n /** Deve desabilitar ripple */\n readonly shouldDisableRipple = computed(() => {\n const metadata = safeButtonMetadata(this.metadata());\n const materialState = this.materialButtonState();\n return metadata?.disableRipple || materialState.rippleDisabled;\n });\n\n /** É botão somente ícone */\n readonly isIconOnlyButton = computed(() => {\n const variant = this.buttonVariant();\n return ['icon', 'fab', 'mini-fab'].includes(variant);\n });\n\n /** Deve mostrar ícone no texto */\n readonly shouldShowIcon = computed(() => {\n const iconName = this.buttonIcon();\n const loading = this.isLoading();\n \n return iconName && !loading && !this.isIconOnlyButton();\n });\n\n /** Atalho de teclado */\n readonly keyboardShortcut = computed(() => {\n const metadata = safeButtonMetadata(this.metadata());\n return metadata?.shortcut;\n });\n\n /** Tooltip text */\n readonly tooltipText = computed(() => {\n const metadata = safeButtonMetadata(this.metadata());\n const shortcut = this.keyboardShortcut();\n \n let tooltip = metadata?.description || '';\n \n if (shortcut && this.keyboardService) {\n const formattedShortcut = this.keyboardService.formatShortcut(shortcut);\n tooltip += tooltip ? ` (${formattedShortcut})` : formattedShortcut;\n }\n \n return tooltip;\n });\n\n // =============================================================================\n // LIFECYCLE\n // =============================================================================\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.setupKeyboardShortcuts();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n // Remover atalho de teclado ao destruir componente\n if (this.unregisterShortcut) {\n this.unregisterShortcut();\n }\n }\n\n /**\n * Classes CSS específicas do Material Button\n */\n protected override getSpecificCssClasses(): string[] {\n const classes: string[] = ['pdx-material-button'];\n \n classes.push(`pdx-button-variant-${this.buttonVariant()}`);\n \n if (this.isIconOnlyButton()) {\n classes.push('pdx-button-icon-only');\n }\n \n if (this.shouldShowIcon()) {\n classes.push('pdx-button-with-icon');\n }\n \n if (this.materialButtonState().isPressed) {\n classes.push('pdx-button-pressed');\n }\n \n if (this.shouldDisableRipple()) {\n classes.push('pdx-button-no-ripple');\n }\n \n return classes;\n }\n\n /**\n * Override do handleClick para adicionar comportamento específico do Material Button\n */\n override async handleClick(event: MouseEvent): Promise<void> {\n // Marcar como pressionado para feedback visual\n this.materialButtonState.update(state => ({ ...state, isPressed: true }));\n \n try {\n // Chamar implementação da base\n await super.handleClick(event);\n } finally {\n // Reset visual state\n setTimeout(() => {\n this.materialButtonState.update(state => ({ ...state, isPressed: false }));\n }, 150);\n }\n }\n\n // =============================================================================\n // MÉTODOS PÚBLICOS\n // =============================================================================\n\n /**\n * Define metadata específica do Material Button\n */\n setButtonMetadata(metadata: MaterialButtonMetadata): void {\n this.setMetadata(metadata);\n }\n\n /**\n * Alterna estado de ripple\n */\n toggleRipple(disabled: boolean): void {\n this.materialButtonState.update(state => ({ ...state, rippleDisabled: disabled }));\n }\n\n /**\n * Obtém informações do botão\n */\n getButtonInfo(): any {\n return {\n id: this.componentId(),\n variant: this.buttonVariant(),\n text: this.buttonText(),\n icon: this.buttonIcon(),\n isLoading: this.isLoading(),\n isDisabled: this.isDisabled(),\n isIconOnly: this.isIconOnlyButton()\n };\n }\n\n // =============================================================================\n // MÉTODOS PRIVADOS\n // =============================================================================\n\n private setupKeyboardShortcuts(): void {\n const shortcut = this.keyboardShortcut();\n \n if (shortcut && this.keyboardService) {\n this.unregisterShortcut = this.keyboardService.registerShortcut(\n shortcut,\n {\n callback: () => { this.triggerAction(); },\n description: `Execute ${this.metadata()?.label || 'button action'}`,\n componentId: this.componentId(),\n priority: 10\n }\n );\n \n this.log('debug', 'Keyboard shortcut registered', { shortcut });\n }\n }\n}\n","<!-- Container principal do button -->\n<div class=\"pdx-button-container\" [class]=\"componentCssClasses()\">\n\n <!-- Button básico -->\n @if (buttonVariant() === 'basic') {\n <button\n mat-button\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText()\"\n [matTooltipDisabled]=\"!tooltipText()\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n }\n \n @if (shouldShowIcon()) {\n <mat-icon class=\"pdx-button-icon\" [praxisIcon]=\"buttonIcon()\"></mat-icon>\n }\n \n <span class=\"pdx-button-text\">{{ buttonText() }}</span>\n </button>\n }\n\n <!-- Button raised -->\n @if (buttonVariant() === 'raised') {\n <button\n mat-raised-button\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText()\"\n [matTooltipDisabled]=\"!tooltipText()\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n }\n \n @if (shouldShowIcon()) {\n <mat-icon class=\"pdx-button-icon\" [praxisIcon]=\"buttonIcon()\"></mat-icon>\n }\n \n <span class=\"pdx-button-text\">{{ buttonText() }}</span>\n </button>\n }\n\n <!-- Button stroked -->\n @if (buttonVariant() === 'stroked') {\n <button\n mat-stroked-button\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText()\"\n [matTooltipDisabled]=\"!tooltipText()\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n }\n \n @if (shouldShowIcon()) {\n <mat-icon class=\"pdx-button-icon\" [praxisIcon]=\"buttonIcon()\"></mat-icon>\n }\n \n <span class=\"pdx-button-text\">{{ buttonText() }}</span>\n </button>\n }\n\n <!-- Button flat -->\n @if (buttonVariant() === 'flat') {\n <button\n mat-flat-button\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText()\"\n [matTooltipDisabled]=\"!tooltipText()\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n }\n \n @if (shouldShowIcon()) {\n <mat-icon class=\"pdx-button-icon\" [praxisIcon]=\"buttonIcon()\"></mat-icon>\n }\n \n <span class=\"pdx-button-text\">{{ buttonText() }}</span>\n </button>\n }\n\n <!-- Button icon -->\n @if (buttonVariant() === 'icon') {\n <button\n mat-icon-button\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label || buttonIcon()\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText() || metadata()?.label\"\n [matTooltipDisabled]=\"!tooltipText() && !metadata()?.label\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"buttonIcon() || 'mi:smart_button'\"></mat-icon>\n }\n </button>\n }\n\n <!-- Button FAB -->\n @if (buttonVariant() === 'fab') {\n <button\n mat-fab\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label || buttonIcon()\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText() || metadata()?.label\"\n [matTooltipDisabled]=\"!tooltipText() && !metadata()?.label\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"20\" class=\"pdx-button-spinner\"></mat-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"buttonIcon() || 'add'\"></mat-icon>\n }\n </button>\n }\n\n <!-- Button Mini FAB -->\n @if (buttonVariant() === 'mini-fab') {\n <button\n mat-mini-fab\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label || buttonIcon()\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText() || metadata()?.label\"\n [matTooltipDisabled]=\"!tooltipText() && !metadata()?.label\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"buttonIcon() || 'add'\"></mat-icon>\n }\n </button>\n }\n\n <!-- Descrição do botão (se disponível) -->\n @if (metadata()?.description && !isIconOnlyButton()) {\n <div \n class=\"pdx-button-description\"\n [id]=\"componentId() + '-description'\">\n {{ metadata()?.description }}\n </div>\n }\n\n</div>\n\n<!-- Loading indicator para validação assíncrona -->\n@if (isLoading()) {\n <div class=\"pdx-validation-loading\" [attr.aria-label]=\"'Validating ' + metadata()?.label\">\n <mat-icon class=\"pdx-loading-spinner\" [praxisIcon]=\"'mi:hourglass_empty'\"></mat-icon>\n <span class=\"pdx-sr-only\">Validating...</span>\n </div>\n}\n\n<!-- Indicador de estado enterprise (debug) -->\n@if (false && metadata()?.security) {\n <div class=\"pdx-debug-info\">\n <small class=\"pdx-debug-security\">\n Security Level: {{ metadata()?.security?.securityLevel }}\n @if (metadata()?.security?.audit?.enabled) {\n | Audit: ON\n }\n | Clicks: {{ 0 }}\n @if (keyboardShortcut()) {\n | Shortcut: {{ keyboardShortcut() }}\n }\n </small>\n </div>\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n MatButtonToggleModule,\n MatButtonToggleChange,\n} from '@angular/material/button-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { GenericCrudService, MaterialButtonToggleMetadata } from '@praxisui/core';\nimport {\n SimpleBaseSelectComponent,\n SimpleSelectMetadata,\n} from '../../base/simple-base-select.component';\n\n@Component({\n selector: 'pdx-material-button-toggle',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonToggleModule,\n MatTooltipModule,\n ],\n template: `\n <div\n class=\"pdx-button-toggle-wrapper\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n @if (label) {\n <label class=\"pdx-button-toggle-label\">{{ label }}</label>\n }\n <mat-button-toggle-group\n [formControl]=\"internalControl\"\n [multiple]=\"multiple()\"\n [appearance]=\"metadata()?.appearance || 'legacy'\"\n (change)=\"onGroupChange($event)\"\n >\n <mat-button-toggle\n *ngFor=\"let option of options(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n @if (hasValidationError()) {\n <div class=\"pdx-error\">{{ errorMessage() }}</div>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <div class=\"pdx-hint\">{{ metadata()!.hint }}</div>\n }\n </div>\n `,\n styles: [\n `\n .pdx-button-toggle-wrapper,\n :host { width: 100%; display: block; }\n .pdx-button-toggle-wrapper { min-height: 56px; padding: 4px 0; }\n .pdx-button-toggle-label { display: block; margin-bottom: 4px; }\n mat-button-toggle-group { width: 100%; }\n `,\n ],\n providers: [\n GenericCrudService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialButtonToggleComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[attr.data-field-type]': '\"buttonToggle\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialButtonToggleComponent extends SimpleBaseSelectComponent {\n override setSelectMetadata(metadata: SimpleSelectMetadata<any>): void {\n const matMetadata = metadata as MaterialButtonToggleMetadata;\n this.devWarnSelectAliases(matMetadata, 'MaterialButtonToggleComponent');\n const source = matMetadata.toggleOptions ?? (matMetadata as any).options;\n const mappedOptions = source?.map((o: any) => ({\n label: o.label ?? o.text,\n value: o.value,\n disabled: o.disabled,\n }));\n\n super.setSelectMetadata({\n ...matMetadata,\n options: mappedOptions,\n multiple: matMetadata.multiple,\n resourcePath: matMetadata.resourcePath,\n filterCriteria: matMetadata.filterCriteria,\n optionLabelKey: matMetadata.optionLabelKey,\n optionValueKey: matMetadata.optionValueKey,\n });\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-simple-select', 'pdx-material-button-toggle'];\n }\n\n onGroupChange(event: MatButtonToggleChange): void {\n if (this.multiple() && this.maxSelections()) {\n const values = event.value as any[];\n if (values.length > this.maxSelections()!) {\n this.internalControl.setValue(values.slice(0, this.maxSelections()!));\n return;\n }\n }\n const option = this.options().find((o) => o.value === event.source.value);\n if (option) {\n this.optionSelected.emit(option);\n }\n this.selectionChange.emit(this.internalControl.value as any);\n }\n}\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ReactiveFormsModule,\n NG_VALUE_ACCESSOR,\n Validators,\n} from '@angular/forms';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { MaterialToggleMetadata } from '@praxisui/core';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n@Component({\n selector: 'pdx-material-slide-toggle',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatSlideToggleModule,\n MatTooltipModule,\n ],\n template: `\n <div\n class=\"pdx-slide-toggle-wrapper\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n <mat-slide-toggle\n [formControl]=\"control()\"\n [required]=\"metadata()?.required || false\"\n [labelPosition]=\"metadata()?.labelPosition || 'after'\"\n [color]=\"metadata()?.color\"\n [disableRipple]=\"metadata()?.disableRipple || false\"\n [hideIcon]=\"metadata()?.hideIcon || false\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n >\n {{ label }}\n </mat-slide-toggle>\n\n @if (hasValidationError()) {\n <div class=\"pdx-error\">{{ errorMessage() }}</div>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <div class=\"pdx-hint\">{{ metadata()!.hint }}</div>\n }\n </div>\n `,\n styles: [\n `\n .pdx-slide-toggle-wrapper {\n display: flex;\n align-items: center;\n width: 100%;\n min-height: 56px; /* alinhar com altura do MatFormField */\n padding: 4px 0;\n }\n :host { display: block; width: 100%; }\n mat-slide-toggle { width: 100%; }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialSlideToggleComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"toggle\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialSlideToggleComponent extends SimpleBaseInputComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialToggleMetadata): void {\n this.setMetadata(metadata);\n if (metadata.requiredTrue) {\n this.control().addValidators(Validators.requiredTrue);\n }\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-material-slide-toggle'];\n }\n}\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ReactiveFormsModule,\n NG_VALUE_ACCESSOR,\n Validators,\n ValidatorFn,\n} from '@angular/forms';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { MaterialSliderMetadata } from '@praxisui/core';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\n@Component({\n selector: 'pdx-material-slider',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatSliderModule,\n MatTooltipModule,\n ],\n template: `\n <div\n class=\"pdx-slider-wrapper\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n <mat-slider\n [min]=\"metadata()?.min ?? 0\"\n [max]=\"metadata()?.max ?? 100\"\n [step]=\"metadata()?.step ?? 1\"\n [discrete]=\"metadata()?.discrete ?? false\"\n [showTickMarks]=\"metadata()?.showTicks ?? false\"\n [displayWith]=\"displayWithFn\"\n [color]=\"metadata()?.color\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n >\n <input matSliderThumb [formControl]=\"control()\" />\n </mat-slider>\n\n @if (hasValidationError()) {\n <div class=\"pdx-error\">{{ errorMessage() }}</div>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <div class=\"pdx-hint\">{{ metadata()!.hint }}</div>\n }\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialSliderComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"slider\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialSliderComponent extends SimpleBaseInputComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n /** Display function for slider values */\n displayWithFn = (value: number) => {\n const metadata = this.metadata() as MaterialSliderMetadata;\n return metadata?.displayWith ? metadata.displayWith(value) : value.toString();\n };\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialSliderMetadata): void {\n this.setMetadata(metadata);\n const validators: ValidatorFn[] = [];\n if (metadata.min !== undefined) {\n validators.push(Validators.min(metadata.min));\n }\n if (metadata.max !== undefined) {\n validators.push(Validators.max(metadata.max));\n }\n if (validators.length) {\n this.control().addValidators(validators);\n }\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-material-slider'];\n }\n}\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatListModule, MatSelectionListChange } from '@angular/material/list';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport {\n MaterialSelectionListMetadata,\n GenericCrudService,\n} from '@praxisui/core';\nimport {\n SimpleBaseSelectComponent,\n SimpleSelectMetadata,\n} from '../../base/simple-base-select.component';\n\n@Component({\n selector: 'pdx-material-selection-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatListModule,\n MatTooltipModule,\n MatButtonModule,\n MatIconModule,\n PraxisIconDirective,\n ],\n template: `\n <div\n class=\"pdx-selection-list-wrapper\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n >\n @if (label) {\n <label class=\"pdx-selection-list-label\">{{ label }}</label>\n }\n @if (showClear()) {\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"onClearClick()\"\n [matTooltip]=\"metadata()?.clearButton?.tooltip || null\"\n [attr.aria-label]=\"metadata()?.clearButton?.ariaLabel || 'Limpar'\"\n style=\"float: right; margin-top: -4px;\"\n >\n <mat-icon\n [color]=\"iconPalette(metadata()?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.clearButton?.iconColor)\"\n [praxisIcon]=\"metadata()?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n <mat-selection-list\n [multiple]=\"metadata()?.multiple || false\"\n [formControl]=\"control()\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <mat-list-option\n *ngFor=\"let option of options(); trackBy: trackByOption\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [selected]=\"isOptionSelected(option.value)\"\n >\n {{ option.label }}\n </mat-list-option>\n </mat-selection-list>\n @if (hasValidationError()) {\n <div class=\"pdx-error\">{{ errorMessage() }}</div>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <div class=\"pdx-hint\">{{ metadata()!.hint }}</div>\n }\n @if (metadata()?.maxSelections) {\n <div class=\"pdx-hint\" align=\"end\">\n {{ control().value?.length || 0 }}/{{ metadata()!.maxSelections }}\n </div>\n }\n </div>\n `,\n styles: [\n `\n .pdx-selection-list-wrapper { width: 100%; min-height: 56px; padding: 4px 0; }\n :host { display: block; width: 100%; }\n mat-selection-list { width: 100%; }\n `,\n ],\n providers: [\n GenericCrudService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialSelectionListComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"selectionList\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialSelectionListComponent extends SimpleBaseSelectComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n override setSelectMetadata(metadata: SimpleSelectMetadata<any>): void {\n const matMetadata = metadata as MaterialSelectionListMetadata;\n this.devWarnSelectAliases(matMetadata, 'MaterialSelectionListComponent');\n const source = matMetadata.listOptions ?? (matMetadata as any).options;\n const mappedOptions = source?.map((o: any) => ({\n label: o.label ?? o.text,\n value: o.value,\n disabled: o.disabled,\n }));\n\n super.setSelectMetadata({\n ...matMetadata,\n options: mappedOptions,\n multiple: matMetadata.multiple ?? false,\n searchable: matMetadata.searchable,\n selectAll: matMetadata.selectAll,\n maxSelections: matMetadata.maxSelections,\n resourcePath: matMetadata.resourcePath,\n filterCriteria: matMetadata.filterCriteria,\n optionLabelKey: matMetadata.optionLabelKey,\n optionValueKey: matMetadata.optionValueKey,\n });\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-simple-select', 'pdx-material-selection-list'];\n }\n\n onSelectionChange(event: MatSelectionListChange): void {\n // Get the first option from the options array (since usually only one changes at a time)\n const changedOption = event.options[0];\n if (!changedOption) return;\n \n const option = this.options().find((o) => o.value === changedOption.value);\n if (this.multiple() && this.maxSelections()) {\n const current = this.control().value as any[];\n if (current.length > this.maxSelections()!) {\n changedOption.selected = false;\n this.control().setValue(\n current.filter((v) => v !== changedOption.value),\n { emitEvent: false },\n );\n return;\n }\n }\n if (option) {\n this.optionSelected.emit(option);\n }\n this.selectionChange.emit(this.control().value as any);\n }\n\n isOptionSelected(value: any): boolean {\n const current = this.control().value;\n return Array.isArray(current) ? current.includes(value) : current === value;\n }\n}\n","import { Component, forwardRef, computed, effect, signal, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n DragDropModule,\n CdkDragDrop,\n moveItemInArray,\n transferArrayItem,\n} from '@angular/cdk/drag-drop';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatListModule, MatSelectionList } from '@angular/material/list';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport {\n SimpleBaseSelectComponent,\n SelectOption,\n SimpleSelectMetadata,\n} from '../../base/simple-base-select.component';\n\n@Component({\n selector: 'pdx-material-transfer-list',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DragDropModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n PraxisIconDirective,\n MatListModule,\n MatTooltipModule,\n ],\n template: `\n <div class=\"pdx-transfer-list\">\n <div class=\"pdx-transfer-column\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ leftLabel }}</mat-label>\n <input\n matInput\n [value]=\"leftFilter()\"\n (input)=\"leftFilter.set($any($event.target).value)\"\n [placeholder]=\"leftPlaceholder\"\n />\n </mat-form-field>\n <mat-selection-list\n cdkDropList\n id=\"leftList\"\n [cdkDropListData]=\"leftOptions()\"\n [cdkDropListConnectedTo]=\"['rightList']\"\n (cdkDropListDropped)=\"drop($event)\"\n #leftSel=\"matSelectionList\"\n >\n <mat-list-option\n *ngFor=\"let option of filteredLeft(); trackBy: trackByOption\"\n cdkDrag\n [cdkDragData]=\"option\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </mat-list-option>\n </mat-selection-list>\n </div>\n\n <div class=\"pdx-transfer-actions\">\n @if (showClear()) {\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"onClearClick()\"\n [matTooltip]=\"metadata()?.clearButton?.tooltip || null\"\n [attr.aria-label]=\"metadata()?.clearButton?.ariaLabel || 'Limpar'\"\n aria-label=\"Clear selection\"\n >\n <mat-icon\n [color]=\"iconPalette(metadata()?.clearButton?.iconColor)\"\n [style.color]=\"iconCustomColor(metadata()?.clearButton?.iconColor)\"\n [praxisIcon]=\"metadata()?.clearButton?.icon || 'mi:clear'\"\n ></mat-icon>\n </button>\n }\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"moveRight(getSelectedOptions(leftSel))\"\n [disabled]=\"leftSel.selectedOptions.isEmpty()\"\n aria-label=\"Move selected to right\"\n >\n <mat-icon [praxisIcon]=\"'mi:chevron_right'\"></mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"moveAllToRight()\"\n [disabled]=\"leftOptions().length === 0\"\n aria-label=\"Move all to right\"\n >\n <mat-icon [praxisIcon]=\"'mi:last_page'\"></mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"moveLeft(getSelectedOptions(rightSel))\"\n [disabled]=\"rightSel.selectedOptions.isEmpty()\"\n aria-label=\"Move selected to left\"\n >\n <mat-icon [praxisIcon]=\"'mi:chevron_left'\"></mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"moveAllToLeft()\"\n [disabled]=\"rightOptions().length === 0\"\n aria-label=\"Move all to left\"\n >\n <mat-icon [praxisIcon]=\"'mi:first_page'\"></mat-icon>\n </button>\n </div>\n\n <div class=\"pdx-transfer-column\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ rightLabel }}</mat-label>\n <input\n matInput\n [value]=\"rightFilter()\"\n (input)=\"rightFilter.set($any($event.target).value)\"\n [placeholder]=\"rightPlaceholder\"\n />\n </mat-form-field>\n <mat-selection-list\n cdkDropList\n id=\"rightList\"\n [cdkDropListData]=\"rightOptions()\"\n [cdkDropListConnectedTo]=\"['leftList']\"\n (cdkDropListDropped)=\"drop($event)\"\n #rightSel=\"matSelectionList\"\n >\n <mat-list-option\n *ngFor=\"let option of filteredRight(); trackBy: trackByOption\"\n cdkDrag\n [cdkDragData]=\"option\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n >\n {{ option.label }}\n </mat-list-option>\n </mat-selection-list>\n </div>\n </div>\n `,\n styles: [\n `\n :host { display: block; width: 100%; }\n .pdx-transfer-list { width: 100%; min-height: 56px; padding: 4px 0; }\n .pdx-transfer-column { width: 100%; }\n .pdx-transfer-column mat-form-field { width: 100%; }\n .pdx-transfer-actions { display: flex; flex-direction: column; gap: 4px; align-items: center; justify-content: center; padding: 0 8px; }\n @media (min-width: 640px) {\n .pdx-transfer-list { display: grid; grid-template-columns: 1fr auto 1fr; gap: 12px; }\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialTransferListComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"transfer-list\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialTransferListComponent extends SimpleBaseSelectComponent {\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n // Labels and placeholders\n leftLabel = 'Available';\n rightLabel = 'Selected';\n leftPlaceholder = '';\n rightPlaceholder = '';\n\n readonly leftOptions = signal<SelectOption<any>[]>([]);\n readonly rightOptions = signal<SelectOption<any>[]>([]);\n\n readonly leftFilter = signal<string>('');\n readonly rightFilter = signal<string>('');\n\n readonly filteredLeft = computed(() => {\n const term = this.leftFilter().toLowerCase();\n return term\n ? this.leftOptions().filter((o) => o.label.toLowerCase().includes(term))\n : this.leftOptions();\n });\n\n readonly filteredRight = computed(() => {\n const term = this.rightFilter().toLowerCase();\n return term\n ? this.rightOptions().filter((o) => o.label.toLowerCase().includes(term))\n : this.rightOptions();\n });\n\n constructor() {\n super();\n effect(() => {\n // Update lists when options change\n this.updateListsFromValue();\n });\n }\n\n override setSelectMetadata(metadata: SimpleSelectMetadata<any>): void {\n const meta = metadata as any;\n const source:\n | Array<{\n label?: string;\n text?: string;\n value: any;\n disabled?: boolean;\n }>\n | undefined = meta.transferOptions ?? meta.options;\n const mapped = source?.map((o) => ({\n label: o.label ?? o.text ?? '',\n value: o.value,\n disabled: o.disabled,\n }));\n\n super.setSelectMetadata({ ...meta, options: mapped, multiple: true });\n this.leftLabel = meta.leftLabel ?? 'Available';\n this.rightLabel = meta.rightLabel ?? 'Selected';\n this.leftPlaceholder = meta.leftPlaceholder ?? '';\n this.rightPlaceholder = meta.rightPlaceholder ?? '';\n this.updateListsFromValue();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.control()\n .valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.updateListsFromValue());\n }\n\n private updateListsFromValue(): void {\n const selected = Array.isArray(this.control().value)\n ? this.control().value\n : [];\n const all = this.options();\n this.rightOptions.set(all.filter((o) => selected.includes(o.value)));\n this.leftOptions.set(all.filter((o) => !selected.includes(o.value)));\n }\n\n getSelectedOptions(list: MatSelectionList): SelectOption[] {\n const values = list.selectedOptions.selected.map((o) => o.value);\n return [...this.leftOptions(), ...this.rightOptions()].filter((o) =>\n values.includes(o.value),\n );\n }\n\n moveRight(options: SelectOption[]): void {\n if (!options.length) return;\n const max = this.maxSelections();\n const right = this.rightOptions();\n options.forEach((o) => {\n if (max !== null && right.length >= max!) {\n return;\n }\n if (!right.some((r) => r.value === o.value)) {\n right.push(o);\n }\n });\n this.rightOptions.set([...right]);\n this.leftOptions.set(\n this.leftOptions().filter((o) => !options.includes(o)),\n );\n this.syncControl();\n }\n\n moveLeft(options: SelectOption[]): void {\n if (!options.length) return;\n const left = this.leftOptions();\n options.forEach((o) => {\n if (!left.some((l) => l.value === o.value)) {\n left.push(o);\n }\n });\n this.leftOptions.set([...left]);\n this.rightOptions.set(\n this.rightOptions().filter((o) => !options.includes(o)),\n );\n this.syncControl();\n }\n\n moveAllToRight(): void {\n this.moveRight(this.leftOptions().filter((o) => !o.disabled));\n }\n\n moveAllToLeft(): void {\n this.moveLeft(this.rightOptions());\n }\n\n drop(event: CdkDragDrop<SelectOption<any>[]>): void {\n if (event.previousContainer === event.container) {\n moveItemInArray(\n event.container.data,\n event.previousIndex,\n event.currentIndex,\n );\n } else {\n if (\n event.container.id === 'rightList' &&\n this.maxSelections() !== null &&\n event.container.data.length >= this.maxSelections()!\n ) {\n return;\n }\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex,\n );\n }\n this.leftOptions.set([...this.leftOptions()]);\n this.rightOptions.set([...this.rightOptions()]);\n this.syncControl();\n }\n\n private syncControl(): void {\n const values = this.rightOptions().map((o) => o.value);\n this.control().setValue(values);\n this.selectionChange.emit(values);\n }\n}\n","import { Component, forwardRef, computed, Input } from '@angular/core';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialYearInputMetadata } from '@praxisui/core';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\n\n@Component({\n selector: 'pdx-year-input',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n @if (metadata()?.prefixIcon) {\n <mat-icon matPrefix [color]=\"iconPalette(metadata()?.prefixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.prefixIconColor)\" [praxisIcon]=\"metadata()!.prefixIcon\"></mat-icon>\n }\n\n <input\n matInput\n type=\"number\"\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [placeholder]=\"placeholder || ''\"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [min]=\"minYear() ?? null\"\n [max]=\"maxYear() ?? null\"\n [step]=\"step()\"\n (input)=\"onYearInput($event)\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n @if (metadata()?.suffixIcon) {\n <mat-icon matSuffix [color]=\"iconPalette(metadata()?.suffixIconColor)\" [style.color]=\"iconCustomColor(metadata()?.suffixIconColor)\" [praxisIcon]=\"metadata()!.suffixIcon\"></mat-icon>\n }\n\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n </mat-form-field>\n `,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n PraxisIconDirective,\n MatTooltipModule,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PdxYearInputComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"yearInput\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class PdxYearInputComponent extends SimpleBaseInputComponent {\n private get meta(): MaterialYearInputMetadata | null {\n return this.metadata() as MaterialYearInputMetadata | null;\n }\n\n readonly minYear = computed(() => this.meta?.minYear);\n readonly maxYear = computed(() => this.meta?.maxYear);\n readonly step = computed(() => this.meta?.step || 1);\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n override ngOnInit(): void {\n const meta = this.meta;\n\n this.control().addValidators([Validators.pattern(/^\\d{4}$/)]);\n\n if (meta?.minYear) {\n this.control().addValidators(Validators.min(meta.minYear));\n }\n\n if (meta?.maxYear) {\n this.control().addValidators(Validators.max(meta.maxYear));\n }\n\n super.ngOnInit();\n }\n\n setInputMetadata(metadata: MaterialYearInputMetadata): void {\n this.setMetadata(metadata);\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n onYearInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n if (this.meta?.mask === '4-digits') {\n value = value.replace(/[^0-9]/g, '').slice(0, 4);\n this.control().setValue(value, { emitEvent: false });\n input.value = value;\n }\n }\n\n protected override getSpecificCssClasses(): string[] {\n const classes = ['pdx-year-input'];\n if (this.metadata()?.cssClass) {\n classes.push(this.metadata()!.cssClass!);\n }\n return classes;\n }\n}\n","import { Component, forwardRef, OnInit, Input } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n FormGroup,\n FormControl,\n ValidatorFn,\n AbstractControl,\n ValidationErrors,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTimepickerModule } from '@angular/material/timepicker';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { MaterialTimeRangeMetadata } from '@praxisui/core';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\n\nexport interface TimeRangeValue {\n start: string | null;\n end: string | null;\n}\n\n@Component({\n selector: 'pdx-material-time-range',\n standalone: true,\n template: `\n <div class=\"time-range-container\" [formGroup]=\"timeRangeForm\">\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n class=\"time-range-field\"\n >\n <mat-label>{{ startLabel() }}</mat-label>\n <input\n matInput\n formControlName=\"start\"\n [matTimepicker]=\"startPicker\"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.placeholder]=\"startPlaceholder()\"\n />\n <mat-timepicker-toggle\n matSuffix\n [for]=\"startPicker\"\n ></mat-timepicker-toggle>\n <mat-timepicker\n #startPicker\n [interval]=\"metadata()?.interval || null\"\n [options]=\"metadata()?.timeOptions || null\"\n [disableRipple]=\"metadata()?.disableRipple || false\"\n ></mat-timepicker>\n </mat-form-field>\n\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n class=\"time-range-field\"\n >\n <mat-label>{{ endLabel() }}</mat-label>\n <input\n matInput\n formControlName=\"end\"\n [matTimepicker]=\"endPicker\"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.placeholder]=\"endPlaceholder()\"\n />\n <mat-timepicker-toggle\n matSuffix\n [for]=\"endPicker\"\n ></mat-timepicker-toggle>\n <mat-timepicker\n #endPicker\n [interval]=\"metadata()?.interval || null\"\n [options]=\"metadata()?.timeOptions || null\"\n [disableRipple]=\"metadata()?.disableRipple || false\"\n ></mat-timepicker>\n </mat-form-field>\n </div>\n @if (hasValidationError()) {\n <mat-error>{{ errorMessage() }}</mat-error>\n }\n @if (metadata()?.hint && !hasValidationError()) {\n <mat-hint [align]=\"metadata()?.hintAlign || 'start'\">\n {{ metadata()!.hint }}\n </mat-hint>\n }\n `,\n styles: [\n `\n .time-range-container {\n display: flex;\n gap: 1rem;\n }\n .time-range-field {\n flex: 1;\n }\n `,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatTimepickerModule,\n MatTooltipModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PdxMaterialTimeRangeComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"timeRange\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class PdxMaterialTimeRangeComponent\n extends SimpleBaseInputComponent\n implements OnInit\n{\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n timeRangeForm = new FormGroup({\n start: new FormControl<string | null>(null),\n end: new FormControl<string | null>(null),\n });\n\n private get meta(): MaterialTimeRangeMetadata | null {\n return this.metadata() as MaterialTimeRangeMetadata | null;\n }\n\n startLabel = () => this.meta?.startLabel || 'Start Time';\n endLabel = () => this.meta?.endLabel || 'End Time';\n startPlaceholder = () => this.meta?.startPlaceholder || '';\n endPlaceholder = () => this.meta?.endPlaceholder || '';\n\n override ngOnInit(): void {\n this.timeRangeForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.setValue(value);\n });\n\n this.timeRangeForm.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const errors = this.timeRangeForm.errors;\n this.control().setErrors(errors);\n });\n\n this.control()\n .valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value: TimeRangeValue | null) => {\n this.timeRangeForm.patchValue(value ?? { start: null, end: null }, {\n emitEvent: false,\n });\n });\n\n // Set validators\n this.timeRangeForm.setValidators([\n this.rangeOrderValidator(),\n this.minDistanceValidator(this.meta?.minDistanceMinutes),\n this.maxDistanceValidator(this.meta?.maxDistanceMinutes),\n ]);\n\n super.ngOnInit();\n }\n\n override writeValue(value: TimeRangeValue | null): void {\n if (value) {\n this.timeRangeForm.setValue(\n {\n start: value.start || null,\n end: value.end || null,\n },\n { emitEvent: false },\n );\n } else {\n this.timeRangeForm.reset(\n { start: null, end: null },\n { emitEvent: false },\n );\n }\n }\n\n override setDisabledState(isDisabled: boolean): void {\n isDisabled ? this.timeRangeForm.disable() : this.timeRangeForm.enable();\n super.setDisabledState(isDisabled);\n }\n\n private rangeOrderValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const start = control.get('start')?.value;\n const end = control.get('end')?.value;\n if (start && end && start > end) {\n return {\n range: {\n message:\n this.meta?.validators?.rangeMessage ||\n 'Start time must be before end time',\n },\n };\n }\n return null;\n };\n }\n\n private minDistanceValidator(minutes?: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!minutes) return null;\n const start = control.get('start')?.value;\n const end = control.get('end')?.value;\n if (start && end) {\n const startMinutes = this.timeToMinutes(start);\n const endMinutes = this.timeToMinutes(end);\n if (endMinutes - startMinutes < minutes) {\n return {\n minDistance: {\n message:\n this.meta?.validators?.minDistanceMessage ||\n `The distance must be at least ${minutes} minutes`,\n },\n };\n }\n }\n return null;\n };\n }\n\n private maxDistanceValidator(minutes?: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (!minutes) return null;\n const start = control.get('start')?.value;\n const end = control.get('end')?.value;\n if (start && end) {\n const startMinutes = this.timeToMinutes(start);\n const endMinutes = this.timeToMinutes(end);\n if (endMinutes - startMinutes > minutes) {\n return {\n maxDistance: {\n message:\n this.meta?.validators?.maxDistanceMessage ||\n `The distance must be at most ${minutes} minutes`,\n },\n };\n }\n }\n return null;\n };\n }\n\n private timeToMinutes(time: string): number {\n const [hours, minutes] = time.split(':').map(Number);\n return hours * 60 + minutes;\n }\n\n setInputMetadata(metadata: MaterialTimeRangeMetadata): void {\n this.setMetadata(metadata);\n }\n\n isReadonlyEffective(): boolean {\n const meta = this.metadata();\n const metaReadonly = (meta as any)?.readonly || (meta as any)?.readOnly;\n return !!(this.readonlyMode || this.presentationMode || metaReadonly);\n }\n}\n","/**\n * Serviço ultra-simplificado de registro de componentes\n * Focado no essencial: registro, carregamento e cache básico\n */\n\nimport { Injectable } from '@angular/core';\nimport {\n FieldControlType as FieldControlTypeEnum,\n type FieldControlType,\n} from '@praxisui/core';\nimport {\n IComponentRegistry,\n ComponentRegistration,\n RegistryStats,\n ComponentLoadResult,\n CACHE_TTL,\n MAX_LOAD_ATTEMPTS,\n RETRY_DELAY,\n} from './component-registry.interface';\nimport { TextInputComponent } from '../../components/text-input';\nimport { EmailInputComponent } from '../../components/email-input';\nimport { PasswordInputComponent } from '../../components/password-input';\nimport { ColorInputComponent } from '../../components/color-input';\nimport { DateInputComponent } from '../../components/date-input';\nimport { MaterialDatepickerComponent } from '../../components/material-datepicker';\nimport { MaterialDateRangeComponent } from '../../components/material-date-range';\nimport { DatetimeLocalInputComponent } from '../../components/datetime-local-input';\nimport { MonthInputComponent } from '../../components/month-input';\nimport { NumberInputComponent } from '../../components/number-input';\nimport { MaterialCurrencyComponent } from '../../components/material-currency';\nimport { MaterialCpfCnpjInputComponent } from '../../components/material-cpf-cnpj-input';\nimport { MaterialPriceRangeComponent } from '../../components/material-price-range';\nimport { PdxMaterialRangeSliderComponent } from '../../components/material-range-slider';\nimport { SearchInputComponent } from '../../components/search-input';\nimport { PhoneInputComponent } from '../../components/phone-input';\nimport { TimeInputComponent } from '../../components/time-input';\nimport { MaterialTimepickerComponent } from '../../components/material-timepicker';\nimport { UrlInputComponent } from '../../components/url-input';\nimport { WeekInputComponent } from '../../components/week-input';\nimport { MaterialColorPickerComponent } from '../../components/material-colorpicker';\nimport { MaterialTextareaComponent } from '../../components/material-textarea';\nimport { MaterialSelectComponent } from '../../components/material-select';\nimport { MaterialMultiSelectComponent } from '../../components/material-multi-select';\nimport { MaterialMultiSelectTreeComponent } from '../../components/material-multi-select-tree';\nimport { MaterialTreeSelectComponent } from '../../components/material-tree-select';\nimport { MaterialFileUploadComponent } from '../../components/material-file-upload';\nimport { MaterialSearchableSelectComponent } from '../../components/material-searchable-select';\nimport { MaterialAutocompleteComponent } from '../../components/material-autocomplete';\nimport { MaterialAsyncSelectComponent } from '../../components/material-async-select';\nimport { MaterialRadioGroupComponent } from '../../components/material-radio-group';\nimport { MaterialCheckboxGroupComponent } from '../../components/material-checkbox-group';\n\nimport { MaterialChipsComponent } from '../../components/material-chips';\nimport { MaterialButtonComponent } from '../../components/material-button';\nimport { MaterialButtonToggleComponent } from '../../components/material-button-toggle';\nimport { MaterialSlideToggleComponent } from '../../components/material-slide-toggle';\nimport { MaterialSliderComponent } from '../../components/material-slider';\nimport { MaterialSelectionListComponent } from '../../components/material-selection-list';\n\nimport { MaterialTransferListComponent } from '../../components/material-transfer-list';\nimport { PdxYearInputComponent } from '../../components/pdx-year-input';\nimport { PdxMaterialTimeRangeComponent } from '../../components/pdx-material-time-range';\nimport { PdxCronBuilderComponent } from '@praxisui/cron-builder';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ComponentRegistryService implements IComponentRegistry {\n /**\n * Registro interno de componentes\n */\n private readonly registry = new Map<\n FieldControlType,\n ComponentRegistration\n >();\n\n constructor() {\n this.initializeDefaultComponents();\n }\n\n // =============================================================================\n // INTERFACE PÚBLICA ESSENCIAL\n // =============================================================================\n\n /**\n * Registra um novo componente\n */\n register<T>(\n type: FieldControlType,\n factory: () => Promise<import('@angular/core').Type<T>>,\n ): void {\n this.registry.set(type, { factory });\n }\n\n /**\n * Obtém um componente registrado com cache inteligente\n * Handles both string literals and enum values for backward compatibility\n */\n async getComponent<T>(\n type: FieldControlType | string,\n ): Promise<import('@angular/core').Type<T> | null> {\n // Normalize the type - convert string literals to enum values if needed\n const normalizedType = this.normalizeControlType(type);\n\n const registration = this.registry.get(normalizedType);\n if (!registration) {\n console.warn(\n `[ComponentRegistry] Componente '${type}' (normalized: '${normalizedType}') não registrado`,\n );\n return null;\n }\n\n // Verificar se o cache é válido\n if (this.isCacheValid(registration)) {\n return registration.cached as import('@angular/core').Type<T>;\n }\n\n // Tentar carregar com retry logic\n return this.loadComponentWithRetry(registration, normalizedType as string);\n }\n\n /**\n * Verifica se um tipo está registrado\n * Handles both string literals and enum values\n */\n isRegistered(type: FieldControlType | string): boolean {\n const normalizedType = this.normalizeControlType(type);\n return this.registry.has(normalizedType);\n }\n\n /**\n * Lista todos os tipos registrados\n */\n getRegisteredTypes(): FieldControlType[] {\n return Array.from(this.registry.keys());\n }\n\n /**\n * Limpa o cache de todos os componentes\n */\n clearCache(): void {\n this.registry.forEach((registration) => {\n registration.cached = undefined;\n registration.cachedAt = undefined;\n registration.loadAttempts = 0;\n registration.lastError = undefined;\n });\n console.debug('[ComponentRegistry] Cache limpo');\n }\n\n // =============================================================================\n // MÉTODOS UTILITÁRIOS ESSENCIAIS\n // =============================================================================\n\n /**\n * Obtém estatísticas do registro\n */\n getStats(): RegistryStats {\n const cachedCount = Array.from(this.registry.values()).filter(\n (reg) => reg.cached,\n ).length;\n\n return {\n registeredComponents: this.registry.size,\n cachedComponents: cachedCount,\n registeredTypes: this.getRegisteredTypes(),\n };\n }\n\n /**\n * Limpa cache de componentes específicos ou todos\n */\n clearCacheForType(type: FieldControlType): void {\n const registration = this.registry.get(type);\n if (registration) {\n registration.cached = undefined;\n registration.cachedAt = undefined;\n registration.loadAttempts = 0;\n registration.lastError = undefined;\n console.debug(`[ComponentRegistry] Cache limpo para ${type}`);\n }\n }\n\n /**\n * Remove um componente do registro\n */\n unregister(type: FieldControlType): boolean {\n return this.registry.delete(type);\n }\n\n /**\n * Pré-carrega componentes especificados\n */\n async preload(types: FieldControlType[]): Promise<ComponentLoadResult[]> {\n const results: ComponentLoadResult[] = [];\n\n for (const type of types) {\n try {\n const component = await this.getComponent(type);\n results.push({\n component,\n success: !!component,\n });\n } catch (error) {\n results.push({\n component: null,\n success: false,\n error: error as Error,\n });\n }\n }\n\n return results;\n }\n\n // =============================================================================\n // MÉTODOS PRIVADOS DE NORMALIZAÇÃO\n // =============================================================================\n\n /**\n * Normalizes control type to handle both string literals and enum values\n * This provides backward compatibility for existing code using string literals\n */\n private normalizeControlType(\n type: FieldControlType | string,\n ): FieldControlType {\n // If it's already a valid enum value, return as-is\n if (\n Object.values(FieldControlTypeEnum).includes(type as FieldControlType)\n ) {\n return type as FieldControlType;\n }\n\n const sanitized = String(type)\n .toLowerCase()\n .replace(/[-_\\s]/g, '');\n const synonyms: Record<string, FieldControlType> = {\n radiogroup: FieldControlTypeEnum.RADIO,\n checkboxgroup: FieldControlTypeEnum.CHECKBOX,\n textarea: FieldControlTypeEnum.TEXTAREA,\n autocomplete: FieldControlTypeEnum.AUTO_COMPLETE,\n multiselect: FieldControlTypeEnum.MULTI_SELECT,\n multiselecttree: FieldControlTypeEnum.MULTI_SELECT_TREE,\n treeselect: FieldControlTypeEnum.TREE_SELECT,\n datepicker: FieldControlTypeEnum.DATE_PICKER,\n daterange: FieldControlTypeEnum.DATE_RANGE,\n datetime: FieldControlTypeEnum.DATETIME_LOCAL_INPUT,\n timepicker: FieldControlTypeEnum.TIME_PICKER,\n timerange: FieldControlTypeEnum.TIME_RANGE,\n pricerange: FieldControlTypeEnum.PRICE_RANGE,\n rangeslider: FieldControlTypeEnum.RANGE_SLIDER,\n chiplist: FieldControlTypeEnum.CHIP_LIST,\n chipinput: FieldControlTypeEnum.CHIP_INPUT,\n searchinput: FieldControlTypeEnum.SEARCH_INPUT,\n fileupload: FieldControlTypeEnum.FILE_UPLOAD,\n // Custom aliases for non-enum types registered by string\n asyncselect: 'async-select' as FieldControlType,\n materialasyncselect: 'async-select' as FieldControlType,\n searchableselect: 'searchable-select' as FieldControlType,\n materialsearchableselect: 'searchable-select' as FieldControlType,\n };\n\n if (synonyms[sanitized]) {\n return synonyms[sanitized];\n }\n\n // Try to find matching enum value by string comparison\n const enumEntry = Object.entries(FieldControlTypeEnum).find(\n ([key, value]) => value === type || key.toLowerCase() === sanitized,\n );\n\n if (enumEntry) {\n return enumEntry[1] as FieldControlType;\n }\n\n // Fallback: return the original type (might cause issues but maintains compatibility)\n console.warn(\n `[ComponentRegistry] Could not normalize control type: '${type}'`,\n );\n return type as FieldControlType;\n }\n\n // =============================================================================\n // INICIALIZAÇÃO DE COMPONENTES PADRÃO\n // =============================================================================\n\n /**\n * Registra componentes Material Design padrão\n */\n private initializeDefaultComponents(): void {\n const wrap = <T>(c: import('@angular/core').Type<T>) => Promise.resolve(c);\n\n // Inputs básicos e variantes\n this.register(FieldControlTypeEnum.INPUT, () => wrap(TextInputComponent));\n this.register(FieldControlTypeEnum.EMAIL_INPUT, () =>\n wrap(EmailInputComponent),\n );\n this.register(FieldControlTypeEnum.PASSWORD, () =>\n wrap(PasswordInputComponent),\n );\n this.register(FieldControlTypeEnum.COLOR_INPUT, () =>\n wrap(ColorInputComponent),\n );\n this.register(FieldControlTypeEnum.DATE_INPUT, () =>\n wrap(DateInputComponent),\n );\n this.register(FieldControlTypeEnum.DATETIME_LOCAL_INPUT, () =>\n wrap(DatetimeLocalInputComponent),\n );\n this.register(FieldControlTypeEnum.MONTH_INPUT, () =>\n wrap(MonthInputComponent),\n );\n this.register(FieldControlTypeEnum.NUMERIC_TEXT_BOX, () =>\n wrap(NumberInputComponent),\n );\n this.register(FieldControlTypeEnum.SLIDER, () =>\n wrap(MaterialSliderComponent),\n );\n this.register(FieldControlTypeEnum.CURRENCY_INPUT, () =>\n wrap(MaterialCurrencyComponent),\n );\n this.register(FieldControlTypeEnum.CPF_CNPJ_INPUT, () =>\n wrap(MaterialCpfCnpjInputComponent),\n );\n this.register(FieldControlTypeEnum.RANGE_SLIDER, () =>\n wrap(PdxMaterialRangeSliderComponent),\n );\n // Price range (two currency inputs)\n this.register(FieldControlTypeEnum.PRICE_RANGE, () =>\n wrap(MaterialPriceRangeComponent),\n );\n this.register(FieldControlTypeEnum.SEARCH_INPUT, () =>\n wrap(SearchInputComponent),\n );\n this.register(FieldControlTypeEnum.PHONE, () => wrap(PhoneInputComponent));\n this.register(FieldControlTypeEnum.TIME_INPUT, () =>\n wrap(TimeInputComponent),\n );\n this.register(FieldControlTypeEnum.TIME_PICKER, () =>\n wrap(MaterialTimepickerComponent),\n );\n this.register(FieldControlTypeEnum.URL_INPUT, () =>\n wrap(UrlInputComponent),\n );\n this.register(FieldControlTypeEnum.WEEK_INPUT, () =>\n wrap(WeekInputComponent),\n );\n // Upgrade COLOR_PICKER to the new PDx Color Picker v2 when available\n // Fallback remains MaterialColorPickerComponent if import swap is undesired.\n this.register(FieldControlTypeEnum.COLOR_PICKER, async () => {\n const { PdxColorPickerComponent } = await import('../../components/color-picker');\n return PdxColorPickerComponent as any;\n });\n\n // Rating (new)\n this.register(FieldControlTypeEnum.RATING, async () => {\n const { MaterialRatingComponent } = await import('../../components/material-rating');\n return MaterialRatingComponent as any;\n });\n\n // Date inputs com Material\n this.register(FieldControlTypeEnum.DATE_PICKER, () =>\n wrap(MaterialDatepickerComponent),\n );\n this.register(FieldControlTypeEnum.DATE_RANGE, () =>\n wrap(MaterialDateRangeComponent),\n );\n\n // Textarea e selects\n this.register(FieldControlTypeEnum.TEXTAREA, () =>\n wrap(MaterialTextareaComponent),\n );\n this.register(FieldControlTypeEnum.SELECT, () =>\n wrap(MaterialSelectComponent),\n );\n this.register(FieldControlTypeEnum.MULTI_SELECT, () =>\n wrap(MaterialMultiSelectComponent),\n );\n this.register(FieldControlTypeEnum.MULTI_SELECT_TREE, () =>\n wrap(MaterialMultiSelectTreeComponent),\n );\n this.register(FieldControlTypeEnum.TREE_SELECT, () =>\n wrap(MaterialTreeSelectComponent),\n );\n this.register(FieldControlTypeEnum.FILE_UPLOAD, () =>\n wrap(MaterialFileUploadComponent),\n );\n this.register(FieldControlTypeEnum.TRANSFER_LIST, () =>\n wrap(MaterialTransferListComponent),\n );\n this.register('searchable-select' as FieldControlType, () =>\n wrap(MaterialSearchableSelectComponent),\n );\n this.register(FieldControlTypeEnum.AUTO_COMPLETE, () =>\n wrap(MaterialAutocompleteComponent),\n );\n this.register(FieldControlTypeEnum.CHIP_INPUT, () =>\n wrap(MaterialChipsComponent),\n );\n // Also register CHIP_LIST to the same component for compatibility\n this.register(FieldControlTypeEnum.CHIP_LIST, () =>\n wrap(MaterialChipsComponent),\n );\n this.register(FieldControlTypeEnum.TOGGLE, () =>\n wrap(MaterialSlideToggleComponent),\n );\n this.register('async-select' as FieldControlType, () =>\n wrap(MaterialAsyncSelectComponent),\n );\n this.register(FieldControlTypeEnum.RADIO, () =>\n wrap(MaterialRadioGroupComponent),\n );\n this.register(FieldControlTypeEnum.CHECKBOX, () =>\n wrap(MaterialCheckboxGroupComponent),\n );\n this.register(FieldControlTypeEnum.BUTTON_TOGGLE, () =>\n wrap(MaterialButtonToggleComponent),\n );\n this.register(FieldControlTypeEnum.SELECTION_LIST, () =>\n wrap(MaterialSelectionListComponent),\n );\n\n // Buttons (non-CVA, action widgets) can be used in dynamic forms\n this.register(FieldControlTypeEnum.BUTTON, () =>\n wrap(MaterialButtonComponent),\n );\n\n // Mapeamentos para controlTypes do JSON Schema/OpenAPI\n this.register('numericTextBox' as FieldControlType, () =>\n wrap(NumberInputComponent),\n );\n this.register('phone' as FieldControlType, () => wrap(PhoneInputComponent));\n this.register('date' as FieldControlType, () =>\n wrap(MaterialDatepickerComponent),\n );\n this.register('dateRange' as FieldControlType, () =>\n wrap(MaterialDateRangeComponent),\n );\n this.register('checkbox' as FieldControlType, () =>\n wrap(MaterialCheckboxGroupComponent),\n );\n\n // Additional aliases for common types used in configs\n this.register('dateTime' as FieldControlType, () =>\n wrap(DatetimeLocalInputComponent),\n );\n this.register('dateTimeRange' as FieldControlType, () =>\n wrap(MaterialDateRangeComponent),\n );\n this.register('treeView' as FieldControlType, () =>\n wrap(MaterialTreeSelectComponent),\n );\n this.register('buttonGroup' as FieldControlType, () =>\n wrap(MaterialButtonToggleComponent),\n );\n\n // Register new custom components\n this.register(FieldControlTypeEnum.YEAR_INPUT, () =>\n wrap(PdxYearInputComponent),\n );\n this.register(FieldControlTypeEnum.TIME_RANGE, () =>\n wrap(PdxMaterialTimeRangeComponent),\n );\n this.register(FieldControlTypeEnum.CRON_BUILDER, () =>\n wrap(PdxCronBuilderComponent)\n );\n }\n\n // =============================================================================\n // MÉTODOS DE CACHE INTELIGENTE\n // =============================================================================\n\n /**\n * Verifica se o cache de um componente é válido\n */\n private isCacheValid(registration: ComponentRegistration): boolean {\n if (!registration.cached || !registration.cachedAt) {\n return false;\n }\n\n // Em produção, cache nunca expira\n if (this.isProduction()) {\n return true;\n }\n\n // Em desenvolvimento, verificar TTL\n const now = Date.now();\n const cacheAge = now - registration.cachedAt;\n return cacheAge < CACHE_TTL;\n }\n\n /**\n * Carrega componente com lógica de retry\n */\n private async loadComponentWithRetry<T>(\n registration: ComponentRegistration,\n type: string,\n ): Promise<import('@angular/core').Type<T> | null> {\n const attempts = registration.loadAttempts || 0;\n\n if (attempts >= MAX_LOAD_ATTEMPTS) {\n console.error(\n `[ComponentRegistry] Máximo de tentativas atingido para '${type}'. Último erro:`,\n registration.lastError,\n );\n return null;\n }\n\n try {\n // Incrementar contador de tentativas\n registration.loadAttempts = attempts + 1;\n\n // Delay entre tentativas (exceto primeira)\n if (attempts > 0) {\n await this.delay(RETRY_DELAY * attempts);\n console.warn(\n `[ComponentRegistry] Tentativa ${attempts + 1}/${MAX_LOAD_ATTEMPTS} para carregar '${type}'`,\n );\n }\n\n const component = await registration.factory();\n if (!component) {\n throw new Error(`Factory for '${type}' returned undefined`);\n }\n\n // Sucesso: resetar contadores e cachear\n registration.cached = component;\n registration.cachedAt = Date.now();\n registration.loadAttempts = 0;\n registration.lastError = undefined;\n\n // Log apenas na primeira vez que carrega (não em cache hits subsequentes)\n if (attempts === 0) {\n console.info(\n `[ComponentRegistry] ✅ Componente '${type}' carregado com sucesso`,\n );\n }\n return component as import('@angular/core').Type<T>;\n } catch (error) {\n registration.lastError = error as Error;\n console.error(\n `[ComponentRegistry] Erro na tentativa ${attempts + 1} para '${type}':`,\n error,\n );\n\n // Se não é a última tentativa, tentar novamente\n if (attempts + 1 < MAX_LOAD_ATTEMPTS) {\n return this.loadComponentWithRetry(registration, type);\n }\n\n return null;\n }\n }\n\n /**\n * Verifica se está em ambiente de produção\n */\n private isProduction(): boolean {\n // Em Angular, verificamos ngDevMode (disponível globalmente em dev)\n return typeof ngDevMode === 'undefined' || !ngDevMode;\n }\n\n /**\n * Utilitário para delay\n */\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * @fileoverview Sistema de logging inteligente para componentes dinâmicos\n * \n * Reduz spam de logs e permite controle fino sobre o que é exibido no console.\n * Especialmente útil para evitar logs repetitivos do DynamicFieldLoader.\n */\n\nexport type LoggerLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace';\n\nexport interface LoggerConfig {\n /** Nível mínimo de log */\n level: LoggerLevel;\n /** Prefixos para filtrar (ex: ['DynamicFieldLoader']) */\n enabledPrefixes: string[];\n /** Prefixos para silenciar */\n silencedPrefixes: string[];\n /** Throttling para logs repetitivos */\n throttleRepetitive: boolean;\n /** Limite de logs iguais consecutivos */\n repetitiveThreshold: number;\n}\n\nconst DEFAULT_CONFIG: LoggerConfig = {\n level: 'info',\n enabledPrefixes: [],\n silencedPrefixes: ['DynamicFieldLoader'],\n throttleRepetitive: true,\n repetitiveThreshold: 3\n};\n\nclass DynamicFieldsLogger {\n private config: LoggerConfig = { ...DEFAULT_CONFIG };\n private repetitiveMessages = new Map<string, number>();\n\n /**\n * Configura o logger globalmente\n */\n configure(config: Partial<LoggerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * Habilita debug para um componente específico\n */\n enableDebugFor(prefix: string): void {\n if (!this.config.enabledPrefixes.includes(prefix)) {\n this.config.enabledPrefixes.push(prefix);\n }\n const index = this.config.silencedPrefixes.indexOf(prefix);\n if (index > -1) {\n this.config.silencedPrefixes.splice(index, 1);\n }\n }\n\n /**\n * Silencia logs de um componente específico\n */\n silencePrefix(prefix: string): void {\n if (!this.config.silencedPrefixes.includes(prefix)) {\n this.config.silencedPrefixes.push(prefix);\n }\n const index = this.config.enabledPrefixes.indexOf(prefix);\n if (index > -1) {\n this.config.enabledPrefixes.splice(index, 1);\n }\n }\n\n /**\n * Log inteligente que considera configuração e throttling\n */\n log(level: LoggerLevel, message: string, data?: any): void {\n if (!this.shouldLog(level, message)) {\n return;\n }\n\n // Throttling para mensagens repetitivas\n if (this.config.throttleRepetitive && this.isRepetitive(message)) {\n return;\n }\n\n // Delegar para console nativo\n const consoleFn = this.getConsoleFn(level);\n if (data !== undefined) {\n consoleFn(message, data);\n } else {\n consoleFn(message);\n }\n }\n\n /**\n * Shortcuts para diferentes níveis\n */\n error(message: string, data?: any): void {\n this.log('error', message, data);\n }\n\n warn(message: string, data?: any): void {\n this.log('warn', message, data);\n }\n\n info(message: string, data?: any): void {\n this.log('info', message, data);\n }\n\n debug(message: string, data?: any): void {\n this.log('debug', message, data);\n }\n\n trace(message: string, data?: any): void {\n this.log('trace', message, data);\n }\n\n /**\n * Limpa contadores de mensagens repetitivas (útil para testes)\n */\n clearRepetitiveCounters(): void {\n this.repetitiveMessages.clear();\n }\n\n // =============================================================================\n // MÉTODOS PRIVADOS\n // =============================================================================\n\n private shouldLog(level: LoggerLevel, message: string): boolean {\n // Verificar nível mínimo\n const levels: LoggerLevel[] = ['error', 'warn', 'info', 'debug', 'trace'];\n const currentLevelIndex = levels.indexOf(this.config.level);\n const messageLevelIndex = levels.indexOf(level);\n \n if (messageLevelIndex > currentLevelIndex) {\n return false;\n }\n\n // Extrair prefixo da mensagem (texto entre [] no início)\n const prefixMatch = message.match(/^\\[([^\\]]+)\\]/);\n const prefix = prefixMatch ? prefixMatch[1] : '';\n\n // Verificar se está silenciado\n if (prefix && this.config.silencedPrefixes.some(p => prefix.includes(p))) {\n return false;\n }\n\n // Verificar se está habilitado explicitamente\n if (this.config.enabledPrefixes.length > 0) {\n return Boolean(prefix && this.config.enabledPrefixes.some(p => prefix.includes(p)));\n }\n\n return true;\n }\n\n private isRepetitive(message: string): boolean {\n const count = this.repetitiveMessages.get(message) || 0;\n const newCount = count + 1;\n \n this.repetitiveMessages.set(message, newCount);\n\n // Fazer cleanup periódico para evitar vazamento de memória\n if (this.repetitiveMessages.size > 100) {\n this.cleanup();\n }\n\n return newCount > this.config.repetitiveThreshold;\n }\n\n private cleanup(): void {\n // Manter apenas as últimas 50 mensagens\n const entries = Array.from(this.repetitiveMessages.entries());\n this.repetitiveMessages.clear();\n \n entries.slice(-50).forEach(([message, count]) => {\n this.repetitiveMessages.set(message, count);\n });\n }\n\n private getConsoleFn(level: LoggerLevel): (...args: any[]) => void {\n switch (level) {\n case 'error': return console.error;\n case 'warn': return console.warn;\n case 'info': return console.info;\n case 'debug': return console.debug;\n case 'trace': return console.trace;\n default: return console.log;\n }\n }\n}\n\n// Instância singleton\nexport const logger = new DynamicFieldsLogger();\n\n// Função de conveniência para configuração rápida\nexport function configureDynamicFieldsLogger(config: Partial<LoggerConfig>): void {\n logger.configure(config);\n}\n\n// Funções de conveniência para habilitar/silenciar componentes específicos\nexport function enableDebugForComponent(componentName: string): void {\n logger.enableDebugFor(componentName);\n}\n\nexport function silenceComponent(componentName: string): void {\n logger.silencePrefix(componentName);\n}\n\n// Presets úteis para desenvolvimento\nexport const LoggerPresets = {\n /** Silencia logs repetitivos mas mantém erros e warnings */\n PRODUCTION: {\n level: 'warn' as LoggerLevel,\n silencedPrefixes: ['DynamicFieldLoader', 'ComponentRegistry'],\n throttleRepetitive: true,\n repetitiveThreshold: 1\n },\n\n /** Habilita debug para componentes específicos */\n DEVELOPMENT: {\n level: 'debug' as LoggerLevel,\n silencedPrefixes: ['DynamicFieldLoader'],\n throttleRepetitive: true,\n repetitiveThreshold: 5\n },\n\n /** Máximo de logs para debug profundo */\n VERBOSE: {\n level: 'trace' as LoggerLevel,\n enabledPrefixes: [],\n silencedPrefixes: [],\n throttleRepetitive: false,\n repetitiveThreshold: 999\n },\n\n /** Silencia quase tudo exceto erros críticos */\n SILENT: {\n level: 'error' as LoggerLevel,\n silencedPrefixes: ['DynamicFieldLoader', 'ComponentRegistry', 'ComponentPreloader'],\n throttleRepetitive: true,\n repetitiveThreshold: 1\n }\n};","import { FieldMetadata } from '@praxisui/core';\n\nfunction isISODate(v: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(v);\n}\n\nfunction isISODateTimeLocal(v: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$/.test(v);\n}\n\nfunction tryFormatDate(v: string): string {\n try {\n const d = new Date(v);\n if (!isNaN(d.getTime())) return d.toLocaleDateString();\n } catch {}\n return v;\n}\n\nfunction tryFormatDateTime(v: string): string {\n try {\n const d = new Date(v.replace('T', ' '));\n if (!isNaN(d.getTime())) return d.toLocaleString();\n } catch {}\n return v.replace('T', ' ');\n}\n\nexport function formatDisplayValue(\n field: FieldMetadata | any,\n value: any,\n): string {\n if (value == null) return '— Não informado';\n\n if (typeof value === 'boolean') {\n return value ? 'Sim' : 'Não';\n }\n\n // Arrays → join labels or values\n if (Array.isArray(value)) {\n const parts = value.map((item) => {\n if (item && typeof item === 'object') {\n return (item as any).label ?? (item as any).name ?? String((item as any).id ?? '');\n }\n return String(item);\n });\n return parts.filter(Boolean).join(', ');\n }\n\n // Option-like objects\n if (value && typeof value === 'object') {\n const obj: any = value;\n if (obj.label) return String(obj.label);\n if (obj.name) return String(obj.name);\n if (obj.title) return String(obj.title);\n if (obj.id != null) return `#${obj.id}`;\n try {\n return JSON.stringify(obj);\n } catch {\n return String(obj);\n }\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) return '— Não informado';\n if (isISODate(trimmed)) return tryFormatDate(trimmed);\n if (isISODateTimeLocal(trimmed)) return tryFormatDateTime(trimmed);\n return trimmed;\n }\n\n if (typeof value === 'number') {\n const ct = String((field as any)?.controlType || '').toLowerCase();\n if (ct.includes('currency')) {\n try {\n const currency = (field as any)?.currency || 'BRL';\n return new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency,\n }).format(value);\n } catch {\n return String(value);\n }\n }\n return String(value);\n }\n\n return String(value);\n}\n\n/**\n * Formats a value for presentation and linkifies emails/URLs.\n * Rely on Angular's built-in sanitization when binding via [innerHTML].\n */\nexport function formatDisplayHtml(\n field: FieldMetadata | any,\n value: any,\n): string {\n const text = formatDisplayValue(field, value);\n // Email\n const emailRe = /^([A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,})$/i;\n if (emailRe.test(text)) {\n const mailto = `mailto:${text}`;\n return `<a href=\"${mailto}\">${text}</a>`;\n }\n // URL (http/https only)\n const urlRe = /^(https?:\\/\\/[^\\s]+)$/i;\n if (urlRe.test(text)) {\n const url = text;\n return `<a href=\"${url}\" target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`;\n }\n return text;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n Output,\n EventEmitter,\n HostListener,\n HostBinding,\n} from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FieldMetadata } from '@praxisui/core';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport {\n formatDisplayValue,\n formatDisplayHtml,\n} from '../../utils/format-display.util';\n\n/**\n * Internal wrapper used by {@link DynamicFieldLoaderDirective}.\n *\n * Provides an insertion point (`vc`) where the resolved field component is\n * created and optionally wraps it with a host-provided `itemTemplate` that can\n * project additional chrome around the field.\n */\n@Component({\n selector: 'praxis-field-shell',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"pfx-field-shell-wrapper\"\n [attr.data-field-index]=\"index\"\n [attr.data-field-id]=\"field.id\"\n >\n <div\n class=\"pfx-field-shell-host\"\n [class.praxis-disabled]=\"\n effectiveDisabledMode && !effectivePresentationMode\n \"\n [style.display]=\"effectiveVisible ? null : 'none'\"\n >\n <!-- Presentation block -->\n @if (effectivePresentationMode) {\n <div class=\"praxis-presentation\" [attr.data-field]=\"field.name\">\n <span class=\"praxis-presentation__label\">{{\n field.label || field.name\n }}</span>\n <span\n class=\"praxis-presentation__value\"\n [innerHTML]=\"getPresentationHtml()\"\n ></span>\n </div>\n }\n\n <!-- Always create insertion point; hide when in presentation -->\n <ng-template #contentTpl>\n <ng-container #insertionPoint></ng-container>\n </ng-template>\n\n <div [style.display]=\"effectivePresentationMode ? 'none' : null\">\n @if (itemTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{\n field: field,\n index: index,\n content: contentTpl\n }\"\n ></ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\n }\n </div>\n\n <!-- Readonly overlay (blocks interaction; control permanece habilitado) -->\n @if (effectiveReadonlyMode && !effectivePresentationMode) {\n <div class=\"praxis-readonly-overlay\" aria-hidden=\"true\"></div>\n }\n\n </div>\n </div>\n `,\n host: { class: 'pfx-field-shell' },\n styles: [\n `\n :host {\n display: block;\n cursor: pointer;\n width: 100%;\n }\n .pfx-field-shell-wrapper {\n position: relative;\n }\n\n .pfx-field-shell-host {\n position: relative;\n }\n .praxis-readonly-overlay {\n position: absolute;\n inset: 0;\n pointer-events: all;\n cursor: not-allowed;\n }\n .praxis-presentation {\n white-space: pre-wrap;\n display: block;\n padding: 6px 0;\n }\n .praxis-presentation__label {\n display: block;\n font-size: var(--pfx-pres-label-size, 0.78rem);\n line-height: 1.2;\n letter-spacing: 0.02em;\n font-weight: 500;\n opacity: 0.8;\n margin-bottom: 2px;\n }\n .praxis-presentation__value {\n display: block;\n font-size: var(--pfx-pres-value-size, 1rem);\n line-height: 1.35;\n font-weight: 600;\n opacity: 0.95;\n }\n /* Label à esquerda no modo apresentação */\n .presentation-mode.pres-label-left .praxis-presentation {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .presentation-mode.pres-label-left .praxis-presentation__label {\n margin: 0;\n min-width: var(--pfx-pres-label-width, 140px);\n opacity: 0.85;\n text-align: var(--pfx-pres-label-align, start);\n }\n .presentation-mode .praxis-presentation__value {\n text-align: var(--pfx-pres-value-align, start);\n }\n .presentation-mode.pres-compact .praxis-presentation {\n padding: 2px 0;\n }\n .presentation-mode.pres-density-cozy .praxis-presentation {\n padding: 6px 0;\n }\n .presentation-mode.pres-density-compact .praxis-presentation {\n padding: 2px 0;\n gap: 6px;\n }\n .presentation-mode.pres-compact .praxis-presentation {\n padding: 2px 0;\n }\n `,\n ],\n})\nexport class FieldShellComponent {\n /** Metadata for the dynamic field being rendered. */\n @Input() field!: FieldMetadata;\n\n /** Index position of the field within the directive's list. */\n @Input() index!: number;\n\n /** Controle reativo associado (injetado pela diretiva) */\n @Input() control?: AbstractControl | null;\n\n /** Estados – podem ser definidos externamente; caso contrário, derivam do metadata */\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n /** Special input to enable canvas mode interactions */\n @Input() canvasMode = false;\n\n @Output() canvasMouseEnter = new EventEmitter<FieldMetadata>();\n @Output() canvasMouseLeave = new EventEmitter<void>();\n @Output() canvasClick = new EventEmitter<FieldMetadata>();\n\n @HostBinding('attr.data-field-name')\n get fieldNameAttr(): string {\n return this.field.name;\n }\n\n @HostBinding('attr.data-field-id')\n get fieldIdAttr(): string | undefined {\n return this.field.id as any;\n }\n\n @HostBinding('attr.data-field-index')\n get fieldIndexAttr(): number {\n return this.index;\n }\n\n @HostBinding('class.canvas-element')\n get isCanvasElement(): boolean {\n return this.canvasMode;\n }\n\n @HostBinding('attr.data-canvas-type')\n get canvasType(): string | null {\n return this.canvasMode ? 'field' : null;\n }\n\n @HostListener('mouseenter', ['$event'])\n onMouseEnter(event: MouseEvent): void {\n if (this.canvasMode) {\n this.canvasMouseEnter.emit(this.field);\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.canvasMode) {\n this.canvasMouseLeave.emit();\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n if (this.canvasMode) {\n event.stopPropagation();\n this.canvasClick.emit(this.field);\n }\n }\n\n /**\n * Host wrapper template. Receives `field`, `index` and a `content` template\n * that projects the actual field component.\n */\n @Input()\n itemTemplate?: TemplateRef<{\n field: FieldMetadata;\n index: number;\n content: TemplateRef<any>;\n }>;\n\n /** View container used as the insertion point for the field component. */\n @ViewChild('insertionPoint', { read: ViewContainerRef })\n vc!: ViewContainerRef;\n\n /**\n * Defaults derivados dos metadados quando inputs não são explicitamente alterados.\n * - hidden/formHidden => visible=false\n * - readOnly => readonlyMode=true\n * - disabled => disabledMode=true\n */\n get effectiveVisible(): boolean {\n const st = computeEffectiveState(this.field, {\n visible: this.visible,\n });\n return st.visible;\n }\n\n get effectiveReadonlyMode(): boolean {\n const st = computeEffectiveState(this.field, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n get effectiveDisabledMode(): boolean {\n const st = computeEffectiveState(this.field, {\n disabledMode: this.disabledMode,\n presentationMode: this.presentationMode,\n });\n return st.presentation ? false : st.disabled;\n }\n\n get effectivePresentationMode(): boolean {\n const st = computeEffectiveState(this.field, {\n presentationMode: this.presentationMode,\n });\n return st.presentation;\n }\n\n getPresentationValue(): string {\n const raw = this.control ? (this.control as any).value : undefined;\n try {\n const fn = (this.field as any)?.transformDisplayValue as\n | ((v: any) => any)\n | undefined;\n const formatted = fn ? fn(raw) : formatDisplayValue(this.field, raw);\n if (fn) {\n console.debug('[FieldShell] transformDisplayValue applied', {\n field: this.field?.name,\n raw,\n formatted,\n });\n }\n return formatted == null ? '' : String(formatted);\n } catch {\n return formatDisplayValue(this.field, raw);\n }\n }\n\n getPresentationHtml(): string {\n const raw = this.control ? (this.control as any).value : undefined;\n try {\n const fn = (this.field as any)?.transformDisplayValue as\n | ((v: any) => any)\n | undefined;\n const formatted = fn ? fn(raw) : null;\n if (fn) {\n console.debug('[FieldShell] transformDisplayValue (html) applied', {\n field: this.field?.name,\n raw,\n formatted,\n });\n }\n const val = formatted == null ? raw : formatted;\n return formatDisplayHtml(this.field, val);\n } catch {\n return formatDisplayHtml(this.field, raw);\n }\n }\n}\n","/**\n * @fileoverview Diretiva para renderização dinâmica de campos de formulário\n *\n * Renderiza campos de formulário dinamicamente com base em metadados,\n * integrando com ComponentRegistryService para resolver tipos de componentes\n * e associando automaticamente com FormGroup controls.\n *\n * @example Uso básico\n * ```html\n * <ng-container\n * dynamicFieldLoader\n * [fields]=\"fieldMetadata\"\n * [formGroup]=\"userForm\"\n * (componentsCreated)=\"onComponentsReady($event)\">\n * </ng-container>\n * ```\n *\n * @example Uso avançado com template personalizado\n * ```html\n * <div class=\"dynamic-form-container\">\n * <ng-container\n * dynamicFieldLoader\n * [fields]=\"complexFields\"\n * [formGroup]=\"complexForm\"\n * (componentsCreated)=\"handleComponents($event)\">\n * </ng-container>\n * </div>\n * ```\n *\n * Concurrency & Stability\n * - The directive may receive rapid, back-to-back input changes (e.g. initial\n * binding triggers ngOnChanges followed immediately by ngOnInit). Because\n * component resolution is async, naive implementations can interleave two\n * render cycles, causing duplicated shells/components. To avoid this, the\n * render pipeline is serialized with a lightweight reentrancy guard\n * (isRendering + pendingRender), coalescing intermediate requests into a\n * single subsequent pass.\n * - All component/shell references and subscriptions are tracked and disposed\n * deterministically to prevent memory leaks.\n */\n\nimport {\n Directive,\n Input,\n Output,\n EventEmitter,\n ViewContainerRef,\n ComponentRef,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n inject,\n ChangeDetectorRef,\n TemplateRef,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { FieldMetadata } from '@praxisui/core';\nimport { ComponentRegistryService } from '../services/component-registry/component-registry.service';\nimport { logger } from '../utils/logger';\nimport { BaseDynamicFieldComponent } from '../base/base-dynamic-field-component.interface';\nimport { FieldShellComponent } from '../components/field-shell/field-shell.component';\n\n/**\n * Diretiva que renderiza campos de formulário dinamicamente baseado em metadados.\n *\n * Integra-se com ComponentRegistryService para resolver componentes por tipo,\n * associa automaticamente FormControls e emite referências dos componentes criados.\n *\n * ## 🏗️ Funcionalidades Principais\n *\n * - ✅ Renderização dinâmica baseada em FieldMetadata[]\n * - ✅ Integração automática com Angular Reactive Forms\n * - ✅ Resolução de componentes via ComponentRegistryService\n * - ✅ Validação robusta de inputs\n * - ✅ Emissão de ComponentRef para controle externo\n * - ✅ Lifecycle management completo\n * - ✅ Detecção automática de mudanças\n *\n * ## 🎯 Casos de Uso\n *\n * - Formulários dinâmicos baseados em configuração JSON\n * - Admin panels com campos configuráveis\n * - Workflows com etapas dinâmicas\n * - Formulários gerados por API/backend\n * - A/B testing de interfaces de formulário\n *\n * @selector [dynamicFieldLoader]\n * @usageNotes\n * - Sempre fornecer tanto fields quanto formGroup\n * - FormGroup deve ter controls correspondentes aos field names\n * - Usar ViewChild para capturar referências se necessário\n * - Componentes são criados de forma lazy (apenas quando necessário)\n */\n@Directive({\n selector: '[dynamicFieldLoader]',\n standalone: true,\n})\nexport class DynamicFieldLoaderDirective implements OnInit, OnDestroy, OnChanges {\n // =============================================================================\n // DEPENDENCIES\n // =============================================================================\n\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly componentRegistry = inject(ComponentRegistryService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n // =============================================================================\n // INPUTS\n // =============================================================================\n\n /**\n * Metadados dos campos a serem renderizados.\n *\n * Array de objetos FieldMetadata que define a estrutura,\n * validação e comportamento de cada campo do formulário.\n *\n * @example\n * ```typescript\n * const fields: FieldMetadata[] = [\n * {\n * name: 'email',\n * label: 'Email',\n * controlType: 'input',\n * required: true,\n * validators: { email: true }\n * },\n * {\n * name: 'password',\n * label: 'Senha',\n * controlType: 'input',\n * inputType: 'password',\n * required: true\n * }\n * ];\n * ```\n */\n @Input({ required: true }) fields: FieldMetadata[] = [];\n\n /**\n * FormGroup que gerencia os controles dos campos.\n *\n * Deve conter AbstractControl para cada campo definido no array fields.\n * A diretiva associa automaticamente cada componente ao control correspondente.\n *\n * @example\n * ```typescript\n * const formGroup = this.fb.group({\n * email: ['', [Validators.required, Validators.email]],\n * password: ['', [Validators.required, Validators.minLength(8)]]\n * });\n * ```\n */\n @Input({ required: true }) formGroup: FormGroup | null = null;\n\n /**\n * Controla se a diretiva deve injetar o AbstractControl externo\n * diretamente no componente via setExternalControl(control).\n *\n * Quando false (padrão), a diretiva apenas atribui o control ao signal\n * formControl, caso o componente o exponha, evitando acoplamento.\n */\n @Input() enableExternalControlBinding: boolean = false;\n\n /**\n * Template opcional para embrulhar cada campo renderizado.\n *\n * O contexto fornece:\n * - `field`: metadata do campo\n * - `index`: posição do campo na lista\n * - `content`: `TemplateRef` com o conteúdo do campo a ser projetado\n *\n * @example\n * ```html\n * <ng-template #fieldItem let-field=\"field\" let-index=\"index\" let-content=\"content\">\n * <div class=\"field-wrapper\">\n * <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n * </div>\n * </ng-template>\n *\n * <ng-container\n * dynamicFieldLoader\n * [fields]=\"fields\"\n * [formGroup]=\"form\"\n * [itemTemplate]=\"fieldItem\">\n * </ng-container>\n * ```\n *\n * O `itemTemplate` permite projetar elementos adicionais ao redor do conteúdo\n * do campo. Não há suporte a arraste no `FieldShellComponent`.\n */\n @Input() itemTemplate?: TemplateRef<{\n field: FieldMetadata;\n index: number;\n content: TemplateRef<any>;\n }>;\n\n // =============================================================================\n // GLOBAL FIELD STATES (PHASE 1)\n // =============================================================================\n /**\n * Estados globais opcionais aplicados a todos os campos renderizados.\n *\n * Quando definidos, não substituem explicitamente metadados a menos que\n * seja necessário (ex.: readonlyMode/presentationMode = true, visible = false,\n * disabledMode = true). Quando não definidos (null), prevalecem metadados.\n */\n @Input() readonlyMode: boolean | null = null;\n @Input() disabledMode: boolean | null = null;\n @Input() presentationMode: boolean | null = null;\n @Input() visible: boolean | null = null;\n\n /** @internal Special input for canvas mode integration */\n @Input() canvasMode = false;\n\n // =============================================================================\n // OUTPUTS\n // =============================================================================\n\n /**\n * Emite um mapa com as referências dos componentes criados.\n *\n * Indexado pelo nome do campo (FieldMetadata.name).\n * Útil para controle externo, validação customizada ou manipulação direta.\n *\n * @example\n * ```typescript\n * onComponentsCreated(components: Map<string, ComponentRef<BaseDynamicFieldComponent>>) {\n * // Acessar componente específico\n * const emailComponent = components.get('email');\n * if (emailComponent) {\n * emailComponent.instance.focus();\n * }\n *\n * // Iterar todos os componentes\n * components.forEach((componentRef, fieldName) => {\n * console.log(`Campo ${fieldName} criado:`, componentRef.instance);\n * });\n * }\n * ```\n */\n @Output() componentsCreated = new EventEmitter<\n Map<string, ComponentRef<BaseDynamicFieldComponent>>\n >();\n\n /** Evento emitido após a criação individual de um campo */\n @Output() fieldCreated = new EventEmitter<{\n field: FieldMetadata;\n componentRef: ComponentRef<any>;\n index: number;\n }>();\n\n /** Evento emitido quando um campo é destruído */\n @Output() fieldDestroyed = new EventEmitter<{ fieldName: string }>();\n\n /** @internal Emits when a field is hovered in canvas mode */\n @Output() canvasMouseEnter = new EventEmitter<{\n field: FieldMetadata;\n element: HTMLElement;\n }>();\n /** @internal Emits when a field is no longer hovered in canvas mode */\n @Output() canvasMouseLeave = new EventEmitter<{\n field: FieldMetadata;\n element: HTMLElement;\n }>();\n /** @internal Emits when a field is clicked in canvas mode */\n @Output() canvasClick = new EventEmitter<{\n field: FieldMetadata;\n element: HTMLElement;\n }>();\n\n // Drag events removed – no longer supported by FieldShellComponent\n\n // =============================================================================\n // PRIVATE STATE\n // =============================================================================\n\n /** Mapa interno de componentes criados */\n private componentRefs = new Map<\n string,\n ComponentRef<BaseDynamicFieldComponent>\n >();\n\n /** Mapa de shells criados */\n private shellRefs = new Map<string, ComponentRef<FieldShellComponent>>();\n /** Subscription manager for shell events */\n private shellSubscriptions = new Map<string, Subscription>();\n\n /** Ordem atual dos nomes de campo renderizados */\n private currentOrder: string[] = [];\n /** Snapshot compacto para detectar mudanças relevantes nos campos (tipo + flags principais) */\n private lastFieldsSnapshot: Array<{\n name: string;\n controlType: string;\n sig: string;\n }> = [];\n /** First-render guard to ignore transient input changes */\n // removed reentrancy/initialization guards introduced during mitigations\n /** Serialize async renders to avoid duplicate creations on rapid changes */\n private isRendering = false;\n private pendingRender = false;\n // Diagnostics\n private _dbgPrevFieldsRef: FieldMetadata[] | null = null;\n private _dbgPrevFormGroupRef: FormGroup | null = null;\n private _dbgNgChangesCount = 0;\n private _dbgRenderCalls = 0;\n private debugEnabled = !!(globalThis as any).__PRAXIS_DEBUG_DFL__;\n /** Tracks whether at least one successful render has completed */\n private hasRenderedOnce = false;\n\n private dbg(...args: any[]) {\n if (this.debugEnabled) {\n try { (console.debug || console.log).apply(console, args as any); } catch {}\n }\n }\n\n // =============================================================================\n // LIFECYCLE HOOKS\n // =============================================================================\n\n ngOnInit(): void {\n this.dbg('[DFL] ngOnInit', {\n fieldsRefChanged: this._dbgPrevFieldsRef !== this.fields,\n formGroupRefChanged: this._dbgPrevFormGroupRef !== this.formGroup,\n fieldsLen: this.fields?.length ?? 0,\n });\n this.validateInputs();\n // Avoid scheduling a duplicate initial render when ngOnChanges already\n // triggered one during input binding. If a render is in progress or has\n // already happened, skip here.\n if (!this.isRendering && !this.hasRenderedOnce) {\n this.renderFields();\n } else {\n this.dbg('[DFL] ngOnInit: skip initial render (already rendering or rendered)');\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Diagnostics for change detection\n this._dbgNgChangesCount++;\n try {\n const names = Array.isArray(this.fields)\n ? this.fields.map((f) => f?.name).slice(0, 8)\n : [];\n const newSnapshot = Array.isArray(this.fields)\n ? this.buildFieldSnapshot(this.fields)\n : [];\n const sameSnapshot = JSON.stringify(this.lastFieldsSnapshot) === JSON.stringify(newSnapshot);\n this.dbg('[DFL] ngOnChanges', {\n count: this._dbgNgChangesCount,\n hasFields: !!changes['fields'],\n hasFormGroup: !!changes['formGroup'],\n hasModes: !!(changes['readonlyMode'] || changes['disabledMode'] || changes['presentationMode'] || changes['visible']),\n fieldsRefChanged: this._dbgPrevFieldsRef !== this.fields,\n formGroupRefChanged: this._dbgPrevFormGroupRef !== this.formGroup,\n fieldsLen: this.fields?.length ?? 0,\n names,\n sameSnapshot,\n });\n } catch {}\n\n // Simple behavior with guard: on input change, avoid rebuild if only array identity changed.\n if (changes['fields'] || changes['formGroup']) {\n this.validateInputs();\n\n // Compare snapshots (name + controlType) to detect content-only equality\n const newSnapshot = this.buildFieldSnapshot(this.fields || []);\n const sameSnapshot = JSON.stringify(this.lastFieldsSnapshot) === JSON.stringify(newSnapshot);\n const formGroupRefChanged = this._dbgPrevFormGroupRef !== (this.formGroup as any);\n\n if (sameSnapshot && !formGroupRefChanged) {\n try { console.debug('[DFL] ngOnChanges: skip re-render (same fields snapshot, same formGroup)'); } catch {}\n this._dbgPrevFieldsRef = this.fields;\n this._dbgPrevFormGroupRef = this.formGroup as any;\n return;\n }\n\n if (sameSnapshot && formGroupRefChanged) {\n try { console.debug('[DFL] ngOnChanges: rebind controls only (same fields snapshot, new formGroup)'); } catch {}\n this._dbgPrevFieldsRef = this.fields;\n this._dbgPrevFormGroupRef = this.formGroup as any;\n this.rebindControlsOnly();\n return;\n }\n\n this._dbgPrevFieldsRef = this.fields;\n this._dbgPrevFormGroupRef = this.formGroup as any;\n this.renderFields();\n }\n if (\n changes['readonlyMode'] ||\n changes['disabledMode'] ||\n changes['presentationMode'] ||\n changes['visible']\n ) {\n this.applyGlobalStates();\n }\n\n // Toggle canvas mode requires rebuilding shells so that:\n // - Host bindings (class 'canvas-element' and data attributes) are applied\n // - Canvas event subscriptions (enter/leave/click) are wired\n if (changes['canvasMode']) {\n try {\n console.debug?.('[DFL] ngOnChanges: canvasMode changed -> re-rendering shells');\n } catch {}\n this.renderFields();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyComponents();\n this.shellSubscriptions.forEach((sub) => sub.unsubscribe());\n this.shellSubscriptions.clear();\n }\n\n // =============================================================================\n // PUBLIC METHODS\n // =============================================================================\n\n /**\n * Re-renderiza todos os campos forçadamente.\n *\n * Útil quando metadata ou FormGroup foram alterados externamente\n * e a detecção automática de mudanças não foi suficiente.\n *\n * @example\n * ```typescript\n * @ViewChild(DynamicFieldLoaderDirective)\n * fieldLoader!: DynamicFieldLoaderDirective;\n *\n * updateFieldsExternally() {\n * // Modificar fields ou formGroup externamente\n * this.fields[0].disabled = true;\n *\n * // Forçar re-renderização\n * this.fieldLoader.refresh();\n * }\n * ```\n */\n refresh(): void {\n this.renderFields();\n }\n\n /**\n * Obtém referência de componente específico por nome do campo.\n *\n * @param fieldName - Nome do campo conforme FieldMetadata.name\n * @returns ComponentRef ou undefined se não encontrado\n *\n * @example\n * ```typescript\n * const emailComponent = this.fieldLoader.getComponent('email');\n * if (emailComponent) {\n * emailComponent.instance.setLoading(true);\n * }\n * ```\n */\n getComponent(\n fieldName: string,\n ): ComponentRef<BaseDynamicFieldComponent> | undefined {\n return this.componentRefs.get(fieldName);\n }\n\n /**\n * Obtém todos os componentes criados.\n *\n * @returns Map com todas as referências de componentes indexadas por nome\n */\n getAllComponents(): Map<string, ComponentRef<BaseDynamicFieldComponent>> {\n return new Map(this.componentRefs);\n }\n\n // =============================================================================\n // PRIVATE METHODS - CHANGE DETECTION\n // =============================================================================\n\n // removed shallow-change detection introduced as a mitigation\n\n // =============================================================================\n // PRIVATE METHODS - VALIDATION\n // =============================================================================\n\n /**\n * Valida as entradas da diretiva antes de processá-las.\n *\n * Verifica se inputs obrigatórios estão presentes e válidos,\n * emite warnings para problemas não-críticos.\n *\n * @throws Error se validação crítica falhar\n */\n private validateInputs(): void {\n // Validações críticas (throws Error)\n if (!this.fields) {\n throw new Error('[DynamicFieldLoader] Input \"fields\" is required');\n }\n\n if (!this.formGroup) {\n throw new Error('[DynamicFieldLoader] Input \"formGroup\" is required');\n }\n\n if (!Array.isArray(this.fields)) {\n throw new Error('[DynamicFieldLoader] Input \"fields\" must be an array');\n }\n\n // Validações não-críticas (warnings)\n if (this.fields.length === 0) {\n logger.warn(\n '[DynamicFieldLoader] Fields array is empty - no components will be rendered',\n );\n return;\n }\n\n // Validar e normalizar estrutura básica dos fields\n this.fields = this.fields.map((field, index) => {\n if (!field.name) {\n logger.error(\n `[DynamicFieldLoader] Field at index ${index} is missing required 'name' property:`,\n field,\n );\n throw new Error(`Field at index ${index} must have a 'name' property`);\n }\n\n // Se campo não tem controlType, tentar inferir baseado em propriedades do schema\n if (!field.controlType) {\n logger.debug(\n `[DynamicFieldLoader] Field '${field.name}' missing controlType, attempting to infer...`,\n );\n\n // Tentar mapear usando informações disponíveis no campo\n const inferredField = this.inferControlTypeFromField(field);\n if (inferredField) {\n logger.info(\n `[DynamicFieldLoader] Inferred controlType '${inferredField.controlType}' for field '${field.name}'`,\n );\n return inferredField;\n } else {\n logger.error(\n `[DynamicFieldLoader] Field '${field.name}' is missing required 'controlType' property and couldn't be inferred:`,\n field,\n );\n throw new Error(\n `Field '${field.name}' must have a 'controlType' property`,\n );\n }\n }\n\n // Verificar se FormControl existe\n if (!this.formGroup!.get(field.name)) {\n logger.warn(\n `[DynamicFieldLoader] FormControl for field '${field.name}' not found in FormGroup`,\n );\n }\n\n return field;\n });\n\n // Verificar se há campos duplicados\n const fieldNames = this.fields.map((f) => f.name);\n const duplicates = fieldNames.filter(\n (name, index) => fieldNames.indexOf(name) !== index,\n );\n if (duplicates.length > 0) {\n logger.error(\n `[DynamicFieldLoader] Duplicate field names found:`,\n duplicates,\n );\n throw new Error(\n `Duplicate field names are not allowed: ${duplicates.join(', ')}`,\n );\n }\n }\n\n // =============================================================================\n // PRIVATE METHODS - RENDERING\n // =============================================================================\n\n // removed reentrancy window guard; renderFields now does a simple rebuild\n\n /**\n * Carrega os campos dinâmicos no contêiner de visualização.\n *\n * Processo completo:\n * 1. Validar inputs\n * 2. Limpar componentes existentes\n * 3. Resolver e criar cada componente\n * 4. Associar propriedades e FormControl\n * 5. Emitir mapa de componentes criados\n */\n private async renderFields(): Promise<void> {\n // Serialize async render executions. If a render is in progress,\n // mark a pending render and return; the finisher will trigger one more pass.\n if (this.isRendering) {\n this.dbg('[DFL] renderFields: reentry while rendering; coalescing to pending pass');\n this.pendingRender = true;\n return;\n }\n\n this.isRendering = true;\n this._dbgRenderCalls++;\n try {\n this.dbg('[DFL] renderFields: starting', {\n call: this._dbgRenderCalls,\n totalFields: this.fields?.length ?? 0,\n names: (this.fields || []).map((f) => f.name),\n });\n } catch {}\n try {\n // Simple strategy: destroy and rebuild all fields\n this.destroyComponents();\n await this.executeRendering();\n } finally {\n this.isRendering = false;\n try {\n this.dbg('[DFL] renderFields: finished', {\n call: this._dbgRenderCalls,\n pendingRender: this.pendingRender,\n });\n } catch {}\n // Mark that at least one render has been completed to prevent\n // duplicate initial renders from ngOnInit.\n this.hasRenderedOnce = true;\n }\n\n // If another render was requested while we were busy, run one more pass.\n if (this.pendingRender) {\n this.pendingRender = false;\n // Run the next render in a microtask to allow Angular to flush changes\n // and coalesce additional pending input updates.\n await Promise.resolve();\n this.dbg('[DFL] renderFields: executing pending pass');\n await this.renderFields();\n }\n }\n\n /**\n * Executa a renderização dos campos com rollback em caso de erro.\n *\n * @private\n */\n private async executeRendering(): Promise<void> {\n const fieldsSnapshot = [...this.fields];\n this.dbg('[DFL] executeRendering: start', { total: fieldsSnapshot.length, names: fieldsSnapshot.map(f => f.name) });\n const createdFieldNames: string[] = [];\n let hadErrors = false;\n for (const [index, field] of fieldsSnapshot.entries()) {\n try {\n this.dbg('[DFL] executeRendering: creating', { index, name: field.name, controlType: field.controlType });\n const componentRef = await this.createFieldComponent(field, index);\n if (componentRef) createdFieldNames.push(field.name);\n // Yield to the microtask queue to keep UI responsive across many fields\n await Promise.resolve();\n this.dbg('[DFL] executeRendering: created', { index, name: field.name });\n } catch (error) {\n hadErrors = true;\n try { (console.error || console.log).call(console, '[DFL] executeRendering: field create error – skipping field', { name: field.name, error }); } catch {}\n // Skip this field and continue creating others; do not rollback previously created components\n continue;\n }\n }\n this.componentsCreated.emit(new Map(this.componentRefs));\n this.currentOrder = fieldsSnapshot.map((f) => f.name);\n this.lastFieldsSnapshot = this.buildFieldSnapshot(fieldsSnapshot);\n this.dbg('[DFL] executeRendering: complete', { totalCreated: createdFieldNames.length, hadErrors });\n }\n\n /** Builds a minimal snapshot capturing changes that matter for re-rendering. */\n private buildFieldSnapshot(fields: Array<any>): Array<{ name: string; controlType: string; sig: string }> {\n return (fields || []).map((f) => {\n const readonly = (f as any).readonly ?? (f as any).readOnly ?? false;\n const disabled = !!(f as any).disabled;\n const hidden = !!((f as any).hidden || (f as any).formHidden);\n const required = !!((f as any).required || (f as any)?.validators?.required);\n const sig = JSON.stringify({ r: required, ro: !!readonly, d: disabled, h: hidden });\n return { name: (f as any).name, controlType: (f as any).controlType, sig };\n });\n }\n\n /**\n * Reatribui apenas os FormControls existentes aos componentes/shells sem refazer a renderização.\n */\n private rebindControlsOnly(): void {\n this.dbg('[DFL] rebindControlsOnly: start');\n const fieldNames = this.currentOrder.length\n ? this.currentOrder\n : Array.from(this.componentRefs.keys());\n for (const name of fieldNames) {\n const control = this.formGroup?.get(name) ?? null;\n const shellRef = this.shellRefs.get(name);\n if (shellRef) {\n shellRef.instance.control = control as any;\n try { shellRef.changeDetectorRef.detectChanges(); } catch {}\n }\n const compRef = this.componentRefs.get(name);\n if (!compRef) continue;\n const instance: any = compRef.instance as any;\n if (\n this.enableExternalControlBinding &&\n 'setExternalControl' in instance &&\n typeof instance.setExternalControl === 'function' &&\n (control as any)?.setValue !== undefined\n ) {\n try { instance.setExternalControl(control); } catch {}\n } else if ('formControl' in instance) {\n const iw = instance as any;\n if (typeof iw.formControl === 'function' && 'set' in iw.formControl) {\n try { iw.formControl.set(control); } catch {}\n }\n }\n }\n this.dbg('[DFL] rebindControlsOnly: complete');\n }\n\n // =============================================================================\n // PRIVATE METHODS - COMPONENT LIFECYCLE\n // =============================================================================\n\n /** Destroi todos os componentes e limpa o container */\n private destroyComponents(): void {\n // Destruir componentes criados\n this.componentRefs.forEach((ref) => {\n try {\n ref.destroy();\n } catch {}\n });\n this.componentRefs.clear();\n\n // Destruir shells\n this.shellRefs.forEach((ref) => {\n try {\n ref.destroy();\n } catch {}\n });\n this.shellRefs.clear();\n\n // Limpar container e estado\n try {\n this.viewContainer.clear();\n } catch {}\n this.currentOrder = [];\n this.lastFieldsSnapshot = [];\n }\n\n /** Destroi um único campo pelo nome */\n private destroySingle(fieldName: string): void {\n const comp = this.componentRefs.get(fieldName);\n if (comp) {\n try {\n comp.destroy();\n } catch {}\n this.componentRefs.delete(fieldName);\n }\n\n const shell = this.shellRefs.get(fieldName);\n if (shell) {\n try {\n shell.destroy();\n } catch {}\n this.shellRefs.delete(fieldName);\n }\n\n const subs = this.shellSubscriptions.get(fieldName);\n if (subs) {\n subs.unsubscribe();\n this.shellSubscriptions.delete(fieldName);\n }\n\n this.currentOrder = this.currentOrder.filter((n) => n !== fieldName);\n }\n\n /** Cria o componente de campo dentro de um FieldShell e aplica metadados/controle */\n private async createFieldComponent(\n field: FieldMetadata,\n index: number,\n ): Promise<ComponentRef<BaseDynamicFieldComponent> | null> {\n this.dbg('[DFL] step: resolve component type', { name: field.name, controlType: field.controlType, index });\n // Resolver tipo do componente\n const componentType = await this.componentRegistry.getComponent<any>(\n field.controlType!,\n );\n if (!componentType) {\n logger.error(\n `[DynamicFieldLoader] Nenhum componente registrado para controlType '${field.controlType}' (field '${field.name}')`,\n );\n return null;\n }\n\n this.dbg('[DFL] step: create shell start', { name: field.name });\n // Criar shell que irá conter o componente\n const shellRef = this.viewContainer.createComponent(FieldShellComponent);\n this.dbg('[DFL] step: create shell success', { name: field.name });\n // Garantir que cada shell possua um identificador estável\n // Nunca mutar o objeto de entrada (pode estar congelado/immer)\n const fieldWithId: FieldMetadata =\n (field as any).id ? (field as any) : ({ ...(field as any), id: field.name } as any);\n shellRef.instance.field = fieldWithId;\n shellRef.instance.index = index;\n shellRef.instance.canvasMode = this.canvasMode;\n // Propagate optional host item template to allow wrappers/toolbars\n if (this.itemTemplate) {\n shellRef.instance.itemTemplate = this.itemTemplate as any;\n }\n // Associar FormControl ao shell para suportar presentationMode e overlays\n const formControl = this.formGroup?.get(field.name) ?? null;\n shellRef.instance.control = formControl as any;\n // Aplicar estados globais se definidos\n if (this.readonlyMode === true) shellRef.instance.readonlyMode = true;\n if (this.disabledMode === true) shellRef.instance.disabledMode = true;\n if (this.presentationMode === true)\n shellRef.instance.presentationMode = true;\n if (this.visible === false) shellRef.instance.visible = false;\n // FieldShellComponent does not support drag; itemTemplate should only\n // project custom chrome or wrappers around the field content.\n try { shellRef.changeDetectorRef.detectChanges(); this.dbg('[DFL] step: shell detectChanges done', { name: field.name }); } catch {}\n\n const subscriptions = new Subscription();\n\n // Canvas mode event bubbling\n if (this.canvasMode) {\n subscriptions.add(\n shellRef.instance.canvasMouseEnter.subscribe(\n (fieldMetadata: FieldMetadata) => {\n this.canvasMouseEnter.emit({\n field: fieldMetadata,\n element: shellRef.location.nativeElement,\n });\n },\n ),\n );\n subscriptions.add(\n shellRef.instance.canvasMouseLeave.subscribe(() => {\n this.canvasMouseLeave.emit({\n field: fieldWithId,\n element: shellRef.location.nativeElement,\n });\n }),\n );\n subscriptions.add(\n shellRef.instance.canvasClick.subscribe(\n (fieldMetadata: FieldMetadata) => {\n this.canvasClick.emit({\n field: fieldMetadata,\n element: shellRef.location.nativeElement,\n });\n },\n ),\n );\n }\n this.shellSubscriptions.set(field.name, subscriptions);\n\n // Criar o componente dentro do shell\n this.dbg('[DFL] step: create field component start', { name: field.name });\n const componentRef = shellRef.instance.vc.createComponent<BaseDynamicFieldComponent>(\n componentType as any,\n );\n this.dbg('[DFL] step: create field component success', { name: field.name });\n\n // Guardar referências\n this.shellRefs.set(field.name, shellRef);\n this.componentRefs.set(field.name, componentRef);\n\n const instance: any = componentRef.instance as any;\n let metadataAssigned = false;\n\n // Atribuir metadata de forma resiliente\n if (\n 'setInputMetadata' in instance &&\n typeof instance.setInputMetadata === 'function'\n ) {\n try {\n instance.setInputMetadata(fieldWithId);\n metadataAssigned = true;\n this.dbg('[DFL] step: setInputMetadata applied', { name: field.name });\n } catch (error) {\n logger.error(\n `[DynamicFieldLoader] Error calling setInputMetadata for field '${field.name}':`,\n error,\n );\n }\n }\n\n if (!metadataAssigned && instance && 'metadata' in instance) {\n const instanceWithMetadata = instance as any;\n if (\n typeof instanceWithMetadata.metadata === 'function' &&\n 'set' in instanceWithMetadata.metadata\n ) {\n instanceWithMetadata.metadata.set(fieldWithId);\n metadataAssigned = true;\n this.dbg('[DFL] step: metadata signal set', { name: field.name });\n } else {\n logger.error(\n `[DynamicFieldLoader] Component '${field.name}' metadata property is not a WritableSignal`,\n );\n }\n }\n\n // Atribui label diretamente quando o componente expõe essa propriedade\n if ('label' in instance && fieldWithId.label !== undefined) {\n try {\n instance.label = fieldWithId.label as any;\n } catch (error) {\n logger.error(\n `[DynamicFieldLoader] Error assigning label for field '${field.name}':`,\n error,\n );\n }\n }\n\n if (!metadataAssigned) {\n logger.warn(\n `[DynamicFieldLoader] Component for field '${field.name}' does not support metadata assignment`,\n );\n }\n\n // Associar FormControl\n const control = this.formGroup?.get(field.name) ?? null;\n if (control) {\n if (\n this.enableExternalControlBinding &&\n 'setExternalControl' in instance &&\n typeof instance.setExternalControl === 'function' &&\n // garantir compatibilidade com componentes que esperam FormControl\n (control as any).setValue !== undefined\n ) {\n try {\n instance.setExternalControl(control);\n this.dbg('[DFL] step: setExternalControl applied', { name: field.name });\n } catch (error) {\n logger.error(\n `[DynamicFieldLoader] Error calling setExternalControl for field '${field.name}':`,\n error,\n );\n }\n } else if ('formControl' in instance) {\n const instanceWithFormControl = instance as any;\n if (\n typeof instanceWithFormControl.formControl === 'function' &&\n 'set' in instanceWithFormControl.formControl\n ) {\n instanceWithFormControl.formControl.set(control);\n this.dbg('[DFL] step: formControl signal set', { name: field.name });\n } else {\n logger.error(\n `[DynamicFieldLoader] Component '${field.name}' formControl property is not a WritableSignal`,\n );\n }\n } else if (this.enableExternalControlBinding) {\n logger.warn(\n `[DynamicFieldLoader] Component for field '${field.name}' does not support setExternalControl`,\n );\n } else {\n // Neither external binding nor WritableSignal path used.\n // If the component template binds [formControl] internally, it should still work.\n // But if it does not provide a value accessor or bind to a native control, Angular may throw NG01203.\n logger.debug?.(\n `[DynamicFieldLoader] Bound no external control for field '${field.name}'. If you see NG01203, ensure the component '${field.controlType}' template binds [formControl] to a native input/select/textarea or implements NG_VALUE_ACCESSOR.`,\n );\n }\n\n // Reaplicar metadados após vincular o FormControl externo para garantir que\n // validadores baseados em metadata (minLength, maxLength, pattern, required)\n // sejam registrados no controle correto.\n try {\n this.dbg('[DFL] step: reapply metadata after control binding', { name: field.name });\n if (\n 'setInputMetadata' in instance &&\n typeof (instance as any).setInputMetadata === 'function'\n ) {\n (instance as any).setInputMetadata(fieldWithId);\n } else if (\n 'metadata' in instance &&\n typeof (instance as any).metadata === 'function' &&\n 'set' in (instance as any).metadata\n ) {\n (instance as any).metadata.set(fieldWithId);\n }\n this.dbg('[DFL] step: reapply metadata done', { name: field.name });\n } catch (e) {\n logger.warn(\n `[DynamicFieldLoader] Failed to reapply metadata after control binding for '${field.name}':`,\n e,\n );\n }\n } else {\n logger.warn(\n `[DynamicFieldLoader] No FormControl found for field '${field.name}' in FormGroup`,\n );\n }\n\n // Lifecycle hook opcional\n if (\n 'onComponentInit' in instance &&\n typeof instance.onComponentInit === 'function'\n ) {\n try {\n instance.onComponentInit();\n } catch {}\n }\n\n // Emit evento de criação\n this.fieldCreated.emit({ field: fieldWithId, componentRef, index });\n\n // Detectar mudanças no componente recém-criado\n try {\n this.dbg('[DFL] step: component detectChanges start', { name: field.name });\n componentRef.changeDetectorRef.detectChanges();\n this.dbg('[DFL] step: component detectChanges done', { name: field.name });\n } catch (e) {\n try { (console.error || console.log).call(console, '[DFL] step: component detectChanges error', { name: field.name, error: e }); } catch {}\n }\n\n return componentRef;\n }\n\n /**\n * Aplica os estados globais aos shells já criados, sem re-render completo.\n */\n private applyGlobalStates(): void {\n this.shellRefs.forEach((shellRef) => {\n if (this.readonlyMode !== null) {\n shellRef.instance.readonlyMode = this.readonlyMode === true;\n }\n if (this.disabledMode !== null) {\n shellRef.instance.disabledMode = this.disabledMode === true;\n }\n if (this.presentationMode !== null) {\n shellRef.instance.presentationMode = this.presentationMode === true;\n }\n if (this.visible !== null) {\n // visível por padrão; apenas aplicar quando definido\n shellRef.instance.visible = this.visible !== false ? true : false;\n }\n shellRef.changeDetectorRef.detectChanges();\n });\n }\n\n // =============================================================================\n // PRIVATE METHODS - FIELD INFERENCE (fallback mínimo)\n // =============================================================================\n\n /**\n * Tenta inferir o controlType a partir do próprio field.\n * Retorna null quando não é possível inferir, mantendo a validação original.\n */\n private inferControlTypeFromField(\n field: FieldMetadata,\n ): FieldMetadata | null {\n try {\n // Sem heurística avançada aqui; preferimos não arriscar mapeamento incorreto\n return null;\n } catch {\n return null;\n }\n }\n}\n","/**\n * @fileoverview Componente de diálogo de confirmação para MaterialButtonComponent\n * \n * Diálogo Material nativo para confirmação de ações críticas.\n */\n\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nexport interface ConfirmDialogData {\n title: string;\n message: string;\n confirmText: string;\n cancelText: string;\n type?: 'warning' | 'danger' | 'info';\n icon?: string;\n}\n\n@Component({\n selector: 'pdx-confirm-dialog',\n standalone: true,\n imports: [\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n PraxisIconDirective\n ],\n template: `\n <div class=\"pdx-confirm-dialog\" [class]=\"'pdx-confirm-type-' + (data.type || 'info')\">\n \n <!-- Header com ícone e título -->\n <div class=\"pdx-dialog-header\">\n @if (data.icon) {\n <mat-icon class=\"pdx-dialog-icon\" [praxisIcon]=\"data.icon\"></mat-icon>\n }\n <h2 mat-dialog-title class=\"pdx-dialog-title\">{{ data.title }}</h2>\n </div>\n\n <!-- Conteúdo da mensagem -->\n <mat-dialog-content class=\"pdx-dialog-content\">\n <p class=\"pdx-dialog-message\">{{ data.message }}</p>\n </mat-dialog-content>\n\n <!-- Ações do diálogo -->\n <mat-dialog-actions align=\"end\" class=\"pdx-dialog-actions\">\n <button \n mat-button \n type=\"button\"\n [mat-dialog-close]=\"false\"\n class=\"pdx-cancel-button\">\n {{ data.cancelText }}\n </button>\n \n <button \n mat-raised-button \n type=\"button\"\n [color]=\"getConfirmButtonColor()\"\n [mat-dialog-close]=\"true\"\n class=\"pdx-confirm-button\">\n {{ data.confirmText }}\n </button>\n </mat-dialog-actions>\n\n </div>\n `,\n styles: [`\n .pdx-confirm-dialog {\n min-width: 300px;\n max-width: 500px;\n }\n\n .pdx-dialog-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n }\n\n .pdx-dialog-icon {\n font-size: 24px;\n height: 24px;\n width: 24px;\n }\n\n .pdx-dialog-title {\n margin: 0;\n font-size: 18px;\n font-weight: 500;\n }\n\n .pdx-dialog-content {\n padding: 0;\n margin-bottom: 24px;\n }\n\n .pdx-dialog-message {\n margin: 0;\n color: var(--mdc-dialog-content-text-color, var(--mat-app-on-surface));\n line-height: 1.5;\n }\n\n .pdx-dialog-actions {\n padding: 0;\n gap: 8px;\n }\n\n .pdx-cancel-button {\n color: var(--mdc-text-button-label-text-color, var(--mat-app-on-surface-variant));\n }\n\n /* Tipos de diálogo usando Material Design tokens */\n .pdx-confirm-type-warning {\n .pdx-dialog-icon {\n color: var(--mdc-theme-warning, var(--mat-app-warning));\n }\n }\n\n .pdx-confirm-type-danger {\n .pdx-dialog-icon {\n color: var(--mdc-theme-error, var(--mat-app-error));\n }\n }\n\n .pdx-confirm-type-info {\n .pdx-dialog-icon {\n color: var(--mdc-theme-primary, var(--mat-app-primary));\n }\n }\n `]\n})\nexport class ConfirmDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<ConfirmDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: ConfirmDialogData\n ) {}\n\n getConfirmButtonColor(): 'primary' | 'accent' | 'warn' {\n switch (this.data.type) {\n case 'danger':\n return 'warn';\n case 'warning':\n return 'accent';\n default:\n return 'primary';\n }\n }\n}\n","/**\n * @fileoverview Serviço de pré-carregamento de componentes dinâmicos\n * \n * Responsável por inicializar e pré-carregar componentes do sistema\n * para melhorar a performance inicial dos formulários dinâmicos.\n * \n * Focado apenas no TextInputComponent que é o único componente\n * sem herança que funciona corretamente.\n */\n\nimport { Injectable, inject, DestroyRef } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable, from } from 'rxjs';\nimport { tap, catchError } from 'rxjs/operators';\n\nimport { ComponentRegistryService } from './component-registry/component-registry.service';\nimport { FieldControlType as FieldControlTypeEnum } from '@praxisui/core';\n\n// =============================================================================\n// INTERFACES\n// =============================================================================\n\nexport interface PreloadStatus {\n isPreloading: boolean;\n progress: number; // 0-100\n currentComponent: string | null;\n totalComponents: number;\n loadedComponents: number;\n failedComponents: number;\n errors: string[];\n}\n\n// =============================================================================\n// SERVIÇO DE PRELOAD SIMPLIFICADO\n// =============================================================================\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ComponentPreloaderService {\n \n // =============================================================================\n // DEPENDENCIES\n // =============================================================================\n\n private readonly componentRegistry = inject(ComponentRegistryService);\n private readonly destroyRef = inject(DestroyRef);\n\n // =============================================================================\n // STATE\n // =============================================================================\n\n private preloadCompleted = false;\n private readonly preloadedComponents = new Set<string>();\n\n private readonly statusSubject = new BehaviorSubject<PreloadStatus>({\n isPreloading: false,\n progress: 0,\n currentComponent: null,\n totalComponents: 0,\n loadedComponents: 0,\n failedComponents: 0,\n errors: []\n });\n\n // =============================================================================\n // COMPONENTES PARA PRELOAD (APENAS TEXT-INPUT)\n // =============================================================================\n\n private readonly componentsToPreload = [\n FieldControlTypeEnum.INPUT,\n FieldControlTypeEnum.EMAIL_INPUT,\n FieldControlTypeEnum.PASSWORD,\n FieldControlTypeEnum.NUMERIC_TEXT_BOX\n ];\n\n // =============================================================================\n // PUBLIC API\n // =============================================================================\n\n /**\n * Observable do status atual do preload\n */\n get status$(): Observable<PreloadStatus> {\n return this.statusSubject.asObservable();\n }\n\n /**\n * Verifica se o preload foi completado\n */\n isPreloadCompleted(): boolean {\n return this.preloadCompleted;\n }\n\n /**\n * Verifica se um componente específico foi precarregado\n */\n isComponentPreloaded(type: string): boolean {\n return this.preloadedComponents.has(type);\n }\n\n /**\n * Inicializa o sistema de componentes dinâmicos\n * Deve ser chamado na inicialização da aplicação\n */\n async initialize(): Promise<void> {\n if (this.preloadCompleted) {\n console.debug('[ComponentPreloader] Preload já foi completado');\n return;\n }\n\n console.info('[ComponentPreloader] Iniciando pré-carregamento de componentes...');\n \n this.updateStatus({\n isPreloading: true,\n progress: 0,\n totalComponents: this.componentsToPreload.length,\n loadedComponents: 0,\n failedComponents: 0,\n errors: []\n });\n\n try {\n await this.preloadComponents();\n this.preloadCompleted = true;\n \n const finalStatus = this.statusSubject.value;\n console.info(\n `[ComponentPreloader] ✅ Preload concluído: ${finalStatus.loadedComponents}/${finalStatus.totalComponents} componentes ` +\n `(${finalStatus.failedComponents} falhas)`\n );\n } catch (error) {\n console.error('[ComponentPreloader] ❌ Falha no preload:', error);\n this.updateStatus({\n errors: [...this.statusSubject.value.errors, `Falha geral no preload: ${error}`]\n });\n } finally {\n this.updateStatus({\n isPreloading: false,\n progress: 100,\n currentComponent: null\n });\n }\n }\n\n /**\n * Força um novo preload (útil para desenvolvimento)\n */\n async forceReload(): Promise<void> {\n console.info('[ComponentPreloader] Forçando novo preload...');\n \n this.preloadCompleted = false;\n this.preloadedComponents.clear();\n \n // Reset do status\n this.statusSubject.next({\n isPreloading: false,\n progress: 0,\n currentComponent: null,\n totalComponents: 0,\n loadedComponents: 0,\n failedComponents: 0,\n errors: []\n });\n\n await this.initialize();\n }\n\n /**\n * Preload de um componente específico (on-demand)\n */\n async preloadComponent(type: string): Promise<boolean> {\n if (this.preloadedComponents.has(type)) {\n return true;\n }\n\n console.debug(`[ComponentPreloader] Carregando componente on-demand: ${type}`);\n \n this.updateStatus({\n currentComponent: type\n });\n\n try {\n const startTime = performance.now();\n const component = await this.componentRegistry.getComponent(type as any);\n const loadTime = performance.now() - startTime;\n\n if (component) {\n this.preloadedComponents.add(type);\n console.debug(`[ComponentPreloader] ✅ ${type} carregado em ${loadTime.toFixed(2)}ms`);\n return true;\n } else {\n console.warn(`[ComponentPreloader] ❌ Falha ao carregar ${type}`);\n return false;\n }\n } catch (error) {\n console.error(`[ComponentPreloader] ❌ Erro ao carregar ${type}:`, error);\n return false;\n } finally {\n this.updateStatus({\n currentComponent: null\n });\n }\n }\n\n // =============================================================================\n // MÉTODOS PRIVADOS\n // =============================================================================\n\n /**\n * Executa o preload de todos os componentes configurados\n */\n private async preloadComponents(): Promise<void> {\n let loadedCount = 0;\n let failedCount = 0;\n const errors: string[] = [];\n\n for (const componentType of this.componentsToPreload) {\n this.updateStatus({\n currentComponent: componentType,\n progress: Math.round((loadedCount + failedCount) / this.componentsToPreload.length * 100)\n });\n\n try {\n const startTime = performance.now();\n const component = await this.componentRegistry.getComponent(componentType);\n const loadTime = performance.now() - startTime;\n\n if (component) {\n this.preloadedComponents.add(componentType);\n loadedCount++;\n console.debug(`[ComponentPreloader] ✅ ${componentType} carregado em ${loadTime.toFixed(2)}ms`);\n } else {\n failedCount++;\n const errorMsg = `Componente ${componentType} não encontrado no registry`;\n errors.push(errorMsg);\n console.warn(`[ComponentPreloader] ❌ ${errorMsg}`);\n }\n } catch (error) {\n failedCount++;\n const errorMsg = `Erro ao carregar ${componentType}: ${error}`;\n errors.push(errorMsg);\n console.error(`[ComponentPreloader] ❌ ${errorMsg}`, error);\n }\n\n // Pequeno delay para não bloquear a thread principal\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n\n this.updateStatus({\n loadedComponents: loadedCount,\n failedComponents: failedCount,\n errors\n });\n }\n\n /**\n * Atualiza o status interno do preload\n */\n private updateStatus(updates: Partial<PreloadStatus>): void {\n const current = this.statusSubject.value;\n this.statusSubject.next({\n ...current,\n ...updates\n });\n }\n}\n\n/**\n * Factory function para inicialização da aplicação\n * Usar no app.config.ts com APP_INITIALIZER\n * \n * Executa de forma não-bloqueante para não atrasar o bootstrap da app,\n * mas garante que o TextInputComponent seja pré-carregado em background\n */\nexport function initializeComponentSystem() {\n return () => {\n const preloader = inject(ComponentPreloaderService);\n \n // Executar preload em background sem bloquear a aplicação\n setTimeout(() => {\n preloader.initialize().catch(error => {\n console.warn('[ComponentPreloader] Background initialization failed:', error);\n });\n }, 100); // Pequeno delay para permitir que a app inicialize primeiro\n\n // Retornar undefined para não bloquear o APP_INITIALIZER\n return undefined;\n };\n}\n\n/**\n * Factory function para inicialização síncrona (opcional)\n * Use apenas se quiser aguardar o preload antes da app inicializar\n */\nexport function initializeComponentSystemSync() {\n return async () => {\n const preloader = inject(ComponentPreloaderService);\n try {\n await preloader.initialize();\n console.info('[ComponentPreloader] Preload sincronizado concluído');\n } catch (error) {\n console.warn('[ComponentPreloader] Sync initialization failed:', error);\n }\n };\n}\n","/**\n * @fileoverview Componente para exibir status do preload de componentes\n *\n * Componente opcional para debug e monitoramento do preload.\n * Exibe informações em tempo real sobre o carregamento dos componentes.\n */\n\nimport { Component, inject, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl } from '@angular/forms';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport {\n ComponentPreloaderService,\n PreloadStatus,\n} from '../../services/component-preloader.service';\n\n@Component({\n selector: 'pdx-preload-status',\n standalone: true,\n imports: [\n CommonModule,\n MatCardModule,\n MatProgressBarModule,\n MatButtonModule,\n MatIconModule,\n MatChipsModule,\n PraxisIconDirective,\n ],\n template: `\n <mat-card class=\"preload-status-card\">\n <mat-card-header>\n <mat-card-title>\n <mat-icon [praxisIcon]=\"'mi:widgets'\"></mat-icon>\n Status do Preload de Componentes\n </mat-card-title>\n <mat-card-subtitle>\n Sistema de carregamento antecipado - TextInputComponent\n </mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n @if (status) {\n <!-- Progresso geral -->\n <div class=\"progress-section\">\n <div class=\"progress-label\">\n <span>Progresso: {{ status.progress }}%</span>\n <span class=\"component-count\">\n {{ status.loadedComponents }}/{{\n status.totalComponents\n }}\n componentes\n </span>\n </div>\n <mat-progress-bar\n [value]=\"status.progress\"\n [color]=\"status.isPreloading ? 'primary' : 'accent'\"\n >\n </mat-progress-bar>\n </div>\n\n <!-- Status atual -->\n <div class=\"status-info\">\n @if (status.isPreloading) {\n <mat-chip-set>\n <mat-chip color=\"primary\" highlighted>\n <mat-icon [praxisIcon]=\"'mi:hourglass_empty'\"></mat-icon>\n Carregando: {{ status.currentComponent || 'Preparando...' }}\n </mat-chip>\n </mat-chip-set>\n } @else {\n <mat-chip-set>\n <mat-chip color=\"accent\" highlighted>\n <mat-icon [praxisIcon]=\"'mi:check_circle'\"></mat-icon>\n Preload Concluído\n </mat-chip>\n </mat-chip-set>\n }\n </div>\n\n <!-- Estatísticas -->\n <div class=\"stats-grid\">\n <div class=\"stat-item success\">\n <mat-icon [praxisIcon]=\"'mi:check_circle'\"></mat-icon>\n <span class=\"stat-label\">Carregados</span>\n <span class=\"stat-value\">{{ status.loadedComponents }}</span>\n </div>\n\n <div class=\"stat-item error\">\n <mat-icon [praxisIcon]=\"'mi:error'\"></mat-icon>\n <span class=\"stat-label\">Falhas</span>\n <span class=\"stat-value\">{{ status.failedComponents }}</span>\n </div>\n\n <div class=\"stat-item info\">\n <mat-icon [praxisIcon]=\"'mi:info'\"></mat-icon>\n <span class=\"stat-label\">Total</span>\n <span class=\"stat-value\">{{ status.totalComponents }}</span>\n </div>\n </div>\n\n <!-- Erros (se houver) -->\n @if (status.errors.length > 0) {\n <div class=\"errors-section\">\n <h4>\n <mat-icon [praxisIcon]=\"'mi:warning'\"></mat-icon>\n Erros Encontrados\n </h4>\n <div class=\"error-list\">\n @for (error of status.errors; track error) {\n <div class=\"error-item\">{{ error }}</div>\n }\n </div>\n </div>\n }\n }\n </mat-card-content>\n\n <mat-card-actions>\n <button\n mat-button\n (click)=\"forceReload()\"\n [disabled]=\"status?.isPreloading\"\n >\n <mat-icon [praxisIcon]=\"'mi:refresh'\"></mat-icon>\n Recarregar\n </button>\n\n <button mat-button (click)=\"toggleAutoUpdate()\">\n <mat-icon [praxisIcon]=\"autoUpdate ? 'mi:pause' : 'mi:play_arrow'\"></mat-icon>\n Auto-update: {{ autoUpdate ? 'ON' : 'OFF' }}\n </button>\n </mat-card-actions>\n </mat-card>\n `,\n styles: [\n `\n .preload-status-card {\n max-width: 600px;\n margin: 16px;\n }\n\n .progress-section {\n margin-bottom: 16px;\n }\n\n .progress-label {\n display: flex;\n justify-content: space-between;\n margin-bottom: 8px;\n font-size: 14px;\n }\n\n .component-count {\n color: rgba(0, 0, 0, 0.6);\n }\n\n .status-info {\n margin: 16px 0;\n }\n\n .stats-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin: 16px 0;\n }\n\n .stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 12px;\n border-radius: 8px;\n background: rgba(0, 0, 0, 0.04);\n }\n\n .stat-item.success {\n background: rgba(76, 175, 80, 0.1);\n color: #4caf50;\n }\n\n .stat-item.error {\n background: rgba(244, 67, 54, 0.1);\n color: #f44336;\n }\n\n .stat-item.info {\n background: rgba(33, 150, 243, 0.1);\n color: #2196f3;\n }\n\n .stat-label {\n font-size: 12px;\n margin: 4px 0;\n }\n\n .stat-value {\n font-size: 18px;\n font-weight: 500;\n }\n\n .errors-section {\n margin-top: 16px;\n padding: 16px;\n background: rgba(244, 67, 54, 0.05);\n border-radius: 8px;\n border-left: 4px solid #f44336;\n }\n\n .errors-section h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n color: #f44336;\n }\n\n .error-list {\n font-size: 13px;\n }\n\n .error-item {\n margin: 4px 0;\n padding: 4px 8px;\n background: rgba(244, 67, 54, 0.1);\n border-radius: 4px;\n }\n\n mat-card-actions {\n display: flex;\n gap: 8px;\n }\n `,\n ],\n})\nexport class PreloadStatusComponent implements OnInit, OnDestroy {\n // =============================================================================\n // DEPENDENCIES\n // =============================================================================\n\n private readonly preloader = inject(ComponentPreloaderService);\n\n // =============================================================================\n // STATE\n // =============================================================================\n\n status: PreloadStatus | null = null;\n autoUpdate = true;\n\n private externalControl: AbstractControl | null = null;\n\n // =============================================================================\n // LIFECYCLE\n // =============================================================================\n\n ngOnInit(): void {\n if (this.externalControl) {\n this.autoUpdate = !!this.externalControl.value;\n this.externalControl.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe((val) => {\n this.autoUpdate = !!val;\n if (this.autoUpdate) {\n this.subscribeToStatus();\n } else {\n this.loadCurrentStatus();\n }\n });\n }\n\n if (this.autoUpdate) {\n this.subscribeToStatus();\n } else {\n this.loadCurrentStatus();\n }\n }\n\n ngOnDestroy(): void {\n // takeUntilDestroyed() já gerencia isso automaticamente\n }\n\n // =============================================================================\n // METHODS\n // =============================================================================\n\n /**\n * Força um novo preload\n */\n async forceReload(): Promise<void> {\n try {\n await this.preloader.forceReload();\n } catch (error) {\n console.error('Erro ao forçar reload:', error);\n }\n }\n\n /**\n * Toggle do auto-update\n */\n toggleAutoUpdate(): void {\n this.autoUpdate = !this.autoUpdate;\n\n if (this.autoUpdate) {\n this.subscribeToStatus();\n } else {\n this.loadCurrentStatus();\n }\n\n this.externalControl?.setValue(this.autoUpdate);\n }\n\n // =============================================================================\n // PRIVATE METHODS\n // =============================================================================\n\n /**\n * Subscreve às atualizações de status em tempo real\n */\n private subscribeToStatus(): void {\n this.preloader.status$.pipe(takeUntilDestroyed()).subscribe((status) => {\n this.status = status;\n });\n }\n\n /**\n * Carrega status atual uma vez\n */\n private loadCurrentStatus(): void {\n // Como status$ é um BehaviorSubject, podemos pegar o valor atual\n this.preloader.status$.pipe(takeUntilDestroyed()).subscribe((status) => {\n this.status = status;\n });\n }\n\n setExternalControl(control: AbstractControl): void {\n this.externalControl = control;\n this.autoUpdate = !!control.value;\n }\n}\n","import { Component, ElementRef, ViewChild, forwardRef, Input } from '@angular/core';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { MaterialColorPickerMetadata } from '@praxisui/core';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\n\n/**\n * Basic color picker component leveraging the native input type=\"color\".\n *\n * Renders a text field displaying the selected color value and a palette\n * icon that opens the browser's color picker. This acts as a starting point\n * for a more advanced color selection experience.\n */\n@Component({\n selector: 'pdx-material-colorpicker',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n <span\n matPrefix\n class=\"pdx-color-preview\"\n [style.background]=\"control().value || '#000000'\"\n aria-hidden=\"true\"\n ></span>\n\n <input\n matInput\n [formControl]=\"control()\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"isReadonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-label]=\"!label && placeholder ? placeholder : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [matTooltip]=\"tooltipEnabled() ? errorMessage() : null\"\n [matTooltipDisabled]=\"!(tooltipEnabled() && !!errorMessage())\"\n [matTooltipPosition]=\"tooltipPosition()\"\n />\n\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"openPicker()\"\n [disabled]=\"disabledMode || isReadonlyEffective()\"\n [attr.aria-label]=\"\n metadata()?.ariaLabel\n ? metadata()!.ariaLabel + ' color palette'\n : 'Open color palette'\n \"\n >\n <mat-icon [praxisIcon]=\"'mi:palette'\"></mat-icon>\n </button>\n\n <input\n #picker\n type=\"color\"\n class=\"pdx-hidden-input\"\n (change)=\"onNativeColorChange($event)\"\n />\n\n <mat-error *ngIf=\"hasValidationError()\">\n {{ errorMessage() }}\n </mat-error>\n\n <mat-hint\n *ngIf=\"metadata()?.hint && !hasValidationError()\"\n [align]=\"metadata()?.hintAlign || 'start'\"\n >\n {{ metadata()!.hint }}\n </mat-hint>\n </mat-form-field>\n `,\n styles: [\n `\n .pdx-color-preview {\n width: 24px;\n height: 24px;\n border-radius: 4px;\n border: 1px solid #ccc;\n display: inline-block;\n margin-right: 8px;\n }\n .pdx-hidden-input {\n display: none;\n }\n `,\n ],\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n PraxisIconDirective,\n ReactiveFormsModule,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialColorPickerComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"colorPicker\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class MaterialColorPickerComponent extends SimpleBaseInputComponent {\n @ViewChild('picker') private pickerRef!: ElementRef<HTMLInputElement>;\n\n // Praxis Field States\n @Input() readonlyMode = false;\n @Input() disabledMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n\n /** Applies component metadata with strong typing. */\n setInputMetadata(metadata: MaterialColorPickerMetadata): void {\n const { placeholder, ...rest } = metadata;\n this.setMetadata(rest);\n }\n\n /** Opens the native color picker dialog. */\n openPicker(): void {\n if (\n this.pickerRef &&\n !this.isReadonlyEffective() &&\n !this.disabledMode\n ) {\n this.pickerRef.nativeElement.value = this.control().value || '#000000';\n this.pickerRef.nativeElement.click();\n }\n }\n\n /** Handles color selection from the native input. */\n onNativeColorChange(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.setValue(value);\n }\n\n protected override getSpecificCssClasses(): string[] {\n return ['pdx-material-colorpicker'];\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n isReadonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n forwardRef,\n HostListener,\n Input,\n TemplateRef,\n ViewChild,\n ContentChild,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\nimport { computeEffectiveState } from '../../utils/field-state.util';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\n\ntype SelectionMode = 'continuous' | 'single';\ntype PrecisionMode = 'item' | 'half';\n\nexport interface RatingIconState {\n index: number;\n filled: boolean;\n half: boolean;\n hover: boolean;\n}\n\n@Component({\n selector: 'pdx-material-rating',\n standalone: true,\n imports: [CommonModule, MatIconModule, PraxisIconDirective],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaterialRatingComponent),\n multi: true,\n },\n ],\n host: {\n class: 'pdx-rating',\n '[attr.role]': \"'slider'\",\n '[attr.aria-valuemin]': '0',\n '[attr.aria-valuemax]': 'itemsCount',\n '[attr.aria-valuenow]': 'value ?? 0',\n '[attr.aria-label]': 'ariaLabel || label || \"Rating\"',\n '[attr.tabindex]': 'tabindex',\n '[class.praxis-disabled]': 'disabled',\n '[class.praxis-readonly]': 'readonlyEffective()',\n '[class.pfx-rating--size-sm]': \"size === 'small'\",\n '[class.pfx-rating--size-lg]': \"size === 'large'\",\n '[style.--praxis-rating-color]': 'ratingColor || null',\n '[style.--praxis-rating-outline]': 'outlineColor || null',\n },\n template: `\n <span class=\"pdx-rating__label\" *ngIf=\"label\">{{ label }}</span>\n <div class=\"pdx-rating__items\" #itemsRoot\n (mouseleave)=\"onMouseLeave()\">\n <button type=\"button\"\n class=\"pdx-rating__item\"\n *ngFor=\"let _ of [].constructor(itemsCount); let i = index\"\n [disabled]=\"disabled || readonlyEffective()\"\n [class.filled]=\"isFilled(i)\"\n [class.half]=\"showHalf(i)\"\n [attr.aria-pressed]=\"isFilled(i)\"\n (mousemove)=\"onMouseMove($event, i)\"\n (click)=\"onClick($event, i)\">\n\n <ng-container *ngIf=\"!itemTemplate; else tmpl\">\n <span class=\"icon-wrap\">\n <!-- Outline/base layer -->\n <mat-icon *ngIf=\"!svgIconOutline\" class=\"icon-outline\" [praxisIcon]=\"outlineIcon || 'mi:star_border'\" [style.color]=\"outlineColor || null\"></mat-icon>\n <mat-icon *ngIf=\"svgIconOutline\" class=\"icon-outline\" [svgIcon]=\"svgIconOutline\" [style.color]=\"outlineColor || null\"></mat-icon>\n <!-- Fill/overlay layer, width controlled by CSS (0,50%,100%) via classes -->\n <span class=\"icon-fill\">\n <mat-icon *ngIf=\"!svgIcon\" class=\"icon-fill-inner\" [praxisIcon]=\"icon || 'mi:star'\" [style.color]=\"ratingColor || null\"></mat-icon>\n <mat-icon *ngIf=\"svgIcon\" class=\"icon-fill-inner\" [svgIcon]=\"svgIcon\" [style.color]=\"ratingColor || null\"></mat-icon>\n </span>\n </span>\n </ng-container>\n\n <ng-template #tmpl>\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ state: iconState(i) }\">\n </ng-container>\n </ng-template>\n </button>\n </div>\n\n <!-- Inline error (when enabled by metadata and there is an error) -->\n <div class=\"pdx-rating__error\" *ngIf=\"hasValidationError()\">\n {{ errorMessage() }}\n </div>\n\n <!-- Hint (only when no error is being shown) -->\n <div class=\"pdx-rating__hint\" *ngIf=\"!hasValidationError() && (metadata()?.hint != null)\">\n {{ metadata()?.hint }}\n </div>\n `,\n styles: [\n `\n :host { display: inline-flex; align-items: center; gap: var(--praxis-rating-gap, 8px); }\n .pdx-rating__label { margin-right: 6px; }\n .pdx-rating__items { display: inline-flex; gap: var(--praxis-rating-gap, 4px); }\n .pdx-rating__item { appearance: none; border: none; background: transparent; padding: 0; cursor: pointer; line-height: 0; position: relative; }\n .pdx-rating__item[disabled] { cursor: default; opacity: 0.6; }\n .icon-wrap { position: relative; display: inline-block; width: var(--praxis-rating-size, 24px); height: var(--praxis-rating-size, 24px); font-size: var(--praxis-rating-size, 24px); }\n .icon-outline mat-icon, .icon-fill-inner { position: absolute; top: 0; left: 0; font-size: var(--praxis-rating-size, 24px) !important; width: var(--praxis-rating-size, 24px) !important; height: var(--praxis-rating-size, 24px) !important; line-height: var(--praxis-rating-size, 24px) !important; }\n .icon-outline mat-icon { color: var(--praxis-rating-outline, rgba(0,0,0,0.38)); }\n .icon-fill { position: absolute; top: 0; left: 0; height: 100%; overflow: hidden; width: 0; }\n .icon-fill .icon-fill-inner { color: var(--praxis-rating-color, #fbc02d); }\n .pdx-rating__item.half .icon-fill { width: 50%; }\n .pdx-rating__item.filled .icon-fill { width: 100%; }\n :host(.pfx-rating--size-sm) { --praxis-rating-size: 18px; }\n :host(.pfx-rating--size-lg) { --praxis-rating-size: 32px; }\n\n .pdx-rating__error { color: var(--praxis-rating-error, #f44336); font-size: 0.75rem; margin-left: 6px; }\n .pdx-rating__hint { color: rgba(0,0,0,0.6); font-size: 0.75rem; margin-left: 6px; }\n `,\n ],\n})\nexport class MaterialRatingComponent extends SimpleBaseInputComponent implements ControlValueAccessor {\n // Inputs\n @Input() itemsCount = 5;\n @Input() selection: SelectionMode = 'continuous';\n @Input() precision: PrecisionMode = 'item';\n // label is provided by SimpleBaseInputComponent as @Input()\n @Input() icon?: string; // mat-icon font ligature\n @Input() svgIcon?: string; // name of registered svg icon (filled)\n @Input() svgIconOutline?: string; // name of registered svg icon (outline)\n @Input() outlineIcon?: string = 'star_border';\n @Input() disabled = false;\n @Input() readonlyMode = false;\n @Input() presentationMode = false;\n @Input() tabindex = 0;\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\n @Input() ariaLabel?: string;\n // Colors via CSS vars for fill/outline\n @Input() ratingColor?: string; // maps to --praxis-rating-color\n @Input() outlineColor?: string; // maps to --praxis-rating-outline\n\n // Template for custom item render\n @ContentChild(TemplateRef) itemTemplate?: TemplateRef<any>;\n\n @ViewChild('itemsRoot') itemsRoot?: ElementRef<HTMLElement>;\n\n // Outputs\n // use inherited valueChange output from SimpleBaseInputComponent\n\n // Internal state\n value: number | null = null;\n private hoverIndex: number | null = null;\n private hoverHalf: boolean = false;\n\n private normalizeCssColor(v?: string): string | undefined {\n if (typeof v !== 'string') return undefined;\n const s = v.trim();\n if (!s) return undefined;\n const lower = s.toLowerCase();\n // Map theme palette keywords to CSS vars\n const palette: Record<string, string> = {\n primary: 'var(--mat-sys-color-primary, #3f51b5)',\n accent: 'var(--mat-sys-color-secondary, #ff4081)',\n warn: 'var(--mat-sys-color-error, #f44336)',\n };\n if (palette[lower]) return palette[lower];\n // Accept hex without '#'\n const hex = s.replace(/^#/, '');\n if (/^(?:[0-9a-f]{3,8})$/i.test(hex)) return `#${hex}`;\n return s;\n }\n\n // CVA hooks\n override writeValue(obj: any): void {\n const v = obj == null ? null : Number(obj);\n this.value = Number.isFinite(v as number) ? (v as number) : null;\n }\n\n override setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n super.setDisabledState(isDisabled);\n }\n\n // Rendering helpers\n isFilled(index: number): boolean {\n if (this.selection === 'single') {\n const { activeIndex, isHalf } = this.getActiveIndexAndHalf();\n return activeIndex === index && !isHalf && activeIndex !== -1;\n }\n // continuous\n const current = this.getVisualValue();\n return current >= index + 1;\n }\n\n showHalf(index: number): boolean {\n if (this.precision !== 'half') return false;\n if (this.selection === 'single') {\n const { activeIndex, isHalf } = this.getActiveIndexAndHalf();\n return activeIndex === index && isHalf;\n }\n // continuous half: show half when value between i+0.5 and i+1\n const current = this.getVisualValue();\n return current >= index + 0.5 && current < index + 1;\n }\n\n iconState(index: number): RatingIconState {\n const current = this.getVisualValue();\n const filled = current >= index + 1;\n const half = this.precision === 'half' && current >= index + 0.5 && current < index + 1;\n const hover = this.hoverIndex === index;\n return { index, filled, half, hover };\n }\n\n // Mouse interactions\n onMouseMove(ev: MouseEvent, index: number): void {\n if (this.disabled || this.readonlyEffective()) return;\n if (this.precision === 'half') {\n const hostEl = ev.currentTarget as HTMLElement;\n const wrap = hostEl.querySelector('.icon-wrap') as HTMLElement | null;\n const rect = (wrap || hostEl).getBoundingClientRect();\n const isLeft = (ev.clientX - rect.left) < rect.width / 2;\n const prevHalf = this.hoverHalf;\n const prevIndex = this.hoverIndex;\n this.hoverHalf = isLeft;\n this.hoverIndex = index;\n if (prevHalf !== this.hoverHalf || prevIndex !== index) {\n try { console.debug('[Rating] hover state', { index, half: this.hoverHalf, rectW: rect.width }); } catch {}\n }\n } else {\n this.hoverHalf = false;\n }\n }\n\n onMouseLeave(): void {\n this.hoverIndex = null;\n this.hoverHalf = false;\n }\n\n onClick(ev: MouseEvent, index: number): void {\n if (this.disabled || this.readonlyEffective()) return;\n // Re-evaluate half detection on click to avoid relying solely on prior mousemove\n if (this.precision === 'half') {\n const hostEl = ev.currentTarget as HTMLElement;\n const wrap = hostEl.querySelector('.icon-wrap') as HTMLElement | null;\n const rect = (wrap || hostEl).getBoundingClientRect();\n this.hoverHalf = (ev.clientX - rect.left) < rect.width / 2;\n try { console.debug('[Rating] click half-eval', { index, half: this.hoverHalf, x: ev.clientX - rect.left, w: rect.width }); } catch {}\n }\n const next = this.computeValueFromIndex(index);\n try { console.debug('[Rating] click apply', { index, next, selection: this.selection, precision: this.precision }); } catch {}\n this.applyValue(next);\n }\n\n // Keyboard interactions on host (role=slider)\n @HostListener('keydown', ['$event'])\n onKeyDown(ev: KeyboardEvent): void {\n if (this.disabled || this.readonlyEffective()) return;\n const step = this.precision === 'half' ? 0.5 : 1;\n const max = this.itemsCount;\n let handled = true;\n let next = this.value ?? 0;\n switch (ev.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = Math.min(max, (this.value ?? 0) + step);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n next = Math.max(0, (this.value ?? 0) - step);\n break;\n case 'Home':\n next = 0; break;\n case 'End':\n next = max; break;\n case 'Enter':\n case ' ': // Space\n next = this.value ?? 0; // confirm no-op\n break;\n default:\n handled = false;\n }\n if (handled) {\n ev.preventDefault();\n this.applyValue(next);\n }\n }\n\n // Helpers\n private computeValueFromIndex(index: number): number {\n const base = this.selection === 'single' ? (this.hoverHalf ? index + 0.5 : index + 1) : (this.hoverHalf ? index + 0.5 : index + 1);\n const max = this.itemsCount;\n const step = this.precision === 'half' ? 0.5 : 1;\n // Snap to precision grid\n const snapped = Math.round(base / step) * step;\n return Math.max(0, Math.min(max, snapped));\n }\n\n private getVisualValue(): number {\n if (this.selection === 'single') {\n const { activeIndex, isHalf } = this.getActiveIndexAndHalf();\n if (activeIndex === -1) return 0;\n return activeIndex + 1 - (isHalf ? 0.5 : 0);\n }\n // continuous mode\n if (this.hoverIndex == null) return this.value ?? 0;\n const idx = this.hoverIndex;\n const half = this.hoverHalf ? 0.5 : 0;\n return idx + 1 - (half ? 0.5 : 0);\n }\n\n private getActiveIndexAndHalf(): { activeIndex: number; isHalf: boolean } {\n if (this.hoverIndex != null) {\n return { activeIndex: this.hoverIndex, isHalf: this.precision === 'half' && this.hoverHalf };\n }\n const v = this.value ?? 0;\n if (v <= 0) return { activeIndex: -1, isHalf: false };\n const isHalf = this.precision === 'half' && Math.abs(v % 1 - 0.5) < 1e-6;\n const activeIndex = Math.ceil(v) - 1;\n return { activeIndex, isHalf };\n }\n\n private applyValue(next: number): void {\n if (this.disabled || this.readonlyEffective()) return;\n // Clamp and normalize\n const step = this.precision === 'half' ? 0.5 : 1;\n const clamped = Math.max(0, Math.min(this.itemsCount, next));\n const normalized = Math.round(clamped / step) * step;\n this.value = normalized;\n this.setValue(normalized, { emitEvent: true });\n this.valueChange.emit(normalized);\n }\n\n readonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n errorStateMatcher() {\n return getErrorStateMatcherForField(this.metadata());\n }\n\n // Accept typed metadata from @praxisui/core MaterialRatingMetadata (optional helper)\n setInputMetadata(meta: any): void {\n // Map known fields when provided via x-ui metadata\n try { console.debug('[Rating] setInputMetadata: incoming meta', {\n max: meta?.max,\n allowHalf: meta?.allowHalf,\n precision: meta?.precision,\n selection: meta?.selection,\n size: meta?.size,\n icon: meta?.icon,\n emptyIcon: meta?.emptyIcon,\n svgIcon: meta?.svgIcon,\n svgIconOutline: meta?.svgIconOutline,\n ratingColor: meta?.ratingColor,\n outlineColor: meta?.outlineColor,\n color: meta?.color,\n readonly: meta?.readonly,\n tabIndex: meta?.tabIndex ?? meta?.tabindex,\n ariaLabel: meta?.ariaLabel,\n }); } catch {}\n if (meta) {\n if (typeof meta.max === 'number') this.itemsCount = meta.max;\n // allowHalf boolean wins; precision numeric fallback\n if (typeof meta.allowHalf === 'boolean') this.precision = meta.allowHalf ? 'half' : 'item';\n else if (typeof meta.precision === 'number') this.precision = meta.precision === 0.5 ? 'half' : 'item';\n if (typeof meta.icon === 'string') this.icon = meta.icon;\n if (typeof meta.emptyIcon === 'string') this.outlineIcon = meta.emptyIcon;\n if (typeof meta.svgIcon === 'string') this.svgIcon = meta.svgIcon;\n if (typeof meta.svgIconOutline === 'string') this.svgIconOutline = meta.svgIconOutline;\n if (typeof meta.selection === 'string') this.selection = meta.selection;\n if (typeof meta.readonly === 'boolean') this.readonlyMode = meta.readonly;\n if (typeof meta.size === 'string') this.size = meta.size as any;\n // Accessibility & focus management for host (role=slider)\n const ti = (meta as any).tabIndex ?? (meta as any).tabindex;\n if (ti !== undefined) this.tabindex = Number(ti);\n if (typeof meta.ariaLabel === 'string') this.ariaLabel = meta.ariaLabel;\n // Theme palette color → map to CSS var heuristically; prefer explicit ratingColor\n if (typeof meta.color === 'string' && !meta.ratingColor) {\n const p = String(meta.color).toLowerCase();\n const map: Record<string, string> = {\n primary: 'var(--mat-sys-color-primary, #3f51b5)',\n accent: 'var(--mat-sys-color-secondary, #ff4081)',\n warn: 'var(--mat-sys-color-error, #f44336)',\n };\n this.ratingColor = map[p] || this.ratingColor;\n }\n if (typeof meta.ratingColor === 'string') this.ratingColor = this.normalizeCssColor(meta.ratingColor);\n if (typeof meta.outlineColor === 'string') this.outlineColor = this.normalizeCssColor(meta.outlineColor);\n }\n try { console.debug('[Rating] setInputMetadata: applied', {\n itemsCount: this.itemsCount,\n precision: this.precision,\n selection: this.selection,\n size: this.size,\n icon: this.icon,\n outlineIcon: this.outlineIcon,\n svgIcon: this.svgIcon,\n svgIconOutline: this.svgIconOutline,\n ratingColor: this.ratingColor,\n outlineColor: this.outlineColor,\n tabindex: this.tabindex,\n ariaLabel: this.ariaLabel,\n readonly: this.readonlyMode,\n }); } catch {}\n this.setMetadata(meta);\n try { this.cdr.markForCheck(); } catch {}\n }\n}\n","import {\n Component,\n forwardRef,\n Input,\n output,\n ViewChild,\n ElementRef,\n signal,\n computed,\n effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ControlValueAccessor,\n} from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatBottomSheet, MatBottomSheetModule } from '@angular/material/bottom-sheet';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nimport { SimpleBaseInputComponent } from '../../base/simple-base-input.component';\nimport { getErrorStateMatcherForField } from '../../utils/error-state-matcher';\nimport { computeEffectiveState } from '../../utils/field-state.util';\n\ntype PickerView = 'gradient' | 'palette';\ntype ColorFormat = 'hex' | 'rgb' | 'rgba' | 'hsl';\n\nexport interface GradientSettings {\n showOpacity?: boolean;\n channel?: 'hsv' | 'hsl';\n}\n\nexport interface PaletteSettings {\n preset?: 'basic' | 'office' | 'material' | string;\n colors?: string[];\n columns?: number;\n}\n\nexport interface PopupSettings {\n width?: number | string;\n anchor?: Element;\n appendTo?: Element | any; // ViewContainerRef not needed for MVP\n}\n\n@Component({\n selector: 'pdx-color-picker',\n standalone: true,\n template: `\n <mat-form-field\n [appearance]=\"materialAppearance()\"\n [color]=\"materialColor()\"\n [class]=\"componentCssClasses()\"\n [floatLabel]=\"floatLabelBehavior()\"\n [subscriptSizing]=\"metadata()?.materialDesign?.subscriptSizing || 'fixed'\"\n [hideRequiredMarker]=\"metadata()?.materialDesign?.hideRequiredMarker || false\"\n >\n <mat-label>{{ label }}</mat-label>\n\n <span\n matPrefix\n class=\"pdx-color-preview\"\n [style.background]=\"previewBackground()\"\n aria-hidden=\"true\"\n ></span>\n\n <input\n matInput\n [formControl]=\"control()\"\n [attr.tabindex]=\"tabindex\"\n [required]=\"metadata()?.required || false\"\n [readonly]=\"readonlyEffective()\"\n [attr.aria-disabled]=\"disabledMode ? 'true' : null\"\n [attr.aria-required]=\"metadata()?.required ? 'true' : 'false'\"\n [errorStateMatcher]=\"errorStateMatcher()\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n />\n\n <button\n #toggleBtn\n mat-icon-button\n matSuffix\n type=\"button\"\n [disabled]=\"disabledMode || readonlyEffective()\"\n [matMenuTriggerFor]=\"menu\"\n [matTooltip]=\"'Selecionar cor'\"\n (click)=\"openPicker()\"\n aria-label=\"Abrir seletor de cor\"\n >\n <mat-icon [praxisIcon]=\"icon || 'mi:palette'\"></mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\" [overlapTrigger]=\"false\" (closed)=\"onClose()\">\n <div class=\"pdx-color-panel\" [style.width.px]=\"panelWidthPx\" (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n <div class=\"pdx-panel-header\" *ngIf=\"preview\">\n <div class=\"pdx-preview-box\">\n <span class=\"pdx-preview-swatch\" [style.background]=\"draftPreview()\"></span>\n <span class=\"pdx-preview-text\">{{ draftPreview() || '—' }}</span>\n <span class=\"pdx-preview-spacer\"></span>\n <button mat-icon-button type=\"button\" [disabled]=\"!draftPreview()\" (click)=\"copyDraft()\" [matTooltip]=\"'Copiar'\" aria-label=\"Copiar valor\">\n <mat-icon [praxisIcon]=\"'mi:content_copy'\"></mat-icon>\n </button>\n </div>\n </div>\n\n <mat-tab-group\n [selectedIndex]=\"selectedTabIndex()\"\n (selectedIndexChange)=\"onTabIndexChange($event)\"\n >\n <mat-tab *ngIf=\"showGradient()\" label=\"Gradiente\">\n <div class=\"pdx-gradient-view\">\n <!-- MVP: usar input nativo com alpha opcional -->\n <input type=\"color\" [value]=\"draftSolidHex()\" (input)=\"onNativeGradient($event)\" />\n <div *ngIf=\"gradientSettings?.showOpacity\" class=\"pdx-opacity-row\">\n <span>Opacidade</span>\n <input type=\"range\" min=\"0\" max=\"1\" step=\"0.01\" [value]=\"draftOpacity()\" (input)=\"onOpacity($event)\" />\n </div>\n </div>\n </mat-tab>\n <mat-tab *ngIf=\"showPalette()\" label=\"Paleta\">\n <div class=\"pdx-recent\" *ngIf=\"showRecent && recentColors().length > 0\">\n <div class=\"pdx-section-title\">Recentes</div>\n <div class=\"pdx-palette-view\" role=\"list\" [style.--pdx-cols]=\"paletteSettings?.columns || 8\">\n <button\n type=\"button\"\n class=\"pdx-swatch\"\n *ngFor=\"let c of recentColors(); trackBy: trackColor\"\n [style.background]=\"c\"\n [class.selected]=\"isSelected(c)\"\n [attr.aria-selected]=\"isSelected(c) ? 'true' : null\"\n (click)=\"onSwatchClick(c)\"\n [matTooltip]=\"c\"\n [attr.aria-label]=\"'Selecionar cor ' + c\"\n ></button>\n </div>\n </div>\n <div class=\"pdx-custom-color\">\n <input type=\"color\" [value]=\"draftSolidHex()\" (input)=\"onNativeGradient($event)\" />\n <button mat-stroked-button type=\"button\" (click)=\"addPaletteColor()\">Adicionar</button>\n </div>\n <div class=\"pdx-palette-view\" role=\"list\" [style.--pdx-cols]=\"paletteSettings?.columns || 8\">\n <button\n type=\"button\"\n class=\"pdx-swatch\"\n *ngFor=\"let c of paletteColors(); trackBy: trackColor\"\n [style.background]=\"c\"\n [class.selected]=\"isSelected(c)\"\n [attr.aria-selected]=\"isSelected(c) ? 'true' : null\"\n (click)=\"onSwatchClick(c)\"\n [matTooltip]=\"c\"\n [attr.aria-label]=\"'Selecionar cor ' + c\"\n ></button>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <mat-divider></mat-divider>\n\n <div class=\"pdx-actions\" [class.align-end]=\"actionsLayout === 'end'\">\n <button mat-button type=\"button\" (click)=\"onClear()\" *ngIf=\"clearButton\">Limpar</button>\n <span class=\"pdx-actions-spacer\"></span>\n <button mat-stroked-button type=\"button\" (click)=\"onCancel()\">Cancelar</button>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"onApply()\">Aplicar</button>\n </div>\n </div>\n </mat-menu>\n\n <mat-error *ngIf=\"hasValidationError()\">{{ errorMessage() }}</mat-error>\n <mat-hint *ngIf=\"metadata()?.hint && !hasValidationError()\" [align]=\"metadata()?.hintAlign || 'start'\">{{ metadata()!.hint }}</mat-hint>\n </mat-form-field>\n `,\n styles: [\n `\n .pdx-color-preview { width: 24px; height: 24px; border-radius: 4px; border: 1px solid rgba(0,0,0,0.2); display: inline-block; margin-right: 8px; }\n .pdx-color-panel { padding: 8px; max-width: 100%; box-sizing: border-box; }\n .pdx-panel-header { padding: 4px 0 8px; }\n .pdx-preview-box { display: flex; align-items: center; gap: 8px; }\n .pdx-preview-spacer { flex: 1 1 auto; }\n .pdx-section-title { font-size: 12px; opacity: .8; margin-top: 4px; }\n .pdx-preview-swatch { width: 24px; height: 24px; border: 1px solid rgba(0,0,0,0.2); border-radius: 4px; }\n .pdx-gradient-view { display: flex; flex-direction: column; gap: 8px; padding: 8px 0; }\n .pdx-opacity-row { display: flex; align-items: center; gap: 8px; }\n .pdx-recent { padding: 4px 0; }\n .pdx-custom-color { display: flex; align-items: center; gap: 8px; padding: 8px 0; }\n .pdx-palette-view { display: grid; grid-template-columns: repeat(var(--pdx-cols, 8), 24px); gap: 8px; padding: 8px 0; }\n .pdx-swatch { width: 24px; height: 24px; border-radius: 4px; border: 1px solid rgba(0,0,0,0.2); cursor: pointer; }\n .pdx-swatch.selected { border: 2px solid #3f51b5; box-shadow: 0 0 0 2px rgba(63,81,181,0.2); }\n .pdx-actions { display: flex; align-items: center; gap: 8px; padding-top: 8px; }\n .pdx-actions.align-end { justify-content: flex-end; }\n .pdx-actions-spacer { flex: 1 1 auto; }\n `,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatTooltipModule,\n MatTabsModule,\n MatDividerModule,\n MatSlideToggleModule,\n MatBottomSheetModule,\n PraxisIconDirective,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PdxColorPickerComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'componentCssClasses()',\n '[class.praxis-disabled]': 'disabledMode',\n '[style.display]': 'visible ? null : \"none\"',\n '[attr.data-field-type]': '\"colorPicker\"',\n '[attr.data-field-name]': 'metadata()?.name',\n '[attr.data-component-id]': 'componentId()',\n },\n})\nexport class PdxColorPickerComponent extends SimpleBaseInputComponent implements ControlValueAccessor {\n // State and UI inputs\n @Input() actionsLayout: 'start' | 'end' = 'end';\n @Input() activeView: PickerView = 'gradient';\n @Input() adaptiveMode = false; // MVP: uses menu; bottom sheet reserved\n @Input() adaptiveTitle?: string;\n @Input() adaptiveSubtitle?: any;\n @Input() clearButton = true;\n @Input() disabledMode = false;\n @Input() readonlyMode = false;\n @Input() visible = true;\n @Input() presentationMode = false;\n @Input() fillMode: 'solid' | 'flat' | 'outline' = 'solid';\n @Input() format: ColorFormat = 'rgba';\n @Input() gradientSettings?: GradientSettings = { showOpacity: true, channel: 'hsv' };\n @Input() icon?: string;\n @Input() iconClass?: string | string[] | Record<string, boolean>;\n @Input() svgIcon?: any;\n @Input() paletteSettings?: PaletteSettings = { preset: 'material', columns: 8 };\n @Input() popupSettings?: PopupSettings = { width: 340 };\n @Input() preview = false;\n @Input() rounded: 'none' | 'small' | 'medium' | 'large' | 'full' = 'medium';\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\n @Input() tabindex = 0;\n @Input() views: PickerView[] = ['gradient', 'palette'];\n @Input() maxRecent = 12;\n @Input() showRecent = true;\n\n // Outputs/events\n override readonly valueChange = output<string | null>();\n readonly open = output<void>();\n readonly close = output<void>();\n readonly cancel = output<void>();\n readonly activeViewChange = output<PickerView>();\n readonly activeColorClick = output<string>();\n readonly focusEvent = output<void>();\n readonly blurEvent = output<void>();\n\n // Trigger reference kept for future use (not required in MVP)\n @ViewChild('toggleBtn') toggleBtn?: any;\n @ViewChild(MatMenuTrigger) private menuTrigger?: MatMenuTrigger;\n\n // Internal state signals\n private readonly current = signal<string | null>(null);\n private readonly draft = signal<string | null>(null);\n private readonly draftAlpha = signal<number>(1);\n\n panelWidthPx = 340;\n\n constructor(private readonly bottomSheet: MatBottomSheet) {\n super();\n effect(() => {\n this.panelWidthPx = this.coerceWidth(this.popupSettings?.width ?? 340);\n });\n // React to metadata changes to keep inputs in sync\n effect(() => {\n const md: any = this.metadata();\n if (!md) return;\n // Basic mappings from FieldMetadata to component inputs\n if (md.format) this.format = md.format;\n if (md.preview !== undefined) this.preview = !!md.preview;\n if (md.views && Array.isArray(md.views)) this.views = md.views as any;\n if (typeof md.activeView === 'string') {\n this.activeView = md.activeView as any;\n const idx = this.views.indexOf(this.activeView);\n if (idx >= 0) this.selectedTabIndex.set(idx);\n }\n if (typeof md.clearButton === 'boolean') this.clearButton = !!md.clearButton;\n if (typeof md.actionsLayout === 'string') this.actionsLayout = md.actionsLayout as any;\n // Allow legacy editor keys\n if (md.showPreview !== undefined) this.preview = !!md.showPreview;\n if (md.showAlpha !== undefined) {\n this.gradientSettings = { ...(this.gradientSettings || {}), showOpacity: !!md.showAlpha };\n }\n if (md.paletteSettings) this.paletteSettings = { ...(this.paletteSettings || {}), ...(md.paletteSettings || {}) };\n if (md.gradientSettings) this.gradientSettings = { ...(this.gradientSettings || {}), ...(md.gradientSettings || {}) };\n if (md.popupSettings) this.popupSettings = { ...(this.popupSettings || {}), ...(md.popupSettings || {}) };\n // Adaptive\n if (typeof md.adaptiveMode === 'boolean') this.adaptiveMode = !!md.adaptiveMode;\n if (md.adaptiveTitle !== undefined) this.adaptiveTitle = md.adaptiveTitle;\n if (md.adaptiveSubtitle !== undefined) this.adaptiveSubtitle = md.adaptiveSubtitle;\n // Theming\n if (typeof md.fillMode === 'string') this.fillMode = md.fillMode as any;\n if (typeof md.rounded === 'string') this.rounded = md.rounded as any;\n if (typeof md.size === 'string') this.size = md.size as any;\n if (typeof md.icon === 'string') this.icon = md.icon;\n if (md.iconClass !== undefined) this.iconClass = md.iconClass;\n if (md.svgIcon !== undefined) this.svgIcon = md.svgIcon;\n // A11y / states\n if (typeof md.tabindex === 'number') this.tabindex = md.tabindex;\n if (typeof md.disabled === 'boolean') this.disabledMode = !!md.disabled;\n if (typeof md.readonly === 'boolean') this.readonlyMode = !!md.readonly;\n if (typeof md.visible === 'boolean') this.visible = !!md.visible;\n if (typeof md.presentationMode === 'boolean') this.presentationMode = !!md.presentationMode;\n });\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n // initialize draft from control value\n const v = this.control().value ?? null;\n this.current.set(typeof v === 'string' ? v : null);\n this.draft.set(this.current());\n this.draftAlpha.set(this.extractAlpha(this.current()) ?? 1);\n\n // Load persisted lists\n this.customColors.set(this.loadFromStorage('pdxColorPicker.custom'));\n this.recentColors.set(this.loadFromStorage('pdxColorPicker.recent'));\n }\n\n // ControlValueAccessor bridge via base component\n override writeValue(obj: any): void {\n super.writeValue(obj);\n const v = obj == null ? null : String(obj);\n this.current.set(v);\n this.draft.set(v);\n this.draftAlpha.set(this.extractAlpha(v) ?? 1);\n }\n\n // A11y focus/blur\n override handleFocus(): void { super.handleFocus(); this.focusEvent.emit(); }\n override handleBlur(): void { super.handleBlur(); this.blurEvent.emit(); }\n\n // Popup open behavior (MVP keeps menu; adaptive bottom-sheet placeholder)\n openPicker(): void {\n this.open.emit();\n // If in adaptive mode, we could open bottom sheet; MVP keeps menu trigger in template\n // Placeholder to show future extension point\n }\n\n onClose(): void { this.close.emit(); }\n\n // Views logic\n selectedTabIndex = signal<number>(0);\n readonly showGradient = computed(() => this.views.includes('gradient'));\n readonly showPalette = computed(() => this.views.includes('palette'));\n\n onTabIndexChange(i: number): void {\n this.selectedTabIndex.set(i);\n const v: PickerView = this.views[i] || 'gradient';\n this.activeView = v;\n this.activeViewChange.emit(v);\n }\n\n // Draft preview strings\n draftPreview = computed(() => this.toFormat(this.draft(), this.format, this.draftAlpha()));\n draftSolidHex = computed(() => this.toHex(this.draft()) || '#000000');\n draftOpacity = computed(() => this.draftAlpha());\n\n // Preview swatch background for input prefix\n previewBackground(): string {\n const v = String(this.control().value ?? '').trim();\n if (!v) return '#000000';\n return this.toFormat(v, this.format, this.extractAlpha(v) ?? 1) || v;\n }\n\n // Gradient handlers (native MVP)\n onNativeGradient(ev: Event): void {\n const hex = (ev.target as HTMLInputElement).value;\n this.draft.set(hex);\n }\n onOpacity(ev: Event): void {\n const a = parseFloat((ev.target as HTMLInputElement).value);\n this.draftAlpha.set(Number.isFinite(a) ? Math.max(0, Math.min(1, a)) : 1);\n }\n\n // Palette logic\n private readonly customColors = signal<string[]>([]);\n readonly recentColors = signal<string[]>([]);\n paletteColors = computed(() => {\n const base = this.buildPaletteColors(this.paletteSettings);\n const extra = this.customColors();\n // dedupe (case-insensitive)\n const seen = new Set<string>();\n const all = [...base, ...extra].filter((c) => {\n const key = (c || '').toLowerCase();\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n return all;\n });\n trackColor(_: number, c: string) { return c; }\n onSwatchClick(c: string): void {\n this.draft.set(c);\n this.activeColorClick.emit(c);\n }\n\n addPaletteColor(): void {\n const hex = this.toHex(this.draft()) || this.draftSolidHex();\n const v = (hex || '').toLowerCase();\n if (!v) return;\n const arr = this.customColors();\n if (!arr.some((c) => (c || '').toLowerCase() === v)) {\n const next = [...arr, v];\n this.customColors.set(next);\n this.saveToStorage('pdxColorPicker.custom', next);\n }\n }\n\n private pushRecent(v: string | null): void {\n const hex = this.toHex(v || '') || (v || '');\n const key = (hex || '').toLowerCase();\n if (!key) return;\n const cur = this.recentColors();\n const filtered = cur.filter((c) => (c || '').toLowerCase() !== key);\n const next = [key, ...filtered].slice(0, Math.max(1, this.maxRecent || 12));\n this.recentColors.set(next);\n this.saveToStorage('pdxColorPicker.recent', next);\n }\n\n copyDraft(): void {\n const val = this.draftPreview() || '';\n try {\n if ((navigator as any)?.clipboard?.writeText) {\n (navigator as any).clipboard.writeText(val);\n } else {\n const ta = document.createElement('textarea');\n ta.value = val;\n ta.style.position = 'fixed';\n ta.style.opacity = '0';\n document.body.appendChild(ta);\n ta.select();\n try { document.execCommand('copy'); } catch {}\n document.body.removeChild(ta);\n }\n } catch {}\n }\n\n // Selection helper for palette feedback\n isSelected(c: string): boolean {\n const d = this.draft();\n if (!d) return false;\n const hexDraft = (this.toHex(d) || d).toLowerCase();\n return (c || '').toLowerCase() === hexDraft;\n }\n\n // Actions\n onClear(): void {\n this.draft.set(null);\n this.draftAlpha.set(1);\n }\n onCancel(): void {\n this.cancel.emit();\n this.draft.set(this.current());\n this.draftAlpha.set(this.extractAlpha(this.current()) ?? 1);\n this.menuTrigger?.closeMenu();\n }\n onApply(): void {\n const out = this.toFormat(this.draft(), this.format, this.draftAlpha());\n this.setValue(out, { emitEvent: true });\n this.current.set(out);\n this.valueChange.emit(out);\n this.pushRecent(out);\n this.menuTrigger?.closeMenu();\n }\n\n // State helpers\n readonlyEffective(): boolean {\n const st = computeEffectiveState(this.metadata() as any, {\n readonlyMode: this.readonlyMode,\n presentationMode: this.presentationMode,\n });\n return st.readonly;\n }\n\n errorStateMatcher() { return getErrorStateMatcherForField(this.metadata()); }\n\n protected override getSpecificCssClasses(): string[] { return ['pdx-color-picker']; }\n\n // Accept hot metadata updates from DynamicFieldLoader / DynamicForm\n setInputMetadata(meta: any): void {\n try {\n this.metadata.set(meta);\n } catch {}\n }\n\n // =============================================================================\n // Color conversion helpers (MVP-grade, not exhaustive)\n // =============================================================================\n private toFormat(value: string | null, fmt: ColorFormat, alpha: number): string | null {\n if (value == null || !String(value).trim()) return null;\n const v = String(value).trim();\n switch (fmt) {\n case 'hex': return this.toHex(v);\n case 'rgb': return this.toRgb(v, false, alpha);\n case 'rgba': return this.toRgb(v, true, alpha);\n case 'hsl': return this.toHsl(v, alpha);\n default: return v;\n }\n }\n\n private toHex(v: string | null): string | null {\n if (!v) return null;\n if (v.startsWith('#')) return v;\n // very naive parser for rgb/rgba\n const m = v.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (m) {\n const r = (+m[1]).toString(16).padStart(2, '0');\n const g = (+m[2]).toString(16).padStart(2, '0');\n const b = (+m[3]).toString(16).padStart(2, '0');\n return `#${r}${g}${b}`;\n }\n return v;\n }\n\n private toRgb(v: string, withAlpha: boolean, alpha: number): string {\n if (v.startsWith('#')) {\n const hex = v.replace('#', '');\n const r = parseInt(hex.length >= 6 ? hex.slice(0, 2) : hex[0] + hex[0], 16);\n const g = parseInt(hex.length >= 6 ? hex.slice(2, 4) : hex[1] + hex[1], 16);\n const b = parseInt(hex.length >= 6 ? hex.slice(4, 6) : hex[2] + hex[2], 16);\n return withAlpha ? `rgba(${r}, ${g}, ${b}, ${this.clamp01(alpha)})` : `rgb(${r}, ${g}, ${b})`;\n }\n // pass-through for rgb/rgba inputs\n if (!withAlpha && v.startsWith('rgb(')) return v;\n if (withAlpha && v.startsWith('rgba(')) return v;\n if (withAlpha && v.startsWith('rgb(')) return v.replace('rgb(', 'rgba(').replace(')', `, ${this.clamp01(alpha)})`);\n return v;\n }\n\n private toHsl(v: string, alpha: number): string {\n // Convert via RGB (naive)\n let r = 0, g = 0, b = 0;\n if (v.startsWith('#')) {\n const hex = v.replace('#', '');\n r = parseInt(hex.length >= 6 ? hex.slice(0, 2) : hex[0] + hex[0], 16);\n g = parseInt(hex.length >= 6 ? hex.slice(2, 4) : hex[1] + hex[1], 16);\n b = parseInt(hex.length >= 6 ? hex.slice(4, 6) : hex[2] + hex[2], 16);\n } else {\n const m = v.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (m) { r = +m[1]; g = +m[2]; b = +m[3]; }\n }\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h = 0, s = 0, l = (max + min) / 2;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n const hs = Math.round(h * 360);\n const ss = Math.round(s * 100);\n const ls = Math.round(l * 100);\n const a = this.clamp01(alpha);\n return a < 1 ? `hsla(${hs}, ${ss}%, ${ls}%, ${a})` : `hsl(${hs}, ${ss}%, ${ls}%)`;\n }\n\n private extractAlpha(v: string | null): number | null {\n if (!v) return null;\n const m = v.match(/rgba\\([^\\)]+,\\s*([0-9.]+)\\s*\\)/i);\n if (m) return parseFloat(m[1]);\n const m2 = v.match(/hsla\\([^\\)]+,\\s*([0-9.]+)\\s*\\)/i);\n if (m2) return parseFloat(m2[1]);\n return null;\n }\n\n private clamp01(a: number): number { return Math.max(0, Math.min(1, a)); }\n\n private buildPaletteColors(ps?: PaletteSettings): string[] {\n const presets: Record<string, string[]> = {\n basic: ['#000000','#ffffff','#ff0000','#00ff00','#0000ff','#ffff00','#ff00ff','#00ffff'],\n office: ['#c00000','#ff0000','#ffc000','#ffff00','#92d050','#00b050','#00b0f0','#0070c0','#002060','#7030a0'],\n material: [\n '#F44336','#E91E63','#9C27B0','#673AB7','#3F51B5','#2196F3','#03A9F4','#00BCD4','#009688','#4CAF50',\n '#8BC34A','#CDDC39','#FFEB3B','#FFC107','#FF9800','#FF5722','#795548','#9E9E9E','#607D8B'\n ]\n };\n if (ps?.colors?.length) return ps.colors;\n const name = ps?.preset || 'material';\n return presets[name] || presets['material'];\n }\n\n private coerceWidth(w: number | string): number {\n if (typeof w === 'number') return w;\n const m = String(w).match(/(\\d+)/);\n return m ? parseInt(m[1], 10) : 340;\n }\n\n private loadFromStorage(key: string): string[] {\n try {\n const raw = localStorage.getItem(key);\n if (!raw) return [];\n const arr = JSON.parse(raw);\n return Array.isArray(arr) ? (arr.filter((x) => typeof x === 'string') as string[]) : [];\n } catch {\n return [];\n }\n }\n\n private saveToStorage(key: string, value: string[]): void {\n try {\n localStorage.setItem(key, JSON.stringify(value || []));\n } catch {}\n }\n}\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { TextInputComponent } from './text-input.component';\n\n/** Metadata for TextInputComponent */\nexport const PDX_TEXT_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-text-input',\n selector: 'pdx-text-input',\n component: TextInputComponent,\n friendlyName: 'Entrada de texto',\n description: 'Campo de texto simples com validação e suporte a ícones/placeholder.',\n icon: 'text_fields',\n inputs: [\n { name: 'metadata', type: 'MaterialInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Define modo somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilita o campo' },\n { name: 'visible', type: 'boolean', default: true, description: 'Controla a visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo de apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar o campo' },\n ],\n tags: ['widget', 'field', 'input', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { NumberInputComponent } from './number-input.component';\n\n/** Metadata for NumberInputComponent */\nexport const PDX_NUMBER_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-number-input',\n selector: 'pdx-number-input',\n component: NumberInputComponent,\n friendlyName: 'Entrada numérica',\n description: 'Campo numérico com validação (min, max, pattern).',\n icon: 'calculate',\n inputs: [\n { name: 'metadata', type: 'MaterialNumericMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Define modo somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilita o campo' },\n { name: 'visible', type: 'boolean', default: true, description: 'Controla a visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo de apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar o campo' },\n ],\n tags: ['widget', 'field', 'input', 'numeric', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialSelectComponent } from './material-select.component';\n\n/**\n * Metadata for MaterialSelectComponent\n *\n * Documenta inputs/descrição para catálogos e builders. Este componente\n * não expõe @Output próprios (usa ControlValueAccessor), portanto não há\n * eventos listados aqui.\n */\nexport const PDX_MATERIAL_SELECT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-select',\n selector: 'pdx-material-select',\n component: MaterialSelectComponent,\n friendlyName: 'Select (Material)',\n description: 'Campo de seleção simples (MatSelect) com opção vazia.',\n icon: 'arrow_drop_down_circle',\n inputs: [\n { name: 'metadata', type: 'MaterialSelectMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Define modo somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilita o campo' },\n { name: 'visible', type: 'boolean', default: true, description: 'Controla a visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo de apresentação' },\n ],\n tags: ['widget', 'field', 'select', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { ColorInputComponent } from './color-input.component';\n\nexport const PDX_COLOR_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-color-input',\n selector: 'pdx-color-input',\n component: ColorInputComponent,\n friendlyName: 'Cor (input)',\n description: 'Campo de cor com input do Material e validação.',\n icon: 'palette',\n inputs: [\n { name: 'metadata', type: 'MaterialColorInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'material', 'color'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { DateInputComponent } from './date-input.component';\n\nexport const PDX_DATE_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-date-input',\n selector: 'pdx-date-input',\n component: DateInputComponent,\n friendlyName: 'Data (input)',\n description: 'Campo de data simples (input) com validação.',\n icon: 'calendar_today',\n inputs: [\n { name: 'metadata', type: 'MaterialDateInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'material', 'date'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { DatetimeLocalInputComponent } from './datetime-local-input.component';\n\nexport const PDX_DATETIME_LOCAL_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-datetime-local-input',\n selector: 'pdx-datetime-local-input',\n component: DatetimeLocalInputComponent,\n friendlyName: 'Data e hora (local)',\n description: 'Campo para data e hora local com validação.',\n icon: 'event',\n inputs: [\n { name: 'metadata', type: 'MaterialDatetimeLocalInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'material', 'datetime'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { EmailInputComponent } from './email-input.component';\n\nexport const PDX_EMAIL_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-email-input',\n selector: 'pdx-email-input',\n component: EmailInputComponent,\n friendlyName: 'E-mail (input)',\n description: 'Campo de e-mail com validação e sugestões de autocomplete.',\n icon: 'alternate_email',\n inputs: [\n { name: 'metadata', type: 'MaterialEmailInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'material', 'email'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialDatepickerComponent } from './material-datepicker.component';\n\nexport const PDX_MATERIAL_DATEPICKER_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-datepicker',\n selector: 'pdx-material-datepicker',\n component: MaterialDatepickerComponent,\n friendlyName: 'Datepicker (Material)',\n description: 'Selecionador de data com MatDatepicker e validação.',\n icon: 'event',\n inputs: [\n { name: 'metadata', type: 'MaterialDatepickerMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'date', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialDateRangeComponent } from './material-date-range.component';\n\nexport const PDX_MATERIAL_DATE_RANGE_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-date-range',\n selector: 'pdx-material-date-range',\n component: MaterialDateRangeComponent,\n friendlyName: 'Intervalo de datas (Material)',\n description: 'Campo de intervalo de datas com MatDateRangeInput.',\n icon: 'date_range',\n inputs: [\n { name: 'metadata', type: 'MaterialDateRangeMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'date', 'range', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialCurrencyComponent } from './material-currency.component';\n\nexport const PDX_MATERIAL_CURRENCY_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-currency',\n selector: 'pdx-material-currency',\n component: MaterialCurrencyComponent,\n friendlyName: 'Moeda (Material)',\n description: 'Campo de moeda com máscara, localização e validação.',\n icon: 'attach_money',\n inputs: [\n { name: 'metadata', type: 'MaterialCurrencyMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'currency', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialTextareaComponent } from './material-textarea.component';\n\nexport const PDX_MATERIAL_TEXTAREA_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-textarea',\n selector: 'pdx-material-textarea',\n component: MaterialTextareaComponent,\n friendlyName: 'Textarea (Material)',\n description: 'Área de texto multilinha com contagem de caracteres e validação.',\n icon: 'subject',\n inputs: [\n { name: 'metadata', type: 'MaterialTextareaMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'textarea', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialSliderComponent } from './material-slider.component';\n\nexport const PDX_MATERIAL_SLIDER_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-slider',\n selector: 'pdx-material-slider',\n component: MaterialSliderComponent,\n friendlyName: 'Slider (Material)',\n description: 'Controle deslizante com valores mínimo/máximo e step.',\n icon: 'linear_scale',\n inputs: [\n { name: 'metadata', type: 'MaterialSliderMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'slider', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialTimepickerComponent } from './material-timepicker.component';\n\nexport const PDX_MATERIAL_TIMEPICKER_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-timepicker',\n selector: 'pdx-material-timepicker',\n component: MaterialTimepickerComponent,\n friendlyName: 'Timepicker (Material)',\n description: 'Selecionador de horário com validação e máscara.',\n icon: 'schedule',\n inputs: [\n { name: 'metadata', type: 'MaterialTimepickerMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'time', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialButtonComponent } from './material-button.component';\n\nexport const PDX_MATERIAL_BUTTON_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-button',\n selector: 'pdx-material-button',\n component: MaterialButtonComponent,\n friendlyName: 'Botão (Material)',\n description: 'Botão configurável com variantes, loading e ações.',\n icon: 'smart_button',\n inputs: [\n { name: 'metadata', type: 'MaterialButtonMetadata', description: 'Configuração do componente' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'button', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialButtonToggleComponent } from './material-button-toggle.component';\n\nexport const PDX_MATERIAL_BUTTON_TOGGLE_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-button-toggle',\n selector: 'pdx-material-button-toggle',\n component: MaterialButtonToggleComponent,\n friendlyName: 'Button Toggle (Material)',\n description: 'Grupo de botões toggle para seleção única ou múltipla.',\n icon: 'toggle_on',\n inputs: [\n { name: 'metadata', type: 'MaterialButtonToggleMetadata', description: 'Configuração do componente' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'toggle', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialCheckboxGroupComponent } from './material-checkbox-group.component';\n\nexport const PDX_MATERIAL_CHECKBOX_GROUP_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-checkbox-group',\n selector: 'pdx-material-checkbox-group',\n component: MaterialCheckboxGroupComponent,\n friendlyName: 'Checkboxes (Material)',\n description: 'Grupo de checkboxes com opções estáticas ou dinâmicas.',\n icon: 'check_box',\n inputs: [\n { name: 'metadata', type: 'MaterialCheckboxMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'checkbox', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialChipsComponent } from './material-chips.component';\n\nexport const PDX_MATERIAL_CHIPS_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-chips',\n selector: 'pdx-material-chips',\n component: MaterialChipsComponent,\n friendlyName: 'Chips (Material)',\n description: 'Campo de chips com adição/remoção de itens e autocomplete.',\n icon: 'sell',\n inputs: [\n { name: 'metadata', type: 'MaterialChipsMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'chips', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialColorPickerComponent } from './material-colorpicker.component';\n\nexport const PDX_MATERIAL_COLORPICKER_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-colorpicker',\n selector: 'pdx-material-colorpicker',\n component: MaterialColorPickerComponent,\n friendlyName: 'Colorpicker (Material)',\n description: 'Seletor de cor com suporte a presets e input.',\n icon: 'palette',\n inputs: [\n { name: 'metadata', type: 'MaterialColorPickerMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'color', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialRatingComponent } from './material-rating.component';\n\nexport const PDX_MATERIAL_RATING_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-rating',\n selector: 'pdx-material-rating',\n component: MaterialRatingComponent,\n friendlyName: 'Rating (Material)',\n description: 'Avaliação por ícones com meia-estrela e acessibilidade.',\n icon: 'star',\n inputs: [\n { name: 'metadata', type: 'MaterialRatingMetadata', description: 'Configuração do campo' },\n { name: 'itemsCount', type: 'number', default: 5, description: 'Número de itens' },\n { name: 'selection', type: \"'continuous'|'single'\", default: 'continuous', description: 'Modo de seleção' },\n { name: 'precision', type: \"'item'|'half'\", default: 'item', description: 'Precisão' },\n { name: 'label', type: 'string', description: 'Rótulo opcional' },\n { name: 'icon', type: 'string', description: 'Mat icon ligature' },\n { name: 'svgIcon', type: 'string', description: 'SVG icon (filled)' },\n { name: 'svgIconOutline', type: 'string', description: 'SVG icon (outline)' },\n { name: 'disabled', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'tabindex', type: 'number', default: 0, description: 'TabIndex do container' },\n ],\n tags: ['widget', 'field', 'rating', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { PdxColorPickerComponent } from './pdx-color-picker.component';\n\nexport const PDX_COLOR_PICKER_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-color-picker',\n selector: 'pdx-color-picker',\n component: PdxColorPickerComponent,\n friendlyName: 'Color Picker v2',\n description:\n 'ColorPicker unificado com Gradient/Palette, Apply/Cancel, Clear, Adaptive e theming.',\n icon: 'palette',\n inputs: [\n // Base/geral\n { name: 'metadata', type: 'any', description: 'Configuração do campo' },\n { name: 'label', type: 'string', description: 'Rótulo' },\n { name: 'hint', type: 'string', description: 'Hint' },\n { name: 'required', type: 'boolean', description: 'Obrigatório' },\n // Formato\n { name: 'format', type: \"'hex'|'rgb'|'rgba'|'hsl'\", default: 'rgba', description: 'Formato do valor' },\n // Views/preview/ações\n { name: 'views', type: \"Array<'gradient'|'palette'>\", default: \"['gradient','palette']\", description: 'Views habilitadas' },\n { name: 'activeView', type: \"'gradient'|'palette'\", description: 'View ativa' },\n { name: 'preview', type: 'boolean', default: false, description: 'Pane de pré-visualização' },\n { name: 'clearButton', type: 'boolean', default: true, description: 'Exibir botão Clear' },\n { name: 'actionsLayout', type: \"'start'|'end'\", default: 'end', description: 'Posição dos botões' },\n // Adaptive/Popup\n { name: 'adaptiveMode', type: 'boolean', default: false, description: 'Modo Adaptive (BottomSheet/Drawer)' },\n { name: 'adaptiveTitle', type: 'string', description: 'Título do Adaptive' },\n { name: 'adaptiveSubtitle', type: 'any', description: 'Subtítulo do Adaptive' },\n { name: 'popupSettings', type: '{ width?:number|string; anchor?:Element; appendTo?:Element|ViewContainerRef }', description: 'Configurações do popup' },\n // Gradient/Palette\n { name: 'gradientSettings', type: \"{ showOpacity?: boolean; channel?: 'hsv'|'hsl' }\", description: 'Configuração do gradiente' },\n { name: 'paletteSettings', type: \"{ preset?: 'basic'|'office'|'material'|string; colors?: string[]; columns?: number }\", description: 'Configuração da paleta' },\n // Theming\n { name: 'fillMode', type: \"'solid'|'flat'|'outline'\", default: 'solid', description: 'Estilo de preenchimento' },\n { name: 'rounded', type: \"'none'|'small'|'medium'|'large'|'full'\", default: 'medium', description: 'Arredondamento' },\n { name: 'size', type: \"'small'|'medium'|'large'\", default: 'medium', description: 'Tamanho' },\n { name: 'icon', type: 'string', description: 'Ícone (ligature)' },\n { name: 'iconClass', type: 'string|string[]|Record<string,boolean>', description: 'Classes do ícone' },\n { name: 'svgIcon', type: 'SVGIcon', description: 'Ícone SVG' },\n // Acessibilidade/Comportamento\n { name: 'tabindex', type: 'number', default: 0, description: 'Tab index' },\n { name: 'disabled', type: 'boolean', description: 'Desabilitado' },\n { name: 'readonly', type: 'boolean', description: 'Somente leitura' },\n ],\n tags: ['widget', 'field', 'color', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialCpfCnpjInputComponent } from './material-cpf-cnpj-input.component';\n\nexport const PDX_MATERIAL_CPF_CNPJ_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-cpf-cnpj-input',\n selector: 'pdx-material-cpf-cnpj-input',\n component: MaterialCpfCnpjInputComponent,\n friendlyName: 'CPF/CNPJ (Material)',\n description: 'Campo para documentos nacionais com máscara e validação.',\n icon: 'badge',\n inputs: [\n { name: 'metadata', type: 'MaterialCpfCnpjMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'document', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialFileUploadComponent } from './material-file-upload.component';\n\nexport const PDX_MATERIAL_FILE_UPLOAD_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-file-upload',\n selector: 'pdx-material-file-upload',\n component: MaterialFileUploadComponent,\n friendlyName: 'Upload de arquivo (Material)',\n description: 'Componente de upload com integrações e validações.',\n icon: 'upload_file',\n inputs: [\n { name: 'metadata', type: 'ComponentMetadata', description: 'Configuração do componente' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'file', 'upload', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialMultiSelectComponent } from './material-multi-select.component';\n\nexport const PDX_MATERIAL_MULTI_SELECT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-multi-select',\n selector: 'pdx-material-multi-select',\n component: MaterialMultiSelectComponent,\n friendlyName: 'Multi-select (Material)',\n description: 'Seleção múltipla com opções estáticas ou remotas.',\n icon: 'playlist_add_check',\n inputs: [\n { name: 'metadata', type: 'MaterialSelectMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'select', 'multi', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialMultiSelectTreeComponent } from './material-multi-select-tree.component';\n\nexport const PDX_MATERIAL_MULTI_SELECT_TREE_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-multi-select-tree',\n selector: 'pdx-material-multi-select-tree',\n component: MaterialMultiSelectTreeComponent,\n friendlyName: 'Multi-select em árvore (Material)',\n description: 'Seleção múltipla hierárquica com suporte a grandes listas.',\n icon: 'account_tree',\n inputs: [\n { name: 'metadata', type: 'MaterialSelectMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'select', 'tree', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialRadioGroupComponent } from './material-radio-group.component';\n\nexport const PDX_MATERIAL_RADIO_GROUP_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-radio-group',\n selector: 'pdx-material-radio-group',\n component: MaterialRadioGroupComponent,\n friendlyName: 'Radios (Material)',\n description: 'Grupo de botões de rádio com opções estáticas ou dinâmicas.',\n icon: 'radio_button_checked',\n inputs: [\n { name: 'metadata', type: 'MaterialRadioMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'radio', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialSearchableSelectComponent } from './material-searchable-select.component';\n\nexport const PDX_MATERIAL_SEARCHABLE_SELECT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-searchable-select',\n selector: 'pdx-material-searchable-select',\n component: MaterialSearchableSelectComponent,\n friendlyName: 'Select com busca (Material)',\n description: 'Select com caixa de busca embutida e opções remotas.',\n icon: 'search',\n inputs: [\n { name: 'metadata', type: 'MaterialSelectMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'select', 'search', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialSelectionListComponent } from './material-selection-list.component';\n\nexport const PDX_MATERIAL_SELECTION_LIST_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-selection-list',\n selector: 'pdx-material-selection-list',\n component: MaterialSelectionListComponent,\n friendlyName: 'Selection List (Material)',\n description: 'Lista de seleção múltipla baseada em MatSelectionList.',\n icon: 'fact_check',\n inputs: [\n { name: 'metadata', type: 'MaterialSelectMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'list', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialTransferListComponent } from './material-transfer-list.component';\n\nexport const PDX_MATERIAL_TRANSFER_LIST_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-transfer-list',\n selector: 'pdx-material-transfer-list',\n component: MaterialTransferListComponent,\n friendlyName: 'Transfer List (Material)',\n description: 'Lista de transferência com dois painéis (disponíveis/selecionados).',\n icon: 'compare_arrows',\n inputs: [\n { name: 'metadata', type: 'ComponentMetadata', description: 'Configuração do componente' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'list', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialTreeSelectComponent } from './material-tree-select.component';\n\nexport const PDX_MATERIAL_TREE_SELECT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-tree-select',\n selector: 'pdx-material-tree-select',\n component: MaterialTreeSelectComponent,\n friendlyName: 'Tree Select (Material)',\n description: 'Seleção hierárquica em árvore com busca opcional.',\n icon: 'account_tree',\n inputs: [\n { name: 'metadata', type: 'MaterialTreeSelectMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'tree', 'select', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MaterialPriceRangeComponent } from './material-price-range.component';\n\nexport const PDX_MATERIAL_PRICE_RANGE_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-price-range',\n selector: 'pdx-material-price-range',\n component: MaterialPriceRangeComponent,\n friendlyName: 'Intervalo de preço (Material)',\n description: 'Dois campos de moeda integrados para faixa de valores.',\n icon: 'price_change',\n inputs: [\n { name: 'metadata', type: 'MaterialPriceRangeMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'currency', 'range', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { PdxMaterialRangeSliderComponent } from './material-range-slider.component';\n\nexport const PDX_MATERIAL_RANGE_SLIDER_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-range-slider',\n selector: 'pdx-material-range-slider',\n component: PdxMaterialRangeSliderComponent,\n friendlyName: 'Range Slider (Material)',\n description: 'Slider simples ou de intervalo com validações customizadas.',\n icon: 'tune',\n inputs: [\n { name: 'metadata', type: 'MaterialRangeSliderMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'slider', 'range', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { MonthInputComponent } from './month-input.component';\n\nexport const PDX_MONTH_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-month-input',\n selector: 'pdx-month-input',\n component: MonthInputComponent,\n friendlyName: 'Mês (input)',\n description: 'Campo para seleção de mês com validação.',\n icon: 'date_range',\n inputs: [\n { name: 'metadata', type: 'MaterialMonthInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'date', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { PasswordInputComponent } from './password-input.component';\n\nexport const PDX_PASSWORD_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-password-input',\n selector: 'pdx-password-input',\n component: PasswordInputComponent,\n friendlyName: 'Senha (input)',\n description: 'Campo de senha com máscara e alternar visibilidade.',\n icon: 'password',\n inputs: [\n { name: 'metadata', type: 'MaterialPasswordMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { PhoneInputComponent } from './phone-input.component';\n\nexport const PDX_PHONE_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-phone-input',\n selector: 'pdx-phone-input',\n component: PhoneInputComponent,\n friendlyName: 'Telefone (input)',\n description: 'Campo de telefone com máscara e validação.',\n icon: 'call',\n inputs: [\n { name: 'metadata', type: 'MaterialPhoneMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'material', 'phone'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { PreloadStatusComponent } from './preload-status.component';\n\nexport const PDX_PRELOAD_STATUS_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-preload-status',\n selector: 'pdx-preload-status',\n component: PreloadStatusComponent,\n friendlyName: 'Status de preload',\n description: 'Indicador de carregamento/estado para formulários/listas.',\n icon: 'hourglass_empty',\n inputs: [\n { name: 'metadata', type: 'any', description: 'Configuração (quando aplicável)' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n ],\n tags: ['widget', 'status', 'utility'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { SearchInputComponent } from './search-input.component';\n\nexport const PDX_SEARCH_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-search-input',\n selector: 'pdx-search-input',\n component: SearchInputComponent,\n friendlyName: 'Busca (input)',\n description: 'Campo de busca com ícone e atalhos.',\n icon: 'search',\n inputs: [\n { name: 'metadata', type: 'MaterialSearchInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'search', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { TimeInputComponent } from './time-input.component';\n\nexport const PDX_TIME_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-time-input',\n selector: 'pdx-time-input',\n component: TimeInputComponent,\n friendlyName: 'Hora (input)',\n description: 'Campo de hora (HH:mm) com validação.',\n icon: 'schedule',\n inputs: [\n { name: 'metadata', type: 'MaterialTimeInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'time', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { UrlInputComponent } from './url-input.component';\n\nexport const PDX_URL_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-url-input',\n selector: 'pdx-url-input',\n component: UrlInputComponent,\n friendlyName: 'URL (input)',\n description: 'Campo de URL com validação.',\n icon: 'link',\n inputs: [\n { name: 'metadata', type: 'MaterialUrlInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { WeekInputComponent } from './week-input.component';\n\nexport const PDX_WEEK_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-week-input',\n selector: 'pdx-week-input',\n component: WeekInputComponent,\n friendlyName: 'Semana (input)',\n description: 'Campo de semana com validação.',\n icon: 'event',\n inputs: [\n { name: 'metadata', type: 'MaterialWeekInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n outputs: [\n { name: 'validationChange', type: 'ValidationErrors | null', description: 'Emite ao validar' },\n ],\n tags: ['widget', 'field', 'input', 'material', 'date'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { PdxMaterialTimeRangeComponent } from './pdx-material-time-range.component';\n\nexport const PDX_MATERIAL_TIME_RANGE_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-material-time-range',\n selector: 'pdx-material-time-range',\n component: PdxMaterialTimeRangeComponent,\n friendlyName: 'Intervalo de horário (Material)',\n description: 'Dois seletores de horário integrados em um único campo.',\n icon: 'schedule',\n inputs: [\n { name: 'metadata', type: 'MaterialTimeRangeMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'time', 'range', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { PdxYearInputComponent } from './pdx-year-input.component';\n\nexport const PDX_YEAR_INPUT_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'pdx-year-input',\n selector: 'pdx-year-input',\n component: PdxYearInputComponent,\n friendlyName: 'Ano (input)',\n description: 'Campo para seleção de ano com validação.',\n icon: 'calendar_month',\n inputs: [\n { name: 'metadata', type: 'MaterialYearInputMetadata', description: 'Configuração do campo' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n ],\n tags: ['widget', 'field', 'input', 'date', 'material'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { ComponentDocMeta } from '@praxisui/core';\nimport { FieldShellComponent } from './field-shell.component';\n\nexport const PDX_FIELD_SHELL_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'praxis-field-shell',\n selector: 'praxis-field-shell',\n component: FieldShellComponent,\n friendlyName: 'Field Shell (container)',\n description: 'Invólucro visual/comportamental para campos dinâmicos (uso interno).',\n icon: 'view_day',\n inputs: [\n { name: 'field', type: 'FieldMetadata', description: 'Metadados do campo a ser renderizado' },\n { name: 'index', type: 'number', description: 'Posição do campo na lista' },\n { name: 'control', type: 'AbstractControl | null', description: 'Controle reativo associado' },\n { name: 'readonlyMode', type: 'boolean', default: false, description: 'Somente leitura' },\n { name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilitado' },\n { name: 'visible', type: 'boolean', default: true, description: 'Visibilidade' },\n { name: 'presentationMode', type: 'boolean', default: false, description: 'Modo apresentação' },\n { name: 'canvasMode', type: 'boolean', default: false, description: 'Habilita interações de canvas' },\n ],\n tags: ['internal', 'container'],\n lib: '@praxisui/dynamic-fields',\n};\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class DateUtilsService {\n /**\n * Parses different date representations into a `Date` object.\n * Accepts ISO strings, `Date` instances or numeric arrays in the form\n * `[year, month, day, hour?, minute?, second?, millisecond?]`.\n * Returns `null` when the input cannot be parsed.\n */\n parseDate(value: any): Date | null {\n if (!value) return null;\n if (value instanceof Date) return value;\n if (Array.isArray(value) && value.every((n) => typeof n === 'number')) {\n const [y, m = 1, d = 1, h = 0, min = 0, s = 0, ms = 0] = value;\n const date = new Date(y, m - 1, d, h, min, s, ms);\n return isNaN(date.getTime()) ? null : date;\n }\n try {\n const parsed = new Date(value);\n return isNaN(parsed.getTime()) ? null : parsed;\n } catch {\n return null;\n }\n }\n\n getDefaultDateFormat(controlType?: string): string {\n switch (controlType) {\n case 'datetime':\n return 'dd/MM/yyyy HH:mm';\n case 'timepicker':\n return 'HH:mm';\n default:\n return 'dd/MM/yyyy';\n }\n }\n}\n","/**\n * @fileoverview Providers para configuração da biblioteca praxis-dynamic-fields\n * \n * Providers necessários para o funcionamento correto da biblioteca,\n * incluindo HttpClient e outros serviços essenciais.\n */\n\nimport { Provider, EnvironmentProviders } from '@angular/core';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\n\n/**\n * Providers essenciais para praxis-dynamic-fields\n * \n * Inclui HttpClient para data loading e outros providers necessários.\n * \n * @example\n * ```typescript\n * // No app.config.ts ou main.ts\n * import { providePraxisDynamicFields } from 'praxis-dynamic-fields';\n * \n * bootstrapApplication(AppComponent, {\n * providers: [\n * ...providePraxisDynamicFields(),\n * // outros providers...\n * ]\n * });\n * ```\n */\nexport function providePraxisDynamicFields(): (Provider | EnvironmentProviders)[] {\n return [\n // HttpClient para data loading\n provideHttpClient(withInterceptorsFromDi()),\n \n // Outros providers podem ser adicionados aqui no futuro\n ];\n}\n\n/**\n * Providers básicos sem HttpClient (para casos onde já está configurado)\n */\nexport function providePraxisDynamicFieldsCore(): Provider[] {\n return [\n // Providers core da biblioteca (sem HttpClient)\n // Pode ser expandido no futuro\n ];\n}","/**\n * @fileoverview Utilitários para mapear JSON Schema para FieldMetadata\n *\n * Converte estruturas JSON Schema/OpenAPI com extensões x-ui\n * para o formato FieldMetadata esperado pelos componentes dinâmicos.\n *\n * Lida com campos que não possuem controlType definido,\n * inferindo tipos apropriados baseado no schema JSON.\n */\n\nimport { FieldMetadata } from '@praxisui/core';\n\n/**\n * Estrutura de nó para controles do tipo multiSelectTree\n */\ninterface TreeNode {\n label: string;\n value: any;\n disabled?: boolean;\n children?: TreeNode[];\n}\n\n/**\n * Interface para propriedades JSON Schema básicas\n */\nexport interface JsonSchemaProperty {\n type?: string;\n format?: string;\n 'x-ui'?: {\n controlType?: string;\n label?: string;\n required?: boolean;\n [key: string]: any;\n };\n $ref?: string;\n properties?: { [key: string]: JsonSchemaProperty };\n items?: JsonSchemaProperty;\n enum?: any[];\n [key: string]: any;\n}\n\n/**\n * Interface para schema completo com required fields\n */\nexport interface JsonSchema {\n type: string;\n properties: { [key: string]: JsonSchemaProperty };\n required?: string[];\n [key: string]: any;\n}\n\n/**\n * Mapeia um JSON Schema completo para array de FieldMetadata\n *\n * @param schema - Schema JSON completo\n * @returns Array de FieldMetadata prontos para renderização\n *\n * @example\n * ```typescript\n * const schema = {\n * type: 'object',\n * properties: {\n * name: { type: 'string', 'x-ui': { controlType: 'input', label: 'Nome' } },\n * age: { type: 'integer' }, // Sem x-ui, será inferido\n * email: { type: 'string', format: 'email' } // Será inferido como email\n * },\n * required: ['name']\n * };\n *\n * const fields = mapJsonSchemaToFields(schema);\n * ```\n */\nexport function mapJsonSchemaToFields(schema: JsonSchema): FieldMetadata[] {\n const fields: FieldMetadata[] = [];\n\n if (!schema.properties) {\n console.warn('[JsonSchemaMapper] Schema não possui propriedades definidas');\n return fields;\n }\n\n Object.entries(schema.properties).forEach(([fieldName, property]) => {\n try {\n const fieldMetadata = mapPropertyToFieldMetadata(\n fieldName,\n property,\n schema.required || [],\n );\n if (fieldMetadata) {\n fields.push(fieldMetadata);\n }\n } catch (error) {\n console.error(\n `[JsonSchemaMapper] Erro ao mapear campo '${fieldName}':`,\n error,\n );\n }\n });\n\n return fields;\n}\n\n/**\n * Mapeia uma propriedade individual para FieldMetadata\n *\n * @param fieldName - Nome do campo\n * @param property - Propriedade do schema\n * @param requiredFields - Lista de campos obrigatórios\n * @returns FieldMetadata ou null se não puder ser mapeado\n */\nexport function mapPropertyToFieldMetadata(\n fieldName: string,\n property: JsonSchemaProperty,\n requiredFields: string[] = [],\n): FieldMetadata | null {\n // Pular campos que são referências complexas sem x-ui ou com x-ui null\n if (property.$ref && (!property['x-ui'] || property['x-ui'] === null)) {\n console.debug(\n `[JsonSchemaMapper] Pulando campo '${fieldName}' - referência complexa sem x-ui`,\n );\n return null;\n }\n\n // Pular campos do tipo object sem x-ui ou com x-ui null (estruturas aninhadas)\n if (\n property.type === 'object' &&\n (!property['x-ui'] || property['x-ui'] === null)\n ) {\n console.debug(\n `[JsonSchemaMapper] Pulando campo '${fieldName}' - objeto aninhado sem x-ui`,\n );\n return null;\n }\n\n // Pular campos do tipo array sem x-ui ou com x-ui null\n if (\n property.type === 'array' &&\n (!property['x-ui'] || property['x-ui'] === null)\n ) {\n console.debug(\n `[JsonSchemaMapper] Pulando campo '${fieldName}' - array sem x-ui`,\n );\n return null;\n }\n\n // Extrair informações do x-ui se disponível\n const uiConfig = property['x-ui'] || {};\n\n // Determinar controlType (prioridade: x-ui.controlType -> inferir do schema)\n const controlType =\n uiConfig.controlType || inferControlTypeFromSchema(property);\n\n if (!controlType) {\n console.warn(\n `[JsonSchemaMapper] Não foi possível determinar controlType para '${fieldName}'`,\n );\n return null;\n }\n\n // Construir FieldMetadata\n const fieldMetadata: FieldMetadata = {\n name: fieldName,\n controlType: controlType,\n label: uiConfig.label || generateLabelFromFieldName(fieldName),\n required: requiredFields.includes(fieldName) || uiConfig.required || false,\n disabled: uiConfig.disabled || false,\n readonly: uiConfig.readonly || false,\n placeholder: uiConfig.placeholder,\n hint: uiConfig.hint || uiConfig.description,\n\n // Propriedades específicas baseadas no tipo\n ...extractTypeSpecificProperties(property, uiConfig),\n };\n\n if (controlType === 'multiSelectTree') {\n const labelKey = uiConfig.optionLabelKey ?? 'label';\n const valueKey = uiConfig.optionValueKey ?? 'value';\n const nodes = mapTreeNodes(\n uiConfig.nodes ?? uiConfig.options ?? [],\n labelKey,\n valueKey,\n );\n (fieldMetadata as any).nodes = nodes;\n delete (fieldMetadata as any).options;\n }\n\n return fieldMetadata;\n}\n\n/**\n * Infere controlType baseado no schema JSON quando x-ui não está disponível\n *\n * @param property - Propriedade do schema\n * @returns controlType inferido ou null\n */\nfunction inferControlTypeFromSchema(\n property: JsonSchemaProperty,\n): string | null {\n // Inferir baseado no tipo e formato\n switch (property.type) {\n case 'string':\n if (property.format === 'email') return 'email';\n if (property.format === 'date') return 'date';\n if (property.format === 'date-time') return 'date';\n if (property.format === 'time') return 'time';\n if (property.format === 'password') return 'password';\n if (property.enum && property.enum.length > 0) return 'select';\n if (property.maxLength && property.maxLength > 255) return 'textarea';\n return 'input';\n\n case 'integer':\n case 'number':\n if (property.format === 'currency') return 'currency';\n return 'numericTextBox';\n\n case 'boolean':\n return 'checkbox';\n\n case 'array':\n if (property.items && property.items.enum) return 'multiSelect';\n return 'textarea'; // Fallback para arrays como JSON\n\n default:\n console.debug(\n `[JsonSchemaMapper] Tipo '${property.type}' não reconhecido, usando input como fallback`,\n );\n return 'input';\n }\n}\n\n/**\n * Extrai propriedades específicas do tipo baseado no schema e x-ui\n *\n * @param property - Propriedade do schema\n * @param uiConfig - Configuração x-ui\n * @returns Objeto com propriedades específicas\n */\nfunction extractTypeSpecificProperties(\n property: JsonSchemaProperty,\n uiConfig: any,\n): any {\n const specificProps: any = {};\n\n // Propriedades de validação\n if (property.minLength !== undefined)\n specificProps.minLength = property.minLength;\n if (property.maxLength !== undefined)\n specificProps.maxLength = property.maxLength;\n if (property.minimum !== undefined) specificProps.min = property.minimum;\n if (property.maximum !== undefined) specificProps.max = property.maximum;\n if (property.pattern) specificProps.pattern = property.pattern;\n\n // Opções para select/radio\n if (property.enum) {\n specificProps.options = property.enum.map((value: any) => ({\n value,\n label: uiConfig.enumLabels?.[value] || String(value),\n }));\n }\n\n if (uiConfig.options) specificProps.options = uiConfig.options;\n if (uiConfig.nodes) specificProps.nodes = uiConfig.nodes;\n\n // Propriedades específicas do Material Design\n if (uiConfig.appearance) specificProps.appearance = uiConfig.appearance;\n if (uiConfig.floatLabel) specificProps.floatLabel = uiConfig.floatLabel;\n if (uiConfig.color) specificProps.color = uiConfig.color;\n\n return specificProps;\n}\n\nfunction mapTreeNodes(\n options: any[] | undefined,\n labelKey: string,\n valueKey: string,\n): TreeNode[] {\n if (!Array.isArray(options)) {\n return [];\n }\n\n return options\n .filter((opt) => opt && (opt[valueKey] ?? opt.value) !== undefined)\n .map((opt) => {\n const children = mapTreeNodes(opt.children, labelKey, valueKey);\n const node: TreeNode = {\n label: String(opt[labelKey] ?? opt.label ?? opt.text ?? ''),\n value: opt[valueKey] ?? opt.value,\n disabled: Boolean(opt.disabled),\n };\n\n if (children.length) {\n node.children = children;\n }\n\n return node;\n });\n}\n\n/**\n * Gera um label legível a partir do nome do campo\n *\n * @param fieldName - Nome do campo (ex: 'nomeCompleto', 'data_nascimento')\n * @returns Label formatado (ex: 'Nome Completo', 'Data Nascimento')\n */\nfunction generateLabelFromFieldName(fieldName: string): string {\n return (\n fieldName\n // Separar camelCase e snake_case\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/_/g, ' ')\n // Capitalizar primeira letra de cada palavra\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ')\n );\n}\n\n/**\n * Valida se um schema tem a estrutura mínima necessária\n *\n * @param schema - Schema a ser validado\n * @returns true se válido, false caso contrário\n */\nexport function isValidJsonSchema(schema: any): schema is JsonSchema {\n if (!schema || typeof schema !== 'object') {\n return false;\n }\n\n if (schema.type !== 'object') {\n console.warn('[JsonSchemaMapper] Schema deve ter type: \"object\"');\n return false;\n }\n\n if (!schema.properties || typeof schema.properties !== 'object') {\n console.warn('[JsonSchemaMapper] Schema deve ter propriedades definidas');\n return false;\n }\n\n return true;\n}\n\n/**\n * Função de conveniência para processar metadata JSON mista\n *\n * Aceita tanto arrays de FieldMetadata quanto JSON Schema,\n * normalizando tudo para FieldMetadata[]\n *\n * @param input - Array de FieldMetadata ou JsonSchema\n * @returns Array normalizado de FieldMetadata\n */\nexport function normalizeFormMetadata(\n input: FieldMetadata[] | JsonSchema,\n): FieldMetadata[] {\n // Se já é array de FieldMetadata, retornar como está\n if (Array.isArray(input)) {\n return input;\n }\n\n // Se é JSON Schema, converter\n if (isValidJsonSchema(input)) {\n return mapJsonSchemaToFields(input);\n }\n\n console.error(\n '[JsonSchemaMapper] Input não é nem FieldMetadata[] nem JsonSchema válido:',\n input,\n );\n return [];\n}\n","/*\n * Public API Surface of praxis-dynamic-fields\n */\n\n// Base components and interfaces\nexport * from './lib/base/base-dynamic-field-component.interface';\nexport * from './lib/base/simple-base-input.component';\nexport * from './lib/base/simple-base-button.component';\nexport * from './lib/base/simple-base-select.component';\nexport * from './lib/base/option-store';\n\n// Directives\nexport * from './lib/directives/dynamic-field-loader.directive';\n\n// Material field components\nexport * from './lib/components/material-button/material-button.component';\nexport * from './lib/components/material-button/confirm-dialog.component';\nexport * from './lib/components/text-input/text-input.component';\nexport * from './lib/components/color-input/color-input.component';\nexport * from './lib/components/date-input/date-input.component';\nexport * from './lib/components/material-datepicker/material-datepicker.component';\nexport * from './lib/components/material-date-range/material-date-range.component';\nexport * from './lib/components/datetime-local-input/datetime-local-input.component';\nexport * from './lib/components/email-input/email-input.component';\nexport * from './lib/components/material-textarea/material-textarea.component';\nexport * from './lib/components/number-input/number-input.component';\nexport * from './lib/components/material-currency/material-currency.component';\nexport * from './lib/components/material-cpf-cnpj-input/material-cpf-cnpj-input.component';\nexport * from './lib/components/material-price-range/material-price-range.component';\nexport * from './lib/components/month-input/month-input.component';\nexport * from './lib/components/password-input/password-input.component';\nexport * from './lib/components/search-input/search-input.component';\nexport * from './lib/components/material-select/material-select.component';\nexport * from './lib/components/material-multi-select/material-multi-select.component';\nexport * from './lib/components/material-multi-select-tree/material-multi-select-tree.component';\nexport * from './lib/components/material-tree-select/material-tree-select.component';\nexport * from './lib/components/material-searchable-select/material-searchable-select.component';\nexport * from './lib/components/material-autocomplete/material-autocomplete.component';\nexport * from './lib/components/material-chips/material-chips.component';\nexport * from './lib/components/material-button-toggle/material-button-toggle.component';\nexport * from './lib/components/material-slide-toggle/material-slide-toggle.component';\nexport * from './lib/components/material-slider/material-slider.component';\nexport * from './lib/components/material-async-select/material-async-select.component';\nexport * from './lib/components/material-radio-group/material-radio-group.component';\nexport * from './lib/components/material-checkbox-group/material-checkbox-group.component';\nexport * from './lib/components/material-selection-list/material-selection-list.component';\nexport * from './lib/components/material-file-upload/material-file-upload.component';\nexport * from './lib/components/preload-status/preload-status.component';\nexport * from './lib/components/phone-input/phone-input.component';\nexport * from './lib/components/time-input/time-input.component';\nexport * from './lib/components/material-timepicker/material-timepicker.component';\nexport * from './lib/components/url-input/url-input.component';\nexport * from './lib/components/week-input/week-input.component';\nexport * from './lib/components/material-colorpicker/material-colorpicker.component';\nexport * from './lib/components/material-rating/material-rating.component';\nexport * from './lib/components/color-picker/pdx-color-picker.component';\nexport * from './lib/components/material-range-slider';\nexport * from './lib/components/material-transfer-list/material-transfer-list.component';\nexport * from './lib/components/pdx-year-input/pdx-year-input.component';\nexport * from './lib/components/pdx-material-time-range/pdx-material-time-range.component';\n\n// Component metadata\nexport * from './lib/components/text-input/text-input.metadata';\nexport * from './lib/components/number-input/number-input.metadata';\nexport * from './lib/components/material-select/material-select.metadata';\nexport * from './lib/components/color-input/color-input.metadata';\nexport * from './lib/components/date-input/date-input.metadata';\nexport * from './lib/components/datetime-local-input/datetime-local-input.metadata';\nexport * from './lib/components/email-input/email-input.metadata';\nexport * from './lib/components/material-datepicker/material-datepicker.metadata';\nexport * from './lib/components/material-date-range/material-date-range.metadata';\nexport * from './lib/components/material-currency/material-currency.metadata';\nexport * from './lib/components/material-textarea/material-textarea.metadata';\nexport * from './lib/components/material-slider/material-slider.metadata';\nexport * from './lib/components/material-timepicker/material-timepicker.metadata';\nexport * from './lib/components/material-button/material-button.metadata';\nexport * from './lib/components/material-button-toggle/material-button-toggle.metadata';\nexport * from './lib/components/material-checkbox-group/material-checkbox-group.metadata';\nexport * from './lib/components/material-chips/material-chips.metadata';\nexport * from './lib/components/material-colorpicker/material-colorpicker.metadata';\nexport * from './lib/components/material-rating/material-rating.metadata';\nexport * from './lib/components/color-picker/pdx-color-picker.metadata';\nexport * from './lib/components/material-cpf-cnpj-input/material-cpf-cnpj-input.metadata';\nexport * from './lib/components/material-file-upload/material-file-upload.metadata';\nexport * from './lib/components/material-multi-select/material-multi-select.metadata';\nexport * from './lib/components/material-multi-select-tree/material-multi-select-tree.metadata';\nexport * from './lib/components/material-radio-group/material-radio-group.metadata';\nexport * from './lib/components/material-searchable-select/material-searchable-select.metadata';\nexport * from './lib/components/material-selection-list/material-selection-list.metadata';\nexport * from './lib/components/material-transfer-list/material-transfer-list.metadata';\nexport * from './lib/components/material-tree-select/material-tree-select.metadata';\nexport * from './lib/components/material-price-range/material-price-range.metadata';\nexport * from './lib/components/material-range-slider/material-range-slider.metadata';\nexport * from './lib/components/month-input/month-input.metadata';\nexport * from './lib/components/password-input/password-input.metadata';\nexport * from './lib/components/phone-input/phone-input.metadata';\nexport * from './lib/components/preload-status/preload-status.metadata';\nexport * from './lib/components/search-input/search-input.metadata';\nexport * from './lib/components/time-input/time-input.metadata';\nexport * from './lib/components/url-input/url-input.metadata';\nexport * from './lib/components/week-input/week-input.metadata';\nexport * from './lib/components/pdx-material-time-range/pdx-material-time-range.metadata';\nexport * from './lib/components/pdx-year-input/pdx-year-input.metadata';\nexport * from './lib/components/field-shell/field-shell.metadata';\n\n// Services\nexport * from './lib/services/action-resolver.service';\nexport * from './lib/services/date-utils.service';\nexport * from './lib/services/keyboard-shortcut.service';\nexport * from './lib/services/component-registry/component-registry.service';\nexport * from './lib/services/component-registry/component-registry.interface';\nexport * from './lib/services/component-preloader.service';\n\n// Providers\nexport {\n providePraxisDynamicFields,\n providePraxisDynamicFieldsCore,\n} from './lib/providers';\n\n// Utilities\nexport * from './lib/utils/error-state-matcher';\nexport * from './lib/utils/logger';\nexport * from './lib/utils/json-schema-mapper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i5","i1","i2","i3","i7","i6","take","i9","i8","FieldControlTypeEnum"],"mappings":"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"}