Skip to main content
Glama
slider.tsx3.13 kB
"use client"; import { Slider as SliderPrimitive } from "@base-ui/react/slider"; import * as React from "react"; import { cn } from "@/lib/utils"; function Slider({ className, children, defaultValue, value, min = 0, max = 100, ...props }: SliderPrimitive.Root.Props) { const _values = React.useMemo(() => { if (value !== undefined) { return Array.isArray(value) ? value : [value]; } if (defaultValue !== undefined) { return Array.isArray(defaultValue) ? defaultValue : [defaultValue]; } return [min]; }, [value, defaultValue, min]); return ( <SliderPrimitive.Root className="data-[orientation=horizontal]:w-full" defaultValue={defaultValue} max={max} min={min} thumbAlignment="edge" value={value} {...props} > {children} <SliderPrimitive.Control className={cn( "flex touch-none select-none data-disabled:pointer-events-none data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=horizontal]:w-full data-[orientation=horizontal]:min-w-44 data-[orientation=vertical]:flex-col data-disabled:opacity-64", className, )} data-slot="slider-control" > <SliderPrimitive.Track className="relative grow select-none before:absolute before:rounded-full before:bg-input data-[orientation=horizontal]:h-1 data-[orientation=vertical]:h-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-1 data-[orientation=horizontal]:before:inset-x-0.5 data-[orientation=vertical]:before:inset-x-0 data-[orientation=horizontal]:before:inset-y-0 data-[orientation=vertical]:before:inset-y-0.5" data-slot="slider-track" > <SliderPrimitive.Indicator className="select-none rounded-full bg-primary data-[orientation=horizontal]:ms-0.5 data-[orientation=vertical]:mb-0.5" data-slot="slider-indicator" /> {Array.from({ length: _values.length }, (_, index) => ( <SliderPrimitive.Thumb className="block size-5 shrink-0 select-none rounded-full border border-input bg-white bg-clip-padding shadow-xs outline-none transition-shadow before:absolute before:inset-0 before:rounded-full before:shadow-[0_1px_--theme(--color-black/4%)] focus-visible:ring-[3px] focus-visible:ring-ring/24 has-focus-visible:ring-[3px] has-focus-visible:ring-ring/24 data-dragging:ring-[3px] data-dragging:ring-ring/24 sm:size-4 dark:border-background dark:bg-clip-border dark:data-dragging:ring-ring/48 dark:focus-visible:ring-ring/48 [:focus-visible,[data-dragging]]:shadow-none" data-slot="slider-thumb" key={String(index)} /> ))} </SliderPrimitive.Track> </SliderPrimitive.Control> </SliderPrimitive.Root> ); } function SliderValue({ className, ...props }: SliderPrimitive.Value.Props) { return ( <SliderPrimitive.Value className={cn("flex justify-end text-sm", className)} data-slot="slider-value" {...props} /> ); } export { Slider, SliderValue };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bytebase/dbhub'

If you have feedback or need assistance with the MCP directory API, please join our Discord server