UNPKG

@lark-project/ui-kit-plugin

Version:

Lark Project UI Kit Plugin

65 lines (64 loc) 2.73 kB
/** * Copyright (c) 2024 Lark Technologies Pte. Ltd. * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,provided that the above copyright notice and this permission notice appear in all copies. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ export interface IPortalPayload<Context = Record<string, any>, K extends keyof Context = keyof Context> { type: K; sessionId?: string; payload?: Context[K]; } export type IPortalDispatch = <DispatchContext extends IPortalPayload>(context: DispatchContext, cb?: (ret: any) => void) => Promise<void>; export type IPortalOnMessage = <Context = Record<string, any>, K extends keyof Context = keyof Context>(type: K, cb: (payload?: Context[K]) => void) => () => void; export interface IRect { height: number; bottom: number; left: number; right: number; top: number; width: number; x: number; y: number; } export interface IPortalEvent<Context = any> { payload: Context; } export interface ITargetListenerMap { bounding: IPortalEvent<{ rect: IRect; }>; clickOutSide: IPortalEvent<undefined>; hover: IPortalEvent<{ hovering: boolean; }>; viewportVisible: IPortalEvent<{ visible: boolean; }>; } export interface IPortalHandler { destroy: () => void; open: <Context extends Record<string, any>>(context?: Context) => Promise<void>; close: () => Promise<void>; inView: () => void; notInView: () => void; dispatch: IPortalDispatch; onMessage: IPortalOnMessage; addTargetListener: <K extends keyof ITargetListenerMap>(type: K, handler: (payload: ITargetListenerMap[K]) => void) => () => void; define: (funcMap: Record<string, () => (...args: any[]) => any>) => () => void; onDefine: (cb?: (funcList: Record<string, (...args: any[]) => any>) => void) => () => void; } export interface IPopupHandler { dispatch: IPortalDispatch; onMessage: IPortalOnMessage; define: (funcMap: Record<string, () => (...args: any[]) => any>) => () => void; onDefine: (cb?: (funcList: Record<string, (...args: any[]) => any>) => void) => () => void; destroy: () => void; }