@praxisui/crud 9.0.0-beta.41 → 9.0.0-beta.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-06T18:00:15.329Z",
3
+ "generatedAt": "2026-07-07T19:18:40.145Z",
4
4
  "packageName": "@praxisui/crud",
5
- "packageVersion": "9.0.0-beta.41",
5
+ "packageVersion": "9.0.0-beta.43",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 2,
@@ -3096,6 +3096,17 @@
3096
3096
  "description": "Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.",
3097
3097
  "safetyNotes": "Prefira valores simples como { lg: 3, md: 2, sm: 1 }; nao copie layout manual para sections."
3098
3098
  },
3099
+ {
3100
+ "path": "inputs.layoutPolicy.detailSummary.widthPrecedence",
3101
+ "category": "inputs",
3102
+ "valueKind": "enum",
3103
+ "allowedValues": [
3104
+ "schema",
3105
+ "summary"
3106
+ ],
3107
+ "description": "Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.",
3108
+ "safetyNotes": "Default schema preserva x-ui.width; use summary apenas quando columns/responsiveColumns devem vencer larguras genericas do schema nessa surface."
3109
+ },
3099
3110
  {
3100
3111
  "path": "inputs.fieldIconPolicy",
3101
3112
  "category": "inputs",
@@ -3580,9 +3591,9 @@
3580
3591
  {
3581
3592
  "chunkIndex": 1,
3582
3593
  "chunkKind": "capabilities",
3583
- "content": "Component Capabilities:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\nCapability Notes:\n - Este catalogo descreve inputs e outputs do componente.\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.\n",
3594
+ "content": "Component Capabilities:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\nCapability Notes:\n - Este catalogo descreve inputs e outputs do componente.\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.\n",
3584
3595
  "sourcePointer": "praxis-ui-angular/projects/praxis-crud/src/lib/dynamic-form-dialog-host.metadata.ts",
3585
- "contentHash": "c52662f0b14cddf4b6a46deb53614f17157bf86146923eee42ee4605fb69a943",
3596
+ "contentHash": "380a7bbecc3bfeb2df0eaa74f9e31d53f115029aafe03b9353d7cc09ce763460",
3586
3597
  "sourceKind": "component_definition",
3587
3598
  "sourceId": "praxis-dynamic-form-dialog-host",
3588
3599
  "corpusVersion": "1.0.0"
@@ -86,7 +86,6 @@ class CrudLauncherService {
86
86
  // Carregar overrides de CRUD (se houver) e mesclar em uma cópia local
87
87
  const merged = await this.mergeCrudOverrides(metadata, action, componentKeyId || undefined);
88
88
  const mode = this.resolveOpenMode(merged.action, merged.metadata);
89
- console.debug('[CRUD:Launcher] mode=', mode, 'action=', action);
90
89
  if (mode === 'route') {
91
90
  if (!merged.action.route) {
92
91
  throw new Error(`Route not provided for action ${merged.action.action}`);
@@ -118,13 +117,6 @@ class CrudLauncherService {
118
117
  return { mode };
119
118
  }
120
119
  const modalCfg = { ...(merged.metadata.defaults?.modal || {}) };
121
- console.debug('[CRUD:Launcher] opening dialog with:', {
122
- action: merged.action.action,
123
- formId: actionForLaunch.formId,
124
- inputs,
125
- modalCfg,
126
- resourcePath: merged.metadata.resource?.path ?? merged.metadata.table?.resourcePath,
127
- });
128
120
  const drawerMode = mode === 'drawer';
129
121
  const panelClasses = mergeClassList(['pfx-dialog-pane', drawerMode ? 'pfx-drawer-pane' : 'pfx-dialog-frosted'], modalCfg.panelClass);
130
122
  // Backdrop style presets
@@ -285,11 +277,30 @@ class CrudLauncherService {
285
277
  const formId = this.buildInferredFormId(action, metadata);
286
278
  return formId ? { ...action, formId } : action;
287
279
  }
280
+ resolveSubmitUrlTemplate(submitUrl, row, metadata) {
281
+ const template = String(submitUrl || '').trim();
282
+ if (!template || !template.includes('{')) {
283
+ return template;
284
+ }
285
+ const idField = String(metadata.resource?.idField ?? 'id');
286
+ const rowId = row?.[idField];
287
+ if (rowId == null) {
288
+ return template;
289
+ }
290
+ const encodedId = encodeURIComponent(String(rowId));
291
+ const idFieldPattern = new RegExp(`\\{${escapeRegExp(idField)}\\}`, 'g');
292
+ return template
293
+ .replace(idFieldPattern, encodedId)
294
+ .replace(/\{id\}/g, encodedId)
295
+ .replace(/\{resourceId\}/g, encodedId);
296
+ }
288
297
  resolveActionFormContract(action, row, metadata, runtime) {
289
298
  if (this.isExplicitCrudAction(action)) {
290
299
  return {
291
300
  schemaUrl: action.form?.schemaUrl ?? null,
292
- submitUrl: action.form?.submitUrl ?? null,
301
+ submitUrl: action.form?.submitUrl
302
+ ? this.resolveSubmitUrlTemplate(action.form.submitUrl, row, metadata)
303
+ : null,
293
304
  submitMethod: action.form?.submitMethod ?? null,
294
305
  apiEndpointKey: action.form?.apiEndpointKey ?? null,
295
306
  apiUrlEntry: action.form?.apiUrlEntry ?? null,
@@ -431,6 +442,9 @@ function mergeClassList(base, extra) {
431
442
  ...Object.keys(extra).filter((className) => !!extra[className]),
432
443
  ];
433
444
  }
445
+ function escapeRegExp(value) {
446
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
447
+ }
434
448
  function toCrudDrawerResult(value) {
435
449
  if (!value || typeof value !== 'object') {
436
450
  return undefined;
@@ -612,6 +626,7 @@ function normalizeCrudAction(action) {
612
626
  apiEndpointKey: trimString(action.form.apiEndpointKey) || undefined,
613
627
  apiUrlEntry: action.form.apiUrlEntry || undefined,
614
628
  initialValue: normalizeInitialValue(action.form.initialValue),
629
+ layoutPolicy: action.form.layoutPolicy ?? undefined,
615
630
  }
616
631
  : undefined,
617
632
  });
@@ -3575,6 +3590,7 @@ class PraxisCrudComponent {
3575
3590
  collectionCapabilitiesResolvedHref = null;
3576
3591
  collectionCapabilitiesRequestSeq = 0;
3577
3592
  currentAuthoringDocument;
3593
+ selectedRow = null;
3578
3594
  getResourceDiscovery() {
3579
3595
  const assigned = this.resourceDiscovery;
3580
3596
  return assigned ?? (this.resourceDiscoveryInstance ??= this.injector.get(ResourceDiscoveryService));
@@ -3601,11 +3617,27 @@ class PraxisCrudComponent {
3601
3617
  catch { }
3602
3618
  }
3603
3619
  onTableRowClick(event) {
3620
+ const row = this.extractRowFromEvent(event);
3621
+ if (row) {
3622
+ this.selectedRow = row;
3623
+ }
3604
3624
  this.rowClick.emit(event);
3605
3625
  }
3606
3626
  onTableSelectionChange(event) {
3627
+ this.selectedRow = this.extractSelectedRowFromEvent(event);
3607
3628
  this.selectionChange.emit(event);
3608
3629
  }
3630
+ async onBulkAction(event) {
3631
+ const action = String(event?.action || '').trim();
3632
+ if (!action) {
3633
+ return;
3634
+ }
3635
+ const row = this.extractSelectedRowFromBulkAction(event);
3636
+ if (row) {
3637
+ this.selectedRow = row;
3638
+ }
3639
+ await this.onAction(action, row ?? undefined, event);
3640
+ }
3609
3641
  ngOnChanges(changes) {
3610
3642
  if (!changes['metadata'] && !changes['context']) {
3611
3643
  return;
@@ -3643,33 +3675,41 @@ class PraxisCrudComponent {
3643
3675
  async onAction(action, row, runtimeEvent) {
3644
3676
  try {
3645
3677
  document.activeElement?.blur();
3646
- let actionMeta = this.resolvedMetadata.actions?.find((candidate) => candidate.action === action);
3678
+ const normalizedAction = this.normalizeCrudActionName(action);
3679
+ const contextualRow = row ?? this.resolveSelectedRowForAction(normalizedAction);
3680
+ let actionMeta = this.resolvedMetadata.actions?.find((candidate) => candidate.action === normalizedAction);
3681
+ if (!actionMeta && normalizedAction !== action) {
3682
+ actionMeta = this.resolvedMetadata.actions?.find((candidate) => candidate.action === action);
3683
+ }
3647
3684
  if (!actionMeta) {
3648
- const ctxAction = this.tableCrudContext?.actions?.find((candidate) => candidate.action === action);
3685
+ const ctxAction = this.tableCrudContext?.actions?.find((candidate) => candidate.action === normalizedAction || candidate.action === action);
3649
3686
  if (ctxAction) {
3650
3687
  actionMeta = {
3651
- action: ctxAction.action,
3688
+ action: this.normalizeCrudActionName(ctxAction.action),
3652
3689
  openMode: ctxAction.openMode,
3653
3690
  formId: ctxAction.formId,
3654
3691
  route: ctxAction.route,
3655
3692
  };
3656
3693
  }
3657
3694
  else {
3658
- actionMeta = { action };
3695
+ actionMeta = { action: normalizedAction };
3659
3696
  }
3660
3697
  }
3661
- const effectiveAction = (actionMeta || { action });
3698
+ const effectiveAction = {
3699
+ ...(actionMeta || { action: normalizedAction }),
3700
+ action: this.normalizeCrudActionName(actionMeta?.action || normalizedAction),
3701
+ };
3662
3702
  if (!this.hasExplicitOpenBinding(effectiveAction)) {
3663
- const openedByDiscovery = await this.tryOpenDiscoveredCrudSurface(action, row, runtimeEvent);
3703
+ const openedByDiscovery = await this.tryOpenDiscoveredCrudSurface(effectiveAction.action, contextualRow, runtimeEvent);
3664
3704
  if (openedByDiscovery) {
3665
3705
  return;
3666
3706
  }
3667
- const handledByWorkflowAction = await this.tryOpenDiscoveredWorkflowAction(action, row, runtimeEvent);
3707
+ const handledByWorkflowAction = await this.tryOpenDiscoveredWorkflowAction(effectiveAction.action, contextualRow, runtimeEvent);
3668
3708
  if (handledByWorkflowAction) {
3669
3709
  return;
3670
3710
  }
3671
3711
  }
3672
- const handledByDelete = await this.tryHandleCanonicalDeleteAction(effectiveAction, row);
3712
+ const handledByDelete = await this.tryHandleCanonicalDeleteAction(effectiveAction, contextualRow);
3673
3713
  if (handledByDelete) {
3674
3714
  return;
3675
3715
  }
@@ -3680,7 +3720,7 @@ class PraxisCrudComponent {
3680
3720
  drawerCloseEmitted = true;
3681
3721
  this.afterClose.emit();
3682
3722
  };
3683
- const { mode, ref } = await this.launcher.launch(effectiveAction, row, this.resolvedMetadata, this.componentKeyId(), {
3723
+ const { mode, ref } = await this.launcher.launch(effectiveAction, contextualRow, this.resolvedMetadata, this.componentKeyId(), {
3684
3724
  onClose: () => emitDrawerClose(),
3685
3725
  onResult: (result) => {
3686
3726
  emitDrawerClose();
@@ -3701,7 +3741,7 @@ class PraxisCrudComponent {
3701
3741
  capabilities: effectiveAction.action === 'create'
3702
3742
  ? this.collectionCapabilities
3703
3743
  : this.collectionCapabilities,
3704
- links: this.resolveCrudRuntimeLinks(effectiveAction.action, row),
3744
+ links: this.resolveCrudRuntimeLinks(effectiveAction.action, contextualRow),
3705
3745
  });
3706
3746
  this.afterOpen.emit({ mode, action: effectiveAction.action });
3707
3747
  if (mode === 'drawer') {
@@ -3952,11 +3992,47 @@ class PraxisCrudComponent {
3952
3992
  }
3953
3993
  }
3954
3994
  resolveQueryContext(meta) {
3995
+ if (Array.isArray(meta?.data) && this.resolveResourcePath(meta).length === 0) {
3996
+ return null;
3997
+ }
3955
3998
  return this.isRecord(meta?.queryContext) ? meta.queryContext : null;
3956
3999
  }
3957
4000
  resolveFilterCriteria(meta) {
3958
4001
  return this.isRecord(meta?.filterCriteria) ? { ...meta.filterCriteria } : {};
3959
4002
  }
4003
+ extractRowFromEvent(event) {
4004
+ if (!this.isRecord(event)) {
4005
+ return null;
4006
+ }
4007
+ const row = event['row'];
4008
+ return this.isRecord(row) ? row : null;
4009
+ }
4010
+ extractSelectedRowFromEvent(event) {
4011
+ if (!this.isRecord(event)) {
4012
+ return null;
4013
+ }
4014
+ const selection = event['selection'];
4015
+ if (Array.isArray(selection)) {
4016
+ const first = selection[0];
4017
+ return this.isRecord(first) ? first : null;
4018
+ }
4019
+ const row = event['row'];
4020
+ if (this.isRecord(row)) {
4021
+ return row;
4022
+ }
4023
+ return null;
4024
+ }
4025
+ extractSelectedRowFromBulkAction(event) {
4026
+ const first = Array.isArray(event?.rows) ? event.rows[0] : null;
4027
+ return this.isRecord(first) ? first : null;
4028
+ }
4029
+ resolveSelectedRowForAction(action) {
4030
+ const normalized = String(action || '').trim().toLowerCase();
4031
+ if (!normalized || normalized === 'create' || normalized === 'add' || normalized === 'new') {
4032
+ return undefined;
4033
+ }
4034
+ return this.selectedRow ?? undefined;
4035
+ }
3960
4036
  async tryOpenDiscoveredCrudSurface(action, row, runtimeEvent) {
3961
4037
  const normalizedAction = String(action || '').trim().toLowerCase();
3962
4038
  if (!this.surfaceService) {
@@ -4273,12 +4349,18 @@ class PraxisCrudComponent {
4273
4349
  }
4274
4350
  return cfg.toolbar;
4275
4351
  };
4276
- const hasToolbarAdd = (cfg.toolbar?.actions || []).some((action) => this.isAddLike(action));
4352
+ const hasToolbarAdd = (cfg.toolbar?.actions || []).some((action) => this.shouldCanonicalizeToolbarCreateAction(action));
4277
4353
  const addAction = this.resolveCreateToolbarAction(meta, capabilities);
4278
4354
  if (addAction) {
4279
4355
  if (hasToolbarAdd) {
4280
4356
  const toolbar = ensureToolbar();
4281
4357
  toolbar.visible = true;
4358
+ toolbar.actions = (toolbar.actions || []).map((action) => this.shouldCanonicalizeToolbarCreateAction(action)
4359
+ ? {
4360
+ ...action,
4361
+ action: 'create',
4362
+ }
4363
+ : action);
4282
4364
  }
4283
4365
  else {
4284
4366
  const toolbar = ensureToolbar();
@@ -4413,6 +4495,28 @@ class PraxisCrudComponent {
4413
4495
  }
4414
4496
  return false;
4415
4497
  }
4498
+ normalizeCrudActionName(action) {
4499
+ const raw = String(action || '').trim();
4500
+ const normalized = raw.toLowerCase();
4501
+ return this.isCreateActionAliasName(normalized) ? 'create' : raw;
4502
+ }
4503
+ shouldCanonicalizeToolbarCreateAction(action) {
4504
+ if (!action)
4505
+ return false;
4506
+ const normalize = (value) => String(value || '').trim().toLowerCase();
4507
+ const explicitId = normalize(action.action || action.id || action.code || action.key || action.name || action.type);
4508
+ if (this.isCreateActionAliasName(explicitId))
4509
+ return true;
4510
+ if (explicitId)
4511
+ return false;
4512
+ const icon = normalize(action.icon);
4513
+ const label = normalize(action.label);
4514
+ return ((icon === 'add' || icon === 'add_circle' || icon === 'add_box') &&
4515
+ (label === 'adicionar' || label === 'novo' || label === 'criar' || label === 'incluir'));
4516
+ }
4517
+ isCreateActionAliasName(actionName) {
4518
+ return ['create', 'add', 'novo', 'new', 'incluir', 'inserir'].includes(actionName);
4519
+ }
4416
4520
  buildTableCrudContext(meta, capabilities) {
4417
4521
  if (!meta)
4418
4522
  return undefined;
@@ -4693,6 +4797,7 @@ class PraxisCrudComponent {
4693
4797
  (selectionChange)="onTableSelectionChange($event)"
4694
4798
  (rowAction)="onAction($event.action, $event.row, $event)"
4695
4799
  (toolbarAction)="onAction($event.action)"
4800
+ (bulkAction)="onBulkAction($event)"
4696
4801
  (collectionLinksChange)="onCollectionLinksChange($event)"
4697
4802
  (reset)="onResetPreferences()"
4698
4803
  (metadataChange)="onTableMetadataChange()"
@@ -4730,6 +4835,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
4730
4835
  (selectionChange)="onTableSelectionChange($event)"
4731
4836
  (rowAction)="onAction($event.action, $event.row, $event)"
4732
4837
  (toolbarAction)="onAction($event.action)"
4838
+ (bulkAction)="onBulkAction($event)"
4733
4839
  (collectionLinksChange)="onCollectionLinksChange($event)"
4734
4840
  (reset)="onResetPreferences()"
4735
4841
  (metadataChange)="onTableMetadataChange()"
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "@praxisui/crud",
3
- "version": "9.0.0-beta.41",
3
+ "version": "9.0.0-beta.43",
4
4
  "description": "CRUD building blocks for Praxis UI: integrates dynamic forms and tables with unified configuration and services.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/core": "^21.0.0",
8
- "@praxisui/dynamic-form": "^9.0.0-beta.41",
9
- "@praxisui/table": "^9.0.0-beta.41",
10
- "@praxisui/core": "^9.0.0-beta.41",
11
- "@praxisui/dynamic-fields": "^9.0.0-beta.41",
12
- "@praxisui/settings-panel": "^9.0.0-beta.41",
8
+ "@praxisui/dynamic-form": "^9.0.0-beta.43",
9
+ "@praxisui/table": "^9.0.0-beta.43",
10
+ "@praxisui/core": "^9.0.0-beta.43",
11
+ "@praxisui/dynamic-fields": "^9.0.0-beta.43",
12
+ "@praxisui/settings-panel": "^9.0.0-beta.43",
13
13
  "@angular/cdk": "^21.0.0",
14
14
  "@angular/forms": "^21.0.0",
15
15
  "@angular/material": "^21.0.0",
16
16
  "@angular/router": "^21.0.0",
17
- "@praxisui/ai": "^9.0.0-beta.41",
17
+ "@praxisui/ai": "^9.0.0-beta.43",
18
18
  "rxjs": "~7.8.0"
19
19
  },
20
20
  "dependencies": {
@@ -127,7 +127,9 @@ interface CrudValidationContext {
127
127
  }
128
128
 
129
129
  type CrudActionRuntimeEvent = {
130
+ action?: string;
130
131
  actionConfig?: ResourceActionCatalogItem | ResourceSurfaceCatalogItem | null;
132
+ rows?: Record<string, unknown>[];
131
133
  };
132
134
  type CrudContextAction = {
133
135
  action: string;
@@ -206,12 +208,14 @@ declare class PraxisCrudComponent implements OnChanges {
206
208
  private collectionCapabilitiesResolvedHref;
207
209
  private collectionCapabilitiesRequestSeq;
208
210
  private currentAuthoringDocument?;
211
+ selectedRow: Record<string, unknown> | null;
209
212
  private getResourceDiscovery;
210
213
  private getActionOpenAdapter;
211
214
  private getSurfaceOpenAdapter;
212
215
  onResetPreferences(): void;
213
216
  onTableRowClick(event: unknown): void;
214
217
  onTableSelectionChange(event: unknown): void;
218
+ onBulkAction(event: CrudActionRuntimeEvent): Promise<void>;
215
219
  ngOnChanges(changes: SimpleChanges): void;
216
220
  onAction(action: string, row?: Record<string, unknown>, runtimeEvent?: CrudActionRuntimeEvent): Promise<void>;
217
221
  private hasExplicitOpenBinding;
@@ -237,6 +241,10 @@ declare class PraxisCrudComponent implements OnChanges {
237
241
  private syncRuntimeBindings;
238
242
  private resolveQueryContext;
239
243
  private resolveFilterCriteria;
244
+ private extractRowFromEvent;
245
+ private extractSelectedRowFromEvent;
246
+ private extractSelectedRowFromBulkAction;
247
+ private resolveSelectedRowForAction;
240
248
  private tryOpenDiscoveredCrudSurface;
241
249
  private resolveDiscoveredSurfaceCatalog;
242
250
  private tryOpenDiscoveredWorkflowAction;
@@ -254,6 +262,9 @@ declare class PraxisCrudComponent implements OnChanges {
254
262
  private handleDiscoveredSurfaceResult;
255
263
  private buildEffectiveTableConfig;
256
264
  private isAddLike;
265
+ private normalizeCrudActionName;
266
+ private shouldCanonicalizeToolbarCreateAction;
267
+ private isCreateActionAliasName;
257
268
  private buildTableCrudContext;
258
269
  private readonly openCrudAuthoringFromTable;
259
270
  private applyCrudAuthoringPayload;
@@ -309,6 +320,7 @@ declare class CrudLauncherService {
309
320
  private buildRoute;
310
321
  private mapInputs;
311
322
  private resolveActionForLaunch;
323
+ private resolveSubmitUrlTemplate;
312
324
  private resolveActionFormContract;
313
325
  resolveRuntimeContract(action: CrudAction, row: Record<string, unknown> | undefined, metadata: CrudMetadata, runtime?: {
314
326
  capabilities?: ResourceCapabilitySnapshot | null;