@praxisui/table 9.0.0-beta.45 → 9.0.0-beta.47

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
@@ -140,6 +140,24 @@ For dense enterprise tables, `radial` table cells render the percent as adjacent
140
140
 
141
141
  Use `config.ai.assistant.enabled = false` when a host needs to disable the embedded AI assistant entrypoint for a table instance. The default is enabled, so existing AI-enabled tables keep the current behavior without extra config. When the value changes to `false`, the component closes the assistant and removes the table assistant session from the shared assistant registry.
142
142
 
143
+ ## Empty State
144
+
145
+ Use `behavior.emptyState` for table-owned no-data copy and presentation. `message` remains the required backward-compatible text. When `title` is omitted, `message` is used as the empty-state title. When `title` is provided, `message` is rendered as the description unless `description` is explicitly set.
146
+
147
+ ```ts
148
+ const config: TableConfig = {
149
+ behavior: {
150
+ emptyState: {
151
+ title: 'Sem documentos legais',
152
+ message: 'Inclua um documento legal para registrar a base normativa deste código.',
153
+ icon: 'gavel',
154
+ density: 'compact',
155
+ variant: 'inline',
156
+ },
157
+ },
158
+ };
159
+ ```
160
+
143
161
  ## Toolbar Appearance
144
162
 
145
163
  Use `toolbar.appearance` for governed toolbar chrome instead of host CSS targeting internal classes. The built-in preset `table-integrated` composes toolbar and table as one operational block using public tokens for background, border, radius, shadow, spacing, and density.
@@ -236,5 +254,6 @@ Main exports:
236
254
  - Separate local data mode from backend resource mode before deciding the minimum setup.
237
255
  - `enableCustomization` is opt-in and gates settings/authoring surfaces; it does not change the data mode.
238
256
  - Treat export as a governed optional operation, not as automatic support implied by `resourcePath`.
257
+ - When `excel` is enabled in `export.formats`, the toolbar also exposes a visible Excel export that downloads only the current rendered page with visible columns and formatted cell values. Full filtered exports continue to use the configured collection export provider.
239
258
  - Theme the table through Material/Praxis tokens instead of targeting internal descendants.
240
259
  - Use the official documentation for full recipes on filters, rich detail rows, rules, formatting, AI authoring, and backend capabilities.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-07T23:17:36.844Z",
3
+ "generatedAt": "2026-07-08T03:07:40.937Z",
4
4
  "packageName": "@praxisui/table",
