R
交互控件DurationPickergooeysquircle弹簧

时长选择器

用弹簧和形变(gooey)动画输入小时与分钟的选择器,squircle 圆角平滑过渡。

小时
分钟

上面的组件正在页面上实时运行,可以直接交互。

安装

在项目根目录执行下面的命令,组件源码会写入 @/components/ui/duration-picker.tsx。

npx shadcn@latest add swamimalode07/rare-ui/duration-picker

用法

组件默认导出(或具名导出)即可直接使用,不需要额外的 Provider。

duration-picker.tsx
import { useState } from "react"
import { DurationPicker, type DurationValue } from "@/components/ui/duration-picker"
export function Demo() {
const [value, setValue] = useState<DurationValue>({ hours: 1, minutes: 30 })
return (
<DurationPicker
value={value}
onChange={setValue}
onConfirm={(v) => console.log(v)}
maxHours={23}
maxMinutes={59}
hoursLabel="小时"
minutesLabel="分钟"
/>
)
}

属性

下表列出了该组件公开的主要属性,所有未列出的原生属性都会透传到根元素。

属性类型默认值说明
value{ hours: number; minutes: number }—受控值。
defaultValueDurationValue—非受控默认值。
onChange(value: DurationValue) => void—值变化回调。
onConfirm(value: DurationValue) => void—确认回调。
onEditingChange(editing: boolean) => void—编辑态变化回调。
defaultEditingboolean—初始是否处于编辑态。
maxHoursnumber—小时上限。
maxMinutesnumber—分钟上限。
hoursLabelstring—小时单位文案。
minutesLabelstring—分钟单位文案。
disabledboolean—禁用交互。