"use client"; /** * Scale Input Field * * COPIED VERBATIM FROM: components/onboarding/steps/scale-input-step.tsx:81-141 * Renders a slider or numeric input with optional value display */ import { ANIMATION_CLASSES, getStaggerStyle, STAGGER_PRESETS, } from "../animations"; import { OnboardingInput } from "../primitives/onboarding-input"; import { OnboardingLabel } from "../primitives/onboarding-label"; import { OnboardingSlider } from "../primitives/onboarding-slider"; import type { ScaleInputFieldProps } from "../types/fields"; /** * Default value formatter * COPIED VERBATIM FROM: components/onboarding/steps/scale-input-step.tsx:61-72 */ function defaultFormatValue(value: number): string { if (value >= 1_000_000_000) { return `${(value / 1_000_000_000).toFixed(1)}B`; } if (value >= 1_000_000) { return `${(value / 1_000_000).toFixed(1)}M`; } if (value >= 1_000) { return `${(value / 1_000).toFixed(1)}K`; } return value.toString(); } export function ScaleInputField({ id, label, description, min, max, step = 1, value, onChange, unit, formatValue, showSlider = true, animationIndex = 0, disabled = false, }: ScaleInputFieldProps) { const displayValue = formatValue ? formatValue(value) : defaultFormatValue(value); return (
{label} {unit && {unit}}
{description && (

{description}

)}
{showSlider ? ( <> onChange(newValue)} min={min} max={max} step={step} aria-valuetext={`${displayValue} ${unit || ""}`} className="flex-1" disabled={disabled} />
{displayValue}
) : ( onChange(Number(e.target.value))} className="max-w-32" disabled={disabled} /> )}
); }