@acorex/platform 21.0.0-next.75 → 21.0.0-next.79

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/platform",
3
- "version": "21.0.0-next.75",
3
+ "version": "21.0.0-next.79",
4
4
  "peerDependencies": {
5
5
  "@acorex/cdk": "^19.0.0 || ^20.0.0 || ^21.0.0-next.0 || ^21.0.2-next.0",
6
6
  "@acorex/core": "^19.0.0 || ^20.0.0 || ^21.0.0-next.0 || ^21.0.2-next.0",
@@ -3,7 +3,6 @@ import { AXPExecuteCommandResult, AXPQueryRequest, AXPUserReference, AXPMetaData
3
3
  import { AXPCommand, AXPQueryExecutor, AXPCommandService, AXPQuery } from '@acorex/platform/runtime';
4
4
  import * as _angular_core from '@angular/core';
5
5
  import { ElementRef, InjectionToken, Injector, Type, EnvironmentProviders, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
6
- import { AXPopoverComponent } from '@acorex/components/popover';
7
6
  import * as i4 from '@acorex/platform/layout/widget-core';
8
7
  import { AXPWidgetNode, AXPWidgetColumnNode, AXPWidgetCoreService, AXPColumnWidgetComponent, AXPValueWidgetComponent, AXPWidgetConfig, AXPWidgetRendererDirective, AXPWidgetCoreElementAPI } from '@acorex/platform/layout/widget-core';
9
8
  import { AXPPreloadFiltersApplyEvent, AXPColumnItemListItem, AXPDataSelectorRowActionsHandler, AXPCategoryTreeDataSource, AXPDataSelectorAllowCreate } from '@acorex/platform/layout/components';
@@ -30,6 +29,7 @@ import * as _acorex_core_translation from '@acorex/core/translation';
30
29
  import { AXTranslationService } from '@acorex/core/translation';
31
30
  import { AXPProviderSelectWidgetEditBase, AXPDataListWidgetComponentOptions } from '@acorex/platform/layout/widgets';
32
31
  import * as _acorex_platform_layout_entity from '@acorex/platform/layout/entity';
32
+ import { AXPopoverComponent } from '@acorex/components/popover';
33
33
  import { AXFileService } from '@acorex/core/file';
34
34
 
35
35
  declare class AXPCreateEntityCommand implements AXPCommand<any, any> {
@@ -334,6 +334,7 @@ declare class AXPEntityDetailPopoverComponent {
334
334
  private readonly queryService;
335
335
  private readonly formatService;
336
336
  private readonly translation;
337
+ private readonly changeDetectorRef;
337
338
  entity: _angular_core.InputSignal<string>;
338
339
  entityId: _angular_core.InputSignal<string | number>;
339
340
  textField: _angular_core.InputSignal<string>;
@@ -341,10 +342,9 @@ declare class AXPEntityDetailPopoverComponent {
341
342
  displayTitle: _angular_core.InputSignal<string>;
342
343
  item: _angular_core.InputSignal<AXPMetaData | undefined>;
343
344
  breadcrumb: _angular_core.InputSignal<string | null>;
344
- protected detailPopover: _angular_core.Signal<AXPopoverComponent | undefined>;
345
+ requestClose: _angular_core.InputSignal<(() => void) | undefined>;
345
346
  protected entityDetails: _angular_core.WritableSignal<any>;
346
347
  protected isLoadingDetails: _angular_core.WritableSignal<boolean>;
347
- protected isDetailPopoverOpen: _angular_core.WritableSignal<boolean>;
348
348
  /** Placeholder rows for the loading skeleton (matches typical property count). */
349
349
  protected readonly loadingSkeletonRows: readonly [1, 2, 3, 4, 5];
350
350
  protected readonly headerTitle: _angular_core.Signal<string>;
@@ -357,15 +357,8 @@ declare class AXPEntityDetailPopoverComponent {
357
357
  title: string;
358
358
  node: AXPWidgetNode;
359
359
  }[]>;
360
- /**
361
- * Show the entity detail popover
362
- */
363
- show(target: ElementRef | HTMLElement): Promise<void>;
364
- /**
365
- * Hide the entity detail popover
366
- */
367
- hide(): void;
368
- protected onDetailPopoverOpenChange(event: any): void;
360
+ /** Loads entity details after the overlay panel is created. */
361
+ loadDetails(): Promise<void>;
369
362
  protected navigateToDetails(): Promise<void>;
370
363
  private resolveLookupDisplayLabel;
371
364
  /**
@@ -390,7 +383,7 @@ declare class AXPEntityDetailPopoverComponent {
390
383
  */
391
384
  private resolveDataPath;
392
385
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailPopoverComponent, never>;
393
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDetailPopoverComponent, "axp-entity-detail-popover", never, { "entity": { "alias": "entity"; "required": true; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": true; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "displayTitle": { "alias": "displayTitle"; "required": false; "isSignal": true; }; "item": { "alias": "item"; "required": false; "isSignal": true; }; "breadcrumb": { "alias": "breadcrumb"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
386
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityDetailPopoverComponent, "axp-entity-detail-popover", never, { "entity": { "alias": "entity"; "required": true; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": true; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "displayTitle": { "alias": "displayTitle"; "required": false; "isSignal": true; }; "item": { "alias": "item"; "required": false; "isSignal": true; }; "breadcrumb": { "alias": "breadcrumb"; "required": false; "isSignal": true; }; "requestClose": { "alias": "requestClose"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
394
387
  }
395
388
 
396
389
  interface AXPEntityDetailPopoverOptions {
@@ -403,23 +396,34 @@ interface AXPEntityDetailPopoverOptions {
403
396
  breadcrumb?: string;
404
397
  }
405
398
  declare class AXPEntityDetailPopoverService {
406
- private readonly applicationRef;
407
- private readonly environmentInjector;
408
- private activePopoverRef;
399
+ private readonly overlayService;
400
+ private readonly platform;
401
+ private readonly localeService;
402
+ private readonly document;
403
+ private readonly router;
404
+ private overlayRef;
405
+ private componentRef;
406
+ private outsideClickHandler;
407
+ private keydownHandler;
408
+ private routerSubscription;
409
409
  /**
410
- * Show entity detail popover
411
- * @param target - The target element to position the popover
412
- * @param options - Configuration options for the popover
410
+ * Show entity detail popover anchored to the target element.
413
411
  */
414
412
  show(target: ElementRef | HTMLElement, options: AXPEntityDetailPopoverOptions): Promise<void>;
415
- /**
416
- * Hide the active popover
417
- */
413
+ /** Hide the active popover */
418
414
  hide(): void;
419
- /**
420
- * Check if a popover is currently active
421
- */
415
+ /** Whether a popover is currently active */
422
416
  get isActive(): boolean;
417
+ private resolveAnchorElement;
418
+ /** Mirror popover placement for RTL so the panel aligns with the anchor's inline-start edge. */
419
+ private resolveOverlayPlacement;
420
+ private resolveOverlayOffsetX;
421
+ private isRtlContext;
422
+ private bindDismissHandlers;
423
+ /** Ignore clicks on the anchor, overlay panel, or nested dropdown menus. */
424
+ private isInsideInteractiveSurface;
425
+ private removeDismissHandlers;
426
+ private handleOverlayDisposed;
423
427
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailPopoverService, never>;
424
428
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityDetailPopoverService>;
425
429
  }
@@ -2531,7 +2535,7 @@ declare class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComp
2531
2535
  private efDisplay;
2532
2536
  protected visibleItems: _angular_core.Signal<any[]>;
2533
2537
  protected columnItems: _angular_core.Signal<AXPColumnItemListItem[]>;
2534
- protected showItemDetail(item: any, index: number): Promise<void>;
2538
+ protected showItemDetail(item: any, index: number, anchor?: HTMLElement): Promise<void>;
2535
2539
  protected handleItemClick(listItem: AXPColumnItemListItem): void;
2536
2540
  protected getItemPath(item: any): string[];
2537
2541
  protected hasParent(item: any): boolean;
@@ -3041,7 +3045,7 @@ declare class AXPFileListComponent implements OnInit, OnDestroy {
3041
3045
  /** When false, links look omits the label (e.g. popover body). */
3042
3046
  showLabel: _angular_core.InputSignal<boolean>;
3043
3047
  /** `inline`: label + divider; `menu`: compact list for popovers/panels. */
3044
- linksLayout: _angular_core.InputSignal<"inline" | "menu">;
3048
+ linksLayout: _angular_core.InputSignal<"menu" | "inline">;
3045
3049
  files: _angular_core.InputSignal<AXPFileListItem[]>;
3046
3050
  plugins: _angular_core.InputSignal<{
3047
3051
  name: string;
@@ -3820,10 +3824,10 @@ declare class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent<an
3820
3824
  protected showMoreItems(): void;
3821
3825
  protected openLazyPopover(): void;
3822
3826
  protected onPopoverOpenChange(event: unknown): void;
3823
- protected showItemDetail(item: any, index: number): Promise<void>;
3824
- protected handleItemClick(index: number): void;
3825
- protected handleResolvedItemClick(index: number): void;
3826
- protected handlePopoverItemClick(index: number): void;
3827
+ protected showItemDetail(item: any, index: number, anchor?: HTMLElement): Promise<void>;
3828
+ protected handleItemClick(index: number, event: Event): void;
3829
+ protected handleResolvedItemClick(index: number, event: Event): void;
3830
+ protected handlePopoverItemClick(index: number, _event: Event): void;
3827
3831
  /**
3828
3832
  * True when the cell can render without fetching row data via byKey.
3829
3833
  * Uses textField / expose targets on the row — not merely whether column dataPath differs from columnName.
@@ -3835,6 +3839,16 @@ declare class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent<an
3835
3839
  private resetLazyState;
3836
3840
  private openPopoverFromRef;
3837
3841
  private closeMorePopover;
3842
+ /** Prefer the clicked inline item as anchor; fall back to the column host. */
3843
+ private resolvePopoverAnchor;
3844
+ /**
3845
+ * Stable anchor for entity detail when opened from the more-items list.
3846
+ * Clicks inside ax-popover overlay use elements that are removed/hidden on close.
3847
+ */
3848
+ private resolveMorePopoverDetailAnchor;
3849
+ /** Ensures the detail popover anchor stays in the layout after the more popover closes. */
3850
+ private resolveStableDetailAnchor;
3851
+ private isInsideMorePopover;
3838
3852
  private ensureLazyItemsLoaded;
3839
3853
  /**
3840
3854
  * ax-popover may emit a boolean, CustomEvent with detail, or a DOM Event depending on version.