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 extends BaseUI ,
/**
* @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;
}