import React from "react"; import { cn } from "@/lib/utils"; import { formatCurrency, formatCurrencyAbbrev } from "@/lib/format-currency"; import { Slider } from "./slider"; /** * A labeled slider molecule for selecting a dollar amount within a range. * * Layout (top-to-bottom): * - Label (left) + current value (right) * - Slider track + thumb * - Min label (left) + max label (right) — abbreviated currency * * Used in the Borrowing Capacity page for inputs like interest rate, purchase * price range, or LVR settings where a slider gives better UX than a bare text * input. */ export interface MoneyInputWithSliderProps { /** Label shown above the slider (e.g. "Purchase Price") */ label: string; /** Current value in whole dollars */ value: number; /** Minimum selectable value in whole dollars */ min: number; /** Maximum selectable value in whole dollars */ max: number; /** Step size in dollars (default: 1000) */ step?: number; /** Called on every slider change with the new dollar value */ onChange?: (value: number) => void; disabled?: boolean; className?: string; } export function MoneyInputWithSlider({ label, value, min, max, step = 1000, onChange, disabled = false, className, }: MoneyInputWithSliderProps) { return (
{/* Label row */}
{label} {formatCurrency(value)}
{/* Slider */} {/* Min / max labels */}
{formatCurrencyAbbrev(min)} {formatCurrencyAbbrev(max)}
); }