@enact/ui
Version:
A collection of simplified unstyled cross-platform UI components for Enact
157 lines (147 loc) • 3.51 kB
TypeScript
// Type definitions for ui/Scroller
import * as React from "react";
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;
export interface ScrollerBasicProps {
/**
* Direction of the scroller.
*
* Valid values are:
* * `'both'` ,
* * `'horizontal'` , and
* * `'vertical'` .
*/
direction?: string;
}
/**
* An unstyled base scroller component.
*/
export class ScrollerBasic extends React.Component<
Merge<React.HTMLProps<HTMLElement>, ScrollerBasicProps>
> {}
export interface ScrollerProps extends ScrollerBasicProps {
/**
* A callback function that receives a reference to the `scrollTo` feature.
*
* Once received, the `scrollTo` method can be called as an imperative interface.
* * {position: {x, y}} - Pixel value for x and/or y position
* * {align} - Where the scroll area should be aligned. Values are:
`'left'` , `'right'` , `'top'` , `'bottom'` ,
`'topleft'` , `'topright'` , `'bottomleft'` , and `'bottomright'` .
* * {node} - Node to scroll into view
* * {animate} - When `true` , scroll occurs with animation. When `false` , no
animation occurs.
* * {focus} - When `true` , attempts to focus item after scroll. Only valid when scrolling
by `node` .
*
* Note: Only specify one of: `position` , `align` , `node`
*
* Example:
* ```
// If you set cbScrollTo prop like below;
cbScrollTo: (fn) => {this.scrollTo = fn;}
// You can simply call like below;
this.scrollTo({align: 'top'}); // scroll to the top
```
*/
cbScrollTo?: Function;
/**
* Direction of the scroller.
*
* Valid values are:
* * `'both'` ,
* * `'horizontal'` , and
* * `'vertical'` .
*/
direction?: string;
/**
* Specifies how to show horizontal scrollbar.
*
* Valid values are:
* * `'auto'` ,
* * `'visible'` , and
* * `'hidden'` .
*/
horizontalScrollbar?: string;
/**
* Prevents scroll by wheeling on the scroller.
*/
noScrollByWheel?: boolean;
/**
* Called when scrolling.
*
* Passes `scrollLeft` , `scrollTop` .
It is not recommended to set this prop since it can cause performance degradation.
Use `onScrollStart` or `onScrollStop` instead.
*/
onScroll?: Function;
/**
* Called when scroll starts.
*
* Passes `scrollLeft` and `scrollTop` .
*
* Example:
* ```
onScrollStart = ({scrollLeft, scrollTop}) => {
// do something with scrollLeft and scrollTop
}
render = () => (
<Scroller
...
onScrollStart={this.onScrollStart}
...
/>
)
```
*/
onScrollStart?: Function;
/**
* Called when scroll stops.
*
* Passes `scrollLeft` and `scrollTop` .
*
* Example:
* ```
onScrollStop = ({scrollLeft, scrollTop}) => {
// do something with scrollLeft and scrollTop
}
render = () => (
<Scroller
...
onScrollStop={this.onScrollStop}
...
/>
)
```
*/
onScrollStop?: Function;
/**
* Specifies how to scroll.
*
* Valid values are:
* * `'translate'` ,
* * `'native'` .
*/
scrollMode?: string;
/**
* Specifies how to show vertical scrollbar.
*
* Valid values are:
* * `'auto'` ,
* * `'visible'` , and
* * `'hidden'` .
*/
verticalScrollbar?: string;
}
/**
* An unstyled scroller.
*
* Example:
* ```
<Scroller>Scroll me.</Scroller>
```
*/
export class Scroller extends React.Component<
Merge<React.HTMLProps<HTMLElement>, ScrollerProps>
> {}
export default Scroller;