@praxisui/settings-panel 3.0.0-beta.8 → 3.0.0-beta.9

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.
@@ -3464,4 +3464,3 @@ const SETTINGS_PANEL_AI_CAPABILITIES = {
3464
3464
  */
3465
3465
 
3466
3466
  export { GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT, GlobalConfigAdminService, GlobalConfigEditorComponent, SETTINGS_PANEL_AI_CAPABILITIES, SETTINGS_PANEL_DATA, SETTINGS_PANEL_REF, SettingsPanelComponent, SettingsPanelRef, SettingsPanelService, buildGlobalConfigFormConfig, openGlobalConfigEditor, providePraxisSettingsPanelBridge };
3467
- //# sourceMappingURL=praxisui-settings-panel.mjs.map
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@praxisui/settings-panel",
3
- "version": "3.0.0-beta.8",
3
+ "version": "3.0.0-beta.9",
4
4
  "description": "Settings panel for Praxis UI libraries: open editors for configuration at runtime and persist settings.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
8
  "@angular/cdk": "^20.0.0",
9
9
  "@angular/material": "^20.0.0",
10
- "@praxisui/ai": "^3.0.0-beta.8",
11
- "@praxisui/core": "^3.0.0-beta.8",
12
- "@praxisui/dynamic-fields": "^3.0.0-beta.8"
10
+ "@praxisui/ai": "^3.0.0-beta.9",
11
+ "@praxisui/core": "^3.0.0-beta.9",
12
+ "@praxisui/dynamic-fields": "^3.0.0-beta.9"
13
13
  },
