+
+
+
+ {valueAsNumber.toFixed(2)}
+
+
+
+
+
+
+ {valueAsNumber.toFixed(2)}
+
+
+
+
+
+
+
+
+
+
+
+ {sliderInput && (
+ handleChange([parseFloat(e.target.value)])}
+ className={clsx(
+ "ml-2 h-10 w-16 rounded-md border px-2 py-1 text-sm arrow-hide",
+ isDark
+ ? "border-zinc-700 bg-zinc-800 text-white"
+ : "border-zinc-300 bg-white text-black",
+ )}
+ min={min}
+ max={max}
+ step={step}
+ disabled={disabled}
+ />
+ )}
+
+
+ {sliderButtons && (
+
+
+ {sliderButtonsOptions?.map((option) => (
+
+ ))}
+
+
+ )}
+
+
+
+
+ {minLabel}
+
+
+ {maxLabel}
+
+
+
+
+ );
+}
diff --git a/src/frontend/src/components/sliderComponent/utils/get-min-max-value.ts b/src/frontend/src/components/sliderComponent/utils/get-min-max-value.ts
new file mode 100644
index 000000000..3e9b48ee7
--- /dev/null
+++ b/src/frontend/src/components/sliderComponent/utils/get-min-max-value.ts
@@ -0,0 +1,16 @@
+export const getMinOrMaxValue = (
+ valueAsNumber: number,
+ min: number,
+ max: number,
+) => {
+ if (valueAsNumber < min) {
+ return min;
+ }
+ if (valueAsNumber > max) {
+ return max;
+ }
+ if (valueAsNumber >= min && valueAsNumber <= max) {
+ return valueAsNumber;
+ }
+ return min;
+};
diff --git a/src/frontend/src/components/ui/slider.tsx b/src/frontend/src/components/ui/slider.tsx
new file mode 100644
index 000000000..b123510d5
--- /dev/null
+++ b/src/frontend/src/components/ui/slider.tsx
@@ -0,0 +1,27 @@
+"use client";
+
+import { cn } from "@/utils/utils";
+import * as SliderPrimitive from "@radix-ui/react-slider";
+import * as React from "react";
+
+const Slider = React.forwardRef<
+ React.ElementRef