Implement custom Slider component
This inherits from Radix's Slider
This commit is contained in:
parent
82ec214b5d
commit
9b7b54b562
2 changed files with 72 additions and 0 deletions
42
components/Slider/index.scss
Normal file
42
components/Slider/index.scss
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
.Slider {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
user-select: none;
|
||||||
|
touch-action: none;
|
||||||
|
width: $unit-20x;
|
||||||
|
height: 20px;
|
||||||
|
|
||||||
|
.SliderTrack {
|
||||||
|
background-color: var(--button-bg);
|
||||||
|
position: relative;
|
||||||
|
flex-grow: 1;
|
||||||
|
border-radius: 9999px;
|
||||||
|
height: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.SliderRange {
|
||||||
|
position: absolute;
|
||||||
|
background-color: var(--accent-blue);
|
||||||
|
border-radius: 9999px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SliderThumb {
|
||||||
|
display: block;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
background-color: white;
|
||||||
|
box-shadow: 0 2px 10px var(--button-bg);
|
||||||
|
border-radius: 10px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: darken(white, 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
box-shadow: 0 0 0 5px rgba($accent--blue--light, 0.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
30
components/Slider/index.tsx
Normal file
30
components/Slider/index.tsx
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
import React from 'react'
|
||||||
|
import * as SliderPrimitive from '@radix-ui/react-slider'
|
||||||
|
import type { SliderProps } from '@radix-ui/react-slider'
|
||||||
|
import classNames from 'classnames'
|
||||||
|
|
||||||
|
import './index.scss'
|
||||||
|
|
||||||
|
interface Props {}
|
||||||
|
|
||||||
|
const Slider = React.forwardRef<HTMLDivElement, Props & SliderProps>(
|
||||||
|
(props, forwardedRef) => {
|
||||||
|
const value = props.value || props.defaultValue
|
||||||
|
|
||||||
|
return (
|
||||||
|
<SliderPrimitive.Slider
|
||||||
|
{...props}
|
||||||
|
className={classNames({ Slider: true }, props.className)}
|
||||||
|
ref={forwardedRef}
|
||||||
|
>
|
||||||
|
<SliderPrimitive.Track className="SliderTrack">
|
||||||
|
<SliderPrimitive.Range className="SliderRange" />
|
||||||
|
</SliderPrimitive.Track>
|
||||||
|
|
||||||
|
<SliderPrimitive.Thumb className="SliderThumb" />
|
||||||
|
</SliderPrimitive.Slider>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
export default Slider
|
||||||
Loading…
Reference in a new issue