iter(g224): 收起态上下键微调时间

This commit is contained in:
HIsheR
2026-10-26 20:05:07 +08:00
parent c5826b7211
commit 63351dcaba
3 changed files with 14 additions and 5 deletions
+2 -1
View File
@@ -1,6 +1,6 @@
# @ui-arch 组件库 Agent 文档(无图形版)
> 自动生成于 2026-10-26T12:04:13.764Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
> 自动生成于 2026-10-26T12:04:54.649Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
## 快速上手
@@ -2016,6 +2016,7 @@ const at = signal('09:30'); timePicker({ value: at, minuteStep: 15, onChange: (t
6. 需要允许回到「未选」态就传 clearable: true:有值时触发器右侧出现 ×(不进 Tab 序),聚焦触发器按 Delete / Backspace 也能清空,回调收到空串
7. 要和输入框并排对齐就传 size(sm / md / lg):高度走 --ua-control-h-* 三档,与 textField、select 的档位完全同源,不会出现「旁边的输入框矮 6px」
8. 传入值不在步长档上时(如 09:07 + 15 分钟档)不会「没有高亮」:分列按最近档高亮并滚到位,点它即落到 09:15;原值在触发器上照常显示,直到用户重新选
9. 收起态键盘微调:聚焦触发器按 ↑↓ 按步长加减(12:30 步长 15 → 12:45),Shift + ↑↓ 按小时加减,跨 00:00 / 23:xx 自动环形;改完同样触发 onChange
现场演示:apps/docs/demo.html#sec-timepicker
+10 -3
View File
@@ -127,10 +127,17 @@ export function timePicker(props: TimePickerProps): HTMLElement {
effect(() => { clearBtn.hidden = !clearable || !value(); }); // 无值或未开启时藏起来(hidden 一并移出点击区)
root.addEventListener('keydown', (e: KeyboardEvent) => {
if (open() || !clearable) return; // 卫语句:展开时按键归列内导航,未开启清空则不接管
if (e.key !== 'Backspace' && e.key !== 'Delete') return; // 卫语句:只接管这两个键
if (open()) return; // 卫语句:展开时按键归列内导航
if (clearable && (e.key === 'Backspace' || e.key === 'Delete')) { // 收起态清空:不必伸手去点 ×
e.preventDefault();
clear();
return;
}
if (!value() || (e.key !== 'ArrowUp' && e.key !== 'ArrowDown')) return; // 卫语句:无值不猜、只管上下键
e.preventDefault();
clear(); // 键盘等价:不必伸手去点 ×
const delta = (e.key === 'ArrowUp' ? 1 : -1) * (e.shiftKey ? 60 : step); // Shift + ↑↓ 按小时调,否则按步长调
const total = (Number(picked().hh) * 60 + Number(picked().mm) + delta + 1440) % 1440; // 环形:00:00 的上一档回到 23:xx
commit(pad(Math.floor(total / 60)), pad(total % 60)); // 收起态改值同样派发 onChange
});
bindOutside(root, open, () => open(false)); // 点外部收起:仅展开期间挂监听
effect(() => {
+2 -1
View File
@@ -3704,7 +3704,8 @@
"需要 15 分钟一档就传 minuteStep: 15,步长只影响分列的可选值,时列始终 24 档",
"需要允许回到「未选」态就传 clearable: true:有值时触发器右侧出现 ×(不进 Tab 序),聚焦触发器按 Delete / Backspace 也能清空,回调收到空串",
"要和输入框并排对齐就传 size(sm / md / lg):高度走 --ua-control-h-* 三档,与 textField、select 的档位完全同源,不会出现「旁边的输入框矮 6px」",
"传入值不在步长档上时(如 09:07 + 15 分钟档)不会「没有高亮」:分列按最近档高亮并滚到位,点它即落到 09:15;原值在触发器上照常显示,直到用户重新选"
"传入值不在步长档上时(如 09:07 + 15 分钟档)不会「没有高亮」:分列按最近档高亮并滚到位,点它即落到 09:15;原值在触发器上照常显示,直到用户重新选",
"收起态键盘微调:聚焦触发器按 ↑↓ 按步长加减(12:30 步长 15 → 12:45),Shift + ↑↓ 按小时加减,跨 00:00 / 23:xx 自动环形;改完同样触发 onChange"
]
}
]