@eagami/ui 5.54.0 → 5.55.0
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/fesm2022/eagami-ui.mjs +827 -361
- package/fesm2022/eagami-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/eagami-ui.d.ts +593 -360
package/types/eagami-ui.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
|
-
import { AfterContentChecked, ElementRef, EnvironmentProviders, InjectionToken, OnDestroy, OnInit, Signal, TemplateRef, Type } from "@angular/core";
|
|
2
|
+
import { AfterContentChecked, ElementRef, EnvironmentProviders, InjectionToken, Injector, OnDestroy, OnInit, Signal, TemplateRef, Type } from "@angular/core";
|
|
3
3
|
import { AbstractControl, ControlValueAccessor } from "@angular/forms";
|
|
4
4
|
/**
|
|
5
5
|
* BCP 47 locale tags supported out of the box. Consumers select one of these
|
|
@@ -2629,6 +2629,479 @@ export declare class ColorPickerComponent implements ControlValueAccessor {
|
|
|
2629
2629
|
"changed": "changed";
|
|
2630
2630
|
}, never, never, true, never>;
|
|
2631
2631
|
}
|
|
2632
|
+
/**
|
|
2633
|
+
* Placement of the popover relative to its anchor. Each outside placement names
|
|
2634
|
+
* the side of the anchor the popover attaches to, optionally followed by a corner
|
|
2635
|
+
* suffix (`-start` or `-end`) that decides the alignment along the perpendicular
|
|
2636
|
+
* axis. The plain side names (`top`, `bottom`, `left`, `right`) centre the
|
|
2637
|
+
* popover on that axis. The `inside-` placements sit over the anchor instead,
|
|
2638
|
+
* see {@link PopoverInsidePlacement}.
|
|
2639
|
+
*/
|
|
2640
|
+
export type PopoverPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right' | PopoverInsidePlacement;
|
|
2641
|
+
/**
|
|
2642
|
+
* Placements that sit over the anchor rather than beside it: pinned inside one of
|
|
2643
|
+
* its corners (`inside-top-start`), centred along one of its edges (`inside-top`,
|
|
2644
|
+
* `inside-start`), or centred on it (`inside-center`). `start` and `end` follow the
|
|
2645
|
+
* reading direction, so `inside-top-start` is the top-left corner in LTR and the
|
|
2646
|
+
* top-right corner in RTL. The offset insets the popover from the edges it is
|
|
2647
|
+
* pinned to, and it never flips.
|
|
2648
|
+
*/
|
|
2649
|
+
export type PopoverInsidePlacement = 'inside-top-start' | 'inside-top' | 'inside-top-end' | 'inside-start' | 'inside-center' | 'inside-end' | 'inside-bottom-start' | 'inside-bottom' | 'inside-bottom-end';
|
|
2650
|
+
/** A point in viewport coordinates, such as a pointer event's `clientX` and `clientY`. */
|
|
2651
|
+
export interface PopoverAnchorPoint {
|
|
2652
|
+
readonly x: number;
|
|
2653
|
+
readonly y: number;
|
|
2654
|
+
}
|
|
2655
|
+
export interface PopoverPositionResult {
|
|
2656
|
+
/** Top coordinate in viewport (px); pairs with `position: fixed`. */
|
|
2657
|
+
readonly top: number;
|
|
2658
|
+
/** Left coordinate in viewport (px). */
|
|
2659
|
+
readonly left: number;
|
|
2660
|
+
/** Width hint when the popover should match the anchor's width. */
|
|
2661
|
+
readonly width?: number;
|
|
2662
|
+
/** The anchor's measured width, for a caller capping the popover against it. */
|
|
2663
|
+
readonly anchorWidth: number;
|
|
2664
|
+
/** Effective placement after any flip logic ran. */
|
|
2665
|
+
readonly placement: PopoverPlacement;
|
|
2666
|
+
}
|
|
2667
|
+
export interface PopoverPositionOptions {
|
|
2668
|
+
readonly placement: PopoverPlacement;
|
|
2669
|
+
/** Gap in px between the anchor and the popover. Default 4. */
|
|
2670
|
+
readonly offset?: number;
|
|
2671
|
+
/** Flip to the opposite side when the requested side overflows the viewport. Default true. */
|
|
2672
|
+
readonly flip?: boolean;
|
|
2673
|
+
/** Clamp inside the viewport when the popover still overflows after any flip. Default true. */
|
|
2674
|
+
readonly clamp?: boolean;
|
|
2675
|
+
/** Margin from the viewport edge in px when clamping. Default 8. */
|
|
2676
|
+
readonly margin?: number;
|
|
2677
|
+
/** Set the popover's width to match the anchor's. Useful for dropdown-style menus. */
|
|
2678
|
+
readonly matchAnchorWidth?: boolean;
|
|
2679
|
+
/** Right-to-left context. Swaps `-start`/`-end` alignment so they track the reading direction. */
|
|
2680
|
+
readonly rtl?: boolean;
|
|
2681
|
+
/**
|
|
2682
|
+
* Viewport point to position against instead of the anchor's box, as a zero-size
|
|
2683
|
+
* anchor. The anchor still supplies the width for `matchAnchorWidth`.
|
|
2684
|
+
*/
|
|
2685
|
+
readonly point?: PopoverAnchorPoint | null;
|
|
2686
|
+
}
|
|
2687
|
+
interface Rect {
|
|
2688
|
+
readonly width: number;
|
|
2689
|
+
readonly height: number;
|
|
2690
|
+
}
|
|
2691
|
+
interface AnchorRect extends Rect {
|
|
2692
|
+
readonly top: number;
|
|
2693
|
+
readonly bottom: number;
|
|
2694
|
+
readonly left: number;
|
|
2695
|
+
readonly right: number;
|
|
2696
|
+
}
|
|
2697
|
+
interface Viewport {
|
|
2698
|
+
readonly width: number;
|
|
2699
|
+
readonly height: number;
|
|
2700
|
+
}
|
|
2701
|
+
/**
|
|
2702
|
+
* Computes the viewport-space top/left for a popover anchored to `anchorRect`,
|
|
2703
|
+
* applying optional flip-on-overflow and edge-clamp logic. Pure function, no
|
|
2704
|
+
* DOM access. Both `<ea-popover>` and `[eaTooltip]` consume this.
|
|
2705
|
+
*
|
|
2706
|
+
* @param anchorRect The anchor element's `getBoundingClientRect()`.
|
|
2707
|
+
* @param popoverRect Width and height of the popover (post-render measurement).
|
|
2708
|
+
* @param viewport Viewport dimensions (`window.innerWidth/Height`).
|
|
2709
|
+
* @param options Placement and behavior flags.
|
|
2710
|
+
*/
|
|
2711
|
+
export declare function computePopoverPosition(anchorRect: AnchorRect, popoverRect: Rect, viewport: Viewport, options: PopoverPositionOptions): PopoverPositionResult;
|
|
2712
|
+
/** Placement of the menu list relative to its trigger. */
|
|
2713
|
+
export type MenuPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';
|
|
2714
|
+
/** Visual size of the menu, shared by all of its items. */
|
|
2715
|
+
export type MenuSize = EaSize;
|
|
2716
|
+
/**
|
|
2717
|
+
* Popup action menu attached to any focusable element via the
|
|
2718
|
+
* `[eaMenuTrigger]` directive. Supports keyboard navigation
|
|
2719
|
+
* (arrow keys, Home/End), closes on outside click or Escape, and restores
|
|
2720
|
+
* focus to the trigger on close. Positioning, dismissal, and SSR-safe scroll
|
|
2721
|
+
* handling are provided by `<ea-popover>`.
|
|
2722
|
+
*/
|
|
2723
|
+
export declare class MenuComponent {
|
|
2724
|
+
private readonly injector;
|
|
2725
|
+
private readonly i18n;
|
|
2726
|
+
private readonly listEl;
|
|
2727
|
+
readonly placement: import("@angular/core").InputSignal<MenuPlacement>;
|
|
2728
|
+
/** Visual size of the menu; every item inherits it. */
|
|
2729
|
+
readonly size: import("@angular/core").InputSignal<EaSize>;
|
|
2730
|
+
/** Max height of the scrollable list as a CSS length; tall menus scroll past it. */
|
|
2731
|
+
readonly maxHeight: import("@angular/core").InputSignal<string>;
|
|
2732
|
+
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
2733
|
+
readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
|
|
2734
|
+
readonly id: import("@angular/core").InputSignal<string>;
|
|
2735
|
+
/** Accessible label for the menu, falling back to the active locale. */
|
|
2736
|
+
readonly resolvedAriaLabel: import("@angular/core").Signal<string>;
|
|
2737
|
+
readonly open: import("@angular/core").ModelSignal<boolean>;
|
|
2738
|
+
/** Fires when the menu opens. */
|
|
2739
|
+
readonly opened: import("@angular/core").OutputEmitterRef<void>;
|
|
2740
|
+
/** Fires when the menu closes. */
|
|
2741
|
+
readonly closed: import("@angular/core").OutputEmitterRef<void>;
|
|
2742
|
+
/** Trigger element currently anchoring the menu. Signal-typed so `<ea-popover>` reacts when it changes. */
|
|
2743
|
+
protected readonly triggerEl: import("@angular/core").WritableSignal<HTMLElement | undefined>;
|
|
2744
|
+
protected readonly asContextMenu: import("@angular/core").WritableSignal<boolean>;
|
|
2745
|
+
protected readonly anchorPoint: import("@angular/core").WritableSignal<PopoverAnchorPoint | null>;
|
|
2746
|
+
readonly activeItemId: import("@angular/core").WritableSignal<string | null>;
|
|
2747
|
+
constructor();
|
|
2748
|
+
/** Toggles the menu open state, anchoring it to the given trigger element. */
|
|
2749
|
+
toggleAt(triggerEl: HTMLElement): void;
|
|
2750
|
+
/** Opens the menu anchored to the given trigger element and focuses the first item. */
|
|
2751
|
+
openAt(triggerEl: HTMLElement): void;
|
|
2752
|
+
/**
|
|
2753
|
+
* Opens the menu as the context menu of `anchorEl`: at `point` when given (a
|
|
2754
|
+
* pointer position, in viewport coordinates), else at its placement against the
|
|
2755
|
+
* anchor. Focuses the first item, closes on any click or context-menu request
|
|
2756
|
+
* outside the menu, and hands focus back to wherever it was on close.
|
|
2757
|
+
*/
|
|
2758
|
+
openAsContextMenu(anchorEl: HTMLElement, point?: PopoverAnchorPoint | null): void;
|
|
2759
|
+
private show;
|
|
2760
|
+
/**
|
|
2761
|
+
* Closes the menu if it is open. Pass `restoreFocus: true` to return focus
|
|
2762
|
+
* to the trigger element (used when closing via Escape or item activation;
|
|
2763
|
+
* not used on outside click, where the user has chosen a new focus target).
|
|
2764
|
+
*/
|
|
2765
|
+
close(restoreFocus?: boolean): void;
|
|
2766
|
+
/** Called by `<ea-popover>` when the user clicks outside the menu. */
|
|
2767
|
+
onPopoverCloseRequested(): void;
|
|
2768
|
+
private getEnabledItems;
|
|
2769
|
+
/**
|
|
2770
|
+
* `preventScroll: true` is critical here. The menu list is `position: fixed`
|
|
2771
|
+
* but its DOM ancestor is whatever element hosts the menu (often a sticky
|
|
2772
|
+
* header). When `.focus()` is called without `preventScroll`, Chromium uses
|
|
2773
|
+
* the focused element's DOM-tree position (inside the sticky ancestor) rather
|
|
2774
|
+
* than its rendered fixed position to decide whether to scroll, which on a
|
|
2775
|
+
* scrolled page nudges the document up by a few pixels per open, until the
|
|
2776
|
+
* trigger reaches the top edge. The same guard applies to keyboard navigation
|
|
2777
|
+
* and restoring focus on close.
|
|
2778
|
+
*/
|
|
2779
|
+
private focusFirstItem;
|
|
2780
|
+
private focusItem;
|
|
2781
|
+
onKeydown(event: KeyboardEvent): void;
|
|
2782
|
+
onEscape(event: Event): void;
|
|
2783
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MenuComponent, never>;
|
|
2784
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MenuComponent, "ea-menu", never, {
|
|
2785
|
+
"placement": {
|
|
2786
|
+
"alias": "placement";
|
|
2787
|
+
"required": false;
|
|
2788
|
+
"isSignal": true;
|
|
2789
|
+
};
|
|
2790
|
+
"size": {
|
|
2791
|
+
"alias": "size";
|
|
2792
|
+
"required": false;
|
|
2793
|
+
"isSignal": true;
|
|
2794
|
+
};
|
|
2795
|
+
"maxHeight": {
|
|
2796
|
+
"alias": "maxHeight";
|
|
2797
|
+
"required": false;
|
|
2798
|
+
"isSignal": true;
|
|
2799
|
+
};
|
|
2800
|
+
"disabled": {
|
|
2801
|
+
"alias": "disabled";
|
|
2802
|
+
"required": false;
|
|
2803
|
+
"isSignal": true;
|
|
2804
|
+
};
|
|
2805
|
+
"ariaLabel": {
|
|
2806
|
+
"alias": "aria-label";
|
|
2807
|
+
"required": false;
|
|
2808
|
+
"isSignal": true;
|
|
2809
|
+
};
|
|
2810
|
+
"id": {
|
|
2811
|
+
"alias": "id";
|
|
2812
|
+
"required": false;
|
|
2813
|
+
"isSignal": true;
|
|
2814
|
+
};
|
|
2815
|
+
"open": {
|
|
2816
|
+
"alias": "open";
|
|
2817
|
+
"required": false;
|
|
2818
|
+
"isSignal": true;
|
|
2819
|
+
};
|
|
2820
|
+
}, {
|
|
2821
|
+
"open": "openChange";
|
|
2822
|
+
"opened": "opened";
|
|
2823
|
+
"closed": "closed";
|
|
2824
|
+
}, never, ["*"], true, never>;
|
|
2825
|
+
}
|
|
2826
|
+
/** What a trigger such as `[eaContextMenuTrigger]` asked for when requesting the popover open. */
|
|
2827
|
+
export interface PopoverOpenRequest {
|
|
2828
|
+
/** Viewport point to open at, for the parent to bind to `[anchorPoint]`; `null` places it against the anchor. */
|
|
2829
|
+
readonly point: PopoverAnchorPoint | null;
|
|
2830
|
+
}
|
|
2831
|
+
/** ARIA role to apply to the popover surface. */
|
|
2832
|
+
export type PopoverRole = 'menu' | 'listbox' | 'dialog' | 'tooltip' | 'grid';
|
|
2833
|
+
/**
|
|
2834
|
+
* How the popover should respond to scroll / resize events while open.
|
|
2835
|
+
*
|
|
2836
|
+
* - `reposition` (default): re-measure the anchor and update the popover's
|
|
2837
|
+
* coordinates so it stays attached. Suitable for menus and tooltips.
|
|
2838
|
+
* - `close`: request close. Suitable for dropdown lists and the colour-picker
|
|
2839
|
+
* popover, where re-tracking a tall popover during a scroll feels intrusive.
|
|
2840
|
+
* - `ignore`: do nothing. The popover stays at its initial coordinates and
|
|
2841
|
+
* may visually detach from a scrolling anchor; useful when the anchor is
|
|
2842
|
+
* guaranteed not to move (e.g. inside a non-scrolling region).
|
|
2843
|
+
*/
|
|
2844
|
+
export type PopoverScrollBehavior = 'reposition' | 'close' | 'ignore';
|
|
2845
|
+
/** Width cap for a popover surface: px, or the anchor's own width. */
|
|
2846
|
+
export type PopoverMaxWidth = number | 'anchor';
|
|
2847
|
+
/**
|
|
2848
|
+
* Floating-element primitive. Renders projected content as `position: fixed`
|
|
2849
|
+
* anchored to an external element, with flip-on-overflow, viewport clamping,
|
|
2850
|
+
* outside-click and Escape dismissal, and SSR-safe scroll / resize handling.
|
|
2851
|
+
*
|
|
2852
|
+
* The primitive is intentionally low-level: a parent component drives the
|
|
2853
|
+
* `[open]` state and listens for `(closeRequested)` to mirror it back. Internal
|
|
2854
|
+
* library components (`<ea-menu>`, `<ea-dropdown>`, `<ea-color-picker>`,
|
|
2855
|
+
* `<ea-date-picker>`, `[eaTooltip]`) compose on top of it; downstream apps can
|
|
2856
|
+
* use it directly to build their own popover-based UI. Set `contextMenu` and
|
|
2857
|
+
* pair it with `[eaContextMenuTrigger]` to open it as a context menu.
|
|
2858
|
+
*
|
|
2859
|
+
* @example
|
|
2860
|
+
* ```html
|
|
2861
|
+
* <button #trigger (click)="open.set(!open())">Open</button>
|
|
2862
|
+
* <ea-popover [anchor]="trigger" [open]="open()" (closeRequested)="open.set(false)">
|
|
2863
|
+
* <div>Popover content</div>
|
|
2864
|
+
* </ea-popover>
|
|
2865
|
+
* ```
|
|
2866
|
+
*/
|
|
2867
|
+
export declare class PopoverComponent {
|
|
2868
|
+
private readonly destroyRef;
|
|
2869
|
+
private readonly press;
|
|
2870
|
+
private readonly surfaceEl;
|
|
2871
|
+
/** Anchor element the popover positions itself against. */
|
|
2872
|
+
readonly anchor: import("@angular/core").InputSignal<HTMLElement | ElementRef<HTMLElement> | undefined>;
|
|
2873
|
+
/** Whether the popover is currently open. */
|
|
2874
|
+
readonly open: import("@angular/core").InputSignal<boolean>;
|
|
2875
|
+
/** Where the popover attaches relative to the anchor. */
|
|
2876
|
+
readonly placement: import("@angular/core").InputSignal<PopoverPlacement>;
|
|
2877
|
+
/**
|
|
2878
|
+
* Viewport point to position against instead of the anchor's box, such as where
|
|
2879
|
+
* a context menu was requested. The placement applies around the point, which
|
|
2880
|
+
* keeps its offset from the anchor as the page scrolls.
|
|
2881
|
+
*/
|
|
2882
|
+
readonly anchorPoint: import("@angular/core").InputSignal<PopoverAnchorPoint | null>;
|
|
2883
|
+
/** ARIA role applied to the popover surface. */
|
|
2884
|
+
readonly role: import("@angular/core").InputSignal<PopoverRole>;
|
|
2885
|
+
/** Accessible label. Falls back to nothing; consumers should provide one when no visible heading is in the popover. */
|
|
2886
|
+
readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
|
|
2887
|
+
/** Id of the element that labels the popover surface, forwarded as `aria-labelledby`. */
|
|
2888
|
+
readonly ariaLabelledby: import("@angular/core").InputSignal<string | undefined>;
|
|
2889
|
+
/** Keep Tab and Shift+Tab cycling within the surface while open (dialog pattern). */
|
|
2890
|
+
readonly trapFocus: import("@angular/core").InputSignal<boolean>;
|
|
2891
|
+
/** DOM id for the surface so trigger elements can reference it via aria-controls. */
|
|
2892
|
+
readonly surfaceId: import("@angular/core").InputSignal<string>;
|
|
2893
|
+
/**
|
|
2894
|
+
* Gap in px between the anchor and the popover. Defaults to 2 so an open panel
|
|
2895
|
+
* clears the anchor's active focus ring instead of sitting flush over it.
|
|
2896
|
+
*/
|
|
2897
|
+
readonly offset: import("@angular/core").InputSignal<number>;
|
|
2898
|
+
/** Flip to the opposite side when the requested side overflows the viewport. */
|
|
2899
|
+
readonly flip: import("@angular/core").InputSignal<boolean>;
|
|
2900
|
+
/** Clamp the popover inside the viewport when it would otherwise overflow. */
|
|
2901
|
+
readonly clamp: import("@angular/core").InputSignal<boolean>;
|
|
2902
|
+
/** Set the popover's `min-width` to match the anchor's width (dropdown pattern). */
|
|
2903
|
+
readonly matchAnchorWidth: import("@angular/core").InputSignal<boolean>;
|
|
2904
|
+
/**
|
|
2905
|
+
* Widest the surface may grow: a px value, or `anchor` to cap it at the
|
|
2906
|
+
* anchor's own width so long content truncates instead of widening the panel.
|
|
2907
|
+
*/
|
|
2908
|
+
readonly maxWidth: import("@angular/core").InputSignal<PopoverMaxWidth | undefined>;
|
|
2909
|
+
/** Close on click outside the popover and the anchor. */
|
|
2910
|
+
readonly closeOnOutsideClick: import("@angular/core").InputSignal<boolean>;
|
|
2911
|
+
/** Close on Escape. */
|
|
2912
|
+
readonly closeOnEscape: import("@angular/core").InputSignal<boolean>;
|
|
2913
|
+
/** What to do on scroll / resize while open. */
|
|
2914
|
+
readonly scrollBehavior: import("@angular/core").InputSignal<PopoverScrollBehavior>;
|
|
2915
|
+
/**
|
|
2916
|
+
* Behaves as a context menu: moves focus to the first focusable element once
|
|
2917
|
+
* shown and hands it back on close, and treats clicks on the anchor and
|
|
2918
|
+
* context-menu requests anywhere outside the surface as outside clicks.
|
|
2919
|
+
*/
|
|
2920
|
+
readonly contextMenu: import("@angular/core").InputSignal<boolean>;
|
|
2921
|
+
/** Requested close. The parent should mirror this into `[open]`. */
|
|
2922
|
+
readonly closeRequested: import("@angular/core").OutputEmitterRef<void>;
|
|
2923
|
+
/**
|
|
2924
|
+
* Requested open, from a trigger such as `[eaContextMenuTrigger]`. The parent
|
|
2925
|
+
* should mirror this into `[open]`, and the point into `[anchorPoint]`.
|
|
2926
|
+
*/
|
|
2927
|
+
readonly openRequested: import("@angular/core").OutputEmitterRef<PopoverOpenRequest>;
|
|
2928
|
+
private readonly position;
|
|
2929
|
+
private latched;
|
|
2930
|
+
private pointOffset;
|
|
2931
|
+
private focusReturn;
|
|
2932
|
+
/** True placement after flip, for class-based styling (e.g. arrow direction). */
|
|
2933
|
+
readonly effectivePlacement: import("@angular/core").Signal<PopoverPlacement>;
|
|
2934
|
+
/** Latches true once the post-rAF reposition has run, so the surface is
|
|
2935
|
+
* only revealed after its dimensions are guaranteed stable. Reset on close. */
|
|
2936
|
+
private readonly stable;
|
|
2937
|
+
/** True once the first `reposition()` has resolved a placement on a
|
|
2938
|
+
* laid-out surface. Drives the `--positioned` class. */
|
|
2939
|
+
readonly isPositioned: import("@angular/core").Signal<boolean>;
|
|
2940
|
+
/** Class list for the surface. Computed in TS so the placement key (with
|
|
2941
|
+
* its interpolated suffix) and the positioned modifier compose cleanly. */
|
|
2942
|
+
readonly surfaceClass: import("@angular/core").Signal<string>;
|
|
2943
|
+
/** Inline style applied to the surface element. */
|
|
2944
|
+
readonly surfaceStyle: import("@angular/core").Signal<Record<string, string>>;
|
|
2945
|
+
constructor();
|
|
2946
|
+
requestOpen(point: PopoverAnchorPoint | null): void;
|
|
2947
|
+
private resolveAnchor;
|
|
2948
|
+
private reposition;
|
|
2949
|
+
onDocumentClick(event: MouseEvent): void;
|
|
2950
|
+
onSurfaceKeydown(event: KeyboardEvent): void;
|
|
2951
|
+
private focusableElements;
|
|
2952
|
+
private focusFirstElement;
|
|
2953
|
+
private trackFocusReturn;
|
|
2954
|
+
onEscape(event: Event): void;
|
|
2955
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PopoverComponent, never>;
|
|
2956
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PopoverComponent, "ea-popover", never, {
|
|
2957
|
+
"anchor": {
|
|
2958
|
+
"alias": "anchor";
|
|
2959
|
+
"required": true;
|
|
2960
|
+
"isSignal": true;
|
|
2961
|
+
};
|
|
2962
|
+
"open": {
|
|
2963
|
+
"alias": "open";
|
|
2964
|
+
"required": false;
|
|
2965
|
+
"isSignal": true;
|
|
2966
|
+
};
|
|
2967
|
+
"placement": {
|
|
2968
|
+
"alias": "placement";
|
|
2969
|
+
"required": false;
|
|
2970
|
+
"isSignal": true;
|
|
2971
|
+
};
|
|
2972
|
+
"anchorPoint": {
|
|
2973
|
+
"alias": "anchorPoint";
|
|
2974
|
+
"required": false;
|
|
2975
|
+
"isSignal": true;
|
|
2976
|
+
};
|
|
2977
|
+
"role": {
|
|
2978
|
+
"alias": "role";
|
|
2979
|
+
"required": false;
|
|
2980
|
+
"isSignal": true;
|
|
2981
|
+
};
|
|
2982
|
+
"ariaLabel": {
|
|
2983
|
+
"alias": "aria-label";
|
|
2984
|
+
"required": false;
|
|
2985
|
+
"isSignal": true;
|
|
2986
|
+
};
|
|
2987
|
+
"ariaLabelledby": {
|
|
2988
|
+
"alias": "aria-labelledby";
|
|
2989
|
+
"required": false;
|
|
2990
|
+
"isSignal": true;
|
|
2991
|
+
};
|
|
2992
|
+
"trapFocus": {
|
|
2993
|
+
"alias": "trapFocus";
|
|
2994
|
+
"required": false;
|
|
2995
|
+
"isSignal": true;
|
|
2996
|
+
};
|
|
2997
|
+
"surfaceId": {
|
|
2998
|
+
"alias": "surfaceId";
|
|
2999
|
+
"required": false;
|
|
3000
|
+
"isSignal": true;
|
|
3001
|
+
};
|
|
3002
|
+
"offset": {
|
|
3003
|
+
"alias": "offset";
|
|
3004
|
+
"required": false;
|
|
3005
|
+
"isSignal": true;
|
|
3006
|
+
};
|
|
3007
|
+
"flip": {
|
|
3008
|
+
"alias": "flip";
|
|
3009
|
+
"required": false;
|
|
3010
|
+
"isSignal": true;
|
|
3011
|
+
};
|
|
3012
|
+
"clamp": {
|
|
3013
|
+
"alias": "clamp";
|
|
3014
|
+
"required": false;
|
|
3015
|
+
"isSignal": true;
|
|
3016
|
+
};
|
|
3017
|
+
"matchAnchorWidth": {
|
|
3018
|
+
"alias": "matchAnchorWidth";
|
|
3019
|
+
"required": false;
|
|
3020
|
+
"isSignal": true;
|
|
3021
|
+
};
|
|
3022
|
+
"maxWidth": {
|
|
3023
|
+
"alias": "maxWidth";
|
|
3024
|
+
"required": false;
|
|
3025
|
+
"isSignal": true;
|
|
3026
|
+
};
|
|
3027
|
+
"closeOnOutsideClick": {
|
|
3028
|
+
"alias": "closeOnOutsideClick";
|
|
3029
|
+
"required": false;
|
|
3030
|
+
"isSignal": true;
|
|
3031
|
+
};
|
|
3032
|
+
"closeOnEscape": {
|
|
3033
|
+
"alias": "closeOnEscape";
|
|
3034
|
+
"required": false;
|
|
3035
|
+
"isSignal": true;
|
|
3036
|
+
};
|
|
3037
|
+
"scrollBehavior": {
|
|
3038
|
+
"alias": "scrollBehavior";
|
|
3039
|
+
"required": false;
|
|
3040
|
+
"isSignal": true;
|
|
3041
|
+
};
|
|
3042
|
+
"contextMenu": {
|
|
3043
|
+
"alias": "contextMenu";
|
|
3044
|
+
"required": false;
|
|
3045
|
+
"isSignal": true;
|
|
3046
|
+
};
|
|
3047
|
+
}, {
|
|
3048
|
+
"closeRequested": "closeRequested";
|
|
3049
|
+
"openRequested": "openRequested";
|
|
3050
|
+
}, never, ["*"], true, never>;
|
|
3051
|
+
}
|
|
3052
|
+
/**
|
|
3053
|
+
* Where `[eaContextMenuTrigger]` opens its target: at the pointer (below the
|
|
3054
|
+
* focused element for a keyboard request), or at the target's own placement
|
|
3055
|
+
* against the host.
|
|
3056
|
+
*/
|
|
3057
|
+
export type ContextMenuPosition = 'pointer' | 'anchor';
|
|
3058
|
+
/** An overlay `[eaContextMenuTrigger]` can open as a context menu. */
|
|
3059
|
+
export type ContextMenuTarget = MenuComponent | PopoverComponent;
|
|
3060
|
+
/**
|
|
3061
|
+
* Opens an `<ea-menu>` or `<ea-popover>` as the context menu of its host: on a
|
|
3062
|
+
* right-click or long press, or from the keyboard with Shift+F10 or the
|
|
3063
|
+
* context-menu key while focus is on the host or inside it. The browser's own
|
|
3064
|
+
* menu is suppressed only when the target opens, so a `null` target, a disabled
|
|
3065
|
+
* menu, or a request something inside the host has already handled leaves it be.
|
|
3066
|
+
*
|
|
3067
|
+
* A menu opens straight away. A popover's parent drives its `[open]` state, so it
|
|
3068
|
+
* emits `openRequested` with the point to bind to `[anchorPoint]` instead; give it
|
|
3069
|
+
* `[contextMenu]="true"` so it takes focus and dismisses like a context menu.
|
|
3070
|
+
*
|
|
3071
|
+
* @example
|
|
3072
|
+
* ```html
|
|
3073
|
+
* <article [eaContextMenuTrigger]="actions">Right-click me</article>
|
|
3074
|
+
* <ea-menu #actions>
|
|
3075
|
+
* <ea-menu-item>Rename</ea-menu-item>
|
|
3076
|
+
* </ea-menu>
|
|
3077
|
+
* ```
|
|
3078
|
+
*/
|
|
3079
|
+
export declare class ContextMenuTriggerDirective {
|
|
3080
|
+
private readonly el;
|
|
3081
|
+
/** The menu or popover to open; `null` or `undefined` leaves the browser's own menu. */
|
|
3082
|
+
readonly target: import("@angular/core").InputSignal<ContextMenuTarget | null | undefined>;
|
|
3083
|
+
/**
|
|
3084
|
+
* Opens at the pointer, or below the focused element for a keyboard request;
|
|
3085
|
+
* `anchor` opens at the target's placement against the host instead.
|
|
3086
|
+
*/
|
|
3087
|
+
readonly contextMenuPosition: import("@angular/core").InputSignal<ContextMenuPosition>;
|
|
3088
|
+
onContextMenu(event: MouseEvent): void;
|
|
3089
|
+
onKeydown(event: KeyboardEvent): void;
|
|
3090
|
+
private request;
|
|
3091
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ContextMenuTriggerDirective, never>;
|
|
3092
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ContextMenuTriggerDirective, "[eaContextMenuTrigger]", never, {
|
|
3093
|
+
"target": {
|
|
3094
|
+
"alias": "eaContextMenuTrigger";
|
|
3095
|
+
"required": false;
|
|
3096
|
+
"isSignal": true;
|
|
3097
|
+
};
|
|
3098
|
+
"contextMenuPosition": {
|
|
3099
|
+
"alias": "contextMenuPosition";
|
|
3100
|
+
"required": false;
|
|
3101
|
+
"isSignal": true;
|
|
3102
|
+
};
|
|
3103
|
+
}, {}, never, never, true, never>;
|
|
3104
|
+
}
|
|
2632
3105
|
/** Vertical density preset for table rows and header cells. */
|
|
2633
3106
|
export type DataTableDensity = 'compact' | 'comfortable' | 'spacious';
|
|
2634
3107
|
/** Visual size of the table's text, paddings, and icons. */
|
|
@@ -2650,6 +3123,22 @@ export interface DataTableColumn<T = Record<string, unknown>> {
|
|
|
2650
3123
|
headerTemplate?: TemplateRef<{
|
|
2651
3124
|
$implicit: DataTableColumn<T>;
|
|
2652
3125
|
}>;
|
|
3126
|
+
/** Shown in this column's cells while the table is `loading`, in place of a skeleton bar. */
|
|
3127
|
+
placeholderTemplate?: TemplateRef<{
|
|
3128
|
+
$implicit: DataTableColumn<T>;
|
|
3129
|
+
index: number;
|
|
3130
|
+
}>;
|
|
3131
|
+
}
|
|
3132
|
+
/** A body row's context-menu request, as `rowContextMenu` emits it. */
|
|
3133
|
+
export interface DataTableRowContextMenuEvent<T = Record<string, unknown>> {
|
|
3134
|
+
/** The row's data. */
|
|
3135
|
+
readonly row: T;
|
|
3136
|
+
/** The row's `<tr>`, for anchoring a menu or popover to the row. */
|
|
3137
|
+
readonly rowElement: HTMLElement;
|
|
3138
|
+
/** Where to open a menu: the pointer, or below the focused row or cell for a keyboard request. */
|
|
3139
|
+
readonly point: PopoverAnchorPoint;
|
|
3140
|
+
/** The originating event; call `preventDefault()` on it to suppress the browser's own menu. */
|
|
3141
|
+
readonly event: MouseEvent | KeyboardEvent;
|
|
2653
3142
|
}
|
|
2654
3143
|
/** Current sort state: which column is sorted and in which direction. */
|
|
2655
3144
|
export interface DataTableSortState {
|
|
@@ -2667,6 +3156,7 @@ export declare class DataTableComponent<T = Record<string, unknown>> {
|
|
|
2667
3156
|
private readonly host;
|
|
2668
3157
|
private readonly activeCell;
|
|
2669
3158
|
private static readonly PAGE_JUMP;
|
|
3159
|
+
private keyboardRequestPending;
|
|
2670
3160
|
readonly columns: import("@angular/core").InputSignal<DataTableColumn<T>[]>;
|
|
2671
3161
|
readonly data: import("@angular/core").InputSignal<T[]>;
|
|
2672
3162
|
/**
|
|
@@ -2702,14 +3192,30 @@ export declare class DataTableComponent<T = Record<string, unknown>> {
|
|
|
2702
3192
|
* A row given `null` is inert: no link, hover highlight, focus or activation.
|
|
2703
3193
|
*/
|
|
2704
3194
|
readonly rowHref: import("@angular/core").InputSignal<((row: T) => string | null) | undefined>;
|
|
3195
|
+
/**
|
|
3196
|
+
* Shows placeholder rows in place of the data while it loads, and marks the table
|
|
3197
|
+
* busy for assistive technology. A placeholder row stands as tall as a row of text,
|
|
3198
|
+
* and `sizingRows` keep the columns at their loaded widths.
|
|
3199
|
+
*/
|
|
3200
|
+
readonly loading: import("@angular/core").InputSignal<boolean>;
|
|
3201
|
+
/** How many placeholder rows to show while `loading`. */
|
|
3202
|
+
readonly loadingRowCount: import("@angular/core").InputSignal<number>;
|
|
2705
3203
|
readonly sort: import("@angular/core").ModelSignal<DataTableSortState>;
|
|
2706
3204
|
/** Fires whenever the sort column or direction changes via header click. */
|
|
2707
3205
|
readonly sorted: import("@angular/core").OutputEmitterRef<DataTableSortState>;
|
|
2708
3206
|
/** Fires with the row's data when a body row is activated by click or Enter/Space while `clickable` is set. */
|
|
2709
3207
|
readonly rowActivate: import("@angular/core").OutputEmitterRef<T>;
|
|
3208
|
+
/**
|
|
3209
|
+
* Fires when a body row's context menu is requested: by right-click or long press,
|
|
3210
|
+
* or by Shift+F10 or the context-menu key with focus in the row. Call
|
|
3211
|
+
* `event.preventDefault()` when opening a menu of your own.
|
|
3212
|
+
*/
|
|
3213
|
+
readonly rowContextMenu: import("@angular/core").OutputEmitterRef<DataTableRowContextMenuEvent<T>>;
|
|
2710
3214
|
readonly noDataTemplate: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
|
|
2711
3215
|
/** Empty-state text, falling back to the active locale's translation. */
|
|
2712
3216
|
readonly resolvedNoDataText: import("@angular/core").Signal<string>;
|
|
3217
|
+
readonly placeholderRows: import("@angular/core").Signal<number[]>;
|
|
3218
|
+
private readonly bodyRowCount;
|
|
2713
3219
|
readonly hostClasses: import("@angular/core").Signal<{
|
|
2714
3220
|
[x: string]: boolean;
|
|
2715
3221
|
'ea-data-table--sticky': boolean;
|
|
@@ -2732,6 +3238,8 @@ export declare class DataTableComponent<T = Record<string, unknown>> {
|
|
|
2732
3238
|
isInert(row: T): boolean;
|
|
2733
3239
|
rowTabindex(row: T): number | null;
|
|
2734
3240
|
onRowActivate(row: T, event?: Event): void;
|
|
3241
|
+
onRowContextMenu(row: T, rowElement: HTMLElement, event: MouseEvent | KeyboardEvent): void;
|
|
3242
|
+
clearKeyboardRequest(): void;
|
|
2735
3243
|
onCellFocus(row: number, col: number): void;
|
|
2736
3244
|
onGridKeydown(event: KeyboardEvent): void;
|
|
2737
3245
|
private focusCell;
|
|
@@ -2822,6 +3330,16 @@ export declare class DataTableComponent<T = Record<string, unknown>> {
|
|
|
2822
3330
|
"required": false;
|
|
2823
3331
|
"isSignal": true;
|
|
2824
3332
|
};
|
|
3333
|
+
"loading": {
|
|
3334
|
+
"alias": "loading";
|
|
3335
|
+
"required": false;
|
|
3336
|
+
"isSignal": true;
|
|
3337
|
+
};
|
|
3338
|
+
"loadingRowCount": {
|
|
3339
|
+
"alias": "loadingRowCount";
|
|
3340
|
+
"required": false;
|
|
3341
|
+
"isSignal": true;
|
|
3342
|
+
};
|
|
2825
3343
|
"sort": {
|
|
2826
3344
|
"alias": "sort";
|
|
2827
3345
|
"required": false;
|
|
@@ -2831,6 +3349,7 @@ export declare class DataTableComponent<T = Record<string, unknown>> {
|
|
|
2831
3349
|
"sort": "sortChange";
|
|
2832
3350
|
"sorted": "sorted";
|
|
2833
3351
|
"rowActivate": "rowActivate";
|
|
3352
|
+
"rowContextMenu": "rowContextMenu";
|
|
2834
3353
|
}, ["noDataTemplate"], ["ea-paginator"], true, never>;
|
|
2835
3354
|
}
|
|
2836
3355
|
/** Visual size of each digit cell. */
|
|
@@ -3234,6 +3753,10 @@ export type DialogWidth = EaWidth;
|
|
|
3234
3753
|
* `--ea-dialog-body-padding`, and `--ea-dialog-status-padding`; an
|
|
3235
3754
|
* edge-to-edge media surface zeroes the inset, radius, and paddings.
|
|
3236
3755
|
*
|
|
3756
|
+
* The first dialog rendered by a component opened through `DialogService`
|
|
3757
|
+
* answers to its `DialogRef`: it opens as soon as it renders, and a dismissal
|
|
3758
|
+
* closes the ref with `undefined`.
|
|
3759
|
+
*
|
|
3237
3760
|
* Specs running under jsdom need `installNativeDialogShim()` from
|
|
3238
3761
|
* `@eagami/ui/testing` before opening one.
|
|
3239
3762
|
*/
|
|
@@ -3246,6 +3769,7 @@ export declare class DialogComponent implements AfterContentChecked {
|
|
|
3246
3769
|
private readonly press;
|
|
3247
3770
|
private readonly scrollLock;
|
|
3248
3771
|
private holdsScroll;
|
|
3772
|
+
private boundRef;
|
|
3249
3773
|
readonly width: import("@angular/core").InputSignal<EaWidth>;
|
|
3250
3774
|
/**
|
|
3251
3775
|
* Modal by default: shown via `showModal()`, with the backdrop overlay and
|
|
@@ -3289,6 +3813,7 @@ export declare class DialogComponent implements AfterContentChecked {
|
|
|
3289
3813
|
protected readonly hasHeader: import("@angular/core").WritableSignal<boolean>;
|
|
3290
3814
|
ngAfterContentChecked(): void;
|
|
3291
3815
|
constructor();
|
|
3816
|
+
private closeSurface;
|
|
3292
3817
|
private holdScroll;
|
|
3293
3818
|
private dropScroll;
|
|
3294
3819
|
handleClose(): void;
|
|
@@ -3357,6 +3882,64 @@ export declare class DialogComponent implements AfterContentChecked {
|
|
|
3357
3882
|
"closeRequested": "closeRequested";
|
|
3358
3883
|
}, never, ["[slot=header]", "*", "[slot=status]", "[slot=footer]"], true, never>;
|
|
3359
3884
|
}
|
|
3885
|
+
/**
|
|
3886
|
+
* Handle on one dialog opened through `DialogService`. The component it opened
|
|
3887
|
+
* injects it to close with an answer, which settles `result` for whoever
|
|
3888
|
+
* opened it; a dismissal (Escape, the backdrop, the close button) closes it
|
|
3889
|
+
* with `undefined`. Construct one directly to stand in for the service in a
|
|
3890
|
+
* spec.
|
|
3891
|
+
*/
|
|
3892
|
+
export declare class DialogRef<R = unknown> {
|
|
3893
|
+
private readonly isClosed;
|
|
3894
|
+
private settler;
|
|
3895
|
+
/** Whether the dialog has closed. */
|
|
3896
|
+
readonly closed: Signal<boolean>;
|
|
3897
|
+
/**
|
|
3898
|
+
* Settles when the dialog closes: with the value passed to `close`, or with
|
|
3899
|
+
* `undefined` when it was dismissed.
|
|
3900
|
+
*/
|
|
3901
|
+
readonly result: Promise<R | undefined>;
|
|
3902
|
+
/** Closes the dialog and settles `result` with `value`. Only the first call has any effect. */
|
|
3903
|
+
close(value?: R): void;
|
|
3904
|
+
}
|
|
3905
|
+
/** Options for {@link DialogService.open}. */
|
|
3906
|
+
export interface DialogOptions {
|
|
3907
|
+
/** Values for the component's inputs, keyed by input name and set before it first renders. */
|
|
3908
|
+
inputs?: Readonly<Record<string, unknown>>;
|
|
3909
|
+
/**
|
|
3910
|
+
* Injector the component resolves its dependencies through, such as the
|
|
3911
|
+
* opener's own so providers scoped to it reach the dialog. Defaults to the
|
|
3912
|
+
* application's root injector.
|
|
3913
|
+
*/
|
|
3914
|
+
injector?: Injector;
|
|
3915
|
+
}
|
|
3916
|
+
/**
|
|
3917
|
+
* Opens dialogs from code. `open` renders a component at the end of `<body>`
|
|
3918
|
+
* and returns its {@link DialogRef}. The component lays out its own
|
|
3919
|
+
* `<ea-dialog>`, which shows itself straight away and closes the ref with
|
|
3920
|
+
* `undefined` on any dismissal, and injects the ref to close it with an
|
|
3921
|
+
* answer. Closing the ref takes the component down and hands focus back to
|
|
3922
|
+
* wherever it was when the dialog opened. A dialog opened while another is up
|
|
3923
|
+
* stacks on top of it.
|
|
3924
|
+
*
|
|
3925
|
+
* On the server nothing is rendered and the ref closes at once.
|
|
3926
|
+
*/
|
|
3927
|
+
export declare class DialogService {
|
|
3928
|
+
private readonly appRef;
|
|
3929
|
+
private readonly document;
|
|
3930
|
+
private readonly injector;
|
|
3931
|
+
private readonly isBrowser;
|
|
3932
|
+
private readonly openDialogs;
|
|
3933
|
+
/** Dialogs currently open, oldest first. */
|
|
3934
|
+
readonly dialogs: Signal<readonly DialogRef<unknown>[]>;
|
|
3935
|
+
constructor();
|
|
3936
|
+
/** Opens `component` as a dialog and returns its ref, whose `result` settles when it closes. */
|
|
3937
|
+
open<R = unknown>(component: Type<unknown>, options?: DialogOptions): DialogRef<R>;
|
|
3938
|
+
/** Closes every open dialog, newest first, settling each `result` with `undefined`. */
|
|
3939
|
+
closeAll(): void;
|
|
3940
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DialogService, never>;
|
|
3941
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
3942
|
+
}
|
|
3360
3943
|
/** Orientation of the divider rule. */
|
|
3361
3944
|
export type DividerOrientation = 'horizontal' | 'vertical';
|
|
3362
3945
|
/**
|
|
@@ -4973,126 +5556,22 @@ export declare class LineChartComponent {
|
|
|
4973
5556
|
"alias": "animationDuration";
|
|
4974
5557
|
"required": false;
|
|
4975
5558
|
"isSignal": true;
|
|
4976
|
-
};
|
|
4977
|
-
"formatValue": {
|
|
4978
|
-
"alias": "formatValue";
|
|
4979
|
-
"required": false;
|
|
4980
|
-
"isSignal": true;
|
|
4981
|
-
};
|
|
4982
|
-
"ariaLabel": {
|
|
4983
|
-
"alias": "aria-label";
|
|
4984
|
-
"required": false;
|
|
4985
|
-
"isSignal": true;
|
|
4986
|
-
};
|
|
4987
|
-
}, {
|
|
4988
|
-
"pointClick": "pointClick";
|
|
4989
|
-
"activePointChange": "activePointChange";
|
|
4990
|
-
"visibleRangeChange": "visibleRangeChange";
|
|
4991
|
-
}, never, never, true, never>;
|
|
4992
|
-
}
|
|
4993
|
-
/** Placement of the menu list relative to its trigger. */
|
|
4994
|
-
export type MenuPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';
|
|
4995
|
-
/** Visual size of the menu, shared by all of its items. */
|
|
4996
|
-
export type MenuSize = EaSize;
|
|
4997
|
-
/**
|
|
4998
|
-
* Popup action menu attached to any focusable element via the
|
|
4999
|
-
* `[eaMenuTrigger]` directive. Supports keyboard navigation
|
|
5000
|
-
* (arrow keys, Home/End), closes on outside click or Escape, and restores
|
|
5001
|
-
* focus to the trigger on close. Positioning, dismissal, and SSR-safe scroll
|
|
5002
|
-
* handling are provided by `<ea-popover>`.
|
|
5003
|
-
*/
|
|
5004
|
-
export declare class MenuComponent {
|
|
5005
|
-
private readonly injector;
|
|
5006
|
-
private readonly i18n;
|
|
5007
|
-
private readonly listEl;
|
|
5008
|
-
readonly placement: import("@angular/core").InputSignal<MenuPlacement>;
|
|
5009
|
-
/** Visual size of the menu; every item inherits it. */
|
|
5010
|
-
readonly size: import("@angular/core").InputSignal<EaSize>;
|
|
5011
|
-
/** Max height of the scrollable list as a CSS length; tall menus scroll past it. */
|
|
5012
|
-
readonly maxHeight: import("@angular/core").InputSignal<string>;
|
|
5013
|
-
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
5014
|
-
readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
|
|
5015
|
-
readonly id: import("@angular/core").InputSignal<string>;
|
|
5016
|
-
/** Accessible label for the menu, falling back to the active locale. */
|
|
5017
|
-
readonly resolvedAriaLabel: import("@angular/core").Signal<string>;
|
|
5018
|
-
readonly open: import("@angular/core").ModelSignal<boolean>;
|
|
5019
|
-
/** Fires when the menu opens. */
|
|
5020
|
-
readonly opened: import("@angular/core").OutputEmitterRef<void>;
|
|
5021
|
-
/** Fires when the menu closes. */
|
|
5022
|
-
readonly closed: import("@angular/core").OutputEmitterRef<void>;
|
|
5023
|
-
/** Trigger element currently anchoring the menu. Signal-typed so `<ea-popover>` reacts when it changes. */
|
|
5024
|
-
protected readonly triggerEl: import("@angular/core").WritableSignal<HTMLElement | undefined>;
|
|
5025
|
-
readonly activeItemId: import("@angular/core").WritableSignal<string | null>;
|
|
5026
|
-
constructor();
|
|
5027
|
-
/** Toggles the menu open state, anchoring it to the given trigger element. */
|
|
5028
|
-
toggleAt(triggerEl: HTMLElement): void;
|
|
5029
|
-
/** Opens the menu anchored to the given trigger element and focuses the first item. */
|
|
5030
|
-
openAt(triggerEl: HTMLElement): void;
|
|
5031
|
-
/**
|
|
5032
|
-
* Closes the menu if it is open. Pass `restoreFocus: true` to return focus
|
|
5033
|
-
* to the trigger element (used when closing via Escape or item activation;
|
|
5034
|
-
* not used on outside click, where the user has chosen a new focus target).
|
|
5035
|
-
*/
|
|
5036
|
-
close(restoreFocus?: boolean): void;
|
|
5037
|
-
/** Called by `<ea-popover>` when the user clicks outside the menu. */
|
|
5038
|
-
onPopoverCloseRequested(): void;
|
|
5039
|
-
private getEnabledItems;
|
|
5040
|
-
/**
|
|
5041
|
-
* `preventScroll: true` is critical here. The menu list is `position: fixed`
|
|
5042
|
-
* but its DOM ancestor is whatever element hosts the menu (often a sticky
|
|
5043
|
-
* header). When `.focus()` is called without `preventScroll`, Chromium uses
|
|
5044
|
-
* the focused element's DOM-tree position (inside the sticky ancestor) rather
|
|
5045
|
-
* than its rendered fixed position to decide whether to scroll, which on a
|
|
5046
|
-
* scrolled page nudges the document up by a few pixels per open, until the
|
|
5047
|
-
* trigger reaches the top edge. The same guard applies to keyboard navigation
|
|
5048
|
-
* and restoring focus on close.
|
|
5049
|
-
*/
|
|
5050
|
-
private focusFirstItem;
|
|
5051
|
-
private focusItem;
|
|
5052
|
-
onKeydown(event: KeyboardEvent): void;
|
|
5053
|
-
onEscape(event: Event): void;
|
|
5054
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<MenuComponent, never>;
|
|
5055
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MenuComponent, "ea-menu", never, {
|
|
5056
|
-
"placement": {
|
|
5057
|
-
"alias": "placement";
|
|
5058
|
-
"required": false;
|
|
5059
|
-
"isSignal": true;
|
|
5060
|
-
};
|
|
5061
|
-
"size": {
|
|
5062
|
-
"alias": "size";
|
|
5063
|
-
"required": false;
|
|
5064
|
-
"isSignal": true;
|
|
5065
|
-
};
|
|
5066
|
-
"maxHeight": {
|
|
5067
|
-
"alias": "maxHeight";
|
|
5068
|
-
"required": false;
|
|
5069
|
-
"isSignal": true;
|
|
5070
|
-
};
|
|
5071
|
-
"disabled": {
|
|
5072
|
-
"alias": "disabled";
|
|
5073
|
-
"required": false;
|
|
5074
|
-
"isSignal": true;
|
|
5075
|
-
};
|
|
5076
|
-
"ariaLabel": {
|
|
5077
|
-
"alias": "aria-label";
|
|
5078
|
-
"required": false;
|
|
5079
|
-
"isSignal": true;
|
|
5080
|
-
};
|
|
5081
|
-
"id": {
|
|
5082
|
-
"alias": "id";
|
|
5559
|
+
};
|
|
5560
|
+
"formatValue": {
|
|
5561
|
+
"alias": "formatValue";
|
|
5083
5562
|
"required": false;
|
|
5084
5563
|
"isSignal": true;
|
|
5085
5564
|
};
|
|
5086
|
-
"
|
|
5087
|
-
"alias": "
|
|
5565
|
+
"ariaLabel": {
|
|
5566
|
+
"alias": "aria-label";
|
|
5088
5567
|
"required": false;
|
|
5089
5568
|
"isSignal": true;
|
|
5090
5569
|
};
|
|
5091
5570
|
}, {
|
|
5092
|
-
"
|
|
5093
|
-
"
|
|
5094
|
-
"
|
|
5095
|
-
}, never,
|
|
5571
|
+
"pointClick": "pointClick";
|
|
5572
|
+
"activePointChange": "activePointChange";
|
|
5573
|
+
"visibleRangeChange": "visibleRangeChange";
|
|
5574
|
+
}, never, never, true, never>;
|
|
5096
5575
|
}
|
|
5097
5576
|
/** Visual style of a menu item; `danger` for destructive actions. */
|
|
5098
5577
|
export type MenuItemVariant = 'default' | 'danger';
|
|
@@ -5148,252 +5627,6 @@ export declare class MenuTriggerDirective {
|
|
|
5148
5627
|
};
|
|
5149
5628
|
}, {}, never, never, true, never>;
|
|
5150
5629
|
}
|
|
5151
|
-
/**
|
|
5152
|
-
* Placement of the popover relative to its anchor. Each placement names the
|
|
5153
|
-
* side of the anchor the popover attaches to, optionally followed by a corner
|
|
5154
|
-
* suffix (`-start` or `-end`) that decides the alignment along the perpendicular
|
|
5155
|
-
* axis. The plain side names (`top`, `bottom`, `left`, `right`) centre the
|
|
5156
|
-
* popover on that axis.
|
|
5157
|
-
*/
|
|
5158
|
-
export type PopoverPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right';
|
|
5159
|
-
export interface PopoverPositionResult {
|
|
5160
|
-
/** Top coordinate in viewport (px); pairs with `position: fixed`. */
|
|
5161
|
-
readonly top: number;
|
|
5162
|
-
/** Left coordinate in viewport (px). */
|
|
5163
|
-
readonly left: number;
|
|
5164
|
-
/** Width hint when the popover should match the anchor's width. */
|
|
5165
|
-
readonly width?: number;
|
|
5166
|
-
/** The anchor's measured width, for a caller capping the popover against it. */
|
|
5167
|
-
readonly anchorWidth: number;
|
|
5168
|
-
/** Effective placement after any flip logic ran. */
|
|
5169
|
-
readonly placement: PopoverPlacement;
|
|
5170
|
-
}
|
|
5171
|
-
export interface PopoverPositionOptions {
|
|
5172
|
-
readonly placement: PopoverPlacement;
|
|
5173
|
-
/** Gap in px between the anchor and the popover. Default 4. */
|
|
5174
|
-
readonly offset?: number;
|
|
5175
|
-
/** Flip to the opposite side when the requested side overflows the viewport. Default true. */
|
|
5176
|
-
readonly flip?: boolean;
|
|
5177
|
-
/** Clamp inside the viewport when the popover still overflows after any flip. Default true. */
|
|
5178
|
-
readonly clamp?: boolean;
|
|
5179
|
-
/** Margin from the viewport edge in px when clamping. Default 8. */
|
|
5180
|
-
readonly margin?: number;
|
|
5181
|
-
/** Set the popover's width to match the anchor's. Useful for dropdown-style menus. */
|
|
5182
|
-
readonly matchAnchorWidth?: boolean;
|
|
5183
|
-
/** Right-to-left context. Swaps `-start`/`-end` alignment so they track the reading direction. */
|
|
5184
|
-
readonly rtl?: boolean;
|
|
5185
|
-
}
|
|
5186
|
-
interface Rect {
|
|
5187
|
-
readonly width: number;
|
|
5188
|
-
readonly height: number;
|
|
5189
|
-
}
|
|
5190
|
-
interface AnchorRect extends Rect {
|
|
5191
|
-
readonly top: number;
|
|
5192
|
-
readonly bottom: number;
|
|
5193
|
-
readonly left: number;
|
|
5194
|
-
readonly right: number;
|
|
5195
|
-
}
|
|
5196
|
-
interface Viewport {
|
|
5197
|
-
readonly width: number;
|
|
5198
|
-
readonly height: number;
|
|
5199
|
-
}
|
|
5200
|
-
/**
|
|
5201
|
-
* Computes the viewport-space top/left for a popover anchored to `anchorRect`,
|
|
5202
|
-
* applying optional flip-on-overflow and edge-clamp logic. Pure function, no
|
|
5203
|
-
* DOM access. Both `<ea-popover>` and `[eaTooltip]` consume this.
|
|
5204
|
-
*
|
|
5205
|
-
* @param anchorRect The anchor element's `getBoundingClientRect()`.
|
|
5206
|
-
* @param popoverRect Width and height of the popover (post-render measurement).
|
|
5207
|
-
* @param viewport Viewport dimensions (`window.innerWidth/Height`).
|
|
5208
|
-
* @param options Placement and behavior flags.
|
|
5209
|
-
*/
|
|
5210
|
-
export declare function computePopoverPosition(anchorRect: AnchorRect, popoverRect: Rect, viewport: Viewport, options: PopoverPositionOptions): PopoverPositionResult;
|
|
5211
|
-
/** ARIA role to apply to the popover surface. */
|
|
5212
|
-
export type PopoverRole = 'menu' | 'listbox' | 'dialog' | 'tooltip' | 'grid';
|
|
5213
|
-
/**
|
|
5214
|
-
* How the popover should respond to scroll / resize events while open.
|
|
5215
|
-
*
|
|
5216
|
-
* - `reposition` (default): re-measure the anchor and update the popover's
|
|
5217
|
-
* coordinates so it stays attached. Suitable for menus and tooltips.
|
|
5218
|
-
* - `close`: request close. Suitable for dropdown lists and the colour-picker
|
|
5219
|
-
* popover, where re-tracking a tall popover during a scroll feels intrusive.
|
|
5220
|
-
* - `ignore`: do nothing. The popover stays at its initial coordinates and
|
|
5221
|
-
* may visually detach from a scrolling anchor; useful when the anchor is
|
|
5222
|
-
* guaranteed not to move (e.g. inside a non-scrolling region).
|
|
5223
|
-
*/
|
|
5224
|
-
export type PopoverScrollBehavior = 'reposition' | 'close' | 'ignore';
|
|
5225
|
-
/** Width cap for a popover surface: px, or the anchor's own width. */
|
|
5226
|
-
export type PopoverMaxWidth = number | 'anchor';
|
|
5227
|
-
/**
|
|
5228
|
-
* Floating-element primitive. Renders projected content as `position: fixed`
|
|
5229
|
-
* anchored to an external element, with flip-on-overflow, viewport clamping,
|
|
5230
|
-
* outside-click and Escape dismissal, and SSR-safe scroll / resize handling.
|
|
5231
|
-
*
|
|
5232
|
-
* The primitive is intentionally low-level: a parent component drives the
|
|
5233
|
-
* `[open]` state and listens for `(closeRequested)` to mirror it back. Internal
|
|
5234
|
-
* library components (`<ea-menu>`, `<ea-dropdown>`, `<ea-color-picker>`,
|
|
5235
|
-
* `<ea-date-picker>`, `[eaTooltip]`) compose on top of it; downstream apps can
|
|
5236
|
-
* use it directly to build their own popover-based UI.
|
|
5237
|
-
*
|
|
5238
|
-
* @example
|
|
5239
|
-
* ```html
|
|
5240
|
-
* <button #trigger (click)="open.set(!open())">Open</button>
|
|
5241
|
-
* <ea-popover [anchor]="trigger" [open]="open()" (closeRequested)="open.set(false)">
|
|
5242
|
-
* <div>Popover content</div>
|
|
5243
|
-
* </ea-popover>
|
|
5244
|
-
* ```
|
|
5245
|
-
*/
|
|
5246
|
-
export declare class PopoverComponent {
|
|
5247
|
-
private readonly destroyRef;
|
|
5248
|
-
private readonly press;
|
|
5249
|
-
private readonly surfaceEl;
|
|
5250
|
-
/** Anchor element the popover positions itself against. */
|
|
5251
|
-
readonly anchor: import("@angular/core").InputSignal<HTMLElement | ElementRef<HTMLElement> | undefined>;
|
|
5252
|
-
/** Whether the popover is currently open. */
|
|
5253
|
-
readonly open: import("@angular/core").InputSignal<boolean>;
|
|
5254
|
-
/** Where the popover attaches relative to the anchor. */
|
|
5255
|
-
readonly placement: import("@angular/core").InputSignal<PopoverPlacement>;
|
|
5256
|
-
/** ARIA role applied to the popover surface. */
|
|
5257
|
-
readonly role: import("@angular/core").InputSignal<PopoverRole>;
|
|
5258
|
-
/** Accessible label. Falls back to nothing; consumers should provide one when no visible heading is in the popover. */
|
|
5259
|
-
readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
|
|
5260
|
-
/** Id of the element that labels the popover surface, forwarded as `aria-labelledby`. */
|
|
5261
|
-
readonly ariaLabelledby: import("@angular/core").InputSignal<string | undefined>;
|
|
5262
|
-
/** Keep Tab and Shift+Tab cycling within the surface while open (dialog pattern). */
|
|
5263
|
-
readonly trapFocus: import("@angular/core").InputSignal<boolean>;
|
|
5264
|
-
/** DOM id for the surface so trigger elements can reference it via aria-controls. */
|
|
5265
|
-
readonly surfaceId: import("@angular/core").InputSignal<string>;
|
|
5266
|
-
/**
|
|
5267
|
-
* Gap in px between the anchor and the popover. Defaults to 2 so an open panel
|
|
5268
|
-
* clears the anchor's active focus ring instead of sitting flush over it.
|
|
5269
|
-
*/
|
|
5270
|
-
readonly offset: import("@angular/core").InputSignal<number>;
|
|
5271
|
-
/** Flip to the opposite side when the requested side overflows the viewport. */
|
|
5272
|
-
readonly flip: import("@angular/core").InputSignal<boolean>;
|
|
5273
|
-
/** Clamp the popover inside the viewport when it would otherwise overflow. */
|
|
5274
|
-
readonly clamp: import("@angular/core").InputSignal<boolean>;
|
|
5275
|
-
/** Set the popover's `min-width` to match the anchor's width (dropdown pattern). */
|
|
5276
|
-
readonly matchAnchorWidth: import("@angular/core").InputSignal<boolean>;
|
|
5277
|
-
/**
|
|
5278
|
-
* Widest the surface may grow: a px value, or `anchor` to cap it at the
|
|
5279
|
-
* anchor's own width so long content truncates instead of widening the panel.
|
|
5280
|
-
*/
|
|
5281
|
-
readonly maxWidth: import("@angular/core").InputSignal<PopoverMaxWidth | undefined>;
|
|
5282
|
-
/** Close on click outside the popover and the anchor. */
|
|
5283
|
-
readonly closeOnOutsideClick: import("@angular/core").InputSignal<boolean>;
|
|
5284
|
-
/** Close on Escape. */
|
|
5285
|
-
readonly closeOnEscape: import("@angular/core").InputSignal<boolean>;
|
|
5286
|
-
/** What to do on scroll / resize while open. */
|
|
5287
|
-
readonly scrollBehavior: import("@angular/core").InputSignal<PopoverScrollBehavior>;
|
|
5288
|
-
/** Requested close. The parent should mirror this into `[open]`. */
|
|
5289
|
-
readonly closeRequested: import("@angular/core").OutputEmitterRef<void>;
|
|
5290
|
-
private readonly position;
|
|
5291
|
-
private latched;
|
|
5292
|
-
/** True placement after flip, for class-based styling (e.g. arrow direction). */
|
|
5293
|
-
readonly effectivePlacement: import("@angular/core").Signal<PopoverPlacement>;
|
|
5294
|
-
/** Latches true once the post-rAF reposition has run, so the surface is
|
|
5295
|
-
* only revealed after its dimensions are guaranteed stable. Reset on close. */
|
|
5296
|
-
private readonly stable;
|
|
5297
|
-
/** True once the first `reposition()` has resolved a placement on a
|
|
5298
|
-
* laid-out surface. Drives the `--positioned` class. */
|
|
5299
|
-
readonly isPositioned: import("@angular/core").Signal<boolean>;
|
|
5300
|
-
/** Class list for the surface. Computed in TS so the placement key (with
|
|
5301
|
-
* its interpolated suffix) and the positioned modifier compose cleanly. */
|
|
5302
|
-
readonly surfaceClass: import("@angular/core").Signal<string>;
|
|
5303
|
-
/** Inline style applied to the surface element. */
|
|
5304
|
-
readonly surfaceStyle: import("@angular/core").Signal<Record<string, string>>;
|
|
5305
|
-
constructor();
|
|
5306
|
-
private resolveAnchor;
|
|
5307
|
-
private reposition;
|
|
5308
|
-
onDocumentClick(event: MouseEvent): void;
|
|
5309
|
-
onSurfaceKeydown(event: KeyboardEvent): void;
|
|
5310
|
-
onEscape(event: Event): void;
|
|
5311
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PopoverComponent, never>;
|
|
5312
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PopoverComponent, "ea-popover", never, {
|
|
5313
|
-
"anchor": {
|
|
5314
|
-
"alias": "anchor";
|
|
5315
|
-
"required": true;
|
|
5316
|
-
"isSignal": true;
|
|
5317
|
-
};
|
|
5318
|
-
"open": {
|
|
5319
|
-
"alias": "open";
|
|
5320
|
-
"required": false;
|
|
5321
|
-
"isSignal": true;
|
|
5322
|
-
};
|
|
5323
|
-
"placement": {
|
|
5324
|
-
"alias": "placement";
|
|
5325
|
-
"required": false;
|
|
5326
|
-
"isSignal": true;
|
|
5327
|
-
};
|
|
5328
|
-
"role": {
|
|
5329
|
-
"alias": "role";
|
|
5330
|
-
"required": false;
|
|
5331
|
-
"isSignal": true;
|
|
5332
|
-
};
|
|
5333
|
-
"ariaLabel": {
|
|
5334
|
-
"alias": "aria-label";
|
|
5335
|
-
"required": false;
|
|
5336
|
-
"isSignal": true;
|
|
5337
|
-
};
|
|
5338
|
-
"ariaLabelledby": {
|
|
5339
|
-
"alias": "aria-labelledby";
|
|
5340
|
-
"required": false;
|
|
5341
|
-
"isSignal": true;
|
|
5342
|
-
};
|
|
5343
|
-
"trapFocus": {
|
|
5344
|
-
"alias": "trapFocus";
|
|
5345
|
-
"required": false;
|
|
5346
|
-
"isSignal": true;
|
|
5347
|
-
};
|
|
5348
|
-
"surfaceId": {
|
|
5349
|
-
"alias": "surfaceId";
|
|
5350
|
-
"required": false;
|
|
5351
|
-
"isSignal": true;
|
|
5352
|
-
};
|
|
5353
|
-
"offset": {
|
|
5354
|
-
"alias": "offset";
|
|
5355
|
-
"required": false;
|
|
5356
|
-
"isSignal": true;
|
|
5357
|
-
};
|
|
5358
|
-
"flip": {
|
|
5359
|
-
"alias": "flip";
|
|
5360
|
-
"required": false;
|
|
5361
|
-
"isSignal": true;
|
|
5362
|
-
};
|
|
5363
|
-
"clamp": {
|
|
5364
|
-
"alias": "clamp";
|
|
5365
|
-
"required": false;
|
|
5366
|
-
"isSignal": true;
|
|
5367
|
-
};
|
|
5368
|
-
"matchAnchorWidth": {
|
|
5369
|
-
"alias": "matchAnchorWidth";
|
|
5370
|
-
"required": false;
|
|
5371
|
-
"isSignal": true;
|
|
5372
|
-
};
|
|
5373
|
-
"maxWidth": {
|
|
5374
|
-
"alias": "maxWidth";
|
|
5375
|
-
"required": false;
|
|
5376
|
-
"isSignal": true;
|
|
5377
|
-
};
|
|
5378
|
-
"closeOnOutsideClick": {
|
|
5379
|
-
"alias": "closeOnOutsideClick";
|
|
5380
|
-
"required": false;
|
|
5381
|
-
"isSignal": true;
|
|
5382
|
-
};
|
|
5383
|
-
"closeOnEscape": {
|
|
5384
|
-
"alias": "closeOnEscape";
|
|
5385
|
-
"required": false;
|
|
5386
|
-
"isSignal": true;
|
|
5387
|
-
};
|
|
5388
|
-
"scrollBehavior": {
|
|
5389
|
-
"alias": "scrollBehavior";
|
|
5390
|
-
"required": false;
|
|
5391
|
-
"isSignal": true;
|
|
5392
|
-
};
|
|
5393
|
-
}, {
|
|
5394
|
-
"closeRequested": "closeRequested";
|
|
5395
|
-
}, never, ["*"], true, never>;
|
|
5396
|
-
}
|
|
5397
5630
|
/** Visual size of the multi-select trigger. */
|
|
5398
5631
|
export type MultiSelectSize = EaSize;
|
|
5399
5632
|
/**
|