@praxisui/table 10.0.0-rc.12 → 10.0.0-rc.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-10-13T20:53:39.090Z",
3
+ "generatedAt": "2026-10-14T09:51:43.880Z",
4
4
  "packageName": "@praxisui/table",
5
- "packageVersion": "10.0.0-rc.12",
5
+ "packageVersion": "10.0.0-rc.13",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 3,
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, inject, computed, ChangeDetectionStrategy, Component, output, signal, InjectionToken, EventEmitter, ElementRef, Output, Input, ViewChild, Optional, Inject, LOCALE_ID, Injectable, HostListener, Directive, ChangeDetectorRef, DestroyRef, ENVIRONMENT_INITIALIZER, effect, booleanAttribute, HostBinding, ContentChild, TemplateRef, ViewContainerRef, numberAttribute } from '@angular/core';
3
3
  import * as i1 from '@praxisui/core';
4
- import { PraxisI18nService, BulkOperationClientService, isBulkExecutionTerminal, LoggerService, createCorporateLoggerConfig, ConsoleLoggerSink, PraxisJsonLogicService, resolveResourceAvailabilityReasonKey, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, PraxisIconDirective, PraxisIconButtonComponent, SafeExpressionEvaluator, API_URL, buildApiUrl, renderPraxisPresentationVisualizationHtml, createDefaultTableConfig, fillUndefined, deepMerge as deepMerge$1, ASYNC_CONFIG_STORAGE, providePraxisI18nConfig, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_VALUES, FieldControlType, normalizeControlTypeToken, resolveControlTypeAlias, INLINE_FILTER_ALIAS_TOKENS, SCHEMA_METADATA_CLIENT_OPTIONS, GlobalConfigService, buildSchemaId, MemoryCacheAdapter, LocalStorageCacheAdapter, SchemaMetadataClient, mapFieldDefinitionsToMetadata, resolveInlineFilterControlType, fetchWithETag, serializeEntityLookupValueForPayload, GenericCrudService, SchemaNormalizerService, ResourceQuickConnectComponent, ComponentMetadataRegistry, AnalyticsStatsRequestBuilderService, normalizePraxisDataQueryContext, normalizeUnknownError, PraxisRuntimeComponentObservationRegistryService, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, BulkSyncStateService, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER, PraxisWidgetEventBus, PraxisCollectionExportService, translateResourceAvailabilityReason, ResourceDiscoveryService, ResourceSurfaceOpenAdapterService, ResourceActionOpenAdapterService, CrudOperationResolutionService, SURFACE_OPEN_PRESETS, assertPraxisCollectionExportArtifact, PRAXIS_LOADING_CTX, resolveColumnTypeFromFieldDefinition as resolveColumnTypeFromFieldDefinition$1, isPraxisPresentationVisualizationTableSafe as isPraxisPresentationVisualizationTableSafe$1, resolveTextMaskFormatFromFieldDefinition as resolveTextMaskFormatFromFieldDefinition$1, translateResourceDiscoveryText, supportsImplicitValuePresentation, resolveValuePresentation, resolvePraxisMicroVisualizationTone, resolveResourceIdentityContract, materializeResourceIdentity, translateUnavailableWorkflowMessage, CONNECTION_STORAGE, PRAXIS_LOADING_RENDERER, EmptyStateCardComponent, getPraxisTableCellVisualizationGuidance, getPraxisTableCellVisualizationConstraint, isTableConfigV2, normalizePraxisPresentationVisualization, PRAXIS_GLOBAL_ACTION_CATALOG, SURFACE_OPEN_I18N_NAMESPACE, isRequiredGlobalActionPayloadMissing, getGlobalActionUiSchema, getRequiredGlobalActionPayloadKeys, hasMeaningfulGlobalActionPayloadValue, SurfaceOpenActionEditorComponent, SURFACE_OPEN_I18N_CONFIG, PraxisJsonLogicError, GLOBAL_ACTION_CATALOG, validateGlobalActionRefs, getGlobalActionCatalog, TableConfigService } from '@praxisui/core';
4
+ import { PraxisI18nService, BulkOperationClientService, isBulkExecutionTerminal, LoggerService, createCorporateLoggerConfig, ConsoleLoggerSink, PraxisJsonLogicService, resolveResourceAvailabilityReasonKey, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, PraxisIconDirective, PraxisIconButtonComponent, SafeExpressionEvaluator, API_URL, EnterpriseRuntimeContextService, buildApiUrl, renderPraxisPresentationVisualizationHtml, createDefaultTableConfig, fillUndefined, deepMerge as deepMerge$1, ASYNC_CONFIG_STORAGE, providePraxisI18nConfig, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_VALUES, FieldControlType, normalizeControlTypeToken, resolveControlTypeAlias, INLINE_FILTER_ALIAS_TOKENS, SCHEMA_METADATA_CLIENT_OPTIONS, GlobalConfigService, buildSchemaId, MemoryCacheAdapter, LocalStorageCacheAdapter, SchemaMetadataClient, mapFieldDefinitionsToMetadata, resolveInlineFilterControlType, fetchWithETag, serializeEntityLookupValueForPayload, GenericCrudService, SchemaNormalizerService, ResourceQuickConnectComponent, ComponentMetadataRegistry, AnalyticsStatsRequestBuilderService, normalizePraxisDataQueryContext, normalizeUnknownError, PraxisRuntimeComponentObservationRegistryService, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, BulkSyncStateService, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER, PraxisWidgetEventBus, PraxisCollectionExportService, translateResourceAvailabilityReason, ResourceDiscoveryService, ResourceSurfaceOpenAdapterService, ResourceActionOpenAdapterService, CrudOperationResolutionService, SURFACE_OPEN_PRESETS, assertPraxisCollectionExportArtifact, PRAXIS_LOADING_CTX, resolveColumnTypeFromFieldDefinition as resolveColumnTypeFromFieldDefinition$1, isPraxisPresentationVisualizationTableSafe as isPraxisPresentationVisualizationTableSafe$1, resolveTextMaskFormatFromFieldDefinition as resolveTextMaskFormatFromFieldDefinition$1, translateResourceDiscoveryText, supportsImplicitValuePresentation, resolveValuePresentation, resolvePraxisMicroVisualizationTone, resolveResourceIdentityContract, materializeResourceIdentity, translateUnavailableWorkflowMessage, CONNECTION_STORAGE, PRAXIS_LOADING_RENDERER, EmptyStateCardComponent, getPraxisTableCellVisualizationGuidance, getPraxisTableCellVisualizationConstraint, isTableConfigV2, normalizePraxisPresentationVisualization, PRAXIS_GLOBAL_ACTION_CATALOG, SURFACE_OPEN_I18N_NAMESPACE, isRequiredGlobalActionPayloadMissing, getGlobalActionUiSchema, getRequiredGlobalActionPayloadKeys, hasMeaningfulGlobalActionPayloadValue, SurfaceOpenActionEditorComponent, SURFACE_OPEN_I18N_CONFIG, PraxisJsonLogicError, GLOBAL_ACTION_CATALOG, validateGlobalActionRefs, getGlobalActionCatalog, TableConfigService } from '@praxisui/core';
5
5
  import * as i1$3 from '@angular/common/http';
