@praxisui/crud 9.0.4-rc.12 → 9.0.4-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-08-03T03:05:05.334Z",
3
+ "generatedAt": "2026-08-03T16:02:34.468Z",
4
4
  "packageName": "@praxisui/crud",
5
- "packageVersion": "9.0.4-rc.12",
5
+ "packageVersion": "9.0.4-rc.13",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 2,
@@ -103,6 +103,7 @@ class CrudLauncherService {
103
103
  storage = inject(ASYNC_CONFIG_STORAGE);
104
104
  global = inject(GlobalConfigService);
105
105
  operationResolver = inject(CrudOperationResolutionService);
106
+ dialogHostPromise;
106
107
  drawerAdapter = (() => {
107
108
  try {
108
109
  return inject(CRUD_DRAWER_ADAPTER);
@@ -112,6 +113,9 @@ class CrudLauncherService {
112
113
  }
113
114
  })();
114
115
  async launch(action, row, metadata, componentKeyId, drawerCallbacks, runtime) {
116
+ const prefetchedDialogHost = this.isLikelyOverlayAction(action, metadata)
117
+ ? this.loadDialogHost()
118
+ : undefined;
115
119
  // Carregar overrides de CRUD (se houver) e mesclar em uma cópia local
116
120
  const merged = await this.mergeCrudOverrides(metadata, action, componentKeyId || undefined);
117
121
  merged.action = this.normalizeActionForLaunch(merged.action);
@@ -177,7 +181,7 @@ class CrudLauncherService {
177
181
  backdropClasses.push('pfx-transparent-backdrop');
178
182
  }
179
183
  const mergedBackdropClasses = mergeClassList(backdropClasses, modalCfg.backdropClass);
180
- const ref = await this.dialog.openAsync(() => Promise.resolve().then(function () { return dynamicFormDialogHost_component; }).then((m) => m.DynamicFormDialogHostComponent), {
184
+ const ref = await this.dialog.openAsync(() => prefetchedDialogHost ?? this.loadDialogHost(), {
181
185
  ...modalCfg,
182
186
  panelClass: panelClasses,
183
187
  backdropClass: mergedBackdropClasses,
@@ -256,6 +260,13 @@ class CrudLauncherService {
256
260
  return 'route';
257
261
  }
258
262
  }
263
+ isLikelyOverlayAction(action, metadata) {
264
+ const configuredMode = action.openMode ?? metadata.defaults?.openMode;
265
+ return configuredMode === 'drawer' || configuredMode === 'modal';
266
+ }
267
+ loadDialogHost() {
268
+ return this.dialogHostPromise ??= Promise.resolve().then(function () { return dynamicFormDialogHost_component; }).then((module) => module.DynamicFormDialogHostComponent);
269
+ }
259
270
  buildRoute(action, row, metadata) {
260
271
  let route = action.route;
261
272
  const query = {};
@@ -896,6 +907,8 @@ const PRAXIS_CRUD_RUNTIME_I18N_CONFIG = {
896
907
  'crud.actions.view': 'Ver',
897
908
  'crud.actions.edit': 'Editar',
898
909
  'crud.actions.delete': 'Excluir',
910
+ 'crud.actions.default': 'ação',
911
+ 'crud.actions.opening': 'Abrindo {action}…',
899
912
  'crud.dialog.recordContextLabel': 'Registro em edição',
900
913
  'crud.delete.confirmMessage': 'Esta ação não pode ser desfeita. Deseja continuar?',
901
914
  'crud.delete.cancel': 'Cancelar',
@@ -914,6 +927,8 @@ const PRAXIS_CRUD_RUNTIME_I18N_CONFIG = {
914
927
  'crud.actions.view': 'View',
915
928
  'crud.actions.edit': 'Edit',
916
929
  'crud.actions.delete': 'Delete',
930
+ 'crud.actions.default': 'action',
931
+ 'crud.actions.opening': 'Opening {action}…',
917
932
  'crud.dialog.recordContextLabel': 'Record being edited',
918
933
  'crud.delete.confirmMessage': 'This action cannot be undone. Do you want to continue?',
919
934
  'crud.delete.cancel': 'Cancel',
@@ -3664,6 +3679,7 @@ class PraxisCrudComponent {
3664
3679
  tableQueryContext = null;
3665
3680
  tableFilterCriteria = {};
3666
3681
  tableCrudContext;
3682
+ openingActionLabel = signal(null, ...(ngDevMode ? [{ debugName: "openingActionLabel" }] : /* istanbul ignore next */ []));
3667
3683
  launcher = inject(CrudLauncherService);
3668
3684
  http = inject(HttpClient);
3669
3685
  destroyRef = inject(DestroyRef);
@@ -3815,6 +3831,10 @@ class PraxisCrudComponent {
3815
3831
  }
3816
3832
  }
3817
3833
  async onAction(action, row, runtimeEvent) {
3834
+ if (this.openingActionLabel()) {
3835
+ return;
3836
+ }
3837
+ this.openingActionLabel.set(this.resolveOpeningActionLabel(action, runtimeEvent));
3818
3838
  try {
3819
3839
  const normalizedAction = this.normalizeCrudActionName(action);
3820
3840
  const contextualRow = row ?? this.resolveSelectedRowForAction(normalizedAction);
@@ -3920,6 +3940,26 @@ class PraxisCrudComponent {
3920
3940
  catch (err) {
3921
3941
  this.error.emit(err);
3922
3942
  }
3943
+ finally {
3944
+ this.openingActionLabel.set(null);
3945
+ }
3946
+ }
3947
+ getOpeningActionStatus(actionLabel) {
3948
+ return this.txWithParams('crud.actions.opening', 'Abrindo {action}…', { action: actionLabel });
3949
+ }
3950
+ resolveOpeningActionLabel(action, runtimeEvent) {
3951
+ const configuredLabel = String(runtimeEvent?.actionConfig?.label || '').trim();
3952
+ if (configuredLabel) {
3953
+ return configuredLabel;
3954
+ }
3955
+ const normalized = this.normalizeCrudActionName(action);
3956
+ if (normalized === 'create'
3957
+ || normalized === 'view'
3958
+ || normalized === 'edit'
3959
+ || normalized === 'delete') {
3960
+ return this.getCrudActionLabel(normalized);
3961
+ }
3962
+ return String(action || '').trim() || this.tx('crud.actions.default', 'ação');
3923
3963
  }
3924
3964
  hasExplicitOpenBinding(action) {
3925
3965
  const mode = action.openMode;
@@ -5190,38 +5230,46 @@ class PraxisCrudComponent {
5190
5230
  providePraxisI18nConfig(RESOURCE_DISCOVERY_I18N_CONFIG),
5191
5231
  providePraxisI18nConfig(PRAXIS_CRUD_RUNTIME_I18N_CONFIG),
5192
5232
  ], viewQueries: [{ propertyName: "table", first: true, predicate: PraxisTable, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
5193
- @if (shouldRenderTable(resolvedMetadata)) {
5194
- <praxis-table
5195
- [config]="tableConfigForBinding"
5196
- [resourcePath]="resolveResourcePath(resolvedMetadata)"
5197
- [data]="resolveTableData(resolvedMetadata)"
5198
- [queryContext]="tableQueryContext"
5199
- [filterCriteria]="tableFilterCriteria"
5200
- [tableId]="crudId || 'default'"
5201
- [crudContext]="tableCrudContext"
5202
- [enableCustomization]="enableCustomization"
5203
- [authoringCapability]="authoringCapability"
5204
- (rowClick)="onTableRowClick($event)"
5205
- (selectionChange)="onTableSelectionChange($event)"
5206
- (rowAction)="onAction($event.action, $event.row, $event)"
5207
- (toolbarAction)="onToolbarAction($event)"
5208
- (bulkAction)="onBulkAction($event)"
5209
- (collectionLinksChange)="onCollectionLinksChange($event)"
5210
- (reset)="onResetPreferences()"
5211
- (metadataChange)="onTableMetadataChange()"
5212
- (loadingStateChange)="onTableLoadingStateChange($event)"
5213
- ></praxis-table>
5214
- } @else {
5215
- @if (isCustomizationAvailable()) {
5216
- <praxis-empty-state-card
5217
- icon="table_rows"
5218
- [title]="getEmptyStateTitle()"
5219
- [description]="getEmptyStateDescription()"
5220
- [primaryAction]="{ label: getEmptyStatePrimaryAction(), icon: 'bolt', action: onConfigureRequested.bind(this) }"
5221
- />
5233
+ <div class="praxis-crud-runtime" [attr.aria-busy]="openingActionLabel() ? 'true' : null">
5234
+ @if (openingActionLabel(); as actionLabel) {
5235
+ <div class="praxis-crud-opening-status" role="status" aria-live="polite" data-testid="praxis-crud-opening-status">
5236
+ <span class="praxis-crud-opening-status__spinner" aria-hidden="true"></span>
5237
+ <span>{{ getOpeningActionStatus(actionLabel) }}</span>
5238
+ </div>
5222
5239
  }
5223
- }
5224
- `, isInline: true, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}\n"], dependencies: [{ kind: "component", type: PraxisTable, selector: "praxis-table", inputs: ["config", "resourcePath", "data", "tableId", "componentInstanceId", "configPersistenceStrategy", "title", "subtitle", "icon", "autoDelete", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "crudContext", "filterCriteria", "queryContext", "aiContext", "aiAssistantVoiceInputMode", "aiAssistantVoiceLanguage", "horizontalScroll", "enableCustomization", "authoringCapability", "dense"], outputs: ["rowClick", "widgetEvent", "resourceEvent", "rowDoubleClick", "rowExpansionChange", "rowAction", "toolbarAction", "bulkAction", "exportAction", "columnReorder", "columnReorderAttempt", "columnResize", "beforeDelete", "afterDelete", "deleteError", "beforeBulkDelete", "afterBulkDelete", "bulkDeleteError", "schemaStatusChange", "configChange", "metadataChange", "loadingStateChange", "collectionLinksChange", "selectionChange"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone", "variant", "alignment", "density", "iconContainer"] }] });
5240
+ @if (shouldRenderTable(resolvedMetadata)) {
5241
+ <praxis-table
5242
+ [config]="tableConfigForBinding"
5243
+ [resourcePath]="resolveResourcePath(resolvedMetadata)"
5244
+ [data]="resolveTableData(resolvedMetadata)"
5245
+ [queryContext]="tableQueryContext"
5246
+ [filterCriteria]="tableFilterCriteria"
5247
+ [tableId]="crudId || 'default'"
5248
+ [crudContext]="tableCrudContext"
5249
+ [enableCustomization]="enableCustomization"
5250
+ [authoringCapability]="authoringCapability"
5251
+ (rowClick)="onTableRowClick($event)"
5252
+ (selectionChange)="onTableSelectionChange($event)"
5253
+ (rowAction)="onAction($event.action, $event.row, $event)"
5254
+ (toolbarAction)="onToolbarAction($event)"
5255
+ (bulkAction)="onBulkAction($event)"
5256
+ (collectionLinksChange)="onCollectionLinksChange($event)"
5257
+ (reset)="onResetPreferences()"
5258
+ (metadataChange)="onTableMetadataChange()"
5259
+ (loadingStateChange)="onTableLoadingStateChange($event)"
5260
+ ></praxis-table>
5261
+ } @else {
5262
+ @if (isCustomizationAvailable()) {
5263
+ <praxis-empty-state-card
5264
+ icon="table_rows"
5265
+ [title]="getEmptyStateTitle()"
5266
+ [description]="getEmptyStateDescription()"
5267
+ [primaryAction]="{ label: getEmptyStatePrimaryAction(), icon: 'bolt', action: onConfigureRequested.bind(this) }"
5268
+ />
5269
+ }
5270
+ }
5271
+ </div>
5272
+ `, isInline: true, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}.praxis-crud-runtime{position:relative;min-width:0}.praxis-crud-opening-status{position:absolute;z-index:6;top:.7rem;right:.7rem;display:inline-flex;align-items:center;gap:.55rem;min-height:2.25rem;max-width:min(24rem,calc(100% - 1.4rem));padding:.48rem .72rem;border:1px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 32%,transparent);border-radius:999px;color:var(--md-sys-color-on-surface, currentColor);background:color-mix(in srgb,var(--md-sys-color-surface-container-high, #fff) 94%,transparent);box-shadow:0 10px 28px #0f172a29;font-size:.82rem;font-weight:650;line-height:1.25;pointer-events:none}.praxis-crud-opening-status__spinner{width:.95rem;height:.95rem;flex:0 0 auto;border:2px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 26%,transparent);border-top-color:var(--md-sys-color-primary, #3f51b5);border-radius:50%;animation:praxis-crud-opening-spin .72s linear infinite}@keyframes praxis-crud-opening-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.praxis-crud-opening-status__spinner{animation:none;border-top-color:currentColor}}\n"], dependencies: [{ kind: "component", type: PraxisTable, selector: "praxis-table", inputs: ["config", "resourcePath", "data", "tableId", "componentInstanceId", "configPersistenceStrategy", "title", "subtitle", "icon", "autoDelete", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "crudContext", "filterCriteria", "queryContext", "aiContext", "aiAssistantVoiceInputMode", "aiAssistantVoiceLanguage", "horizontalScroll", "enableCustomization", "authoringCapability", "dense"], outputs: ["rowClick", "widgetEvent", "resourceEvent", "rowDoubleClick", "rowExpansionChange", "rowAction", "toolbarAction", "bulkAction", "exportAction", "columnReorder", "columnReorderAttempt", "columnResize", "beforeDelete", "afterDelete", "deleteError", "beforeBulkDelete", "afterBulkDelete", "bulkDeleteError", "schemaStatusChange", "configChange", "metadataChange", "loadingStateChange", "collectionLinksChange", "selectionChange"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone", "variant", "alignment", "density", "iconContainer"] }] });
5225
5273
  }
5226
5274
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisCrudComponent, decorators: [{
5227
5275
  type: Component,
@@ -5229,38 +5277,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
5229
5277
  providePraxisI18nConfig(RESOURCE_DISCOVERY_I18N_CONFIG),
5230
5278
  providePraxisI18nConfig(PRAXIS_CRUD_RUNTIME_I18N_CONFIG),
5231
5279
  ], template: `
5232
- @if (shouldRenderTable(resolvedMetadata)) {
5233
- <praxis-table
5234
- [config]="tableConfigForBinding"
5235
- [resourcePath]="resolveResourcePath(resolvedMetadata)"
5236
- [data]="resolveTableData(resolvedMetadata)"
5237
- [queryContext]="tableQueryContext"
5238
- [filterCriteria]="tableFilterCriteria"
5239
- [tableId]="crudId || 'default'"
5240
- [crudContext]="tableCrudContext"
5241
- [enableCustomization]="enableCustomization"
5242
- [authoringCapability]="authoringCapability"
5243
- (rowClick)="onTableRowClick($event)"
5244
- (selectionChange)="onTableSelectionChange($event)"
5245
- (rowAction)="onAction($event.action, $event.row, $event)"
5246
- (toolbarAction)="onToolbarAction($event)"
5247
- (bulkAction)="onBulkAction($event)"
5248
- (collectionLinksChange)="onCollectionLinksChange($event)"
5249
- (reset)="onResetPreferences()"
5250
- (metadataChange)="onTableMetadataChange()"
5251
- (loadingStateChange)="onTableLoadingStateChange($event)"
5252
- ></praxis-table>
5253
- } @else {
5254
- @if (isCustomizationAvailable()) {
5255
- <praxis-empty-state-card
5256
- icon="table_rows"
5257
- [title]="getEmptyStateTitle()"
5258
- [description]="getEmptyStateDescription()"
5259
- [primaryAction]="{ label: getEmptyStatePrimaryAction(), icon: 'bolt', action: onConfigureRequested.bind(this) }"
5260
- />
5280
+ <div class="praxis-crud-runtime" [attr.aria-busy]="openingActionLabel() ? 'true' : null">
5281
+ @if (openingActionLabel(); as actionLabel) {
5282
+ <div class="praxis-crud-opening-status" role="status" aria-live="polite" data-testid="praxis-crud-opening-status">
5283
+ <span class="praxis-crud-opening-status__spinner" aria-hidden="true"></span>
5284
+ <span>{{ getOpeningActionStatus(actionLabel) }}</span>
5285
+ </div>
5261
5286
  }
5262
- }
5263
- `, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}\n"] }]
5287
+ @if (shouldRenderTable(resolvedMetadata)) {
5288
+ <praxis-table
5289
+ [config]="tableConfigForBinding"
5290
+ [resourcePath]="resolveResourcePath(resolvedMetadata)"
5291
+ [data]="resolveTableData(resolvedMetadata)"
5292
+ [queryContext]="tableQueryContext"
5293
+ [filterCriteria]="tableFilterCriteria"
5294
+ [tableId]="crudId || 'default'"
5295
+ [crudContext]="tableCrudContext"
5296
+ [enableCustomization]="enableCustomization"
5297
+ [authoringCapability]="authoringCapability"
5298
+ (rowClick)="onTableRowClick($event)"
5299
+ (selectionChange)="onTableSelectionChange($event)"
5300
+ (rowAction)="onAction($event.action, $event.row, $event)"
5301
+ (toolbarAction)="onToolbarAction($event)"
5302
+ (bulkAction)="onBulkAction($event)"
5303
+ (collectionLinksChange)="onCollectionLinksChange($event)"
5304
+ (reset)="onResetPreferences()"
5305
+ (metadataChange)="onTableMetadataChange()"
5306
+ (loadingStateChange)="onTableLoadingStateChange($event)"
5307
+ ></praxis-table>
5308
+ } @else {
5309
+ @if (isCustomizationAvailable()) {
5310
+ <praxis-empty-state-card
5311
+ icon="table_rows"
5312
+ [title]="getEmptyStateTitle()"
5313
+ [description]="getEmptyStateDescription()"
5314
+ [primaryAction]="{ label: getEmptyStatePrimaryAction(), icon: 'bolt', action: onConfigureRequested.bind(this) }"
5315
+ />
5316
+ }
5317
+ }
5318
+ </div>
5319
+ `, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}.praxis-crud-runtime{position:relative;min-width:0}.praxis-crud-opening-status{position:absolute;z-index:6;top:.7rem;right:.7rem;display:inline-flex;align-items:center;gap:.55rem;min-height:2.25rem;max-width:min(24rem,calc(100% - 1.4rem));padding:.48rem .72rem;border:1px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 32%,transparent);border-radius:999px;color:var(--md-sys-color-on-surface, currentColor);background:color-mix(in srgb,var(--md-sys-color-surface-container-high, #fff) 94%,transparent);box-shadow:0 10px 28px #0f172a29;font-size:.82rem;font-weight:650;line-height:1.25;pointer-events:none}.praxis-crud-opening-status__spinner{width:.95rem;height:.95rem;flex:0 0 auto;border:2px solid color-mix(in srgb,var(--md-sys-color-primary, #3f51b5) 26%,transparent);border-top-color:var(--md-sys-color-primary, #3f51b5);border-radius:50%;animation:praxis-crud-opening-spin .72s linear infinite}@keyframes praxis-crud-opening-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.praxis-crud-opening-status__spinner{animation:none;border-top-color:currentColor}}\n"] }]
5264
5320
  }], ctorParameters: () => [], propDecorators: { metadata: [{
5265
5321
  type: Input,
5266
5322
  args: [{ required: true }]
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "@praxisui/crud",
3
- "version": "9.0.4-rc.12",
3
+ "version": "9.0.4-rc.13",
4
4
  "description": "CRUD building blocks for Praxis UI: integrates dynamic forms and tables with unified configuration and services.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/core": "^21.0.0",
8
- "@praxisui/dynamic-form": "^9.0.4-rc.12",
9
- "@praxisui/table": "^9.0.4-rc.12",
10
- "@praxisui/core": "^9.0.4-rc.12",
11
- "@praxisui/dynamic-fields": "^9.0.4-rc.12",
12
- "@praxisui/settings-panel": "^9.0.4-rc.12",
8
+ "@praxisui/dynamic-form": "^9.0.4-rc.13",
9
+ "@praxisui/table": "^9.0.4-rc.13",
10
+ "@praxisui/core": "^9.0.4-rc.13",
11
+ "@praxisui/dynamic-fields": "^9.0.4-rc.13",
12
+ "@praxisui/settings-panel": "^9.0.4-rc.13",
13
13
  "@angular/cdk": "^21.0.0",
14
14
  "@angular/forms": "^21.0.0",
15
15
  "@angular/material": "^21.0.0",
16
16
  "@angular/router": "^21.0.0",
17
- "@praxisui/ai": "^9.0.4-rc.12",
17
+ "@praxisui/ai": "^9.0.4-rc.13",
18
18
  "rxjs": "~7.8.0"
19
19
  },
20
20
  "dependencies": {
@@ -1,8 +1,8 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { NgZone, OnChanges, EventEmitter, SimpleChanges, OnInit, Provider, AfterViewInit, OnDestroy } from '@angular/core';
1
3
  import * as _praxisui_core from '@praxisui/core';
2
4
  import { RowAction, ToolbarAction, ApiEndpoint, ApiUrlEntry, DynamicFormLayoutPolicy, BackConfig, TableConfig, PraxisDataQueryContext, FormConfig, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, MaterializedResourceIdentity, LoadingState, RestApiLinks, ResourceCapabilitySnapshot, GenericCrudService, AsyncConfigStorage, ComponentDocMeta, AiCapabilityCatalog, AiCapability, AiCapabilityCategory, AiValueKind, ComponentAuthoringManifest, SettingsValueProvider } from '@praxisui/core';
3
5
  export { BackConfig } from '@praxisui/core';
4
- import * as _angular_core from '@angular/core';
5
- import { NgZone, OnChanges, EventEmitter, SimpleChanges, OnInit, Provider, AfterViewInit, OnDestroy } from '@angular/core';
6
6
  import { MatDialogConfig, MatDialogRef, MatDialog } from '@angular/material/dialog';
7
7
  export { MAT_DIALOG_DATA as DIALOG_DATA } from '@angular/material/dialog';
8
8
  import { ComponentType } from '@angular/cdk/portal';
@@ -199,6 +199,7 @@ declare class PraxisCrudComponent implements OnChanges {
199
199
  tableQueryContext: Record<string, unknown> | null;
200
200
  tableFilterCriteria: Record<string, unknown>;
201
201
  tableCrudContext?: CrudContextValue;
202
+ readonly openingActionLabel: _angular_core.WritableSignal<string | null>;
202
203
  private readonly launcher;
203
204
  private readonly http;
204
205
  private readonly destroyRef;
@@ -244,6 +245,8 @@ declare class PraxisCrudComponent implements OnChanges {
244
245
  onToolbarAction(event: CrudActionRuntimeEvent): Promise<void>;
245
246
  ngOnChanges(changes: SimpleChanges): void;
246
247
  onAction(action: string, row?: Record<string, unknown>, runtimeEvent?: CrudActionRuntimeEvent): Promise<void>;
248
+ getOpeningActionStatus(actionLabel: string): string;
249
+ private resolveOpeningActionLabel;
247
250
  private hasExplicitOpenBinding;
248
251
  getCurrentTableConfigSnapshot(): TableConfig | null;
249
252
  onTableMetadataChange(): void;
@@ -344,6 +347,7 @@ declare class CrudLauncherService {
344
347
  private readonly storage;
345
348
  private readonly global;
346
349
  private readonly operationResolver;
350
+ private dialogHostPromise?;
347
351
  private readonly drawerAdapter;
348
352
  launch(action: CrudAction, row: Record<string, unknown> | undefined, metadata: CrudMetadata, componentKeyId?: string | null, drawerCallbacks?: {
349
353
  onClose?: () => void;
@@ -357,6 +361,8 @@ declare class CrudLauncherService {
357
361
  ref?: DialogRef<any>;
358
362
  }>;
359
363
  resolveOpenMode(action: CrudAction, metadata: CrudMetadata): FormOpenMode;
364
+ private isLikelyOverlayAction;
365
+ private loadDialogHost;
360
366
  private buildRoute;
361
367
  private mapInputs;
362
368
  private resolveActionForLaunch;