>;
/**
* Toggles the floating panel. On open, portals the panel to document.body
* so it is never clipped by overflow:hidden, transform, or backdrop-filter
* on any ancestor element.
*/
togglePanel(event: MouseEvent): void;
closePanel(): void;
/** Close the floating panel when Escape is pressed while it is open. */
onEscape(): void;
/**
* Computes a viewport-safe position for the floating panel.
*
* Horizontal: right-aligned with the trigger's right edge, clamped so the
* panel never overflows the left viewport edge.
*
* Vertical (flip logic):
* - Prefer BELOW the trigger when there is at least 280 px of clearance.
* - Flip ABOVE when there is more space above than below.
* - `maxH` caps the panel so it never clips the opposite viewport edge.
*/
private _computePosition;
/**
* Appends a portal host to document.body and renders the
* #floatingPanel template into it via Angular's ViewContainerRef.
*
* The host div has no transform / filter / overflow, so position:fixed
* children are viewport-relative in all browsers.
*/
private _createPortal;
private _destroyPortal;
/**
* Recomputes panel position on every scroll / resize so the panel
* tracks the trigger button as the page scrolls.
* Uses requestAnimationFrame to throttle updates.
*/
private _attachScrollListener;
private _removeScrollListener;
private _attachClickOutside;
private _removeClickOutside;
/** The host's rows with every pending write laid over them. */
private _overlay;
/** Drop what the host's list has confirmed, or no longer contains. */
private _prune;
/**
* Record an optimistic write and return its `rollback` handle.
*
* ★ The handle undoes THIS write only, whenever it is called. It used to
* restore a whole-list snapshot, which is why it had to refuse once
* anything else had changed — and a refused rollback left the failed write
* on screen for good. Removing one entry from the overlay cannot undo
* anything else, so there is nothing to refuse. Once the host has
* confirmed (or dropped) the rows, the entry is gone and the call is a
* no-op.
*/
private _write;
/**
* The rows one press on `item` acts on: itself, and every row collapsed into
* it by a shared `dedupeKey` (`OF-10-M4`).
*
* ★★ THE ROW IS ONE EVENT, SO THE WRITE IS TOO. Acting on the survivor alone
* left its siblings behind: opening it kept them unread (a badge nothing
* visible explains), and dismissing it promoted the next sibling into its
* place — the notification the user just dismissed came straight back.
*/
private _groupOf;
onNotificationClick(item: NotificationItem): void;
/**
* A redacted row with its content removed rather than merely hidden.
*
* ★ `body`, `actor`, `target` and `actions` go with the title: an actor's
* name and a target's label are sentences about the same record, and an
* action button would post to a resource the user may not touch.
*/
private _redact;
/**
* The host's own row for this id.
*
* ★ The template holds the REDACTED copy, so an event emitted straight from
* it would hand the host back a row whose title this component invented.
* The host owns the real one — including `redacted: true`, which is what
* lets it decide what a click on such a row means.
*/
private _original;
onActionClick(item: NotificationItem, actionId: string, event: Event): void;
onDismiss(item: NotificationItem, event: Event): void;
onMarkAllRead(): void;
/**
* Hand the user to the full notifications surface.
*
* The panel closes on the way out: it is portalled to `document.body` at a
* fixed position, so one left open would hang over the page it just navigated
* to with nothing on that page able to dismiss it.
*/
onViewAll(): void;
/** Ask the host for the next page of notifications. */
onLoadMore(): void;
setTab(tab: string): void;
typeIcon(type: NotificationType): string;
typeColor(type: NotificationType): string;
typeAccent(type: NotificationType): string;
priorityColor(p: NotificationPriority): string;
initials(name: string): string;
timeAgo(iso: string): string;
dateLabel(iso: string): string;
static ɵfac: i0.ɵɵFactoryDeclaration;
static ɵcmp: i0.ɵɵComponentDeclaration;
}