6
6
  import { HttpErrorResponse, HttpClient, HttpContext } from '@angular/common/http';
7
7
  import * as i3 from '@angular/material/button';
@@ -42,7 +42,7 @@ import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
42
42
  import { PraxisRichContent, validateRichContentDocument, isSafeRichContentClassName, PraxisRichContentConfigEditor } from '@praxisui/rich-content';
43
43
  import * as i2 from '@angular/material/toolbar';
44
44
  import { MatToolbarModule } from '@angular/material/toolbar';
45
- import { map, catchError, take as take$1, startWith, takeUntil as takeUntil$1, debounceTime, distinctUntilChanged } from 'rxjs/operators';
45
+ import { map, catchError, finalize, take as take$1, startWith, takeUntil as takeUntil$1, debounceTime, distinctUntilChanged } from 'rxjs/operators';
46
46
  import * as i3$1 from '@angular/material/input';
47
47
  import { MatInputModule } from '@angular/material/input';
48
48
  import * as i15 from '@angular/material/chips';
@@ -6445,6 +6445,7 @@ class PraxisAnalyticalDrawerComponent {
6445
6445
  _drawerConfig = null;
6446
6446
  set drawerConfig(value) {
6447
6447
  this._drawerConfig = value;
6448
+ this.drawerConfigSignal.set(value);
6448
6449
  this.syncActiveTab();
6449
6450
  if (this._isOpen && this._row) {
6450
6451
  this.fetchConfiguredRelations();
@@ -6457,6 +6458,7 @@ class PraxisAnalyticalDrawerComponent {
6457
6458
  set row(value) {
6458
6459
  const prev = this._row;
6459
6460
  this._row = value;
6461
+ this.rowSignal.set(value);
6460
6462
  this.syncActiveTab();
6461
6463
  if (this._isOpen && value && value !== prev) {
6462
6464
  this.fetchConfiguredRelations();
@@ -6465,11 +6467,21 @@ class PraxisAnalyticalDrawerComponent {
6465
6467
  get row() {
6466
6468
  return this._row;
6467
6469
  }
6468
- relations = {};
6470
+ _relations = {};
6471
+ set relations(value) {
6472
+ this._relations = value || {};
6473
+ this.relationsSignal.set(this._relations);
6474
+ }
6475
+ get relations() {
6476
+ return this._relations;
6477
+ }
6469
6478
  loadingRelations = false;
6470
6479
  closeDrawer = new EventEmitter();
6471
6480
  tabChange = new EventEmitter();
6472
6481
  relationFetch = new EventEmitter();
6482
+ drawerConfigSignal = signal(null, ...(ngDevMode ? [{ debugName: "drawerConfigSignal" }] : /* istanbul ignore next */ []));
6483
+ rowSignal = signal(null, ...(ngDevMode ? [{ debugName: "rowSignal" }] : /* istanbul ignore next */ []));
6484
+ relationsSignal = signal({}, ...(ngDevMode ? [{ debugName: "relationsSignal" }] : /* istanbul ignore next */ []));
6473
6485
  activeTabId = signal('', ...(ngDevMode ? [{ debugName: "activeTabId" }] : /* istanbul ignore next */ []));
6474
6486
  customRelations = signal({}, ...(ngDevMode ? [{ debugName: "customRelations" }] : /* istanbul ignore next */ []));
6475
6487
  isFetchingRelations = signal(false, ...(ngDevMode ? [{ debugName: "isFetchingRelations" }] : /* istanbul ignore next */ []));
@@ -6479,10 +6491,12 @@ class PraxisAnalyticalDrawerComponent {
6479
6491
  http = inject(HttpClient, { optional: true });
6480
6492
  drawerRegistry = inject(AnalyticalDrawerRegistryService, { optional: true });
6481
6493
  apiUrl = inject(API_URL, { optional: true });
6494
+ runtimeContext = inject(EnterpriseRuntimeContextService, { optional: true });
6482
6495
  sanitizer = inject(DomSanitizer);
6483
6496
  formattingService = inject(DataFormattingService, { optional: true });
6484
6497
  relationSubs = [];
6485
6498
  schemaSub;
6499
+ contextSub;
6486
6500
  static urlCache = new Map();
6487
6501
  static schemaCache = new Map();
6488
6502
  lastFetchedKey = null;
@@ -6491,6 +6505,16 @@ class PraxisAnalyticalDrawerComponent {
6491
6505
  PraxisAnalyticalDrawerComponent.urlCache.clear();
6492
6506
  PraxisAnalyticalDrawerComponent.schemaCache.clear();
6493
6507
  }
6508
+ getContextScopePrefix() {
6509
+ const snap = this.runtimeContext?.snapshot;
6510
+ if (!snap)
6511
+ return 'default';
6512
+ const effective = this.runtimeContext?.effectiveContext;
6513
+ const tenant = effective?.activeTenant?.tenantId ?? 'anon';
6514
+ const user = snap.user?.userId ?? 'anon';
6515
+ const env = effective?.environment ?? 'default';
6516
+ return `${tenant}:${user}:${env}`;
6517
+ }
6494
6518
  resolveUrl(rawUrl) {
6495
6519
  if (!rawUrl)
6496
6520
  return '';
@@ -6506,6 +6530,20 @@ class PraxisAnalyticalDrawerComponent {
6506
6530
  return `${base}${cleanPath}`;
6507
6531
  }
6508
6532
  ngOnInit() {
6533
+ let initializedContext = false;
6534
+ this.contextSub = this.runtimeContext?.contextChanges$.subscribe(() => {
6535
+ if (!initializedContext) {
6536
+ initializedContext = true;
6537
+ return;
6538
+ }
6539
+ this.lastResolvingKey = null;
6540
+ this.lastFetchedKey = null;
6541
+ this.resolvedRemoteConfig.set(null);
6542
+ this.resolveRemoteDrawerMetadata();
6543
+ if (this.isOpen && this.row) {
6544
+ this.fetchConfiguredRelations();
6545
+ }
6546
+ });
6509
6547
  this.resolveRemoteDrawerMetadata();
6510
6548
  this.syncActiveTab();
6511
6549
  if (this.isOpen && this.row) {
@@ -6526,9 +6564,10 @@ class PraxisAnalyticalDrawerComponent {
6526
6564
  ngOnDestroy() {
6527
6565
  this.cancelRelationRequests();
6528
6566
  this.schemaSub?.unsubscribe();
6567
+ this.contextSub?.unsubscribe();
6529
6568
  }
6530
6569
  getEffectiveDrawerConfig() {
6531
- const local = this.drawerConfig;
6570
+ const local = this.drawerConfigSignal();
6532
6571
  const remote = this.resolvedRemoteConfig();
6533
6572
  if (!local && !remote)
6534
6573
  return null;
@@ -6615,11 +6654,12 @@ class PraxisAnalyticalDrawerComponent {
6615
6654
  .toLowerCase();
6616
6655
  if (!key)
6617
6656
  return;
6618
- if (this.lastResolvingKey === key &&
6657
+ const scopedSchemaKey = `${this.getContextScopePrefix()}::${key}`;
6658
+ if (this.lastResolvingKey === scopedSchemaKey &&
6619
6659
  (this.resolvedRemoteConfig() !== null || this.isResolvingSchema())) {
6620
6660
  return;
6621
6661
  }
6622
- this.lastResolvingKey = key;
6662
+ this.lastResolvingKey = scopedSchemaKey;
6623
6663
  // 1. Check DI registry
6624
6664
  const registered = this.drawerRegistry?.get(key);
6625
6665
  if (registered) {
@@ -6633,9 +6673,9 @@ class PraxisAnalyticalDrawerComponent {
6633
6673
  }
6634
6674
  return;
6635
6675
  }
6636
- // 2. Check Static in-memory cache
6637
- if (PraxisAnalyticalDrawerComponent.schemaCache.has(key)) {
6638
- this.resolvedRemoteConfig.set(PraxisAnalyticalDrawerComponent.schemaCache.get(key));
6676
+ // 2. Check tenant-scoped in-memory cache
6677
+ if (PraxisAnalyticalDrawerComponent.schemaCache.has(scopedSchemaKey)) {
6678
+ this.resolvedRemoteConfig.set(PraxisAnalyticalDrawerComponent.schemaCache.get(scopedSchemaKey));
6639
6679
  this.syncActiveTab();
6640
6680
  if (this.isOpen && this.row) {
6641
6681
  this.fetchConfiguredRelations();
@@ -6684,7 +6724,7 @@ class PraxisAnalyticalDrawerComponent {
6684
6724
  const configToSet = isAnalyticalDrawerSchema(resolved)
6685
6725
  ? { enabled: true, schema: resolved }
6686
6726
  : resolved;
6687
- PraxisAnalyticalDrawerComponent.schemaCache.set(key, configToSet);
6727
+ PraxisAnalyticalDrawerComponent.schemaCache.set(scopedSchemaKey, configToSet);
6688
6728
  this.resolvedRemoteConfig.set(configToSet);
6689
6729
  this.syncActiveTab();
6690
6730
  if (this.isOpen && this.row) {
@@ -6737,10 +6777,11 @@ class PraxisAnalyticalDrawerComponent {
6737
6777
  ];
6738
6778
  }, ...(ngDevMode ? [{ debugName: "resolvedTabs" }] : /* istanbul ignore next */ []));
6739
6779
  generateAutoOverviewProperties() {
6740
- if (!this.row || typeof this.row !== 'object')
6780
+ const currentRow = this.rowSignal();
6781
+ if (!currentRow || typeof currentRow !== 'object')
6741
6782
  return [];
6742
6783
  const ignoredKeys = new Set(['_links', 'resourceVersion', '__proto__', 'constructor']);
6743
- const entries = Object.entries(this.row).filter(([k, v]) => !ignoredKeys.has(k) && v !== null && v !== undefined && typeof v !== 'function' && typeof v !== 'object');
6784
+ const entries = Object.entries(currentRow).filter(([k, v]) => !ignoredKeys.has(k) && v !== null && v !== undefined && typeof v !== 'function' && typeof v !== 'object');
6744
6785
  if (entries.length === 0)
6745
6786
  return [];
6746
6787
  return entries.map(([key, val]) => ({
@@ -6758,6 +6799,7 @@ class PraxisAnalyticalDrawerComponent {
6758
6799
  resolvedTitle = computed(() => {
6759
6800
  const config = this.getEffectiveDrawerConfig();
6760
6801
  const analyticalSchema = this.getAnalyticalSchema();
6802
+ const currentRow = this.rowSignal();
6761
6803
  const context = this.getEvaluationContext();
6762
6804
  const titleExpr = config?.titleExpr || analyticalSchema?.titleExpr;
6763
6805
  if (titleExpr) {
@@ -6768,17 +6810,20 @@ class PraxisAnalyticalDrawerComponent {
6768
6810
  }
6769
6811
  if (config?.title)
6770
6812
  return config.title;
6771
- if (this.row?.title)
6772
- return String(this.row.title);
6773
- if (this.row?.descricao)
6774
- return String(this.row.descricao);
6775
- if (this.row?.id)
6776
- return `Registro #${this.row.id}`;
6777
- return 'Dossiê de Detalhe';
6813
+ if (currentRow?.title)
6814
+ return String(currentRow.title);
6815
+ if (currentRow?.name)
6816
+ return String(currentRow.name);
6817
+ if (currentRow?.label)
6818
+ return String(currentRow.label);
6819
+ if (currentRow?.id)
6820
+ return `Registro #${currentRow.id}`;
6821
+ return 'Detalhes do Registro';
6778
6822
  }, ...(ngDevMode ? [{ debugName: "resolvedTitle" }] : /* istanbul ignore next */ []));
6779
6823
  resolvedSubtitle = computed(() => {
6780
6824
  const config = this.getEffectiveDrawerConfig();
6781
6825
  const analyticalSchema = this.getAnalyticalSchema();
6826
+ const currentRow = this.rowSignal();
6782
6827
  const context = this.getEvaluationContext();
6783
6828
  const subtitleExpr = config?.subtitleExpr || analyticalSchema?.subtitleExpr;
6784
6829
  if (subtitleExpr) {
@@ -6789,10 +6834,8 @@ class PraxisAnalyticalDrawerComponent {
6789
6834
  }
6790
6835
  if (config?.subtitle)
6791
6836
  return config.subtitle;
6792
- if (this.row?.local)
6793
- return String(this.row.local);
6794
- if (this.row?.departamento)
6795
- return String(this.row.departamento);
6837
+ if (currentRow?.subtitle)
6838
+ return String(currentRow.subtitle);
6796
6839
  return '';
6797
6840
  }, ...(ngDevMode ? [{ debugName: "resolvedSubtitle" }] : /* istanbul ignore next */ []));
6798
6841
  resolvedClassificationPill = computed(() => {
@@ -6800,7 +6843,7 @@ class PraxisAnalyticalDrawerComponent {
6800
6843
  const analyticalSchema = this.getAnalyticalSchema();
6801
6844
  return (config?.classificationPill ||
6802
6845
  analyticalSchema?.classificationPill ||
6803
- 'DOSSIÊ DE DETALHE · PRAXIS GOVERNED');
6846
+ 'DETALHES DO REGISTRO');
6804
6847
  }, ...(ngDevMode ? [{ debugName: "resolvedClassificationPill" }] : /* istanbul ignore next */ []));
6805
6848
  resolvedWidth = computed(() => {
6806
6849
  const config = this.getEffectiveDrawerConfig();
@@ -6809,18 +6852,19 @@ class PraxisAnalyticalDrawerComponent {
6809
6852
  getDrawerIcon() {
6810
6853
  const config = this.getEffectiveDrawerConfig();
6811
6854
  const analyticalSchema = this.getAnalyticalSchema();
6812
- return config?.icon || analyticalSchema?.icon || 'crisis_alert';
6855
+ return config?.icon || analyticalSchema?.icon || 'analytics';
6813
6856
  }
6814
6857
  getEvaluationContext() {
6858
+ const currentRow = this.rowSignal();
6815
6859
  const combinedRelations = {
6816
- ...this.relations,
6860
+ ...this.relationsSignal(),
6817
6861
  ...this.customRelations(),
6818
6862
  };
6819
6863
  return {
6820
- row: this.row || {},
6821
- data: this.row || {},
6864
+ row: currentRow || {},
6865
+ data: currentRow || {},
6822
6866
  relations: combinedRelations,
6823
- ...this.row,
6867
+ ...currentRow,
6824
6868
  ...combinedRelations,
6825
6869
  };
6826
6870
  }
@@ -6874,6 +6918,14 @@ class PraxisAnalyticalDrawerComponent {
6874
6918
  const format = String(item.format || '').trim();
6875
6919
  if (format.startsWith('currency')) {
6876
6920
  const curr = format.includes(':') ? format.split(':')[1] : 'BRL';
6921
+ if (this.formattingService) {
6922
+ try {
6923
+ return this.formattingService.formatValue(Number(rawVal), 'currency', `${curr}|symbol|2`);
6924
+ }
6925
+ catch {
6926
+ // fallback below
6927
+ }
6928
+ }
6877
6929
  try {
6878
6930
  return Number(rawVal).toLocaleString('pt-BR', { style: 'currency', currency: curr });
6879
6931
  }
@@ -6935,21 +6987,32 @@ class PraxisAnalyticalDrawerComponent {
6935
6987
  fetchConfiguredRelations() {
6936
6988
  const config = this.getEffectiveDrawerConfig();
6937
6989
  const analyticalSchema = this.getAnalyticalSchema();
6938
- const relationsList = [
6939
- ...(Array.isArray(config?.relations) ? config.relations : []),
6990
+ const rawRelations = [
6940
6991
  ...(Array.isArray(analyticalSchema?.relations) ? analyticalSchema.relations : []),
6992
+ ...(Array.isArray(config?.relations) ? config.relations : []),
6941
6993
  ];
6994
+ const deduplicatedMap = new Map();
6995
+ for (const rel of rawRelations) {
6996
+ if (rel?.key) {
6997
+ deduplicatedMap.set(rel.key, {
6998
+ ...(deduplicatedMap.get(rel.key) || {}),
6999
+ ...rel,
7000
+ });
7001
+ }
7002
+ }
7003
+ const relationsList = Array.from(deduplicatedMap.values());
6942
7004
  if (!relationsList.length || !this.row)
6943
7005
  return;
7006
+ const scopePrefix = this.getContextScopePrefix();
6944
7007
  const rowKey = String(this.row?.id ?? this.row?._id ?? JSON.stringify(this.row));
6945
- const currentKey = `${rowKey}::${relationsList.map((r) => r.key + ':' + r.endpoint).join(';')}`;
7008
+ const currentKey = `${scopePrefix}::${rowKey}::${relationsList.map((r) => r.key + ':' + r.endpoint).join(';')}`;
6946
7009
  if (this.lastFetchedKey === currentKey) {
6947
7010
  return;
6948
7011
  }
6949
7012
  this.lastFetchedKey = currentKey;
6950
7013
  this.cancelRelationRequests();
6951
- this.isFetchingRelations.set(true);
6952
7014
  const pendingMap = {};
7015
+ let activeRequests = 0;
6953
7016
  relationsList.forEach((rel) => {
6954
7017
  const { url, hasMissingTokens } = interpolateRelationEndpoint(rel.endpoint, this.row);
6955
7018
  if (hasMissingTokens || !url) {
@@ -6957,15 +7020,17 @@ class PraxisAnalyticalDrawerComponent {
6957
7020
  return;
6958
7021
  }
6959
7022
  this.relationFetch.emit({ key: rel.key, endpoint: url });
6960
- // Cache check
6961
- if (rel.cache !== false && PraxisAnalyticalDrawerComponent.urlCache.has(url)) {
6962
- pendingMap[rel.key] = PraxisAnalyticalDrawerComponent.urlCache.get(url);
7023
+ const scopedUrlKey = `${scopePrefix}::${url}`;
7024
+ // Tenant-scoped cache check
7025
+ if (rel.cache !== false && PraxisAnalyticalDrawerComponent.urlCache.has(scopedUrlKey)) {
7026
+ pendingMap[rel.key] = PraxisAnalyticalDrawerComponent.urlCache.get(scopedUrlKey);
6963
7027
  return;
6964
7028
  }
6965
7029
  if (!this.http) {
6966
7030
  pendingMap[rel.key] = null;
6967
7031
  return;
6968
7032
  }
7033
+ activeRequests++;
6969
7034
  const method = (rel.method || 'GET').toUpperCase();
6970
7035
  const effectiveUrl = this.resolveUrl(url);
6971
7036
  const req$ = method === 'POST'
@@ -6981,10 +7046,15 @@ class PraxisAnalyticalDrawerComponent {
6981
7046
  resultData = resultData.length > 0 ? resultData[0] : null;
6982
7047
  }
6983
7048
  return resultData;
6984
- }), catchError(() => [null]))
7049
+ }), catchError(() => [null]), finalize(() => {
7050
+ activeRequests = Math.max(0, activeRequests - 1);
7051
+ if (activeRequests === 0) {
7052
+ this.isFetchingRelations.set(false);
7053
+ }
7054
+ }))
6985
7055
  .subscribe((resolvedData) => {
6986
7056
  if (rel.cache !== false && resolvedData !== null) {
6987
- PraxisAnalyticalDrawerComponent.urlCache.set(url, resolvedData);
7057
+ PraxisAnalyticalDrawerComponent.urlCache.set(scopedUrlKey, resolvedData);
6988
7058
  }
6989
7059
  this.customRelations.update((prev) => ({
6990
7060
  ...prev,
@@ -6994,11 +7064,12 @@ class PraxisAnalyticalDrawerComponent {
6994
7064
  this.relationSubs.push(sub);
6995
7065
  });
6996
7066
  this.customRelations.set(pendingMap);
6997
- this.isFetchingRelations.set(false);
7067
+ this.isFetchingRelations.set(activeRequests > 0);
6998
7068
  }
6999
7069
  cancelRelationRequests() {
7000
7070
  this.relationSubs.forEach((sub) => sub.unsubscribe());
7001
7071
  this.relationSubs = [];
7072
+ this.isFetchingRelations.set(false);
7002
7073
  }
7003
7074
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisAnalyticalDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7004
7075
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisAnalyticalDrawerComponent, isStandalone: true, selector: "praxis-analytical-drawer", inputs: { isOpen: "isOpen", resourcePath: "resourcePath", surfaceName: "surfaceName", drawerConfig: "drawerConfig", row: "row", relations: "relations", loadingRelations: "loadingRelations" }, outputs: { closeDrawer: "closeDrawer", tabChange: "tabChange", relationFetch: "relationFetch" }, host: { listeners: { "document:keydown.escape": "handleDocumentEscape($event)" } }, usesOnChanges: true, ngImport: i0, template: `
@@ -23011,7 +23082,7 @@ class PraxisTable {
23011
23082
  if (this.aiAdapter || this.aiAdapterLoadStarted)
23012
23083
  return;
23013
23084
  this.aiAdapterLoadStarted = true;
23014
- import('./praxisui-table-table-ai.adapter-nUhrYuKK.mjs')
23085
+ import('./praxisui-table-table-ai.adapter-DX7wpDJx.mjs')
23015
23086
  .then(({ TableAiAdapter }) => {
23016
23087
  if (!this.isAiAssistantEnabled()) {
23017
23088
  this.aiAssistantOpenAfterAdapterLoad = false;
@@ -23592,11 +23663,25 @@ class PraxisTable {
23592
23663
  sourceCandidateIds: ['table.appearance.compact-view'],
23593
23664
  });
23594
23665
  }
23595
- const publicViewCandidates = visibleColumns.filter((column) => column.type === 'currency'
23596
- || column.type === 'number'
23597
- || normalizedColumnText(column).includes('email')
23598
- || normalizedColumnText(column).includes('cpf')
23599
- || normalizedColumnText(column).includes('salario'));
23666
+ const schemaFieldByName = new Map();
23667
+ for (const f of this.schemaColumnFieldsSnapshot || []) {
23668
+ if (f?.name)
23669
+ schemaFieldByName.set(f.name, f);
23670
+ }
23671
+ for (const f of this.schemaFieldsSnapshot || []) {
23672
+ if (f?.name && !schemaFieldByName.has(f.name))
23673
+ schemaFieldByName.set(f.name, f);
23674
+ }
23675
+ const publicViewCandidates = visibleColumns.filter((column) => {
23676
+ const schemaField = schemaFieldByName.get(column.field);
23677
+ const format = String(column.format || schemaField?.format || '').toLowerCase();
23678
+ return (column.type === 'currency' ||
23679
+ column.type === 'number' ||
23680
+ format === 'email' ||
23681
+ format.startsWith('currency') ||
23682
+ this.isSensitiveAiAssistantField(column.field) ||
23683
+ Boolean(column.sensitive || schemaField?.sensitive || schemaField?.governance?.sensitive));
23684
+ });
23600
23685
  if (publicViewCandidates.length) {
23601
23686
  recommendations.push({
23602
23687
  id: 'table-curate-public-view',
@@ -23627,9 +23712,14 @@ class PraxisTable {
23627
23712
  sourceCandidateIds: ['table.governance.public-view', 'column.visibility.set'],
23628
23713
  });
23629
23714
  }
23630
- const booleanOrStatusColumn = columns.find((column) => column.type === 'boolean'
23631
- || normalizedColumnText(column).includes('status')
23632
- || normalizedColumnText(column).includes('ativo'));
23715
+ const booleanOrStatusColumn = columns.find((column) => {
23716
+ const schemaField = schemaFieldByName.get(column.field);
23717
+ const rendererType = column.renderer?.type;
23718
+ return (column.type === 'boolean' ||
23719
+ rendererType === 'badge' ||
23720
+ rendererType === 'status' ||
23721
+ Boolean(Array.isArray(schemaField?.options) && schemaField.options.length > 0));
23722
+ });
23633
23723
  if (booleanOrStatusColumn) {
23634
23724
  recommendations.push({
23635
23725
  id: 'table-curate-status-badges',
@@ -23643,7 +23733,7 @@ class PraxisTable {
23643
23733
  tone: 'success',
23644
23734
  action: {
23645
23735
  kind: 'submit-prompt',
23646
- prompt: t('table.assistant.recommendation.statusBadge.prompt', 'Transforme a coluna de status ou ativo em badges visuais com texto curto e cores adequadas.'),
23736
+ prompt: t('table.assistant.recommendation.statusBadge.prompt', 'Transforme a coluna de status ou estado booleano em badges visuais com texto curto e cores adequadas.'),
23647
23737
  contextHints: {
23648
23738
  source: 'table-capability-discovery-curation',
23649
23739
  opportunityId: 'table.appearance.status-badge',
@@ -23655,8 +23745,15 @@ class PraxisTable {
23655
23745
  sourceCandidateIds: ['table.appearance.status-badge', 'column.renderer.set'],
23656
23746
  });
23657
23747
  }
23658
- const categoricalColumns = visibleColumns.filter((column) => column.type === 'string'
23659
- && /departamento|department|cargo|role|categoria|category/u.test(normalizedColumnText(column)));
23748
+ const categoricalColumns = visibleColumns.filter((column) => {
23749
+ const schemaField = schemaFieldByName.get(column.field);
23750
+ const controlType = String(schemaField?.controlType || '').toLowerCase();
23751
+ return (column.type === 'string' &&
23752
+ (Boolean(Array.isArray(schemaField?.options) && schemaField.options.length > 0) ||
23753
+ controlType === 'select' ||
23754
+ controlType === 'radio' ||
23755
+ controlType === 'chip-list'));
23756
+ });
23660
23757
  if (categoricalColumns.length) {
23661
23758
  recommendations.push({
23662
23759
  id: 'table-curate-categorical-chips',
@@ -23757,7 +23854,7 @@ class PraxisTable {
23757
23854
  initializeAiAssistantController() {
23758
23855
  if (!this.aiAdapter || this.aiAssistantController)
23759
23856
  return;
23760
- import('./praxisui-table-table-agentic-authoring-turn-flow-7mVc-Xm1.mjs')
23857
+ import('./praxisui-table-table-agentic-authoring-turn-flow-D9EpKvy-.mjs')
23761
23858
  .then(({ TableAgenticAuthoringTurnFlow }) => {
23762
23859
  if (this.aiAssistantController || !this.aiAdapter)
23763
23860
  return;
@@ -27236,10 +27333,23 @@ class PraxisTable {
27236
27333
  const statusGroup = [];
27237
27334
  const detailsGroup = [];
27238
27335
  for (const field of filteredFields) {
27239
- const nameLower = field.name.toLowerCase();
27240
27336
  const typeLower = (field.type || '').toLowerCase();
27241
- const isNumeric = typeLower === 'number' || typeLower === 'integer' || typeLower === 'currency' || typeLower === 'decimal' || /score|resistencia|valor|preco|custo|total|saldo|taxa|percent/i.test(nameLower);
27242
- const isStatusOrDate = typeLower === 'boolean' || typeLower.includes('date') || typeLower.includes('time') || /status|ativo|situacao|data|date|prazo/i.test(nameLower);
27337
+ const formatLower = (field.format || '').toLowerCase();
27338
+ const isNumeric = typeLower === 'number' ||
27339
+ typeLower === 'integer' ||
27340
+ typeLower === 'currency' ||
27341
+ typeLower === 'decimal' ||
27342
+ typeLower === 'percent' ||
27343
+ formatLower.startsWith('currency') ||
27344
+ formatLower === 'percent' ||
27345
+ formatLower === 'percentage';
27346
+ const isStatusOrDate = typeLower === 'boolean' ||
27347
+ typeLower === 'date' ||
27348
+ typeLower === 'datetime' ||
27349
+ typeLower === 'date-time' ||
27350
+ typeLower === 'time' ||
27351
+ formatLower === 'date' ||
27352
+ formatLower === 'date-time';
27243
27353
  if (isNumeric) {
27244
27354
  metricsGroup.push(field);
27245
27355
  }
@@ -27257,7 +27367,7 @@ class PraxisTable {
27257
27367
  if (detailsGroup.length > 0)
27258
27368
  groupMap.set('Especificações & Detalhes', detailsGroup);
27259
27369
  if (groupMap.size === 0) {
27260
- groupMap.set('Dossiê Complementar', filteredFields);
27370
+ groupMap.set('Detalhes Complementares', filteredFields);
27261
27371
  }
27262
27372
  }
27263
27373
  const cards = [];
@@ -27268,15 +27378,18 @@ class PraxisTable {
27268
27378
  const fieldName = field.name;
27269
27379
  const fieldLabel = field.label || this.humanizeFieldName(fieldName);
27270
27380
  const typeLower = (field.type || '').toLowerCase();
27271
- const nameLower = fieldName.toLowerCase();
27272
- if (typeLower === 'boolean' || /ativo|bloqueado|habilitado|urgente|critico/i.test(nameLower)) {
27381
+ const formatLower = (field.format || '').toLowerCase();
27382
+ if (typeLower === 'boolean') {
27273
27383
  items.push({
27274
27384
  type: 'badge',
27275
27385
  labelExpr: `row.${fieldName} ? '${fieldLabel}: Sim' : '${fieldLabel}: Não'`,
27276
27386
  icon: field.icon || 'check_circle',
27277
27387
  });
27278
27388
  }
27279
- else if (/score|resistencia|taxa|percent|progresso|desempenho/i.test(nameLower)) {
27389
+ else if (typeLower === 'percent' ||
27390
+ formatLower === 'percent' ||
27391
+ formatLower === 'percentage' ||
27392
+ formatLower === 'progress') {
27280
27393
  items.push({
27281
27394
  type: 'progress',
27282
27395
  label: fieldLabel,
@@ -27285,7 +27398,12 @@ class PraxisTable {
27285
27398
  showPercent: true,
27286
27399
  });
27287
27400
  }
27288
- else if (typeLower.includes('date') || typeLower.includes('time') || /data|date/i.test(nameLower)) {
27401
+ else if (typeLower === 'date' ||
27402
+ typeLower === 'datetime' ||
27403
+ typeLower === 'date-time' ||
27404
+ typeLower === 'time' ||
27405
+ formatLower === 'date' ||
27406
+ formatLower === 'date-time') {
27289
27407
  items.push({
27290
27408
  type: 'metric',
27291
27409
  label: fieldLabel,
@@ -27298,14 +27416,14 @@ class PraxisTable {
27298
27416
  type: 'metric',
27299
27417
  label: fieldLabel,
27300
27418
  valueExpr: `row.${fieldName}`,
27301
- icon: field.icon || (/descricao|motivo|observacao/i.test(nameLower) ? 'notes' : 'info'),
27419
+ icon: field.icon || 'info',
27302
27420
  });
27303
27421
  }
27304
27422
  }
27305
27423
  cards.push({
27306
27424
  id: `card-${cardIdx++}`,
27307
27425
  title: groupTitle,
27308
- subtitle: `Registros complementares de ${groupTitle.toLowerCase()}`,
27426
+ subtitle: `Atributos complementares de ${groupTitle.toLowerCase()}`,
27309
27427
  content: [
27310
27428
  {
27311
27429
  type: 'compose',
@@ -27321,7 +27439,7 @@ class PraxisTable {
27321
27439
  items: [
27322
27440
  {
27323
27441
  type: 'cardGrid',
27324
- title: 'Dossiê Detalhado & Especificações',
27442
+ title: 'Detalhes & Especificações',
27325
27443
  subtitle: 'Projeção automatizada de atributos do schema canônico',
27326
27444
  columns: Math.min(3, Math.max(1, cards.length)),
27327
27445
  minCardWidth: 260,
@@ -68549,7 +68667,7 @@ class PraxisScopeBarComponent {
68549
68667
  }
68550
68668
  activeIdChange = new EventEmitter();
68551
68669
  showOmnibox = true;
68552
- omniboxPlaceholder = 'Buscar por codinome, nome, status...';
68670
+ omniboxPlaceholder = 'Buscar registros...';
68553
68671
  set omniboxValue(val) {
68554
68672
  if (val !== undefined && val !== this.currentSearchText()) {
68555
68673
  this.currentSearchText.set(val);
@@ -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-DXPvAOf8.mjs';
3
+ import { ar as setTableActionGlobalActionRef } from './praxisui-table-praxisui-table-DgsQmMK8.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-DXPvAOf8.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-DgsQmMK8.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-DXPvAOf8.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-DgsQmMK8.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.12",
3
+ "version": "10.0.0-rc.13",
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.12",
10
- "@praxisui/core": "^10.0.0-rc.12",
11
- "@praxisui/dynamic-fields": "^10.0.0-rc.12",
12
- "@praxisui/dynamic-form": "^10.0.0-rc.12",
13
- "@praxisui/metadata-editor": "^10.0.0-rc.12",
14
- "@praxisui/rich-content": "^10.0.0-rc.12",
15
- "@praxisui/settings-panel": "^10.0.0-rc.12",
16
- "@praxisui/table-rule-builder": "^10.0.0-rc.12",
9
+ "@praxisui/ai": "^10.0.0-rc.13",
10
+ "@praxisui/core": "^10.0.0-rc.13",
11
+ "@praxisui/dynamic-fields": "^10.0.0-rc.13",
12
+ "@praxisui/dynamic-form": "^10.0.0-rc.13",
13
+ "@praxisui/metadata-editor": "^10.0.0-rc.13",
14
+ "@praxisui/rich-content": "^10.0.0-rc.13",
15
+ "@praxisui/settings-panel": "^10.0.0-rc.13",
16
+ "@praxisui/table-rule-builder": "^10.0.0-rc.13",
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.12",
21
+ "@praxisui/dialog": "^10.0.0-rc.13",
22
22
  "rxjs": "~7.8.0"
23
23
  },
24
24
  "dependencies": {
@@ -5771,7 +5771,9 @@ declare class PraxisAnalyticalDrawerComponent implements OnInit, OnChanges, OnDe
5771
5771
  private _row;
5772
5772
  set row(value: any | null);
5773
5773
  get row(): any | null;
5774
- relations: Record<string, unknown>;
5774
+ private _relations;
5775
+ set relations(value: Record<string, unknown>);
5776
+ get relations(): Record<string, unknown>;
5775
5777
  loadingRelations: boolean;
5776
5778
  closeDrawer: EventEmitter<void>;
5777
5779
  tabChange: EventEmitter<string>;
@@ -5779,6 +5781,9 @@ declare class PraxisAnalyticalDrawerComponent implements OnInit, OnChanges, OnDe
5779
5781
  key: string;
5780
5782
  endpoint: string;
5781
5783
  }>;
5784
+ protected readonly drawerConfigSignal: i0.WritableSignal<TableDrawerConfig | null>;
5785
+ protected readonly rowSignal: i0.WritableSignal<any>;
5786
+ protected readonly relationsSignal: i0.WritableSignal<Record<string, unknown>>;
5782
5787
  protected readonly activeTabId: i0.WritableSignal<string>;
5783
5788
  protected readonly customRelations: i0.WritableSignal<Record<string, unknown>>;
5784
5789
  protected readonly isFetchingRelations: i0.WritableSignal<boolean>;
@@ -5788,15 +5793,18 @@ declare class PraxisAnalyticalDrawerComponent implements OnInit, OnChanges, OnDe
5788
5793
  private readonly http;
5789
5794
  private readonly drawerRegistry;
5790
5795
  private readonly apiUrl;
5796
+ private readonly runtimeContext;
5791
5797
  private readonly sanitizer;
5792
5798
  private readonly formattingService;
5793
5799
  private relationSubs;
5794
5800
  private schemaSub?;
5801
+ private contextSub?;
5795
5802
  private static readonly urlCache;
5796
5803
  private static readonly schemaCache;
5797
5804
  private lastFetchedKey;
5798
5805
  private lastResolvingKey;
5799
5806
  static clearCache(): void;
5807
+ private getContextScopePrefix;
5800
5808
  private resolveUrl;
5801
5809
  ngOnInit(): void;
5802
5810
  ngOnChanges(changes: SimpleChanges): void;