@acorex/platform 21.0.0-next.71 → 21.0.0-next.72

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.
Files changed (51) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +10 -2
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-common-common-settings.provider-Bi1RYif5.mjs → acorex-platform-common-common-settings.provider-Ytey9uhY.mjs} +15 -1
  4. package/fesm2022/acorex-platform-common-common-settings.provider-Ytey9uhY.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +3792 -1679
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1112 -103
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-layout-builder.mjs +53 -170
  10. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-components.mjs +70 -46
  12. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-designer.mjs +199 -126
  14. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  15. package/fesm2022/{acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs → acorex-platform-layout-entity-attachments-page.component-B0EkdqvH.mjs} +6 -1
  16. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-B0EkdqvH.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-layout-entity.mjs +341 -418
  18. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-views.mjs +675 -301
  20. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-widget-core.mjs +115 -74
  22. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  23. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs.map → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DjpZU6gz.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-gX-3Kx9I.mjs.map} +1 -1
  27. package/fesm2022/acorex-platform-layout-widgets.mjs +184 -655
  28. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-themes-default-error-401.component-B1nsdpTY.mjs +48 -0
  30. package/fesm2022/acorex-platform-themes-default-error-401.component-B1nsdpTY.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-themes-default-error-404.component-D4UvRe8u.mjs +42 -0
  32. package/fesm2022/acorex-platform-themes-default-error-404.component-D4UvRe8u.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-themes-default.mjs +76 -32
  34. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  35. package/package.json +1 -1
  36. package/types/acorex-platform-auth.d.ts +2 -0
  37. package/types/acorex-platform-common.d.ts +891 -259
  38. package/types/acorex-platform-core.d.ts +284 -40
  39. package/types/acorex-platform-layout-builder.d.ts +10 -22
  40. package/types/acorex-platform-layout-components.d.ts +9 -7
  41. package/types/acorex-platform-layout-entity.d.ts +37 -41
  42. package/types/acorex-platform-layout-views.d.ts +125 -67
  43. package/types/acorex-platform-layout-widget-core.d.ts +53 -61
  44. package/types/acorex-platform-layout-widgets.d.ts +33 -20
  45. package/types/acorex-platform-themes-default.d.ts +14 -4
  46. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +0 -1
  47. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs.map +0 -1
  48. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs +0 -31
  49. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +0 -1
  50. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs +0 -25
  51. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Type, InjectionToken, OnInit, ViewContainerRef, ModuleWithProviders, ElementRef, EventEmitter, OnChanges, Renderer2, SimpleChanges, OnDestroy, Injector, PipeTransform, Provider } from '@angular/core';
2
+ import { Type, InjectionToken, OnInit, ViewContainerRef, ModuleWithProviders, ElementRef, EventEmitter, OnChanges, Renderer2, SimpleChanges, OnDestroy, DestroyRef, Injector, PipeTransform, Provider } from '@angular/core';
3
3
  import { AXStyleColorType, AXDataSource, AXDataSourceSortOption, AXDataSourceFilterOption, AXStyleLookType, AXDataSourceQuery, AXDataSourceCallbackResult } from '@acorex/cdk/common';
4
4
  import { AXMultiLanguageString } from '@acorex/core/translation';
5
5
  import * as _ngrx_signals from '@ngrx/signals';
@@ -1193,6 +1193,87 @@ interface AXPFilterQuery extends Pick<AXPFilterDefinition, 'field' | 'value' | '
1193
1193
  displayText?: string;
1194
1194
  }
1195
1195
 
