From 8cde0e6be9409463a93b68f187c0088dd21f3dc8 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 09:16:04 +0000 Subject: [PATCH 1/2] feat: add AnimatedNumber to SettingRangeVertical Implements an AnimatedNumber component using motion/react's useSpring and useTransform to smoothly animate value changes in the slider component. This enhances the user experience by providing fluid feedback when adjusting settings. - Adds `AnimatedNumber` component in `src/component/v2/forms.tsx`. - Updates `SettingRangeVertical` to use `AnimatedNumber` for value display. - Ensures correct formatting with `toLocaleString` and integer rounding. Co-authored-by: Asutorufa <16442314+Asutorufa@users.noreply.github.com> --- src/component/v2/forms.tsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/component/v2/forms.tsx b/src/component/v2/forms.tsx index 0578ed0a..0c14fbfe 100644 --- a/src/component/v2/forms.tsx +++ b/src/component/v2/forms.tsx @@ -2,7 +2,7 @@ import * as SliderPrimitive from '@radix-ui/react-slider'; import { clsx } from 'clsx'; -import { motion } from 'motion/react'; +import { motion, useSpring, useTransform } from 'motion/react'; import { CircleAlert, Eye, EyeOff } from 'lucide-react'; import React, { FC, useEffect, useId, useState } from 'react'; import { Button } from './button'; @@ -131,6 +131,17 @@ export const SettingPasswordVertical: FC<{ // --- Slider/Range Components --- +const AnimatedNumber = ({ value }: { value: number }) => { + const spring = useSpring(value, { mass: 0.8, stiffness: 75, damping: 15 }); + const display = useTransform(spring, (current) => Math.round(current).toLocaleString()); + + useEffect(() => { + spring.set(value); + }, [spring, value]); + + return {display}; +}; + export const SettingRangeVertical: FC<{ label: string; value: number; @@ -146,7 +157,7 @@ export const SettingRangeVertical: FC<{
{label}
- {value.toLocaleString()} {unit} + {unit}
From c84287c8b12bda5731b001cdc339afe9406df39c Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 09:26:08 +0000 Subject: [PATCH 2/2] refactor: extract spring config for AnimatedNumber Moves the spring configuration object outside the AnimatedNumber component to prevent recreation on every render, improving performance and stability. - Defines `springConfig` as a module-level constant. - Updates `AnimatedNumber` to use the static configuration. Co-authored-by: Asutorufa <16442314+Asutorufa@users.noreply.github.com> --- src/component/v2/forms.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/component/v2/forms.tsx b/src/component/v2/forms.tsx index 0c14fbfe..1bd1de37 100644 --- a/src/component/v2/forms.tsx +++ b/src/component/v2/forms.tsx @@ -131,8 +131,10 @@ export const SettingPasswordVertical: FC<{ // --- Slider/Range Components --- +const springConfig = { mass: 0.8, stiffness: 75, damping: 15 }; + const AnimatedNumber = ({ value }: { value: number }) => { - const spring = useSpring(value, { mass: 0.8, stiffness: 75, damping: 15 }); + const spring = useSpring(value, springConfig); const display = useTransform(spring, (current) => Math.round(current).toLocaleString()); useEffect(() => {