14
14
  "dependencies": {
15
15
  "tslib": "^2.3.0"
@@ -1 +0,0 @@
1
- {"version":3,"file":"praxisui-settings-panel.mjs","sources":["../../../projects/praxis-settings-panel/src/lib/i18n/global-config-editor.i18n.ts","../../../projects/praxis-settings-panel/src/lib/i18n/settings-panel.en.ts","../../../projects/praxis-settings-panel/src/lib/i18n/settings-panel.pt.ts","../../../projects/praxis-settings-panel/src/lib/i18n/settings-panel.i18n.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel.component.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel.component.html","../../../projects/praxis-settings-panel/src/lib/settings-panel.ref.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel.tokens.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel.service.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel-bridge.provider.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-admin.service.ts","../../../projects/praxis-settings-panel/src/lib/i18n/text-normalize.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-editor.schema.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-editor.tokens.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-editor.component.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/open-global-config-editor.ts","../../../projects/praxis-settings-panel/src/lib/ai/settings-panel-ai-capabilities.ts","../../../projects/praxis-settings-panel/src/praxisui-settings-panel.ts"],"sourcesContent":["export const PRAXIS_SETTINGS_PANEL_GLOBAL_CONFIG_EDITOR_PT_BR = {\n CRUD: 'CRUD',\n 'Dynamic Fields': 'Campos Dinâmicos',\n 'Cache & Persistence': 'Cache & Persistência',\n Table: 'Tabela',\n Dialog: 'Dialog',\n 'Settings saved': 'Configurações salvas',\n 'Save failed.': 'Falha ao salvar configurações.',\n 'Global settings': 'Configurações globais',\n 'Global policies for opening, back and header': 'Políticas globais de abertura, back e header',\n 'Server defaults (env vars)': 'Padrões do servidor (env vars)',\n 'Saved configuration (UI) - overrides server defaults':\n 'Configuração salva (UI) - sobrescreve os defaults do servidor',\n 'Failed to test connection.': 'Falha ao testar conexão.',\n 'Connection established successfully!': 'Conexão estabelecida com sucesso!',\n 'Unknown error': 'Erro desconhecido',\n 'Key provided': 'Chave informada',\n 'Saved key (****{{last4}})': 'Chave salva (****{{last4}})',\n 'Saved key': 'Chave salva',\n 'Test connection with the provided key': 'Testar conexão com a chave informada',\n 'Test connection': 'Testar conexão',\n 'Refresh model list': 'Atualizar lista de modelos',\n Close: 'Fechar',\n 'This provider has no model catalog.': 'Este provedor não oferece catálogo de modelos.',\n 'Enter an API key to fetch models.': 'Insira uma chave de API para buscar modelos.',\n 'Error fetching models.': 'Erro ao buscar modelos.',\n 'Error fetching models. Check your API key.': 'Erro ao buscar modelos. Verifique a chave de API.',\n 'Model list updated ({{count}} models)': 'Lista de modelos atualizada ({{count}} modelos)',\n 'Enter an API key to test.': 'Insira uma chave de API para testar.',\n 'No model details available.': 'Detalhes do modelo não disponíveis.',\n 'Model: {{model}} | Tokens (in/out): {{in}}/{{out}} | Methods: {{methods}}':\n 'Modelo: {{model}} | Tokens (in/out): {{in}}/{{out}} | Métodos: {{methods}}',\n 'Global config cleared. Using server defaults.': 'Configuração global limpa. Usando defaults do servidor.',\n 'Clear saved config and return to server defaults': 'Apaga o config salvo e volta aos defaults do servidor',\n 'Failed to clear global config.': 'Falha ao limpar a configuração global.',\n 'No key required': 'Sem chave necessária',\n 'Model & Behavior': 'Modelo & Comportamento',\n 'Choose the model after validating the key.': 'Escolha o modelo após validar a chave.',\n 'API key validated required': 'Requer chave de API validada',\n 'Configure and test your API key to unlock model selection.':\n 'Configure e teste sua chave de API para desbloquear a seleção de modelos.',\n 'Embeddings (RAG)': 'Embeddings (RAG)',\n 'Use the LLM provider and key for embeddings': 'Aplicar provedor e chave do LLM aos embeddings',\n 'Provider has no embeddings': 'Provedor sem embeddings',\n 'Configure the embeddings provider for vector search (templates and schemas).':\n 'Configure o provedor de embeddings para buscas vetoriais (templates e schemas).',\n 'Embedding dimension mismatch with database (768). Adjust to 768 or redo the migration.':\n 'Dimensão de embeddings diferente do banco (768). Ajuste para 768 ou refaça a migração.',\n 'Toolbar, appearance and advanced filter': 'Toolbar, aparência e filtro avançado',\n 'Defaults and variants (danger, info, success, question, error)':\n 'Defaults e variants (danger, info, success, question, error)',\n 'Icons by profile (shortcuts)': 'Ícones por perfil (atalhos)',\n 'Pick icon': 'Escolher ícone',\n 'Pick icon for {{key}}': 'Escolher ícone para {{key}}',\n 'Clear icon': 'Limpar ícone',\n 'Clear icon for {{key}}': 'Limpar ícone de {{key}}',\n 'The text field above remains editable. These buttons only help with selection/clear preview.':\n 'O campo de texto acima permanece editável. Estes botões apenas ajudam na seleção/limpeza com preview.',\n 'Fast multimodal models from Google.': 'Modelos rápidos e multimodais do Google.',\n 'Grok models focused on reasoning.': 'Modelos Grok focados em raciocínio.',\n 'Local mode for tests without a key.': 'Modo local para testes sem chave.',\n 'No saved key': 'Sem chave salva',\n 'Aparência: densidade': 'Aparência: densidade',\n compact: 'compact',\n comfortable: 'comfortable',\n spacious: 'spacious',\n 'Aparência: padding das células': 'Aparência: padding das células',\n 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 6px 12px':\n 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 6px 12px',\n 'Use 1 a 4 medidas CSS válidas, como 6px 12px.': 'Use 1 a 4 medidas CSS válidas, como 6px 12px.',\n 'Aparência: padding do cabeçalho': 'Aparência: padding do cabeçalho',\n 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 8px 12px':\n 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 8px 12px',\n 'Use 1 a 4 medidas CSS válidas, como 8px 12px.': 'Use 1 a 4 medidas CSS válidas, como 8px 12px.',\n 'Aparência: fonte das células': 'Aparência: fonte das células',\n 'Aceita uma medida CSS com unidade, var(...) ou calc(...). Ex.: 13px':\n 'Aceita uma medida CSS com unidade, var(...) ou calc(...). Ex.: 13px',\n 'Use uma medida CSS válida, como 13px.': 'Use uma medida CSS válida, como 13px.',\n 'Aparência: fonte do cabeçalho': 'Aparência: fonte do cabeçalho',\n 'Filtro: modo de abertura': 'Filtro: modo de abertura',\n overlay: 'overlay',\n 'Filtro: overlay (visual)': 'Filtro: overlay (visual)',\n card: 'card',\n frosted: 'frosted',\n 'Filtro: backdrop no overlay': 'Filtro: backdrop no overlay',\n 'Excluir — confirmação': 'Excluir — confirmação',\n 'Excluir (múltiplos) — confirmação': 'Excluir (múltiplos) — confirmação',\n 'Salvar — confirmação': 'Salvar — confirmação',\n 'Cancelar — confirmação': 'Cancelar — confirmação',\n 'Exportar — confirmação': 'Exportar — confirmação',\n 'Excluir — progresso': 'Excluir — progresso',\n 'Excluir (múltiplos) — progresso': 'Excluir (múltiplos) — progresso',\n 'Excluir — sucesso': 'Excluir — sucesso',\n 'Salvar — sucesso': 'Salvar — sucesso',\n 'Exportar — sucesso': 'Exportar — sucesso',\n 'Importar — sucesso': 'Importar — sucesso',\n 'Excluir — erro': 'Excluir — erro',\n 'Salvar — erro': 'Salvar — erro',\n 'Exportar — erro': 'Exportar — erro',\n 'Rede — erro': 'Rede — erro',\n 'Permissão — erro': 'Permissão — erro',\n 'Modo de abertura padrão': 'Modo de abertura padrão',\n Rota: 'Rota',\n 'Aplicado quando ação/metadado não definem modo.':\n 'Aplicado quando ação/metadado não definem modo.',\n 'Confirmar ao sair com alterações': 'Confirmar ao sair com alterações',\n 'Back: estratégia': 'Back: estratégia',\n 'Modal: largura (ex.: 900px)': 'Modal: largura (ex.: 900px)',\n 'Modal: largura máxima (ex.: 96vw)': 'Modal: largura máxima (ex.: 96vw)',\n 'Modal: backdrop': 'Modal: backdrop',\n blur: 'blur',\n dim: 'dim',\n transparent: 'transparent',\n 'Estratégia de primeira carga quando metadado não definir.':\n 'Estratégia de primeira carga quando metadado não definir.',\n 'Async Select, cascade and pagination': 'Async Select, cascata e paginação',\n 'Cascata nativa habilitada': 'Cascata nativa habilitada',\n 'Cascata: loadOnChange': 'Cascata: loadOnChange',\n respectLoadOn: 'respectLoadOn',\n immediate: 'immediate',\n manual: 'manual',\n 'Cascata: debounce (ms)': 'Cascata: debounce (ms)',\n 'Async Select: loadOn': 'Async Select: loadOn',\n open: 'open',\n init: 'init',\n none: 'none',\n 'Async Select: pageSize': 'Async Select: pageSize',\n 'Async Select: usar cursor': 'Async Select: usar cursor',\n 'LLM provider': 'Provedor LLM',\n 'Select the provider to list models and test the key.':\n 'Selecione o provedor para listar modelos e testar a chave.',\n 'API key': 'Chave de API',\n 'Enter the selected provider key to test.': 'Informe a chave do provedor selecionado para testar.',\n 'AI model': 'Modelo de IA',\n 'Temperature (Creativity)': 'Temperatura (Criatividade)',\n '0.0 (deterministic) to 1.0 (creative)': '0.0 (determinístico) a 1.0 (criativo)',\n 'Assistant: risk validation': 'Assistente: validação de risco',\n 'Standard': 'Padrão',\n 'Strict requires confirmation for medium/high risk. Standard follows the indication returned by the backend.':\n 'Estrito exige confirmação em risco médio/alto. Padrão segue a indicação retornada pelo backend.',\n 'Use same LLM for embeddings': 'Embeddings: usar mesmo LLM',\n 'Replicates the LLM provider and key for embeddings.':\n 'Replica provedor e chave do LLM para embeddings.',\n 'Embeddings provider': 'Embeddings: provedor',\n 'Provider used to generate embeddings (RAG).': 'Provedor usado para gerar embeddings (RAG).',\n 'Embeddings API key': 'Embeddings: chave de API',\n 'Embeddings provider key.': 'Chave do provedor de embeddings.',\n 'Embeddings model': 'Embeddings: modelo',\n 'Provider default': 'Padrão do provedor',\n 'OpenAI models for embeddings.': 'Modelos OpenAI para embeddings.',\n 'Embeddings: dimensions': 'Embeddings: dimensões',\n 'Embedding vector dimensions (default 768).': 'Dimensões do vetor de embedding (default 768).',\n 'Artificial Intelligence': 'Inteligência Artificial',\n 'LLM integration': 'Integração com LLM',\n 'Appearance: density': 'Aparência: densidade',\n 'Appearance: cell padding': 'Aparência: padding das células',\n 'Accepts 1 to 4 CSS measures with units, var(...) or calc(...). Example: 6px 12px':\n 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 6px 12px',\n 'Use 1 to 4 valid CSS measures, such as 6px 12px.':\n 'Use 1 a 4 medidas CSS válidas, como 6px 12px.',\n 'Appearance: header padding': 'Aparência: padding do cabeçalho',\n 'Accepts 1 to 4 CSS measures with units, var(...) or calc(...). Example: 8px 12px':\n 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 8px 12px',\n 'Use 1 to 4 valid CSS measures, such as 8px 12px.':\n 'Use 1 a 4 medidas CSS válidas, como 8px 12px.',\n 'Appearance: cell font size': 'Aparência: fonte das células',\n 'Accepts a CSS measure with units, var(...) or calc(...). Example: 13px':\n 'Aceita uma medida CSS com unidade, var(...) ou calc(...). Ex.: 13px',\n 'Use a valid CSS measure, such as 13px.': 'Use uma medida CSS válida, como 13px.',\n 'Appearance: header font size': 'Aparência: fonte do cabeçalho',\n 'Provedor LLM': 'Provedor LLM',\n 'Selecione o provedor para listar modelos e testar a chave.':\n 'Selecione o provedor para listar modelos e testar a chave.',\n 'Chave de API': 'Chave de API',\n 'Informe a chave do provedor selecionado para testar.':\n 'Informe a chave do provedor selecionado para testar.',\n 'Modelo de IA': 'Modelo de IA',\n 'Temperatura (Criatividade)': 'Temperatura (Criatividade)',\n '0.0 (determinístico) a 1.0 (criativo)': '0.0 (determinístico) a 1.0 (criativo)',\n 'Max tokens': 'Max tokens',\n 'Limite maximo de tokens na resposta.': 'Limite maximo de tokens na resposta.',\n 'Assistente: validação de risco': 'Assistente: validação de risco',\n 'Estrito (recomendado)': 'Estrito (recomendado)',\n 'Padrão': 'Padrão',\n 'Estrito exige confirmação em risco médio/alto. Padrão segue a indicação retornada pelo backend.':\n 'Estrito exige confirmação em risco médio/alto. Padrão segue a indicação retornada pelo backend.',\n 'Embeddings: usar mesmo LLM': 'Embeddings: usar mesmo LLM',\n 'Replica provedor e chave do LLM para embeddings.':\n 'Replica provedor e chave do LLM para embeddings.',\n 'Embeddings: provedor': 'Embeddings: provedor',\n 'Provedor usado para gerar embeddings (RAG).': 'Provedor usado para gerar embeddings (RAG).',\n 'Embeddings: chave de API': 'Embeddings: chave de API',\n 'Chave do provedor de embeddings.': 'Chave do provedor de embeddings.',\n 'Embeddings: modelo': 'Embeddings: modelo',\n 'Padrão do provedor': 'Padrão do provedor',\n 'Modelos OpenAI para embeddings.': 'Modelos OpenAI para embeddings.',\n 'Embeddings: dimensoes': 'Embeddings: dimensões',\n 'Dimensoes do vetor de embedding (default 768).': 'Dimensões do vetor de embedding (default 768).',\n 'GPT models for text and chat.': 'Modelos GPT para texto e chat.',\n 'Synchronized with the LLM. The fields below follow the primary credential.':\n 'Sincronizado com o LLM. Os campos abaixo acompanham a credencial principal.',\n 'Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}':\n 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}',\n 'Example JSON array: [{\"id\":\"cancel\",\"text\":\"Cancel\",\"role\":\"secondary\",\"close\":true,\"cssClass\":\"btn\"},{\"id\":\"confirm\",\"text\":\"Delete\",\"role\":\"primary\",\"close\":true,\"cssClass\":\"btn btn-danger\",\"icon\":\"delete\"}]':\n 'Ex.: [{\"id\":\"cancel\",\"text\":\"Cancelar\",\"role\":\"secondary\",\"close\":true,\"cssClass\":\"btn\"},{\"id\":\"confirm\",\"text\":\"Excluir\",\"role\":\"primary\",\"close\":true,\"cssClass\":\"btn btn-danger\",\"icon\":\"delete\"}]',\n 'Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}':\n 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}',\n 'Desabilitar cache de schema (LocalStorage)': 'Desabilitar cache de schema (LocalStorage)',\n 'Se ativo, sempre baixa o schema do servidor (ignora cache local). Útil para desenvolvimento.':\n 'Se ativo, sempre baixa o schema do servidor (ignora cache local). Útil para desenvolvimento.',\n 'Paginação habilitada': 'Paginação habilitada',\n 'Tamanho da página': 'Tamanho da página',\n 'Ordenação habilitada': 'Ordenação habilitada',\n 'Seleção habilitada': 'Seleção habilitada',\n 'Paginação: estratégia': 'Paginação: estratégia',\n 'Ordenação: estratégia': 'Ordenação: estratégia',\n 'Paginação: botões Primeiro/Último': 'Paginação: botões Primeiro/Último',\n 'Toolbar visível': 'Toolbar visível',\n 'Cache & Persistência': 'Cache & Persistence',\n Tabela: 'Table',\n Salvar: 'Save',\n Cancelar: 'Cancel',\n Redefinir: 'Reset',\n} as const;\n\nexport const PRAXIS_SETTINGS_PANEL_GLOBAL_CONFIG_EDITOR_EN_US = {\n CRUD: 'CRUD',\n 'Dynamic Fields': 'Dynamic Fields',\n 'Cache & Persistence': 'Cache & Persistence',\n Table: 'Table',\n Dialog: 'Dialog',\n 'Settings saved': 'Settings saved',\n 'Save failed.': 'Save failed.',\n 'Global settings': 'Global settings',\n 'Global policies for opening, back and header': 'Global policies for opening, back and header',\n 'Server defaults (env vars)': 'Server defaults (env vars)',\n 'Saved configuration (UI) - overrides server defaults':\n 'Saved configuration (UI) - overrides server defaults',\n 'Failed to test connection.': 'Failed to test connection.',\n 'Connection established successfully!': 'Connection established successfully!',\n 'Unknown error': 'Unknown error',\n 'Key provided': 'Key provided',\n 'Saved key (****{{last4}})': 'Saved key (****{{last4}})',\n 'Saved key': 'Saved key',\n 'Test connection with the provided key': 'Test connection with the provided key',\n 'Test connection': 'Test connection',\n 'Refresh model list': 'Refresh model list',\n Close: 'Close',\n 'This provider has no model catalog.': 'This provider has no model catalog.',\n 'Enter an API key to fetch models.': 'Enter an API key to fetch models.',\n 'Error fetching models.': 'Error fetching models.',\n 'Error fetching models. Check your API key.': 'Error fetching models. Check your API key.',\n 'Model list updated ({{count}} models)': 'Model list updated ({{count}} models)',\n 'Enter an API key to test.': 'Enter an API key to test.',\n 'No model details available.': 'No model details available.',\n 'Model: {{model}} | Tokens (in/out): {{in}}/{{out}} | Methods: {{methods}}':\n 'Model: {{model}} | Tokens (in/out): {{in}}/{{out}} | Methods: {{methods}}',\n 'Global config cleared. Using server defaults.': 'Global config cleared. Using server defaults.',\n 'Clear saved config and return to server defaults': 'Clear saved config and return to server defaults',\n 'Failed to clear global config.': 'Failed to clear global config.',\n 'No key required': 'No key required',\n 'Model & Behavior': 'Model & Behavior',\n 'Choose the model after validating the key.': 'Choose the model after validating the key.',\n 'API key validated required': 'Validated API key required',\n 'Configure and test your API key to unlock model selection.':\n 'Configure and test your API key to unlock model selection.',\n 'Embeddings (RAG)': 'Embeddings (RAG)',\n 'Use the LLM provider and key for embeddings': 'Apply the LLM provider and key to embeddings',\n 'Provider has no embeddings': 'Provider has no embeddings',\n 'Configure the embeddings provider for vector search (templates and schemas).':\n 'Configure the embeddings provider for vector search (templates and schemas).',\n 'Embedding dimension mismatch with database (768). Adjust to 768 or redo the migration.':\n 'Embedding dimension mismatch with the database (768). Adjust to 768 or redo the migration.',\n 'Toolbar, appearance and advanced filter': 'Toolbar, appearance and advanced filter',\n 'Defaults and variants (danger, info, success, question, error)':\n 'Defaults and variants (danger, info, success, question, error)',\n 'Icons by profile (shortcuts)': 'Icons by profile (shortcuts)',\n 'Pick icon': 'Pick icon',\n 'Pick icon for {{key}}': 'Pick icon for {{key}}',\n 'Clear icon': 'Clear icon',\n 'Clear icon for {{key}}': 'Clear icon for {{key}}',\n 'The text field above remains editable. These buttons only help with selection/clear preview.':\n 'The text field above remains editable. These buttons only help with selection/clear preview.',\n 'No saved key': 'No saved key',\n 'Aparência: densidade': 'Appearance: density',\n compact: 'compact',\n comfortable: 'comfortable',\n spacious: 'spacious',\n 'Aparência: padding das células': 'Appearance: cell padding',\n 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 6px 12px':\n 'Accepts 1 to 4 CSS measures with units, var(...) or calc(...). Example: 6px 12px',\n 'Use 1 a 4 medidas CSS válidas, como 6px 12px.': 'Use 1 to 4 valid CSS measures, such as 6px 12px.',\n 'Aparência: padding do cabeçalho': 'Appearance: header padding',\n 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 8px 12px':\n 'Accepts 1 to 4 CSS measures with units, var(...) or calc(...). Example: 8px 12px',\n 'Use 1 a 4 medidas CSS válidas, como 8px 12px.': 'Use 1 to 4 valid CSS measures, such as 8px 12px.',\n 'Aparência: fonte das células': 'Appearance: cell font size',\n 'Aceita uma medida CSS com unidade, var(...) ou calc(...). Ex.: 13px':\n 'Accepts a CSS measure with units, var(...) or calc(...). Example: 13px',\n 'Use uma medida CSS válida, como 13px.': 'Use a valid CSS measure, such as 13px.',\n 'Aparência: fonte do cabeçalho': 'Appearance: header font size',\n 'Filtro: modo de abertura': 'Filter: open mode',\n overlay: 'overlay',\n 'Filtro: overlay (visual)': 'Filter: overlay (visual)',\n card: 'card',\n frosted: 'frosted',\n 'Filtro: backdrop no overlay': 'Filter: overlay backdrop',\n 'Excluir — confirmação': 'Delete - confirmation',\n 'Excluir (múltiplos) — confirmação': 'Delete (multiple) - confirmation',\n 'Salvar — confirmação': 'Save - confirmation',\n 'Cancelar — confirmação': 'Cancel - confirmation',\n 'Exportar — confirmação': 'Export - confirmation',\n 'Excluir — progresso': 'Delete - progress',\n 'Excluir (múltiplos) — progresso': 'Delete (multiple) - progress',\n 'Excluir — sucesso': 'Delete - success',\n 'Salvar — sucesso': 'Save - success',\n 'Exportar — sucesso': 'Export - success',\n 'Importar — sucesso': 'Import - success',\n 'Excluir — erro': 'Delete - error',\n 'Salvar — erro': 'Save - error',\n 'Exportar — erro': 'Export - error',\n 'Rede — erro': 'Network - error',\n 'Permissão — erro': 'Permission - error',\n 'Modo de abertura padrão': 'Default opening mode',\n Rota: 'Route',\n 'Aplicado quando ação/metadado não definem modo.': 'Applied when the action/metadata does not define a mode.',\n 'Confirmar ao sair com alterações': 'Confirm when leaving with unsaved changes',\n 'Back: estratégia': 'Back: strategy',\n 'Modal: largura (ex.: 900px)': 'Modal: width (e.g. 900px)',\n 'Modal: largura máxima (ex.: 96vw)': 'Modal: max width (e.g. 96vw)',\n 'Modal: backdrop': 'Modal: backdrop',\n blur: 'blur',\n dim: 'dim',\n transparent: 'transparent',\n 'Estratégia de primeira carga quando metadado não definir.': 'First-load strategy when metadata does not define one.',\n 'Async Select, cascade and pagination': 'Async Select, cascade and pagination',\n 'Cascata nativa habilitada': 'Native cascade enabled',\n 'Cascata: loadOnChange': 'Cascade: loadOnChange',\n respectLoadOn: 'respectLoadOn',\n immediate: 'immediate',\n manual: 'manual',\n 'Cascata: debounce (ms)': 'Cascade: debounce (ms)',\n 'Async Select: loadOn': 'Async Select: loadOn',\n open: 'open',\n init: 'init',\n none: 'none',\n 'Async Select: pageSize': 'Async Select: pageSize',\n 'Async Select: usar cursor': 'Async Select: use cursor',\n 'LLM provider': 'LLM provider',\n 'Select the provider to list models and test the key.': 'Select the provider to list models and test the key.',\n 'API key': 'API key',\n 'Enter the selected provider key to test.': 'Enter the selected provider key to test.',\n 'AI model': 'AI model',\n 'Temperature (Creativity)': 'Temperature (Creativity)',\n '0.0 (deterministic) to 1.0 (creative)': '0.0 (deterministic) to 1.0 (creative)',\n 'Assistant: risk validation': 'Assistant: risk validation',\n 'Standard': 'Standard',\n 'Strict requires confirmation for medium/high risk. Standard follows the indication returned by the backend.':\n 'Strict requires confirmation for medium/high risk. Standard follows the indication returned by the backend.',\n 'Use same LLM for embeddings': 'Use same LLM for embeddings',\n 'Replicates the LLM provider and key for embeddings.':\n 'Replicates the LLM provider and key for embeddings.',\n 'Embeddings provider': 'Embeddings provider',\n 'Provider used to generate embeddings (RAG).': 'Provider used to generate embeddings (RAG).',\n 'Embeddings API key': 'Embeddings API key',\n 'Embeddings provider key.': 'Embeddings provider key.',\n 'Embeddings model': 'Embeddings model',\n 'Provider default': 'Provider default',\n 'OpenAI models for embeddings.': 'OpenAI models for embeddings.',\n 'Embeddings: dimensions': 'Embeddings: dimensions',\n 'Embedding vector dimensions (default 768).': 'Embedding vector dimensions (default 768).',\n 'Artificial Intelligence': 'Artificial Intelligence',\n 'LLM integration': 'LLM integration',\n 'Appearance: density': 'Appearance: density',\n 'Appearance: cell padding': 'Appearance: cell padding',\n 'Accepts 1 to 4 CSS measures with units, var(...) or calc(...). Example: 6px 12px':\n 'Accepts 1 to 4 CSS measures with units, var(...) or calc(...). Example: 6px 12px',\n 'Use 1 to 4 valid CSS measures, such as 6px 12px.':\n 'Use 1 to 4 valid CSS measures, such as 6px 12px.',\n 'Appearance: header padding': 'Appearance: header padding',\n 'Accepts 1 to 4 CSS measures with units, var(...) or calc(...). Example: 8px 12px':\n 'Accepts 1 to 4 CSS measures with units, var(...) or calc(...). Example: 8px 12px',\n 'Use 1 to 4 valid CSS measures, such as 8px 12px.':\n 'Use 1 to 4 valid CSS measures, such as 8px 12px.',\n 'Appearance: cell font size': 'Appearance: cell font size',\n 'Accepts a CSS measure with units, var(...) or calc(...). Example: 13px':\n 'Accepts a CSS measure with units, var(...) or calc(...). Example: 13px',\n 'Use a valid CSS measure, such as 13px.': 'Use a valid CSS measure, such as 13px.',\n 'Appearance: header font size': 'Appearance: header font size',\n 'Provedor LLM': 'LLM provider',\n 'Selecione o provedor para listar modelos e testar a chave.': 'Select the provider to list models and test the key.',\n 'Chave de API': 'API key',\n 'Informe a chave do provedor selecionado para testar.': 'Enter the selected provider key to test.',\n 'Modelo de IA': 'AI model',\n 'Temperatura (Criatividade)': 'Temperature (Creativity)',\n '0.0 (determinístico) a 1.0 (criativo)': '0.0 (deterministic) to 1.0 (creative)',\n 'Max tokens': 'Max tokens',\n 'Limite maximo de tokens na resposta.': 'Maximum token limit for the response.',\n 'Assistente: validação de risco': 'Assistant: risk validation',\n 'Estrito (recomendado)': 'Strict (recommended)',\n 'Padrão': 'Standard',\n 'Estrito exige confirmação em risco médio/alto. Padrão segue a indicação retornada pelo backend.':\n 'Strict requires confirmation for medium/high risk. Standard follows the indication returned by the backend.',\n 'Embeddings: usar mesmo LLM': 'Embeddings: use same LLM',\n 'Replica provedor e chave do LLM para embeddings.': 'Replicates the LLM provider and key for embeddings.',\n 'Embeddings: provedor': 'Embeddings: provider',\n 'Provedor usado para gerar embeddings (RAG).': 'Provider used to generate embeddings (RAG).',\n 'Embeddings: chave de API': 'Embeddings: API key',\n 'Chave do provedor de embeddings.': 'Embeddings provider key.',\n 'Embeddings: modelo': 'Embeddings: model',\n 'Padrão do provedor': 'Provider default',\n 'Modelos OpenAI para embeddings.': 'OpenAI models for embeddings.',\n 'Embeddings: dimensoes': 'Embeddings: dimensions',\n 'Dimensoes do vetor de embedding (default 768).': 'Embedding vector dimensions (default 768).',\n 'GPT models for text and chat.': 'GPT models for text and chat.',\n 'Synchronized with the LLM. The fields below follow the primary credential.':\n 'Synchronized with the LLM. The fields below follow the primary credential.',\n 'Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}':\n 'Example: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}',\n 'Example JSON array: [{\"id\":\"cancel\",\"text\":\"Cancel\",\"role\":\"secondary\",\"close\":true,\"cssClass\":\"btn\"},{\"id\":\"confirm\",\"text\":\"Delete\",\"role\":\"primary\",\"close\":true,\"cssClass\":\"btn btn-danger\",\"icon\":\"delete\"}]':\n 'Example: [{\"id\":\"cancel\",\"text\":\"Cancel\",\"role\":\"secondary\",\"close\":true,\"cssClass\":\"btn\"},{\"id\":\"confirm\",\"text\":\"Delete\",\"role\":\"primary\",\"close\":true,\"cssClass\":\"btn btn-danger\",\"icon\":\"delete\"}]',\n 'Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}':\n 'Example: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}',\n 'Desabilitar cache de schema (LocalStorage)': 'Disable schema cache (LocalStorage)',\n 'Se ativo, sempre baixa o schema do servidor (ignora cache local). Útil para desenvolvimento.':\n 'If enabled, always downloads the schema from the server (ignores local cache). Useful for development.',\n 'Paginação habilitada': 'Pagination enabled',\n 'Tamanho da página': 'Page size',\n 'Ordenação habilitada': 'Sorting enabled',\n 'Seleção habilitada': 'Selection enabled',\n 'Paginação: estratégia': 'Pagination: strategy',\n 'Ordenação: estratégia': 'Sorting: strategy',\n 'Paginação: botões Primeiro/Último': 'Pagination: First/Last buttons',\n 'Toolbar visível': 'Toolbar visible',\n 'Cache & Persistência': 'Cache & Persistence',\n Tabela: 'Table',\n Salvar: 'Save',\n Cancelar: 'Cancel',\n Redefinir: 'Reset',\n} as const;\n","export const PRAXIS_SETTINGS_PANEL_EN_US = {\n 'Operation in progress...': 'Operation in progress...',\n 'The form contains errors that need to be fixed.':\n 'The form contains errors that need to be fixed.',\n 'No changes to apply or save.': 'No changes to apply or save.',\n 'Unsaved changes': 'Unsaved changes',\n 'Saved at {{time}}': 'Saved at {{time}}',\n 'No changes': 'No changes',\n 'Reset Changes': 'Reset Changes',\n 'Are you sure you want to reset all changes?':\n 'Are you sure you want to reset all changes?',\n Reset: 'Reset',\n Cancel: 'Cancel',\n 'Discard Changes': 'Discard Changes',\n 'You have unsaved changes. Are you sure you want to discard them?':\n 'You have unsaved changes. Are you sure you want to discard them?',\n Discard: 'Discard',\n 'Continue Editing': 'Continue Editing',\n 'Collapse panel': 'Collapse panel',\n 'Expand panel': 'Expand panel',\n Close: 'Close',\n Apply: 'Apply',\n 'Save & Close': 'Save & Close',\n} as const;\n","export const PRAXIS_SETTINGS_PANEL_PT_BR = {\n 'Operation in progress...': 'Operação em andamento...',\n 'The form contains errors that need to be fixed.':\n 'O formulário contém erros que precisam ser corrigidos.',\n 'No changes to apply or save.': 'Nenhuma alteração para aplicar ou salvar.',\n 'Unsaved changes': 'Alterações não salvas',\n 'Saved at {{time}}': 'Salvo às {{time}}',\n 'No changes': 'Sem alterações',\n 'Reset Changes': 'Redefinir Alterações',\n 'Are you sure you want to reset all changes?':\n 'Tem certeza de que deseja redefinir todas as alterações?',\n Reset: 'Redefinir',\n Cancel: 'Cancelar',\n 'Discard Changes': 'Descartar Alterações',\n 'You have unsaved changes. Are you sure you want to discard them?':\n 'Você tem alterações não salvas. Tem certeza de que deseja descartá-las?',\n Discard: 'Descartar',\n 'Continue Editing': 'Continuar Editando',\n 'Collapse panel': 'Reduzir painel',\n 'Expand panel': 'Expandir painel',\n Close: 'Fechar',\n Apply: 'Aplicar',\n 'Save & Close': 'Salvar & Fechar',\n} as const;\n","import { providePraxisI18n } from '@praxisui/core';\nimport {\n PRAXIS_SETTINGS_PANEL_GLOBAL_CONFIG_EDITOR_EN_US,\n PRAXIS_SETTINGS_PANEL_GLOBAL_CONFIG_EDITOR_PT_BR,\n} from './global-config-editor.i18n';\nimport { PRAXIS_SETTINGS_PANEL_EN_US } from './settings-panel.en';\nimport { PRAXIS_SETTINGS_PANEL_PT_BR } from './settings-panel.pt';\n\nexport const PRAXIS_SETTINGS_PANEL_I18N_NAMESPACE = 'praxis-settings-panel';\n\nexport const PRAXIS_SETTINGS_PANEL_DEFAULT_TITLE = 'Global settings';\n\nexport function providePraxisSettingsPanelI18n() {\n return providePraxisI18n({\n namespaces: {\n [PRAXIS_SETTINGS_PANEL_I18N_NAMESPACE]: {\n 'pt-BR': {\n ...PRAXIS_SETTINGS_PANEL_PT_BR,\n ...PRAXIS_SETTINGS_PANEL_GLOBAL_CONFIG_EDITOR_PT_BR,\n },\n 'en-US': {\n ...PRAXIS_SETTINGS_PANEL_EN_US,\n ...PRAXIS_SETTINGS_PANEL_GLOBAL_CONFIG_EDITOR_EN_US,\n },\n },\n },\n });\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n DestroyRef,\n HostListener,\n Injector,\n Type,\n ViewChild,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, switchMap } from 'rxjs/operators';\nimport { firstValueFrom, isObservable, of } from 'rxjs';\nimport { PraxisI18nService, PraxisIconDirective } from '@praxisui/core';\nimport {\n ConfirmDialogComponent,\n ConfirmDialogData,\n} from '@praxisui/dynamic-fields';\nimport {\n PRAXIS_SETTINGS_PANEL_I18N_NAMESPACE,\n providePraxisSettingsPanelI18n,\n} from './i18n/settings-panel.i18n';\nimport { SettingsPanelRef } from './settings-panel.ref';\n\n@Component({\n selector: 'praxis-settings-panel',\n standalone: true,\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n PraxisIconDirective,\n MatTooltipModule,\n CdkTrapFocus,\n MatProgressSpinnerModule,\n MatDialogModule,\n ],\n templateUrl: './settings-panel.component.html',\n styleUrls: ['./settings-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [providePraxisSettingsPanelI18n()],\n})\nexport class SettingsPanelComponent {\n title = '';\n titleIcon?: string;\n expanded = false;\n ref!: SettingsPanelRef;\n contentRef?: ComponentRef<any>;\n private static nextId = 0;\n titleId = `praxis-settings-panel-title-${SettingsPanelComponent.nextId++}`;\n\n isDirty = false;\n isValid = true;\n isBusy = false;\n private lastSavedAt: number | null = null;\n private readonly destroyRef = inject(DestroyRef);\n private readonly i18n = inject(PraxisI18nService);\n\n @ViewChild('contentHost', { read: ViewContainerRef, static: true })\n private contentHost!: ViewContainerRef;\n\n constructor(private cdr: ChangeDetectorRef, private dialog: MatDialog) {}\n\n get canApply(): boolean {\n return this.isDirty && this.isValid && !this.isBusy;\n }\n\n get canSave(): boolean {\n return this.isDirty && this.isValid && !this.isBusy;\n }\n\n get disabledReason(): string {\n if (this.isBusy) {\n return this.tx('Operation in progress...');\n }\n if (!this.isValid) {\n return this.tx('The form contains errors that need to be fixed.');\n }\n if (!this.isDirty) {\n return this.tx('No changes to apply or save.');\n }\n return '';\n }\n\n get statusTone(): 'busy' | 'dirty' | 'saved' | 'idle' {\n if (this.isBusy) return 'busy';\n if (this.isDirty) return 'dirty';\n if (this.lastSavedAt) return 'saved';\n return 'idle';\n }\n\n get statusMessage(): string {\n if (this.statusTone === 'busy') {\n return this.tx('Operation in progress...');\n }\n if (this.statusTone === 'dirty') {\n return this.tx('Unsaved changes');\n }\n if (this.statusTone === 'saved' && this.lastSavedAt) {\n return this.tx('Saved at {{time}}', {\n time: this.formatClock(this.lastSavedAt),\n });\n }\n return this.tx('No changes');\n }\n\n tx(\n text: string,\n params?: Record<string, string | number | boolean | null | undefined>,\n ): string {\n return this.i18n.t(\n text,\n params,\n text,\n PRAXIS_SETTINGS_PANEL_I18N_NAMESPACE,\n );\n }\n\n attachContent(\n component: Type<any>,\n injector: Injector,\n ref: SettingsPanelRef,\n inputs?: Record<string, unknown>,\n ): void {\n this.ref = ref;\n this.contentRef = this.contentHost.createComponent(component, {\n injector,\n });\n this.applyInputs(this.contentRef, inputs);\n\n const instance: any = this.contentRef.instance;\n\n if (instance.isDirty$) {\n instance.isDirty$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((dirty: boolean) => {\n this.isDirty = dirty;\n this.cdr.markForCheck();\n });\n }\n\n if (instance.isValid$) {\n instance.isValid$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((valid: boolean) => {\n this.isValid = valid;\n this.cdr.markForCheck();\n });\n }\n\n if (instance.isBusy$) {\n instance.isBusy$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((busy: boolean) => {\n this.isBusy = busy;\n this.cdr.markForCheck();\n });\n }\n\n try {\n const selected$ = instance?.selected;\n if (selected$ && typeof selected$.subscribe === 'function') {\n const obs =\n typeof selected$.pipe === 'function'\n ? selected$.pipe(takeUntilDestroyed(this.destroyRef))\n : selected$;\n obs.subscribe((value: any) => {\n this.ref.apply(value);\n });\n }\n } catch {}\n }\n\n private applyInputs(\n contentRef: ComponentRef<any>,\n inputs?: Record<string, unknown>,\n ): void {\n if (!inputs) {\n return;\n }\n\n const supportedInputs = this.resolveSupportedInputs(contentRef);\n for (const [key, value] of Object.entries(inputs)) {\n if (supportedInputs && !supportedInputs.has(key)) {\n continue;\n }\n\n try {\n if (typeof contentRef.setInput === 'function') {\n contentRef.setInput(key, value);\n } else {\n (contentRef.instance as Record<string, unknown>)[key] = value;\n }\n } catch {}\n }\n\n contentRef.changeDetectorRef.detectChanges();\n }\n\n private resolveSupportedInputs(contentRef: ComponentRef<any>): Set<string> | null {\n const componentDef = (contentRef.componentType as any)?.ɵcmp;\n const declaredInputs = componentDef?.inputs;\n if (!declaredInputs || typeof declaredInputs !== 'object') {\n return null;\n }\n\n return new Set(Object.keys(declaredInputs));\n }\n\n onReset(): void {\n const dialogData: ConfirmDialogData = {\n title: this.tx('Reset Changes'),\n message: this.tx('Are you sure you want to reset all changes?'),\n confirmText: this.tx('Reset'),\n cancelText: this.tx('Cancel'),\n type: 'warning',\n icon: 'restart_alt',\n };\n\n this.dialog\n .open(ConfirmDialogComponent, { data: dialogData, autoFocus: false })\n .afterClosed()\n .pipe(filter((confirmed) => confirmed))\n .subscribe(() => {\n this.contentRef?.instance?.reset?.();\n this.lastSavedAt = null;\n this.ref.reset();\n });\n }\n\n onApply(): void {\n if (!this.canApply) return;\n const value = this.contentRef?.instance?.getSettingsValue?.();\n this.ref.apply(value);\n }\n\n onSave(): void {\n if (!this.canSave) return;\n const instance: any = this.contentRef?.instance;\n const result = instance?.onSave?.();\n\n if (isObservable(result)) {\n firstValueFrom(result)\n .then((value) => this.emitSave(value))\n .catch(() => {});\n } else if (result instanceof Promise) {\n result\n .then((value: unknown) => this.emitSave(value))\n .catch(() => {});\n } else if (result !== undefined) {\n this.emitSave(result);\n } else {\n const value = instance?.getSettingsValue?.();\n this.emitSave(value);\n }\n }\n\n private emitSave(value: unknown): void {\n if (value === undefined) return;\n this.lastSavedAt = Date.now();\n this.isDirty = false;\n this.ref.save(value);\n this.cdr.markForCheck();\n }\n\n private formatClock(timestamp: number): string {\n const options: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n };\n\n try {\n return new Intl.DateTimeFormat(this.i18n.getLocale(), options).format(\n timestamp,\n );\n } catch {\n try {\n return new Intl.DateTimeFormat(\n this.i18n.getFallbackLocale(),\n options,\n ).format(timestamp);\n } catch {\n return '';\n }\n }\n }\n\n toggleExpand(): void {\n this.expanded = !this.expanded;\n this.cdr.markForCheck();\n }\n\n onCancel(): void {\n of(this.isDirty)\n .pipe(\n switchMap((dirty) => {\n if (!dirty) {\n return of(true);\n }\n const dialogData: ConfirmDialogData = {\n title: this.tx('Discard Changes'),\n message: this.tx(\n 'You have unsaved changes. Are you sure you want to discard them?',\n ),\n confirmText: this.tx('Discard'),\n cancelText: this.tx('Continue Editing'),\n type: 'warning',\n icon: 'warning',\n };\n return this.dialog\n .open(ConfirmDialogComponent, { data: dialogData, autoFocus: false })\n .afterClosed();\n }),\n filter((confirmed) => confirmed),\n )\n .subscribe(() => {\n this.ref.close('cancel');\n });\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.onCancel();\n } else if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n this.onSave();\n } else if (\n (event.key === 's' || event.key === 'S') &&\n (event.ctrlKey || event.metaKey)\n ) {\n event.preventDefault();\n this.onSave();\n }\n }\n}\n","<div\n class=\"settings-panel\"\n data-testid=\"settings-panel-root\"\n [class.expanded]=\"expanded\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"titleId\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n>\n <header class=\"settings-panel-header\">\n <h2 class=\"settings-panel-title\" [id]=\"titleId\">\n <mat-icon *ngIf=\"titleIcon\" class=\"title-icon\" [praxisIcon]=\"titleIcon\"></mat-icon>\n <span>{{ title }}</span>\n </h2>\n <span class=\"spacer\"></span>\n <button\n mat-icon-button\n type=\"button\"\n data-testid=\"settings-panel-toggle-expand\"\n [attr.aria-label]=\"expanded ? tx('Collapse panel') : tx('Expand panel')\"\n [attr.aria-expanded]=\"expanded\"\n [matTooltip]=\"expanded ? tx('Collapse panel') : tx('Expand panel')\"\n (click)=\"toggleExpand()\"\n >\n <mat-icon [praxisIcon]=\"expanded ? 'close_fullscreen' : 'open_in_full'\"></mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n data-testid=\"settings-panel-close-icon\"\n [attr.aria-label]=\"tx('Close')\"\n [matTooltip]=\"tx('Close')\"\n (click)=\"onCancel()\"\n >\n <mat-icon [praxisIcon]=\"'close'\"></mat-icon>\n </button>\n </header>\n <div\n class=\"settings-panel-status\"\n [attr.data-status]=\"statusTone\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <mat-icon\n aria-hidden=\"true\"\n [praxisIcon]=\"\n statusTone === 'dirty'\n ? 'warning'\n : statusTone === 'saved'\n ? 'check_circle'\n : statusTone === 'busy'\n ? 'autorenew'\n : 'info'\n \"\n ></mat-icon>\n <span>{{ statusMessage }}</span>\n </div>\n <div class=\"settings-panel-body\">\n <ng-template #contentHost></ng-template>\n </div>\n <footer class=\"settings-panel-footer\">\n <button mat-button type=\"button\" data-testid=\"settings-panel-reset\" (click)=\"onReset()\" [disabled]=\"isBusy\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'restart_alt'\"></mat-icon>\n <span>{{ tx('Reset') }}</span>\n </button>\n <span class=\"spacer\"></span>\n <button\n mat-button\n type=\"button\"\n data-testid=\"settings-panel-cancel\"\n (click)=\"onCancel()\"\n [disabled]=\"isBusy\"\n >\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'close'\"></mat-icon>\n <span>{{ tx('Cancel') }}</span>\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n data-testid=\"settings-panel-apply\"\n (click)=\"onApply()\"\n [disabled]=\"!canApply\"\n [matTooltip]=\"disabledReason\"\n [matTooltipDisabled]=\"canApply\"\n [attr.aria-busy]=\"isBusy\"\n >\n <mat-progress-spinner\n *ngIf=\"isBusy\"\n mode=\"indeterminate\"\n diameter=\"20\"\n ></mat-progress-spinner>\n <ng-container *ngIf=\"!isBusy\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'done'\"></mat-icon>\n <span>{{ tx('Apply') }}</span>\n </ng-container>\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n data-testid=\"settings-panel-save\"\n (click)=\"onSave()\"\n [disabled]=\"!canSave\"\n [matTooltip]=\"disabledReason\"\n [matTooltipDisabled]=\"canSave\"\n [attr.aria-busy]=\"isBusy\"\n >\n <mat-progress-spinner\n *ngIf=\"isBusy\"\n mode=\"indeterminate\"\n diameter=\"20\"\n ></mat-progress-spinner>\n <ng-container *ngIf=\"!isBusy\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'save'\"></mat-icon>\n <span>{{ tx('Save & Close') }}</span>\n </ng-container>\n </button>\n </footer>\n</div>\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { Subject } from 'rxjs';\nimport { SettingsPanelCloseReason } from './settings-panel.types';\n\nexport class SettingsPanelRef {\n private appliedSubject = new Subject<any>();\n private savedSubject = new Subject<any>();\n private resetSubject = new Subject<void>();\n private closedSubject = new Subject<SettingsPanelCloseReason>();\n\n applied$ = this.appliedSubject.asObservable();\n saved$ = this.savedSubject.asObservable();\n reset$ = this.resetSubject.asObservable();\n closed$ = this.closedSubject.asObservable();\n\n constructor(private overlayRef: OverlayRef) {}\n\n apply(value: any): void {\n this.appliedSubject.next(value);\n }\n\n /**\n * Emits the provided value on {@link saved$} and closes the panel.\n *\n * This should be called with the configuration object returned by the\n * editor's `onSave()` method so that consumers can persist the new settings.\n */\n save(value: any): void {\n this.savedSubject.next(value);\n this.close('save');\n }\n\n reset(): void {\n this.resetSubject.next();\n }\n\n updateSize(width: string | number): void {\n this.overlayRef.updateSize({ width });\n }\n\n close(reason: SettingsPanelCloseReason = 'cancel'): void {\n if (!this.overlayRef?.hasAttached()) {\n return;\n }\n this.overlayRef.dispose();\n this.closedSubject.next(reason);\n this.complete();\n }\n\n private complete(): void {\n this.appliedSubject.complete();\n this.savedSubject.complete();\n this.resetSubject.complete();\n this.closedSubject.complete();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { SETTINGS_PANEL_DATA as CORE_SETTINGS_PANEL_DATA } from '@praxisui/core';\nimport { SettingsPanelRef } from './settings-panel.ref';\n\nexport const SETTINGS_PANEL_DATA = CORE_SETTINGS_PANEL_DATA;\nexport const SETTINGS_PANEL_REF = new InjectionToken<SettingsPanelRef>('SETTINGS_PANEL_REF');\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { SettingsPanelComponent } from './settings-panel.component';\nimport { SettingsPanelRef } from './settings-panel.ref';\nimport {\n SettingsPanelCloseReason,\n SettingsPanelConfig,\n} from './settings-panel.types';\nimport {\n SETTINGS_PANEL_DATA,\n SETTINGS_PANEL_REF,\n} from './settings-panel.tokens';\nimport { PraxisI18nService } from '@praxisui/core';\nimport {\n PRAXIS_SETTINGS_PANEL_DEFAULT_TITLE,\n PRAXIS_SETTINGS_PANEL_I18N_NAMESPACE,\n} from './i18n/settings-panel.i18n';\n\n@Injectable({ providedIn: 'root' })\nexport class SettingsPanelService {\n private currentRef?: SettingsPanelRef;\n private readonly i18n = inject(PraxisI18nService);\n\n constructor(\n private overlay: Overlay,\n private injector: Injector,\n ) { }\n\n /**\n * Opens a new settings panel. If another panel is already open it will be\n * closed before the new one is created. Future improvements may reuse the\n * same overlay when the provided id matches.\n */\n open(config: SettingsPanelConfig): SettingsPanelRef {\n if (this.currentRef) {\n this.currentRef.close('cancel');\n }\n\n const overlayConfig: OverlayConfig = {\n hasBackdrop: true,\n backdropClass: 'praxis-settings-panel-backdrop',\n panelClass: 'praxis-settings-panel-pane',\n positionStrategy: this.overlay.position().global().top('0').right('0'),\n height: '100vh',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n };\n\n const overlayRef = this.overlay.create(overlayConfig);\n const ref = new SettingsPanelRef(overlayRef);\n\n const panelPortal = new ComponentPortal(SettingsPanelComponent);\n const panelRef = overlayRef.attach(panelPortal);\n panelRef.instance.title = config.title?.trim()\n ? config.title\n : this.i18n.t(\n PRAXIS_SETTINGS_PANEL_DEFAULT_TITLE,\n undefined,\n PRAXIS_SETTINGS_PANEL_DEFAULT_TITLE,\n PRAXIS_SETTINGS_PANEL_I18N_NAMESPACE,\n );\n (panelRef.instance as any).titleIcon = (config as any).titleIcon;\n panelRef.instance.expanded = config.expanded || false;\n\n const inputs = config.content.inputs;\n try {\n const dbg = inputs && (inputs as any).page ? { hasPage: true, conns: Array.isArray((inputs as any).page.connections) ? (inputs as any).page.connections.length : undefined } : { hasPage: false };\n (console.log || console.debug)('[SettingsPanel] open()', { id: (config as any).id, title: config.title, inputs: dbg });\n } catch { }\n\n const injector = Injector.create({\n providers: [\n { provide: SETTINGS_PANEL_DATA, useValue: inputs },\n { provide: SETTINGS_PANEL_REF, useValue: ref },\n ],\n parent: this.injector,\n });\n panelRef.instance.attachContent(config.content.component, injector, ref, inputs);\n\n overlayRef.backdropClick().subscribe(() => ref.close('backdrop'));\n overlayRef.keydownEvents().subscribe((event) => {\n if (event.key === 'Escape') {\n ref.close('esc');\n }\n });\n ref.closed$.subscribe(() => {\n if (this.currentRef === ref) {\n this.currentRef = undefined;\n }\n });\n\n this.currentRef = ref;\n return ref;\n }\n\n close(reason: SettingsPanelCloseReason = 'cancel'): void {\n this.currentRef?.close(reason);\n this.currentRef = undefined;\n }\n}\n","import { Provider } from '@angular/core';\nimport { SETTINGS_PANEL_BRIDGE, SettingsPanelBridge } from '@praxisui/core';\nimport { SettingsPanelService } from './settings-panel.service';\n\nexport function providePraxisSettingsPanelBridge(): Provider {\n return {\n provide: SETTINGS_PANEL_BRIDGE,\n useFactory: (service: SettingsPanelService): SettingsPanelBridge => ({\n open: (opts) => service.open({\n id: opts.id,\n title: opts.title,\n titleIcon: (opts as any).titleIcon,\n content: {\n component: opts.content.component,\n inputs: (opts.content.inputs || undefined) as Record<string, any> | undefined,\n },\n }) as any,\n }),\n deps: [SettingsPanelService],\n };\n}\n","import { Injectable, inject } from '@angular/core';\nimport { GlobalConfigService } from '@praxisui/core';\nimport type { GlobalConfig } from '@praxisui/core';\n\n/**\n * Admin helper to load, patch and persist GlobalConfig.\n * Intended to be used by the Global Config Editor UI.\n */\n@Injectable({ providedIn: 'root' })\nexport class GlobalConfigAdminService {\n private readonly global = inject(GlobalConfigService) as GlobalConfigService;\n\n /** Returns the effective merged configuration (providers + storage). */\n getEffectiveConfig(): GlobalConfig {\n // buildConfig is internal in service; use public getters instead\n return {\n crud: this.global.getCrud(),\n dynamicFields: this.global.getDynamicFields(),\n table: this.global.getTable(),\n dialog: this.global.getDialog(),\n ai: this.global.get('ai'),\n cache: this.global.get('cache'),\n } as GlobalConfig;\n }\n\n /** Persist a partial update and notify listeners. */\n save(partial: Partial<GlobalConfig>): Promise<void> {\n return this.global.saveGlobalConfig(partial);\n }\n\n /** True when a tenant/global config exists in storage (overrides env defaults). */\n async hasStoredConfig(): Promise<boolean> {\n await this.global.ready();\n return this.global.hasStoredConfig();\n }\n\n /** Clear stored config for the active tenant and refresh the cache. */\n clearStoredConfig(): Promise<void> {\n return this.global.clearGlobalConfig();\n }\n}\n","export function normalizeMojibakeText(text: string): string {\n if (\n !text.includes('\\u00C3') &&\n !text.includes('\\u00C2') &&\n !text.includes('\\u00E2') &&\n !text.includes('\\u00AA') &&\n !text.includes('\\u00AB')\n ) {\n return text;\n }\n\n let current = text;\n for (let i = 0; i < 3; i++) {\n let next = current;\n try {\n next = decodeURIComponent(escape(current));\n } catch {\n break;\n }\n if (next === current) {\n break;\n }\n current = next;\n if (\n !current.includes('\\u00C3') &&\n !current.includes('\\u00C2') &&\n !current.includes('\\u00E2') &&\n !current.includes('\\u00AA') &&\n !current.includes('\\u00AB')\n ) {\n break;\n }\n }\n\n return current;\n}\n","import type { FormConfig } from '@praxisui/core';\nimport { FieldControlType } from '@praxisui/core';\nimport { normalizeMojibakeText } from '../i18n/text-normalize';\n\nconst TABLE_COMPACT_LENGTH_TOKEN =\n '(?:0|(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|rem|em|%|vh|vw|svh|svw|lvh|lvw|dvh|dvw|ch|ex))';\nconst TABLE_COMPACT_SPACING_PATTERN =\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN}(?:\\\\s+${TABLE_COMPACT_LENGTH_TOKEN}){0,3})$`;\nconst TABLE_COMPACT_FONT_SIZE_PATTERN =\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN})$`;\n\nfunction safeName(path: string): string {\n return path.replace(/[^a-zA-Z0-9_]/g, '_');\n}\n\n/**\n * Minimal FormConfig schema for the Global Config editor UI.\n * This can be extended incrementally as new domains/settings are added.\n */\nexport function buildGlobalConfigFormConfig(\n translate: (text: string, params?: Record<string, string | number | boolean | null | undefined>) => string = (text) => text,\n): FormConfig {\n const tx = (\n text: string,\n params?: Record<string, string | number | boolean | null | undefined>,\n ): string => translate(normalizeMojibakeText(text), params);\n const fields = [\n // CRUD\n {\n name: safeName('crud.defaults.openMode'),\n label: tx('Modo de abertura padrão'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: tx('Rota'), value: 'route' },\n { text: 'Modal', value: 'modal' },\n { text: 'Drawer', value: 'drawer' },\n ],\n hint: tx('Aplicado quando ação/metadado não definem modo.'),\n dataAttributes: { globalPath: 'crud.defaults.openMode' },\n },\n {\n name: safeName('crud.defaults.back.confirmOnDirty'),\n label: tx('Confirmar ao sair com alterações'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.back.confirmOnDirty' },\n },\n {\n name: safeName('crud.defaults.back.strategy'),\n label: tx('Back: estratégia'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'auto', value: 'auto' },\n { text: 'close', value: 'close' },\n { text: 'navigate', value: 'navigate' },\n ],\n dataAttributes: { globalPath: 'crud.defaults.back.strategy' },\n },\n {\n name: safeName('crud.defaults.header.showBack'),\n label: tx('Header: show back'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.header.showBack' },\n },\n {\n name: safeName('crud.defaults.header.variant'),\n label: tx('Header: variant'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'ghost', value: 'ghost' },\n { text: 'tonal', value: 'tonal' },\n { text: 'outlined', value: 'outlined' },\n ],\n dataAttributes: { globalPath: 'crud.defaults.header.variant' },\n },\n {\n name: safeName('crud.defaults.header.sticky'),\n label: tx('Header: sticky'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.header.sticky' },\n },\n {\n name: safeName('crud.defaults.header.divider'),\n label: tx('Header: show divider'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.header.divider' },\n },\n {\n name: safeName('crud.defaults.modal.width'),\n label: tx('Modal: width (e.g. 900px)'),\n controlType: FieldControlType.INPUT,\n dataAttributes: { globalPath: 'crud.defaults.modal.width' },\n },\n {\n name: safeName('crud.defaults.modal.maxWidth'),\n label: tx('Modal: largura máxima (ex.: 96vw)'),\n controlType: FieldControlType.INPUT,\n dataAttributes: { globalPath: 'crud.defaults.modal.maxWidth' },\n },\n {\n name: safeName('crud.defaults.modal.backdropStyle'),\n label: tx('Modal: backdrop'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'blur', value: 'blur' },\n { text: 'dim', value: 'dim' },\n { text: 'transparent', value: 'transparent' },\n ],\n dataAttributes: { globalPath: 'crud.defaults.modal.backdropStyle' },\n },\n\n // Dynamic Fields\n {\n name: safeName('dynamicFields.asyncSelect.loadOn'),\n label: tx('Async Select: loadOn'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'open', value: 'open' },\n { text: 'init', value: 'init' },\n { text: 'none', value: 'none' },\n ],\n hint: tx('Estratégia de primeira carga quando metadado não definir.'),\n dataAttributes: { globalPath: 'dynamicFields.asyncSelect.loadOn' },\n },\n {\n name: safeName('dynamicFields.cascade.enable'),\n label: tx('Native cascade enabled'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dynamicFields.cascade.enable' },\n },\n {\n name: safeName('dynamicFields.cascade.loadOnChange'),\n label: tx('Cascade: loadOnChange'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'respectLoadOn', value: 'respectLoadOn' },\n { text: 'immediate', value: 'immediate' },\n { text: 'manual', value: 'manual' },\n ],\n dataAttributes: { globalPath: 'dynamicFields.cascade.loadOnChange' },\n },\n {\n name: safeName('dynamicFields.cascade.debounceMs'),\n label: tx('Cascade: debounce (ms)'),\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'dynamicFields.cascade.debounceMs' },\n },\n\n // Dynamic Fields async-select extra\n {\n name: safeName('dynamicFields.asyncSelect.pageSize'),\n label: tx('Async Select: pageSize'),\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'dynamicFields.asyncSelect.pageSize' },\n },\n {\n name: safeName('dynamicFields.asyncSelect.useCursor'),\n label: tx('Async Select: use cursor'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dynamicFields.asyncSelect.useCursor' },\n },\n\n // AI\n {\n name: safeName('ai.provider'),\n label: tx('LLM provider'),\n controlType: FieldControlType.SELECT,\n selectOptions: [],\n hint: tx('Select the provider to list models and test the key.'),\n dataAttributes: { globalPath: 'ai.provider' },\n },\n {\n name: safeName('ai.apiKey'),\n label: tx('API key'),\n controlType: FieldControlType.INPUT,\n hint: tx('Enter the selected provider key to test.'),\n dataAttributes: { globalPath: 'ai.apiKey' },\n },\n {\n name: safeName('ai.model'),\n label: tx('AI model'),\n controlType: FieldControlType.SEARCHABLE_SELECT,\n selectOptions: [],\n resourcePath: '',\n dataAttributes: { globalPath: 'ai.model' },\n },\n {\n name: safeName('ai.temperature'),\n label: tx('Temperature (Creativity)'),\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n hint: tx('0.0 (deterministic) to 1.0 (creative)'),\n dataAttributes: { globalPath: 'ai.temperature' },\n },\n {\n name: safeName('ai.maxTokens'),\n label: tx('Max tokens'),\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n hint: tx('Maximum token limit for the response.'),\n dataAttributes: { globalPath: 'ai.maxTokens' },\n },\n {\n name: safeName('ai.riskPolicy'),\n label: tx('Assistant: risk validation'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'Strict (recommended)', value: 'strict' },\n { text: tx('Standard'), value: 'standard' },\n ],\n hint: tx('Strict requires confirmation for medium/high risk. Standard follows the indication returned by the backend.'),\n dataAttributes: { globalPath: 'ai.riskPolicy' },\n },\n {\n name: safeName('ai.embedding.useSameAsLlm'),\n label: tx('Use same LLM for embeddings'),\n controlType: FieldControlType.TOGGLE,\n hint: tx('Replicates the LLM provider and key for embeddings.'),\n dataAttributes: { globalPath: 'ai.embedding.useSameAsLlm' },\n },\n {\n name: safeName('ai.embedding.provider'),\n label: tx('Embeddings provider'),\n controlType: FieldControlType.SELECT,\n selectOptions: [],\n hint: tx('Provider used to generate embeddings (RAG).'),\n dataAttributes: { globalPath: 'ai.embedding.provider' },\n },\n {\n name: safeName('ai.embedding.apiKey'),\n label: tx('Embeddings API key'),\n controlType: FieldControlType.INPUT,\n hint: tx('Embeddings provider key.'),\n dataAttributes: { globalPath: 'ai.embedding.apiKey' },\n },\n {\n name: safeName('ai.embedding.model'),\n label: tx('Embeddings model'),\n controlType: FieldControlType.SEARCHABLE_SELECT,\n selectOptions: [\n { text: 'text-embedding-3-large', value: 'text-embedding-3-large' },\n { text: 'text-embedding-3-small', value: 'text-embedding-3-small' },\n { text: 'text-embedding-ada-002 (legacy)', value: 'text-embedding-ada-002' },\n ],\n emptyOptionText: tx('Provider default'),\n hint: tx('OpenAI models for embeddings.'),\n dataAttributes: { globalPath: 'ai.embedding.model' },\n },\n {\n name: safeName('ai.embedding.dimensions'),\n label: tx('Embeddings: dimensions'),\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n hint: tx('Embedding vector dimensions (default 768).'),\n dataAttributes: { globalPath: 'ai.embedding.dimensions' },\n },\n\n // Cache // Cache\n {\n name: safeName('cache.disableSchemaCache'),\n label: tx('Desabilitar cache de schema (LocalStorage)'),\n controlType: FieldControlType.TOGGLE,\n hint: tx('Se ativo, sempre baixa o schema do servidor (ignora cache local). Útil para desenvolvimento.'),\n dataAttributes: { globalPath: 'cache.disableSchemaCache' },\n },\n\n // Table\n {\n name: safeName('table.behavior.pagination.enabled'),\n label: tx('Paginação habilitada'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'table.behavior.pagination.enabled' },\n },\n {\n name: safeName('table.behavior.pagination.pageSize'),\n label: tx('Tamanho da página'),\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'table.behavior.pagination.pageSize' },\n },\n {\n name: safeName('table.behavior.filtering.debounceTime'),\n label: tx('Filter debounce (ms)'),\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'table.behavior.filtering.debounceTime' },\n },\n {\n name: safeName('table.behavior.sorting.enabled'),\n label: tx('Ordenação habilitada'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'table.behavior.sorting.enabled' },\n },\n {\n name: safeName('table.behavior.selection.enabled'),\n label: tx('Seleção habilitada'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'table.behavior.selection.enabled' },\n },\n {\n name: safeName('table.behavior.pagination.strategy'),\n label: tx('Paginação: estratégia'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'client', value: 'client' },\n { text: 'server', value: 'server' },\n ],\n dataAttributes: { globalPath: 'table.behavior.pagination.strategy' },\n },\n {\n name: safeName('table.behavior.sorting.strategy'),\n label: tx('Ordenação: estratégia'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'client', value: 'client' },\n { text: 'server', value: 'server' },\n ],\n dataAttributes: { globalPath: 'table.behavior.sorting.strategy' },\n },\n {\n name: safeName('table.behavior.pagination.showFirstLastButtons'),\n label: tx('Paginação: botões Primeiro/Último'),\n controlType: FieldControlType.CHECKBOX,\n dataAttributes: { globalPath: 'table.behavior.pagination.showFirstLastButtons' },\n },\n {\n name: safeName('table.toolbar.visible'),\n label: tx('Toolbar visível'),\n controlType: FieldControlType.CHECKBOX,\n dataAttributes: { globalPath: 'table.toolbar.visible' },\n },\n {\n name: safeName('table.appearance.density'),\n label: tx('Appearance: density'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: tx('compact'), value: 'compact' },\n { text: tx('comfortable'), value: 'comfortable' },\n { text: tx('spacious'), value: 'spacious' },\n ],\n dataAttributes: { globalPath: 'table.appearance.density' },\n },\n {\n name: safeName('table.appearance.spacing.cellPadding'),\n label: tx('Appearance: cell padding'),\n controlType: FieldControlType.INPUT,\n hint: tx('Accepts 1 to 4 CSS measures with units, var(...) or calc(...). Example: 6px 12px'),\n pattern: TABLE_COMPACT_SPACING_PATTERN,\n patternMessage: tx('Use 1 to 4 valid CSS measures, such as 6px 12px.'),\n dataAttributes: { globalPath: 'table.appearance.spacing.cellPadding' },\n },\n {\n name: safeName('table.appearance.spacing.headerPadding'),\n label: tx('Appearance: header padding'),\n controlType: FieldControlType.INPUT,\n hint: tx('Accepts 1 to 4 CSS measures with units, var(...) or calc(...). Example: 8px 12px'),\n pattern: TABLE_COMPACT_SPACING_PATTERN,\n patternMessage: tx('Use 1 to 4 valid CSS measures, such as 8px 12px.'),\n dataAttributes: { globalPath: 'table.appearance.spacing.headerPadding' },\n },\n {\n name: safeName('table.appearance.typography.fontSize'),\n label: tx('Appearance: cell font size'),\n controlType: FieldControlType.INPUT,\n hint: tx('Accepts a CSS measure with units, var(...) or calc(...). Example: 13px'),\n pattern: TABLE_COMPACT_FONT_SIZE_PATTERN,\n patternMessage: tx('Use a valid CSS measure, such as 13px.'),\n dataAttributes: { globalPath: 'table.appearance.typography.fontSize' },\n },\n {\n name: safeName('table.appearance.typography.headerFontSize'),\n label: tx('Appearance: header font size'),\n controlType: FieldControlType.INPUT,\n hint: tx('Accepts a CSS measure with units, var(...) or calc(...). Example: 13px'),\n pattern: TABLE_COMPACT_FONT_SIZE_PATTERN,\n patternMessage: tx('Use a valid CSS measure, such as 13px.'),\n dataAttributes: { globalPath: 'table.appearance.typography.headerFontSize' },\n }, {\n name: safeName('table.filteringUi.advancedOpenMode'),\n label: tx('Filtro: modo de abertura'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: tx('overlay'), value: 'overlay' },\n { text: tx('modal'), value: 'modal' },\n { text: tx('drawer'), value: 'drawer' },\n ],\n dataAttributes: { globalPath: 'table.filteringUi.advancedOpenMode' },\n },\n {\n name: safeName('table.filteringUi.overlayVariant'),\n label: tx('Filtro: overlay (visual)'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: tx('card'), value: 'card' },\n { text: tx('frosted'), value: 'frosted' },\n ],\n dataAttributes: { globalPath: 'table.filteringUi.overlayVariant' },\n },\n {\n name: safeName('table.filteringUi.overlayBackdrop'),\n label: tx('Filtro: backdrop no overlay'),\n controlType: FieldControlType.CHECKBOX,\n dataAttributes: { globalPath: 'table.filteringUi.overlayBackdrop' },\n },\n // Table messages - confirmations\n { name: safeName('table.messages.actions.confirmations.delete'), label: tx('Excluir — confirmação'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.delete' } },\n { name: safeName('table.messages.actions.confirmations.deleteMultiple'), label: tx('Excluir (múltiplos) — confirmação'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.deleteMultiple' } },\n { name: safeName('table.messages.actions.confirmations.save'), label: tx('Salvar — confirmação'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.save' } },\n { name: safeName('table.messages.actions.confirmations.cancel'), label: tx('Cancelar — confirmação'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.cancel' } },\n { name: safeName('table.messages.actions.confirmations.export'), label: tx('Exportar — confirmação'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.export' } },\n // Table messages - progress\n { name: safeName('table.messages.actions.progress.delete'), label: tx('Excluir — progresso'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.progress.delete' } },\n { name: safeName('table.messages.actions.progress.deleteMultiple'), label: tx('Excluir (múltiplos) — progresso'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.progress.deleteMultiple' } },\n // Table messages - success\n { name: safeName('table.messages.actions.success.delete'), label: tx('Excluir — sucesso'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.delete' } },\n { name: safeName('table.messages.actions.success.save'), label: tx('Salvar — sucesso'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.save' } },\n { name: safeName('table.messages.actions.success.export'), label: tx('Exportar — sucesso'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.export' } },\n { name: safeName('table.messages.actions.success.import'), label: tx('Importar — sucesso'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.import' } },\n // Table messages - errors\n { name: safeName('table.messages.actions.errors.delete'), label: tx('Excluir — erro'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.delete' } },\n { name: safeName('table.messages.actions.errors.save'), label: tx('Salvar — erro'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.save' } },\n { name: safeName('table.messages.actions.errors.export'), label: tx('Exportar — erro'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.export' } },\n { name: safeName('table.messages.actions.errors.network'), label: tx('Rede — erro'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.network' } },\n { name: safeName('table.messages.actions.errors.permission'), label: tx('Permissão — erro'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.permission' } },\n\n // Dialog - Defaults by type\n {\n name: safeName('dialog.defaults.confirm.ariaRole'),\n label: tx('Dialog defaults: confirm - ariaRole'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'dialog', value: 'dialog' },\n { text: 'alertdialog', value: 'alertdialog' },\n ],\n dataAttributes: { globalPath: 'dialog.defaults.confirm.ariaRole' },\n },\n { name: safeName('dialog.defaults.confirm.title'), label: tx('Dialog defaults: confirm - title'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.confirm.title' } },\n { name: safeName('dialog.defaults.confirm.icon'), label: tx('Dialog defaults: confirm - icon'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.confirm.icon' } },\n { name: safeName('dialog.defaults.confirm.message'), label: tx('Dialog defaults: confirm - message'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.confirm.message' } },\n { name: safeName('dialog.defaults.confirm.themeColor'), label: tx('Dialog defaults: confirm - themeColor'), controlType: FieldControlType.SELECT, selectOptions: [{ text: 'light', value: 'light' }, { text: 'primary', value: 'primary' }, { text: 'dark', value: 'dark' }], dataAttributes: { globalPath: 'dialog.defaults.confirm.themeColor' } },\n {\n name: safeName('dialog.defaults.confirm.closeOnBackdropClick'),\n label: tx('Dialog defaults: confirm - close on backdrop click'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dialog.defaults.confirm.closeOnBackdropClick' },\n },\n { name: safeName('dialog.defaults.confirm.disableClose'), label: tx('Dialog defaults: confirm - disableClose'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.confirm.disableClose' } },\n { name: safeName('dialog.defaults.confirm.hasBackdrop'), label: tx('Dialog defaults: confirm - hasBackdrop'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.confirm.hasBackdrop' } },\n { name: safeName('dialog.defaults.confirm.panelClass'), label: tx('Dialog defaults: confirm - panelClass'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.confirm.panelClass' } },\n { name: safeName('dialog.defaults.confirm.styles'), label: tx('Dialog defaults: confirm - styles (JSON)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.confirm.styles', monospace: true }, hint: tx('Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}') },\n { name: safeName('dialog.defaults.confirm.animation'), label: tx('Dialog defaults: confirm - animation (JSON/boolean)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.confirm.animation', monospace: true } },\n {\n name: safeName('dialog.defaults.alert.ariaRole'),\n label: tx('Dialog defaults: alert - ariaRole'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'dialog', value: 'dialog' },\n { text: 'alertdialog', value: 'alertdialog' },\n ],\n dataAttributes: { globalPath: 'dialog.defaults.alert.ariaRole' },\n },\n { name: safeName('dialog.defaults.alert.title'), label: tx('Dialog defaults: alert - title'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.alert.title' } },\n { name: safeName('dialog.defaults.alert.icon'), label: tx('Dialog defaults: alert - icon'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.alert.icon' } },\n { name: safeName('dialog.defaults.alert.message'), label: tx('Dialog defaults: alert - message'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.alert.message' } },\n { name: safeName('dialog.defaults.alert.themeColor'), label: tx('Dialog defaults: alert - themeColor'), controlType: FieldControlType.SELECT, selectOptions: [{ text: 'light', value: 'light' }, { text: 'primary', value: 'primary' }, { text: 'dark', value: 'dark' }], dataAttributes: { globalPath: 'dialog.defaults.alert.themeColor' } },\n {\n name: safeName('dialog.defaults.alert.closeOnBackdropClick'),\n label: tx('Dialog defaults: alert - close on backdrop click'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dialog.defaults.alert.closeOnBackdropClick' },\n },\n { name: safeName('dialog.defaults.alert.disableClose'), label: tx('Dialog defaults: alert - disableClose'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.alert.disableClose' } },\n { name: safeName('dialog.defaults.alert.hasBackdrop'), label: tx('Dialog defaults: alert - hasBackdrop'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.alert.hasBackdrop' } },\n { name: safeName('dialog.defaults.alert.panelClass'), label: tx('Dialog defaults: alert - panelClass'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.alert.panelClass' } },\n { name: safeName('dialog.defaults.alert.styles'), label: tx('Dialog defaults: alert - styles (JSON)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.alert.styles', monospace: true }, hint: tx('Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}') },\n { name: safeName('dialog.defaults.alert.animation'), label: tx('Dialog defaults: alert - animation (JSON/boolean)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.alert.animation', monospace: true } },\n {\n name: safeName('dialog.defaults.prompt.ariaRole'),\n label: tx('Dialog defaults: prompt - ariaRole'),\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'dialog', value: 'dialog' },\n { text: 'alertdialog', value: 'alertdialog' },\n ],\n dataAttributes: { globalPath: 'dialog.defaults.prompt.ariaRole' },\n },\n { name: safeName('dialog.defaults.prompt.title'), label: tx('Dialog defaults: prompt - title'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.prompt.title' } },\n { name: safeName('dialog.defaults.prompt.icon'), label: tx('Dialog defaults: prompt - icon'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.prompt.icon' } },\n { name: safeName('dialog.defaults.prompt.message'), label: tx('Dialog defaults: prompt - message'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.prompt.message' } },\n { name: safeName('dialog.defaults.prompt.themeColor'), label: tx('Dialog defaults: prompt - themeColor'), controlType: FieldControlType.SELECT, selectOptions: [{ text: 'light', value: 'light' }, { text: 'primary', value: 'primary' }, { text: 'dark', value: 'dark' }], dataAttributes: { globalPath: 'dialog.defaults.prompt.themeColor' } },\n {\n name: safeName('dialog.defaults.prompt.closeOnBackdropClick'),\n label: tx('Dialog defaults: prompt - close on backdrop click'),\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dialog.defaults.prompt.closeOnBackdropClick' },\n },\n { name: safeName('dialog.defaults.prompt.disableClose'), label: tx('Dialog defaults: prompt - disableClose'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.prompt.disableClose' } },\n { name: safeName('dialog.defaults.prompt.hasBackdrop'), label: tx('Dialog defaults: prompt - hasBackdrop'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.prompt.hasBackdrop' } },\n { name: safeName('dialog.defaults.prompt.panelClass'), label: tx('Dialog defaults: prompt - panelClass'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.prompt.panelClass' } },\n { name: safeName('dialog.defaults.prompt.styles'), label: tx('Dialog defaults: prompt - styles (JSON)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.prompt.styles', monospace: true }, hint: tx('Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}') },\n { name: safeName('dialog.defaults.prompt.animation'), label: tx('Dialog defaults: prompt - animation (JSON/boolean)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.prompt.animation', monospace: true } },\n\n // Dialog - Variants per profile (danger, info, success, question, error)\n // Each variant exposes commonly customized fields + JSON editors for actions/styles\n // danger\n { name: safeName('dialog.variants.danger.title'), label: tx('Variant danger - title'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.danger.title' } },\n { name: safeName('dialog.variants.danger.icon'), label: tx('Variant danger - icon'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.danger.icon' } },\n { name: safeName('dialog.variants.danger.message'), label: tx('Variant danger - message'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.message' } },\n { name: safeName('dialog.variants.danger.ariaRole'), label: tx('Variant danger - ariaRole'), controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.danger.ariaRole' } },\n { name: safeName('dialog.variants.danger.closeOnBackdropClick'), label: tx('Variant danger - close on backdrop click'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.danger.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.danger.panelClass'), label: tx('Variant danger - panelClass'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.danger.panelClass' } },\n { name: safeName('dialog.variants.danger.actions'), label: tx('Variant danger - actions (JSON array)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.actions', monospace: true }, hint: tx('Example JSON array: [{\"id\":\"cancel\",\"text\":\"Cancel\",\"role\":\"secondary\",\"close\":true,\"cssClass\":\"btn\"},{\"id\":\"confirm\",\"text\":\"Delete\",\"role\":\"primary\",\"close\":true,\"cssClass\":\"btn btn-danger\",\"icon\":\"delete\"}]') },\n { name: safeName('dialog.variants.danger.styles'), label: tx('Variant danger - styles (JSON)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.styles', monospace: true }, hint: tx('Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}') },\n { name: safeName('dialog.variants.danger.animation'), label: tx('Variant danger - animation (JSON/boolean)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.animation', monospace: true } },\n // info\n { name: safeName('dialog.variants.info.title'), label: tx('Variant info - title'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.info.title' } },\n { name: safeName('dialog.variants.info.icon'), label: tx('Variant info - icon'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.info.icon' } },\n { name: safeName('dialog.variants.info.message'), label: tx('Variant info - message'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.message' } },\n { name: safeName('dialog.variants.info.ariaRole'), label: tx('Variant info - ariaRole'), controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.info.ariaRole' } },\n { name: safeName('dialog.variants.info.closeOnBackdropClick'), label: tx('Variant info - close on backdrop click'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.info.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.info.panelClass'), label: tx('Variant info - panelClass'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.info.panelClass' } },\n { name: safeName('dialog.variants.info.actions'), label: tx('Variant info - actions (JSON array)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.actions', monospace: true } },\n { name: safeName('dialog.variants.info.styles'), label: tx('Variant info - styles (JSON)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.styles', monospace: true }, hint: tx('Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}') },\n { name: safeName('dialog.variants.info.animation'), label: tx('Variant info - animation (JSON/boolean)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.animation', monospace: true } },\n // success\n { name: safeName('dialog.variants.success.title'), label: tx('Variant success - title'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.success.title' } },\n { name: safeName('dialog.variants.success.icon'), label: tx('Variant success - icon'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.success.icon' } },\n { name: safeName('dialog.variants.success.message'), label: tx('Variant success - message'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.message' } },\n { name: safeName('dialog.variants.success.ariaRole'), label: tx('Variant success - ariaRole'), controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.success.ariaRole' } },\n { name: safeName('dialog.variants.success.closeOnBackdropClick'), label: tx('Variant success - close on backdrop click'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.success.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.success.panelClass'), label: tx('Variant success - panelClass'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.success.panelClass' } },\n { name: safeName('dialog.variants.success.actions'), label: tx('Variant success - actions (JSON array)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.actions', monospace: true } },\n { name: safeName('dialog.variants.success.styles'), label: tx('Variant success - styles (JSON)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.styles', monospace: true }, hint: tx('Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}') },\n { name: safeName('dialog.variants.success.animation'), label: tx('Variant success - animation (JSON/boolean)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.animation', monospace: true } },\n // question\n { name: safeName('dialog.variants.question.title'), label: tx('Variant question - title'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.question.title' } },\n { name: safeName('dialog.variants.question.icon'), label: tx('Variant question - icon'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.question.icon' } },\n { name: safeName('dialog.variants.question.message'), label: tx('Variant question - message'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.message' } },\n { name: safeName('dialog.variants.question.ariaRole'), label: tx('Variant question - ariaRole'), controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.question.ariaRole' } },\n { name: safeName('dialog.variants.question.closeOnBackdropClick'), label: tx('Variant question - close on backdrop click'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.question.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.question.panelClass'), label: tx('Variant question - panelClass'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.question.panelClass' } },\n { name: safeName('dialog.variants.question.actions'), label: tx('Variant question - actions (JSON array)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.actions', monospace: true } },\n { name: safeName('dialog.variants.question.styles'), label: tx('Variant question - styles (JSON)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.styles', monospace: true }, hint: tx('Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}') },\n { name: safeName('dialog.variants.question.animation'), label: tx('Variant question - animation (JSON/boolean)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.animation', monospace: true } },\n // error\n { name: safeName('dialog.variants.error.title'), label: tx('Variant error - title'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.error.title' } },\n { name: safeName('dialog.variants.error.icon'), label: tx('Variant error - icon'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.error.icon' } },\n { name: safeName('dialog.variants.error.message'), label: tx('Variant error - message'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.message' } },\n { name: safeName('dialog.variants.error.ariaRole'), label: tx('Variant error - ariaRole'), controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.error.ariaRole' } },\n { name: safeName('dialog.variants.error.closeOnBackdropClick'), label: tx('Variant error - close on backdrop click'), controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.error.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.error.panelClass'), label: tx('Variant error - panelClass'), controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.error.panelClass' } },\n { name: safeName('dialog.variants.error.actions'), label: tx('Variant error - actions (JSON array)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.actions', monospace: true } },\n { name: safeName('dialog.variants.error.styles'), label: tx('Variant error - styles (JSON)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.styles', monospace: true }, hint: tx('Example JSON: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}') },\n { name: safeName('dialog.variants.error.animation'), label: tx('Variant error - animation (JSON/boolean)'), controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.animation', monospace: true } },\n ];\n\n const cfg: FormConfig = {\n sections: [\n {\n id: 'crud',\n title: tx('CRUD'),\n rows: [\n {\n id: 'crud-row-1',\n columns: [\n { id: 'crud-col-1', fields: [\n safeName('crud.defaults.openMode'),\n safeName('crud.defaults.back.strategy'),\n safeName('crud.defaults.back.confirmOnDirty'),\n ] },\n { id: 'crud-col-2', fields: [\n safeName('crud.defaults.header.showBack'),\n safeName('crud.defaults.header.variant'),\n safeName('crud.defaults.header.sticky'),\n safeName('crud.defaults.header.divider'),\n ] },\n { id: 'crud-col-3', fields: [\n safeName('crud.defaults.modal.width'),\n safeName('crud.defaults.modal.maxWidth'),\n safeName('crud.defaults.modal.backdropStyle'),\n ] },\n ],\n },\n ],\n },\n {\n id: 'dynamic-fields',\n title: tx('Dynamic Fields'),\n rows: [\n {\n id: 'df-row-1',\n columns: [\n { id: 'df-col-1', fields: [\n safeName('dynamicFields.asyncSelect.loadOn'),\n safeName('dynamicFields.asyncSelect.pageSize'),\n safeName('dynamicFields.asyncSelect.useCursor'),\n ] },\n { id: 'df-col-2', fields: [\n safeName('dynamicFields.cascade.enable'),\n safeName('dynamicFields.cascade.loadOnChange'),\n safeName('dynamicFields.cascade.debounceMs'),\n ] },\n ],\n },\n ],\n },\n {\n id: 'ai-credentials',\n title: tx('Credentials'), // Internal title, UI might override\n rows: [\n {\n id: 'ai-cred-row-1',\n columns: [\n { id: 'ai-cred-col-1', fields: [safeName('ai.provider')] },\n { id: 'ai-cred-col-2', fields: [safeName('ai.apiKey')] },\n ],\n },\n ],\n },\n {\n id: 'ai-model',\n title: tx('Model & Behavior'),\n rows: [\n {\n id: 'ai-mod-row-1',\n columns: [\n { id: 'ai-mod-col-1', fields: [safeName('ai.model'), safeName('ai.temperature'), safeName('ai.maxTokens')] },\n { id: 'ai-mod-col-2', fields: [safeName('ai.riskPolicy')] },\n ],\n },\n ],\n },\n {\n id: 'ai-embedding',\n title: tx('Embeddings (RAG)'),\n rows: [\n {\n id: 'ai-embed-row-1',\n columns: [\n { id: 'ai-embed-col-1', fields: [safeName('ai.embedding.useSameAsLlm')] },\n { id: 'ai-embed-col-2', fields: [safeName('ai.embedding.provider'), safeName('ai.embedding.apiKey')] },\n { id: 'ai-embed-col-3', fields: [safeName('ai.embedding.model'), safeName('ai.embedding.dimensions')] },\n ],\n },\n ],\n },\n {\n id: 'cache',\n title: tx('Cache & Persistência'),\n rows: [\n {\n id: 'cache-row-1',\n columns: [\n { id: 'cache-col-1', fields: [safeName('cache.disableSchemaCache')] },\n ],\n },\n ],\n },\n {\n id: 'table',\n title: tx('Tabela'),\n rows: [\n {\n id: 'tbl-row-1',\n columns: [\n { id: 'tbl-col-1', fields: [\n safeName('table.toolbar.visible'),\n safeName('table.appearance.density'),\n safeName('table.appearance.spacing.cellPadding'),\n safeName('table.appearance.spacing.headerPadding'),\n safeName('table.appearance.typography.fontSize'),\n safeName('table.appearance.typography.headerFontSize'),\n safeName('table.filteringUi.advancedOpenMode'),\n safeName('table.filteringUi.overlayVariant'),\n safeName('table.filteringUi.overlayBackdrop'),\n ] },\n { id: 'tbl-col-2', fields: [\n safeName('table.behavior.pagination.enabled'),\n safeName('table.behavior.pagination.pageSize'),\n safeName('table.behavior.pagination.showFirstLastButtons'),\n safeName('table.behavior.pagination.strategy'),\n ] },\n { id: 'tbl-col-3', fields: [\n safeName('table.behavior.filtering.debounceTime'),\n safeName('table.behavior.sorting.enabled'),\n safeName('table.behavior.sorting.strategy'),\n safeName('table.behavior.selection.enabled'),\n ] },\n ],\n },\n {\n id: 'tbl-row-messages',\n columns: [\n { id: 'tbl-msg-col-1', fields: [\n safeName('table.messages.actions.confirmations.delete'),\n safeName('table.messages.actions.confirmations.deleteMultiple'),\n safeName('table.messages.actions.confirmations.save'),\n safeName('table.messages.actions.confirmations.cancel'),\n safeName('table.messages.actions.confirmations.export'),\n ] },\n { id: 'tbl-msg-col-2', fields: [\n safeName('table.messages.actions.progress.delete'),\n safeName('table.messages.actions.progress.deleteMultiple'),\n safeName('table.messages.actions.success.delete'),\n safeName('table.messages.actions.success.save'),\n safeName('table.messages.actions.success.export'),\n safeName('table.messages.actions.success.import'),\n ] },\n { id: 'tbl-msg-col-3', fields: [\n safeName('table.messages.actions.errors.delete'),\n safeName('table.messages.actions.errors.save'),\n safeName('table.messages.actions.errors.export'),\n safeName('table.messages.actions.errors.network'),\n safeName('table.messages.actions.errors.permission'),\n ] },\n ],\n },\n ],\n },\n {\n id: 'dialog',\n title: tx('Dialog'),\n rows: [\n {\n id: 'dlg-row-defaults',\n columns: [\n { id: 'dlg-def-col-1', fields: [\n safeName('dialog.defaults.confirm.ariaRole'),\n safeName('dialog.defaults.confirm.closeOnBackdropClick'),\n ] },\n { id: 'dlg-def-col-2', fields: [\n safeName('dialog.defaults.alert.ariaRole'),\n safeName('dialog.defaults.alert.closeOnBackdropClick'),\n ] },\n { id: 'dlg-def-col-3', fields: [\n safeName('dialog.defaults.prompt.ariaRole'),\n safeName('dialog.defaults.prompt.closeOnBackdropClick'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-danger',\n columns: [\n { id: 'dlg-var-danger-col-1', fields: [\n safeName('dialog.variants.danger.title'),\n safeName('dialog.variants.danger.icon'),\n safeName('dialog.variants.danger.message'),\n ] },\n { id: 'dlg-var-danger-col-2', fields: [\n safeName('dialog.variants.danger.ariaRole'),\n safeName('dialog.variants.danger.closeOnBackdropClick'),\n safeName('dialog.variants.danger.panelClass'),\n ] },\n { id: 'dlg-var-danger-col-3', fields: [\n safeName('dialog.variants.danger.actions'),\n safeName('dialog.variants.danger.styles'),\n safeName('dialog.variants.danger.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-info',\n columns: [\n { id: 'dlg-var-info-col-1', fields: [\n safeName('dialog.variants.info.title'),\n safeName('dialog.variants.info.icon'),\n safeName('dialog.variants.info.message'),\n ] },\n { id: 'dlg-var-info-col-2', fields: [\n safeName('dialog.variants.info.ariaRole'),\n safeName('dialog.variants.info.closeOnBackdropClick'),\n safeName('dialog.variants.info.panelClass'),\n ] },\n { id: 'dlg-var-info-col-3', fields: [\n safeName('dialog.variants.info.actions'),\n safeName('dialog.variants.info.styles'),\n safeName('dialog.variants.info.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-success',\n columns: [\n { id: 'dlg-var-success-col-1', fields: [\n safeName('dialog.variants.success.title'),\n safeName('dialog.variants.success.icon'),\n safeName('dialog.variants.success.message'),\n ] },\n { id: 'dlg-var-success-col-2', fields: [\n safeName('dialog.variants.success.ariaRole'),\n safeName('dialog.variants.success.closeOnBackdropClick'),\n safeName('dialog.variants.success.panelClass'),\n ] },\n { id: 'dlg-var-success-col-3', fields: [\n safeName('dialog.variants.success.actions'),\n safeName('dialog.variants.success.styles'),\n safeName('dialog.variants.success.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-question',\n columns: [\n { id: 'dlg-var-question-col-1', fields: [\n safeName('dialog.variants.question.title'),\n safeName('dialog.variants.question.icon'),\n safeName('dialog.variants.question.message'),\n ] },\n { id: 'dlg-var-question-col-2', fields: [\n safeName('dialog.variants.question.ariaRole'),\n safeName('dialog.variants.question.closeOnBackdropClick'),\n safeName('dialog.variants.question.panelClass'),\n ] },\n { id: 'dlg-var-question-col-3', fields: [\n safeName('dialog.variants.question.actions'),\n safeName('dialog.variants.question.styles'),\n safeName('dialog.variants.question.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-error',\n columns: [\n { id: 'dlg-var-error-col-1', fields: [\n safeName('dialog.variants.error.title'),\n safeName('dialog.variants.error.icon'),\n safeName('dialog.variants.error.message'),\n ] },\n { id: 'dlg-var-error-col-2', fields: [\n safeName('dialog.variants.error.ariaRole'),\n safeName('dialog.variants.error.closeOnBackdropClick'),\n safeName('dialog.variants.error.panelClass'),\n ] },\n { id: 'dlg-var-error-col-3', fields: [\n safeName('dialog.variants.error.actions'),\n safeName('dialog.variants.error.styles'),\n safeName('dialog.variants.error.animation'),\n ] },\n ],\n },\n ],\n },\n ],\n actions: {\n placement: 'afterSections',\n // Hide internal form actions; Settings Panel footer handles Apply/Save\n submit: { visible: false, label: tx('Salvar') },\n cancel: { visible: false, label: tx('Cancelar') },\n reset: { visible: false, label: tx('Redefinir'), type: 'reset' as any },\n },\n fieldMetadata: fields as any,\n };\n\n return cfg;\n}\n\n\n","import { InjectionToken, Type } from '@angular/core';\n\n/**\n * Optional token used by GlobalConfigEditorComponent to render forms.\n * Provide the PraxisDynamicForm component (or a compatible dynamic form)\n * to avoid creating a hard dependency from @praxisui/settings-panel to\n * @praxisui/dynamic-form.\n */\nexport const GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT = new InjectionToken<Type<any> | null>(\n 'GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT',\n {\n factory: () => null,\n },\n);\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, OnInit, ViewChild, ViewContainerRef, DestroyRef, inject, AfterViewInit, Type } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Subject, firstValueFrom } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter } from 'rxjs/operators';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport type {\n FormConfig,\n FormValueChangeEvent,\n LoggerContext,\n LoggerLogOptions,\n} from '@praxisui/core';\nimport { GlobalConfigAdminService } from './global-config-admin.service';\nimport { buildGlobalConfigFormConfig } from './global-config-editor.schema';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatChipsModule } from '@angular/material/chips'; // Added MatChipsModule\nimport { IconPickerService, LoggerService, PraxisIconDirective } from '@praxisui/core';\nimport { AiBackendApiService, AiModel, AiProviderCatalogItem } from '@praxisui/ai';\nimport { PraxisI18nService } from '@praxisui/core';\nimport { PRAXIS_SETTINGS_PANEL_I18N_NAMESPACE } from '../i18n/settings-panel.i18n';\nimport { normalizeMojibakeText } from '../i18n/text-normalize';\nimport { GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT } from './global-config-editor.tokens';\n\nconst TABLE_COMPACT_SPACING_PATHS = new Set([\n 'table.appearance.spacing.cellPadding',\n 'table.appearance.spacing.headerPadding',\n]);\nconst TABLE_COMPACT_FONT_SIZE_PATHS = new Set([\n 'table.appearance.typography.fontSize',\n 'table.appearance.typography.headerFontSize',\n]);\nconst TABLE_COMPACT_FIELD_LABELS: Record<string, string> = {\n 'table.appearance.spacing.cellPadding': 'cell padding',\n 'table.appearance.spacing.headerPadding': 'header padding',\n 'table.appearance.typography.fontSize': 'cell font size',\n 'table.appearance.typography.headerFontSize': 'header font size',\n};\nconst TABLE_COMPACT_LENGTH_TOKEN =\n '(?:0|(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|rem|em|%|vh|vw|svh|svw|lvh|lvw|dvh|dvw|ch|ex))';\nconst TABLE_COMPACT_SPACING_REGEX = new RegExp(\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN}(?:\\\\s+${TABLE_COMPACT_LENGTH_TOKEN}){0,3})$`,\n 'i',\n);\nconst TABLE_COMPACT_FONT_SIZE_REGEX = new RegExp(\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN})$`,\n 'i',\n);\n\n@Component({\n selector: 'praxis-global-config-editor',\n standalone: true,\n imports: [CommonModule, MatSnackBarModule, MatExpansionModule, MatIconModule, MatButtonModule, MatTooltipModule, MatProgressSpinnerModule, MatChipsModule, PraxisIconDirective],\n template: `\n <mat-accordion multi>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">construction</mat-icon>\n {{ tx('CRUD') }}\n </mat-panel-title>\n <mat-panel-description>{{ tx('Global policies for opening, back and header') }}</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostCrud></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">dynamic_form</mat-icon>\n {{ tx('Dynamic Fields') }}\n </mat-panel-title>\n <mat-panel-description>{{ tx('Async Select, cascade and pagination') }}</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostFields></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">cached</mat-icon>\n {{ tx('Cache & Persistence') }}\n </mat-panel-title>\n <mat-panel-description>{{ tx('Schema cache strategy (local vs server)') }}</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostCache></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">psychology</mat-icon>\n {{ tx('Artificial Intelligence') }}\n </mat-panel-title>\n <mat-panel-description>{{ tx('LLM integration') }}</mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"ai-config-container\">\n <div class=\"ai-config-source\">\n <div class=\"ai-config-source__meta\">\n <mat-icon>settings_suggest</mat-icon>\n <span>{{ configSourceLabel }}</span>\n </div>\n <button\n mat-stroked-button\n type=\"button\"\n class=\"ai-action-btn ai-action-btn--clear\"\n *ngIf=\"hasStoredGlobalConfig\"\n [attr.aria-busy]=\"isClearingGlobalConfig ? 'true' : null\"\n [disabled]=\"isClearingGlobalConfig\"\n (click)=\"clearStoredConfig()\"\n [matTooltip]=\"tx('Clear saved config and return to server defaults')\"\n >\n <ng-container *ngIf=\"isClearingGlobalConfig; else clearContent\">\n <mat-spinner diameter=\"16\" class=\"btn-spinner\"></mat-spinner>\n <span class=\"ai-action-label\">{{ tx('Clearing...') }}</span>\n </ng-container>\n <ng-template #clearContent>\n <mat-icon>delete_sweep</mat-icon>\n <span class=\"ai-action-label\">{{ tx('Clear saved config') }}</span>\n </ng-template>\n </button>\n </div>\n <!-- Group 1: Credentials -->\n <div class=\"ai-group\">\n <div class=\"ai-group-header\">\n <div class=\"ai-group-title\">\n <mat-icon>vpn_key</mat-icon> {{ tx('Credentials') }}\n </div>\n <button mat-stroked-button \n type=\"button\"\n class=\"ai-action-btn\"\n [class.is-success]=\"aiTestResult?.success\"\n [attr.aria-busy]=\"isTestingAi ? 'true' : null\"\n (click)=\"testAiConnection()\" \n [disabled]=\"isTestingAi || !hasApiKey\"\n [matTooltip]=\"tx('Test connection with the provided key')\">\n <ng-container *ngIf=\"isTestingAi; else btnContent\">\n <mat-spinner diameter=\"16\" class=\"btn-spinner\"></mat-spinner>\n <span class=\"ai-action-label\">{{ tx('Connecting...') }}</span>\n </ng-container>\n <ng-template #btnContent>\n <mat-icon>{{ aiTestResult?.success ? 'check' : 'bolt' }}</mat-icon>\n <span class=\"ai-action-label\">\n {{ aiTestResult?.success ? tx('Connected') : tx('Test connection') }}\n </span>\n </ng-template>\n </button>\n </div>\n <div class=\"ai-provider-summary\" *ngIf=\"selectedProvider\">\n <span class=\"ai-provider-icon\" aria-hidden=\"true\">\n <ng-container [ngSwitch]=\"selectedProvider.iconKey\">\n <svg *ngSwitchCase=\"'gemini'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <path d=\"M12 3l2.6 5.4L20 11l-5.4 2.6L12 19l-2.6-5.4L4 11l5.4-2.6L12 3z\" />\n </svg>\n <svg *ngSwitchCase=\"'openai'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <polygon points=\"12,2 20,7 20,17 12,22 4,17 4,7\" />\n </svg>\n <svg *ngSwitchCase=\"'xai'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\">\n <line x1=\"5\" y1=\"5\" x2=\"19\" y2=\"19\" />\n <line x1=\"19\" y1=\"5\" x2=\"5\" y2=\"19\" />\n </svg>\n <svg *ngSwitchCase=\"'mock'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <rect x=\"4.5\" y=\"4.5\" width=\"15\" height=\"15\" rx=\"2\" ry=\"2\" stroke-dasharray=\"2 2\" />\n </svg>\n <svg *ngSwitchDefault viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <circle cx=\"12\" cy=\"12\" r=\"7.5\" />\n </svg>\n </ng-container>\n </span>\n <div class=\"ai-provider-meta\">\n <div class=\"ai-provider-name\">{{ selectedProvider.label }}</div>\n <div class=\"ai-provider-desc\">{{ selectedProvider.description }}</div>\n </div>\n <div\n class=\"ai-provider-key\"\n *ngIf=\"selectedProvider?.requiresApiKey !== false\"\n [class.is-present]=\"hasCurrentApiKey\"\n [class.is-saved]=\"!hasCurrentApiKey && (apiKeyLast4 || hasStoredApiKey)\"\n [class.is-missing]=\"!hasCurrentApiKey && !apiKeyLast4 && !hasStoredApiKey\"\n >\n <mat-icon>vpn_key</mat-icon>\n <span>{{ apiKeyStatusLabel }}</span>\n </div>\n <div class=\"ai-provider-key is-unlocked\" *ngIf=\"selectedProvider?.requiresApiKey === false\">\n <mat-icon>check_circle</mat-icon>\n <span>{{ tx('No key required') }}</span>\n </div>\n </div>\n <div class=\"ai-credentials-row\">\n <div class=\"ai-form-inline\">\n <ng-template #hostAiCredentials></ng-template>\n </div>\n </div>\n \n <!-- Feedback / Error Message -->\n <div class=\"ai-feedback\" *ngIf=\"aiTestResult && !aiTestResult.success\">\n <mat-icon color=\"warn\">error</mat-icon>\n <span class=\"error-text\">{{ aiTestResult.message }}</span>\n </div>\n </div>\n\n <!-- Group 2: Model & Behavior (Only visible if Key is present) -->\n <div class=\"ai-group\" [class.disabled-group]=\"!hasApiKey\">\n <div class=\"ai-group-header\">\n <div class=\"ai-group-title\">\n <mat-icon>smart_toy</mat-icon> {{ tx('Model & Behavior') }}\n </div>\n <div class=\"ai-header-actions\">\n <span class=\"ai-subtext\" *ngIf=\"hasApiKey\">{{ tx('Choose the model after validating the key.') }}</span>\n <mat-chip-option *ngIf=\"!hasApiKey\" disabled>{{ tx('API key validated required') }}</mat-chip-option>\n <button mat-icon-button (click)=\"refreshModels(true)\" [disabled]=\"isTestingAi || !hasApiKey\" [matTooltip]=\"tx('Refresh model list')\" [attr.aria-label]=\"tx('Refresh model list')\">\n <mat-icon [class.spin]=\"isRefetchingModels\">sync</mat-icon>\n </button>\n </div>\n </div>\n \n <div class=\"ai-model-content\" *ngIf=\"hasApiKey\">\n <div class=\"ai-model-controls\">\n <ng-template #hostAiModel></ng-template>\n </div>\n\n <!-- Model Details (Placeholder for future metadata) -->\n <div class=\"ai-model-details\" *ngIf=\"selectedModelDetails\">\n <mat-icon inline>info</mat-icon> {{ selectedModelDetails }}\n </div>\n </div>\n \n <div class=\"ai-placeholder\" *ngIf=\"!hasApiKey\">\n <mat-icon>lock</mat-icon>\n <span>{{ tx('Configure and test your API key to unlock model selection.') }}</span>\n </div>\n </div>\n\n <!-- Group 3: Embeddings (RAG) -->\n <div class=\"ai-group\">\n <div class=\"ai-group-header\">\n <div class=\"ai-group-title\">\n <mat-icon>scatter_plot</mat-icon> {{ tx('Embeddings (RAG)') }}\n </div>\n <div class=\"ai-header-actions\">\n <button\n mat-stroked-button\n type=\"button\"\n class=\"ai-action-btn\"\n (click)=\"useLlmForEmbeddings()\"\n [disabled]=\"!canUseLlmForEmbeddings\"\n [matTooltip]=\"tx('Use the LLM provider and key for embeddings')\"\n >\n <mat-icon>merge_type</mat-icon>\n <span class=\"ai-action-label\">{{ tx('Use the LLM provider and key for embeddings') }}</span>\n </button>\n <mat-chip-option *ngIf=\"!canUseLlmForEmbeddings\" disabled>{{ tx('Provider has no embeddings') }}</mat-chip-option>\n </div>\n </div>\n <div class=\"ai-subtext\">\n {{ tx('Configure the embeddings provider for vector search (templates and schemas).') }}\n </div>\n <div class=\"ai-subtext\" *ngIf=\"embeddingUseSameAsLlm\">\n {{ tx('Synchronized with the LLM. The fields below follow the primary credential.') }}\n </div>\n <div class=\"ai-embedding-row\">\n <ng-template #hostAiEmbedding></ng-template>\n </div>\n <div class=\"ai-feedback ai-feedback--warn\" *ngIf=\"embeddingDimensionMismatch\">\n <mat-icon>warning</mat-icon>\n <span class=\"error-text\">\n {{ tx('Embedding dimension mismatch with database (768). Adjust to 768 or redo the migration.') }}\n </span>\n </div>\n </div>\n </div>\n\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">table_chart</mat-icon>\n {{ tx('Table') }}\n </mat-panel-title>\n <mat-panel-description>{{ tx('Toolbar, appearance and advanced filter') }}</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostTable></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">forum</mat-icon>\n {{ tx('Dialog') }}\n </mat-panel-title>\n <mat-panel-description>{{ tx('Defaults and variants (danger, info, success, question, error)') }}</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostDialog></ng-template>\n <!-- Icon UX helpers for Dialog variants -->\n <div class=\"dlg-icon-helpers\">\n <div class=\"dlg-icon-helpers__head\">{{ tx('Icons by profile (shortcuts)') }}</div>\n <div class=\"dlg-icon-helpers__row\" *ngFor=\"let k of dialogVariantKeys\">\n <div class=\"dlg-icon-helpers__label\">{{ k }}</div>\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"getVariantIcon(k) || 'mi:help_outline'\" class=\"dlg-icon-helpers__preview\"></mat-icon>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"pickVariantIcon(k)\" [matTooltip]=\"tx('Pick icon for {{key}}', { key: k })\">\n <mat-icon>search</mat-icon>\n {{ tx('Pick icon') }}\n </button>\n <button mat-icon-button type=\"button\" *ngIf=\"getVariantIcon(k)\" (click)=\"clearVariantIcon(k)\" [matTooltip]=\"tx('Clear icon for {{key}}', { key: k })\" [attr.aria-label]=\"tx('Clear icon')\">\n <mat-icon>backspace</mat-icon>\n </button>\n <span class=\"dlg-icon-helpers__value\" *ngIf=\"getVariantIcon(k)\">{{ getVariantIcon(k) }}</span>\n </div>\n <div class=\"dlg-icon-helpers__hint\">{{ tx('The text field above remains editable. These buttons only help with selection/clear preview.') }}</div>\n </div>\n </mat-expansion-panel>\n </mat-accordion>\n `,\n styles: [`\n .dlg-icon-helpers{margin:12px 16px 4px 16px; padding:12px; border:1px dashed var(--md-sys-color-outline-variant); border-radius:var(--md-sys-shape-corner-small, 8px);}\n .dlg-icon-helpers__head{font-weight:600; margin-bottom:8px; opacity:.8}\n .dlg-icon-helpers__row{display:flex; align-items:center; gap:12px; padding:6px 0}\n .dlg-icon-helpers__label{text-transform:capitalize; width:96px; opacity:.8}\n .dlg-icon-helpers__preview{width:24px; height:24px;}\n .dlg-icon-helpers__value{font-family:monospace; font-size:12px; opacity:.8}\n .dlg-icon-helpers__hint{margin-top:8px; font-size:12px; opacity:.7}\n \n .panel-icon { margin-right: 12px; color: var(--md-sys-color-primary); }\n\n /* AI Section Styles */\n .ai-config-container {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .ai-config-source {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 10px 12px;\n border-radius: var(--md-sys-shape-corner-medium, 10px);\n border: 1px dashed var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-container-low);\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n flex-wrap: wrap;\n }\n\n .ai-config-source__meta {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n\n .ai-action-btn--clear {\n background: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n --mdc-outlined-button-container-color: var(--md-sys-color-error-container);\n --mdc-outlined-button-label-text-color: var(--md-sys-color-on-error-container);\n --mdc-outlined-button-outline-color: var(--md-sys-color-error);\n --mat-mdc-button-persistent-ripple-color: var(--md-sys-color-on-error-container);\n --mat-mdc-button-ripple-color: var(--md-sys-color-on-error-container);\n }\n\n .ai-action-btn--clear:hover {\n background: var(--md-sys-color-error-container);\n }\n\n .ai-group-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 14px;\n color: var(--md-sys-color-primary);\n margin-bottom: 12px;\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n padding-bottom: 4px;\n }\n\n .ai-group-title mat-icon {\n font-size: 20px;\n width: 20px;\n height: 20px;\n }\n\n /* Ocultar botões de envio padrão do dynamic-form nas seções de IA */\n .ai-group ::ng-deep .form-actions,\n .ai-group ::ng-deep button[type=\"submit\"] {\n display: none !important;\n }\n\n /* Credentials Row */\n .ai-credentials-row {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex-wrap: wrap;\n }\n\n .ai-group-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n }\n\n .ai-provider-summary {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n border-radius: var(--md-sys-shape-corner-medium, 10px);\n background: var(--md-sys-color-surface-variant);\n border: 1px solid var(--md-sys-color-outline-variant);\n margin: 8px 0 4px 0;\n flex-wrap: wrap;\n }\n\n .ai-provider-icon {\n width: 32px;\n height: 32px;\n border-radius: var(--md-sys-shape-corner-small, 8px);\n border: 1px solid var(--md-sys-color-outline-variant);\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--md-sys-color-surface);\n color: var(--md-sys-color-primary);\n flex: 0 0 auto;\n }\n\n .provider-svg {\n width: 18px;\n height: 18px;\n }\n\n .ai-provider-meta {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 200px;\n flex: 1 1 auto;\n }\n\n .ai-provider-name {\n font-weight: 600;\n font-size: 13px;\n }\n\n .ai-provider-desc {\n font-size: 12px;\n opacity: 0.75;\n }\n\n .ai-provider-key {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-container-lowest);\n color: var(--md-sys-color-on-surface-variant);\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.2px;\n box-shadow: var(--md-sys-elevation-level1, 0 1px 2px rgba(0,0,0,0.2));\n }\n\n .ai-provider-key mat-icon {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n\n .ai-provider-key.is-present {\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n border-color: var(--md-sys-color-primary);\n }\n\n .ai-provider-key.is-saved {\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n border-color: var(--md-sys-color-secondary);\n }\n\n .ai-provider-key.is-missing {\n background: var(--md-sys-color-surface-container-low);\n color: var(--md-sys-color-on-surface-variant);\n border-style: dashed;\n opacity: 0.9;\n }\n\n .ai-provider-key.is-unlocked {\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n border-color: var(--md-sys-color-tertiary);\n }\n\n .ai-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n height: 40px;\n padding: 0 14px;\n min-width: 168px;\n border-radius: var(--md-sys-shape-corner-medium, 12px);\n white-space: nowrap;\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n border-color: var(--md-sys-color-outline-variant);\n box-shadow: var(--md-sys-elevation-level1, 0 1px 2px rgba(0,0,0,0.2));\n transition: background-color 0.15s ease, box-shadow 0.15s ease, transform 0.06s ease;\n\n --mdc-outlined-button-container-color: var(--md-sys-color-secondary-container);\n --mdc-outlined-button-label-text-color: var(--md-sys-color-on-secondary-container);\n --mdc-outlined-button-outline-color: var(--md-sys-color-outline-variant);\n --mat-mdc-button-persistent-ripple-color: var(--md-sys-color-on-secondary-container);\n --mat-mdc-button-ripple-color: var(--md-sys-color-on-secondary-container);\n }\n\n .ai-action-btn .mat-button-wrapper,\n .ai-action-btn .mdc-button__label {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n line-height: 1;\n height: 100%;\n }\n\n .ai-action-btn .mat-icon {\n width: 18px;\n height: 18px;\n font-size: 18px;\n line-height: 18px;\n }\n\n .ai-action-btn .ai-action-label {\n display: inline-flex;\n align-items: center;\n line-height: 1;\n }\n\n .ai-action-btn .mat-progress-spinner,\n .ai-action-btn .btn-spinner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n }\n\n .ai-action-btn:hover {\n background: var(--md-sys-color-secondary-container);\n box-shadow: var(--md-sys-elevation-level2, 0 2px 6px rgba(0,0,0,0.25));\n }\n\n .ai-action-btn:active {\n transform: translateY(1px);\n }\n\n .ai-action-btn:focus-visible {\n outline: 2px solid var(--md-sys-color-primary);\n outline-offset: 2px;\n }\n\n .ai-action-btn.is-success {\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n border-color: var(--md-sys-color-tertiary);\n\n --mdc-outlined-button-container-color: var(--md-sys-color-tertiary-container);\n --mdc-outlined-button-label-text-color: var(--md-sys-color-on-tertiary-container);\n --mdc-outlined-button-outline-color: var(--md-sys-color-tertiary);\n --mat-mdc-button-persistent-ripple-color: var(--md-sys-color-on-tertiary-container);\n --mat-mdc-button-ripple-color: var(--md-sys-color-on-tertiary-container);\n }\n\n .ai-action-btn.is-success:hover {\n background: var(--md-sys-color-tertiary-container);\n }\n\n .ai-action-btn:disabled {\n background: var(--md-sys-color-surface-container-low);\n color: var(--md-sys-color-on-surface-variant);\n border-color: var(--md-sys-color-outline-variant);\n box-shadow: none;\n opacity: 0.7;\n }\n\n .ai-form-inline {\n flex: 1;\n min-width: 300px;\n }\n\n .ai-credentials-row button {\n margin-top: 4px; /* Align with input */\n height: 40px;\n }\n\n .btn-spinner {\n margin-right: 8px;\n }\n\n /* Feedback */\n .ai-feedback {\n margin-top: 8px;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n border-radius: var(--md-sys-shape-corner-extra-small, 4px);\n font-size: 13px;\n }\n\n .ai-feedback--warn {\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n }\n\n /* Model Section */\n .disabled-group {\n opacity: 0.6;\n pointer-events: none;\n }\n\n .ai-model-content {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .ai-model-controls {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n }\n .ai-model-controls ::ng-deep praxis-dynamic-form {\n flex: 1;\n }\n\n .ai-model-details {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n margin-left: 4px;\n }\n\n .ai-subtext {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .ai-header-actions {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .ai-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 24px;\n background: var(--md-sys-color-surface-container-low);\n border-radius: var(--md-sys-shape-corner-small, 8px);\n color: var(--md-sys-color-outline);\n gap: 8px;\n text-align: center;\n font-size: 13px;\n }\n\n .spin {\n animation: spin 1s linear infinite;\n }\n @keyframes spin { \n 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } \n }\n `],\n})\nexport class GlobalConfigEditorComponent implements OnInit, AfterViewInit {\n formConfig!: FormConfig;\n private initialValues: Record<string, any> = {};\n private currentValues: Record<string, any> = {};\n private pathMap: Record<string, string> = {};\n private bootstrappedSections = new Set<string>();\n private readonly allSections = ['crud', 'dynamic-fields', 'cache', 'table', 'dialog', 'ai-credentials', 'ai-model', 'ai-embedding'] as const;\n\n // SettingsPanel integration signals\n readonly isDirty$ = new BehaviorSubject<boolean>(false);\n readonly isValid$ = new BehaviorSubject<boolean>(true);\n readonly isBusy$ = new BehaviorSubject<boolean>(false);\n\n @ViewChild('hostCrud', { read: ViewContainerRef, static: true }) hostCrud!: ViewContainerRef;\n @ViewChild('hostFields', { read: ViewContainerRef, static: true }) hostFields!: ViewContainerRef;\n @ViewChild('hostCache', { read: ViewContainerRef, static: true }) hostCache!: ViewContainerRef;\n @ViewChild('hostTable', { read: ViewContainerRef, static: true }) hostTable!: ViewContainerRef;\n @ViewChild('hostDialog', { read: ViewContainerRef, static: true }) hostDialog!: ViewContainerRef;\n @ViewChild('hostAiCredentials', { read: ViewContainerRef, static: true }) hostAiCredentials!: ViewContainerRef;\n @ViewChild('hostAiModel', { read: ViewContainerRef, static: false }) hostAiModel!: ViewContainerRef;\n @ViewChild('hostAiEmbedding', { read: ViewContainerRef, static: true }) hostAiEmbedding!: ViewContainerRef;\n private readonly destroyRef = inject(DestroyRef);\n private readonly i18n = inject(PraxisI18nService);\n private readonly iconPicker = inject(IconPickerService);\n private readonly aiApi = inject(AiBackendApiService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly logger = inject(LoggerService);\n private readonly logContext: LoggerContext = {\n lib: 'praxis-settings-panel',\n component: 'GlobalConfigEditorComponent',\n };\n private readonly providedDynamicFormCtor = inject<Type<any> | null>(GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT, { optional: true });\n private dynamicFormCtor: Type<any> | null = this.providedDynamicFormCtor ?? null;\n private loggedMissingDynamicForm = false;\n\n // Guardar instância do form da seção 'dialog' para atualizar controles diretamente\n private dialogFormInst: any | null = null;\n private aiModelFormRef: any | null = null;\n private aiEmbeddingFormRef: any | null = null;\n private pendingModelOptions: Array<{ text: string; value: string }> = [];\n private readonly embeddingModelOptions = [\n { text: 'text-embedding-3-large', value: 'text-embedding-3-large' },\n { text: 'text-embedding-3-small', value: 'text-embedding-3-small' },\n { text: 'text-embedding-ada-002 (legacy)', value: 'text-embedding-ada-002' },\n ];\n\n\n private componentRefs = new Map<string, any>();\n readonly dialogVariantKeys = ['danger', 'info', 'success', 'question', 'error'] as const;\n\n isTestingAi = false;\n isRefetchingModels = false;\n isClearingGlobalConfig = false;\n aiTestResult: { success: boolean; message: string } | null = null;\n private availableModels: AiModel[] = [];\n providers: AiProviderCatalogItem[] = [];\n selectedProvider: AiProviderCatalogItem | null = null;\n apiKeyLast4: string | null = null;\n hasStoredApiKey = false;\n hasStoredGlobalConfig = false;\n configSourceLabel = this.tx('Server defaults (env vars)');\n\n // UX: API Key monitoring\n private apiKeyChanged$ = new Subject<{ apiKey: string; provider: string }>();\n hasApiKey = false;\n selectedModelDetails: string = '';\n get hasCurrentApiKey(): boolean {\n const apiKey = (this.currentValues as any)?.[this.safeName('ai.apiKey')] || '';\n return !!apiKey;\n }\n get apiKeyStatusLabel(): string {\n const apiKey = (this.currentValues as any)?.[this.safeName('ai.apiKey')] || '';\n if (apiKey) return this.tx('Key provided');\n if (this.apiKeyLast4) return this.tx('Saved key (****{{last4}})', { last4: this.apiKeyLast4 });\n if (this.hasStoredApiKey) return this.tx('Saved key');\n return this.tx('No saved key');\n }\n\n constructor(private admin: GlobalConfigAdminService, private snack: MatSnackBar) { }\n\n async ngOnInit(): Promise<void> {\n const cfg = this.admin.getEffectiveConfig();\n const flat = this.flatten(cfg);\n this.formConfig = buildGlobalConfigFormConfig(this.tx.bind(this));\n this.applyConfigSnapshot(flat, { resetForms: false });\n\n await this.loadProviderCatalog();\n this.applyProviderOptions();\n this.applyEmbeddingProviderOptions();\n\n const providerSafe = this.safeName('ai.provider');\n const apiKeySafe = this.safeName('ai.apiKey');\n const selectedProvider = (this.currentValues as any)[providerSafe] || this.resolveDefaultProvider();\n if (selectedProvider && !(this.currentValues as any)[providerSafe]) {\n (this.currentValues as any)[providerSafe] = selectedProvider;\n if (!(this.initialValues as any)[providerSafe]) {\n (this.initialValues as any)[providerSafe] = selectedProvider;\n }\n this.setFieldDefaultValue(providerSafe, selectedProvider);\n }\n\n this.updateSelectedProvider(selectedProvider);\n this.updateApiKeyState(selectedProvider, (this.currentValues as any)[apiKeySafe]);\n this.syncEmbeddingDefaults(false);\n this.ensureEmbeddingModelDefaults(false);\n this.ensureEmbeddingDimensionsDefaults(false);\n\n await this.refreshStoredConfigState();\n\n // Monitor API Key changes to auto-fetch\n this.apiKeyChanged$.pipe(\n debounceTime(1500), // Wait for typing to stop\n distinctUntilChanged((prev, curr) => prev.apiKey === curr.apiKey && prev.provider === curr.provider),\n filter(({ apiKey, provider }) => this.canAutoRefreshModels(provider, apiKey)),\n ).subscribe(() => {\n this.refreshModels();\n });\n\n\n\n if (this.hasApiKey && this.selectedProvider?.supportsModels !== false) {\n // Auto-fetch models on load if we have a key (silent)\n this.refreshModels(false, true);\n }\n\n this.bootstrapDynamicForms();\n }\n\n\n\n ngAfterViewInit(): void {\n this.ensureAiModelForm();\n }\n\n onValueChange(sectionId: string, ev: FormValueChangeEvent): void {\n this.isValid$.next(!!ev.isValid);\n // Mesclar valores por seção (cada form emite somente seu grupo)\n this.currentValues = { ...this.currentValues, ...ev.formData };\n\n if (sectionId === 'ai-credentials') {\n const apiKeySafe = this.safeName('ai.apiKey');\n const providerSafe = this.safeName('ai.provider');\n const apiKey = ev.formData[apiKeySafe];\n const provider = ev.formData[providerSafe] || (this.currentValues as any)[providerSafe] || this.resolveDefaultProvider();\n const providerChanged = provider !== this.selectedProvider?.id;\n if (providerChanged) {\n this.updateSelectedProvider(provider);\n this.aiTestResult = null;\n this.availableModels = [];\n this.pendingModelOptions = [];\n this.selectedModelDetails = '';\n this.clearModelSelection(this.selectedProvider?.defaultModel);\n this.applyEmbeddingProviderOptions();\n }\n this.updateApiKeyState(provider, apiKey);\n this.syncEmbeddingDefaults();\n this.ensureEmbeddingModelDefaults();\n this.ensureEmbeddingDimensionsDefaults();\n\n if (apiKey !== this.initialValues[apiKeySafe] || providerChanged) {\n this.apiKeyChanged$.next({ apiKey: apiKey || '', provider });\n // Reset test result when key changes\n if (this.aiTestResult) {\n this.aiTestResult = null;\n }\n }\n if (this.hasApiKey) {\n setTimeout(() => this.ensureAiModelForm(), 0);\n } else {\n if (this.aiModelFormRef) {\n try { this.aiModelFormRef.destroy(); } catch { }\n this.componentRefs.delete('ai-model');\n this.aiModelFormRef = null;\n }\n this.availableModels = [];\n this.pendingModelOptions = [];\n }\n }\n\n if (sectionId === 'ai-model') {\n const modelSafe = this.safeName('ai.model');\n const model = ev.formData[modelSafe];\n this.updateModelDetails(model);\n }\n\n if (sectionId === 'ai-embedding') {\n this.syncEmbeddingDefaults();\n this.ensureEmbeddingModelDefaults();\n this.ensureEmbeddingDimensionsDefaults();\n }\n\n const firstTime = !this.bootstrappedSections.has(sectionId);\n if (firstTime) {\n this.initialValues = { ...this.initialValues, ...ev.formData };\n this.bootstrappedSections.add(sectionId);\n }\n this.isDirty$.next(!this.shallowEqual(this.currentValues, this.initialValues));\n }\n\n private buildSectionConfig(sectionId: string): any {\n const sec = (this.formConfig.sections || []).find((s: any) => s.id === sectionId);\n if (!sec) return { sections: [], fieldMetadata: [] } as any;\n const names = new Set<string>();\n for (const row of sec.rows || []) {\n for (const col of row.columns || []) {\n for (const fname of col.fields || []) names.add(fname);\n }\n }\n const fms = (this.formConfig.fieldMetadata || []).filter((f: any) => names.has(f.name));\n return { sections: [sec], fieldMetadata: fms } as any;\n }\n\n private bootstrapDynamicForms(): void {\n if (!this.dynamicFormCtor) {\n if (!this.loggedMissingDynamicForm) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] Dynamic form component was not provided. Set GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT to enable form rendering.',\n this.buildLogOptions(\n { token: 'GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT' },\n { dedupeKey: 'global-config-editor:missing-dynamic-form' },\n ),\n );\n this.loggedMissingDynamicForm = true;\n }\n return;\n }\n\n const groups: Array<{ id: string; host: ViewContainerRef; cfg: any }> = [\n { id: 'crud', host: this.hostCrud, cfg: this.buildSectionConfig('crud') },\n { id: 'dynamic-fields', host: this.hostFields, cfg: this.buildSectionConfig('dynamic-fields') },\n { id: 'cache', host: this.hostCache, cfg: this.buildSectionConfig('cache') },\n { id: 'table', host: this.hostTable, cfg: this.buildSectionConfig('table') },\n { id: 'dialog', host: this.hostDialog, cfg: this.buildSectionConfig('dialog') },\n { id: 'ai-credentials', host: this.hostAiCredentials, cfg: this.buildSectionConfig('ai-credentials') },\n { id: 'ai-embedding', host: this.hostAiEmbedding, cfg: this.buildSectionConfig('ai-embedding') },\n ];\n\n for (const g of groups) {\n try {\n if (!g.host) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] Missing host for section',\n this.buildLogOptions(\n { sectionId: g.id },\n {\n dedupeKey: `global-config-editor:missing-host:${g.id}`,\n context: { actionId: `section.${g.id}` },\n },\n ),\n );\n continue;\n }\n this.logger.debug(\n '[GlobalConfigEditor] Creating form section',\n this.buildLogOptions(\n { sectionId: g.id, config: g.cfg },\n {\n context: { actionId: `section.${g.id}` },\n throttleKey: 'global-config-editor:create-form-section',\n },\n ),\n );\n const ref = g.host.createComponent(this.dynamicFormCtor);\n ref.setInput('config', g.cfg);\n ref.setInput('mode', 'edit');\n // Não habilitar o modo de edição de layout (canvas) - queremos apenas edição de valores\n ref.setInput('enableCustomization', false);\n const inst: any = ref.instance as any;\n\n // FORÇAR estado de sucesso para renderizar o formulário sem resourcePath\n inst.initializationStatus = 'success';\n inst.isLoading = false;\n\n try {\n if (typeof inst.buildFormFromConfig === 'function') inst.buildFormFromConfig();\n } catch (err) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] buildFormFromConfig failed',\n this.buildLogOptions(\n { sectionId: g.id, error: err },\n {\n context: { actionId: `section.${g.id}.build-form` },\n dedupeKey: `global-config-editor:build-form-failed:${g.id}`,\n },\n ),\n );\n }\n try { inst.onSubmit = () => { }; } catch { }\n try { ref.changeDetectorRef.detectChanges(); } catch { }\n if (inst?.valueChange?.subscribe) {\n inst.valueChange.subscribe((ev: FormValueChangeEvent) => this.onValueChange(g.id, ev));\n }\n this.componentRefs.set(g.id, ref);\n if (g.id === 'dialog') {\n // Guardar referência para facilitar setValue em campos de ícone\n this.dialogFormInst = inst;\n }\n if (g.id === 'ai-embedding') {\n this.aiEmbeddingFormRef = ref;\n }\n this.destroyRef.onDestroy(() => { try { ref.destroy(); } catch { } });\n } catch (err) {\n this.logger.error(\n '[GlobalConfigEditor] Failed to create form section',\n this.buildLogOptions(\n { sectionId: g.id, error: err },\n { context: { actionId: `section.${g.id}.create` } },\n ),\n );\n }\n }\n // Criar a seção de modelo somente quando a chave estiver disponível e o host existir\n this.ensureAiModelForm();\n }\n\n private ensureAiModelForm(): void {\n if (!this.hasApiKey) return;\n if (!this.aiModelFormRef) {\n this.createAiModelForm();\n }\n }\n\n private async loadProviderCatalog(): Promise<void> {\n try {\n const response: any = await firstValueFrom(this.aiApi.listProviderCatalog() as any);\n const providers = Array.isArray(response?.providers) ? response.providers : [];\n this.providers = providers.filter((p: any) => p && p.id);\n } catch (err) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] Failed to load provider catalog, using fallback.',\n this.buildLogOptions(\n { error: err },\n {\n context: { actionId: 'providers.load-catalog' },\n dedupeKey: 'global-config-editor:provider-catalog-fallback',\n },\n ),\n );\n this.providers = this.buildFallbackProviders();\n }\n }\n\n private buildFallbackProviders(): AiProviderCatalogItem[] {\n return [\n {\n id: 'gemini',\n label: 'Google Gemini',\n description: this.tx('Fast multimodal models from Google.'),\n defaultModel: 'gemini-2.0-flash',\n requiresApiKey: true,\n supportsModels: true,\n supportsEmbeddings: true,\n iconKey: 'gemini',\n },\n {\n id: 'openai',\n label: 'OpenAI',\n description: this.tx('GPT models for text and chat.'),\n defaultModel: 'gpt-4o-mini',\n requiresApiKey: true,\n supportsModels: true,\n supportsEmbeddings: true,\n iconKey: 'openai',\n },\n {\n id: 'xai',\n label: 'xAI (Grok)',\n description: this.tx('Grok models focused on reasoning.'),\n defaultModel: 'grok-2-latest',\n requiresApiKey: true,\n supportsModels: true,\n supportsEmbeddings: false,\n iconKey: 'xai',\n },\n {\n id: 'mock',\n label: 'Mock (dev)',\n description: this.tx('Local mode for tests without a key.'),\n defaultModel: 'mock-default',\n requiresApiKey: false,\n supportsModels: true,\n supportsEmbeddings: true,\n iconKey: 'mock',\n },\n ];\n }\n\n private applyProviderOptions(): void {\n const options = this.providers.map((provider) => ({\n text: provider.label || provider.id,\n value: provider.id,\n }));\n this.setProviderFieldOptions(options);\n }\n\n private applyEmbeddingProviderOptions(): void {\n const options = this.providers\n .filter((provider) =>\n provider?.supportsEmbeddings !== false || provider?.id === 'openai',\n )\n .map((provider) => ({\n text: provider.label || provider.id,\n value: provider.id,\n }));\n this.setEmbeddingProviderFieldOptions(options);\n }\n\n private setProviderFieldOptions(providerOptions: Array<{ text: string; value: string }>): void {\n const safeProviderName = this.safeName('ai.provider');\n const providerField = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeProviderName);\n if (providerField) {\n (providerField as any).selectOptions = providerOptions;\n }\n }\n\n private setEmbeddingProviderFieldOptions(providerOptions: Array<{ text: string; value: string }>): void {\n const safeProviderName = this.safeName('ai.embedding.provider');\n const providerField = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeProviderName);\n if (providerField) {\n (providerField as any).selectOptions = providerOptions;\n }\n }\n\n private resolveDefaultProvider(): string {\n const preferred = this.providers.find((provider) => provider.id === 'gemini') || this.providers[0];\n return preferred?.id || 'gemini';\n }\n\n private setFieldDefaultValue(safeName: string, value: any): void {\n const field = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeName);\n if (field) {\n (field as any).defaultValue = value;\n }\n }\n\n private updateSelectedProvider(providerId: string): void {\n this.selectedProvider = this.findProvider(providerId) || null;\n }\n\n private updateApiKeyState(providerId: string, apiKey?: string): void {\n const meta = this.findProvider(providerId);\n const requiresKey = meta?.requiresApiKey !== false;\n this.hasApiKey = !requiresKey || !!apiKey || this.hasStoredApiKey;\n }\n\n get embeddingUseSameAsLlm(): boolean {\n return !!(this.currentValues as any)?.[this.safeName('ai.embedding.useSameAsLlm')];\n }\n\n get embeddingDimensionMismatch(): boolean {\n const raw = (this.currentValues as any)?.[this.safeName('ai.embedding.dimensions')];\n if (raw === undefined || raw === null || raw === '') return false;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) return false;\n return parsed !== 768;\n }\n\n get canUseLlmForEmbeddings(): boolean {\n return !!this.selectedProvider?.supportsEmbeddings;\n }\n\n private canAutoRefreshModels(providerId: string, apiKey: string): boolean {\n const meta = this.findProvider(providerId);\n if (meta?.supportsModels === false) return false;\n if (meta?.requiresApiKey === false) return true;\n if (apiKey && apiKey.length > 10) return true;\n return this.hasStoredApiKey;\n }\n\n private ensureDefaultModelSelection(): void {\n const modelSafe = this.safeName('ai.model');\n const current = (this.currentValues as any)[modelSafe];\n if (current) return;\n const fallback = this.selectedProvider?.defaultModel;\n if (!fallback) return;\n this.setFieldDefaultValue(modelSafe, fallback);\n (this.currentValues as any)[modelSafe] = fallback;\n this.updateModelDetails(fallback);\n }\n\n private clearModelSelection(defaultModel?: string): void {\n const modelSafe = this.safeName('ai.model');\n const nextValue = defaultModel || '';\n (this.currentValues as any)[modelSafe] = nextValue;\n this.setFieldDefaultValue(modelSafe, nextValue);\n this.updateModelDetails(nextValue);\n const inst: any = this.aiModelFormRef?.instance as any;\n const ctrl = inst?.form?.get?.(modelSafe);\n if (ctrl) {\n ctrl.setValue(nextValue);\n }\n }\n\n private findProvider(providerId: string): AiProviderCatalogItem | undefined {\n return this.providers.find((provider) => provider.id === providerId);\n }\n\n private setModelFieldOptions(modelOptions: Array<{ text: string; value: string }>): void {\n const safeModelName = this.safeName('ai.model');\n const aiModelField = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeModelName);\n if (aiModelField) {\n (aiModelField as any).selectOptions = modelOptions;\n }\n }\n\n private applyConfigSnapshot(flat: Record<string, any>, opts: { resetForms: boolean }): void {\n this.pathMap = {};\n for (const fm of this.formConfig.fieldMetadata || []) {\n const da: any = (fm as any).dataAttributes || {};\n const path = da.globalPath || fm.name;\n this.pathMap[fm.name] = path;\n const v = this.normalizeFieldValue(path, flat[path]);\n if (v !== undefined) (fm as any).defaultValue = v;\n }\n this.initialValues = {};\n for (const safe of Object.keys(this.pathMap)) {\n const path = this.pathMap[safe];\n const v = this.normalizeFieldValue(path, flat[path]);\n if (v !== undefined) this.initialValues[safe] = v;\n }\n this.currentValues = { ...this.initialValues };\n this.apiKeyLast4 = flat['ai.apiKeyLast4'] || null;\n this.hasStoredApiKey = !!flat['ai.hasApiKey'] || !!this.apiKeyLast4;\n\n if (opts.resetForms) {\n const resetValues: Record<string, any> = {};\n for (const safe of Object.keys(this.pathMap)) {\n if (safe in this.initialValues) {\n resetValues[safe] = this.initialValues[safe];\n } else {\n resetValues[safe] = null;\n }\n }\n this.patchFormsWithValues(resetValues);\n this.bootstrappedSections = new Set(this.allSections);\n this.isDirty$.next(false);\n }\n }\n\n private patchFormsWithValues(values: Record<string, any>): void {\n for (const ref of this.componentRefs.values()) {\n const inst: any = ref?.instance as any;\n const form = inst?.form;\n if (form?.patchValue) {\n try {\n form.patchValue(values, { emitEvent: false });\n } catch { }\n }\n }\n }\n\n private refreshAiStateAfterConfig(): void {\n const providerSafe = this.safeName('ai.provider');\n const apiKeySafe = this.safeName('ai.apiKey');\n const selectedProvider = (this.currentValues as any)[providerSafe] || this.resolveDefaultProvider();\n if (selectedProvider && !(this.currentValues as any)[providerSafe]) {\n (this.currentValues as any)[providerSafe] = selectedProvider;\n if (!(this.initialValues as any)[providerSafe]) {\n (this.initialValues as any)[providerSafe] = selectedProvider;\n }\n this.setFieldDefaultValue(providerSafe, selectedProvider);\n }\n\n this.updateSelectedProvider(selectedProvider);\n this.updateApiKeyState(selectedProvider, (this.currentValues as any)[apiKeySafe]);\n this.syncEmbeddingDefaults(false);\n this.ensureEmbeddingModelDefaults(false);\n this.ensureEmbeddingDimensionsDefaults(false);\n this.updateModelDetails((this.currentValues as any)[this.safeName('ai.model')] || '');\n }\n\n private async refreshStoredConfigState(): Promise<void> {\n try {\n this.hasStoredGlobalConfig = await this.admin.hasStoredConfig();\n } catch {\n this.hasStoredGlobalConfig = false;\n }\n this.configSourceLabel = this.hasStoredGlobalConfig\n ? this.tx('Saved configuration (UI) - overrides server defaults')\n : this.tx('Server defaults (env vars)');\n }\n\n async clearStoredConfig(): Promise<void> {\n if (this.isClearingGlobalConfig) return;\n this.isClearingGlobalConfig = true;\n try {\n await this.admin.clearStoredConfig();\n const cfg = this.admin.getEffectiveConfig();\n const flat = this.flatten(cfg);\n this.applyConfigSnapshot(flat, { resetForms: true });\n this.aiTestResult = null;\n this.refreshAiStateAfterConfig();\n await this.refreshStoredConfigState();\n try { this.snack.open(this.tx('Global config cleared. Using server defaults.'), undefined, { duration: 2500 }); } catch { }\n } catch (err) {\n try { this.snack.open(this.tx('Failed to clear global config.'), undefined, { duration: 4000 }); } catch { }\n } finally {\n this.isClearingGlobalConfig = false;\n this.cdr.detectChanges();\n }\n }\n\n private syncEmbeddingDefaults(markDirty = true): void {\n const useSameSafe = this.safeName('ai.embedding.useSameAsLlm');\n const embeddingProviderSafe = this.safeName('ai.embedding.provider');\n const embeddingApiKeySafe = this.safeName('ai.embedding.apiKey');\n const useSame = !!(this.currentValues as any)[useSameSafe];\n if (!useSame) return;\n if (!this.canUseLlmForEmbeddings) {\n this.setEmbeddingValue(useSameSafe, false, markDirty);\n return;\n }\n const llmProvider = (this.currentValues as any)[this.safeName('ai.provider')] || this.resolveDefaultProvider();\n const llmApiKey = (this.currentValues as any)[this.safeName('ai.apiKey')] || '';\n this.setEmbeddingValue(embeddingProviderSafe, llmProvider, markDirty);\n this.setEmbeddingValue(embeddingApiKeySafe, llmApiKey, markDirty);\n }\n\n private ensureEmbeddingModelDefaults(markDirty = true): void {\n const providerSafe = this.safeName('ai.embedding.provider');\n const modelSafe = this.safeName('ai.embedding.model');\n const provider = (this.currentValues as any)[providerSafe];\n const model = (this.currentValues as any)[modelSafe];\n if (provider === 'openai' && !model) {\n this.setEmbeddingValue(\n modelSafe,\n this.embeddingModelOptions[0]?.value || 'text-embedding-3-large',\n markDirty,\n );\n }\n }\n\n private ensureEmbeddingDimensionsDefaults(markDirty = true): void {\n const providerSafe = this.safeName('ai.embedding.provider');\n const dimensionsSafe = this.safeName('ai.embedding.dimensions');\n const provider = (this.currentValues as any)[providerSafe];\n const dimensions = (this.currentValues as any)[dimensionsSafe];\n if (provider === 'openai' && (dimensions === undefined || dimensions === null || dimensions === '')) {\n this.setEmbeddingValue(dimensionsSafe, 768, markDirty);\n }\n }\n\n useLlmForEmbeddings(): void {\n if (!this.canUseLlmForEmbeddings) return;\n const useSameSafe = this.safeName('ai.embedding.useSameAsLlm');\n this.setEmbeddingValue(useSameSafe, true);\n this.syncEmbeddingDefaults();\n }\n\n private createAiModelForm(): void {\n if (!this.dynamicFormCtor || !this.hostAiModel) return;\n const cfg = this.buildSectionConfig('ai-model');\n if (!cfg.sections?.length) return;\n try {\n // Apply pending options to metadata before creating\n if (this.pendingModelOptions.length) {\n this.setModelFieldOptions(this.pendingModelOptions);\n }\n const ref = this.hostAiModel.createComponent(this.dynamicFormCtor);\n ref.setInput('config', cfg);\n ref.setInput('mode', 'edit');\n ref.setInput('enableCustomization', false);\n const inst: any = ref.instance as any;\n inst.initializationStatus = 'success';\n inst.isLoading = false;\n try {\n if (typeof inst.buildFormFromConfig === 'function') inst.buildFormFromConfig();\n } catch (err) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] buildFormFromConfig failed',\n this.buildLogOptions(\n { sectionId: 'ai-model', error: err },\n {\n context: { actionId: 'section.ai-model.build-form' },\n dedupeKey: 'global-config-editor:build-form-failed:ai-model',\n },\n ),\n );\n }\n try { inst.onSubmit = () => { }; } catch { }\n try { ref.changeDetectorRef.detectChanges(); } catch { }\n if (inst?.valueChange?.subscribe) {\n inst.valueChange.subscribe((ev: FormValueChangeEvent) => this.onValueChange('ai-model', ev));\n }\n this.componentRefs.set('ai-model', ref);\n this.aiModelFormRef = ref;\n this.updateModelDetails(this.currentValues[this.safeName('ai.model')] || '');\n this.destroyRef.onDestroy(() => { try { ref.destroy(); } catch { } });\n } catch (err) {\n this.logger.error(\n '[GlobalConfigEditor] Failed to create AI model form',\n this.buildLogOptions(\n { error: err },\n { context: { actionId: 'section.ai-model.create' } },\n ),\n );\n }\n }\n\n private setEmbeddingValue(safeName: string, value: any, markDirty = true): void {\n (this.currentValues as any)[safeName] = value;\n const inst: any = this.aiEmbeddingFormRef?.instance as any;\n const ctrl = inst?.form?.get?.(safeName);\n if (ctrl) {\n ctrl.setValue(value);\n }\n if (markDirty) {\n this.isDirty$.next(!this.shallowEqual(this.currentValues, this.initialValues));\n }\n }\n\n private recreateAiModelForm(): void {\n if (this.aiModelFormRef) {\n try { this.aiModelFormRef.destroy(); } catch { }\n this.componentRefs.delete('ai-model');\n this.aiModelFormRef = null;\n }\n this.createAiModelForm();\n }\n\n private updateModelDetails(modelName: string) {\n const model = this.availableModels.find(m => m.name.endsWith(modelName));\n if (model) {\n const formatLimit = (n?: number) => n ? (n >= 1000 ? (n / 1000).toFixed(0) + 'k' : n) : 'N/A';\n this.selectedModelDetails = this.tx('Model: {{model}} | Tokens (in/out): {{in}}/{{out}} | Methods: {{methods}}', { model: model.displayName || modelName, in: formatLimit(model.inputTokenLimit), out: formatLimit(model.outputTokenLimit), methods: model.supportedGenerationMethods?.join(', ') || 'N/A' });\n } else {\n this.selectedModelDetails = this.tx('No model details available.');\n }\n }\n\n // SettingsPanel expects these methods\n reset(): void {\n const flat: Record<string, any> = {};\n for (const safe of Object.keys(this.initialValues)) flat[safe] = this.initialValues[safe];\n for (const fm of this.formConfig.fieldMetadata || []) {\n const v = flat[fm.name];\n (fm as any).defaultValue = v;\n }\n this.currentValues = { ...this.initialValues };\n this.isDirty$.next(false);\n }\n\n getSettingsValue(): any {\n const flat = this.buildChangedValues();\n return this.toNested(flat);\n }\n\nasync onSave(): Promise<any> {\n const partial = this.getSettingsValue();\n const validationMessage = this.validateCompactTableAppearancePayload(partial);\n if (validationMessage) {\n try { this.snack.open(validationMessage, undefined, { duration: 5000 }); } catch { }\n return undefined;\n }\n this.isBusy$.next(true);\n try {\n await this.admin.save(partial);\n // Update baseline after save\n this.initialValues = { ...this.currentValues };\n this.isDirty$.next(false);\n try { this.snack.open(this.tx('Settings saved'), undefined, { duration: 2000 }); } catch { }\n return partial;\n } catch (err) {\n const message = this.resolveSaveErrorMessage(err);\n try { this.snack.open(message, undefined, { duration: 4000 }); } catch { }\n return undefined;\n } finally {\n this.isBusy$.next(false);\n }\n }\n\n async refreshModels(force = false, silent = false): Promise<void> {\n const apiKey = (this.currentValues as any)[this.safeName('ai.apiKey')] || '';\n const provider = (this.currentValues as any)[this.safeName('ai.provider')] || this.resolveDefaultProvider();\n const meta = this.findProvider(provider);\n if (meta?.supportsModels === false) {\n if (!silent) {\n this.aiTestResult = { success: false, message: this.tx('This provider has no model catalog.') };\n this.cdr.detectChanges();\n }\n return;\n }\n const requiresKey = meta?.requiresApiKey !== false;\n const hasKey = !!apiKey || this.hasStoredApiKey || !requiresKey;\n if (requiresKey && !hasKey) {\n this.aiTestResult = { success: false, message: this.tx('Enter an API key to fetch models.') };\n this.cdr.detectChanges();\n return;\n }\n\n if (!silent) {\n this.isRefetchingModels = true;\n this.cdr.detectChanges();\n }\n\n let modelOptions: Array<{ text: string; value: string }> = [];\n\n try {\n const request: any = { provider };\n if (apiKey) request.apiKey = apiKey;\n const response: any = await firstValueFrom(this.aiApi.listModels(request) as any);\n if (!response?.success) {\n throw new Error(this.tx('Error fetching models.'));\n }\n const models: AiModel[] = response.models || [];\n this.availableModels = models; // Store available models\n\n const formatLimit = (n?: number) => n ? (n >= 1000 ? (n / 1000).toFixed(0) + 'k' : n) : '?';\n\n modelOptions = (models || [])\n .filter((m) => m.name)\n .map((m) => {\n const shortName = m.name.split('/').pop() || m.name;\n const details = `${formatLimit(m.inputTokenLimit)} in / ${formatLimit(m.outputTokenLimit)} out`;\n return {\n text: `${m.displayName || shortName} (${details})`,\n value: shortName\n };\n });\n\n if (modelOptions.length || force) {\n this.applyModelOptions(modelOptions, silent);\n }\n } catch (error: any) {\n this.logger.error(\n '[GlobalConfigEditor] Error fetching models',\n this.buildLogOptions(\n { error, provider },\n { context: { actionId: 'models.fetch' } },\n ),\n );\n this.aiTestResult = { success: false, message: this.tx('Error fetching models.') };\n if (!silent) {\n this.snack.open(this.tx('Error fetching models. Check your API key.'), this.tx('Close'), { duration: 5000 });\n }\n } finally {\n this.logger.debug(\n '[GlobalConfigEditor] refreshModels complete.',\n this.buildLogOptions(\n { modelOptionsCount: modelOptions?.length ?? 0, hasAiModelFormRef: !!this.aiModelFormRef },\n {\n context: { actionId: 'models.refresh' },\n throttleKey: 'global-config-editor:refresh-models-complete',\n },\n ),\n );\n this.isRefetchingModels = false;\n this.cdr.detectChanges();\n }\n }\n\n // New method to apply model options to the form\n private applyModelOptions(modelOptions: Array<{ text: string; value: string }>, silent = false): void {\n // Store if form ref not ready yet\n if (!this.aiModelFormRef) {\n this.pendingModelOptions = modelOptions; // Store for later application\n this.logger.warnOnce(\n '[GlobalConfigEditor] aiModelFormRef not ready. Storing model options.',\n this.buildLogOptions(\n { modelOptionsCount: modelOptions.length },\n {\n context: { actionId: 'models.apply-options' },\n dedupeKey: 'global-config-editor:ai-model-form-ref-not-ready',\n },\n ),\n );\n this.ensureAiModelForm();\n return;\n }\n\n this.pendingModelOptions = modelOptions;\n this.setModelFieldOptions(modelOptions);\n this.ensureDefaultModelSelection();\n this.recreateAiModelForm();\n\n if (!silent) {\n try { this.snack.open(this.tx('Model list updated ({{count}} models)', { count: modelOptions.length }), undefined, { duration: 3000 }); } catch { }\n }\n this.pendingModelOptions = [];\n }\n\n async testAiConnection(): Promise<void> {\n this.isTestingAi = true;\n this.aiTestResult = null;\n this.cdr.detectChanges(); // Force update to show spinner\n\n // Get current value from form (even if not saved)\n const apiKey = (this.currentValues as any)[this.safeName('ai.apiKey')] || '';\n const provider = (this.currentValues as any)[this.safeName('ai.provider')] || this.resolveDefaultProvider();\n const meta = this.findProvider(provider);\n const selectedModel = (this.currentValues as any)[this.safeName('ai.model')] || meta?.defaultModel || 'gemini-2.0-flash';\n\n const requiresKey = meta?.requiresApiKey !== false;\n const hasKey = !!apiKey || this.hasStoredApiKey || !requiresKey;\n if (requiresKey && !hasKey) {\n this.aiTestResult = { success: false, message: this.tx('Enter an API key to test.') };\n this.isTestingAi = false;\n this.cdr.detectChanges();\n return;\n }\n\n try {\n const request: any = { provider, model: selectedModel };\n if (apiKey) request.apiKey = apiKey;\n const response: any = await firstValueFrom(\n this.aiApi.testProvider(request) as any,\n );\n if (!response?.success) {\n throw new Error(this.tx('Failed to test connection.'));\n }\n this.aiTestResult = { success: true, message: this.tx('Connection established successfully!') };\n this.hasApiKey = true; // Garantir desbloqueio da seção de modelo após sucesso\n // Após validar a chave, já buscar a lista de modelos para preencher o select\n await this.refreshModels(true);\n } catch (err: any) {\n this.logger.error(\n '[GlobalConfigEditor] AI Connection Test Error',\n this.buildLogOptions(\n { error: err, provider, model: selectedModel },\n { context: { actionId: 'provider.test-connection' } },\n ),\n );\n this.aiTestResult = { success: false, message: this.tx('Failed to test connection.') };\n } finally {\n this.isTestingAi = false;\n this.cdr.detectChanges(); // Force update to hide spinner\n }\n }\n\n private buildLogOptions(\n data?: unknown,\n options: Partial<LoggerLogOptions> = {},\n ): LoggerLogOptions {\n return {\n ...options,\n context: {\n ...this.logContext,\n ...(options.context ?? {}),\n },\n data,\n };\n }\n\n // ===== Helpers de UX para ícones de Dialog (variants) =====\n private safeName(path: string): string {\n return path.replace(/[^a-zA-Z0-9_]/g, '_');\n }\n\n tx(\n text: string,\n params?: Record<string, string | number | boolean | null | undefined>,\n ): string {\n const normalized = normalizeMojibakeText(text);\n return this.i18n.t(normalized, params, normalized, PRAXIS_SETTINGS_PANEL_I18N_NAMESPACE);\n }\n\nprivate buildChangedValues(): Record<string, any> {\n const out: Record<string, any> = {};\n for (const [safe, value] of Object.entries(this.currentValues)) {\n const path = this.pathMap[safe] || safe;\n const normalizedValue = this.normalizeFieldValue(path, value);\n const normalizedInitial = this.normalizeFieldValue(path, this.initialValues[safe]);\n if (!this.shouldIncludeField(normalizedInitial, normalizedValue)) continue;\n out[path] = normalizedValue;\n }\n return out;\n}\n\n private shouldIncludeField(initial: any, current: any): boolean {\n if (initial === undefined) {\n if (current === null || current === undefined) return false;\n if (typeof current === 'string' && current.trim() === '') return false;\n if (Array.isArray(current) && current.length === 0) return false;\n }\n return initial !== current;\n }\n\n private resolveSaveErrorMessage(err: any): string {\n return this.tx('Save failed.');\n }\n private normalizeFieldValue(path: string, value: any): any {\n if (typeof value !== 'string') return value;\n if (!TABLE_COMPACT_SPACING_PATHS.has(path) && !TABLE_COMPACT_FONT_SIZE_PATHS.has(path)) {\n return value;\n }\n return value.trim().replace(/\\s+/g, ' ');\n }\n\n private validateCompactTableAppearancePayload(partial: any): string | null {\n const appearance = partial?.table?.appearance;\n if (!appearance || typeof appearance !== 'object') return null;\n\n const checks: Array<{ path: string; value: unknown; regex: RegExp; example: string }> = [\n {\n path: 'table.appearance.spacing.cellPadding',\n value: appearance?.spacing?.cellPadding,\n regex: TABLE_COMPACT_SPACING_REGEX,\n example: '6px 12px',\n },\n {\n path: 'table.appearance.spacing.headerPadding',\n value: appearance?.spacing?.headerPadding,\n regex: TABLE_COMPACT_SPACING_REGEX,\n example: '8px 12px',\n },\n {\n path: 'table.appearance.typography.fontSize',\n value: appearance?.typography?.fontSize,\n regex: TABLE_COMPACT_FONT_SIZE_REGEX,\n example: '13px',\n },\n {\n path: 'table.appearance.typography.headerFontSize',\n value: appearance?.typography?.headerFontSize,\n regex: TABLE_COMPACT_FONT_SIZE_REGEX,\n example: '13px',\n },\n ];\n\n for (const check of checks) {\n if (typeof check.value !== 'string') continue;\n const normalized = this.normalizeFieldValue(check.path, check.value);\n if (!normalized) continue;\n if (!check.regex.test(normalized)) {\n return `Invalid value in ${TABLE_COMPACT_FIELD_LABELS[check.path]}. Use a simple CSS string, such as ${check.example}.`;\n }\n }\n\n return null;\n }\n\n getVariantIcon(key: string): string | undefined {\n const safe = this.safeName(`dialog.variants.${key}.icon`);\n return (this.currentValues as any)[safe];\n }\n async pickVariantIcon(key: string): Promise<void> {\n const safe = this.safeName(`dialog.variants.${key}.icon`);\n const current = (this.currentValues as any)[safe] || '';\n // Melhor UX: usar MatDialog (modal) em vez do Settings Panel para o picker\n const res = await this.iconPicker.openDialog({ value: current });\n if (res === undefined) return; // cancel\n this.setDialogControlValue(safe, res);\n }\n clearVariantIcon(key: string): void {\n const safe = this.safeName(`dialog.variants.${key}.icon`);\n this.setDialogControlValue(safe, '');\n }\n private setDialogControlValue(safeControlName: string, val: string): void {\n const inst: any = this.dialogFormInst as any;\n try {\n const ctrl = inst?.form?.get?.(safeControlName);\n if (ctrl) {\n ctrl.setValue(val);\n return;\n }\n } catch { }\n // Fallback: atualiza cache local e marca como sujo\n (this.currentValues as any)[safeControlName] = val;\n this.isDirty$.next(!this.shallowEqual(this.currentValues, this.initialValues));\n }\n\n\n\n private withDefaults(config: FormConfig, values: Record<string, any>): FormConfig {\n const next = JSON.parse(JSON.stringify(config)) as FormConfig;\n for (const section of next.sections || []) {\n for (const row of section.rows || []) {\n for (const col of row.columns || []) {\n for (const field of col.fields || []) {\n const key = (field as any).name as string;\n if (!key) continue;\n const v = values[key];\n if (v !== undefined) {\n (field as any).defaultValue = v;\n }\n }\n }\n }\n }\n return next;\n }\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\n private flatten(obj: any, prefix = ''): Record<string, any> {\n const out: Record<string, any> = {};\n if (!obj || typeof obj !== 'object') return out;\n for (const key of Object.keys(obj)) {\n const val = (obj as any)[key];\n const path = prefix ? `${prefix}.${key}` : key;\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n Object.assign(out, this.flatten(val, path));\n } else {\n out[path] = val;\n }\n }\n return out;\n }\n\n private toNested(flat: Record<string, any>): any {\n const out: any = {};\n for (const k of Object.keys(flat)) {\n const v = flat[k];\n if (v === undefined) continue;\n this.setByPath(out, k, v);\n }\n return out;\n }\n\n private shallowEqual(a: Record<string, any>, b: Record<string, any>): boolean {\n const ak = Object.keys(a);\n const bk = Object.keys(b);\n if (ak.length !== bk.length) return false;\n for (const k of ak) {\n if (a[k] !== b[k]) return false;\n }\n return true;\n }\n}\n\n\n\n\n\n\n","import { SettingsPanelService } from '../settings-panel.service';\nimport { GlobalConfigEditorComponent } from './global-config-editor.component';\n\nexport type OpenGlobalConfigOptions = {\n id?: string;\n title?: string;\n titleIcon?: string;\n tx?: (text: string, params?: Record<string, string | number | boolean | null | undefined>) => string;\n};\n\n/**\n * Helper to open the Global Config Editor in a host application.\n * Usage:\n * openGlobalConfigEditor(settings);\n */\nexport function openGlobalConfigEditor(\n settings: SettingsPanelService,\n opts?: OpenGlobalConfigOptions,\n): void {\n settings.open({\n id: opts?.id ?? 'global-config',\n title: opts?.title,\n titleIcon: opts?.titleIcon ?? 'tune',\n content: { component: GlobalConfigEditorComponent, inputs: {} },\n });\n}\n","/**\n * Capabilities catalog for SettingsPanelConfig.\n */\n\nimport type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n AiValueKind,\n} from '@praxisui/core';\n\ndeclare module '@praxisui/core' {\n interface AiCapabilityCategoryMap {\n content: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nexport const SETTINGS_PANEL_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.0',\n enums: {},\n targets: ['praxis-global-config-editor', 'praxis-settings-panel'],\n notes: [\n 'SettingsPanelConfig descreve o painel e o componente embutido (content.component).',\n 'content.component deve ser uma referencia de classe Angular fornecida pelo host.',\n ],\n capabilities: [\n { path: 'id', category: 'identity', valueKind: 'string', description: 'ID do painel.' },\n { path: 'title', category: 'identity', valueKind: 'string', description: 'Titulo do painel.' },\n { path: 'titleIcon', category: 'identity', valueKind: 'string', description: 'Icone do titulo (Material icon name).' },\n { path: 'expanded', category: 'behavior', valueKind: 'boolean', description: 'Estado inicial expandido.' },\n { path: 'content', category: 'content', valueKind: 'object', description: 'Conteudo do painel.' },\n {\n path: 'content.component',\n category: 'content',\n valueKind: 'object',\n description: 'Referencia do componente Angular a ser renderizado.',\n critical: true,\n safetyNotes: 'Nao gerar dinamicamente; o host deve fornecer a referencia.',\n },\n {\n path: 'content.inputs',\n category: 'content',\n valueKind: 'object',\n description: 'Inputs passados para o componente de conteudo.',\n },\n ],\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","CORE_SETTINGS_PANEL_DATA","i1","TABLE_COMPACT_LENGTH_TOKEN","i1.GlobalConfigAdminService","i5","i6","i7","i8"],"mappings":"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"}