react-staggered-grid
Version:
This is a React component that positions and arranges your items in a staggered grid
554 lines (547 loc) • 30.7 kB
TypeScript
import React, { ReactHTML, ReactNode, RefObject } from 'react';
declare enum StaggeredItemSpan {
/** Occupy one column */
Single = 1,
/** Occupy total columnCount as span */
Full = 99999
}
declare enum StaggeredAlignment {
/** Align items in the left*/
Start = 0,
/** Align items in the center */
Center = 1,
/** Align items to the right */
End = 2
}
interface PositionedItem {
/** width of the item calculated using itemSpan * columnWidth */
width: number;
/** translateX of the item */
left: number;
/** translateY of the item */
top: number;
}
interface StaggeredGridController {
isRegistered: boolean;
/** This will request reposition on the next animation frame , useful for multiple calls */
requestReposition: () => void;
/** Force reposition all the items */
reposition: () => void;
}
interface StaggeredGridProps extends React.HTMLProps<HTMLElement> {
/** type of html element for the grid , by default 'div' is used */
elementType: keyof ReactHTML;
/** width of each column , if not given , calculated using gridWidth / columns */
columnWidth?: number;
/** total columns of the grid , if not given , calculated using gridWidth / columnWidth */
columns?: number;
/** horizontal alignment of the items on the grid 0 = left,1 = center,2 = right */
alignment?: StaggeredAlignment;
/** children of the grid , must be StaggeredGridItem */
children?: ReactNode | undefined;
/** css properties */
style?: React.CSSProperties | undefined;
/** grid controller used to swap items or reposition forcibly , can be obtained using createStaggeredGridController */
gridController?: StaggeredGridController | undefined;
/** when true gridWidth width of the html element is used even if columns & columnWidth are given */
useElementWidth: boolean;
/** total width of the grid , if not given calculated using a ref on html element */
gridWidth?: number;
/** set calculated height of the grid to the html element default true*/
calculateHeight: boolean;
/** vertical gap between items on the grid */
verticalGap?: number;
/** horizontal gap between items on the grid */
horizontalGap?: number;
/** when true horizontal gap is fitted with columnWidth , useful when extra horizontal gap must not cause overflow */
fitHorizontalGap?: boolean;
/** when window is resized grid items are repositioned again, default true */
repositionOnResize?: boolean;
/** if given , when user reaches the end of the grid , it's fired to allow adding more items to grid to make it infinite */
requestAppend?: () => void;
/** scroll tolerance for request append function , default 20px , more tolerance = fired earlier than the end */
requestAppendScrollTolerance?: number;
}
interface StaggeredGridItemProps extends React.HTMLProps<HTMLElement> {
/** type of html element used , by default 'div' */
elementType: keyof ReactHTML;
/** initial position of the item on the grid , default 0 for everything */
initialPosition?: PositionedItem;
/** item height , calculated using a ref when not given */
itemHeight?: number;
/** span of the item on the grid , column span for vertical grid */
spans?: StaggeredItemSpan | number;
/** index of the item in the items */
index: number;
/** CSS Properties */
style?: React.CSSProperties | undefined;
/** children of the item */
children?: ReactNode | undefined;
/** transform the positioned item to html props for the StaggeredGridItem , by default uses css properties like left,top & position:absolute */
transform?(itemPos: PositionedItem): React.HTMLProps<HTMLElement>;
}
interface StaggeredGridState {
calculatedGridHeight: number | undefined;
}
interface GridItemData {
itemHeight: number;
itemColumnSpan: StaggeredItemSpan | number;
mounted: boolean;
update: (width: number, x: number, y: number) => void;
}
declare class StaggeredGrid<ItemType> extends React.Component<StaggeredGridProps & typeof StaggeredGrid.defaultProps, StaggeredGridState> {
static defaultProps: {
elementType: string;
alignment: StaggeredAlignment;
calculateHeight: boolean;
useElementWidth: boolean;
horizontalGap: number;
verticalGap: number;
repositionOnResize: boolean;
fitHorizontalGap: boolean;
requestAppendScrollTolerance: number;
};
repositionedOnce: boolean;
gridWidth: number | undefined;
gridItems: Array<GridItemData>;
requestRepositioningId: number | undefined;
state: {
calculatedGridHeight: undefined;
};
gridElementRef: HTMLElement | null;
constructor(props: Readonly<StaggeredGridProps & typeof StaggeredGrid.defaultProps> | (StaggeredGridProps & typeof StaggeredGrid.defaultProps));
registerController(controller: StaggeredGridController): void;
getGridWidth(): number;
getDefinedColsCount(): number | undefined;
getDefinedColumnWidth(gridWidth: number): number;
getColumnWidth(gridWidth: number, columnCount: number, horizontalGap: number): number;
getColsCount(gridWidth: number): number;
reposition: () => void;
requestReposition: () => void;
onResize: () => void;
onScroll: () => void;
componentDidMount(): void;
componentWillUnmount(): void;
componentDidUpdate(prevProps: Readonly<StaggeredGridProps & typeof StaggeredGrid.defaultProps>, prevState: Readonly<StaggeredGridState>, snapshot?: any): void;
updateItem(index: number, itemColumnSpan: StaggeredItemSpan | number, height: number, update: (width: number, x: number, y: number) => void): void;
removeItem(index: number): void;
elementProps(): any;
render(): JSX.Element;
}
/**
* This gives back a controller object , it should be given to the
* StaggeredGrid Component using 'gridController' Prop, the component will register with this controller,
* then you can use controller to call functions on the grid !
*/
declare function createStaggeredGridController(): StaggeredGridController;
declare type StaggeredGridContextType = {
updateItem: (index: number, itemColumnSpan: StaggeredItemSpan | number, height: number, update: (width: number, x: number, y: number) => void) => void;
removeItem: (index: number) => void;
};
declare const StaggeredGridContext: React.Context<StaggeredGridContextType>;
declare function useStaggeredGrid(): StaggeredGridContextType;
declare class StaggeredGridItem extends React.Component<StaggeredGridItemProps & typeof StaggeredGridItem.defaultProps, PositionedItem> {
static contextType: React.Context<StaggeredGridContextType>;
static defaultProps: {
spans: number;
elementType: string;
};
context: React.ContextType<typeof StaggeredGridContext>;
state: PositionedItem;
itemElementRef: HTMLElement | null;
updateTranslate: (width: number, x: number, y: number) => void;
/**
* Reports height and width
*/
reportData(): void;
componentDidMount(): void;
componentDidUpdate(prevProps: Readonly<StaggeredGridItemProps & typeof StaggeredGridItem.defaultProps>, prevState: Readonly<PositionedItem>, snapshot?: any): void;
componentWillUnmount(): void;
transform(itemPos: PositionedItem): React.HTMLProps<HTMLElement>;
render(): React.DetailedReactHTMLElement<{
ref: ((element: HTMLElement | null) => void) | undefined;
onLoad: () => void;
accept?: string | undefined;
acceptCharset?: string | undefined;
action?: string | undefined;
allowFullScreen?: boolean | undefined;
allowTransparency?: boolean | undefined;
alt?: string | undefined;
as?: string | undefined;
async?: boolean | undefined;
autoComplete?: string | undefined;
autoFocus?: boolean | undefined;
autoPlay?: boolean | undefined;
capture?: boolean | "user" | "environment" | undefined;
cellPadding?: string | number | undefined;
cellSpacing?: string | number | undefined;
charSet?: string | undefined;
challenge?: string | undefined;
checked?: boolean | undefined;
cite?: string | undefined;
classID?: string | undefined;
cols?: number | undefined;
colSpan?: number | undefined;
content?: string | undefined;
controls?: boolean | undefined;
coords?: string | undefined;
crossOrigin?: string | undefined;
data?: string | undefined;
dateTime?: string | undefined;
default?: boolean | undefined;
defer?: boolean | undefined;
disabled?: boolean | undefined;
download?: any;
encType?: string | undefined;
form?: string | undefined;
formAction?: string | undefined;
formEncType?: string | undefined;
formMethod?: string | undefined;
formNoValidate?: boolean | undefined;
formTarget?: string | undefined;
frameBorder?: string | number | undefined;
headers?: string | undefined;
height?: string | number | undefined;
high?: number | undefined;
href?: string | undefined;
hrefLang?: string | undefined;
htmlFor?: string | undefined;
httpEquiv?: string | undefined;
integrity?: string | undefined;
keyParams?: string | undefined;
keyType?: string | undefined;
kind?: string | undefined;
label?: string | undefined;
list?: string | undefined;
loop?: boolean | undefined;
low?: number | undefined;
manifest?: string | undefined;
marginHeight?: number | undefined;
marginWidth?: number | undefined;
max?: string | number | undefined;
maxLength?: number | undefined;
media?: string | undefined;
mediaGroup?: string | undefined;
method?: string | undefined;
min?: string | number | undefined;
minLength?: number | undefined;
multiple?: boolean | undefined;
muted?: boolean | undefined;
name?: string | undefined;
nonce?: string | undefined;
noValidate?: boolean | undefined;
open?: boolean | undefined;
optimum?: number | undefined;
pattern?: string | undefined;
placeholder?: string | undefined;
playsInline?: boolean | undefined;
poster?: string | undefined;
preload?: string | undefined;
readOnly?: boolean | undefined;
rel?: string | undefined;
required?: boolean | undefined;
reversed?: boolean | undefined;
rows?: number | undefined;
rowSpan?: number | undefined;
sandbox?: string | undefined;
scope?: string | undefined;
scoped?: boolean | undefined;
scrolling?: string | undefined;
seamless?: boolean | undefined;
selected?: boolean | undefined;
shape?: string | undefined;
size?: number | undefined;
sizes?: string | undefined;
span?: number | undefined;
src?: string | undefined;
srcDoc?: string | undefined;
srcLang?: string | undefined;
srcSet?: string | undefined;
start?: number | undefined;
step?: string | number | undefined;
summary?: string | undefined;
target?: string | undefined;
type?: string | undefined;
useMap?: string | undefined;
value?: string | number | readonly string[] | undefined;
width?: string | number | undefined;
wmode?: string | undefined;
wrap?: string | undefined;
defaultChecked?: boolean | undefined;
defaultValue?: string | number | readonly string[] | undefined;
suppressContentEditableWarning?: boolean | undefined;
suppressHydrationWarning?: boolean | undefined;
accessKey?: string | undefined;
className?: string | undefined;
contentEditable?: (boolean | "true" | "false") | "inherit" | undefined;
contextMenu?: string | undefined;
dir?: string | undefined;
draggable?: (boolean | "true" | "false") | undefined;
hidden?: boolean | undefined;
id?: string | undefined;
lang?: string | undefined;
slot?: string | undefined;
spellCheck?: (boolean | "true" | "false") | undefined;
style?: React.CSSProperties | undefined;
tabIndex?: number | undefined;
title?: string | undefined;
translate?: "yes" | "no" | undefined;
radioGroup?: string | undefined;
role?: React.AriaRole | undefined;
about?: string | undefined;
datatype?: string | undefined;
inlist?: any;
prefix?: string | undefined;
property?: string | undefined;
resource?: string | undefined;
typeof?: string | undefined;
vocab?: string | undefined;
autoCapitalize?: string | undefined;
autoCorrect?: string | undefined;
autoSave?: string | undefined;
color?: string | undefined;
itemProp?: string | undefined;
itemScope?: boolean | undefined;
itemType?: string | undefined;
itemID?: string | undefined;
itemRef?: string | undefined;
results?: number | undefined;
security?: string | undefined;
unselectable?: "on" | "off" | undefined;
inputMode?: "none" | "search" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
is?: string | undefined;
'aria-activedescendant'?: string | undefined;
'aria-atomic'?: (boolean | "true" | "false") | undefined;
'aria-autocomplete'?: "list" | "none" | "inline" | "both" | undefined;
'aria-busy'?: (boolean | "true" | "false") | undefined;
'aria-checked'?: boolean | "true" | "false" | "mixed" | undefined;
'aria-colcount'?: number | undefined;
'aria-colindex'?: number | undefined;
'aria-colspan'?: number | undefined;
'aria-controls'?: string | undefined;
'aria-current'?: boolean | "time" | "step" | "true" | "false" | "page" | "location" | "date" | undefined;
'aria-describedby'?: string | undefined;
'aria-details'?: string | undefined;
'aria-disabled'?: (boolean | "true" | "false") | undefined;
'aria-dropeffect'?: "link" | "copy" | "none" | "execute" | "move" | "popup" | undefined;
'aria-errormessage'?: string | undefined;
'aria-expanded'?: (boolean | "true" | "false") | undefined;
'aria-flowto'?: string | undefined;
'aria-grabbed'?: (boolean | "true" | "false") | undefined;
'aria-haspopup'?: boolean | "dialog" | "menu" | "true" | "false" | "grid" | "listbox" | "tree" | undefined;
'aria-hidden'?: (boolean | "true" | "false") | undefined;
'aria-invalid'?: boolean | "true" | "false" | "grammar" | "spelling" | undefined;
'aria-keyshortcuts'?: string | undefined;
'aria-label'?: string | undefined;
'aria-labelledby'?: string | undefined;
'aria-level'?: number | undefined;
'aria-live'?: "off" | "assertive" | "polite" | undefined;
'aria-modal'?: (boolean | "true" | "false") | undefined;
'aria-multiline'?: (boolean | "true" | "false") | undefined;
'aria-multiselectable'?: (boolean | "true" | "false") | undefined;
'aria-orientation'?: "horizontal" | "vertical" | undefined;
'aria-owns'?: string | undefined;
'aria-placeholder'?: string | undefined;
'aria-posinset'?: number | undefined;
'aria-pressed'?: boolean | "true" | "false" | "mixed" | undefined;
'aria-readonly'?: (boolean | "true" | "false") | undefined;
'aria-relevant'?: "text" | "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | undefined;
'aria-required'?: (boolean | "true" | "false") | undefined;
'aria-roledescription'?: string | undefined;
'aria-rowcount'?: number | undefined;
'aria-rowindex'?: number | undefined;
'aria-rowspan'?: number | undefined;
'aria-selected'?: (boolean | "true" | "false") | undefined;
'aria-setsize'?: number | undefined;
'aria-sort'?: "none" | "ascending" | "descending" | "other" | undefined;
'aria-valuemax'?: number | undefined;
'aria-valuemin'?: number | undefined;
'aria-valuenow'?: number | undefined;
'aria-valuetext'?: string | undefined;
children?: React.ReactNode;
dangerouslySetInnerHTML?: {
__html: string;
} | undefined;
onCopy?: React.ClipboardEventHandler<HTMLElement> | undefined;
onCopyCapture?: React.ClipboardEventHandler<HTMLElement> | undefined;
onCut?: React.ClipboardEventHandler<HTMLElement> | undefined;
onCutCapture?: React.ClipboardEventHandler<HTMLElement> | undefined;
onPaste?: React.ClipboardEventHandler<HTMLElement> | undefined;
onPasteCapture?: React.ClipboardEventHandler<HTMLElement> | undefined;
onCompositionEnd?: React.CompositionEventHandler<HTMLElement> | undefined;
onCompositionEndCapture?: React.CompositionEventHandler<HTMLElement> | undefined;
onCompositionStart?: React.CompositionEventHandler<HTMLElement> | undefined;
onCompositionStartCapture?: React.CompositionEventHandler<HTMLElement> | undefined;
onCompositionUpdate?: React.CompositionEventHandler<HTMLElement> | undefined;
onCompositionUpdateCapture?: React.CompositionEventHandler<HTMLElement> | undefined;
onFocus?: React.FocusEventHandler<HTMLElement> | undefined;
onFocusCapture?: React.FocusEventHandler<HTMLElement> | undefined;
onBlur?: React.FocusEventHandler<HTMLElement> | undefined;
onBlurCapture?: React.FocusEventHandler<HTMLElement> | undefined;
onChange?: React.FormEventHandler<HTMLElement> | undefined;
onChangeCapture?: React.FormEventHandler<HTMLElement> | undefined;
onBeforeInput?: React.FormEventHandler<HTMLElement> | undefined;
onBeforeInputCapture?: React.FormEventHandler<HTMLElement> | undefined;
onInput?: React.FormEventHandler<HTMLElement> | undefined;
onInputCapture?: React.FormEventHandler<HTMLElement> | undefined;
onReset?: React.FormEventHandler<HTMLElement> | undefined;
onResetCapture?: React.FormEventHandler<HTMLElement> | undefined;
onSubmit?: React.FormEventHandler<HTMLElement> | undefined;
onSubmitCapture?: React.FormEventHandler<HTMLElement> | undefined;
onInvalid?: React.FormEventHandler<HTMLElement> | undefined;
onInvalidCapture?: React.FormEventHandler<HTMLElement> | undefined;
onLoadCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onError?: React.ReactEventHandler<HTMLElement> | undefined;
onErrorCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onKeyDown?: React.KeyboardEventHandler<HTMLElement> | undefined;
onKeyDownCapture?: React.KeyboardEventHandler<HTMLElement> | undefined;
onKeyPress?: React.KeyboardEventHandler<HTMLElement> | undefined;
onKeyPressCapture?: React.KeyboardEventHandler<HTMLElement> | undefined;
onKeyUp?: React.KeyboardEventHandler<HTMLElement> | undefined;
onKeyUpCapture?: React.KeyboardEventHandler<HTMLElement> | undefined;
onAbort?: React.ReactEventHandler<HTMLElement> | undefined;
onAbortCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onCanPlay?: React.ReactEventHandler<HTMLElement> | undefined;
onCanPlayCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onCanPlayThrough?: React.ReactEventHandler<HTMLElement> | undefined;
onCanPlayThroughCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onDurationChange?: React.ReactEventHandler<HTMLElement> | undefined;
onDurationChangeCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onEmptied?: React.ReactEventHandler<HTMLElement> | undefined;
onEmptiedCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onEncrypted?: React.ReactEventHandler<HTMLElement> | undefined;
onEncryptedCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onEnded?: React.ReactEventHandler<HTMLElement> | undefined;
onEndedCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onLoadedData?: React.ReactEventHandler<HTMLElement> | undefined;
onLoadedDataCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onLoadedMetadata?: React.ReactEventHandler<HTMLElement> | undefined;
onLoadedMetadataCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onLoadStart?: React.ReactEventHandler<HTMLElement> | undefined;
onLoadStartCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onPause?: React.ReactEventHandler<HTMLElement> | undefined;
onPauseCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onPlay?: React.ReactEventHandler<HTMLElement> | undefined;
onPlayCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onPlaying?: React.ReactEventHandler<HTMLElement> | undefined;
onPlayingCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onProgress?: React.ReactEventHandler<HTMLElement> | undefined;
onProgressCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onRateChange?: React.ReactEventHandler<HTMLElement> | undefined;
onRateChangeCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onSeeked?: React.ReactEventHandler<HTMLElement> | undefined;
onSeekedCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onSeeking?: React.ReactEventHandler<HTMLElement> | undefined;
onSeekingCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onStalled?: React.ReactEventHandler<HTMLElement> | undefined;
onStalledCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onSuspend?: React.ReactEventHandler<HTMLElement> | undefined;
onSuspendCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onTimeUpdate?: React.ReactEventHandler<HTMLElement> | undefined;
onTimeUpdateCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onVolumeChange?: React.ReactEventHandler<HTMLElement> | undefined;
onVolumeChangeCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onWaiting?: React.ReactEventHandler<HTMLElement> | undefined;
onWaitingCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onAuxClick?: React.MouseEventHandler<HTMLElement> | undefined;
onAuxClickCapture?: React.MouseEventHandler<HTMLElement> | undefined;
onClick?: React.MouseEventHandler<HTMLElement> | undefined;
onClickCapture?: React.MouseEventHandler<HTMLElement> | undefined;
onContextMenu?: React.MouseEventHandler<HTMLElement> | undefined;
onContextMenuCapture?: React.MouseEventHandler<HTMLElement> | undefined;
onDoubleClick?: React.MouseEventHandler<HTMLElement> | undefined;
onDoubleClickCapture?: React.MouseEventHandler<HTMLElement> | undefined;
onDrag?: React.DragEventHandler<HTMLElement> | undefined;
onDragCapture?: React.DragEventHandler<HTMLElement> | undefined;
onDragEnd?: React.DragEventHandler<HTMLElement> | undefined;
onDragEndCapture?: React.DragEventHandler<HTMLElement> | undefined;
onDragEnter?: React.DragEventHandler<HTMLElement> | undefined;
onDragEnterCapture?: React.DragEventHandler<HTMLElement> | undefined;
onDragExit?: React.DragEventHandler<HTMLElement> | undefined;
onDragExitCapture?: React.DragEventHandler<HTMLElement> | undefined;
onDragLeave?: React.DragEventHandler<HTMLElement> | undefined;
onDragLeaveCapture?: React.DragEventHandler<HTMLElement> | undefined;
onDragOver?: React.DragEventHandler<HTMLElement> | undefined;
onDragOverCapture?: React.DragEventHandler<HTMLElement> | undefined;
onDragStart?: React.DragEventHandler<HTMLElement> | undefined;
onDragStartCapture?: React.DragEventHandler<HTMLElement> | undefined;
onDrop?: React.DragEventHandler<HTMLElement> | undefined;
onDropCapture?: React.DragEventHandler<HTMLElement> | undefined;
onMouseDown?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseDownCapture?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseEnter?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseLeave?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseMove?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseMoveCapture?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseOut?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseOutCapture?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseOver?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseOverCapture?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseUp?: React.MouseEventHandler<HTMLElement> | undefined;
onMouseUpCapture?: React.MouseEventHandler<HTMLElement> | undefined;
onSelect?: React.ReactEventHandler<HTMLElement> | undefined;
onSelectCapture?: React.ReactEventHandler<HTMLElement> | undefined;
onTouchCancel?: React.TouchEventHandler<HTMLElement> | undefined;
onTouchCancelCapture?: React.TouchEventHandler<HTMLElement> | undefined;
onTouchEnd?: React.TouchEventHandler<HTMLElement> | undefined;
onTouchEndCapture?: React.TouchEventHandler<HTMLElement> | undefined;
onTouchMove?: React.TouchEventHandler<HTMLElement> | undefined;
onTouchMoveCapture?: React.TouchEventHandler<HTMLElement> | undefined;
onTouchStart?: React.TouchEventHandler<HTMLElement> | undefined;
onTouchStartCapture?: React.TouchEventHandler<HTMLElement> | undefined;
onPointerDown?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerDownCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerMove?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerMoveCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerUp?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerUpCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerCancel?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerCancelCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerEnter?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerEnterCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerLeave?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerLeaveCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerOver?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerOverCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerOut?: React.PointerEventHandler<HTMLElement> | undefined;
onPointerOutCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onGotPointerCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onGotPointerCaptureCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onLostPointerCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onLostPointerCaptureCapture?: React.PointerEventHandler<HTMLElement> | undefined;
onScroll?: React.UIEventHandler<HTMLElement> | undefined;
onScrollCapture?: React.UIEventHandler<HTMLElement> | undefined;
onWheel?: React.WheelEventHandler<HTMLElement> | undefined;
onWheelCapture?: React.WheelEventHandler<HTMLElement> | undefined;
onAnimationStart?: React.AnimationEventHandler<HTMLElement> | undefined;
onAnimationStartCapture?: React.AnimationEventHandler<HTMLElement> | undefined;
onAnimationEnd?: React.AnimationEventHandler<HTMLElement> | undefined;
onAnimationEndCapture?: React.AnimationEventHandler<HTMLElement> | undefined;
onAnimationIteration?: React.AnimationEventHandler<HTMLElement> | undefined;
onAnimationIterationCapture?: React.AnimationEventHandler<HTMLElement> | undefined;
onTransitionEnd?: React.TransitionEventHandler<HTMLElement> | undefined;
onTransitionEndCapture?: React.TransitionEventHandler<HTMLElement> | undefined;
key?: React.Key | null | undefined;
}, HTMLElement>;
}
/**
* useStaggeredItemPosition gives back position of the StaggeredGridItem
* which can be transformed to css properties for the html element
* @param index index of the item in the staggered grid items
* @param spans span of the item , column span
* @param itemHeight height of the item
* @param ref ref object for element
* @param initialPosition initial position of the item , by default 0 for everything
*/
declare function useStaggeredItemPosition<T extends HTMLElement>(index: number, spans: number, itemHeight?: number, ref?: RefObject<T>, initialPosition?: PositionedItem): PositionedItem;
/**
* use StaggeredGridItem as this is still a work in progress
* @param props see StaggeredGridItemProps
*/
declare function StaggeredGridItemFunctional(props: StaggeredGridItemProps & typeof StaggeredGridItemFunctional.defaultProps): JSX.Element;
declare namespace StaggeredGridItemFunctional {
var defaultProps: {
spans: number;
};
}
export { PositionedItem, StaggeredAlignment, StaggeredGrid, StaggeredGridContext, StaggeredGridContextType, StaggeredGridController, StaggeredGridItem, StaggeredGridItemFunctional, StaggeredGridItemProps, StaggeredGridProps, StaggeredItemSpan, createStaggeredGridController, useStaggeredGrid, useStaggeredItemPosition };