- Spotify playlist, library, album and artist browsing with in-app playback - Song, playlist and album downloads via spotdl with YouTube and Bandcamp fallbacks - Electron desktop app (castLabs Widevine) with a permanent sidebar layout - Linux and Windows packaging scripts
32 lines
1002 B
TypeScript
32 lines
1002 B
TypeScript
"use client";
|
|
|
|
import * as React from "react";
|
|
import * as SliderPrimitive from "@radix-ui/react-slider";
|
|
import styles from "./Slider.module.css";
|
|
|
|
const Slider = React.forwardRef<
|
|
React.ElementRef<typeof SliderPrimitive.Root>,
|
|
React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>
|
|
>(({ className, ...props }, ref) => {
|
|
const isRange =
|
|
(Array.isArray(props.defaultValue) && props.defaultValue.length > 1) ||
|
|
(Array.isArray(props.value) && props.value.length > 1);
|
|
|
|
return (
|
|
<SliderPrimitive.Root
|
|
ref={ref}
|
|
className={`${styles.slider} ${className ?? ""}`}
|
|
{...props}
|
|
>
|
|
<SliderPrimitive.Track className={styles.track}>
|
|
<SliderPrimitive.Range className={styles.range} />
|
|
</SliderPrimitive.Track>
|
|
<SliderPrimitive.Thumb className={styles.thumb} />
|
|
{isRange && <SliderPrimitive.Thumb className={styles.thumb} />}
|
|
</SliderPrimitive.Root>
|
|
);
|
|
});
|
|
Slider.displayName = SliderPrimitive.Root.displayName;
|
|
|
|
export { Slider };
|