iter(g222): 时间选择支持高度档位
This commit is contained in:
@@ -1067,6 +1067,7 @@ const content = h(
|
|||||||
'div',
|
'div',
|
||||||
{ class: 'row' },
|
{ class: 'row' },
|
||||||
timePicker({ value: atTime, minuteStep: 15, clearable: true, onChange: (t) => toast.success(t ? `定在 ${t}` : '已清空时间') }),
|
timePicker({ value: atTime, minuteStep: 15, clearable: true, onChange: (t) => toast.success(t ? `定在 ${t}` : '已清空时间') }),
|
||||||
|
timePicker({ placeholder: '小号', size: 'sm' }),
|
||||||
timePicker({ placeholder: '禁用态', disabled: true }),
|
timePicker({ placeholder: '禁用态', disabled: true }),
|
||||||
h('span', { class: 'out' }, () => `当前时间:${atTime() || '未选'}`),
|
h('span', { class: 'out' }, () => `当前时间:${atTime() || '未选'}`),
|
||||||
),
|
),
|
||||||
|
|||||||
+3
-1
@@ -1,6 +1,6 @@
|
|||||||
# @ui-arch 组件库 Agent 文档(无图形版)
|
# @ui-arch 组件库 Agent 文档(无图形版)
|
||||||
|
|
||||||
> 自动生成于 2026-10-26T11:59:09.023Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
|
> 自动生成于 2026-10-26T12:02:54.662Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
|
||||||
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
|
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
|
||||||
|
|
||||||
## 快速上手
|
## 快速上手
|
||||||
@@ -1995,6 +1995,7 @@ const cmdk = commandPalette({ open: signal(false), items: [{ id: 'save', label:
|
|||||||
- value:Signal<string> —— 选中时间信号(HH:mm);不传则内部维护
|
- value:Signal<string> —— 选中时间信号(HH:mm);不传则内部维护
|
||||||
- minuteStep:number —— 分钟步长;缺省 5,超过 30 按 30 处理(如 15 只有 00/15/30/45)
|
- minuteStep:number —— 分钟步长;缺省 5,超过 30 按 30 处理(如 15 只有 00/15/30/45)
|
||||||
- clearable:boolean —— 显示清空按钮 ×(仅在有值时出现);缺省 false,键盘 Delete / Backspace 等价
|
- clearable:boolean —— 显示清空按钮 ×(仅在有值时出现);缺省 false,键盘 Delete / Backspace 等价
|
||||||
|
- size:'sm' | 'md' | 'lg' —— 触发器高度档位,与 textField / select 同口径;缺省 md
|
||||||
- placeholder:string —— 未选时占位文案;缺省「请选择时间」
|
- placeholder:string —— 未选时占位文案;缺省「请选择时间」
|
||||||
- disabled:boolean | Signal<boolean> —— 禁用触发器
|
- disabled:boolean | Signal<boolean> —— 禁用触发器
|
||||||
- onChange:(time: string) => void —— 写回回调:选时即触发一次(分默认 00),选完分再触发一次
|
- onChange:(time: string) => void —— 写回回调:选时即触发一次(分默认 00),选完分再触发一次
|
||||||
@@ -2013,6 +2014,7 @@ const at = signal('09:30'); timePicker({ value: at, minuteStep: 15, onChange: (t
|
|||||||
4. 列内可用 ↑↓ 环形移动、Home/End 直达首末;Tab、Esc、点击外部都能正常进出与收起
|
4. 列内可用 ↑↓ 环形移动、Home/End 直达首末;Tab、Esc、点击外部都能正常进出与收起
|
||||||
5. 需要 15 分钟一档就传 minuteStep: 15,步长只影响分列的可选值,时列始终 24 档
|
5. 需要 15 分钟一档就传 minuteStep: 15,步长只影响分列的可选值,时列始终 24 档
|
||||||
6. 需要允许回到「未选」态就传 clearable: true:有值时触发器右侧出现 ×(不进 Tab 序),聚焦触发器按 Delete / Backspace 也能清空,回调收到空串
|
6. 需要允许回到「未选」态就传 clearable: true:有值时触发器右侧出现 ×(不进 Tab 序),聚焦触发器按 Delete / Backspace 也能清空,回调收到空串
|
||||||
|
7. 要和输入框并排对齐就传 size(sm / md / lg):高度走 --ua-control-h-* 三档,与 textField、select 的档位完全同源,不会出现「旁边的输入框矮 6px」
|
||||||
|
|
||||||
现场演示:apps/docs/demo.html#sec-timepicker
|
现场演示:apps/docs/demo.html#sec-timepicker
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ export function timePicker(props: TimePickerProps): HTMLElement {
|
|||||||
'button',
|
'button',
|
||||||
{
|
{
|
||||||
type: 'button',
|
type: 'button',
|
||||||
class: 'ua-timepicker-trigger',
|
class: `ua-timepicker-trigger${props.size && props.size !== 'md' ? ` is-${props.size}` : ''}`,
|
||||||
'aria-haspopup': 'dialog',
|
'aria-haspopup': 'dialog',
|
||||||
'aria-expanded': () => String(open()),
|
'aria-expanded': () => String(open()),
|
||||||
disabled: props.disabled, // 布尔或信号禁用,h() 直接透传
|
disabled: props.disabled, // 布尔或信号禁用,h() 直接透传
|
||||||
|
|||||||
@@ -671,6 +671,7 @@ export interface TimePickerProps {
|
|||||||
minuteStep?: number; // 分钟步长;缺省 5,超过 30 按 30 处理
|
minuteStep?: number; // 分钟步长;缺省 5,超过 30 按 30 处理
|
||||||
placeholder?: string; // 未选时占位文案;缺省「请选择时间」
|
placeholder?: string; // 未选时占位文案;缺省「请选择时间」
|
||||||
clearable?: boolean; // 显示清空按钮 ×(有值时才出现);缺省 false,键盘 Delete / Backspace 等价
|
clearable?: boolean; // 显示清空按钮 ×(有值时才出现);缺省 false,键盘 Delete / Backspace 等价
|
||||||
|
size?: 'sm' | 'md' | 'lg'; // 触发器高度档位,与 textField / select 同口径;缺省 md
|
||||||
disabled?: boolean | Signal<boolean>; // 禁用触发器
|
disabled?: boolean | Signal<boolean>; // 禁用触发器
|
||||||
onChange?: (time: string) => void; // 写回回调(选时也会触发,分默认落到首个步长值)
|
onChange?: (time: string) => void; // 写回回调(选时也会触发,分默认落到首个步长值)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3674,6 +3674,11 @@
|
|||||||
"t": "boolean",
|
"t": "boolean",
|
||||||
"d": "显示清空按钮 ×(仅在有值时出现);缺省 false,键盘 Delete / Backspace 等价"
|
"d": "显示清空按钮 ×(仅在有值时出现);缺省 false,键盘 Delete / Backspace 等价"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"n": "size",
|
||||||
|
"t": "'sm' | 'md' | 'lg'",
|
||||||
|
"d": "触发器高度档位,与 textField / select 同口径;缺省 md"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"n": "placeholder",
|
"n": "placeholder",
|
||||||
"t": "string",
|
"t": "string",
|
||||||
@@ -3697,7 +3702,8 @@
|
|||||||
"先点时列定小时(分默认落到首个步长值,值立刻可用),再点分列即完成并收起,焦点回到触发器",
|
"先点时列定小时(分默认落到首个步长值,值立刻可用),再点分列即完成并收起,焦点回到触发器",
|
||||||
"列内可用 ↑↓ 环形移动、Home/End 直达首末;Tab、Esc、点击外部都能正常进出与收起",
|
"列内可用 ↑↓ 环形移动、Home/End 直达首末;Tab、Esc、点击外部都能正常进出与收起",
|
||||||
"需要 15 分钟一档就传 minuteStep: 15,步长只影响分列的可选值,时列始终 24 档",
|
"需要 15 分钟一档就传 minuteStep: 15,步长只影响分列的可选值,时列始终 24 档",
|
||||||
"需要允许回到「未选」态就传 clearable: true:有值时触发器右侧出现 ×(不进 Tab 序),聚焦触发器按 Delete / Backspace 也能清空,回调收到空串"
|
"需要允许回到「未选」态就传 clearable: true:有值时触发器右侧出现 ×(不进 Tab 序),聚焦触发器按 Delete / Backspace 也能清空,回调收到空串",
|
||||||
|
"要和输入框并排对齐就传 size(sm / md / lg):高度走 --ua-control-h-* 三档,与 textField、select 的档位完全同源,不会出现「旁边的输入框矮 6px」"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,20 +10,23 @@
|
|||||||
.ua-btn,
|
.ua-btn,
|
||||||
.ua-input,
|
.ua-input,
|
||||||
.ua-select-trigger,
|
.ua-select-trigger,
|
||||||
.ua-input-number-field {
|
.ua-input-number-field,
|
||||||
|
.ua-timepicker-trigger {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
height: var(--ua-control-h-md);
|
height: var(--ua-control-h-md);
|
||||||
}
|
}
|
||||||
.ua-btn.is-sm,
|
.ua-btn.is-sm,
|
||||||
.ua-input.is-sm,
|
.ua-input.is-sm,
|
||||||
.ua-select-trigger.is-sm,
|
.ua-select-trigger.is-sm,
|
||||||
.ua-input-number-field.is-sm {
|
.ua-input-number-field.is-sm,
|
||||||
|
.ua-timepicker-trigger.is-sm {
|
||||||
height: var(--ua-control-h-sm);
|
height: var(--ua-control-h-sm);
|
||||||
}
|
}
|
||||||
.ua-btn.is-lg,
|
.ua-btn.is-lg,
|
||||||
.ua-input.is-lg,
|
.ua-input.is-lg,
|
||||||
.ua-select-trigger.is-lg,
|
.ua-select-trigger.is-lg,
|
||||||
.ua-input-number-field.is-lg {
|
.ua-input-number-field.is-lg,
|
||||||
|
.ua-timepicker-trigger.is-lg {
|
||||||
height: var(--ua-control-h-lg);
|
height: var(--ua-control-h-lg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5024,8 +5027,7 @@ h5.ua-type-title { font-size: var(--ua-font-size-md); }
|
|||||||
gap: var(--ua-space-2);
|
gap: var(--ua-space-2);
|
||||||
min-width: 116px;
|
min-width: 116px;
|
||||||
padding: 0 var(--ua-space-3);
|
padding: 0 var(--ua-space-3);
|
||||||
height: var(--ua-control-h-md);
|
border: 1px solid var(--ua-color-border); /* 高度由文件顶部三档统一给,组件段不再重复声明 */
|
||||||
border: 1px solid var(--ua-color-border);
|
|
||||||
border-radius: var(--ua-radius-md);
|
border-radius: var(--ua-radius-md);
|
||||||
background: var(--ua-color-bg);
|
background: var(--ua-color-bg);
|
||||||
color: var(--ua-color-text);
|
color: var(--ua-color-text);
|
||||||
|
|||||||
Reference in New Issue
Block a user