@praxisui/table 9.0.0-beta.3 → 9.0.0-beta.30

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.
@@ -37,9 +37,9 @@ source_of_truth:
37
37
  - "projects/praxis-core/src/lib/tokens/global-action.catalog.ts"
38
38
  - "projects/praxis-core/src/lib/models/global-action.model.ts"
39
39
  - "projects/praxis-core/src/lib/actions/global-action-ui.ts"
40
- source_of_truth_last_verified: "2026-03-05"
40
+ source_of_truth_last_verified: "2026-06-24"
41
41
  publish_source_of_truth: false
42
- last_updated: "2026-03-05"
42
+ last_updated: "2026-06-24"
43
43
  toc: true
44
44
  sidebar: true
45
45
  tags:
@@ -92,6 +92,13 @@ Este documento e a referencia canonica da API JSON de praxis-table.
92
92
  - Para exportar apenas a selecao, combine `behavior.selection.enabled`, `config.export.general.scope: "selected"` e uma bulk action visivel apenas quando `selectedCount > 0`.
93
93
  - Quando `config.export.general.scope` e `"selected"`, a exportacao sem linhas selecionadas e bloqueada com feedback de usuario em vez de gerar um arquivo vazio.
94
94
 
95
+ ## AI assistant entrypoint
96
+
97
+ - `config.ai.assistant.enabled` controla a visibilidade e o acionamento do assistente de IA embarcado na tabela.
98
+ - Ausencia do campo equivale ao comportamento historico: o entrypoint continua disponivel quando o adapter de IA da tabela estiver carregado.
99
+ - Use `false` para surfaces em que o host precisa remover a acao de IA por contrato publico, sem CSS contra classes internas da tabela ou do Angular Material.
100
+ - Ao mudar para `false`, a tabela fecha o assistente e remove a sessao contextual da tabela no registry compartilhado de IA.
101
+
95
102
  ## Columns visibility dropdown
96
103
 
97
104
  - `config.toolbar.columnsVisibility.enabled` controla a exibição do botão de visibilidade de colunas na barra de ferramentas.
@@ -331,6 +338,21 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
331
338
  | `actions.row.discovery.enabled` | boolean | No | `true` | row-action-discovery | Controla se row actions podem ser enriquecidas por HATEOAS/capabilities. Configure `false` para manter somente ações declaradas em `actions.row.actions[]`. |
332
339
  | `columns[].renderer` | object | No | field-type-driven | renderer-contract | Renderers condicionais, payload expr e ações interativas. |
333
340
 
341
+ Quando `actions.row.discovery.enabled` esta ativo e o item publica
342
+ capabilities CRUD canonicas, `PraxisTable` pode sintetizar entradas
343
+ contextuais `view`, `edit` e `delete`. Quando o backend publica
344
+ explicitamente `operations["duplicate-draft"]`, a tabela tambem materializa
345
+ `duplicate-draft` como operacao estendida de item. Essas entradas continuam
346
+ sendo capabilities, nao workflow actions: o clique emite `rowAction` com
347
+ `actionConfig` apontando para a capability, para que um contexto CRUD ou
348
+ host composto materialize a operacao.
349
+
350
+ Renderer defaults:
351
+ - `columns[].renderer.type = "avatar"` aplica `columns[].align = "center"` quando a coluna não declara alinhamento explícito. Esse default governa header e célula para manter foto/avatar centralizados em colunas dedicadas, preservando `align`, `width` e demais overrides declarados pelo host.
352
+ - `columns[].renderer.type = "microVisualization"` renderiza a visualização compacta declarada em `renderer.microVisualization.visualization`. O caminho preferencial é metadata-driven: campos de schema com `presentation.presenter = "microVisualization"` e `presentation.visualization.surface = "table-cell"` são convertidos automaticamente para esse renderer quando o tipo é seguro para tabela. O contrato visual e a normalização pertencem a `@praxisui/core` (`PraxisPresentationVisualizationConfig`); a tabela apenas hospeda o HTML compacto em célula, compose item ou renderer condicional.
353
+
354
+ - Em tabela, campos `*Expr` da visualizacao, como `valueExpr`, `targetExpr`, `segmentsExpr`, `toneExpr` e `fallbackTextExpr`, sao resolvidos contra o contexto da linha antes de renderizar. Strings simples sao caminhos (`row.slaAtual`) e objetos seguem Json Logic. Para `kind = "comparison"`, use `points`/`pointsExpr`; `items` fica reservado para visualizacoes orientadas a itens/etapas.
355
+
334
356
  ### Toolbar contract
335
357
 
336
358
  - Acoes globais de toolbar, row e bulk usam `effects[].kind = "global-action"` como envelope canonico de novo authoring.
@@ -365,7 +387,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
365
387
  | `icon` | `string` | No | component-input | host-surface passthrough | Ícone opcional usado em affordances auxiliares do runtime. |
366
388
  | `autoDelete` | `boolean` | No | component-input | boolean coercion | Ativa deleção automática quando o host delega esse fluxo ao runtime. |
367
389
  | `enableCustomization` | `boolean` | No | component-input | boolean coercion | Controla entrada em editor/configuração; default canônico `false`. |
