@praxisui/table 9.0.68-rc.2 → 10.0.0-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.
package/README.md CHANGED
@@ -237,6 +237,15 @@ The runtime default remains `local-first`, which loads saved table preferences.
237
237
 
238
238
  The native filter **Preferências do Filtro** panel uses its own `filter-config` preference lane. Its saved always-visible order does not override a nonempty `alwaysVisibleFields` supplied by the page. Use the Page Builder content editor to author the page's filters. Editing a field opens a child settings panel and preserves the parent draft; save the child, then its parent and the page to persist authored changes.
239
239
 
240
+ The filter field editor emits cumulative deltas relative to its opening seed.
241
+ Filter Settings applies them to the opening override of that field, preserving
242
+ other fields in the current parent draft. Returning to the original value after
243
+ Apply therefore removes the intermediate edit, including an empty final delta.
244
+ Nested siblings survive and explicit `null` removes the addressed override.
245
+ Reset also refreshes the shell's dirty state without emitting a config change.
246
+
247
+
248
+
240
249
  ## Runtime Inputs And Outputs
241
250
 
242
251
  Common inputs:
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-09-10T01:25:13.157Z",
3
+ "generatedAt": "2026-09-10T12:25:16.581Z",
4
4
  "packageName": "@praxisui/table",
5
- "packageVersion": "9.0.68-rc.2",
5
+ "packageVersion": "10.0.0-rc.0",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 3,
@@ -36,7 +36,7 @@ import { FormsModule, Validators, ReactiveFormsModule, FormGroup, FormControl }
36
36
  import { SelectionModel } from '@angular/cdk/collections';
37
37
  import * as i13 from '@angular/cdk/drag-drop';
38
38
  import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
39
- import { take, firstValueFrom, BehaviorSubject, Subject, timeout, Subscription, map as map$1, catchError, throwError, debounceTime as debounceTime$1, takeUntil as takeUntil$1 } from 'rxjs';
39
+ import { take, firstValueFrom, BehaviorSubject, Subject, merge, timeout, Subscription, map as map$1, catchError, throwError, debounceTime as debounceTime$1, takeUntil as takeUntil$1 } from 'rxjs';
40
40
  import { PraxisRichContent } from '@praxisui/rich-content';
41
41
  import * as i2 from '@angular/material/toolbar';
42
42
  import { MatToolbarModule } from '@angular/material/toolbar';
@@ -7893,6 +7893,7 @@ class FilterSettingsComponent {
7893
7893
  isDirty$;
7894
7894
  isValid$;
7895
7895
  savingState = new BehaviorSubject(false);
7896
+ settingsStateChanges = new Subject();
7896
7897
  isBusy$;
7897
7898
  initialSettings = {};
7898
7899
  extraSettings = {};
@@ -8035,10 +8036,10 @@ class FilterSettingsComponent {
8035
8036
  enablePerformanceMetrics: this.fb.nonNullable.control(false),
8036
8037
  });
8037
8038
  this.syncAlwaysVisibleControlState();
8038
- this.canSave$ = this.form.valueChanges.pipe(map(() => this.form.dirty && this.form.valid), startWith(false));
8039
+ this.canSave$ = merge(this.form.valueChanges, this.settingsStateChanges).pipe(map(() => this.form.dirty && this.form.valid), startWith(false));
8039
8040
  // Expose state observables expected by SettingsPanel
8040
- this.isDirty$ = this.form.valueChanges.pipe(map(() => this.form.dirty), startWith(false));
8041
- this.isValid$ = this.form.statusChanges.pipe(map(() => this.form.valid), startWith(this.form.valid));
8041
+ this.isDirty$ = merge(this.form.valueChanges, this.settingsStateChanges).pipe(map(() => this.form.dirty), startWith(false));
8042
+ this.isValid$ = merge(this.form.statusChanges, this.settingsStateChanges).pipe(map(() => this.form.valid), startWith(this.form.valid));
8042
8043
  this.isBusy$ = this.savingState.asObservable();
8043
8044
  this.form.valueChanges
8044
8045
  .pipe(map(() => this.getSettingsValue()), takeUntilDestroyed())
@@ -8931,6 +8932,8 @@ class FilterSettingsComponent {
8931
8932
  return;
8932
8933
  const controlType = this.resolveAlwaysVisibleControlType(fieldName);
8933
8934
  const seed = this.buildAlwaysVisibleEditorSeed(fieldName);
8935
+ // Scope the opening snapshot to this field, preserving other fields' later edits.
8936
+ const baselineOverride = this.getAlwaysVisibleOverridesMap()[fieldName] || {};
8934
8937
  if (!this.settingsPanel) {
8935
8938
  this.snackBar.open('Editor visual de metadados indisponível neste contexto.', undefined, { duration: 2500 });
8936
8939
  return;
@@ -8957,7 +8960,7 @@ class FilterSettingsComponent {
8957
8960
  },
8958
8961
  });
8959
8962
  const applyPatch = (patch) => {
8960
- this.applyAlwaysVisibleMetadataPatch(fieldName, patch);
8963
+ this.applyAlwaysVisibleMetadataPatch(fieldName, patch, baselineOverride);
8961
8964
  };
8962
8965
  ref.applied$
