92 lines
2.7 KiB
Plaintext
92 lines
2.7 KiB
Plaintext
|
// @flow
|
||
|
export const top: 'top' = 'top';
|
||
|
export const bottom: 'bottom' = 'bottom';
|
||
|
export const right: 'right' = 'right';
|
||
|
export const left: 'left' = 'left';
|
||
|
export const auto: 'auto' = 'auto';
|
||
|
export type BasePlacement =
|
||
|
| typeof top
|
||
|
| typeof bottom
|
||
|
| typeof right
|
||
|
| typeof left;
|
||
|
export const basePlacements: Array<BasePlacement> = [top, bottom, right, left];
|
||
|
|
||
|
export const start: 'start' = 'start';
|
||
|
export const end: 'end' = 'end';
|
||
|
export type Variation = typeof start | typeof end;
|
||
|
|
||
|
export const clippingParents: 'clippingParents' = 'clippingParents';
|
||
|
export const viewport: 'viewport' = 'viewport';
|
||
|
export type Boundary = Element | Array<Element> | typeof clippingParents;
|
||
|
export type RootBoundary = typeof viewport | 'document';
|
||
|
|
||
|
export const popper: 'popper' = 'popper';
|
||
|
export const reference: 'reference' = 'reference';
|
||
|
export type Context = typeof popper | typeof reference;
|
||
|
|
||
|
export type VariationPlacement =
|
||
|
| 'top-start'
|
||
|
| 'top-end'
|
||
|
| 'bottom-start'
|
||
|
| 'bottom-end'
|
||
|
| 'right-start'
|
||
|
| 'right-end'
|
||
|
| 'left-start'
|
||
|
| 'left-end';
|
||
|
export type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';
|
||
|
export type ComputedPlacement = VariationPlacement | BasePlacement;
|
||
|
export type Placement = AutoPlacement | BasePlacement | VariationPlacement;
|
||
|
|
||
|
export const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(
|
||
|
(acc: Array<VariationPlacement>, placement: BasePlacement) =>
|
||
|
acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),
|
||
|
[]
|
||
|
);
|
||
|
export const placements: Array<Placement> = [...basePlacements, auto].reduce(
|
||
|
(
|
||
|
acc: Array<Placement>,
|
||
|
placement: BasePlacement | typeof auto
|
||
|
): Array<Placement> =>
|
||
|
acc.concat([
|
||
|
placement,
|
||
|
(`${placement}-${start}`: any),
|
||
|
(`${placement}-${end}`: any),
|
||
|
]),
|
||
|
[]
|
||
|
);
|
||
|
|
||
|
// modifiers that need to read the DOM
|
||
|
export const beforeRead: 'beforeRead' = 'beforeRead';
|
||
|
export const read: 'read' = 'read';
|
||
|
export const afterRead: 'afterRead' = 'afterRead';
|
||
|
// pure-logic modifiers
|
||
|
export const beforeMain: 'beforeMain' = 'beforeMain';
|
||
|
export const main: 'main' = 'main';
|
||
|
export const afterMain: 'afterMain' = 'afterMain';
|
||
|
// modifier with the purpose to write to the DOM (or write into a framework state)
|
||
|
export const beforeWrite: 'beforeWrite' = 'beforeWrite';
|
||
|
export const write: 'write' = 'write';
|
||
|
export const afterWrite: 'afterWrite' = 'afterWrite';
|
||
|
export const modifierPhases: Array<ModifierPhases> = [
|
||
|
beforeRead,
|
||
|
read,
|
||
|
afterRead,
|
||
|
beforeMain,
|
||
|
main,
|
||
|
afterMain,
|
||
|
beforeWrite,
|
||
|
write,
|
||
|
afterWrite,
|
||
|
];
|
||
|
|
||
|
export type ModifierPhases =
|
||
|
| typeof beforeRead
|
||
|
| typeof read
|
||
|
| typeof afterRead
|
||
|
| typeof beforeMain
|
||
|
| typeof main
|
||
|
| typeof afterMain
|
||
|
| typeof beforeWrite
|
||
|
| typeof write
|
||
|
| typeof afterWrite;
|