import { Event } from '@yandex-int/messenger.utils'; import type { RequestTransportCallback } from '@yandex-int/messenger.channels'; import * as IWidget from '../../types'; import { BaseUI } from '../Base'; import { WidgetEvent } from '../../libs/WidgetEvent/WidgetEvent'; import type { Props } from './template'; import type { Context } from '../../libs/Templater'; import { BehaviorStrategies } from '../strategies'; import { calculatePosition } from '../../components/popup/utils'; import { PageScrollController } from '../../components/popup'; /** * @interface */ export interface PopupProps { /** * Мобильный вид виджета. Если не задан, вычисляется автоматически */ isMobile?: boolean; /** * Элемент от которого позиционируется попап * * @knob boolean */ popupTargetNode?: HTMLElement; /** * Используется вместе с popupTargetNode для позиции появления попапа от элемента. * Default bottom-left */ popupTargetPosition?: IWidget.TargetPosition; /** * Если `true`, полупрозрачный слой для затемнения фона будет виден * Слой не отключает скролл страницы, включать/отключать скролл можно в событии `onToggled` */ paranjaVisible?: boolean; /** * Пользовательская функция расчета позиции попапа */ calculatePosition?: typeof calculatePosition; /** * Если `true`, то при клике вне области попапа, попап будет закрываться */ autocloseable?: boolean; /** * Стратегии открытия * * @knob select iframe, detached */ strategies?: BehaviorStrategies[]; /** * Установить кастомный контроллер скролла страницы * Нужен для управления поведением скролла страницы при открытии попапа * Контроллер по умолчанию отключает скролл страницы в мобильном режиме */ pageScrollController?: PageScrollController; } export interface OnToggledEvent { /** * Попап скрыт */ hidden: boolean; } export interface PopupContextProvider

{ (widget: IWidget.WidgetProxy, props: P): Partial; } export declare class PopupBase

extends BaseUI { /** * @doc * Настройки интерфейса * @docref template=members_annotation */ protected props: P; private strategies; private currentStrategyName; private behavior; /** * @doc Скрыт ли попап * @doctemplate members_annotation */ hidden: boolean; /** * @doc Вызывается при открытии/закрытии попапа * @doctemplate members_annotation */ readonly onToggled: Event; constructor(template: (context: Context) => string, contextProvider: PopupContextProvider, /** * @doc * Настройки интерфейса * @docref template=members_annotation */ props: P); getChildWindowTransport(params: IWidget.GetChildWindowTransportParams, callback: RequestTransportCallback): void; LCReady(): void; LCErrorCritical(event: WidgetEvent<{ error: Error; }>): void; LCHidden(): void; LCShown(): void; protected hidePopup(): void; /** * Раскрывает попап. * Не должен быть публичным, так как открывать попап надо исключительно виджетом (shotChatList | showChat) */ protected showPopup(): void; protected showNewWindowRequest(): void; private getStrategyByName; private setBehavior; protected handleNewWindowClick(): void; }