@praxisui/table 9.0.67 → 9.0.68-rc.0

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 { af as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-DQWmLtjb.mjs';
3
+ import { af as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-Cxa4T7sm.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 { L as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, n as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, $ as coerceTableComponentEditPlans, a1 as compileTableComponentEditPlans, Q as TASK_PRESETS, a6 as getTableComponentEditPlanCapabilities, H as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, E as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, I as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, O as TABLE_COMPONENT_EDIT_PLAN_VERSION, G as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, K as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-DQWmLtjb.mjs';
4
+ import { L as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, n as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, $ as coerceTableComponentEditPlans, a1 as compileTableComponentEditPlans, Q as TASK_PRESETS, a6 as getTableComponentEditPlanCapabilities, H as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, E as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, I as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, O as TABLE_COMPONENT_EDIT_PLAN_VERSION, G as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, K as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-Cxa4T7sm.mjs';
5
5
 
6
6
  const TABLE_ROW_EXPRESSION_CONTEXT_OPTION = {
7
7
  mode: 'expression',
@@ -1 +1 @@
1
- export { A as ANALYTICS_TABLE_ROW_KEY_FIELD, a as AnalyticsTableConfigAdapterService, b as AnalyticsTableContractService, c as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, d as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, e as ColumnsConfigEditorComponent, D as DATE_PRESETS, f as DataFormatterComponent, g as DataFormattingService, F as FORMULA_TEMPLATES, h as FilterConfigService, i as FilterSettingsComponent, j as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, k as PRAXIS_FILTER_AUTHORING_MANIFEST, l as PRAXIS_FILTER_COMPONENT_METADATA, m as PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, n as PRAXIS_TABLE_AUTHORING_MANIFEST, o as PRAXIS_TABLE_COMPONENT_METADATA, p as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, q as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, r as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, s as PraxisFilter, t as PraxisFilterWidgetConfigEditor, u as PraxisTable, v as PraxisTableConfigEditor, w as PraxisTableInlineAuthoringEditorComponent, x as PraxisTableToolbar, y as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, z as TABLE_COMPONENT_AI_CAPABILITIES, E as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, G as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, H as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, I as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, K as TABLE_COMPONENT_EDIT_PLAN_KIND, O as TABLE_COMPONENT_EDIT_PLAN_VERSION, Q as TASK_PRESETS, R as TableDefaultsProvider, U as TableRulesEditorComponent, V as ToolbarActionsEditorComponent, W as ValueMappingEditorComponent, X as VisualFormulaBuilderComponent, Y as analyticsComparisonMetricField, Z as buildTableApplyPlan, _ as coerceTableComponentEditPlan, $ as coerceTableComponentEditPlans, a0 as compileTableComponentEditPlan, a1 as compileTableComponentEditPlans, a2 as createTableAuthoringDocument, a3 as getActionId, a4 as getEnum, a5 as getTableCapabilities, a6 as getTableComponentEditPlanCapabilities, a7 as isTableRendererSupportedByRichContentP0, a8 as mapTableRendererToRichContentP0, a9 as normalizeTableAuthoringDocument, aa as parseLegacyOrTableDocument, ab as providePraxisFilterMetadata, ac as providePraxisTableMetadata, ad as providePraxisTableToolbarAppearance, ae as serializeTableAuthoringDocument, ag as toCanonicalTableConfig, ah as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-DQWmLtjb.mjs';
1
+ export { A as ANALYTICS_TABLE_ROW_KEY_FIELD, a as AnalyticsTableConfigAdapterService, b as AnalyticsTableContractService, c as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, d as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, e as ColumnsConfigEditorComponent, D as DATE_PRESETS, f as DataFormatterComponent, g as DataFormattingService, F as FORMULA_TEMPLATES, h as FilterConfigService, i as FilterSettingsComponent, j as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, k as PRAXIS_FILTER_AUTHORING_MANIFEST, l as PRAXIS_FILTER_COMPONENT_METADATA, m as PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, n as PRAXIS_TABLE_AUTHORING_MANIFEST, o as PRAXIS_TABLE_COMPONENT_METADATA, p as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, q as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, r as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, s as PraxisFilter, t as PraxisFilterWidgetConfigEditor, u as PraxisTable, v as PraxisTableConfigEditor, w as PraxisTableInlineAuthoringEditorComponent, x as PraxisTableToolbar, y as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, z as TABLE_COMPONENT_AI_CAPABILITIES, E as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, G as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, H as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, I as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, K as TABLE_COMPONENT_EDIT_PLAN_KIND, O as TABLE_COMPONENT_EDIT_PLAN_VERSION, Q as TASK_PRESETS, R as TableDefaultsProvider, U as TableRulesEditorComponent, V as ToolbarActionsEditorComponent, W as ValueMappingEditorComponent, X as VisualFormulaBuilderComponent, Y as analyticsComparisonMetricField, Z as buildTableApplyPlan, _ as coerceTableComponentEditPlan, $ as coerceTableComponentEditPlans, a0 as compileTableComponentEditPlan, a1 as compileTableComponentEditPlans, a2 as createTableAuthoringDocument, a3 as getActionId, a4 as getEnum, a5 as getTableCapabilities, a6 as getTableComponentEditPlanCapabilities, a7 as isTableRendererSupportedByRichContentP0, a8 as mapTableRendererToRichContentP0, a9 as normalizeTableAuthoringDocument, aa as parseLegacyOrTableDocument, ab as providePraxisFilterMetadata, ac as providePraxisTableMetadata, ad as providePraxisTableToolbarAppearance, ae as serializeTableAuthoringDocument, ag as toCanonicalTableConfig, ah as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-Cxa4T7sm.mjs';
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "9.0.67",
3
+ "version": "9.0.68-rc.0",
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": "^9.0.67",
10
- "@praxisui/core": "^9.0.67",
11
- "@praxisui/dynamic-fields": "^9.0.67",
12
- "@praxisui/dynamic-form": "^9.0.67",
13
- "@praxisui/metadata-editor": "^9.0.67",
14
- "@praxisui/rich-content": "^9.0.67",
15
- "@praxisui/settings-panel": "^9.0.67",
16
- "@praxisui/table-rule-builder": "^9.0.67",
9
+ "@praxisui/ai": "^9.0.68-rc.0",
10
+ "@praxisui/core": "^9.0.68-rc.0",
11
+ "@praxisui/dynamic-fields": "^9.0.68-rc.0",
12
+ "@praxisui/dynamic-form": "^9.0.68-rc.0",
13
+ "@praxisui/metadata-editor": "^9.0.68-rc.0",
14
+ "@praxisui/rich-content": "^9.0.68-rc.0",
15
+ "@praxisui/settings-panel": "^9.0.68-rc.0",
16
+ "@praxisui/table-rule-builder": "^9.0.68-rc.0",
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": "^9.0.67",
21
+ "@praxisui/dialog": "^9.0.68-rc.0",
22
22
  "rxjs": "~7.8.0"
23
23
  },
24
24
  "dependencies": {
@@ -1513,3 +1513,32 @@ type DiagramEmbedNode = {
1513
1513
  };
1514
1514
  };
1515
1515
  ```
1516
+
1517
+ ## Filter presentation
1518
+
1519
+ `FilterPresentationConfig` is owned by Core. Tables author it at `behavior.filtering.advancedFilters.settings.presentation`; standalone filters use `FilterConfig.presentation`, projected directly to the runtime `presentation` input. It changes presentation only, never the filter DTO or query semantics.
1520
+
1521
+ With filter persistence enabled, an acknowledged persisted `FilterConfig.presentation` overrides the authored input for the same component identity on reload. Apply remains a preview-only operation. Hosts that require input-only materialization set `disablePersistence`, which prevents preference loading and saving.
1522
+
1523
+ The guided preferences editor roundtrips the complete effective `FilterConfig`; changing presentation or another managed section preserves unmanaged siblings such as `selectedFieldIds` and field metadata overrides.
1524
+
1525
+ ```json
1526
+ {
1527
+ "header": { "visible": true, "text": "Filtros", "position": "above", "size": "medium" },
1528
+ "advancedAction": { "display": "icon-text", "text": "Mais filtros", "icon": "filter_list", "size": "compact", "position": "end" }
1529
+ }
1530
+ ```
1531
+
1532
+ | Region | Optional properties |
1533
+ | --- | --- |
1534
+ | `header` | `visible: boolean`, `text: string`, `icon: string`, `position: above \| inline`, `size: small \| medium \| large` |
1535
+ | `advancedAction` | `display: icon \| text \| icon-text`, `text: string`, `icon: string`, `size: compact \| standard`, `position: start \| end` |
1536
+ | `tokens` | String values for `gap`, `headerGap`, `headerColor`, `headerFontSize`, `headerFontWeight`, `iconSize`, `actionGap`, `actionFontSize`, `actionFontWeight` |
1537
+
1538
+ Absent presentation preserves the existing icon action and hidden heading. `header.visible` explicitly enables the heading. An empty icon removes that icon. If the advanced action uses icon-only display with an empty icon, it falls back to its localized/authored text so the action remains discoverable. Text-only display never renders an icon. Nonempty authored text takes precedence over localized copy and the default catalog label. Empty or whitespace-only header/action text inherits the localized label, so it cannot create an unnamed action. Action position applies inside the auxiliary controls group, not the page. Existing `showAdvancedButton` controls whether the advanced action is available; presentation introduces no second visibility switch.
1539
+
1540
+ The embedded table supplies the heading, advanced-action label, dialog title and opening/unavailable feedback from the `praxisTableRuntime` catalog through the existing filter `i18n` input. Host locale changes and external translator overrides apply without modifying the filter query. Explicit presentation text still wins; clearing it restores catalog resolution. Standalone filters keep their explicit `i18n` input. Other legacy filter-manager copy is outside this localized projection.
1541
+
1542
+ Tokens project to CSS custom properties `--pfx-filter-gap`, `--pfx-filter-header-gap`, `--pfx-filter-header-color`, `--pfx-filter-header-font-size`, `--pfx-filter-header-font-weight`, `--pfx-filter-icon-size`, `--pfx-filter-action-gap`, `--pfx-filter-action-font-size`, and `--pfx-filter-action-font-weight`. Prefer the semantic size/position controls for ordinary authoring; tokens are for deliberate theme customization.
1543
+
1544
+ AI authoring extends existing operations: `filter.advanced.configure` receives `settings.presentation` for tables; `filter.settings.configure` receives `presentation` for standalone filters. Neither operation authors a query through this object.
@@ -1,5 +1,5 @@
1
1
  import * as _praxisui_core from '@praxisui/core';
2
- import { TableToolbarAppearanceConfig, TableConfig, TableToolbarAppearanceDensity, ToolbarActionEvent, PraxisExportScope, LoggerService, PraxisI18nService, TableToolbarAppearanceVariant, TableToolbarAppearanceShape, TableToolbarAppearanceDivider, TableToolbarTokenName, ToolbarAction as ToolbarAction$1, GlobalConfigService, AsyncConfigStorage, LocalStorageConfigService, ApiUrlEntry, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, PraxisResourceEvent, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ResourceCapabilityDigest, ConnectionStorage, LoadingOrchestrator, GlobalActionService, EnterpriseRuntimeContextService, PraxisLoadingRenderer, PraxisRuntimeComponentObservationEnvelope, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, ResourceCapabilityOperation, JsonLogicExpression, PraxisPresentationVisualizationKind, PraxisTableCellVisualizationConstraint, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, ResourceQuickConnectComponent, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog } from '@praxisui/core';
2
+ import { TableToolbarAppearanceConfig, TableConfig, TableToolbarAppearanceDensity, ToolbarActionEvent, PraxisExportScope, LoggerService, PraxisI18nService, TableToolbarAppearanceVariant, TableToolbarAppearanceShape, TableToolbarAppearanceDivider, TableToolbarTokenName, ToolbarAction as ToolbarAction$1, GlobalConfigService, FilterPresentationConfig, AsyncConfigStorage, LocalStorageConfigService, ApiUrlEntry, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, PraxisResourceEvent, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ResourceCapabilityDigest, ConnectionStorage, LoadingOrchestrator, GlobalActionService, EnterpriseRuntimeContextService, PraxisLoadingRenderer, PraxisRuntimeComponentObservationEnvelope, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, ResourceCapabilityOperation, JsonLogicExpression, PraxisPresentationVisualizationKind, PraxisTableCellVisualizationConstraint, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, ResourceQuickConnectComponent, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog } from '@praxisui/core';
3
3
  import * as i0 from '@angular/core';
4
4
  import { InjectionToken, AfterViewInit, OnDestroy, EventEmitter, ElementRef, Provider, OnInit, OnChanges, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, SimpleChanges, ComponentRef, AfterViewChecked, AfterContentInit, Injector, Type } from '@angular/core';
5
5
  import { ActivatedRoute } from '@angular/router';
@@ -392,6 +392,7 @@ declare class TableDefaultsProvider {
392
392
  }
393
393
 
394
394
  type FilterConfig = {
395
+ presentation?: FilterPresentationConfig;
395
396
  alwaysVisibleFields?: string[];
396
397
  /**
397
398
  * Deep metadata overrides for any field rendered by the filter runtime.
@@ -513,6 +514,7 @@ type I18n = {
513
514
  searchPlaceholder: string;
514
515
  advanced: string;
515
516
  advancedTitle?: string;
517
+ filtersLabel?: string;
516
518
  advancedOpening?: string;
517
519
  advancedUnavailable?: string;
518
520
  clear: string;
@@ -616,6 +618,7 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
616
618
  * Keys are field names from the filter DTO schema.
617
619
  */
618
620
  alwaysVisibleFieldMetadataOverrides: Record<string, Record<string, any>> | undefined;
621
+ private readonly schemaTransportOptions;
619
622
  /** Runtime field-level metadata overrides applied by the metadata editor. */
620
623
  private fieldMetadataOverrides;
621
624
  /** Additional selected field ids to render before pinned always-visible */
@@ -630,6 +633,13 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
630
633
  showFilterSettings: boolean;
631
634
  /** Controla a exibição do botão de filtro avançado */
632
635
  showAdvancedButton: boolean;
636
+ /** Projection of FilterConfig.presentation for standalone and embedded hosts. */
637
+ presentation?: FilterConfig['presentation'];
638
+ get filterHeaderText(): string;
639
+ get filterHeaderIcon(): string;
640
+ get advancedActionText(): string;
641
+ get advancedActionIcon(): string;
642
+ get advancedActionDisplay(): string;
633
643
  /** Controla a exibição do botão de adicionar campos */
634
644
  showAddButton: boolean;
635
645
  /** Controla a exibição do botão de limpar filtros */
@@ -1048,7 +1058,7 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
1048
1058
  private isEditableElement;
1049
1059
  private focusQuick;
1050
1060
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilter, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }]>;
1051
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilter, "praxis-filter", never, { "resourcePath": { "alias": "resourcePath"; "required": true; }; "apiUrlEntry": { "alias": "apiUrlEntry"; "required": false; }; "fieldMetadata": { "alias": "fieldMetadata"; "required": false; }; "filterId": { "alias": "filterId"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "value": { "alias": "value"; "required": false; }; "alwaysVisibleFields": { "alias": "alwaysVisibleFields"; "required": false; }; "alwaysVisibleFieldMetadataOverrides": { "alias": "alwaysVisibleFieldMetadataOverrides"; "required": false; }; "selectedFieldIds": { "alias": "selectedFieldIds"; "required": false; }; "tags": { "alias": "tags"; "required": false; }; "allowSaveTags": { "alias": "allowSaveTags"; "required": false; }; "persistenceKey": { "alias": "persistenceKey"; "required": false; }; "disablePersistence": { "alias": "disablePersistence"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; "changeDebounceMs": { "alias": "changeDebounceMs"; "required": false; }; "showFilterSettings": { "alias": "showFilterSettings"; "required": false; }; "showAdvancedButton": { "alias": "showAdvancedButton"; "required": false; }; "showAddButton": { "alias": "showAddButton"; "required": false; }; "showClearButton": { "alias": "showClearButton"; "required": false; }; "showSearchButton": { "alias": "showSearchButton"; "required": false; }; "confirmTagDelete": { "alias": "confirmTagDelete"; "required": false; }; "placeBooleansInActions": { "alias": "placeBooleansInActions"; "required": false; }; "showToggleLabels": { "alias": "showToggleLabels"; "required": false; }; "useInlineSelectVariant": { "alias": "useInlineSelectVariant"; "required": false; }; "useInlineSearchableSelectVariant": { "alias": "useInlineSearchableSelectVariant"; "required": false; }; "useInlineMultiSelectVariant": { "alias": "useInlineMultiSelectVariant"; "required": false; }; "useInlineInputVariant": { "alias": "useInlineInputVariant"; "required": false; }; "useInlineToggleVariant": { "alias": "useInlineToggleVariant"; "required": false; }; "useInlineRangeVariant": { "alias": "useInlineRangeVariant"; "required": false; }; "useInlineDateVariant": { "alias": "useInlineDateVariant"; "required": false; }; "useInlineDateRangeVariant": { "alias": "useInlineDateRangeVariant"; "required": false; }; "useInlineTimeVariant": { "alias": "useInlineTimeVariant"; "required": false; }; "useInlineTimeRangeVariant": { "alias": "useInlineTimeRangeVariant"; "required": false; }; "useInlineTreeSelectVariant": { "alias": "useInlineTreeSelectVariant"; "required": false; }; "alwaysMinWidth": { "alias": "alwaysMinWidth"; "required": false; }; "alwaysColsMd": { "alias": "alwaysColsMd"; "required": false; }; "alwaysColsLg": { "alias": "alwaysColsLg"; "required": false; }; "tagColor": { "alias": "tagColor"; "required": false; }; "tagVariant": { "alias": "tagVariant"; "required": false; }; "tagButtonColor": { "alias": "tagButtonColor"; "required": false; }; "actionsButtonColor": { "alias": "actionsButtonColor"; "required": false; }; "actionsVariant": { "alias": "actionsVariant"; "required": false; }; "overlayVariant": { "alias": "overlayVariant"; "required": false; }; "overlayBackdrop": { "alias": "overlayBackdrop"; "required": false; }; "advancedOpenMode": { "alias": "advancedOpenMode"; "required": false; }; "advancedClearButtonsEnabled": { "alias": "advancedClearButtonsEnabled"; "required": false; }; }, { "submit": "submit"; "change": "change"; "clear": "clear"; "modeChange": "modeChange"; "requestSearch": "requestSearch"; "contextChange": "contextChange"; "tagsChange": "tagsChange"; "selectedFieldIdsChange": "selectedFieldIdsChange"; "metaChanged": "metaChanged"; "schemaStatusChange": "schemaStatusChange"; }, never, never, true, never>;
1061
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilter, "praxis-filter", never, { "resourcePath": { "alias": "resourcePath"; "required": true; }; "apiUrlEntry": { "alias": "apiUrlEntry"; "required": false; }; "fieldMetadata": { "alias": "fieldMetadata"; "required": false; }; "filterId": { "alias": "filterId"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "value": { "alias": "value"; "required": false; }; "alwaysVisibleFields": { "alias": "alwaysVisibleFields"; "required": false; }; "alwaysVisibleFieldMetadataOverrides": { "alias": "alwaysVisibleFieldMetadataOverrides"; "required": false; }; "selectedFieldIds": { "alias": "selectedFieldIds"; "required": false; }; "tags": { "alias": "tags"; "required": false; }; "allowSaveTags": { "alias": "allowSaveTags"; "required": false; }; "persistenceKey": { "alias": "persistenceKey"; "required": false; }; "disablePersistence": { "alias": "disablePersistence"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; "changeDebounceMs": { "alias": "changeDebounceMs"; "required": false; }; "showFilterSettings": { "alias": "showFilterSettings"; "required": false; }; "showAdvancedButton": { "alias": "showAdvancedButton"; "required": false; }; "presentation": { "alias": "presentation"; "required": false; }; "showAddButton": { "alias": "showAddButton"; "required": false; }; "showClearButton": { "alias": "showClearButton"; "required": false; }; "showSearchButton": { "alias": "showSearchButton"; "required": false; }; "confirmTagDelete": { "alias": "confirmTagDelete"; "required": false; }; "placeBooleansInActions": { "alias": "placeBooleansInActions"; "required": false; }; "showToggleLabels": { "alias": "showToggleLabels"; "required": false; }; "useInlineSelectVariant": { "alias": "useInlineSelectVariant"; "required": false; }; "useInlineSearchableSelectVariant": { "alias": "useInlineSearchableSelectVariant"; "required": false; }; "useInlineMultiSelectVariant": { "alias": "useInlineMultiSelectVariant"; "required": false; }; "useInlineInputVariant": { "alias": "useInlineInputVariant"; "required": false; }; "useInlineToggleVariant": { "alias": "useInlineToggleVariant"; "required": false; }; "useInlineRangeVariant": { "alias": "useInlineRangeVariant"; "required": false; }; "useInlineDateVariant": { "alias": "useInlineDateVariant"; "required": false; }; "useInlineDateRangeVariant": { "alias": "useInlineDateRangeVariant"; "required": false; }; "useInlineTimeVariant": { "alias": "useInlineTimeVariant"; "required": false; }; "useInlineTimeRangeVariant": { "alias": "useInlineTimeRangeVariant"; "required": false; }; "useInlineTreeSelectVariant": { "alias": "useInlineTreeSelectVariant"; "required": false; }; "alwaysMinWidth": { "alias": "alwaysMinWidth"; "required": false; }; "alwaysColsMd": { "alias": "alwaysColsMd"; "required": false; }; "alwaysColsLg": { "alias": "alwaysColsLg"; "required": false; }; "tagColor": { "alias": "tagColor"; "required": false; }; "tagVariant": { "alias": "tagVariant"; "required": false; }; "tagButtonColor": { "alias": "tagButtonColor"; "required": false; }; "actionsButtonColor": { "alias": "actionsButtonColor"; "required": false; }; "actionsVariant": { "alias": "actionsVariant"; "required": false; }; "overlayVariant": { "alias": "overlayVariant"; "required": false; }; "overlayBackdrop": { "alias": "overlayBackdrop"; "required": false; }; "advancedOpenMode": { "alias": "advancedOpenMode"; "required": false; }; "advancedClearButtonsEnabled": { "alias": "advancedClearButtonsEnabled"; "required": false; }; }, { "submit": "submit"; "change": "change"; "clear": "clear"; "modeChange": "modeChange"; "requestSearch": "requestSearch"; "contextChange": "contextChange"; "tagsChange": "tagsChange"; "selectedFieldIdsChange": "selectedFieldIdsChange"; "metaChanged": "metaChanged"; "schemaStatusChange": "schemaStatusChange"; }, never, never, true, never>;
1052
1062
  }
1053
1063
 
1054
1064
  declare const PRAXIS_FILTER_COMPONENT_METADATA: ComponentDocMeta;
@@ -2151,6 +2161,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2151
2161
  isCustomizationAvailable(): boolean;
2152
2162
  private isAuthoringAssistantAvailable;
2153
2163
  openTableSettings(): void;
2164
+ private openTableSettingsEditor;
2154
2165
  private applyTableConfig;
2155
2166
  private buildTableEditorRuntimeContext;
2156
2167
  private emitWidgetInputPatch;
@@ -2504,6 +2515,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2504
2515
  * Verifica se uma funcionalidade está disponível
2505
2516
  */
2506
2517
  isFeatureAvailable(feature: string): boolean;
2518
+ private filterI18nCache?;
2507
2519
  /**
2508
2520
  * Obtém configurações de i18n para o filtro baseado na configuração da tabela
2509
2521
  */
@@ -2707,6 +2719,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2707
2719
  isRowClickSelectable(): boolean;
2708
2720
  getRowTabIndex(row: any, index: number): number | null;
2709
2721
  onRowFocused(row: any, index: number): void;
2722
+ onSingleSelectionSpace(event: Event, row: unknown): void;
2710
2723
  onRowKeydown(event: KeyboardEvent, row: any, index: number): void;
2711
2724
  private reconcileKeyboardFocusAfterDataChange;
2712
2725
  private hasKeyboardRowFocus;
@@ -2715,6 +2728,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2715
2728
  masterToggle(): void;
2716
2729
  isAllSelected(): boolean;
2717
2730
  toggleRow(row: any): void;
2731
+ onSingleSelectionChanged(row: any): void;
2718
2732
  getRowSelectionAriaLabel(row: any, index?: number): string;
2719
2733
  getMasterSelectionAriaLabel(): string;
2720
2734
  private selectRowFromUserInteraction;
@@ -2897,7 +2911,7 @@ interface JsonEditorEvent {
2897
2911
  type: 'apply' | 'format' | 'validation';
2898
2912
  payload: JsonValidationResult;
2899
2913
  }
2900
- declare class JsonConfigEditorComponent implements OnInit, OnDestroy {
2914
+ declare class JsonConfigEditorComponent implements OnChanges, OnDestroy {
2901
2915
  private cdr;
2902
2916
  document: TableAuthoringDocument | null;
2903
2917
  documentChange: EventEmitter<TableAuthoringDocument>;
@@ -2910,7 +2924,8 @@ declare class JsonConfigEditorComponent implements OnInit, OnDestroy {
2910
2924
  private destroy$;
2911
2925
  private jsonTextChanges$;
2912
2926
  constructor(cdr: ChangeDetectorRef);
2913
- ngOnInit(): void;
2927
+ ngOnChanges(changes: SimpleChanges): void;
2928
+ private matchesDocument;
2914
2929
  ngOnDestroy(): void;
2915
2930
  onJsonTextChange(text: string): void;
2916
2931
  applyJsonChanges(): void;
@@ -3489,6 +3504,10 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
3489
3504
  private iconPicker;
3490
3505
  config: TableConfig;
3491
3506
  configChange: EventEmitter<_praxisui_core.TableConfigModern>;
3507
+ validationChange: EventEmitter<boolean>;
3508
+ private surfaceValidity;
3509
+ get hasInvalidSurfaceDraft(): boolean;
3510
+ onSurfaceValidationChange(kind: 'toolbar' | 'row' | 'bulk', valid: boolean): void;
3492
3511
  toolbarActionsChange: EventEmitter<ToolbarActionsChange>;
3493
3512
  toolbarForm: FormGroup;
3494
3513
  isV2: boolean;
@@ -3521,6 +3540,7 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
3521
3540
  hint?: string;
3522
3541
  };
3523
3542
  }): string;
3543
+ private formProjectionBaseline?;
3524
3544
  ngOnInit(): void;
3525
3545
  ngOnChanges(changes: SimpleChanges): void;
3526
3546
  ngOnDestroy(): void;
@@ -3535,6 +3555,8 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
3535
3555
  private removeAddToolbarAction;
3536
3556
  private syncAddFormFromActions;
3537
3557
  private updateConfig;
3558
+ /** Full editor projection used only to compare changes; defaults are not authored implicitly. */
3559
+ private buildConfig;
3538
3560
  getActionSelectValue(action?: EditableTableAction): string;
3539
3561
  getActionParam(action?: EditableTableAction): string;
3540
3562
  isRequiredGlobalActionParamMissing(action: EditableTableAction, spec: GlobalActionCatalogOption): boolean;
@@ -3607,7 +3629,7 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
3607
3629
  pickRowMenuIcon(): Promise<void>;
3608
3630
  pickRowHeaderIcon(): Promise<void>;
3609
3631
  static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarActionsEditorComponent, never>;
3610
- static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarActionsEditorComponent, "toolbar-actions-editor", never, { "config": { "alias": "config"; "required": false; }; }, { "configChange": "configChange"; "toolbarActionsChange": "toolbarActionsChange"; }, never, never, true, never>;
3632
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarActionsEditorComponent, "toolbar-actions-editor", never, { "config": { "alias": "config"; "required": false; }; }, { "configChange": "configChange"; "validationChange": "validationChange"; "toolbarActionsChange": "toolbarActionsChange"; }, never, never, true, never>;
3611
3633
  }
3612
3634
 
3613
3635
  interface MessagesLocalizationChange {
@@ -3654,6 +3676,8 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3654
3676
  private fb;
3655
3677
  private readonly hostRef;
3656
3678
  private readonly cdr;
3679
+ private readonly presentationI18n;
3680
+ get presentationTabLabel(): string;
3657
3681
  metadata: FieldMetadata[];
3658
3682
  metadataSource: 'filter-dto' | 'columns';
3659
3683
  metadataLoading: boolean;
@@ -3662,6 +3686,7 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3662
3686
  configKey?: string;
3663
3687
  settingsChange: EventEmitter<FilterConfig>;
3664
3688
  form: FormGroup<{
3689
+ presentation: FormControl<FilterConfig['presentation']>;
3665
3690
  alwaysVisibleFields: FormControl<string[]>;
3666
3691
  showAdvanced: FormControl<boolean>;
3667
3692
  mode: FormControl<'filter'>;
@@ -3698,6 +3723,7 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3698
3723
  canSave$: Observable<boolean>;
3699
3724
  isDirty$: Observable<boolean>;
3700
3725
  isValid$: Observable<boolean>;
3726
+ private readonly savingState;
3701
3727
  isBusy$: Observable<boolean>;
3702
3728
  private initialSettings;
3703
3729
  private extraSettings;
@@ -3832,6 +3858,9 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3832
3858
  renameTagPrompt(index: number): void;
3833
3859
  dropTags(event: CdkDragDrop<FilterTag[]>): void;
3834
3860
  ngOnChanges(changes: SimpleChanges): void;
3861
+ updatePresentation(value: FilterConfig['presentation']): void;
3862
+ onSave(): FilterConfig | undefined | Promise<FilterConfig | undefined>;
3863
+ private persistDraft;
3835
3864
  getSettingsValue(): FilterConfig;
3836
3865
  private updateEffectiveJson;
3837
3866
  private buildFullConfigFromForm;
@@ -4166,6 +4195,8 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4166
4195
  icon: string;
4167
4196
  }[];
4168
4197
  activeSectionIndex: number;
4198
+ surfaceDraftInvalid: boolean;
4199
+ onSurfaceDraftValidationChange(valid: boolean): void;
4169
4200
  private originalConfig;
4170
4201
  editedConfig: TableConfig;
4171
4202
  resourcePath: string;
@@ -4200,6 +4231,7 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4200
4231
  schemaSnapshotMissing: boolean;
4201
4232
  isV2Config: boolean;
4202
4233
  canSave: boolean;
4234
+ private mobileBreakpointDraft;
4203
4235
  hasErrors: boolean;
4204
4236
  hasSuccess: boolean;
4205
4237
  statusMessage: string;
@@ -4272,6 +4304,11 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4272
4304
  private loadFilterDtoMetas;
4273
4305
  onIdFieldChange(val: string): void;
4274
4306
  onIdFieldOptionSelected(value: string): void;
4307
+ get mobileCardMode(): boolean;
4308
+ get mobileBreakpoint(): number | null;
4309
+ get mobileBreakpointInvalid(): boolean;
4310
+ onMobileCardModeChange(cardMode: boolean): void;
4311
+ onMobileBreakpointChange(value: number | null): void;
4275
4312
  onHorizontalScrollChange(val: 'auto' | 'wrap' | 'none'): void;
4276
4313
  onReconcileIdField(): void;
4277
4314
  onAcceptServerHash(): void;
@@ -4337,25 +4374,29 @@ declare class PraxisTableWidgetConfigEditor implements SettingsValueProvider$1,
4337
4374
  widgetKey?: string;
4338
4375
  context: Record<string, unknown>;
4339
4376
  private editorBaseline?;
4377
+ private sourceDraft?;
4378
+ private readonly i18n;
4379
+ get configurationSource(): 'local-first' | 'input-first' | 'volatile';
4380
+ tx(key: string, fallback: string): string;
4381
+ changeConfigurationSource(value: string): void;
4382
+ private updateDirtyState;
4340
4383
  tableEditor?: PraxisTableConfigEditor;
4341
4384
  readonly isDirty$: BehaviorSubject<boolean>;
4342
4385
  readonly isValid$: BehaviorSubject<boolean>;
4343
4386
  readonly isBusy$: BehaviorSubject<boolean>;
4344
- private readonly cdr;
4345
4387
  private readonly subscription;
4346
4388
  ngAfterViewInit(): void;
4347
4389
  ngOnDestroy(): void;
4348
4390
  getSettingsValue(): PraxisTableWidgetEditorValue;
4349
4391
  onSave(): PraxisTableWidgetEditorValue;
4350
4392
  reset(): void;
4351
- private initializeChildEditor;
4352
- private tryInject;
4353
4393
  private buildValue;
4354
4394
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableWidgetConfigEditor, never>;
4355
4395
  static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableWidgetConfigEditor, "praxis-table-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "widgetKey": { "alias": "widgetKey"; "required": false; }; "context": { "alias": "context"; "required": false; }; }, {}, never, never, true, never>;
4356
4396
  }
4357
4397
 
4358
4398
  interface PraxisFilterWidgetEditorInputs {
4399
+ presentation?: FilterConfig['presentation'];
4359
4400
  resourcePath?: string | null;
4360
4401
  fieldMetadata?: FieldMetadata[] | null;
4361
4402
  filterId?: string;