368
- | `dense` | `boolean` | No | component-input | boolean coercion | Força modo compacto quando o host precisa sobrepor densidade do contrato. |
390
+ | `dense` | `boolean` | No | component-input | boolean coercion | Entrada legada de compactação. Equivale a `appearance.density="compact"` apenas quando o contrato não informa `appearance.density`. |
369
391
  | `notifyIfOutdated` | `'inline' \| 'snackbar' \| 'both' \| 'none'` | No | component-input | enum validation + prefs fallback | Política de aviso de drift de schema; o host escolhe banner inline, snackbar, ambos ou silêncio explícito. |
370
392
  | `snoozeMs` | `number` | No | component-input | numeric fallback + prefs fallback | Janela de snooze para avisos de drift; default do input é `86400000` (24h) e políticas globais podem complementar. |
371
393
  | `autoOpenSettingsOnOutdated` | `boolean` | No | component-input | schema-prefs resolution | Abre automaticamente o settings panel quando drift de schema é detectado. |
@@ -413,13 +435,14 @@ degraded filter.
413
435
  | `rowClick` | `{ row, index }` | Clique em linha. | Partial | Preservado da documentação anterior. |
414
436
  | `rowDoubleClick` | `{ action, row }` | Duplo clique quando habilitado. | Partial | Preservado da documentação anterior. |
415
437
  | `rowExpansionChange` | `RowExpansionChangeEvent` | Evento canônico para expand/collapse de detail row no runtime P0A (caminho não virtualizado), com payload discriminado por política de exposição (`allowRawExposure` + `eventExposureDefault`). | Partial | Preservado da documentação anterior. |
416
- | `rowAction` | `{ action, row, payload?, actionConfig?, localMode?, preventedHttp? }` | Acao de linha (coluna `_actions` ou renderer interativo). `payload` e emitido quando houver `payloadExpr` em renderer interativo. Quando `actionConfig.globalAction` aponta para `navigation.openRoute`, o runtime resolve templates como `${row.id}` antes de executar a navegação interna. Para actions como `surface.open`, `payload.*` continua sendo o envelope canônico do evento entregue ao destino. | Partial | Preservado da documentação anterior. |
438
+ | `rowAction` | `{ action, row, payload?, actionConfig?, localMode?, preventedHttp? }` | Acao de linha (coluna `_actions`, renderer interativo ou CRUD capability sintetizada). `payload` e emitido quando houver `payloadExpr` em renderer interativo. Quando `actionConfig.globalAction` aponta para `navigation.openRoute`, o runtime resolve templates como `${row.id}` antes de executar a navegação interna. Para actions como `surface.open`, `payload.*` continua sendo o envelope canônico do evento entregue ao destino. Para `view/edit/delete/duplicate-draft` vindos de capabilities, `actionConfig` carrega a operacao canonica e o host composto deve encaminhar ao contexto CRUD apropriado. | Partial | Preservado da documentação anterior. |
417
439
  | `toolbarAction` | `{ action, actionConfig? }` | Acao clicada em `toolbar.actions[]` que nao foi roteada para fluxo bulk; `actionConfig` carrega o objeto da acao quando disponivel. | Partial | Preservado da documentação anterior. |
418
440
  | `exportAction` | `{ format, request?, result?, error?, tableId? }` | Acao de exportacao acionada pelo menu `export.formats[]`; `request` segue `PraxisCollectionExportRequest`. | Active | Usa o contrato canonico de Collection Export em `@praxisui/core`. |
419
441
  | `exportAction` | `{ format, request?, result?, error?, tableId? }` | Acao de exportacao acionada pelo menu `export.formats[]`; `request` segue `PraxisCollectionExportRequest`. | Active | Usa o contrato canonico de Collection Export em `@praxisui/core`. |
420
442
  | `bulkAction` | `{ action, rows, actionConfig? }` | Acao em lote; `actionConfig` carrega a configuracao da acao quando disponivel. | Partial | Preservado da documentação anterior. |
421
443
  | `columnReorder` | `ColumnReorderEvent` | Reordenação de coluna concluída (drag/keyboard). | Partial | Inclui metadados de origem, destino e operação. |
422
444
  | `columnReorderAttempt` | `ColumnReorderAttemptEvent` | Tentativa bloqueada por política de drop-zone. | Partial | Evento diagnóstico para observabilidade e auditoria. |
445
+ | `columnResize` | `{ action: 'columnResize', trigger: 'pointer' \| 'keyboard', tableId, field, header, previousWidth, currentWidth, persisted }` | Redimensionamento de coluna concluido pelo separador do header. | Partial | Usa `behavior.resizing.enabled`, respeita `columns[].resizable !== false` e persiste `columns[].width` em px quando `persistWidths !== false`. Em modo `px`, altera a largura da coluna e a largura interna do conteudo rolavel; o viewport/card externo permanece estavel. |
423
446
  | `beforeDelete` | `row` | Antes de delete de linha. | Partial | Preservado da documentação anterior. |
424
447
  | `afterDelete` | `row` | Depois de delete com sucesso. | Partial | Preservado da documentação anterior. |
425
448
  | `deleteError` | `{ row, error }` | Erro no delete de linha. | Partial | Preservado da documentação anterior. |
