UNPKG

react-native-popover-view

Version:

A <Popover /> component for react-native iOS, Android, and Web

114 lines (97 loc) 2.44 kB
import { Animated, StyleProp, ViewStyle } from 'react-native'; import { ReactNode } from 'react'; // eslint-disable-next-line export enum Placement { TOP = 'top', RIGHT = 'right', BOTTOM = 'bottom', LEFT = 'left', AUTO = 'auto', FLOATING = 'floating', // deprecated CENTER = 'center' } // eslint-disable-next-line export enum Mode { JS_MODAL = 'js-modal', RN_MODAL = 'rn-modal', TOOLTIP = 'tooltip' } export type Insets = { left?: number; right?: number; bottom?: number; top?: number; } export interface ModalPopoverState { visible: boolean; } export type PopoverProps = { children?: ReactNode; isVisible?: boolean; // config placement?: Placement | Array<Placement>; animationConfig?: Partial<Animated.TimingAnimationConfig>; offset?: number; displayArea?: Rect; displayAreaInsets?: Insets; // style popoverStyle?: StyleProp<ViewStyle>; popoverShift?: { x?: number, y?: number }; backgroundStyle?: StyleProp<ViewStyle>; arrowShift?: number; arrowSize?: Size; statusBarTranslucent?: boolean; // lifecycle onOpenStart?: () => void; onOpenComplete?: () => void; onRequestClose?: () => void; onCloseStart?: () => void; onCloseComplete?: () => void; onPositionChange?: () => void; debug?: boolean; } export class Point { x: number; y: number; constructor(x: number, y: number) { this.x = x; this.y = y; } equals(b: Point): boolean { return Math.round(this.x) === Math.round(b.x) && Math.round(this.y) === Math.round(b.y); } } export class Size { width: number; height: number; constructor(width: number, height: number) { this.width = width; this.height = height; } equals(b: Size): boolean { return Math.round(this.width) === Math.round(b.width) && Math.round(this.height) === Math.round(b.height); } } export class Rect { x: number; y: number; width: number; height: number; constructor(x: number, y: number, width: number, height: number) { this.x = x; this.y = y; this.width = width; this.height = height; } equals(b: Rect): boolean { return (Math.round(this.x) === Math.round(b.x) && Math.round(this.y) === Math.round(b.y) && Math.round(this.width) === Math.round(b.width) && Math.round(this.height) === Math.round(b.height)); } static clone(rect: Rect): Rect { return new Rect(rect.x, rect.y, rect.width, rect.height); } }