@antv/g2
Version:
the Grammar of Graphics in Javascript
50 lines (45 loc) • 1.37 kB
text/typescript
import { Scrollbar as ScrollbarComponent } from '@antv/component';
import { DisplayObject } from '@antv/g';
import { GuideComponentComponent as GCC } from '../runtime';
export type ScrollbarOptions = {
orientation?: 'horizontal' | 'vertical';
ratio?: number;
[key: string]: any;
};
/**
* Scrollbar component.
*/
export const Scrollbar: GCC<ScrollbarOptions> = (options) => {
const { orientation, labelFormatter, style, ...rest } = options;
return ({ scales: [scale], value, theme }) => {
const { bbox } = value;
const { x, y, width, height } = bbox;
const { scrollbar: scrollbarTheme = {} } = theme;
const { ratio, range } = scale.getOptions();
const mainSize = orientation === 'horizontal' ? width : height;
const actualSize = mainSize / ratio;
const [r0, r1] = range;
const value1 = r1 > r0 ? 0 : 1;
return new ScrollbarComponent({
className: 'g2-scrollbar',
style: Object.assign({}, scrollbarTheme, {
...style,
x,
y,
trackLength: mainSize,
value: value1,
...rest,
orientation,
contentLength: actualSize,
viewportLength: mainSize,
}),
}) as unknown as DisplayObject;
};
};
Scrollbar.props = {
defaultPosition: 'bottom',
defaultSize: 24,
defaultOrder: 1,
defaultCrossPadding: [12, 12],
defaultPadding: [12, 12],
};