TimePicker

时间选择器,单选 type=time,HH:mm:ss 三列滚动选择,受控/非受控;展示经 Intl.DateTimeFormat 本地化。支持 type=timeRange 范围选择、format 字符串控制列、value 字符串入参。

设计文档

如何引入

import { TimePicker } from '@chenzy-design/svelte';

基础时间选择

滚动列选择时、分、秒,onChange 返回 Date

选中:(未选)

12 小时制

use12Hours + format="hh:mm:ss A",带 AM/PM 列

选中:(未选)

自定义格式

format 决定显示哪些列,如 "HH:mm" 仅时、分

format="HH:mm",仅时、分两列

步长与禁用时段

minuteStep 步长 + disabledHours/hideDisabledOptions 限制可选范围

步长 5 分钟,禁用非工作时段,超出范围项隐藏

尺寸 / 状态 / 禁用

size、status、clearable、disabled 等触发器形态

small
large + 可清除
error 状态
禁用

时间范围

type=timeRange 选择起止时间

起:--, 止:--

面板头部/底部

panelHeader、panelFooter 自定义面板顶部与底部内容

受控面板

受控 open + onOpenChange,用 Button 切换面板开合

自定义触发器

triggerRender 完全替换默认触发器渲染

禁用时段

disabledTime 按已选时间动态返回禁用规则,覆盖顶层 disabledHours/Minutes/Seconds

disabledTime 按已选时间动态禁用(0 ~ 6 点 + 更早分钟)

此刻按钮

showNow 控制面板底部「此刻」快捷按钮的显隐

默认:面板底部含「此刻」按钮
showNow=false:隐藏「此刻」按钮

关闭卸载

destroyOnClose 控制面板关闭时卸载还是保留浮层 DOM

默认 destroyOnClose=true:关闭即卸载浮层 DOM
destroyOnClose=false:首次打开后保留 DOM,关闭仅隐藏(频繁开关更省重挂载)

前缀

prefix 在触发器前展示文本或图标

API 参考

TimePicker

Props

属性说明类型默认值
valueDate | string | [Date|string|null, Date|string|null] | nullundefined
defaultValueDate | string | [Date|string|null, Date|string|null] | nullnull
type'time'|'timeRange''time'
rangebooleanfalse
formatstringundefined
openbooleanundefined
defaultOpenbooleanfalse
placeholderstring'请选择时间'
size'small'|'default'|'large''default'
status'default'|'warning'|'error''default'
disabledbooleanfalse
clearablebooleantrue
hourStepnumber1
minuteStepnumber1
secondStepnumber1
showSecondbooleantrue
use12Hoursbooleanfalse
disabledHours() => number[]undefined
disabledMinutes(hour: number) => number[]undefined
disabledSeconds(hour: number, minute: number) => number[]undefined
hideDisabledOptionsbooleanfalse
showNow显示「此刻」快捷按钮booleantrue
destroyOnClose关闭时卸载浮层 DOM;false 则首次打开后保留booleantrue
localestring'zh-CN'
onChange(v: (Date|null) | [Date|null, Date|null]) => voidundefined
onOpenChange(open: boolean) => voidundefined
ariaLabelstringundefined
autoAdjustOverflow浮层溢出自动调整booleantrue
autoFocus挂载时自动聚焦触发器booleanfalse
clearIcon自定义清除按钮图标Snippetundefined
showClear是否显示清除按钮(clearable 别名)booleanundefined
dropdownClassName浮层 classNamestringundefined
dropdownMargin浮层溢出冗余number | { x?: number; y?: number }undefined
dropdownStyle浮层内联样式string | Record<string, string>undefined
focusOnOpen打开面板时自动聚焦第一列booleantrue
getPopupContainer浮层挂载容器() => HTMLElementundefined
motion面板展开动画booleantrue
panelHeader面板顶部自定义内容string | Snippetundefined
position浮层弹出位置string'bottomLeft'
prefix触发器前缀内容string | Snippetundefined
rangeSeparator范围模式分隔符string'~'
scrollItemProps滚动列 item 属性透传Record<string, unknown>undefined
stopPropagation阻止浮层点击事件冒泡booleantrue
zIndex浮层 z-indexnumber1030
onBlur触发器失焦(e: FocusEvent) => voidundefined
onFocus触发器聚焦(e: FocusEvent) => voidundefined
onChangeWithDateFirstonChange 参数 dateFirst 模式booleanfalse
onClickOutSide点击外部触发(e: MouseEvent) => voidundefined
disabledTime按当前已选时间返回禁用规则,覆盖顶层 disabledHours/Minutes/Seconds,未返回的字段回退顶层(date: Date) => { disabledHours?: () => number[]; disabledMinutes?: (h: number) => number[]; disabledSeconds?: (h: number, m: number) => number[] }undefined
panelFooter面板底部自定义内容(在"此刻"/"确定"按钮上方插入)string | Snippetundefined
inputStyle输入框样式(透传到触发器 button)string | Record<string, string>undefined
inputReadOnly输入框 readonly 属性(仅允许通过面板选择)booleanfalse
triggerRender完全自定义触发器渲染Snippet<[{ value: Date | null; placeholder: string; open: boolean; disabled: boolean }]>undefined
borderless无边框模式booleanfalse
preventScrollfocus 时阻止滚动booleanfalse

Methods

属性类型说明
focus()命令式聚焦触发器(尊重 preventScroll,对齐 Semi)
blur()命令式移除焦点(对齐 Semi)

Accessibility

ARIA roledialog
  • 触发器 button aria-haspopup=dialog、aria-expanded、aria-controls 指向面板
  • 面板 role=dialog;每列 role=listbox,项 role=option + aria-selected
  • 禁用项 aria-disabled=true 且不可点击/键选;hideDisabledOptions 时从列移除
  • 触发器 Enter/Space/↓ 打开;Esc 关闭;选项 Enter/Space 选择
  • 12h 制额外 AM/PM 列;文案经 locale TimePicker.am/pm
  • 打开时各列命令式 scrollIntoView 到选中项
  • timeRange 模式:面板顶部 role=tablist 起止切换;确定从起跳到止
  • format 字符串经 core parseFormatSpec 决定显示列与 12h(覆盖 showSecond/use12Hours)

设计变量

变量默认值用法
--cd-color-time-picker-range-panel-border rgba(0, 0, 0, 0.1)时间选择器描边颜色
--cd-color-time-picker-range-picker-panel-split-border var(--cd-color-border)时间选择器菜单分割线颜色