5
- "packageVersion": "9.0.0-beta.45",
5
+ "packageVersion": "9.0.0-beta.47",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 3,
@@ -96,6 +96,7 @@ const PRAXIS_TABLE_RUNTIME_I18N_CONFIG = {
96
96
  'table.chrome.disconnect': 'Desconectar',
97
97
  'table.chrome.disconnectTooltip': 'Desconectar da fonte de dados',
98
98
  'table.chrome.exportData': 'Exportar dados',
99
+ 'table.chrome.exportVisibleExcel': 'Excel visível',
99
100
  'table.export.completed': 'Exportacao concluida.',
100
101
  'table.export.deferred': 'Exportacao enviada para processamento.',
101
102
  'table.export.error': 'Nao foi possivel exportar os dados.',
@@ -214,6 +215,7 @@ const PRAXIS_TABLE_RUNTIME_I18N_CONFIG = {
214
215
  'table.chrome.disconnect': 'Disconnect',
215
216
  'table.chrome.disconnectTooltip': 'Disconnect from the data source',
216
217
  'table.chrome.exportData': 'Export data',
218
+ 'table.chrome.exportVisibleExcel': 'Visible Excel',
217
219
  'table.export.completed': 'Export completed.',
218
220
  'table.export.deferred': 'Export submitted for processing.',
219
221
  'table.export.error': 'Could not export the data.',
@@ -625,6 +627,9 @@ class PraxisTableToolbar {
625
627
  getExportDataLabel() {
626
628
  return this.tx('table.chrome.exportData', 'Exportar dados');
627
629
  }
630
+ getVisibleExcelExportLabel() {
631
+ return this.tx('table.chrome.exportVisibleExcel', 'Excel (visível)');
632
+ }
628
633
  getMoreActionsLabel() {
629
634
  return this.tx('table.chrome.moreActions', 'Mais ações');
630
635
  }
@@ -634,6 +639,15 @@ class PraxisTableToolbar {
634
639
  event.target?.blur?.();
635
640
  this.exportAction.emit({ format });
636
641
  }
642
+ emitVisibleExcelExportAction(event) {
643
+ if (this.exportBusy)
644
+ return;
645
+ event.target?.blur?.();
646
+ this.exportAction.emit({ format: 'excel', scope: 'currentPage', localOnly: true });
647
+ }
648
+ isExcelExportFormat(format) {
649
+ return String(format || '').trim().toLowerCase() === 'excel';
650
+ }
637
651
  getColumnsVisibilityLabel() {
638
652
  return this.tx('table.chrome.columnsVisibility', 'Colunas');
639
653
  }
@@ -1698,6 +1712,16 @@ class PraxisTableToolbar {
1698
1712
  <mat-icon [praxisIcon]="getExportIcon(format)"></mat-icon>
1699
1713
  {{ format.toUpperCase() }}
1700
1714
  </button>
1715
+ @if (isExcelExportFormat(format)) {
1716
+ <button
1717
+ mat-menu-item
1718
+ [disabled]="exportBusy"
1719
+ (click)="emitVisibleExcelExportAction($event)"
1720
+ >
1721
+ <mat-icon [praxisIcon]="'table_view'"></mat-icon>
1722
+ {{ getVisibleExcelExportLabel() }}
1723
+ </button>
1724
+ }
1701
1725
  }
1702
1726
  </mat-menu>
1703
1727
  }
@@ -1796,6 +1820,16 @@ class PraxisTableToolbar {
1796
1820
  <mat-icon>{{ getExportIcon(format) }}</mat-icon>
1797
1821
  {{ format.toUpperCase() }}
1798
1822
  </button>
1823
+ @if (isExcelExportFormat(format)) {
1824
+ <button
1825
+ mat-menu-item
1826
+ [disabled]="exportBusy"
1827
+ (click)="emitVisibleExcelExportAction($event)"
1828
+ >
1829
+ <mat-icon [praxisIcon]="'table_view'"></mat-icon>
1830
+ {{ getVisibleExcelExportLabel() }}
1831
+ </button>
1832
+ }
1799
1833
  }
1800
1834
  </mat-menu>
1801
1835
  }
@@ -2232,6 +2266,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2232
2266
  <mat-icon [praxisIcon]="getExportIcon(format)"></mat-icon>
2233
2267
  {{ format.toUpperCase() }}
2234
2268
  </button>
2269
+ @if (isExcelExportFormat(format)) {
2270
+ <button
2271
+ mat-menu-item
2272
+ [disabled]="exportBusy"
2273
+ (click)="emitVisibleExcelExportAction($event)"
2274
+ >
2275
+ <mat-icon [praxisIcon]="'table_view'"></mat-icon>
2276
+ {{ getVisibleExcelExportLabel() }}
2277
+ </button>
2278
+ }
2235
2279
  }
2236
2280
  </mat-menu>
2237
2281
  }
@@ -2330,6 +2374,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2330
2374
  <mat-icon>{{ getExportIcon(format) }}</mat-icon>
2331
2375
  {{ format.toUpperCase() }}
2332
2376
  </button>
2377
+ @if (isExcelExportFormat(format)) {
2378
+ <button
2379
+ mat-menu-item
2380
+ [disabled]="exportBusy"
2381
+ (click)="emitVisibleExcelExportAction($event)"
2382
+ >
2383
+ <mat-icon [praxisIcon]="'table_view'"></mat-icon>
2384
+ {{ getVisibleExcelExportLabel() }}
2385
+ </button>
2386
+ }
2333
2387
  }
2334
2388
  </mat-menu>
2335
2389
  }
