zebflow 0.7.9

Reactive web automation platform — pipelines, templates, and real-time collaboration in a single binary.
Documentation
import { cx } from "zeb";

interface SliderProps {
  min?: number;
  max?: number;
  step?: number;
  value?: number;
  defaultValue?: number;
  onValueChange?: (value: number) => void;
  disabled?: boolean;
  className?: string;
  [key: string]: any;
}

export function Slider({ min = 0, max = 100, step = 1, value, defaultValue, onValueChange, disabled, className, ...rest }: SliderProps) {
  const handleChange = (e: any) => {
    onValueChange?.(Number(e.target.value));
  };

  const pct = ((( (value ?? defaultValue ?? min) - min) / (max - min)) * 100).toFixed(1);

  return (
    <div className={cx("relative flex w-full touch-none select-none items-center", className)}>
      <input
        type="range"
        min={min}
        max={max}
        step={step}
        value={value}
        defaultValue={defaultValue}
        onChange={handleChange}
        disabled={disabled}
        className="w-full h-2 appearance-none rounded-full bg-gray-200 accent-gray-900 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50"
        style={{ backgroundImage: `linear-gradient(to right, rgb(17,24,39) ${pct}%, transparent ${pct}%)` }}
        {...rest}
      />
    </div>
  );
}

export default Slider;