Skip to content

Commit

Permalink
feat: Add Flow types to Popper.js
Browse files Browse the repository at this point in the history
  • Loading branch information
Federico Zivolo committed Apr 8, 2018
1 parent 39b25dc commit e646f51
Show file tree
Hide file tree
Showing 2 changed files with 143 additions and 1 deletion.
142 changes: 142 additions & 0 deletions packages/popper/index.js.flow
@@ -0,0 +1,142 @@
declare module 'popper.js' {
declare type Position = 'top' | 'right' | 'bottom' | 'left';
declare type Placement =
| 'auto-start'
| 'auto'
| 'auto-end'
| 'top-start'
| 'top'
| 'top-end'
| 'right-start'
| 'right'
| 'right-end'
| 'bottom-end'
| 'bottom'
| 'bottom-start'
| 'left-end'
| 'left'
| 'left-start';

declare type Offset = {
top: number,
left: number,
width: number,
height: number,
position: Position,
};

declare type Boundary = 'scrollParent' | 'viewport' | 'window';

declare type Behavior = 'flip' | 'clockwise' | 'counterclockwise';

declare type Data = {
instance: Popper,
placement: Placement,
originalPlacement: Placement,
flipped: boolean,
hide: boolean,
arrowElement: Element,
styles: CSSStyleDeclaration,
arrowStyles: CSSStyleDeclaration,
boundaries: Object,
offsets: {
popper: Offset,
reference: Offset,
arrow: {
top: number,
left: number,
},
},
};

declare type ModifierFn = (data: Data, options: Object) => Data;

declare type BaseModifier = {
order?: number,
enabled?: boolean,
fn?: ModifierFn,
};

declare type Modifiers = {
shift?: BaseModifier,
offset?: BaseModifier & {
offset?: number | string,
},
preventOverflow?: BaseModifier & {
priority?: Position[],
padding?: number,
boundariesElement?: Boundary | Element,
escapeWithReference?: boolean,
},
keepTogether?: BaseModifier,
arrow?: BaseModifier & {
element?: string | Element | null,
},
flip?: BaseModifier & {
behavior?: Behavior | Position[],
padding?: number,
boundariesElement?: Boundary | Element,
},
inner?: BaseModifier,
hide?: BaseModifier,
applyStyle?: BaseModifier & {
onLoad?: Function,
gpuAcceleration?: boolean,
},
computeStyle?: BaseModifier & {
gpuAcceleration?: boolean,
x?: 'bottom' | 'top',
y?: 'left' | 'right',
},

[name: string]: (BaseModifier & { [string]: * }) | null,
};

declare type Options = {
placement?: Placement,
positionFixed?: boolean,
eventsEnabled?: boolean,
modifiers?: Modifiers,
removeOnDestroy?: boolean,

onCreate?: (data: Data) => void,

onUpdate?: (data: Data) => void,
};

declare var placements: Placement;

declare type ReferenceObject = {
+clientHeight: number,
+clientWidth: number,

getBoundingClientRect():
| ClientRect
| {
width: number,
height: number,
top: number,
right: number,
bottom: number,
left: number,
},
};

declare type Instance = {
destroy: () => void,
scheduleUpdate: () => void,
update: () => void,
};

declare class Popper {
static placements: Placement;

constructor(
reference: Element | ReferenceObject,
popper: Element,
options?: Options
): Instance;
}

declare module.exports: Class<Popper>;
}
2 changes: 1 addition & 1 deletion packages/popper/package.json
Expand Up @@ -32,7 +32,7 @@
"postpublish": "nuget-publish && ./bower-publish.sh",
"prebuild": "yarn lint",
"pretest": "yarn lint",
"build": "node bundle.js",
"build": "node bundle.js && cp index.flow.js dist/esm/poppper.js.flow",
"lint": "eslint .",
"test": "popper-karma",
"posttest": "tsc --project tests/types/tsconfig.json",
Expand Down

0 comments on commit e646f51

Please sign in to comment.