8963
8966
  .pipe(takeUntilDestroyed(this.destroyRef))
@@ -9096,16 +9099,16 @@ class FilterSettingsComponent {
9096
9099
  isPlainObject(value) {
9097
9100
  return !!value && typeof value === 'object' && !Array.isArray(value);
9098
9101
  }
9099
- applyAlwaysVisibleMetadataPatch(fieldName, patch) {
9102
+ applyAlwaysVisibleMetadataPatch(fieldName, patch, baselineOverride) {
9100
9103
  if (!patch || typeof patch !== 'object' || Array.isArray(patch))
9101
9104
  return;
9102
9105
  const normalized = this.normalizeAlwaysVisibleMetadataOverrides({
9103
9106
  [fieldName]: patch,
9104
9107
  })[fieldName];
9105
- if (!normalized || !Object.keys(normalized).length)
9108
+ if (!normalized && baselineOverride === undefined)
9106
9109
  return;
9107
9110
  const current = this.getAlwaysVisibleOverridesMap();
9108
- const merged = applyJsonMergePatch(current[fieldName] || {}, normalized);
9111
+ const merged = applyJsonMergePatch(baselineOverride ?? current[fieldName] ?? {}, normalized ?? {});
9109
9112
  if (this.isPlainObject(merged) && Object.keys(merged).length) {
9110
9113
  current[fieldName] = merged;
9111
9114
  }
@@ -9412,6 +9415,7 @@ class FilterSettingsComponent {
9412
9415
  });
9413
9416
  this.syncAlwaysVisibleControlState();
9414
9417
  this.refreshAlwaysVisibleOverridesEditor();
9418
+ this.settingsStateChanges.next();
9415
9419
  }
9416
9420
  refreshAlwaysVisibleOverridesEditor() {
9417
9421
  const current = this.normalizeAlwaysVisibleMetadataOverrides(this.extraSettings.alwaysVisibleFieldMetadataOverrides);
@@ -20058,7 +20062,7 @@ class PraxisTable {
20058
20062
  if (this.aiAdapter || this.aiAdapterLoadStarted)
20059
20063
  return;
20060
20064
  this.aiAdapterLoadStarted = true;
20061
- import('./praxisui-table-table-ai.adapter-B2LTkMdM.mjs')
20065
+ import('./praxisui-table-table-ai.adapter-C6MRHQab.mjs')
20062
20066
  .then(({ TableAiAdapter }) => {
20063
20067
  if (!this.isAiAssistantEnabled()) {
20064
20068
  this.aiAssistantOpenAfterAdapterLoad = false;
@@ -20804,7 +20808,7 @@ class PraxisTable {
20804
20808
  initializeAiAssistantController() {
20805
20809
  if (!this.aiAdapter || this.aiAssistantController)
20806
20810
  return;
20807
- import('./praxisui-table-table-agentic-authoring-turn-flow-DyL8eJ1l.mjs')
20811
+ import('./praxisui-table-table-agentic-authoring-turn-flow-CF9bUWOK.mjs')
20808
20812
  .then(({ TableAgenticAuthoringTurnFlow }) => {
20809
20813
  if (this.aiAssistantController || !this.aiAdapter)
20810
20814
  return;
@@ -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-EGWwY1dR.mjs';
3
+ import { af as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-fOG6oo9f.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-EGWwY1dR.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-fOG6oo9f.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-EGWwY1dR.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-fOG6oo9f.mjs';
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "9.0.68-rc.2",
3
+ "version": "10.0.0-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.68-rc.2",
10
- "@praxisui/core": "^9.0.68-rc.2",
11
- "@praxisui/dynamic-fields": "^9.0.68-rc.2",
12
- "@praxisui/dynamic-form": "^9.0.68-rc.2",
13
- "@praxisui/metadata-editor": "^9.0.68-rc.2",
14
- "@praxisui/rich-content": "^9.0.68-rc.2",
15
- "@praxisui/settings-panel": "^9.0.68-rc.2",
16
- "@praxisui/table-rule-builder": "^9.0.68-rc.2",
9
+ "@praxisui/ai": "^10.0.0-rc.0",
10
+ "@praxisui/core": "^10.0.0-rc.0",
11
+ "@praxisui/dynamic-fields": "^10.0.0-rc.0",
12
+ "@praxisui/dynamic-form": "^10.0.0-rc.0",
13
+ "@praxisui/metadata-editor": "^10.0.0-rc.0",
14
+ "@praxisui/rich-content": "^10.0.0-rc.0",
15
+ "@praxisui/settings-panel": "^10.0.0-rc.0",
16
+ "@praxisui/table-rule-builder": "^10.0.0-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.68-rc.2",
21
+ "@praxisui/dialog": "^10.0.0-rc.0",
22
22
  "rxjs": "~7.8.0"
23
23
  },
24
24
  "dependencies": {
@@ -3737,6 +3737,7 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3737
3737
  isDirty$: Observable<boolean>;
3738
3738
  isValid$: Observable<boolean>;
3739
3739
  private readonly savingState;
3740
+ private readonly settingsStateChanges;
3740
3741
  isBusy$: Observable<boolean>;
3741
3742
  private initialSettings;
3742
3743
  private extraSettings;