@@ -928,6 +951,7 @@ row selection through table affordances.
928
951
  | `bulkAction` | `{ action, rows, actionConfig? }` | Acao em lote; `actionConfig` carrega a configuracao da acao quando disponivel. | Partial | Preservado da documentação anterior. |
929
952
  | `columnReorder` | `{ action, trigger: 'drag' \ | 'keyboard' \ | Partial | Preservado da documentação anterior. |
930
953
  | `columnReorderAttempt` | `{ action: 'columnReorderAttempt', trigger: 'drag' \ | 'keyboard', operationId, tableId, sourceField, targetField, previousIndex, currentIndex, sourceZone, targetZone, result: 'blocked', reasonCode: 'drop-zone-policy-blocked', configuredColumnDropZones[] }` | Partial | Preservado da documentação anterior. |
954
+ | `columnResize` | `{ action: 'columnResize', trigger: 'pointer' \| 'keyboard', tableId, field, header, previousWidth, currentWidth, persisted }` | Separador de resize no header. | Partial | Mutacao visual/runtime de largura; nao redefine schema nem dados. Em modo `px`, nao redistribui colunas vizinhas; o conteudo interno pode ficar maior que o viewport e usar scroll horizontal. |
931
955
  | `beforeDelete` | `row` | Antes de delete de linha. | Partial | Preservado da documentação anterior. |
932
956
  | `afterDelete` | `row` | Depois de delete com sucesso. | Partial | Preservado da documentação anterior. |
933
957
  | `deleteError` | `{ row, error }` | Erro no delete de linha. | Partial | Preservado da documentação anterior. |
@@ -944,28 +968,31 @@ row selection through table affordances.
944
968
  | `--p-table-row-even-bg` | zebra row |
945
969
  | `--p-table-row-hover-bg` | hover row |
946
970
  | `--p-table-row-selected-bg` | row selecionada |
971
+ | `--p-table-row-height` | altura da linha; sobrescreve o default do preset de densidade |
972
+ | `--p-table-header-height` | altura do header; sobrescreve o default do preset de densidade |
973
+ | `--p-table-column-resize-hit-area` | area clicavel do separador de resize |
974
+ | `--p-table-column-resize-separator-color` | cor base da divisoria de resize |
975
+ | `--p-table-column-resize-separator-hover-color` | cor da divisoria em hover/focus |
976
+ | `--p-table-column-resize-active-color` | cor da divisoria durante resize |
947
977
  | `--p-header-padding` | padding do header |
978
+ | `--p-cell-padding` | padding das células; sobrescreve o default do preset de densidade |
948
979
  | `--p-header-font-size` | fonte do header |
949
980
  | `--p-header-font-weight` | peso do header |
950
981
  | `--p-header-letter-spacing` | tracking do header |
951
982
  | `--p-header-text-transform` | caixa do texto do header |
952
- | `--p-table-drag-handle-size` | tamanho do handle de drag (preset padrao do runtime) |
953
- | `--p-table-drag-handle-color` | cor do handle de drag |
954
- | `--p-table-drag-handle-base-opacity` | opacidade base do handle em repouso |
955
- | `--p-table-drag-handle-idle-bg` | fundo base do handle em repouso |
956
- | `--p-table-drag-handle-idle-border` | borda base do handle em repouso |
957
- | `--p-table-drag-handle-hover-bg` | fundo do handle em hover/focus |
958
- | `--p-table-drag-handle-hover-border` | borda do handle em hover/focus |
959
- | `--p-table-drag-handle-active-bg` | fundo do handle em estado ativo |
960
- | `--p-table-drag-handle-active-border` | borda do handle em estado ativo |
961
- | `--p-table-drag-handle-focus-ring` | cor do anel de foco do handle |
962
- | `--p-table-drag-handle-transition-duration` | duracao das transicoes do handle |
963
983
  | `--p-table-reorder-transition-duration` | duracao da animacao de reorder das colunas |
964
984
  | `--p-table-drag-preview-scale` | escala visual do preview durante drag |
965
985
  | `--p-table-drag-preview-shadow` | sombra do preview durante drag |
966
986
  | `--p-table-drag-status-enter-duration` | duracao da entrada da mensagem visual de reorder |
967
987
  | `--p-actions-btn-size` | tamanho de botoes de acao |
968
988
  | `--p-actions-icon-size` | tamanho de icones de acao |
989
+ | `--p-table-paginator-container-min-height` | altura minima do paginator |
990
+ | `--p-table-paginator-container-padding` | padding do paginator |
991
+ | `--p-table-paginator-container-gap` | espaçamento entre controles do paginator |
992
+ | `--p-table-paginator-action-size` | tamanho dos botoes de navegacao do paginator |
993
+ | `--p-table-paginator-select-width` | largura do seletor de tamanho de pagina |
994
+ | `--p-table-paginator-select-height` | altura do seletor de tamanho de pagina |
995
+ | `--p-table-paginator-select-padding-inline` | padding horizontal do seletor de tamanho de pagina |
969
996
  | `--p-table-state-success-*` | tokens de estado success |
970
997
  | `--p-table-state-warning-*` | tokens de estado warning |
971
998
  | `--p-table-state-danger-*` | tokens de estado danger |
@@ -981,6 +1008,10 @@ row selection through table affordances.
981
1008
  | `col-borders` | bordas verticais entre colunas |
982
1009
  | `pfx-column-drag-enabled` | habilita layout base de DnD de colunas |
983
1010
  | `pfx-column-drag-indicator` | habilita indicador visual de drag |
1011
+ | `pfx-column-resize-enabled` | habilita separadores de resize no header |
1012
+ | `pfx-column-resizing` | estado ativo enquanto uma coluna esta sendo redimensionada |
1013
+
1014
+ `appearance.density` seleciona apenas o preset de defaults. `appearance.spacing.*` e defaults globais também alimentam tokens `*-default`. Hosts podem redefinir livremente os tokens finais sem depender de seletores internos, por exemplo `--p-table-row-height`, `--p-table-header-height`, `--p-cell-padding`, `--p-actions-btn-size` e `--p-table-paginator-select-height`. Em virtualização sem `itemHeight` explícito, o runtime deriva a altura da densidade efetiva.
984
1015
 
985
1016
  #### DnD classes (globais)
986
1017
  | Classe CSS | Escopo | Efeito |
@@ -1214,6 +1245,7 @@ matching on row values must not decide primary intent.
1214
1245
  | `density-compact` / `density-comfortable` / `density-spacious` | host classes | controle de densidade visual | Derivadas de `appearance.density`. |
1215
1246
  | `.pfx-column-drag-enabled` | host class | habilita feedback visual de reordenacao | Ativada quando contrato de reorder esta habilitado. |
1216
1247
  | `.pfx-column-drag-indicator` | host class | indicador visual durante drag/drop | Integrada ao runtime de `columnReorder`. |
1248
+ | `.praxis-header-sort-trigger` | internal header zone | zona dedicada de sort no header | Recebe `mat-sort-header`; reorder por drag continua implicito no header cell. |
1217
1249
 
1218
1250
  ### Fallback global de aparencia
1219
1251
 
@@ -1,8 +1,9 @@
1
1
  import * as _praxisui_core from '@praxisui/core';
2
- import { TableToolbarAppearanceConfig, TableConfig, LoggerService, PraxisI18nService, TableToolbarAppearanceVariant, TableToolbarAppearanceDensity, TableToolbarAppearanceShape, TableToolbarAppearanceDivider, TableToolbarTokenName, GlobalConfigService, AsyncConfigStorage, ApiUrlEntry, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ResourceCapabilityDigest, ConnectionStorage, LoadingOrchestrator, GlobalActionService, PraxisLoadingRenderer, PraxisRuntimeComponentObservationEnvelope, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, PraxisExportScope, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, JsonLogicExpression, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog } from '@praxisui/core';
2
+ import { TableToolbarAppearanceConfig, TableConfig, LoggerService, PraxisI18nService, TableToolbarAppearanceVariant, TableToolbarAppearanceDensity, TableToolbarAppearanceShape, TableToolbarAppearanceDivider, TableToolbarTokenName, GlobalConfigService, AsyncConfigStorage, LocalStorageConfigService, ApiUrlEntry, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ResourceCapabilityDigest, ConnectionStorage, LoadingOrchestrator, GlobalActionService, PraxisLoadingRenderer, PraxisRuntimeComponentObservationEnvelope, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, PraxisExportScope, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, ResourceCapabilityOperation, JsonLogicExpression, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog } from '@praxisui/core';
3
3
  import * as i0 from '@angular/core';
4
4
  import { InjectionToken, OnDestroy, EventEmitter, ElementRef, Provider, OnInit, OnChanges, AfterViewInit, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, SimpleChanges, ComponentRef, AfterContentInit, Injector } from '@angular/core';
5
5
  import { ActivatedRoute } from '@angular/router';
6
+ import { SafeHtml } from '@angular/platform-browser';
6
7
  import { MatTable, MatTableDataSource } from '@angular/material/table';
7
8
  import * as _angular_material_paginator from '@angular/material/paginator';
8
9
  import { MatPaginatorSelectConfig, MatPaginator, PageEvent } from '@angular/material/paginator';
@@ -95,6 +96,7 @@ declare class PraxisTableToolbar implements OnDestroy {
95
96
  getMoreActionsLabel(): string;
96
97
  emitExportAction(event: Event, format: string): void;
97
98
  getColumnsVisibilityLabel(): string;
99
+ getColumnsVisibilityIcon(): string;
98
100
  isColumnsVisibilityEnabled(): boolean;
99
101
  getVisibleColumnsCount(): number;
100
102
  isColumnVisibilityToggleDisabled(column: {
@@ -140,7 +142,6 @@ declare class PraxisTableToolbar implements OnDestroy {
140
142
  private resolveVisibleWhenFallback;
141
143
  private resolveVisibleWhenFallbackPolicy;
142
144
  private resolveRuntimeEnvironment;
143
- private isDiagnosticsEnvironment;
144
145
  private buildEvaluationContext;
145
146
  private warnVisibleWhenFallback;
146
147
  private collectShortcutBindings;
@@ -359,8 +360,9 @@ type FilterConfig = {
359
360
  };
360
361
  declare class FilterConfigService {
361
362
  private storage;
363
+ private localStorage;
362
364
  private readonly PREFIX;
363
- constructor(storage: AsyncConfigStorage);
365
+ constructor(storage: AsyncConfigStorage, localStorage: LocalStorageConfigService);
364
366
  /**
365
367
  * Load a persisted filter configuration for the given key.
366
368
  */
@@ -369,6 +371,11 @@ declare class FilterConfigService {
369
371
  * Persist a filter configuration for the given key.
370
372
  */
371
373
  save(key: string, config: FilterConfig): void;
374
+ /**
375
+ * Clear the persisted filter configuration from both remote storage and the
376
+ * local fallback cache so reset/reopen cannot revive stale preferences.
377
+ */
378
+ clear(key: string): void;
372
379
  static ɵfac: i0.ɵɵFactoryDeclaration<FilterConfigService, never>;
373
380
  static ɵprov: i0.ɵɵInjectableDeclaration<FilterConfigService>;
374
381
  }
@@ -651,6 +658,7 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
651
658
  private resolveInitialDto;
652
659
  private syncFormsFromDto;
653
660
  private refreshProgrammaticFilterFieldDisplays;
661
+ private getProgrammaticRefreshFieldNames;
654
662
  private refreshProgrammaticFilterFieldDisplay;
655
663
  ngOnInit(): Promise<void>;
656
664
  ngAfterViewInit(): void;
@@ -995,6 +1003,7 @@ type RuntimeRowAction = {
995
1003
  overflow?: boolean;
996
1004
  __praxisDiscoveredAction?: ResourceActionCatalogItem;
997
1005
  __praxisDiscoveredSurface?: ResourceSurfaceCatalogItem;
1006
+ __praxisCrudOperation?: ResourceCapabilityOperation;
998
1007
  __praxisCapabilityDenied?: boolean;
999
1008
  };
1000
1009
  type ExpansionDetailRuntimeStatus = 'idle' | 'loading' | 'ready' | 'error' | 'blocked';
@@ -1077,6 +1086,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1077
1086
  exportAction: EventEmitter<any>;
1078
1087
  columnReorder: EventEmitter<any>;
1079
1088
  columnReorderAttempt: EventEmitter<any>;
1089
+ columnResize: EventEmitter<any>;
1080
1090
  beforeDelete: EventEmitter<any>;
1081
1091
  afterDelete: EventEmitter<any>;
1082
1092
  deleteError: EventEmitter<any>;
@@ -1118,8 +1128,17 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1118
1128
  private columnReorderStatusTimer;
1119
1129
  private columnReorderVisualStatusTimer;
1120
1130
  private columnReorderUndoSubscription;
1121
- private columnReorderOperationCounter;
1122
- private latestColumnReorderOperationId;
1131
+ private columnRuntimeMutationOperationCounter;
1132
+ private latestColumnRuntimeMutationOperationId;
1133
+ private columnResizeTransientWidths;
1134
+ private columnResizeTableWidthStyle;
1135
+ private columnResizeLayoutSignature;
1136
+ private isApplyingColumnResizeLayoutMutation;
1137
+ private activeColumnResize;
1138
+ private readonly columnResizePointerMoveListener;
1139
+ private readonly columnResizePointerUpListener;
1140
+ private readonly columnResizePointerCancelListener;
1141
+ private readonly columnResizeKeydownListener;
1123
1142
  localSource: any[];
1124
1143
  localView: any[];
1125
1144
  localTotal: number;
@@ -1157,6 +1176,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1157
1176
  private rowDiscoveryMarkForCheckScheduled;
1158
1177
  private lastRowDiscoveryScopeKey;
1159
1178
  private readonly i18n;
1179
+ private readonly sanitizer;
1160
1180
  private readonly collectionExport;
1161
1181
  private readonly paginatorIntl;
1162
1182
  private schemaFieldsSnapshot;
@@ -1192,9 +1212,12 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1192
1212
  getRowActionsWidthStyle(): string | null;
1193
1213
  getColumnTextAlignStyle(column: ColumnDefinition): string | null;
1194
1214
  getColumnWidthStyle(column: ColumnDefinition): string | null;
1215
+ getColumnResizeTableWidthStyle(): string | null;
1195
1216
  getColumnHeaderAttrStyle(column: ColumnDefinition): string | null;
1196
1217
  getColumnHeaderNgStyle(column: ColumnDefinition): Record<string, string> | undefined;
1197
1218
  getColumnCellAttrStyle(column: ColumnDefinition): string | null;
1219
+ private mergeColumnWidthIntoInlineStyle;
1220
+ private buildColumnWidthInlineStyle;
1198
1221
  getTableElevationClassName(): string;
1199
1222
  private normalizeTableElevationLevel;
1200
1223
  private resolveRuntimeTableElevationLevel;
@@ -1251,6 +1274,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1251
1274
  set resolvedPrefs(val: any);
1252
1275
  get resolvedPrefs(): any;
1253
1276
  dense: boolean;
1277
+ private hostDeclaredAppearanceDensity;
1278
+ private hostDeclaredAppearanceSpacing;
1279
+ private hostDeclaredAppearanceTypography;
1254
1280
  private resolveAppearanceDensity;
1255
1281
  get hostDensityCompactClass(): boolean;
1256
1282
  get hostDensityComfortableClass(): boolean;
@@ -1339,6 +1365,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1339
1365
  private tableConfigKey;
1340
1366
  private filterConfigKey;
1341
1367
  private ensureConfigDefaults;
1368
+ private hasDeclaredAppearanceDensity;
1369
+ private hasDeclaredAppearanceSection;
1370
+ private shouldApplyAppearanceDefaultValue;
1342
1371
  private mergePersistedTableConfigWithInput;
1343
1372
  private reconcileHostDeclaredTableContract;
1344
1373
  private reconcileHostDeclaredColumns;
@@ -1347,6 +1376,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1347
1376
  private normalizePersistedExportFormats;
1348
1377
  private normalizePersistedRowActionIds;
1349
1378
  private normalizePersistedColumnIds;
1379
+ private columnIdentitySetChanged;
1350
1380
  private clonePlainObject;
1351
1381
  private setShowToolbar;
1352
1382
  private shouldExposeToolbar;
@@ -1361,6 +1391,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1361
1391
  aiAssistantTriggerBadge(): string;
1362
1392
  aiAssistantTriggerLabel(): string;
1363
1393
  aiAssistantTriggerTooltip(): string;
1394
+ isAiAssistantEnabled(): boolean;
1395
+ shouldShowAiAssistantEntrypoint(): boolean;
1364
1396
  openAiAssistantFromSession(session: PraxisAssistantSessionSnapshot): void;
1365
1397
  closeAiAssistant(): void;
1366
1398
  onAiAssistantPromptChange(prompt: string): void;
@@ -1404,6 +1436,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1404
1436
  private buildRuntimeObservationClaims;
1405
1437
  private isRuntimeObservationVisible;
1406
1438
  private syncAiAssistantSession;
1439
+ private disableAiAssistantSession;
1407
1440
  private assistantContextRuntimeLocale;
1408
1441
  private refreshAiAssistantContextAfterSelectionChange;
1409
1442
  private hasAiAssistantSessionState;
@@ -1718,6 +1751,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1718
1751
  private resolveSortingStrategy;
1719
1752
  private applyDataSourceSettings;
1720
1753
  private sanitizeColumns;
1754
+ private applyRendererPresentationDefaults;
1721
1755
  private setupColumns;
1722
1756
  private preserveSchemaDrivenColumnsIfConfigOmittedColumns;
1723
1757
  private isDataColumnField;
@@ -1726,6 +1760,46 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1726
1760
  isColumnDraggingEnabled(): boolean;
1727
1761
  isColumnDragIndicatorEnabled(): boolean;
1728
1762
  isColumnDraggable(column: ColumnDefinition | null | undefined): boolean;
1763
+ isColumnResizeEnabled(): boolean;
1764
+ isColumnResizable(column: ColumnDefinition | null | undefined): boolean;
1765
+ isColumnResizeActive(column?: ColumnDefinition | null): boolean;
1766
+ getColumnResizeHandleAriaLabel(column: ColumnDefinition): string;
1767
+ getColumnResizeHandleTooltip(column: ColumnDefinition): string;
1768
+ getColumnResizeMinWidthAriaValue(column: ColumnDefinition): number;
1769
+ getColumnResizeMaxWidthAriaValue(column: ColumnDefinition): number | null;
1770
+ getColumnResizeCurrentWidthAriaValue(column: ColumnDefinition): number | null;
1771
+ onColumnResizeHandleClick(event: MouseEvent): void;
1772
+ onColumnResizeHandleKeydown(event: KeyboardEvent, column: ColumnDefinition): void;
1773
+ onColumnResizePointerDown(event: PointerEvent, column: ColumnDefinition): void;
1774
+ private onColumnResizePointerMove;
1775
+ private onColumnResizePointerUp;
1776
+ private onColumnResizePointerCancel;
1777
+ private onColumnResizeDocumentKeydown;
1778
+ private addColumnResizeDocumentListeners;
1779
+ private removeColumnResizeDocumentListeners;
1780
+ private cancelColumnResize;
1781
+ private commitColumnResize;
1782
+ private applyColumnResizeWidth;
1783
+ private emitAndPersistColumnResize;
1784
+ private updateConfigColumnWidth;
1785
+ private updateConfigColumnWidths;
1786
+ private updateColumnResizeTableWidthFromDelta;
1787
+ private captureColumnResizeLockedWidths;
1788
+ private resolveColumnResizeTableWidthPx;
1789
+ private resolveColumnWidthPx;
1790
+ private parseColumnResizePixelWidth;
1791
+ private normalizeColumnResizeWidthStyle;
1792
+ private clampColumnWidthPx;
1793
+ private resolveColumnResizeEffectiveMinWidthPx;
1794
+ private resolveColumnResizeMinWidthPx;
1795
+ private resolveColumnResizeMaxWidthPx;
1796
+ private normalizeColumnResizeConfigWidths;
1797
+ private runColumnResizeLayoutMutation;
1798
+ private reconcileColumnResizeLayoutState;
1799
+ private clearColumnResizeLayoutState;
1800
+ private createColumnResizeLayoutSignature;
1801
+ private formatColumnWidthPx;
1802
+ private isTableRtl;
1729
1803
  private resolveColumnReorderHeader;
1730
1804
  private isEnglishLocale;
1731
1805
  private isEnglishLocaleValue;
@@ -1742,9 +1816,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1742
1816
  private emitColumnReorderAttempt;
1743
1817
  private createColumnReorderOperationId;
1744
1818
  private isLatestColumnReorderOperation;
1819
+ private createColumnRuntimeMutationOperationId;
1820
+ private isLatestColumnRuntimeMutationOperation;
1745
1821
  private offerColumnReorderUndo;
1746
1822
  private restoreColumnOrderFromUndo;
1747
- onColumnDragHandleKeydown(event: KeyboardEvent, column: ColumnDefinition): void;
1823
+ onColumnHeaderReorderKeydown(event: KeyboardEvent, column: ColumnDefinition): void;
1748
1824
  onColumnDrop(event: CdkDragDrop<ColumnDefinition[]>): void;
1749
1825
  onColumnDragStarted(column: ColumnDefinition): void;
1750
1826
  onColumnDragEnded(event: CdkDragEnd<ColumnDefinition>, column: ColumnDefinition): void;
@@ -1781,10 +1857,6 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1781
1857
  * Runs only on initial bootstrap (when columns are derived from schema).
1782
1858
  */
1783
1859
  private applyAutoRenderer;
1784
- /**
1785
- * Check if a value is a valid ColumnDataType
1786
- */
1787
- private isValidColumnDataType;
1788
1860
  /**
1789
1861
  * Infer column data type from field name patterns when API type is not available
1790
1862
  * Refined logic to reduce false positives
@@ -1919,7 +1991,6 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1919
1991
  private isJsonLogicExpression;
1920
1992
  private hasConditionalExpression;
1921
1993
  private resolveRuntimeEnvironment;
1922
- private isDiagnosticsRuntimeEnvironment;
1923
1994
  private logActionConditionFallback;
1924
1995
  getRowClasses(rowData: any): string[] | undefined;
1925
1996
  getRowNgStyle(rowData: any): Record<string, string> | undefined;
@@ -2032,7 +2103,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
2032
2103
  getBadgeClasses(row: any, column: ColumnDefinition): string[];
2033
2104
  getBadgeRichContentNodes(row: any, column: ColumnDefinition): RichBlockNode[];
2034
2105
  shouldRenderBadge(row: any, column: ColumnDefinition): boolean;
2035
- getEffectiveRendererType(row: any, column: ColumnDefinition): 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'avatar' | 'toggle' | 'menu' | 'html' | 'compose' | 'rating' | null;
2106
+ getEffectiveRendererType(row: any, column: ColumnDefinition): 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'avatar' | 'toggle' | 'menu' | 'html' | 'compose' | 'rating' | 'microVisualization' | null;
2107
+ getMicroVisualizationHtml(row: any, column: ColumnDefinition): SafeHtml;
2108
+ private resolveMicroVisualizationForRow;
2109
+ private applyMicroVisualizationExpression;
2110
+ private evaluateMicroVisualizationExpression;
2036
2111
  getComposeItems(row: any, column: ColumnDefinition): any[];
2037
2112
  trackComposeItem(index: number, item: any): string;
2038
2113
  getComposeClasses(row: any, column: ColumnDefinition): string[];
@@ -2161,6 +2236,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
2161
2236
  private getVirtualizationSources;
2162
2237
  isVirtualized(): boolean;
2163
2238
  getVirtItemHeight(): number;
2239
+ private getDefaultDensityRowHeight;
2164
2240
  getVirtBufferSize(): number;
2165
2241
  getVirtMinHeightStyle(): string;
2166
2242
  getVirtMinHeightHostStyle(): string | null;
@@ -2213,10 +2289,18 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
2213
2289
  private splitVisibleRowActionsFromVisible;
2214
2290
  private decorateConfiguredRowAction;
2215
2291
  private getDiscoveredRowWorkflowActions;
2292
+ private getDiscoveredRowCrudActionsFromSnapshot;
2293
+ private buildDiscoveredRowCrudAction;
2216
2294
  private getDiscoveredRowSurfaceActionsFromSnapshot;
2217
2295
  private getDiscoveredRowWorkflowActionsFromCatalog;
2296
+ private resolveRowCrudCapabilityOperation;
2297
+ private createSyntheticCrudCapabilityOperation;
2218
2298
  private supportsRowCrudAction;
2219
2299
  private isCapabilityManagedCrudRowAction;
2300
+ private getCrudRowActionLabel;
2301
+ private getCrudRowActionIcon;
2302
+ private getCrudRowActionColor;
2303
+ private getUnavailableCrudOperationMessage;
2220
2304
  private findItemWorkflowAction;
2221
2305
  private findItemSurface;
2222
2306
  private isRowSurfaceAction;
@@ -2245,7 +2329,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
2245
2329
  private scheduleRowDiscoveryMarkForCheck;
2246
2330
  ngOnDestroy(): void;
2247
2331
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTable, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
2248
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTable, "praxis-table", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "data": { "alias": "data"; "required": false; }; "tableId": { "alias": "tableId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "autoDelete": { "alias": "autoDelete"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "crudContext": { "alias": "crudContext"; "required": false; }; "filterCriteria": { "alias": "filterCriteria"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "aiContext": { "alias": "aiContext"; "required": false; }; "aiAssistantVoiceInputMode": { "alias": "aiAssistantVoiceInputMode"; "required": false; }; "aiAssistantVoiceLanguage": { "alias": "aiAssistantVoiceLanguage"; "required": false; }; "horizontalScroll": { "alias": "horizontalScroll"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "rowClick": "rowClick"; "widgetEvent": "widgetEvent"; "rowDoubleClick": "rowDoubleClick"; "rowExpansionChange": "rowExpansionChange"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "exportAction": "exportAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "configChange": "configChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; "collectionLinksChange": "collectionLinksChange"; "selectionChange": "selectionChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
2332
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTable, "praxis-table", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "data": { "alias": "data"; "required": false; }; "tableId": { "alias": "tableId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "autoDelete": { "alias": "autoDelete"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "crudContext": { "alias": "crudContext"; "required": false; }; "filterCriteria": { "alias": "filterCriteria"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "aiContext": { "alias": "aiContext"; "required": false; }; "aiAssistantVoiceInputMode": { "alias": "aiAssistantVoiceInputMode"; "required": false; }; "aiAssistantVoiceLanguage": { "alias": "aiAssistantVoiceLanguage"; "required": false; }; "horizontalScroll": { "alias": "horizontalScroll"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "rowClick": "rowClick"; "widgetEvent": "widgetEvent"; "rowDoubleClick": "rowDoubleClick"; "rowExpansionChange": "rowExpansionChange"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "exportAction": "exportAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "columnResize": "columnResize"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "configChange": "configChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; "collectionLinksChange": "collectionLinksChange"; "selectionChange": "selectionChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
2249
2333
  static ngAcceptInputType_enableCustomization: unknown;
2250
2334
  }
2251
2335
 
@@ -3108,6 +3192,7 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3108
3192
  private scrollTrackingRafId;
3109
3193
  readonly layoutPreviewFields: string[];
3110
3194
  private readonly storage;
3195
+ private readonly filterConfigService;
3111
3196
  private readonly settingsPanel;
3112
3197
  private readonly snackBar;
3113
3198
  private readonly destroyRef;
@@ -3297,16 +3382,8 @@ interface RuleGroup {
3297
3382
  }
3298
3383
  type StructuredRuleCondition = JsonLogicExpression | null;
3299
3384
  declare class RuleCompilerService {
3300
- /**
3301
- * Compiles a rule group into a single textual expression string, adding
3302
- * parentheses according to grouping and operator precedence.
3303
- */
3304
- compileGroup(group: RuleGroup): string;
3305
- /** Compiles a single rule atom to a textual expression. */
3306
- compileAtom(atom: RuleAtom): string;
3307
3385
  compileGroupToJsonLogic(group: RuleGroup): StructuredRuleCondition;
3308
3386
  compileAtomToJsonLogic(atom: RuleAtom): JsonLogicExpression | null;
3309
- private stringify;
3310
3387
  private toJsonLogicValue;
3311
3388
  private toList;
3312
3389
  static ɵfac: i0.ɵɵFactoryDeclaration<RuleCompilerService, never>;
@@ -3342,6 +3419,11 @@ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy
3342
3419
  manualMode: boolean;
3343
3420
  manualErrors: string[];
3344
3421
  testSummary: string;
3422
+ normalizationWarning: string;
3423
+ importStatus: {
3424
+ type: 'success' | 'warning' | 'error';
3425
+ message: string;
3426
+ } | null;
3345
3427
  editIndex: number;
3346
3428
  get currentRules(): RuleItem[];
3347
3429
  set currentRules(v: RuleItem[]);
@@ -3408,6 +3490,7 @@ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy
3408
3490
  removeRule(index: number): void;
3409
3491
  duplicateRule(index: number): void;
3410
3492
  onRuleToggle(): void;
3493
+ private emitRulesConfigChange;
3411
3494
  buildAppliedConfig(baseConfig?: TableConfig): TableConfig;
3412
3495
  onApply(): void;
3413
3496
  isValid(): boolean;
@@ -3508,9 +3591,14 @@ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy
3508
3591
  onDropCondition(evt: CdkDragDrop<RuleAtom[]>): void;
3509
3592
  updateDraftFromGroup(): void;
3510
3593
  getAtomPreview(a: RuleAtom): string;
3594
+ private stringifyJsonLogicPreview;
3595
+ private stringifyJsonLogicInlinePreview;
3511
3596
  addSubgroup(): void;
3512
3597
  removeSubgroup(index: number): void;
3513
3598
  getGroupPreview(g: RuleGroup): string;
3599
+ private isNumericFieldType;
3600
+ private parseNumericCsv;
3601
+ private toFiniteNumber;
3514
3602
  private getActiveGroupRef;
3515
3603
  static ɵfac: i0.ɵɵFactoryDeclaration<TableRulesEditorComponent, [null, null, null, null, null, { optional: true; }]>;
3516
3604
  static ɵcmp: i0.ɵɵComponentDeclaration<TableRulesEditorComponent, "table-rules-editor", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "fields": { "alias": "fields"; "required": false; }; "i18nRules": { "alias": "i18nRules"; "required": false; }; "debugLogs": { "alias": "debugLogs"; "required": false; }; "debugLevel": { "alias": "debugLevel"; "required": false; }; }, { "configChange": "configChange"; }, never, never, true, never>;