import { Placement } from '@floating-ui/dom'; import { CSSResultArray, PropertyValues, TemplateResult } from 'lit'; import { LuzmoElement } from '../../utils/base'; import { LuzmoOverlay } from './overlay'; import { OverlayTriggerInteractions } from './overlay-types'; import './overlay'; export type OverlayContentTypes = 'click' | 'hover' | 'longpress'; type Combinations = T extends string ? T | `${T} ${Combinations>}` : never; export type TriggeredByType = Combinations; /** * @element overlay-trigger * * @slot trigger - The content that will trigger the various overlays * @slot hover-content - The content that will be displayed on hover * @slot click-content - The content that will be displayed on click * @slot longpress-content - The content that will be displayed on longpress * @slot longpress-describedby-descriptor - Description for longpress content * * @fires luzmo-opened - Announces that the overlay has been opened * @fires luzmo-closed - Announces that the overlay has been closed * * @attr {string} placement - The placement of the overlay relative to the trigger * @attr {number} offset - The distance between the overlay and the trigger * @attr {boolean} disabled - Whether the overlay trigger is disabled * @attr {string} receives-focus - How focus should be handled ('true'|'false'|'auto') */ export declare class LuzmoOverlayTrigger extends LuzmoElement { static get styles(): CSSResultArray; content: string; /** * Optional property to optimize performance and prevent race conditions. * * By explicitly declaring which content types are used (e.g. "click", "longpress hover"), * we can avoid: * 1. Extra renders from unnecessary slot reparenting * 2. Potential infinite render loops during content detection * 3. Race conditions during slot assignment * * By only returning overlay wrappers for explicitly declared content types, * we minimize unecessary DOM nodes, operations and ensure a more stable rendering behavior. */ triggeredBy?: TriggeredByType; /** * @type {"top" | "top-start" | "top-end" | "right" | "right-start" | "right-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end"} * @attr */ placement?: Placement; type?: OverlayTriggerInteractions; offset: number; open?: OverlayContentTypes; disabled: boolean; receivesFocus: 'true' | 'false' | 'auto'; private clickContent; private clickPlacement?; private longpressContent; private longpressPlacement?; private hoverContent; private hoverPlacement?; private targetContent; clickOverlayElement: LuzmoOverlay; longpressOverlayElement: LuzmoOverlay; hoverOverlayElement: LuzmoOverlay; private getAssignedElementsFromSlot; private handleTriggerContent; private handleSlotContent; private handleBeforetoggle; protected update(changes: PropertyValues): void; protected renderSlot(name: string): TemplateResult; protected renderClickOverlay(): TemplateResult; protected renderHoverOverlay(): TemplateResult; protected renderLongpressOverlay(): TemplateResult; protected render(): TemplateResult; protected updated(changedProperties: PropertyValues): void; protected getUpdateComplete(): Promise; } export {};