@praxisui/table 10.0.0-rc.25 → 10.0.0-rc.27

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,6 +1,6 @@
1
1
  import { Observable, firstValueFrom } from 'rxjs';
2
2
  import { withAuthoringScopePolicy } from '@praxisui/ai';
3
- import { ar as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-B6XoXX5x.mjs';
3
+ import { ar as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-CosVmN5P.mjs';
4
4
 
5
5
  class TableAgenticAuthoringTurnFlow {
6
6
  adapter;
@@ -1,7 +1,7 @@
1
1
  import { firstValueFrom } from 'rxjs';
2
2
  import { BaseAiAdapter, sanitizePraxisAssistantText, createComponentAuthoringContext } from '@praxisui/ai';
3
3
  import { PRAXIS_GLOBAL_ACTION_CATALOG, deepMerge } from '@praxisui/core';
4
- import { W as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, p as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, a6 as coerceTableComponentEditPlans, a8 as compileTableComponentEditPlans, Y as TASK_PRESETS, ae as getTableComponentEditPlanCapabilities, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, V as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-B6XoXX5x.mjs';
4
+ import { W as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, p as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, a6 as coerceTableComponentEditPlans, a8 as compileTableComponentEditPlans, Y as TASK_PRESETS, ae as getTableComponentEditPlanCapabilities, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, V as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-CosVmN5P.mjs';
5
5
 
6
6
  const TABLE_ROW_EXPRESSION_CONTEXT_OPTION = {
7
7
  mode: 'expression',
@@ -1,2 +1,2 @@
1
- export { A as ANALYTICS_TABLE_ROW_KEY_FIELD, a as AnalyticalDrawerRegistryService, b as AnalyticsTableConfigAdapterService, c as AnalyticsTableContractService, d as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, e as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, f as ColumnsConfigEditorComponent, D as DATE_PRESETS, g as DataFormatterComponent, h as DataFormattingService, F as FORMULA_TEMPLATES, i as FilterConfigService, j as FilterSettingsComponent, k as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, l as PRAXIS_ANALYTICAL_DRAWER_SCHEMAS, m as PRAXIS_FILTER_AUTHORING_MANIFEST, n as PRAXIS_FILTER_COMPONENT_METADATA, o as PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, p as PRAXIS_TABLE_AUTHORING_MANIFEST, q as PRAXIS_TABLE_COMPONENT_METADATA, r as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, s as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, t as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, u as PraxisAnalyticalDrawerComponent, v as PraxisFilter, w as PraxisFilterOutletComponent, x as PraxisFilterOutletDirective, y as PraxisFilterWidgetConfigEditor, z as PraxisScopeBarComponent, E as PraxisTable, G as PraxisTableConfigEditor, H as PraxisTableInlineAuthoringEditorComponent, I as PraxisTableToolbar, K as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, L as TABLE_COMPONENT_AI_CAPABILITIES, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, V as TABLE_COMPONENT_EDIT_PLAN_KIND, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Y as TASK_PRESETS, Z as TableDefaultsProvider, _ as TableRulesEditorComponent, $ as ToolbarActionsEditorComponent, a0 as ValueMappingEditorComponent, a1 as VisualFormulaBuilderComponent, a2 as analyticsComparisonMetricField, a3 as applyComputedFieldsToRows, a4 as buildTableApplyPlan, a5 as coerceTableComponentEditPlan, a6 as coerceTableComponentEditPlans, a7 as compileTableComponentEditPlan, a8 as compileTableComponentEditPlans, a9 as createTableAuthoringDocument, aa as formatComputedFieldValue, ab as getActionId, ac as getEnum, ad as getTableCapabilities, ae as getTableComponentEditPlanCapabilities, af as interpolateRelationEndpoint, ag as isAnalyticalDrawerSchema, ah as isTableRendererSupportedByRichContentP0, ai as mapTableRendererToRichContentP0, aj as normalizeComputedFieldDefinition, ak as normalizeTableAuthoringDocument, al as parseLegacyOrTableDocument, am as providePraxisAnalyticalDrawerSchemas, an as providePraxisFilterMetadata, ao as providePraxisTableMetadata, ap as providePraxisTableToolbarAppearance, aq as serializeTableAuthoringDocument, as as toCanonicalTableConfig, at as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-B6XoXX5x.mjs';
1
+ export { A as ANALYTICS_TABLE_ROW_KEY_FIELD, a as AnalyticalDrawerRegistryService, b as AnalyticsTableConfigAdapterService, c as AnalyticsTableContractService, d as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, e as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, f as ColumnsConfigEditorComponent, D as DATE_PRESETS, g as DataFormatterComponent, h as DataFormattingService, F as FORMULA_TEMPLATES, i as FilterConfigService, j as FilterSettingsComponent, k as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, l as PRAXIS_ANALYTICAL_DRAWER_SCHEMAS, m as PRAXIS_FILTER_AUTHORING_MANIFEST, n as PRAXIS_FILTER_COMPONENT_METADATA, o as PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, p as PRAXIS_TABLE_AUTHORING_MANIFEST, q as PRAXIS_TABLE_COMPONENT_METADATA, r as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, s as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, t as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, u as PraxisAnalyticalDrawerComponent, v as PraxisFilter, w as PraxisFilterOutletComponent, x as PraxisFilterOutletDirective, y as PraxisFilterWidgetConfigEditor, z as PraxisScopeBarComponent, E as PraxisTable, G as PraxisTableConfigEditor, H as PraxisTableInlineAuthoringEditorComponent, I as PraxisTableToolbar, K as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, L as TABLE_COMPONENT_AI_CAPABILITIES, O as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, Q as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, R as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, U as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, V as TABLE_COMPONENT_EDIT_PLAN_KIND, X as TABLE_COMPONENT_EDIT_PLAN_VERSION, Y as TASK_PRESETS, Z as TableDefaultsProvider, _ as TableRulesEditorComponent, $ as ToolbarActionsEditorComponent, a0 as ValueMappingEditorComponent, a1 as VisualFormulaBuilderComponent, a2 as analyticsComparisonMetricField, a3 as applyComputedFieldsToRows, a4 as buildTableApplyPlan, a5 as coerceTableComponentEditPlan, a6 as coerceTableComponentEditPlans, a7 as compileTableComponentEditPlan, a8 as compileTableComponentEditPlans, a9 as createTableAuthoringDocument, aa as formatComputedFieldValue, ab as getActionId, ac as getEnum, ad as getTableCapabilities, ae as getTableComponentEditPlanCapabilities, af as interpolateRelationEndpoint, ag as isAnalyticalDrawerSchema, ah as isTableRendererSupportedByRichContentP0, ai as mapTableRendererToRichContentP0, aj as normalizeComputedFieldDefinition, ak as normalizeTableAuthoringDocument, al as parseLegacyOrTableDocument, am as providePraxisAnalyticalDrawerSchemas, an as providePraxisFilterMetadata, ao as providePraxisTableMetadata, ap as providePraxisTableToolbarAppearance, aq as serializeTableAuthoringDocument, as as toCanonicalTableConfig, at as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-CosVmN5P.mjs';
2
2
  export { createDynamicRecord, extractRecordId, isDynamicDataRecord, resolveDataField } from '@praxisui/core';
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "10.0.0-rc.25",
3
+ "version": "10.0.0-rc.27",
4
4
  "description": "Advanced data table for Angular (Praxis UI) with editing, filtering, sorting, virtualization, and settings panel integration.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/core": "^21.0.0",
8
8
  "@angular/platform-browser": "^21.0.0",
9
- "@praxisui/ai": "^10.0.0-rc.25",
10
- "@praxisui/core": "^10.0.0-rc.25",
11
- "@praxisui/dynamic-fields": "^10.0.0-rc.25",
12
- "@praxisui/dynamic-form": "^10.0.0-rc.25",
13
- "@praxisui/metadata-editor": "^10.0.0-rc.25",
14
- "@praxisui/rich-content": "^10.0.0-rc.25",
15
- "@praxisui/settings-panel": "^10.0.0-rc.25",
16
- "@praxisui/table-rule-builder": "^10.0.0-rc.25",
9
+ "@praxisui/ai": "^10.0.0-rc.27",
10
+ "@praxisui/core": "^10.0.0-rc.27",
11
+ "@praxisui/dynamic-fields": "^10.0.0-rc.27",
12
+ "@praxisui/dynamic-form": "^10.0.0-rc.27",
13
+ "@praxisui/metadata-editor": "^10.0.0-rc.27",
14
+ "@praxisui/rich-content": "^10.0.0-rc.27",
15
+ "@praxisui/settings-panel": "^10.0.0-rc.27",
16
+ "@praxisui/table-rule-builder": "^10.0.0-rc.27",
17
17
  "@angular/cdk": "^21.0.0",
18
18
  "@angular/forms": "^21.0.0",
19
19
  "@angular/material": "^21.0.0",
20
20
  "@angular/router": "^21.0.0",
21
- "@praxisui/dialog": "^10.0.0-rc.25",
21
+ "@praxisui/dialog": "^10.0.0-rc.27",
22
22
  "rxjs": "~7.8.0"
23
23
  },
24
24
  "dependencies": {
@@ -109,11 +109,16 @@ Este documento e a referencia canonica da API JSON de praxis-table.
109
109
  > [!WARNING]
110
110
  > **Segurança Corporativa em Cenários Corporativos**: A visibilidade de colunas via dropdown da toolbar é um recurso estritamente visual (layout de apresentação do lado do cliente). A ocultação de colunas **não** protege o dado sensível da transmissão de rede nem de inspeção técnica. Se determinados campos (ex: salários, senhas ou tokens) forem confidenciais para o nível de permissão do usuário atual, a restrição de dados deve ser realizada obrigatoriamente no lado do servidor (através da filtragem de propriedades nas APIs de CRUD e consulta), e nunca por meio de ocultação puramente visual na tabela.
111
111
 
112
- ## Quick filters and density
113
-
114
- - `config.toolbar.filters.quickFilters[]` materializa um pequeno seletor de escopo na toolbar. Cada item declara `id`, `label`, `filter` e `icon` opcional. O runtime mantém no máximo um item ativo; acionar novamente o item atual restaura os critérios anteriores.
115
- - O filtro rápido é combinado com os critérios já ativos. Ao desativá-lo, a tabela restaura os critérios anteriores sem perder o contexto do operador.
116
- - Aplicar ou limpar o formulário de filtros avançados encerra o estado visual do filtro rápido para evitar dois controles aparentarem governar critérios divergentes.
112
+ ## Quick filters, unified filter region, and density
113
+
114
+ - **Região única de filtros e dono explícito da consulta**: Em telas de coleção com `praxis-table`, a própria tabela é a dona canônica dos filtros editáveis pelo usuário. Quando um campo (ex.: `ativo` / `status`) é governado por `config.toolbar.filters.quickFilters[]`, evite duplicá-lo em `alwaysVisibleFields` (mantenha-o apenas nos escopos rápidos e opcionalmente na gaveta avançada `selectedFieldIds`).
115
+ - `config.toolbar.filters.quickFilters[]` materializa um seletor de escopo governado na toolbar. Cada item declara `id`, `label`, `filter` e `icon` opcional.
116
+ - Um item com `filter: {}` representa o escopo **"Todos"** (sem restrição editável): acioná-lo limpa critérios editáveis anteriores em `filterCriteria` e em `queryContext.filters` não estruturais sem exigir reload da página.
117
+ - Critérios booleanos explícitos `false` (ex.: `{ ativo: false }`) são preservados integralmente na serialização remota e na avaliação local.
118
+ - **Reconciliação de atalhos externos (`queryContext.filters`) vs. filtros estruturais (`queryContext.meta`)**:
119
+ - Quando cards de KPI ou widgets externos aplicam um filtro editável via `queryContext.filters` (ex.: `{ ativo: true }`), a tabela sincroniza `advancedFilterValue`, `activeCrossFilters` e `activeQuickFilterId` correspondente.
120
+ - Se o operador alterar o escopo rápido (`onQuickFilterChange`), submeter/limpar os filtros da tabela (`onAdvancedFilterSubmit` / `onAdvancedFilterClear`) ou remover chips (`onClearCrossFilter` / `onClearAllCrossFilters`), a tabela reconcilia as chaves editáveis em `queryContext.filters` e emite `queryContextChange` e `queryContextClear`, impedindo que `queryContext.filters` órfãos continuem sobrescrevendo `filterCriteria`.
121
+ - Filtros estruturais de contexto (`queryContext.meta.relatedResource === true` + `parentFilterField`, `queryContext.meta.structuralFields`, `queryContext.meta.immutableFields` ou `queryContext.meta.structural === true`) permanecem protegidos e nunca são limpos por ações de filtro do usuário.
117
122
  - A composição adaptativa é responsabilidade do runtime: identidade, escopo, consulta e comandos se reorganizam pela largura do container da tabela. Dentro da consulta, campos editáveis formam a região de critérios; tags/atalhos salvos e comandos de gerenciamento formam um único cluster auxiliar. Em largura intermediária, os critérios e esse cluster completo compartilham o mesmo fluxo de quebra para aproveitar a faixa final sem criar uma linha órfã; em largura estreita, o cluster migra inteiro para a faixa seguinte. O host não precisa declarar coordenadas, breakpoints ou ordem visual adicional.
118
123
  - Em superfícies de até `640px`, os campos de consulta absorvem o espaço residual da própria linha até o limite do arquétipo; em `320px`, entradas que não cabem em pares ocupam a largura útil integral. Presets e comandos curtos preservam largura intrínseca. Grupos binários de filtros rápidos equilibram as duas opções em até `540px`, enquanto grupos maiores mantêm largura por conteúdo e overflow acessível.
119
124
  - `advancedFilters.settings.alwaysVisibleFields` deve conter apenas critérios frequentes. Atalhos persistidos e comandos de gerenciamento não devem ser simulados como campos sempre visíveis nem reposicionados por seletores CSS internos do host.
@@ -93,7 +93,7 @@ interface PraxisTableQueryContextClearEvent {
93
93
  remainingFilters?: Record<string, unknown>;
94
94
  remainingFilterCount?: number;
95
95
  tableId?: string;
96
- source?: 'toolbar-chip';
96
+ source?: 'toolbar-chip' | 'quick-filter' | 'advanced-filter';
97
97
  }
98
98
  declare const PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS: Record<string, TableToolbarAppearanceConfig>;
99
99
  declare const PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE: InjectionToken<TableToolbarAppearanceConfig>;
@@ -479,6 +479,8 @@ type FilterConfig = {
479
479
  /** User-selected extra field ids to show before pinned always-visible */
480
480
  selectedFieldIds?: string[];
481
481
  showAdvanced?: boolean;
482
+ showAddButton?: boolean;
483
+ showFilterSettings?: boolean;
482
484
  mode?: 'filter';
483
485
  changeDebounceMs?: number;
484
486
  allowSaveTags?: boolean;
@@ -1507,6 +1509,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1507
1509
  selection: SelectionModel<any>;
1508
1510
  dataSubject: BehaviorSubject<any[]>;
1509
1511
  subscriptions: Subscription[];
1512
+ private surfaceOutcomeOwnerDestroyed;
1510
1513
  showToolbar: boolean;
1511
1514
  hasInitialized: boolean;
1512
1515
  pageIndex: number;
@@ -1733,6 +1736,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1733
1736
  getAdvancedFilterPersistenceKey(): string;
1734
1737
  getAdvancedFilterFormId(): string;
1735
1738
  getAdvancedFilterOpenMode(): 'modal' | 'drawer';
1739
+ shouldShowAdvancedFilterAddButton(): boolean;
1740
+ shouldShowAdvancedFilterSettings(): boolean;
1736
1741
  getAdvancedFilterAlwaysVisibleFields(): string[] | undefined;
1737
1742
  getAdvancedFilterAlwaysVisibleFieldMetadataOverrides(): Record<string, Record<string, any>>;
1738
1743
  getAdvancedFilterFieldMetadata(): FieldMetadata[] | null | undefined;
@@ -1851,6 +1856,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1851
1856
  private hasDeclaredAppearanceSection;
1852
1857
  private shouldApplyAppearanceDefaultValue;
1853
1858
  private mergePersistedTableConfigWithInput;
1859
+ private reconcileTableConfigInputChange;
1854
1860
  private reconcileHostDeclaredTableContract;
1855
1861
  private reconcileHostDeclaredColumns;
1856
1862
  private reconcileHostDeclaredRowActions;
@@ -1977,6 +1983,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1977
1983
  private hasActiveEmptyStateFilters;
1978
1984
  private hasMeaningfulFilterCriteria;
1979
1985
  private hasMeaningfulFilterValue;
1986
+ isStructuralQueryContextField(field: string): boolean;
1980
1987
  computeActiveCrossFilters(): PraxisTableCrossFilterItem[];
1981
1988
  onClearCrossFilter(item: PraxisTableCrossFilterItem): void;
1982
1989
  onClearAllCrossFilters(): void;
@@ -2271,6 +2278,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2271
2278
  private emitEventWithActionFeedback;
2272
2279
  private executeConfiguredGlobalAction;
2273
2280
  private withTableRuntimeContext;
2281
+ private resolveTableSurfaceRuntime;
2274
2282
  private executeSurfaceOpen;
2275
2283
  private resolveConfiguredGlobalActionRef;
2276
2284
  private resolveActionGlobalActionRef;
@@ -2296,6 +2304,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2296
2304
  private unwrapCollectionWorkflowResult;
2297
2305
  private showCollectionWorkflowContractError;
2298
2306
  private tryHandleCollectionCreateToolbarAction;
2307
+ private bindDiscoveredSurfaceOutcome;
2308
+ private applySurfaceActionRefresh;
2299
2309
  private resolveBulkExportFormat;
2300
2310
  private isBulkExportActionKey;
2301
2311
  private normalizeExportFormat;
@@ -2336,6 +2346,17 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2336
2346
  filter: Record<string, unknown>;
2337
2347
  active: boolean;
2338
2348
  }): void;
2349
+ getConfiguredQuickFilters(): Array<{
2350
+ id: string;
2351
+ label: string;
2352
+ filter: Record<string, unknown>;
2353
+ icon?: string;
2354
+ }>;
2355
+ getQuickFilterManagedFields(): string[];
2356
+ private parseQuickFilterDefinition;
2357
+ getEffectiveEditableFilterCriteria(): Record<string, any>;
2358
+ private reconcileEditableQueryContextFilters;
2359
+ private syncQuickFilterStateFromEffectiveCriteria;
2339
2360
  private clearQuickFilterRuntimeState;
2340
2361
  private hasEquivalentFilterCriteria;
2341
2362
  applyAdvancedFilterCriteria(criteria: Record<string, any> | null | undefined, reason?: string): void;
@@ -2897,7 +2918,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2897
2918
  private emitMetadataChange;
2898
2919
  private emitSchemaStatus;
2899
2920
  getRowId(row: any): any;
2921
+ private preserveSelectionOnNextDataLoad;
2900
2922
  private reconcileSelectionAfterDataChange;
2923
+ private areSelectedRowSnapshotsEquivalent;
2924
+ private serializeSelectedRowSnapshot;
2901
2925
  private getComparableRowIdentity;
2902
2926
  getIdField(): string;
2903
2927
  private getSchemaIdFieldOverride;
@@ -2933,6 +2957,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2933
2957
  getRowSelectionAriaLabel(row: any, index?: number): string;
2934
2958
  getMasterSelectionAriaLabel(): string;
2935
2959
  private selectRowFromUserInteraction;
2960
+ clearSelection(emitEvent?: boolean): void;
2936
2961
  private emitSelectionChange;
2937
2962
  private publishSelectionStatus;
2938
2963
  private getAccessibleRowLabel;
@@ -3283,6 +3308,17 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3283
3308
  getJsonLogicSummary(value: JsonLogicExpression | null | undefined): string;
3284
3309
  private parseJsonLogicText;
3285
3310
  setConditionalOverrideCondition(index: number, raw: string): void;
3311
+ readonly overrideConditionOperators: readonly ["===", "!=", ">", ">=", "<", "<=", "truthy", "falsy"];
3312
+ getOverrideConditionField(condition: any): string;
3313
+ getOverrideConditionOperator(condition: any): string;
3314
+ getOverrideConditionValue(condition: any): string;
3315
+ setOverrideGuidedCondition(index: number, patch: {
3316
+ field?: string;
3317
+ operator?: string;
3318
+ value?: string;
3319
+ }): void;
3320
+ private extractGuidedJsonLogicCondition;
3321
+ private coerceGuidedScalar;
3286
3322
  getOverrideField(path: string): any;
3287
3323
  setOverrideField(path: string, value: any): void;
3288
3324
  setOverrideJsonLogicField(path: string, raw: string): void;
@@ -3291,7 +3327,10 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3291
3327
  item: any;
3292
3328
  index: number;
3293
3329
  }>;
3330
+ addOverrideComposeItem(type: 'value' | 'badge' | 'icon' | 'chip'): void;
3294
3331
  addOverrideComposeValueItem(): void;
3332
+ removeOverrideComposeItem(index: number): void;
3333
+ setOverrideComposeItemProp(index: number, path: string, value: any): void;
3295
3334
  setOverrideComposeValueItemField(index: number, field: string): void;
3296
3335
  setOverrideComposeValueItemEmphasis(index: number, emphasis: string): void;
3297
3336
  getOverrideComposeLayoutProp(key: string): any;
@@ -3453,6 +3492,9 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3453
3492
  private stripRowPrefixes;
3454
3493
  private _coerceExpected;
3455
3494
  private getNested;
3495
+ private evaluatePreviewOverrideCondition;
3496
+ getEffectivePreviewRenderer(row: any): any;
3497
+ getPreviewSampleRows(): any[];
3456
3498
  getPreviewRendererType(row: any): 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'microVisualization' | 'rating' | 'avatar' | 'toggle' | 'menu' | 'html' | 'compose' | null;
3457
3499
  getPreviewIconName(row: any): string | null;
3458
3500
  getPreviewIconColor(row: any): string | null;
@@ -3464,14 +3506,15 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3464
3506
  getPreviewImageShape(): 'square' | 'rounded' | 'circle' | undefined;
3465
3507
  getPreviewImageFit(): 'cover' | 'contain' | undefined;
3466
3508
  getPreviewBadgeText(row: any): string | null;
3467
- getPreviewBadgeIcon(_row: any): string | null;
3468
- getPreviewBadgeClasses(_row: any): string[];
3509
+ getPreviewBadgeIcon(row: any): string | null;
3510
+ getPreviewBadgeClasses(row: any): string[];
3511
+ private buildBadgeClassesFromConfig;
3469
3512
  getPreviewLinkText(row: any): string;
3470
3513
  getPreviewLinkHref(row: any): string | null;
3471
3514
  getPreviewButtonLabel(row: any): string;
3472
3515
  getPreviewButtonIcon(): string | null;
3473
3516
  getPreviewChipText(row: any): string | null;
3474
- getPreviewChipClasses(): string[];
3517
+ getPreviewChipClasses(row?: any): string[];
3475
3518
  getPreviewProgressValue(row: any): number;
3476
3519
  getPreviewMicroVisualizationHtml(row: any): string;
3477
3520
  getMicroVisualizationGuidance(): 'recommended' | 'conditional';
@@ -3489,7 +3532,22 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3489
3532
  getPreviewRatingOutlineColor(): string | undefined;
3490
3533
  getPreviewRatingSize(): 'small' | 'medium' | 'large';
3491
3534
  getPreviewRatingAriaLabel(): string | undefined;
3492
- getComposePreviewItems(_row: any): any[];
3535
+ getComposePreviewItems(row: any): any[];
3536
+ getComposePreviewContainerStyle(row: any): Record<string, string>;
3537
+ getComposePreviewValueText(item: any, row: any): string;
3538
+ getComposePreviewValueClasses(item: any): string[];
3539
+ getComposePreviewBadgeText(item: any, row: any): string;
3540
+ getComposePreviewBadgeClasses(item: any): string[];
3541
+ getComposePreviewChipText(item: any, row: any): string;
3542
+ getComposePreviewChipClasses(item: any): string[];
3543
+ getComposePreviewLinkText(item: any, row: any): string;
3544
+ getComposePreviewLinkHref(item: any, row: any): string | null;
3545
+ getComposePreviewIconName(item: any, row: any): string | null;
3546
+ getComposePreviewIconColor(item: any, _row: any): string | null;
3547
+ getComposePreviewIconStyle(item: any, _row: any): Record<string, string> | null;
3548
+ getComposePreviewAvatarStyle(item: any): Record<string, string>;
3549
+ getComposePreviewAvatarInitials(item: any, row: any): string;
3550
+ getComposePreviewProgressValue(item: any, row: any): number;
3493
3551
  getComposePreviewRatingValue(item: any, row: any): number;
3494
3552
  getComposePreviewRatingMax(item: any): number;
3495
3553
  getComposePreviewRatingColor(item: any): string | undefined;
@@ -3528,6 +3586,8 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3528
3586
  getSelectedComposeItem(): any;
3529
3587
  getSelectedComposeItemProp(path: string): any;
3530
3588
  setSelectedComposeItemProp(path: string, value: any): void;
3589
+ getConsolidatedSecondaryColumn(item: any): ExtendedColumnDefinition | null;
3590
+ hideConsolidatedColumn(field: string): void;
3531
3591
  private findRendererFieldByCandidates;
3532
3592
  private normalizeFieldLookup;
3533
3593
  getColumnKeyInputType(column: ColumnDefinition | null): 'text' | 'number' | 'boolean';
@@ -3905,6 +3965,8 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3905
3965
  presentation: FormControl<FilterConfig['presentation']>;
3906
3966
  alwaysVisibleFields: FormControl<string[]>;
3907
3967
  showAdvanced: FormControl<boolean>;
3968
+ showAddButton: FormControl<boolean>;
3969
+ showFilterSettings: FormControl<boolean>;
3908
3970
  mode: FormControl<'filter'>;
3909
3971
  changeDebounceMs: FormControl<number>;
3910
3972
  allowSaveTags: FormControl<boolean>;
@@ -4445,22 +4507,23 @@ declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
4445
4507
  readonly sourceModes: string[];
4446
4508
  readonly resourceKinds: string[];
4447
4509
  readonly resourcePathMethods: string[];
4510
+ readonly cardGridColumnOptions: Array<'auto' | 1 | 2 | 3 | 4>;
4511
+ readonly composeDirections: Array<'row' | 'column'>;
4512
+ readonly composeGaps: Array<'xs' | 'sm' | 'md' | 'lg'>;
4513
+ readonly semanticTones: Array<'' | 'neutral' | 'info' | 'primary' | 'success' | 'warning' | 'danger'>;
4514
+ readonly conditionOperators: Array<'===' | '!=' | '>' | '>=' | '<' | '<=' | 'truthy' | 'falsy'>;
4448
4515
  fallbackModes(): string[];
4449
- sample: string;
4516
+ sample: 'A' | 'B' | 'C';
4450
4517
  get previewContext(): {
4451
- row: {
4452
- id: string;
4453
- note: string;
4454
- status: string;
4455
- progress: number;
4456
- };
4518
+ row: Record<string, unknown>;
4457
4519
  };
4458
4520
  /** Local presenter projection only; never used as an authoring/save source. */
4459
4521
  previewNodes(): RichBlockNode[];
4460
4522
  previewRichContentDocuments(): RichContentDocument[];
4461
4523
  richContentEditorInputs(): PraxisRichContentEditorInputs | null;
4462
4524
  applyRichContentEditor(): void;
4463
- addPreset(preset: 'callout' | 'richCard'): void;
4525
+ addPreset(preset: 'callout' | 'richCard' | 'richDetailGrid'): void;
4526
+ effectiveNodeType(node?: Record<string, any> | undefined): string;
4464
4527
  nodeLabel(node: Record<string, any>): string;
4465
4528
  nodeIcon(node: Record<string, any>): string;
4466
4529
  canMove(direction: -1 | 1): boolean;
@@ -4502,6 +4565,38 @@ declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
4502
4565
  edit(field: string, value: string): void;
4503
4566
  fields(): string[];
4504
4567
  isAdvancedNode(): boolean;
4568
+ availableColumns(): Array<{
4569
+ field: string;
4570
+ label: string;
4571
+ }>;
4572
+ supportsFieldBinding(): boolean;
4573
+ boundColumnField(): string;
4574
+ bindColumnField(fieldName: string): void;
4575
+ cardGridColumnsValue(): 'auto' | 1 | 2 | 3 | 4;
4576
+ setCardGridColumns(value: 'auto' | 1 | 2 | 3 | 4): void;
4577
+ cardGridMinWidthValue(): number;
4578
+ setCardGridMinWidth(value: number | string): void;
4579
+ composeDirectionValue(): 'row' | 'column';
4580
+ setComposeDirection(direction: 'row' | 'column'): void;
4581
+ composeGapValue(): 'xs' | 'sm' | 'md' | 'lg';
4582
+ setComposeGap(gap: 'xs' | 'sm' | 'md' | 'lg'): void;
4583
+ supportsTone(): boolean;
4584
+ toneValue(): string;
4585
+ setTone(tone: string): void;
4586
+ supportsVisibleWhen(): boolean;
4587
+ visibleWhenMode(): 'always' | 'conditional' | 'custom';
4588
+ setVisibleWhenMode(mode: 'always' | 'conditional' | 'custom'): void;
4589
+ visibleWhenField(): string;
4590
+ visibleWhenOperator(): '===' | '!=' | '>' | '>=' | '<' | '<=' | 'truthy' | 'falsy';
4591
+ visibleWhenValue(): string;
4592
+ setVisibleWhenRule(patch: {
4593
+ field?: string;
4594
+ operator?: '===' | '!=' | '>' | '>=' | '<' | '<=' | 'truthy' | 'falsy';
4595
+ value?: string;
4596
+ }): void;
4597
+ private parseConditionScalar;
4598
+ private parseGuidedVisibleWhen;
4599
+ private isPreviewNodeVisible;
4505
4600
  private commitTree;
4506
4601
  editJson(value: string): void;
4507
4602
  discard(): void;
@@ -4607,6 +4702,46 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4607
4702
  getColumnAuthoringMetas(): FieldMetadata[];
4608
4703
  get filteredIdFieldOptions(): FieldMetadata[];
4609
4704
  isUsingFilterDtoMetas(): boolean;
4705
+ get toolbarFiltersEnabled(): boolean;
4706
+ get toolbarShowQuickFilters(): boolean;
4707
+ get toolbarShowAdvancedButton(): boolean;
4708
+ get advancedFilterShowAddButton(): boolean;
4709
+ get advancedFilterShowFilterSettings(): boolean;
4710
+ get toolbarQuickFilters(): Array<{
4711
+ id: string;
4712
+ label: string;
4713
+ icon?: string;
4714
+ filter: any;
4715
+ }>;
4716
+ get duplicatedQuickFilterInlineFields(): string[];
4717
+ private inferDefaultStatusFilterField;
4718
+ private updateToolbarFiltersPatch;
4719
+ onToolbarFiltersEnabledChange(enabled: boolean): void;
4720
+ onToolbarShowQuickFiltersChange(show: boolean): void;
4721
+ onToolbarShowAdvancedButtonChange(show: boolean): void;
4722
+ onAdvancedFilterShowAddButtonChange(show: boolean): void;
4723
+ onAdvancedFilterShowFilterSettingsChange(show: boolean): void;
4724
+ applyBooleanQuickFilterPreset(fieldName?: string): void;
4725
+ addQuickFilterScope(): void;
4726
+ removeQuickFilterScope(index: number): void;
4727
+ updateQuickFilterMeta(index: number, patch: {
4728
+ id?: string;
4729
+ label?: string;
4730
+ icon?: string;
4731
+ }): void;
4732
+ getQuickFilterMode(item: {
4733
+ filter?: any;
4734
+ }): 'all' | 'boolean' | 'equals';
4735
+ getQuickFilterField(item: {
4736
+ filter?: any;
4737
+ }): string;
4738
+ getQuickFilterValue(item: {
4739
+ filter?: any;
4740
+ }): any;
4741
+ onQuickFilterModeChange(index: number, mode: 'all' | 'boolean' | 'equals'): void;
4742
+ onQuickFilterFieldChange(index: number, fieldName: string): void;
4743
+ onQuickFilterValueChange(index: number, rawValue: any): void;
4744
+ consolidateDuplicateInlineFilterFields(): void;
4610
4745
  getEffectiveDataMode(): EffectiveDataMode;
4611
4746
  isEffectiveLocalMode(): boolean;
4612
4747
  private resolveLocalDataModeFeatureEnabled;
@@ -4771,6 +4906,7 @@ interface PraxisFilterWidgetEditorInputs {
4771
4906
  advancedOpenMode?: 'modal' | 'drawer';
4772
4907
  advancedClearButtonsEnabled?: boolean;
4773
4908
  persistenceKey?: string;
4909
+ showAddButton?: boolean;
4774
4910
  showFilterSettings?: boolean;
4775
4911
  enableCustomization?: boolean;
4776
4912
  [key: string]: unknown;