diff --git a/src/shared/components/InfoTooltip.tsx b/src/shared/components/InfoTooltip.tsx new file mode 100644 index 0000000000..9f62de5b16 --- /dev/null +++ b/src/shared/components/InfoTooltip.tsx @@ -0,0 +1,34 @@ +"use client"; + +import { cn } from "@/shared/utils/cn"; + +interface InfoTooltipProps { + text: string; + className?: string; +} + +export default function InfoTooltip({ text, className }: InfoTooltipProps) { + return ( + + + info + + + {text} + + + ); +} diff --git a/src/shared/components/PresetSlider.tsx b/src/shared/components/PresetSlider.tsx new file mode 100644 index 0000000000..17ffe35471 --- /dev/null +++ b/src/shared/components/PresetSlider.tsx @@ -0,0 +1,64 @@ +"use client"; + +import { cn } from "@/shared/utils/cn"; + +interface PresetSliderProps { + value: number; + onChange: (value: number) => void; + presets: { label: string; value: number }[]; + min?: number; + max?: number; + step?: number; + className?: string; +} + +export default function PresetSlider({ + value, + onChange, + presets, + min = 0, + max = 100, + step = 1, + className, +}: PresetSliderProps) { + return ( +
+
+ {presets.map((preset) => ( + + ))} +
+ onChange(Number(e.target.value))} + className={cn( + "w-full h-1.5 rounded-full appearance-none cursor-pointer", + "bg-black/10 dark:bg-white/10", + "accent-primary" + )} + /> +
+ {min} + {value} + {max} +
+
+ ); +} diff --git a/src/shared/components/index.tsx b/src/shared/components/index.tsx index 1039804883..e1a90df42a 100644 --- a/src/shared/components/index.tsx +++ b/src/shared/components/index.tsx @@ -33,6 +33,8 @@ export { default as NotificationToast } from "./NotificationToast"; export { default as FilterBar } from "./FilterBar"; export { default as ColumnToggle } from "./ColumnToggle"; export { default as DataTable } from "./DataTable"; +export { default as InfoTooltip } from "./InfoTooltip"; +export { default as PresetSlider } from "./PresetSlider"; // Layouts export * from "./layouts";