iter: c02 textField/textarea 补 disabled 禁用态(布尔或信号绑定)
This commit is contained in:
@@ -48,6 +48,14 @@
|
||||
"acceptance": "ButtonProps / CheckboxProps / SwitchProps 新增可选 disabled(boolean | Signal<boolean>):静态布尔与信号绑定都支持,禁用时事件不触发、置灰 + not-allowed 光标;demo 表单区加静态禁用与信号联动示例;manifest/文档/llms-full.txt 同步;npm run check 全绿",
|
||||
"status": "done",
|
||||
"notes": "零新增辅助代码:复用 frame h() 对 false/undefined 移除属性、Signal 函数走响应式绑定的既有语义,disabled 透传即可;CSS 补通用禁用态(opacity 0.45 + not-allowed,开关轨道同级置灰);demo 用同一 locked 信号绑定 switch 的 checked 与 checkbox 的 disabled 展示联动"
|
||||
},
|
||||
{
|
||||
"id": "c02",
|
||||
"title": "textField / textarea 补 disabled 禁用态",
|
||||
"motivation": "输入类组件与 c01 的交互组件对齐,表单只读场景闭环",
|
||||
"acceptance": "TextFieldProps / TextareaProps 新增可选 disabled(boolean | Signal<boolean>),禁用时不响应输入、置灰 + not-allowed 光标;demo 禁用示例区补一个信号绑定输入框;manifest/文档/llms-full.txt 同步;npm run check 全绿",
|
||||
"status": "done",
|
||||
"notes": "与 c01 同模式:disabled 透传 h() 即得布尔/信号双支持;禁用态 CSS 追加 .ua-input / .ua-textarea;demo 复用 locked 信号联动开关与输入框"
|
||||
}
|
||||
]
|
||||
}
|
||||
+13
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"$schema": "ui-arch-registry-index/0.1",
|
||||
"generatedAt": "2026-10-23T08:07:27.570Z",
|
||||
"generatedAt": "2026-10-23T08:10:07.974Z",
|
||||
"repoRoot": ".",
|
||||
"packages": [
|
||||
{
|
||||
@@ -143,8 +143,8 @@
|
||||
"entry": "src/index.ts",
|
||||
"exports": [
|
||||
"button(props):按钮,variant = primary | ghost | danger,disabled 支持布尔或信号禁用",
|
||||
"textField(props):文本输入,value 信号双向绑定",
|
||||
"textarea(props):多行输入,value 信号双向绑定",
|
||||
"textField(props):文本输入,value 信号双向绑定,disabled 支持布尔或信号禁用",
|
||||
"textarea(props):多行输入,value 信号双向绑定,disabled 支持布尔或信号禁用",
|
||||
"checkbox(props):复选框,checked 信号双向绑定,disabled 支持布尔或信号禁用",
|
||||
"switchButton(props):开关,checked 信号双向绑定,disabled 支持布尔或信号禁用",
|
||||
"select(props):自绘下拉选择(非原生 select),value 信号双向绑定,点外部 / Esc 关闭,选项弹层带微动画",
|
||||
@@ -258,6 +258,11 @@
|
||||
"t": "string",
|
||||
"d": "占位文案"
|
||||
},
|
||||
{
|
||||
"n": "disabled",
|
||||
"t": "boolean | Signal<boolean>",
|
||||
"d": "禁用态:布尔直接置位,传信号则动态同步"
|
||||
},
|
||||
{
|
||||
"n": "onInput",
|
||||
"t": "(value: string) => void",
|
||||
@@ -293,6 +298,11 @@
|
||||
"t": "string",
|
||||
"d": "占位文案"
|
||||
},
|
||||
{
|
||||
"n": "disabled",
|
||||
"t": "boolean | Signal<boolean>",
|
||||
"d": "禁用态:布尔直接置位,传信号则动态同步"
|
||||
},
|
||||
{
|
||||
"n": "onInput",
|
||||
"t": "(value: string) => void",
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
{"time":"2026-10-23T16:00:11+08:00","id":"b04","result":"done","summary":"新增独立 pagination 分页器(page 信号双向绑定 + 省略号折叠 + 键盘可达),dataTable 新增 page 受控桥接实现联动;demo 联动卡片,check 全绿"}
|
||||
{"time":"2026-10-23T16:03:46+08:00","id":"b05","result":"done","summary":"文档站核查确认已 manifest 驱动;补齐默认值信息量缺口:CLI propsTable 新增默认值列(df 字段)+ llms-full 默认标注,16 处默认值提取;check 全绿"}
|
||||
{"time":"2026-10-23T16:08:17+08:00","id":"c01","result":"done","summary":"button/checkbox/switchButton 补 disabled(boolean|Signal),复用 h() 布尔/信号既有语义零辅助代码;CSS 通用禁用态 + demo 信号联动示例;check 全绿"}
|
||||
{"time":"2026-10-23T16:10:31+08:00","id":"c02","result":"done","summary":"textField/textarea 补 disabled(boolean|Signal),与 c01 同模式;禁用态 CSS 覆盖输入类;demo locked 信号联动;check 全绿"}
|
||||
|
||||
+2
-1
@@ -113,7 +113,8 @@ const app = h(
|
||||
{ class: 'row' },
|
||||
button({ label: '禁用按钮', variant: 'ghost', disabled: true }),
|
||||
checkbox({ label: '信号禁用的勾选', disabled: locked }),
|
||||
switchButton({ label: '锁定', checked: locked }), // 关掉开关即解锁上面的勾选框
|
||||
switchButton({ label: '锁定', checked: locked }), // 关掉开关即解锁上面的勾选框与输入框
|
||||
textField({ placeholder: '锁定后不可输入…', disabled: locked }),
|
||||
),
|
||||
),
|
||||
section(
|
||||
|
||||
+5
-3
@@ -1,6 +1,6 @@
|
||||
# @ui-arch 组件库 Agent 文档(无图形版)
|
||||
|
||||
> 自动生成于 2026-10-23T08:07:27.570Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
|
||||
> 自动生成于 2026-10-23T08:10:07.974Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
|
||||
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
|
||||
|
||||
## 快速上手
|
||||
@@ -71,6 +71,7 @@ button({ label: '提交', variant: 'primary', onClick: () => console.log('clicke
|
||||
|
||||
- value:Signal<string> —— 双向绑定信号:输入写回信号,信号变化写回输入框
|
||||
- placeholder:string —— 占位文案
|
||||
- disabled:boolean | Signal<boolean> —— 禁用态:布尔直接置位,传信号则动态同步
|
||||
- onInput(回调):(value: string) => void —— 输入回调,每次按键触发
|
||||
|
||||
示例:
|
||||
@@ -94,6 +95,7 @@ const name = signal(''); const el = textField({ value: name, placeholder: '输
|
||||
- value:Signal<string> —— 双向绑定信号
|
||||
- rows(默认 3):number —— 初始行数;缺省 3
|
||||
- placeholder:string —— 占位文案
|
||||
- disabled:boolean | Signal<boolean> —— 禁用态:布尔直接置位,传信号则动态同步
|
||||
- onInput(回调):(value: string) => void —— 输入回调
|
||||
|
||||
示例:
|
||||
@@ -510,8 +512,8 @@ dataTable({ data: users, selectable: true, columns: [{ key: 'name', header: '姓
|
||||
API 速览:
|
||||
|
||||
- button(props):按钮,variant = primary | ghost | danger,disabled 支持布尔或信号禁用
|
||||
- textField(props):文本输入,value 信号双向绑定
|
||||
- textarea(props):多行输入,value 信号双向绑定
|
||||
- textField(props):文本输入,value 信号双向绑定,disabled 支持布尔或信号禁用
|
||||
- textarea(props):多行输入,value 信号双向绑定,disabled 支持布尔或信号禁用
|
||||
- checkbox(props):复选框,checked 信号双向绑定,disabled 支持布尔或信号禁用
|
||||
- switchButton(props):开关,checked 信号双向绑定,disabled 支持布尔或信号禁用
|
||||
- select(props):自绘下拉选择(非原生 select),value 信号双向绑定,点外部 / Esc 关闭,选项弹层带微动画
|
||||
|
||||
@@ -48,8 +48,8 @@
|
||||
- 描述: DOM 皮肤组件库:button / textField / textarea / checkbox / switch / select / radioGroup / card / badge / alert / toast / tooltip / skeleton / spinner / progress / tabs / pagination / modal / form / formItem / dataTable,构建在 @ui-arch/frame 与 @ui-arch/table-core 之上,样式只消费 --ua-* 令牌。
|
||||
- API:
|
||||
- button(props):按钮,variant = primary | ghost | danger,disabled 支持布尔或信号禁用
|
||||
- textField(props):文本输入,value 信号双向绑定
|
||||
- textarea(props):多行输入,value 信号双向绑定
|
||||
- textField(props):文本输入,value 信号双向绑定,disabled 支持布尔或信号禁用
|
||||
- textarea(props):多行输入,value 信号双向绑定,disabled 支持布尔或信号禁用
|
||||
- checkbox(props):复选框,checked 信号双向绑定,disabled 支持布尔或信号禁用
|
||||
- switchButton(props):开关,checked 信号双向绑定,disabled 支持布尔或信号禁用
|
||||
- select(props):自绘下拉选择(非原生 select),value 信号双向绑定,点外部 / Esc 关闭,选项弹层带微动画
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { effect, h } from '@ui-arch/frame';
|
||||
import type { TextFieldProps } from './types.js';
|
||||
|
||||
/*** 文本输入:value 信号双向绑定,onInput 为输入回调 ***/
|
||||
/*** 文本输入:value 信号双向绑定,disabled 支持布尔或信号禁用,onInput 为输入回调 ***/
|
||||
export function textField(props: TextFieldProps): HTMLInputElement {
|
||||
const el = h('input', { class: 'ua-input', placeholder: props.placeholder ?? '' }) as HTMLInputElement;
|
||||
const el = h('input', { class: 'ua-input', placeholder: props.placeholder ?? '', disabled: props.disabled }) as HTMLInputElement; // false/undefined 移除属性,Signal 走响应式
|
||||
if (props.value) {
|
||||
const signal = props.value;
|
||||
el.addEventListener('input', () => signal(el.value)); // 用户输入写回信号
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { effect, h } from '@ui-arch/frame';
|
||||
import type { TextareaProps } from './types.js';
|
||||
|
||||
/*** 多行输入:value 信号双向绑定,onInput 为输入回调 ***/
|
||||
/*** 多行输入:value 信号双向绑定,disabled 支持布尔或信号禁用,onInput 为输入回调 ***/
|
||||
export function textarea(props: TextareaProps): HTMLTextAreaElement {
|
||||
const el = h('textarea', { class: 'ua-textarea', rows: props.rows ?? 3, placeholder: props.placeholder ?? '' }) as HTMLTextAreaElement;
|
||||
const el = h('textarea', { class: 'ua-textarea', rows: props.rows ?? 3, placeholder: props.placeholder ?? '', disabled: props.disabled }) as HTMLTextAreaElement; // false/undefined 移除属性,Signal 走响应式
|
||||
if (props.value) {
|
||||
const signal = props.value;
|
||||
el.addEventListener('input', () => signal(el.value)); // 用户输入写回信号
|
||||
|
||||
@@ -20,6 +20,7 @@ export interface ButtonProps {
|
||||
export interface TextFieldProps {
|
||||
placeholder?: string; // 占位文案
|
||||
value?: Signal<string>; // 双向绑定的信号
|
||||
disabled?: boolean | Signal<boolean>; // 禁用态:布尔直接置位,传信号则动态同步
|
||||
onInput?: (value: string) => void; // 输入回调
|
||||
}
|
||||
|
||||
@@ -81,6 +82,7 @@ export interface TextareaProps {
|
||||
placeholder?: string; // 占位文案
|
||||
rows?: number; // 行数;缺省 3
|
||||
value?: Signal<string>; // 双向绑定的信号
|
||||
disabled?: boolean | Signal<boolean>; // 禁用态:布尔直接置位,传信号则动态同步
|
||||
onInput?: (value: string) => void; // 输入回调
|
||||
}
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
"entry": "src/index.ts",
|
||||
"exports": [
|
||||
"button(props):按钮,variant = primary | ghost | danger,disabled 支持布尔或信号禁用",
|
||||
"textField(props):文本输入,value 信号双向绑定",
|
||||
"textarea(props):多行输入,value 信号双向绑定",
|
||||
"textField(props):文本输入,value 信号双向绑定,disabled 支持布尔或信号禁用",
|
||||
"textarea(props):多行输入,value 信号双向绑定,disabled 支持布尔或信号禁用",
|
||||
"checkbox(props):复选框,checked 信号双向绑定,disabled 支持布尔或信号禁用",
|
||||
"switchButton(props):开关,checked 信号双向绑定,disabled 支持布尔或信号禁用",
|
||||
"select(props):自绘下拉选择(非原生 select),value 信号双向绑定,点外部 / Esc 关闭,选项弹层带微动画",
|
||||
@@ -129,6 +129,11 @@
|
||||
"t": "string",
|
||||
"d": "占位文案"
|
||||
},
|
||||
{
|
||||
"n": "disabled",
|
||||
"t": "boolean | Signal<boolean>",
|
||||
"d": "禁用态:布尔直接置位,传信号则动态同步"
|
||||
},
|
||||
{
|
||||
"n": "onInput",
|
||||
"t": "(value: string) => void",
|
||||
@@ -164,6 +169,11 @@
|
||||
"t": "string",
|
||||
"d": "占位文案"
|
||||
},
|
||||
{
|
||||
"n": "disabled",
|
||||
"t": "boolean | Signal<boolean>",
|
||||
"d": "禁用态:布尔直接置位,传信号则动态同步"
|
||||
},
|
||||
{
|
||||
"n": "onInput",
|
||||
"t": "(value: string) => void",
|
||||
|
||||
@@ -776,7 +776,9 @@
|
||||
/* —— 通用禁用态:置灰 + 禁用光标 —— */
|
||||
.ua-btn:disabled,
|
||||
.ua-checkbox:disabled,
|
||||
.ua-switch-input:disabled {
|
||||
.ua-switch-input:disabled,
|
||||
.ua-input:disabled,
|
||||
.ua-textarea:disabled {
|
||||
opacity: 0.45;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user