@eviljs/reactx
Version:
Awesome React UI Widgets
48 lines (47 loc) • 1.85 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { classes } from '@eviljs/react/classes';
import { asArray } from '@eviljs/std/type-as';
export const SliderDirection = {
Row: 'row',
RowReverse: 'row-reverse',
Column: 'column',
ColumnReverse: 'column-reverse',
};
export function Slider(props) {
const { className, children, selected, direction, ...otherProps } = props;
const childrenList = asArray(children);
return (_jsx("div", { ...otherProps, className: classes('Slider-73e4 std-grid', className), children: childrenList.map((it, idx) => _jsx(Slide, { className: classes('slide-1c54 std-grid-layer', {
previous: idx < selected,
selected: idx === selected,
following: idx > selected,
}), style: computeSlideStyle({
index: idx,
selected,
direction: direction ?? SliderDirection.Row,
}), children: it }, idx)) }));
}
export function Slide(props) {
const { className, ...otherProps } = props;
return (_jsx("div", { ...otherProps, className: classes('Slide-0eab', className) }));
}
export function computeSlideStyle(args) {
const { index, selected, direction } = args;
const [xDirection, yDirection] = (() => {
switch (direction) {
case SliderDirection.Column:
return [0, 1];
case SliderDirection.ColumnReverse:
return [0, -1];
case SliderDirection.Row:
return [1, 0];
case SliderDirection.RowReverse:
return [-1, 0];
}
})();
const distance = index - selected;
const x = `calc(${xDirection} * ${distance} * 100%)`;
const y = `calc(${yDirection} * ${distance} * 100%)`;
return {
transform: `translate(${x}, ${y})`,
};
}