@@ -40014,6 +40068,10 @@ class PraxisTable {
40014
40068
  if (typeof emptyState.description === 'string') {
40015
40069
  return emptyState.description;
40016
40070
  }
40071
+ if (typeof emptyState.title === 'string' && emptyState.title.trim()) {
40072
+ const message = String(emptyState.message || '').trim();
40073
+ return message && message !== emptyState.title.trim() ? message : undefined;
40074
+ }
40017
40075
  const actions = emptyState.actions ?? [];
40018
40076
  if (!actions.length) {
40019
40077
  return undefined;
@@ -41534,7 +41592,7 @@ class PraxisTable {
41534
41592
  if (this.aiAdapter || this.aiAdapterLoadStarted)
41535
41593
  return;
41536
41594
  this.aiAdapterLoadStarted = true;
41537
- import('./praxisui-table-table-ai.adapter-CJuL6UVY.mjs')
41595
+ import('./praxisui-table-table-ai.adapter-0cYAJ5hm.mjs')
41538
41596
  .then(({ TableAiAdapter }) => {
41539
41597
  if (!this.isAiAssistantEnabled()) {
41540
41598
  this.aiAssistantOpenAfterAdapterLoad = false;
@@ -47304,8 +47362,13 @@ class PraxisTable {
47304
47362
  this.exportStatusMessage = translateTableRuntimeText(this.i18n, 'table.export.processing', 'Exportando dados...');
47305
47363
  this.cdr.markForCheck();
47306
47364
  try {
47307
- const request = this.buildTableExportRequest(format, scopeOverride);
47308
- const result = await this.collectionExport.exportCollection(request);
47365
+ const localVisibleExcelExport = event?.localOnly === true && format === 'excel';
47366
+ const request = localVisibleExcelExport
47367
+ ? this.buildVisibleExcelExportRequest()
47368
+ : this.buildTableExportRequest(format, scopeOverride);
47369
+ const result = localVisibleExcelExport
47370
+ ? this.collectionExport.exportLocalCollection(request)
47371
+ : await this.collectionExport.exportCollection(request);
47309
47372
  assertPraxisCollectionExportArtifact(result);
47310
47373
  this.exportAction.emit({
47311
47374
  format,
@@ -47405,6 +47468,52 @@ class PraxisTable {
47405
47468
  },
47406
47469
  };
47407
47470
  }
47471
+ buildVisibleExcelExportRequest() {
47472
+ const request = this.buildTableExportRequest('excel', 'currentPage');
47473
+ return {
47474
+ ...request,
47475
+ scope: 'currentPage',
47476
+ resourcePath: undefined,
47477
+ loadedItems: this.resolveTableExportLoadedItems('currentPage'),
47478
+ fields: this.buildTableExportFields('visible', true),
47479
+ includeHeaders: true,
47480
+ applyFormatting: true,
47481
+ maxRows: undefined,
47482
+ fileName: this.resolveVisibleExcelExportFileName(),
47483
+ formatOptions: {
47484
+ ...request.formatOptions,
47485
+ excel: {
47486
+ ...request.formatOptions?.excel,
47487
+ sheetName: request.formatOptions?.excel?.sheetName || this.tableId || this.componentInstanceId || 'Export',
47488
+ freezeHeaders: request.formatOptions?.excel?.freezeHeaders ?? true,
47489
+ autoFitColumns: request.formatOptions?.excel?.autoFitColumns ?? true,
47490
+ },
47491
+ },
47492
+ metadata: {
47493
+ ...request.metadata,
47494
+ exportMode: 'visible-local',
47495
+ configuredScope: request.scope,
47496
+ effectiveScope: 'currentPage',
47497
+ },
47498
+ };
47499
+ }
47500
+ resolveVisibleExcelExportFileName() {
47501
+ const baseName = String(this.config?.export?.general?.defaultFileName
47502
+ || this.tableId
47503
+ || this.componentInstanceId
47504
+ || 'praxis-table')
47505
+ .trim()
47506
+ .replace(/[\\/:*?"<>|]+/g, '-')
47507
+ .replace(/\s+/g, '-')
47508
+ || 'praxis-table';
47509
+ return `${baseName}_visivel_${this.formatExportDate(new Date())}`;
47510
+ }
47511
+ formatExportDate(date) {
47512
+ const year = date.getFullYear();
47513
+ const month = String(date.getMonth() + 1).padStart(2, '0');
47514
+ const day = String(date.getDate()).padStart(2, '0');
47515
+ return `${year}-${month}-${day}`;
47516
+ }
47408
47517
  resolveEffectiveExportScope(scope) {
47409
47518
  if (scope !== 'auto') {
47410
47519
  return scope;
@@ -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 { H as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, k as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, X as coerceTableComponentEditPlans, Z as compileTableComponentEditPlans, K as TASK_PRESETS, a2 as getTableComponentEditPlanCapabilities, z as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, x as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, E as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, I as TABLE_COMPONENT_EDIT_PLAN_VERSION, y as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, G as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-BplRCswi.mjs';
4
+ import { H as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, k as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, X as coerceTableComponentEditPlans, Z as compileTableComponentEditPlans, K as TASK_PRESETS, a2 as getTableComponentEditPlanCapabilities, z as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, x as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, E as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, I as TABLE_COMPONENT_EDIT_PLAN_VERSION, y as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, G as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-DBm9XDi4.mjs';
5
5
 
6
6
  const TABLE_ROW_EXPRESSION_CONTEXT_OPTION = {
7
7
  mode: 'expression',
@@ -1 +1 @@
1
- export { A as AnalyticsTableConfigAdapterService, a as AnalyticsTableContractService, b as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, c as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, d as ColumnsConfigEditorComponent, D as DATE_PRESETS, e as DataFormatterComponent, f as DataFormattingService, F as FORMULA_TEMPLATES, g as FilterConfigService, h as FilterSettingsComponent, i as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, j as PRAXIS_FILTER_COMPONENT_METADATA, k as PRAXIS_TABLE_AUTHORING_MANIFEST, l as PRAXIS_TABLE_COMPONENT_METADATA, m as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, n as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, o as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, p as PraxisFilter, q as PraxisFilterWidgetConfigEditor, r as PraxisTable, s as PraxisTableConfigEditor, t as PraxisTableInlineAuthoringEditorComponent, u as PraxisTableToolbar, v as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, w as TABLE_COMPONENT_AI_CAPABILITIES, x as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, y as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, z as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, E as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, G as TABLE_COMPONENT_EDIT_PLAN_KIND, I as TABLE_COMPONENT_EDIT_PLAN_VERSION, K as TASK_PRESETS, L as TableDefaultsProvider, O as TableRulesEditorComponent, Q as ToolbarActionsEditorComponent, V as ValueMappingEditorComponent, R as VisualFormulaBuilderComponent, U as buildTableApplyPlan, W as coerceTableComponentEditPlan, X as coerceTableComponentEditPlans, Y as compileTableComponentEditPlan, Z as compileTableComponentEditPlans, _ as createTableAuthoringDocument, $ as getActionId, a0 as getEnum, a1 as getTableCapabilities, a2 as getTableComponentEditPlanCapabilities, a3 as isTableRendererSupportedByRichContentP0, a4 as mapTableRendererToRichContentP0, a5 as normalizeTableAuthoringDocument, a6 as parseLegacyOrTableDocument, a7 as providePraxisFilterMetadata, a8 as providePraxisTableMetadata, a9 as providePraxisTableToolbarAppearance, aa as serializeTableAuthoringDocument, ab as toCanonicalTableConfig, ac as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-BplRCswi.mjs';
1
+ export { A as AnalyticsTableConfigAdapterService, a as AnalyticsTableContractService, b as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, c as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, d as ColumnsConfigEditorComponent, D as DATE_PRESETS, e as DataFormatterComponent, f as DataFormattingService, F as FORMULA_TEMPLATES, g as FilterConfigService, h as FilterSettingsComponent, i as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, j as PRAXIS_FILTER_COMPONENT_METADATA, k as PRAXIS_TABLE_AUTHORING_MANIFEST, l as PRAXIS_TABLE_COMPONENT_METADATA, m as PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, n as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, o as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, p as PraxisFilter, q as PraxisFilterWidgetConfigEditor, r as PraxisTable, s as PraxisTableConfigEditor, t as PraxisTableInlineAuthoringEditorComponent, u as PraxisTableToolbar, v as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, w as TABLE_COMPONENT_AI_CAPABILITIES, x as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, y as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, z as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, E as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, G as TABLE_COMPONENT_EDIT_PLAN_KIND, I as TABLE_COMPONENT_EDIT_PLAN_VERSION, K as TASK_PRESETS, L as TableDefaultsProvider, O as TableRulesEditorComponent, Q as ToolbarActionsEditorComponent, V as ValueMappingEditorComponent, R as VisualFormulaBuilderComponent, U as buildTableApplyPlan, W as coerceTableComponentEditPlan, X as coerceTableComponentEditPlans, Y as compileTableComponentEditPlan, Z as compileTableComponentEditPlans, _ as createTableAuthoringDocument, $ as getActionId, a0 as getEnum, a1 as getTableCapabilities, a2 as getTableComponentEditPlanCapabilities, a3 as isTableRendererSupportedByRichContentP0, a4 as mapTableRendererToRichContentP0, a5 as normalizeTableAuthoringDocument, a6 as parseLegacyOrTableDocument, a7 as providePraxisFilterMetadata, a8 as providePraxisTableMetadata, a9 as providePraxisTableToolbarAppearance, aa as serializeTableAuthoringDocument, ab as toCanonicalTableConfig, ac as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-DBm9XDi4.mjs';
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "9.0.0-beta.45",
3
+ "version": "9.0.0-beta.47",
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.0-beta.45",
10
- "@praxisui/core": "^9.0.0-beta.45",
11
- "@praxisui/dynamic-fields": "^9.0.0-beta.45",
12
- "@praxisui/dynamic-form": "^9.0.0-beta.45",
13
- "@praxisui/metadata-editor": "^9.0.0-beta.45",
14
- "@praxisui/rich-content": "^9.0.0-beta.45",
15
- "@praxisui/settings-panel": "^9.0.0-beta.45",
16
- "@praxisui/table-rule-builder": "^9.0.0-beta.45",
9
+ "@praxisui/ai": "^9.0.0-beta.47",
10
+ "@praxisui/core": "^9.0.0-beta.47",
11
+ "@praxisui/dynamic-fields": "^9.0.0-beta.47",
12
+ "@praxisui/dynamic-form": "^9.0.0-beta.47",
13
+ "@praxisui/metadata-editor": "^9.0.0-beta.47",
14
+ "@praxisui/rich-content": "^9.0.0-beta.47",
15
+ "@praxisui/settings-panel": "^9.0.0-beta.47",
16
+ "@praxisui/table-rule-builder": "^9.0.0-beta.47",
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.0-beta.45",
21
+ "@praxisui/dialog": "^9.0.0-beta.47",
22
22
  "rxjs": "~7.8.0"
23
23
  },
24
24
  "dependencies": {
@@ -1,5 +1,5 @@
1
1
  import * as _praxisui_core from '@praxisui/core';
2
- import { TableToolbarAppearanceConfig, TableConfig, LoggerService, PraxisI18nService, TableToolbarAppearanceVariant, TableToolbarAppearanceDensity, TableToolbarAppearanceShape, TableToolbarAppearanceDivider, TableToolbarTokenName, GlobalConfigService, AsyncConfigStorage, LocalStorageConfigService, ApiUrlEntry, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, PraxisResourceEvent, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ResourceCapabilityDigest, ConnectionStorage, LoadingOrchestrator, GlobalActionService, PraxisLoadingRenderer, PraxisRuntimeComponentObservationEnvelope, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, PraxisExportScope, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, ResourceCapabilityOperation, JsonLogicExpression, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog } from '@praxisui/core';
2
+ import { TableToolbarAppearanceConfig, TableConfig, PraxisExportScope, LoggerService, PraxisI18nService, TableToolbarAppearanceVariant, TableToolbarAppearanceDensity, TableToolbarAppearanceShape, TableToolbarAppearanceDivider, TableToolbarTokenName, GlobalConfigService, AsyncConfigStorage, LocalStorageConfigService, ApiUrlEntry, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, PraxisResourceEvent, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ResourceCapabilityDigest, ConnectionStorage, LoadingOrchestrator, GlobalActionService, PraxisLoadingRenderer, PraxisRuntimeComponentObservationEnvelope, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, ResourceCapabilityOperation, JsonLogicExpression, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog } from '@praxisui/core';
3
3
  import * as i0 from '@angular/core';
4
4
  import { InjectionToken, OnDestroy, EventEmitter, ElementRef, Provider, OnInit, OnChanges, AfterViewInit, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, SimpleChanges, ComponentRef, AfterContentInit, Injector, Type } from '@angular/core';
5
5
  import { ActivatedRoute } from '@angular/router';
@@ -65,6 +65,8 @@ declare class PraxisTableToolbar implements OnDestroy {
65
65
  }>;
66
66
  exportAction: EventEmitter<{
67
67
  format: string;
68
+ scope?: PraxisExportScope;
69
+ localOnly?: boolean;
68
70
  }>;
69
71
  columnVisibilityToggle: EventEmitter<{
70
72
  field: string;
@@ -94,8 +96,11 @@ declare class PraxisTableToolbar implements OnDestroy {
94
96
  getToolbarIcon(): string | null;
95
97
  getToolbarTextAlign(): 'start' | 'center' | 'end';
96
98
  getExportDataLabel(): string;
99
+ getVisibleExcelExportLabel(): string;
97
100
  getMoreActionsLabel(): string;
98
101
  emitExportAction(event: Event, format: string): void;
102
+ emitVisibleExcelExportAction(event: Event): void;
103
+ isExcelExportFormat(format: unknown): boolean;
99
104
  getColumnsVisibilityLabel(): string;
100
105
  getColumnsVisibilityIcon(): string;
101
106
  isColumnsVisibilityEnabled(): boolean;
@@ -1745,10 +1750,14 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1745
1750
  onExportAction(event: {
1746
1751
  format: string;
1747
1752
  scope?: PraxisExportScope;
1753
+ localOnly?: boolean;
1748
1754
  }): Promise<void>;
1749
1755
  canRunExportAction(format: unknown): boolean;
1750
1756
  private shouldBlockSelectedExportWithoutSelection;
1751
1757
  private buildTableExportRequest;
1758
+ private buildVisibleExcelExportRequest;
1759
+ private resolveVisibleExcelExportFileName;
1760
+ private formatExportDate;
1752
1761
  private resolveEffectiveExportScope;
1753
1762
  private resolveTableExportLoadedItems;
1754
1763
  private computeLocalExportRows;