1196
+ /**
1197
+ * Normalized keyboard chord (e.g. `ctrl+f`, `arrowleft`, `f1`).
1198
+ * Modifiers and key are joined with `+`.
1199
+ */
1200
+ type AXPKeyboardShortcutChord = string;
1201
+ /** Priority tier — higher values win when multiple bindings match. */
1202
+ declare enum AXPKeyboardShortcutPriority {
1203
+ Global = 0,
1204
+ Page = 10,
1205
+ Panel = 20,
1206
+ Modal = 100
1207
+ }
1208
+ /**
1209
+ * How horizontal directional keys behave in RTL locale profiles (`activeProfile().i18nMeta?.rtl`).
1210
+ * - `physical`: arrow left always means left (grid navigation, etc.).
1211
+ * - `semantic`: arrows and `[` / `]` mirror so next/previous follow reading direction.
1212
+ */
1213
+ type AXPKeyboardShortcutDirectionBehavior = 'physical' | 'semantic';
1214
+ interface AXPKeyboardShortcutBinding {
1215
+ /**
1216
+ * One or more key chords that trigger this action.
1217
+ * Example: `['arrowleft', 'pageup']` or `['ctrl+f']`.
1218
+ */
1219
+ keys: AXPKeyboardShortcutChord[];
1220
+ /** i18n key (e.g. `@general:...`) or plain label for the help dialog. */
1221
+ title: string;
1222
+ /** Optional group label (i18n key or plain) for help dialog grouping. */
1223
+ group?: string;
1224
+ /** When true, fires even if focus is inside an editable field. Default false. */
1225
+ allowInEditableFields?: boolean;
1226
+ /** Optional runtime guard — binding is ignored when this returns false. */
1227
+ when?: () => boolean;
1228
+ /**
1229
+ * RTL handling for horizontal direction keys (`←`/`→`, `[`/`]`).
1230
+ * Omitted = auto (`semantic` for direction keys, `physical` otherwise). Set `physical` to opt out.
1231
+ */
1232
+ directionBehavior?: AXPKeyboardShortcutDirectionBehavior;
1233
+ handler: (event: KeyboardEvent) => void | Promise<void>;
1234
+ }
1235
+ /**
1236
+ * Declarative shortcut for menus, action items, and other config-driven bindings.
1237
+ * Use a chord string for defaults, or an object to override binding options (e.g. `allowInEditableFields`).
1238
+ */
1239
+ type AXPKeyboardShortcutConfig = Pick<AXPKeyboardShortcutBinding, 'allowInEditableFields' | 'when' | 'directionBehavior'> & {
1240
+ keys: AXPKeyboardShortcutChord | readonly AXPKeyboardShortcutChord[];
1241
+ };
1242
+ type AXPKeyboardShortcut = AXPKeyboardShortcutChord | AXPKeyboardShortcutConfig;
1243
+ /** Normalized declarative shortcut used when registering keyboard bindings. */
1244
+ interface AXPResolvedKeyboardShortcut {
1245
+ keys: AXPKeyboardShortcutChord[];
1246
+ allowInEditableFields?: boolean;
1247
+ when?: () => boolean;
1248
+ directionBehavior?: AXPKeyboardShortcutDirectionBehavior;
1249
+ }
1250
+ interface AXPKeyboardShortcutRegistration {
1251
+ /** Stable id for this registration scope (e.g. `task-board-navigator`). */
1252
+ id: string;
1253
+ /** Higher priority bindings win on conflict. */
1254
+ priority?: AXPKeyboardShortcutPriority | number;
1255
+ /** Scope label shown in the help dialog (i18n key or plain). */
1256
+ scope?: string;
1257
+ /** Default group for bindings without their own `group`. */
1258
+ group?: string;
1259
+ /** Optional runtime guard — registration is ignored when this returns false. */
1260
+ when?: () => boolean;
1261
+ shortcuts: AXPKeyboardShortcutBinding[];
1262
+ }
1263
+ /** Resolved entry for help UI. */
1264
+ interface AXPKeyboardShortcutHelpEntry {
1265
+ registrationId: string;
1266
+ bindingTitle: string;
1267
+ /** Raw chords for `ax-kbd-item` rendering (canonical registration). */
1268
+ chords: AXPKeyboardShortcutChord[];
1269
+ /** Chords adjusted for RTL display when `directionBehavior` is `semantic`. */
1270
+ displayChords: AXPKeyboardShortcutChord[];
1271
+ displayKeys: string;
1272
+ scope?: string;
1273
+ group?: string;
1274
+ priority: number;
1275
+ }
1276
+
1196
1277
  type AXPActionMenuItem = {
1197
1278
  name?: string;
1198
1279
  title: AXPMultiLanguageString;
@@ -1206,6 +1287,11 @@ type AXPActionMenuItem = {
1206
1287
  disabled?: boolean | string;
1207
1288
  visible?: boolean | string;
1208
1289
  policy?: string;
1290
+ /**
1291
+ * Keyboard shortcuts for this action.
1292
+ * Use a chord string or `{ keys, allowInEditableFields, ... }`. Pass `[]` to disable.
1293
+ */
1294
+ shortcuts?: AXPKeyboardShortcut[];
1209
1295
  };
1210
1296
  type AXPBackButton = {
1211
1297
  title: AXPMultiLanguageString;
@@ -1954,8 +2040,8 @@ interface AXPContextUpdateOptions {
1954
2040
  origin?: AXPContextUpdateOrigin;
1955
2041
  }
1956
2042
  interface AXPContextPatchOptions {
1957
- skipDirtyTracking?: boolean;
1958
- origin?: AXPContextUpdateOrigin;
2043
+ /** When true, updates the saved snapshot together with live data. */
2044
+ updateSaved?: boolean;
1959
2045
  }
1960
2046
  type AXPContextData = {
1961
2047
  [key: string]: any;
@@ -1967,41 +2053,42 @@ declare class AXPContextChangeEvent {
1967
2053
  state: AXPContextState;
1968
2054
  data: any;
1969
2055
  origin?: AXPContextUpdateOrigin;
1970
- /** Aggregated form dirty flag (user context paths + composite widget dirty). */
2056
+ /** Aggregated form dirty flag (context snapshot + composite widget dirty). */
1971
2057
  isFormDirty?: boolean;
1972
2058
  }
1973
2059
  declare const AXPContextStore: i0.Type<{
1974
2060
  data: i0.Signal<AXPContextData>;
1975
2061
  state: i0.Signal<AXPContextState>;
1976
- initialSnapshot: i0.Signal<{}>;
1977
- previousSnapshot: i0.Signal<{}>;
1978
- userDirtyPaths: i0.Signal<string[]>;
2062
+ savedSnapshot: i0.Signal<AXPContextData>;
2063
+ previousSnapshot: i0.Signal<AXPContextData>;
1979
2064
  lastChange: _ngrx_signals.DeepSignal<AXPContextChangeEvent>;
1980
2065
  isChanged: i0.Signal<boolean>;
1981
2066
  isReset: i0.Signal<boolean>;
1982
2067
  isInitiated: i0.Signal<boolean>;
1983
2068
  isEmpty: i0.Signal<boolean>;
2069
+ isSavedCommitted: i0.Signal<boolean>;
1984
2070
  isDirty: i0.Signal<boolean>;
1985
- isUserDirty: i0.Signal<boolean>;
1986
2071
  snapshot: i0.Signal<AXPContextData>;
1987
- initial: i0.Signal<{}>;
1988
- previous: i0.Signal<{}>;
2072
+ saved: i0.Signal<AXPContextData>;
2073
+ initial: i0.Signal<AXPContextData>;
2074
+ previous: i0.Signal<AXPContextData>;
1989
2075
  changeEvent: i0.Signal<AXPContextChangeEvent>;
1990
2076
  update: (path: string, value: any, options?: AXPContextUpdateOptions) => void;
1991
2077
  applyObjectPaths: (obj: Record<string, unknown>, options?: AXPContextUpdateOptions, prefix?: string) => void;
1992
- patch: (context: Record<string, any>, second?: boolean | AXPContextPatchOptions) => void;
2078
+ patch: (context: Record<string, any>, options?: AXPContextPatchOptions) => void;
2079
+ revertToSaved: () => void;
1993
2080
  reset: () => void;
1994
2081
  set: (initialData: any) => void;
1995
2082
  getValue: (path: string) => any;
2083
+ getSavedValue: (path: string) => any;
1996
2084
  hasValue: (path: string) => boolean;
1997
- commitBaseline: () => void;
1998
- clearUserDirtyPaths: () => void;
2085
+ commitSaved: () => void;
2086
+ applyParentBind: (merged: AXPContextData) => void;
1999
2087
  } & _ngrx_signals.StateSource<{
2000
2088
  data: AXPContextData;
2001
2089
  state: AXPContextState;
2002
- initialSnapshot: {};
2003
- previousSnapshot: {};
2004
- userDirtyPaths: string[];
2090
+ savedSnapshot: AXPContextData;
2091
+ previousSnapshot: AXPContextData;
2005
2092
  lastChange: AXPContextChangeEvent;
2006
2093
  }>>;
2007
2094
 
@@ -2035,35 +2122,36 @@ declare class AXPComponentSlotDirective implements OnInit {
2035
2122
  contextStore: {
2036
2123
  data: i0.Signal<AXPContextData>;
2037
2124
  state: i0.Signal<_acorex_platform_core.AXPContextState>;
2038
- initialSnapshot: i0.Signal<{}>;
2039
- previousSnapshot: i0.Signal<{}>;
2040
- userDirtyPaths: i0.Signal<string[]>;
2125
+ savedSnapshot: i0.Signal<AXPContextData>;
2126
+ previousSnapshot: i0.Signal<AXPContextData>;
2041
2127
  lastChange: _ngrx_signals.DeepSignal<_acorex_platform_core.AXPContextChangeEvent>;
2042
2128
  isChanged: i0.Signal<boolean>;
2043
2129
  isReset: i0.Signal<boolean>;
2044
2130
  isInitiated: i0.Signal<boolean>;
2045
2131
  isEmpty: i0.Signal<boolean>;
2132
+ isSavedCommitted: i0.Signal<boolean>;
2046
2133
  isDirty: i0.Signal<boolean>;
2047
- isUserDirty: i0.Signal<boolean>;
2048
2134
  snapshot: i0.Signal<AXPContextData>;
2049
- initial: i0.Signal<{}>;
2050
- previous: i0.Signal<{}>;
2135
+ saved: i0.Signal<AXPContextData>;
2136
+ initial: i0.Signal<AXPContextData>;
2137
+ previous: i0.Signal<AXPContextData>;
2051
2138
  changeEvent: i0.Signal<_acorex_platform_core.AXPContextChangeEvent>;
2052
2139
  update: (path: string, value: any, options?: _acorex_platform_core.AXPContextUpdateOptions) => void;
2053
2140
  applyObjectPaths: (obj: Record<string, unknown>, options?: _acorex_platform_core.AXPContextUpdateOptions, prefix?: string) => void;
2054
- patch: (context: Record<string, any>, second?: boolean | _acorex_platform_core.AXPContextPatchOptions) => void;
2141
+ patch: (context: Record<string, any>, options?: _acorex_platform_core.AXPContextPatchOptions) => void;
2142
+ revertToSaved: () => void;
2055
2143
  reset: () => void;
2056
2144
  set: (initialData: any) => void;
2057
2145
  getValue: (path: string) => any;
2146
+ getSavedValue: (path: string) => any;
2058
2147
  hasValue: (path: string) => boolean;
2059
- commitBaseline: () => void;
2060
- clearUserDirtyPaths: () => void;
2148
+ commitSaved: () => void;
2149
+ applyParentBind: (merged: AXPContextData) => void;
2061
2150
  } & _ngrx_signals.StateSource<{
2062
2151
  data: AXPContextData;
2063
2152
  state: _acorex_platform_core.AXPContextState;
2064
- initialSnapshot: {};
2065
- previousSnapshot: {};
2066
- userDirtyPaths: string[];
2153
+ savedSnapshot: AXPContextData;
2154
+ previousSnapshot: AXPContextData;
2067
2155
  lastChange: _acorex_platform_core.AXPContextChangeEvent;
2068
2156
  }>;
2069
2157
  isEmpty: i0.Signal<boolean>;
@@ -2402,6 +2490,142 @@ declare class AXPHookService {
2402
2490
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPHookService>;
2403
2491
  }
2404
2492
 
2493
+ /** Acorex overlay root (modal shell, popup, dialog). */
2494
+ declare const AX_OVERLAY_CONTAINER_SELECTOR = ".ax-overlay-container";
2495
+ /** Anchored widget panel inside an overlay (select, date picker, dropdown). */
2496
+ declare const AX_OVERLAY_PANE_SELECTOR = ".ax-overlay-pane";
2497
+ /**
2498
+ * True when a visible overlay layer is foreground (modal, popup, widget popover/picker).
2499
+ */
2500
+ declare function hasForegroundOverlayLayer(document: Document): boolean;
2501
+ /**
2502
+ * Returns visible anchored overlay panes (widget popovers/pickers).
2503
+ */
2504
+ declare function getVisibleAnchoredOverlayPanes(document: Document): HTMLElement[];
2505
+ /**
2506
+ * Visible anchored panes that are not contained by `excludeContainer` (e.g. dialog shell).
2507
+ */
2508
+ declare function getNestedVisibleOverlayPanes(document: Document, excludeContainer: HTMLElement | null): HTMLElement[];
2509
+ /**
2510
+ * Collects visible overlay containers in stacking order (later / higher z-index wins).
2511
+ */
2512
+ declare function getVisibleOverlayContainers(document: Document): HTMLElement[];
2513
+ /** Topmost visible overlay container, if any. */
2514
+ declare function getTopVisibleOverlayContainer(document: Document): HTMLElement | null;
2515
+ /** Nearest overlay container ancestor of `element`. */
2516
+ declare function findOverlayContainerAncestor(element: HTMLElement): HTMLElement | null;
2517
+ /**
2518
+ * Returns true when the overlay element is rendered and visible in the viewport.
2519
+ */
2520
+ declare function isVisibleOverlayElement(element: Element): boolean;
2521
+
2522
+ interface AXPKeyboardShortcutFormatOptions {
2523
+ directionBehavior?: AXPKeyboardShortcutDirectionBehavior;
2524
+ /** From `AXLocaleService.activeProfile().i18nMeta?.rtl`. */
2525
+ isRtl?: boolean;
2526
+ /** Chord was already passed through `resolveDisplayShortcutChord` (e.g. help `displayChords`). */
2527
+ skipDirectionResolve?: boolean;
2528
+ }
2529
+ /** Maps a horizontal direction key to its RTL semantic counterpart. */
2530
+ declare function mirrorHorizontalDirectionalKey(key: string): string;
2531
+ /** True when the chord's primary key is a horizontal direction key (`←`/`→`, `[`/`]`). */
2532
+ declare function isHorizontalDirectionalShortcutKey(key: string): boolean;
2533
+ /**
2534
+ * Resolves direction behavior for a chord.
2535
+ * Horizontal direction keys default to `semantic`; others default to `physical`.
2536
+ * An explicit binding value always wins.
2537
+ */
2538
+ declare function resolveEffectiveDirectionBehavior(chord: AXPKeyboardShortcutChord, explicit?: AXPKeyboardShortcutDirectionBehavior): AXPKeyboardShortcutDirectionBehavior;
2539
+ /** Resolves the key the user presses for a semantically registered chord in RTL. */
2540
+ declare function resolveSemanticDirectionalKey(storedKey: string, rtl: boolean): string;
2541
+ /** Chord string with directional key mirrored for RTL display/matching when semantic. */
2542
+ declare function resolveDisplayShortcutChord(chord: AXPKeyboardShortcutChord, isRtl: boolean, explicitDirectionBehavior?: AXPKeyboardShortcutDirectionBehavior): string;
2543
+ interface ParsedShortcut {
2544
+ ctrl: boolean;
2545
+ shift: boolean;
2546
+ alt: boolean;
2547
+ meta: boolean;
2548
+ key: string;
2549
+ }
2550
+ /**
2551
+ * Parses a shortcut chord such as `Enter`, `Escape`, or `ctrl+shift+s`.
2552
+ */
2553
+ declare function parseKeyboardShortcutChord(chord: AXPKeyboardShortcutChord): ParsedShortcut;
2554
+ /**
2555
+ * Returns true when the keyboard event matches the given chord.
2556
+ * On macOS, `ctrl+*` chords also match `meta+*` for common platform shortcuts.
2557
+ */
2558
+ declare function matchesKeyboardShortcutChord(event: KeyboardEvent, chord: AXPKeyboardShortcutChord, options?: AXPKeyboardShortcutFormatOptions): boolean;
2559
+ /**
2560
+ * Formats one chord for UI display (OS-aware modifier symbols).
2561
+ */
2562
+ declare function formatKeyboardShortcutChord(chord: AXPKeyboardShortcutChord, options?: AXPKeyboardShortcutFormatOptions): string;
2563
+ /**
2564
+ * Formats multiple chords as a single display string (e.g. `← / PgUp`).
2565
+ */
2566
+ declare function formatKeyboardShortcutChords(chords: readonly AXPKeyboardShortcutChord[], options?: AXPKeyboardShortcutFormatOptions): string;
2567
+ /** Maps a chord to `ax-kbd-item` key parts (modifiers + display symbols). */
2568
+ declare function chordToKbdItemKeys(chord: AXPKeyboardShortcutChord, options?: AXPKeyboardShortcutFormatOptions): string[];
2569
+ /**
2570
+ * When focus is in a native edit control, avoid stealing plain key shortcuts.
2571
+ */
2572
+ declare function isKeyboardTargetInsideEditableField(target: EventTarget | null): boolean;
2573
+ /**
2574
+ * Returns true when Esc should close an open widget overlay first (select, date picker, popover, modal).
2575
+ * Used by the global shortcut registry so page-level Esc bindings do not swallow overlay dismiss.
2576
+ */
2577
+ declare function shouldDeferEscapeToOpenOverlay(document: Document): boolean;
2578
+ declare function isMacPlatform(): boolean;
2579
+
2580
+ /**
2581
+ * Normalizes a declarative shortcut (`'ctrl+s'` or `{ keys: 'home', allowInEditableFields: false }`).
2582
+ */
2583
+ declare function normalizeKeyboardShortcut(shortcut: AXPKeyboardShortcut): AXPResolvedKeyboardShortcut | undefined;
2584
+ /**
2585
+ * Normalizes an array of declarative shortcuts. Empty or invalid entries are skipped.
2586
+ */
2587
+ declare function normalizeKeyboardShortcuts(shortcuts?: readonly AXPKeyboardShortcut[]): AXPResolvedKeyboardShortcut[];
2588
+ /** Returns the first chord from declarative shortcuts (for UI hints such as `ax-kbd`). */
2589
+ declare function getPrimaryKeyboardShortcutChord(shortcuts?: readonly AXPKeyboardShortcut[]): AXPKeyboardShortcutChord | undefined;
2590
+
2591
+ interface AXPKeyboardShortcutRegisterOptions extends AXPKeyboardShortcutRegistration {
2592
+ /** Auto-unregister when the owner is destroyed. */
2593
+ owner: DestroyRef;
2594
+ /** When set, shortcuts are active only while the element is connected to the document. */
2595
+ elementRef?: ElementRef<HTMLElement>;
2596
+ }
2597
+ declare class AXPKeyboardShortcutRegistry {
2598
+ private readonly document;
2599
+ private readonly localeService;
2600
+ private readonly activeProfile;
2601
+ private readonly registrations;
2602
+ private helpDialogHandler;
2603
+ private listenerAttached;
2604
+ /** Active shortcut entries for the help dialog. */
2605
+ readonly helpEntries: i0.Signal<AXPKeyboardShortcutHelpEntry[]>;
2606
+ /**
2607
+ * Registers a scope of shortcuts. Unregisters automatically when `owner` is destroyed.
2608
+ */
2609
+ register(options: AXPKeyboardShortcutRegisterOptions): void;
2610
+ /**
2611
+ * Wires the F1 help dialog opener (provided by platform/common).
2612
+ */
2613
+ setHelpDialogHandler(handler: () => void | Promise<void>): void;
2614
+ /** OS-aware display string for UI hints. */
2615
+ formatDisplayKeys(chords: readonly AXPKeyboardShortcutChord[]): string;
2616
+ private ensureHelpShortcutRegistered;
2617
+ private createRegistrationId;
2618
+ private unregister;
2619
+ private ensureListener;
2620
+ private readonly onDocumentKeyDown;
2621
+ private resolveActiveCandidates;
2622
+ private isRegistrationActive;
2623
+ private isRtlProfile;
2624
+ private buildHelpEntries;
2625
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPKeyboardShortcutRegistry, never>;
2626
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXPKeyboardShortcutRegistry>;
2627
+ }
2628
+
2405
2629
  /**
2406
2630
  * Feature definition in module manifest.
2407
2631
  * Defines available features with default values.
@@ -2709,6 +2933,16 @@ declare function sortByMultiLanguageString<T>(items: readonly T[], getValue: (it
2709
2933
  */
2710
2934
  declare function searchInMultiLanguageString(value: AXPMultiLanguageString | null | undefined, query: string, locale: string): boolean;
2711
2935
 
2936
+ /** Per-locale string map (`{ 'en-US': '...', 'fa-IR': '...' }`). */
2937
+ declare function isLocaleStringMap(value: unknown): value is Record<string, string>;
2938
+ /**
2939
+ * Use locale-map read/write when the option is on or live/saved data is already a map.
2940
+ * Auto-enables when API data is a map but the editor option was left off.
2941
+ */
2942
+ declare function shouldUseLocaleMapShape(localeMapOptionEnabled: boolean, current: unknown, saved: unknown): boolean;
2943
+ /** Updates one locale entry; preserves sibling locales from current or saved map. */
2944
+ declare function buildLocaleTextMapValue(current: unknown, saved: unknown, lang: string, input: string): Record<string, string> | null;
2945
+
2712
2946
  /**
2713
2947
  * Represents a tag with text, color, and metadata
2714
2948
  */
@@ -2909,16 +3143,6 @@ declare class AXPDeviceService {
2909
3143
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPDeviceService>;
2910
3144
  }
2911
3145
 
2912
- /**
2913
- * Returns whether `current` differs from the saved/clean `baseline` snapshot.
2914
- * Used by entity details pages, layout-builder dialogs, and {@link AXPContextStore}.
2915
- */
2916
- declare function isFormContextDirty(current: Record<string, unknown>, baseline: Record<string, unknown>): boolean;
2917
- /**
2918
- * Clones a context object for use as a dirty-tracking baseline.
2919
- */
2920
- declare function captureFormContextBaseline(context: Record<string, unknown>): Record<string, unknown>;
2921
-
2922
3146
  /**
2923
3147
  * Service for applying and resetting text highlighting within specified HTML elements.
2924
3148
  */
@@ -2982,6 +3206,26 @@ declare function getEnumValues(enumType: any): {
2982
3206
  id: string;
2983
3207
  title: string;
2984
3208
  }[];
3209
+ /**
3210
+ * Semantic equality for lookup/select values when restoring saved baseline shape.
3211
+ * Compares by selection identity (id), including two full items with the same id.
3212
+ */
3213
+ declare function isSelectionValueEqual(a: unknown, b: unknown): boolean;
3214
+ /**
3215
+ * Semantic equality for dirty-state and baseline checks.
3216
+ * Prefer over lodash `isEqual` when comparing user-edited form/context data to a saved baseline.
3217
+ *
3218
+ * Arrays: `[]`, `null`, and all-empty lists are equivalent; non-empty arrays compare as multisets (order ignored).
3219
+ */
3220
+ declare function isFormValueEqual(a: unknown, b: unknown): boolean;
3221
+ /**
3222
+ * Returns whether `current` differs from the saved/clean `baseline` snapshot.
3223
+ */
3224
+ declare function isFormContextDirty(current: Record<string, unknown>, baseline: Record<string, unknown>): boolean;
3225
+ /**
3226
+ * Clones a context object for use as a dirty-tracking baseline.
3227
+ */
3228
+ declare function captureFormContextBaseline(context: Record<string, unknown>): Record<string, unknown>;
2985
3229
 
2986
3230
  /**
2987
3231
  * Creates a provider instance within an injection context.
@@ -3053,5 +3297,5 @@ declare function containsHtmlMarkup(value: string | null | undefined): boolean;
3053
3297
  */
3054
3298
  declare function generateKebabCase(title: string): string;
3055
3299
 
3056
- export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPCatalogScopeDefinitionProviderService, AXPCatalogScopeDefinitionsDataSourceDefinition, AXPColorPaletteProvider, AXPColorPaletteService, AXPColumnWidthService, AXPComponentLogoConfig, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextDefinitionProviderService, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExportTemplateToken, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPImageUrlLogoConfig, AXPModuleManifestModule, AXPModuleManifestRegistry, AXPModuleManifestsDataSourceDefinition, AXPPlatformScope, AXPScreenSize, AXPSystemActionType, AXPSystemActions, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_CATALOG_SCOPE_DEFINITION_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_COLUMN_WIDTH_PROVIDER, AXP_CONTEXT_DEFINITION_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER, AXP_SESSION_SERVICE, AXP_TAG_PROVIDER, MODULE_MANIFESTS_DATASOURCE_NAME, PLATFORM_CATALOG_SCOPES_DATASOURCE_NAME, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, captureFormContextBaseline, cleanDeep, coerceUnknownToBoolean, coerceUnknownToDate, coerceUnknownToFiniteNumber, coerceUnknownToTrimmedString, compareMultiLanguageStrings, containsHtmlMarkup, createProviderWithInjectionContext, defaultColumnWidthProvider, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getSmart, getSystemActions, isFormContextDirty, normalizeDefinitionCategories, objectKeyValueTransforms, provideLazyProvider, resolveActionLook, resolvePlatformScopeKey, resolvePlatformScopeName, searchInMultiLanguageString, setSmart, sortByMultiLanguageString, unwrapValueProperty };
3057
- export type { AXPActionMenuItem, AXPActivityLog, AXPActivityLogChange, AXPApplicationUserReference, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPCatalogScopeDefinition, AXPCatalogScopeDefinitionProvider, AXPCategorizedEntity, AXPCategorizedEntityDto, AXPCategoryEntity, AXPCategoryEntityWithItems, AXPCategoryListItem, AXPColorPalette, AXPColorPaletteFilterOptions, AXPColumnQuery, AXPColumnWidthMatcher, AXPColumnWidthProvider, AXPCommandMessage, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPContent, AXPContentDirection, AXPContentType, AXPContextData, AXPContextDefinition, AXPContextDefinitionAiHints, AXPContextDefinitionProvider, AXPContextPatchOptions, AXPContextState, AXPContextUpdateOptions, AXPContextUpdateOrigin, AXPDataSource, AXPDataSourceArray, AXPDataSourceDataFieldDefinition, AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, AXPDataSourceSample, AXPDataSourceType, AXPDataSourceValue, AXPDataType, AXPDefinitionCategory, AXPDistributedEventListenerProvider, AXPDistributedEventListenerProviderToken, AXPEntityOp, AXPEntityReference, AXPEqualValidationRule, AXPExecuteCommand, AXPExecuteCommandResult, AXPExportCsvOptions, AXPExportExcelOptions, AXPExportOptions, AXPExportPdfOptions, AXPExportPrintOptions, AXPExpression, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviders, AXPFeatureDefinition, AXPFeatureDefinitionProvider, AXPFeatureName, AXPFileListItem, AXPFileSource, AXPFileStatus, AXPFilterClause, AXPFilterDefinition, AXPFilterQuery, AXPFilterTriggerDefinition, AXPFlowDirection, AXPGridLayoutOptions, AXPGridPlacement, AXPISessionService, AXPLazyDataSource, AXPLogoConfig, AXPMaxLengthValidationRule, AXPMaybePromise, AXPMetaData, AXPMiddlewareErrorResponse, AXPMinLengthValidationRule, AXPModuleFeatureDefinition, AXPModuleFeatureDefinitionWithKey, AXPModuleManifest, AXPMultiLanguageString, AXPNavigateActionCommand, AXPNavigateActionOptions, AXPOptionsData, AXPPageStatus, AXPPagedListResult, AXPPartialNested, AXPPlatformScopeKey, AXPProperty, AXPPropertyGroup, AXPPropertyInterface, AXPQueryFetchResult, AXPQueryRequest, AXPReqexValidationRule, AXPRequiredValidationRule, AXPSortDefinition, AXPSortQuery, AXPStartUpTask, AXPStringValidationRules, AXPSystemAction, AXPTag, AXPTagFilterOptions, AXPUserReference, AXPValidationRule, AXPValidationRules, AXPValueTransformerFunction, AXPValueTransformerFunctions, AXPValueUnit, AXPValueUnits, AXPViewBlockDefinition, AXPViewDefinition, AXPViewFieldDefinition, AXPViewQuery, AXPWidgetTrigger, AXPWidgetTriggers, ColumnNameMatcher, ColumnWidthValue, IColumnWithWidth, WidgetTypeMatcher };
3300
+ export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPCatalogScopeDefinitionProviderService, AXPCatalogScopeDefinitionsDataSourceDefinition, AXPColorPaletteProvider, AXPColorPaletteService, AXPColumnWidthService, AXPComponentLogoConfig, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextDefinitionProviderService, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExportTemplateToken, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPImageUrlLogoConfig, AXPKeyboardShortcutPriority, AXPKeyboardShortcutRegistry, AXPModuleManifestModule, AXPModuleManifestRegistry, AXPModuleManifestsDataSourceDefinition, AXPPlatformScope, AXPScreenSize, AXPSystemActionType, AXPSystemActions, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_CATALOG_SCOPE_DEFINITION_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_COLUMN_WIDTH_PROVIDER, AXP_CONTEXT_DEFINITION_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER, AXP_SESSION_SERVICE, AXP_TAG_PROVIDER, AX_OVERLAY_CONTAINER_SELECTOR, AX_OVERLAY_PANE_SELECTOR, MODULE_MANIFESTS_DATASOURCE_NAME, PLATFORM_CATALOG_SCOPES_DATASOURCE_NAME, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, buildLocaleTextMapValue, captureFormContextBaseline, chordToKbdItemKeys, cleanDeep, coerceUnknownToBoolean, coerceUnknownToDate, coerceUnknownToFiniteNumber, coerceUnknownToTrimmedString, compareMultiLanguageStrings, containsHtmlMarkup, createProviderWithInjectionContext, defaultColumnWidthProvider, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, findOverlayContainerAncestor, formatKeyboardShortcutChord, formatKeyboardShortcutChords, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getNestedVisibleOverlayPanes, getPrimaryKeyboardShortcutChord, getSmart, getSystemActions, getTopVisibleOverlayContainer, getVisibleAnchoredOverlayPanes, getVisibleOverlayContainers, hasForegroundOverlayLayer, isFormContextDirty, isFormValueEqual, isHorizontalDirectionalShortcutKey, isKeyboardTargetInsideEditableField, isLocaleStringMap, isMacPlatform, isSelectionValueEqual, isVisibleOverlayElement, matchesKeyboardShortcutChord, mirrorHorizontalDirectionalKey, normalizeDefinitionCategories, normalizeKeyboardShortcut, normalizeKeyboardShortcuts, objectKeyValueTransforms, parseKeyboardShortcutChord, provideLazyProvider, resolveActionLook, resolveDisplayShortcutChord, resolveEffectiveDirectionBehavior, resolvePlatformScopeKey, resolvePlatformScopeName, resolveSemanticDirectionalKey, searchInMultiLanguageString, setSmart, shouldDeferEscapeToOpenOverlay, shouldUseLocaleMapShape, sortByMultiLanguageString, unwrapValueProperty };
3301
+ export type { AXPActionMenuItem, AXPActivityLog, AXPActivityLogChange, AXPApplicationUserReference, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPCatalogScopeDefinition, AXPCatalogScopeDefinitionProvider, AXPCategorizedEntity, AXPCategorizedEntityDto, AXPCategoryEntity, AXPCategoryEntityWithItems, AXPCategoryListItem, AXPColorPalette, AXPColorPaletteFilterOptions, AXPColumnQuery, AXPColumnWidthMatcher, AXPColumnWidthProvider, AXPCommandMessage, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPContent, AXPContentDirection, AXPContentType, AXPContextData, AXPContextDefinition, AXPContextDefinitionAiHints, AXPContextDefinitionProvider, AXPContextPatchOptions, AXPContextState, AXPContextUpdateOptions, AXPContextUpdateOrigin, AXPDataSource, AXPDataSourceArray, AXPDataSourceDataFieldDefinition, AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, AXPDataSourceSample, AXPDataSourceType, AXPDataSourceValue, AXPDataType, AXPDefinitionCategory, AXPDistributedEventListenerProvider, AXPDistributedEventListenerProviderToken, AXPEntityOp, AXPEntityReference, AXPEqualValidationRule, AXPExecuteCommand, AXPExecuteCommandResult, AXPExportCsvOptions, AXPExportExcelOptions, AXPExportOptions, AXPExportPdfOptions, AXPExportPrintOptions, AXPExpression, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviders, AXPFeatureDefinition, AXPFeatureDefinitionProvider, AXPFeatureName, AXPFileListItem, AXPFileSource, AXPFileStatus, AXPFilterClause, AXPFilterDefinition, AXPFilterQuery, AXPFilterTriggerDefinition, AXPFlowDirection, AXPGridLayoutOptions, AXPGridPlacement, AXPISessionService, AXPKeyboardShortcut, AXPKeyboardShortcutBinding, AXPKeyboardShortcutChord, AXPKeyboardShortcutConfig, AXPKeyboardShortcutDirectionBehavior, AXPKeyboardShortcutFormatOptions, AXPKeyboardShortcutHelpEntry, AXPKeyboardShortcutRegisterOptions, AXPKeyboardShortcutRegistration, AXPLazyDataSource, AXPLogoConfig, AXPMaxLengthValidationRule, AXPMaybePromise, AXPMetaData, AXPMiddlewareErrorResponse, AXPMinLengthValidationRule, AXPModuleFeatureDefinition, AXPModuleFeatureDefinitionWithKey, AXPModuleManifest, AXPMultiLanguageString, AXPNavigateActionCommand, AXPNavigateActionOptions, AXPOptionsData, AXPPageStatus, AXPPagedListResult, AXPPartialNested, AXPPlatformScopeKey, AXPProperty, AXPPropertyGroup, AXPPropertyInterface, AXPQueryFetchResult, AXPQueryRequest, AXPReqexValidationRule, AXPRequiredValidationRule, AXPResolvedKeyboardShortcut, AXPSortDefinition, AXPSortQuery, AXPStartUpTask, AXPStringValidationRules, AXPSystemAction, AXPTag, AXPTagFilterOptions, AXPUserReference, AXPValidationRule, AXPValidationRules, AXPValueTransformerFunction, AXPValueTransformerFunctions, AXPValueUnit, AXPValueUnits, AXPViewBlockDefinition, AXPViewDefinition, AXPViewFieldDefinition, AXPViewQuery, AXPWidgetTrigger, AXPWidgetTriggers, ColumnNameMatcher, ColumnWidthValue, IColumnWithWidth, WidgetTypeMatcher };
@@ -7,19 +7,20 @@ import { AXPWidgetNode, AXPWidgetRenderMode, AXPWidgetContainerComponent, AXPWid
7
7
  import { AXDataSource, AXComponentClosing } from '@acorex/cdk/common';
8
8
  import { AXPopupSizeType } from '@acorex/components/popup';
9
9
  import { AXStepWizardLook } from '@acorex/components/step-wizard';
10
- import { AXPActionMenuItem, AXPMultiLanguageString, AXPMetaData, AXPGridLayoutOptions, AXPExpression, AXPValidationRules, AXPOptionsData, AXPContextChangeEvent, AXPExecuteCommandResult } from '@acorex/platform/core';
10
+ import { AXPKeyboardShortcut, AXPKeyboardShortcutChord, AXPActionMenuItem, AXPMultiLanguageString, AXPMetaData, AXPGridLayoutOptions, AXPExpression, AXPValidationRules, AXPOptionsData, AXPContextChangeEvent, AXPExecuteCommandResult } from '@acorex/platform/core';
11
11
  import { AXBasePageComponent } from '@acorex/components/page';
12
12
  import { AXPCommand } from '@acorex/platform/runtime';
13
13
 
14
- type AXPDialogActionShortcut = string;
14
+ /** Resolved chord string used by dialog footer shortcut matching. */
15
+ type AXPDialogActionShortcut = AXPKeyboardShortcutChord;
15
16
  declare const DEFAULT_CANCEL_DIALOG_ACTION_SHORTCUTS: readonly AXPDialogActionShortcut[];
16
17
  declare const DEFAULT_SUBMIT_DIALOG_ACTION_SHORTCUTS: readonly AXPDialogActionShortcut[];
17
18
  interface AXPDialogActionOptions {
18
19
  /**
19
- * Additional keyboard shortcuts for this action (e.g. `'ctrl+s'`).
20
+ * Additional keyboard shortcuts for this action (e.g. `'ctrl+s'` or `{ keys: 'ctrl+s' }`).
20
21
  * Merged with built-in defaults for `cancel` / `submit`. Pass `[]` to disable all shortcuts.
21
22
  */
22
- shortcuts?: AXPDialogActionShortcut[];
23
+ shortcuts?: AXPKeyboardShortcut[];
23
24
  }
24
25
 
25
26
  /**
@@ -461,10 +462,9 @@ type WidgetBuilderState = AXPWidgetNode & {
461
462
  type FormFieldBuilderState = AXPWidgetNode & {
462
463
  layout?: AXPGridLayoutOptions;
463
464
  };
464
- /** Dialog footer action item; extends menu actions with placement and keyboard shortcuts. */
465
+ /** Dialog footer action item; extends menu actions with placement. */
465
466
  type AXPDialogActionMenuItem = AXPActionMenuItem & {
466
467
  position?: 'prefix' | 'suffix';
467
- shortcuts?: AXPDialogActionShortcut[];
468
468
  };
469
469
  type DialogBuilderState = AXPWidgetNode & {
470
470
  layout?: AXPGridLayoutOptions;
@@ -943,7 +943,7 @@ declare class AXPDialogRendererComponent extends AXBasePageComponent implements
943
943
  private expressionEvaluator;
944
944
  private readonly commandService;
945
945
  private readonly hookService;
946
- private readonly dialogService;
946
+ private readonly unsavedChangesConfirm;
947
947
  private readonly overlayService;
948
948
  private readonly translationService;
949
949
  private readonly document;
@@ -951,18 +951,12 @@ declare class AXPDialogRendererComponent extends AXBasePageComponent implements
951
951
  private dialogResult?;
952
952
  /** Ensures `show()` resolves once when the dialog closes (footer action or header close). */
953
953
  private callbackInvoked;
954
- /** Baseline snapshot for dirty detection (captured once after init settles). */
955
- private dirtyBaseline?;
956
- /** True after the post-init baseline snapshot has been captured. */
957
- private dirtyBaselineCaptured;
958
- private dirtyBaselineIdleTimer?;
959
954
  /** Callback payload applied when a dismiss is allowed in {@link onClosing}. */
960
955
  private pendingDismissResolvePayload?;
961
956
  /** Skips dirty confirmation on the next {@link onClosing} (successful submit / programmatic close). */
962
957
  private skipNextOnClosingDirtyCheck;
963
- /** Prevents concurrent dismiss paths from opening multiple unsaved-changes confirms. */
964
- private dismissConfirmPromise?;
965
- private dirtyBaselineFallbackTimer?;
958
+ /** Blocks re-entrant {@link onClosing} while the first close gate is still resolving. */
959
+ private closeGateInProgress;
966
960
  private readonly destroyRef;
967
961
  context: _angular_core.WritableSignal<any>;
968
962
  callBack: (result: unknown) => void;
@@ -991,12 +985,7 @@ declare class AXPDialogRendererComponent extends AXBasePageComponent implements
991
985
  private requestDismiss;
992
986
  /** Invokes `show()` callback with the pending payload or a default cancel {@link AXPDialogRef}. */
993
987
  private completeDismissResolve;
994
- private getWidgetContextStore;
995
- private scheduleDirtyBaselineCapture;
996
- /**
997
- * Captures a dialog-local baseline once after widget init/normalization goes idle.
998
- */
999
- private captureDirtyBaselineIfNeeded;
988
+ private getWidgetContainer;
1000
989
  private layoutRenderer;
1001
990
  private debounceTimer?;
1002
991
  handleContextChanged(event: any): void;
@@ -1009,7 +998,6 @@ declare class AXPDialogRendererComponent extends AXBasePageComponent implements
1009
998
  executeAction(action: AXPWidgetCoreElementAction): Promise<void>;
1010
999
  private isDialogDirty;
1011
1000
  private confirmDismissIfDirty;
1012
- private promptUnsavedChangesConfirm;
1013
1001
  /** Whether the layout form should be validated before running this footer command. */
1014
1002
  private shouldValidateBeforeAction;
1015
1003
  /** True when a footer handler or command result asks to leave the dialog open (`keepDialogOpen` on the result or `result.data`). */
@@ -937,6 +937,11 @@ declare class AXPQueryFiltersComponent {
937
937
  private filterOperatorMiddleware;
938
938
  private settingsService;
939
939
  private readonly expressionEvaluator;
940
+ private readonly shortcutRegistry;
941
+ private readonly destroyRef;
942
+ private readonly elementRef;
943
+ protected readonly filterFocusShortcutKeys: string[];
944
+ constructor();
940
945
  filtersDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
941
946
  initialFilters: _angular_core.InputSignal<AXPFilterQuery[]>;
942
947
  onFiltersChanged: _angular_core.OutputEmitterRef<AXPFilterQuery[]>;
@@ -992,7 +997,6 @@ declare class AXPQueryFiltersComponent {
992
997
  private getFilterEventScope;
993
998
  private getFilterWidgetScopeForDefinition;
994
999
  private removeFilterFieldByName;
995
- protected handleKeyboardEvent(event: KeyboardEvent): Promise<void>;
996
1000
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryFiltersComponent, never>;
997
1001
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryFiltersComponent, "axp-query-filters", never, { "filtersDefinitions": { "alias": "filtersDefinitions"; "required": false; "isSignal": true; }; "initialFilters": { "alias": "initialFilters"; "required": false; "isSignal": true; }; }, { "onFiltersChanged": "onFiltersChanged"; }, never, never, true, never>;
998
1002
  }
@@ -2474,6 +2478,9 @@ interface AXPSpreadsheetConfig {
2474
2478
 
2475
2479
  declare class AXPSpreadsheetComponent {
2476
2480
  protected readonly translationService: AXTranslationService;
2481
+ private readonly shortcutRegistry;
2482
+ private readonly destroyRef;
2483
+ private readonly elementRef;
2477
2484
  /**
2478
2485
  * Translated column titles
2479
2486
  */
@@ -2647,10 +2654,6 @@ declare class AXPSpreadsheetComponent {
2647
2654
  * Handle blur event to stop editing (when user clicks away from cell)
2648
2655
  */
2649
2656
  protected handleCellBlur(rowId: string, columnName: string): void;
2650
- /**
2651
- * Handle Escape key to cancel editing
2652
- */
2653
- protected handleKeyDown(event: KeyboardEvent): void;
2654
2657
  /**
2655
2658
  * Commit cell edit (save changes and close editing mode)
2656
2659
  */
@@ -3009,8 +3012,7 @@ declare class AXPUserAvatarComponent implements OnInit, OnDestroy {
3009
3012
  ngOnDestroy(): void;
3010
3013
  private loadUserData;
3011
3014
  /**
3012
- * Generate avatar image source
3013
- * This is a placeholder - implement based on your actual requirements
3015
+ * Resolves avatar image URL from user data and resets load state.
3014
3016
  */
3015
3017
  private generateAvatarSrc;
3016
3018
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPUserAvatarComponent, never>;