native-base
Version:
Essential cross-platform UI components for React Native
88 lines (83 loc) • 2.34 kB
text/typescript
import { getColorScheme, mode } from '../tools';
export const SliderTrack = {
baseStyle: ({ isVertical, size, ...props }: any) => {
const simplifiedColorScheme = getColorScheme(props);
return {
bg: `${simplifiedColorScheme}.100`,
borderRadius: 'lg',
overflow: 'hidden',
style: {
height: isVertical ? '100%' : size,
width: !isVertical ? '100%' : size,
},
_pressable: {
alignItems: 'center',
justifyContent: 'center',
height: isVertical ? '100%' : size,
width: !isVertical ? '100%' : size,
py: !isVertical ? '3' : undefined,
px: isVertical ? '3' : undefined,
},
};
},
};
export const SliderThumb = {
baseStyle: (props: any) => {
const simplifiedColorScheme = getColorScheme(props);
return {
borderRadius: 99999,
zIndex: 999,
alignItems: 'center',
justifyContent: 'center',
bg: mode(
`${simplifiedColorScheme}.600`,
`${simplifiedColorScheme}.300`
)(props),
scaleOnPressed: 1.2,
};
},
};
export const SliderFilledTrack = {
baseStyle: ({
orientation,
isReversed,
sliderTrackPosition,
size,
...props
}: any) => {
const simplifiedColorScheme = getColorScheme(props);
return {
bg: mode(
`${simplifiedColorScheme}.600`,
`${simplifiedColorScheme}.300`
)(props),
left: orientation !== 'vertical' && !isReversed ? 0 : undefined,
bottom: orientation === 'vertical' && !isReversed ? 0 : undefined,
right: orientation !== 'vertical' && isReversed ? 0 : undefined,
top: orientation === 'vertical' && isReversed ? 0 : undefined,
style:
orientation === 'vertical'
? { height: sliderTrackPosition, width: size }
: { width: sliderTrackPosition, height: size },
};
},
};
const sizes = {
lg: { thumbSize: 6, sliderSize: 6 },
md: { thumbSize: 5, sliderSize: 5 },
sm: { thumbSize: 4, sliderSize: 4 },
};
export const Slider = {
baseStyle: (props: any) => {
return {
alignItems: 'center',
justifyContent: 'center',
height: props.orientation === 'vertical' ? '100%' : undefined,
width: props.orientation !== 'vertical' ? '100%' : undefined,
};
},
defaultProps: {
size: 'sm',
},
sizes,
};