UNPKG

4.56 kBTypeScriptView Raw
1import React, { ReactNode, Component } from 'react'
2import { PopperProps, PopperChildrenProps } from 'react-popper'
3import PopperJs from 'popper.js'
4
5declare enum TriggerType {
6 click = 0,
7 hover = 1,
8}
9interface ReactPopperProps {
10 /**
11 * 强制显示 popper 组件
12 *
13 * Force to show the popper
14 * */
15 forceShow?: boolean
16 /**
17 * 关联 dom 元素用于控制 popper 是否显示的事件
18 *
19 * Determine what event of reference element will make the popper show or hide
20 *
21 * Default: TriggerType.click
22 * */
23 trigger?: TriggerType
24 /**
25 * 延迟显示
26 *
27 * Delay to show
28 *
29 * Default: 0
30 * */
31 delayShow?: number
32 /**
33 * 延迟隐藏
34 *
35 * Delay to hide
36 *
37 * Default:
38 * If trigger === TriggerType.hover, default is 200
39 * Else default is 0
40 * */
41 delayHide?: number
42 className?: string
43 /**
44 * Popper 的位置
45 *
46 * Placement of popper
47 *
48 * Default: 'bottom-start'
49 * */
50 placement?: PopperProps['placement']
51 /**
52 * 关联元素
53 *
54 * Reference element
55 *
56 * Default: The parent element of the component element
57 * */
58 referenceRef?:
59 | PopperProps['referenceElement']
60 | (() => PopperProps['referenceElement'])
61 children?:
62 | ((
63 props: PopperChildrenProps & {
64 popperRef: ReactPopper
65 },
66 ) => ReactNode)
67 | ReactNode
68 /**
69 * Modifiers config of popperjs
70 * See in https://popper.js.org/popper-documentation.html#Popper.Defaults.modifiers
71 * */
72 modifiers?: PopperProps['modifiers']
73 /**
74 * Default: true
75 * */
76 positionFixed?: PopperProps['positionFixed']
77 /**
78 * Arrow 箭头的问题
79 *
80 * Position of arrow
81 *
82 * Default: 'middle'
83 * */
84 arrowPosition?: 'start' | 'end' | 'middle'
85 /**
86 * Arrow 箭头的偏移量
87 *
88 * Position offset of arrow
89 *
90 * Default: 15
91 * */
92 arrowOffset?: number
93 /**
94 * popper 显示/隐藏之前触发的回调,返回值确定是否应该显示或者隐藏
95 * */
96 shouldToggle?(
97 toVisible: boolean,
98 context: ReactPopper,
99 ev?: React.MouseEvent<any>,
100 ): boolean
101 /**
102 * popper 显示/隐藏之后触发的回调
103 *
104 * The callback triggered after popper's show/hide
105 * */
106 afterToggle?(visible: boolean, context: ReactPopper): void
107}
108
109declare class ReactPopper extends Component<
110 ReactPopperProps,
111 {
112 visible: boolean
113 isMounted: boolean
114 }
115> {
116 /**
117 * scheduleUpdate of popper
118 * */
119 scheduleUpdate: () => void
120 popperRef?: HTMLDivElement
121 arrowRef?: HTMLDivElement
122 timer: {
123 type: 'show' | 'hide' | ''
124 id: any
125 }
126 constructor(props: ReactPopperProps)
127 readonly referenceEl: PopperProps['referenceElement']
128 readonly isHover: boolean
129 readonly eventName: 'mouseover' | 'click'
130 readonly modifiers: PopperProps['modifiers']
131 readonly visible: boolean
132 readonly delayShow: number
133 readonly delayHide: number
134 readonly shouldToggle: NonNullable<ReactPopperProps['shouldToggle']>
135 /**
136 * Show the popper
137 *
138 * Use it outside the component:
139 *
140 * <ReactPopper ref={compInstance => ref = compInstance}></ReactPopper>
141 * ref.show()
142 * */
143 show: (ev?: React.MouseEvent<any, MouseEvent> | undefined) => void
144 /**
145 * Hide the popper
146 *
147 * Use it outside the component: same as method show
148 * */
149 hide: (ev?: React.MouseEvent<any, MouseEvent> | undefined) => void
150 /**
151 * Toggle the popper
152 *
153 * Use it outside the component: same as method show
154 * */
155 toggle: (ev?: React.MouseEvent<any, MouseEvent> | undefined) => void
156 componentDidMount(): void
157 componentWillUnmount(): void
158 render(): JSX.Element
159 private eventHandler
160 private afterToggle
161}
162
163declare function arrowModifier(
164 arrowPosition: ReactPopperProps['arrowPosition'],
165 arrowOffset: ReactPopperProps['arrowOffset'],
166 ...[dataObject, options]: Parameters<
167 NonNullable<NonNullable<PopperJs.Modifiers['arrow']>['fn']>
168 >
169): PopperJs.Data
170declare function convertPos(
171 data: PopperJs.Data,
172 type: 'left' | 'top',
173 arrowPosition?: ReactPopperProps['arrowPosition'],
174 arrowOffset?: ReactPopperProps['arrowOffset'],
175): number
176
177declare function containsOrEqual(
178 parent: PopperProps['referenceElement'],
179 target?: HTMLElement,
180): boolean
181declare function getReferenceEl(
182 popperRef?: HTMLElement,
183 referenceRef?:
184 | PopperProps['referenceElement']
185 | (() => PopperProps['referenceElement']),
186): PopperProps['referenceElement']
187
188export default ReactPopper
189export {
190 ReactPopperProps,
191 TriggerType,
192 arrowModifier,
193 containsOrEqual,
194 convertPos,
195 getReferenceEl,
196}
197
\No newline at end of file