You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					86 lines
				
				2.6 KiB
			
		
		
			
		
	
	
					86 lines
				
				2.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								import * as PopperJS from '@popperjs/core';
							 | 
						||
| 
								 | 
							
								import * as React from 'react';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Utility type
							 | 
						||
| 
								 | 
							
								type UnionWhere<U, M> = U extends M ? U : never;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								interface ManagerProps {
							 | 
						||
| 
								 | 
							
								  children: React.ReactNode;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export class Manager extends React.Component<ManagerProps, {}> {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export type RefHandler = (ref: HTMLElement | null) => void;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								interface ReferenceChildrenProps {
							 | 
						||
| 
								 | 
							
								  // React refs are supposed to be contravariant (allows a more general type to be passed rather than a more specific one)
							 | 
						||
| 
								 | 
							
								  // However, Typescript currently can't infer that fact for refs
							 | 
						||
| 
								 | 
							
								  // See https://github.com/microsoft/TypeScript/issues/30748 for more information
							 | 
						||
| 
								 | 
							
								  ref: React.Ref<any>;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								interface ReferenceProps {
							 | 
						||
| 
								 | 
							
								  children: (props: ReferenceChildrenProps) => React.ReactNode;
							 | 
						||
| 
								 | 
							
								  innerRef?: React.Ref<any>;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export class Reference extends React.Component<ReferenceProps, {}> {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface PopperArrowProps {
							 | 
						||
| 
								 | 
							
								  ref: React.Ref<any>;
							 | 
						||
| 
								 | 
							
								  style: React.CSSProperties;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface PopperChildrenProps {
							 | 
						||
| 
								 | 
							
								  ref: React.Ref<any>;
							 | 
						||
| 
								 | 
							
								  style: React.CSSProperties;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  placement: PopperJS.Placement;
							 | 
						||
| 
								 | 
							
								  isReferenceHidden?: boolean;
							 | 
						||
| 
								 | 
							
								  hasPopperEscaped?: boolean;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  update: () => Promise<null | Partial<PopperJS.State>>;
							 | 
						||
| 
								 | 
							
								  forceUpdate: () => Partial<PopperJS.State>;
							 | 
						||
| 
								 | 
							
								  arrowProps: PopperArrowProps;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type StrictModifierNames = NonNullable<PopperJS.StrictModifiers['name']>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export type StrictModifier<
							 | 
						||
| 
								 | 
							
								  Name extends StrictModifierNames = StrictModifierNames
							 | 
						||
| 
								 | 
							
								> = UnionWhere<PopperJS.StrictModifiers, { name?: Name }>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export type Modifier<
							 | 
						||
| 
								 | 
							
								  Name,
							 | 
						||
| 
								 | 
							
								  Options extends object = object
							 | 
						||
| 
								 | 
							
								> = Name extends StrictModifierNames
							 | 
						||
| 
								 | 
							
								  ? StrictModifier<Name>
							 | 
						||
| 
								 | 
							
								  : Partial<PopperJS.Modifier<Name, Options>>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export interface PopperProps<Modifiers> {
							 | 
						||
| 
								 | 
							
								  children: (props: PopperChildrenProps) => React.ReactNode;
							 | 
						||
| 
								 | 
							
								  innerRef?: React.Ref<any>;
							 | 
						||
| 
								 | 
							
								  modifiers?: ReadonlyArray<Modifier<Modifiers>>;
							 | 
						||
| 
								 | 
							
								  placement?: PopperJS.Placement;
							 | 
						||
| 
								 | 
							
								  strategy?: PopperJS.PositioningStrategy;
							 | 
						||
| 
								 | 
							
								  referenceElement?: HTMLElement | PopperJS.VirtualElement;
							 | 
						||
| 
								 | 
							
								  onFirstUpdate?: (state: Partial<PopperJS.State>) => void;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								export class Popper<Modifiers> extends React.Component<
							 | 
						||
| 
								 | 
							
								  PopperProps<Modifiers>,
							 | 
						||
| 
								 | 
							
								  {}
							 | 
						||
| 
								 | 
							
								> {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function usePopper<Modifiers>(
							 | 
						||
| 
								 | 
							
								  referenceElement?: Element | PopperJS.VirtualElement | null,
							 | 
						||
| 
								 | 
							
								  popperElement?: HTMLElement | null,
							 | 
						||
| 
								 | 
							
								  options?: Omit<Partial<PopperJS.Options>, 'modifiers'> & {
							 | 
						||
| 
								 | 
							
								    createPopper?: typeof PopperJS.createPopper;
							 | 
						||
| 
								 | 
							
								    modifiers?: ReadonlyArray<Modifier<Modifiers>>;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								): {
							 | 
						||
| 
								 | 
							
								  styles: { [key: string]: React.CSSProperties };
							 | 
						||
| 
								 | 
							
								  attributes: { [key: string]: { [key: string]: string } | undefined };
							 | 
						||
| 
								 | 
							
								  state: PopperJS.State | null;
							 | 
						||
| 
								 | 
							
								  update: PopperJS.Instance['update'] | null;
							 | 
						||
| 
								 | 
							
								  forceUpdate: PopperJS.Instance['forceUpdate'] | null;
							 | 
						||
| 
								 | 
							
								};
							 |