@ticatec/uniface-element 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accordion/README.md +169 -0
- package/dist/accordion/README_CN.md +176 -0
- package/dist/action-bar/README.md +275 -0
- package/dist/action-bar/README_CN.md +285 -0
- package/dist/app-layout/README.md +374 -0
- package/dist/app-layout/README_CN.md +381 -0
- package/dist/app-top-bar/README.md +357 -0
- package/dist/app-top-bar/README_CN.md +365 -0
- package/dist/attachment-files/AttachmentFilesField.svelte +67 -1
- package/dist/attachment-files/AttachmentFilesField.svelte.d.ts +8 -1
- package/dist/base-calendar/CalendarBase.svelte +0 -3
- package/dist/box/README.md +385 -0
- package/dist/box/README_CN.md +393 -0
- package/dist/breadcrumbs/README.md +442 -0
- package/dist/breadcrumbs/README_CN.md +442 -0
- package/dist/button/Button.svelte +27 -7
- package/dist/button/Button.svelte.d.ts +3 -1
- package/dist/button/IconButton.svelte +26 -6
- package/dist/button/IconButton.svelte.d.ts +3 -1
- package/dist/button/IconButton_README.md +513 -0
- package/dist/button/IconButton_README_CN.md +513 -0
- package/dist/button/README.md +428 -0
- package/dist/button/README_CN.md +428 -0
- package/dist/button/TextButton.svelte +26 -6
- package/dist/button/TextButton.svelte.d.ts +3 -1
- package/dist/button/TextButton_README.md +571 -0
- package/dist/button/TextButton_README_CN.md +571 -0
- package/dist/card/README.md +666 -0
- package/dist/card/README_CN.md +666 -0
- package/dist/cascade-options-select/CascadeOptionSelect.svelte +43 -7
- package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +3 -4
- package/dist/cascade-options-select/README.md +663 -2
- package/dist/cascade-options-select/README_CN.md +664 -0
- package/dist/checkbox/CheckBox.svelte +20 -6
- package/dist/checkbox/CheckBox.svelte.d.ts +4 -2
- package/dist/checkbox/README.md +562 -0
- package/dist/checkbox/README_CN.md +727 -0
- package/dist/common-editor/NumberInput.svelte +39 -26
- package/dist/common-editor/NumberInput.svelte.d.ts +5 -1
- package/dist/concise-data-table/ConciseListTable.svelte +133 -36
- package/dist/concise-data-table/ConciseListTable.svelte.d.ts +8 -1
- package/dist/concise-data-table/DataCell.svelte +5 -6
- package/dist/concise-data-table/DataRow.svelte +22 -2
- package/dist/concise-data-table/DataRow.svelte.d.ts +1 -0
- package/dist/concise-data-table/README.md +606 -0
- package/dist/concise-data-table/README_CN.md +611 -0
- package/dist/context-menu/ContextMenu.svelte +138 -21
- package/dist/context-menu/ContextMenu.svelte.d.ts +5 -0
- package/dist/context-menu/ContextMenuItem.d.ts +20 -4
- package/dist/context-menu/README.md +551 -0
- package/dist/context-menu/README_CN.md +551 -0
- package/dist/criteria-field/CriteriaField.svelte +3 -5
- package/dist/criteria-field/README.md +532 -0
- package/dist/criteria-field/README_CN.md +532 -0
- package/dist/data-table/README.md +712 -0
- package/dist/data-table/README_CN.md +712 -0
- package/dist/date-picker/DatePicker.svelte +44 -7
- package/dist/date-picker/DatePicker.svelte.d.ts +3 -4
- package/dist/date-picker/DateTimePicker.svelte +32 -8
- package/dist/date-picker/DateTimePicker.svelte.d.ts +3 -4
- package/dist/date-picker/README.md +326 -0
- package/dist/date-picker/README_CN.md +316 -0
- package/dist/date-picker/ScrollBar.svelte +18 -8
- package/dist/date-picker/ScrollBar.svelte.d.ts +1 -1
- package/dist/date-picker/TimePanel.svelte +5 -5
- package/dist/date-picker/TimePanel.svelte.d.ts +1 -1
- package/dist/date-range/README.md +374 -0
- package/dist/date-range/README_CN.md +374 -0
- package/dist/dialog/DialogBoard.svelte +1 -1
- package/dist/dialog/README.md +596 -0
- package/dist/dialog/README_CN.md +596 -0
- package/dist/drawer/README.md +679 -1
- package/dist/drawer/README_CN.md +679 -0
- package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
- package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
- package/dist/group-box/group-check-box/README.md +749 -0
- package/dist/group-box/group-check-box/README_CN.md +750 -0
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
- package/dist/group-box/group-radio-box/README.md +920 -0
- package/dist/group-box/group-radio-box/README_CN.md +920 -0
- package/dist/image-files/README.md +1346 -0
- package/dist/image-files/README_CN.md +1346 -0
- package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
- package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
- package/dist/lib/forwardAllEvents.d.ts +3 -0
- package/dist/lib/forwardAllEvents.js +24 -0
- package/dist/list-box/README.md +579 -0
- package/dist/list-box/README_CN.md +682 -0
- package/dist/lookup-editor/LookupEditor.svelte +15 -3
- package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
- package/dist/lookup-editor/README.md +684 -0
- package/dist/lookup-editor/README_CN.md +684 -0
- package/dist/memo-editor/MemoEditor.svelte +77 -27
- package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
- package/dist/memo-editor/README.md +819 -0
- package/dist/memo-editor/README_CN.md +819 -0
- package/dist/message-box/README.md +398 -0
- package/dist/message-box/README_CN.md +398 -0
- package/dist/number-editor/NumberEditor.svelte +2 -2
- package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
- package/dist/number-editor/README.md +353 -22
- package/dist/number-editor/README_CN.md +357 -0
- package/dist/number-range/README.md +443 -0
- package/dist/number-range/README_CN.md +443 -0
- package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
- package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
- package/dist/options-multi-select/README.md +480 -0
- package/dist/options-multi-select/README_CN.md +480 -0
- package/dist/options-select/OptionsSelect.svelte +36 -5
- package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
- package/dist/options-select/README.md +632 -0
- package/dist/options-select/README_CN.md +632 -0
- package/dist/page/README.md +605 -0
- package/dist/page/README_CN.md +605 -0
- package/dist/pagination/README.md +946 -0
- package/dist/pagination/README_CN.md +946 -0
- package/dist/pagination-panel/README.md +1075 -0
- package/dist/pagination-panel/README_CN.md +1075 -0
- package/dist/popup-hint/README.md +841 -0
- package/dist/popup-hint/README_CN.md +840 -0
- package/dist/progress-bar/README.md +242 -0
- package/dist/progress-bar/README_CN.md +242 -0
- package/dist/progress-step-bar/README.md +316 -0
- package/dist/progress-step-bar/README_CN.md +316 -0
- package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
- package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
- package/dist/prompts-text-editor/README.md +329 -0
- package/dist/prompts-text-editor/README_CN.md +329 -0
- package/dist/property-editor/README.md +969 -0
- package/dist/property-editor/README_CN.md +969 -0
- package/dist/radio-button/README.md +372 -0
- package/dist/radio-button/README_CN.md +372 -0
- package/dist/radio-button/RadioButton.svelte +32 -3
- package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
- package/dist/search-box/README.md +425 -0
- package/dist/search-box/README_CN.md +424 -0
- package/dist/search-box/SearchBox.svelte +22 -6
- package/dist/search-box/SearchBox.svelte.d.ts +4 -1
- package/dist/tabs/README.md +919 -0
- package/dist/tabs/README_CN.md +920 -0
- package/dist/tag/README.md +922 -0
- package/dist/tag/README_CN.md +922 -0
- package/dist/text-editor/PasswordEditor.svelte +17 -2
- package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
- package/dist/text-editor/PasswordEditor_README.md +551 -0
- package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
- package/dist/text-editor/README.md +466 -0
- package/dist/text-editor/README_CN.md +466 -0
- package/dist/text-editor/TextEditor.svelte +51 -19
- package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
- package/dist/ticatec-uniface-web.css +1 -0
- package/dist/time-editor/README.md +498 -24
- package/dist/time-editor/README_CN.md +498 -0
- package/dist/time-editor/TimeEditor.svelte +7 -3
- package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
- package/dist/toast/README.md +667 -0
- package/dist/toast/README_CN.md +667 -0
- package/dist/transfer/README.md +795 -0
- package/dist/transfer/Transfer.svelte +6 -4
- package/dist/transfer/Transfer.svelte.d.ts +3 -1
- package/dist/tree-view/README.md +761 -0
- package/dist/tree-view/README_CN.md +761 -0
- package/dist/tree-view/TreeView.svelte +5 -3
- package/dist/tree-view/TreeView.svelte.d.ts +3 -1
- package/dist/unit-number-editor/README.md +546 -20
- package/dist/unit-number-editor/README_CN.md +525 -0
- package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
- package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
- package/docs/form-field/cn/README_CN.md +364 -0
- package/docs/form-field/en/README.md +364 -0
- package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
- package/docs/form-panel/flex-form/en/README.md +586 -0
- package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
- package/docs/form-panel/flex-row-form/en/README.md +787 -0
- package/docs/form-panel/grid-form/en/README.md +744 -0
- package/package.json +1 -1
- package/dist/drawer/README-CN.md +0 -1
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
# TextButton 文本按钮组件
|
|
2
|
+
|
|
3
|
+
一个极简的基于文本的按钮组件,专为细致的操作、导航链接和次要交互而设计,当完整的按钮外观可能过于突出时使用。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- **文本优先设计**: 简洁、极简的外观,强调文本内容
|
|
8
|
+
- **多种类型**: 默认、主要、次要、第三级和第四级按钮样式
|
|
9
|
+
- **尺寸选项**: 大、中、小三种尺寸
|
|
10
|
+
- **事件处理**: 支持点击、聚焦和失焦事件
|
|
11
|
+
- **无障碍访问**: 使用语义化按钮元素,支持禁用状态
|
|
12
|
+
- **防抖保护**: 内置点击防抖,防止快速重复触发
|
|
13
|
+
- **自定义样式**: 灵活的样式定制
|
|
14
|
+
- **插槽支持**: 通过插槽支持自定义内容
|
|
15
|
+
|
|
16
|
+
## 基本用法
|
|
17
|
+
|
|
18
|
+
```svelte
|
|
19
|
+
<script>
|
|
20
|
+
import TextButton from '@ticatec/uniface-element/TextButton';
|
|
21
|
+
|
|
22
|
+
const handleClick = (event) => {
|
|
23
|
+
console.log('文本按钮被点击!', event);
|
|
24
|
+
};
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<TextButton
|
|
28
|
+
label="点击我"
|
|
29
|
+
onclick={handleClick}
|
|
30
|
+
/>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 属性参数
|
|
34
|
+
|
|
35
|
+
| 属性 | 类型 | 默认值 | 描述 |
|
|
36
|
+
|------|------|---------|-------------|
|
|
37
|
+
| `disabled` | `boolean` | `false` | 是否禁用按钮 |
|
|
38
|
+
| `size` | `'big' \| 'medium' \| 'mini'` | `'medium'` | 按钮尺寸 |
|
|
39
|
+
| `label` | `string` | `''` | 按钮文本标签 |
|
|
40
|
+
| `type` | `'default' \| 'primary' \| 'secondary' \| 'third' \| 'forth'` | `'default'` | 按钮类型/样式 |
|
|
41
|
+
| `onclick` | `MouseClickHandler` | - | 点击事件处理器 |
|
|
42
|
+
| `onfocus` | `(event: FocusEvent) => void` | `() => {}` | 聚焦事件处理器 |
|
|
43
|
+
| `onblur` | `(event: FocusEvent) => void` | `() => {}` | 失焦事件处理器 |
|
|
44
|
+
| `style` | `string` | `''` | 自定义CSS样式 |
|
|
45
|
+
|
|
46
|
+
## 按钮类型
|
|
47
|
+
|
|
48
|
+
```svelte
|
|
49
|
+
<!-- 默认文本按钮 -->
|
|
50
|
+
<TextButton label="默认" type="default" onclick={handleClick} />
|
|
51
|
+
|
|
52
|
+
<!-- 主要文本按钮 -->
|
|
53
|
+
<TextButton label="主要" type="primary" onclick={handleClick} />
|
|
54
|
+
|
|
55
|
+
<!-- 次要文本按钮 -->
|
|
56
|
+
<TextButton label="次要" type="secondary" onclick={handleClick} />
|
|
57
|
+
|
|
58
|
+
<!-- 第三级文本按钮 -->
|
|
59
|
+
<TextButton label="第三级" type="third" onclick={handleClick} />
|
|
60
|
+
|
|
61
|
+
<!-- 第四级文本按钮 -->
|
|
62
|
+
<TextButton label="第四级" type="forth" onclick={handleClick} />
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 按钮尺寸
|
|
66
|
+
|
|
67
|
+
```svelte
|
|
68
|
+
<!-- 小型文本按钮 -->
|
|
69
|
+
<TextButton label="小型" size="mini" onclick={handleClick} />
|
|
70
|
+
|
|
71
|
+
<!-- 中型文本按钮(默认) -->
|
|
72
|
+
<TextButton label="中型" size="medium" onclick={handleClick} />
|
|
73
|
+
|
|
74
|
+
<!-- 大型文本按钮 -->
|
|
75
|
+
<TextButton label="大型" size="big" onclick={handleClick} />
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## 常见使用场景
|
|
79
|
+
|
|
80
|
+
### 导航链接
|
|
81
|
+
|
|
82
|
+
```svelte
|
|
83
|
+
<nav class="breadcrumb">
|
|
84
|
+
<TextButton label="首页" onclick={() => goto('/')} />
|
|
85
|
+
<span class="separator">›</span>
|
|
86
|
+
<TextButton label="产品" onclick={() => goto('/products')} />
|
|
87
|
+
<span class="separator">›</span>
|
|
88
|
+
<span>当前页面</span>
|
|
89
|
+
</nav>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 次要操作
|
|
93
|
+
|
|
94
|
+
```svelte
|
|
95
|
+
<div class="action-group">
|
|
96
|
+
<Button label="保存" type="primary" onclick={handleSave} />
|
|
97
|
+
<TextButton label="取消" onclick={handleCancel} />
|
|
98
|
+
<TextButton label="保存为草稿" onclick={handleSaveDraft} />
|
|
99
|
+
</div>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 标签页导航
|
|
103
|
+
|
|
104
|
+
```svelte
|
|
105
|
+
<script>
|
|
106
|
+
let activeTab = 'overview';
|
|
107
|
+
|
|
108
|
+
const switchTab = (tab) => (event) => {
|
|
109
|
+
activeTab = tab;
|
|
110
|
+
};
|
|
111
|
+
</script>
|
|
112
|
+
|
|
113
|
+
<div class="tabs">
|
|
114
|
+
<TextButton
|
|
115
|
+
label="概览"
|
|
116
|
+
type={activeTab === 'overview' ? 'primary' : 'default'}
|
|
117
|
+
onclick={switchTab('overview')}
|
|
118
|
+
/>
|
|
119
|
+
<TextButton
|
|
120
|
+
label="详情"
|
|
121
|
+
type={activeTab === 'details' ? 'primary' : 'default'}
|
|
122
|
+
onclick={switchTab('details')}
|
|
123
|
+
/>
|
|
124
|
+
<TextButton
|
|
125
|
+
label="评价"
|
|
126
|
+
type={activeTab === 'reviews' ? 'primary' : 'default'}
|
|
127
|
+
onclick={switchTab('reviews')}
|
|
128
|
+
/>
|
|
129
|
+
</div>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 菜单项
|
|
133
|
+
|
|
134
|
+
```svelte
|
|
135
|
+
<div class="menu">
|
|
136
|
+
<TextButton label="个人设置" onclick={openProfile} />
|
|
137
|
+
<TextButton label="账户" onclick={openAccount} />
|
|
138
|
+
<TextButton label="偏好设置" onclick={openPreferences} />
|
|
139
|
+
<TextButton label="退出登录" type="secondary" onclick={logout} />
|
|
140
|
+
</div>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## 事件处理
|
|
144
|
+
|
|
145
|
+
```svelte
|
|
146
|
+
<script>
|
|
147
|
+
const handleClick = (event) => {
|
|
148
|
+
console.log('文本按钮被点击:', event);
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const handleFocus = (event) => {
|
|
152
|
+
console.log('文本按钮获得焦点:', event);
|
|
153
|
+
// 显示额外的上下文或高亮
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const handleBlur = (event) => {
|
|
157
|
+
console.log('文本按钮失去焦点:', event);
|
|
158
|
+
// 移除高亮或上下文
|
|
159
|
+
};
|
|
160
|
+
</script>
|
|
161
|
+
|
|
162
|
+
<TextButton
|
|
163
|
+
label="交互文本"
|
|
164
|
+
onclick={handleClick}
|
|
165
|
+
onfocus={handleFocus}
|
|
166
|
+
onblur={handleBlur}
|
|
167
|
+
/>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## 禁用状态
|
|
171
|
+
|
|
172
|
+
```svelte
|
|
173
|
+
<TextButton
|
|
174
|
+
label="禁用操作"
|
|
175
|
+
disabled={true}
|
|
176
|
+
onclick={handleClick}
|
|
177
|
+
/>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## 自定义样式
|
|
181
|
+
|
|
182
|
+
```svelte
|
|
183
|
+
<TextButton
|
|
184
|
+
label="自定义样式"
|
|
185
|
+
style="
|
|
186
|
+
color: #007acc;
|
|
187
|
+
text-decoration: underline;
|
|
188
|
+
font-weight: bold;
|
|
189
|
+
padding: 4px 8px;
|
|
190
|
+
"
|
|
191
|
+
onclick={handleClick}
|
|
192
|
+
/>
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## 插槽用法
|
|
196
|
+
|
|
197
|
+
```svelte
|
|
198
|
+
<!-- 自定义内容替代标签 -->
|
|
199
|
+
<TextButton onclick={handleCustomAction}>
|
|
200
|
+
<span class="custom-text">
|
|
201
|
+
<i class="fas fa-arrow-right"></i>
|
|
202
|
+
了解更多
|
|
203
|
+
</span>
|
|
204
|
+
</TextButton>
|
|
205
|
+
|
|
206
|
+
<!-- 丰富内容 -->
|
|
207
|
+
<TextButton onclick={handleRichAction}>
|
|
208
|
+
<div class="rich-content">
|
|
209
|
+
<strong>高级选项</strong>
|
|
210
|
+
<small>配置详细设置</small>
|
|
211
|
+
</div>
|
|
212
|
+
</TextButton>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## 高级示例
|
|
216
|
+
|
|
217
|
+
### 条件文本按钮
|
|
218
|
+
|
|
219
|
+
```svelte
|
|
220
|
+
<script>
|
|
221
|
+
let isEditing = false;
|
|
222
|
+
|
|
223
|
+
const toggleEdit = (event) => {
|
|
224
|
+
isEditing = !isEditing;
|
|
225
|
+
};
|
|
226
|
+
</script>
|
|
227
|
+
|
|
228
|
+
<TextButton
|
|
229
|
+
label={isEditing ? "保存更改" : "编辑"}
|
|
230
|
+
type={isEditing ? "primary" : "default"}
|
|
231
|
+
onclick={toggleEdit}
|
|
232
|
+
/>
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### 链接样式按钮
|
|
236
|
+
|
|
237
|
+
```svelte
|
|
238
|
+
<TextButton
|
|
239
|
+
label="访问我们的网站"
|
|
240
|
+
style="
|
|
241
|
+
color: #007acc;
|
|
242
|
+
text-decoration: underline;
|
|
243
|
+
background: none;
|
|
244
|
+
border: none;
|
|
245
|
+
padding: 0;
|
|
246
|
+
"
|
|
247
|
+
onclick={() => window.open('https://example.com', '_blank')}
|
|
248
|
+
/>
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### 可展开部分
|
|
252
|
+
|
|
253
|
+
```svelte
|
|
254
|
+
<script>
|
|
255
|
+
let isExpanded = false;
|
|
256
|
+
|
|
257
|
+
const toggleSection = (event) => {
|
|
258
|
+
isExpanded = !isExpanded;
|
|
259
|
+
};
|
|
260
|
+
</script>
|
|
261
|
+
|
|
262
|
+
<div class="expandable-section">
|
|
263
|
+
<TextButton
|
|
264
|
+
label={isExpanded ? "显示更少 ▲" : "显示更多 ▼"}
|
|
265
|
+
onclick={toggleSection}
|
|
266
|
+
/>
|
|
267
|
+
|
|
268
|
+
{#if isExpanded}
|
|
269
|
+
<div class="expanded-content">
|
|
270
|
+
<p>额外的内容放在这里...</p>
|
|
271
|
+
</div>
|
|
272
|
+
{/if}
|
|
273
|
+
</div>
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### 分页控件
|
|
277
|
+
|
|
278
|
+
```svelte
|
|
279
|
+
<script>
|
|
280
|
+
let currentPage = 1;
|
|
281
|
+
let totalPages = 10;
|
|
282
|
+
|
|
283
|
+
const goToPage = (page) => (event) => {
|
|
284
|
+
if (page >= 1 && page <= totalPages) {
|
|
285
|
+
currentPage = page;
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
</script>
|
|
289
|
+
|
|
290
|
+
<div class="pagination">
|
|
291
|
+
<TextButton
|
|
292
|
+
label="上一页"
|
|
293
|
+
disabled={currentPage === 1}
|
|
294
|
+
onclick={goToPage(currentPage - 1)}
|
|
295
|
+
/>
|
|
296
|
+
|
|
297
|
+
<span class="page-info">第 {currentPage} 页,共 {totalPages} 页</span>
|
|
298
|
+
|
|
299
|
+
<TextButton
|
|
300
|
+
label="下一页"
|
|
301
|
+
disabled={currentPage === totalPages}
|
|
302
|
+
onclick={goToPage(currentPage + 1)}
|
|
303
|
+
/>
|
|
304
|
+
</div>
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### 过滤选项
|
|
308
|
+
|
|
309
|
+
```svelte
|
|
310
|
+
<script>
|
|
311
|
+
let activeFilters = new Set();
|
|
312
|
+
|
|
313
|
+
const toggleFilter = (filter) => (event) => {
|
|
314
|
+
if (activeFilters.has(filter)) {
|
|
315
|
+
activeFilters.delete(filter);
|
|
316
|
+
} else {
|
|
317
|
+
activeFilters.add(filter);
|
|
318
|
+
}
|
|
319
|
+
activeFilters = activeFilters; // 触发响应式更新
|
|
320
|
+
};
|
|
321
|
+
</script>
|
|
322
|
+
|
|
323
|
+
<div class="filters">
|
|
324
|
+
<TextButton
|
|
325
|
+
label="全部"
|
|
326
|
+
type={activeFilters.size === 0 ? 'primary' : 'default'}
|
|
327
|
+
onclick={() => activeFilters = new Set()}
|
|
328
|
+
/>
|
|
329
|
+
<TextButton
|
|
330
|
+
label="活跃"
|
|
331
|
+
type={activeFilters.has('active') ? 'primary' : 'default'}
|
|
332
|
+
onclick={toggleFilter('active')}
|
|
333
|
+
/>
|
|
334
|
+
<TextButton
|
|
335
|
+
label="已完成"
|
|
336
|
+
type={activeFilters.has('completed') ? 'primary' : 'default'}
|
|
337
|
+
onclick={toggleFilter('completed')}
|
|
338
|
+
/>
|
|
339
|
+
</div>
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### 表单操作
|
|
343
|
+
|
|
344
|
+
```svelte
|
|
345
|
+
<div class="form-actions">
|
|
346
|
+
<Button label="提交" type="primary" onclick={handleSubmit} />
|
|
347
|
+
|
|
348
|
+
<div class="secondary-actions">
|
|
349
|
+
<TextButton label="保存为草稿" onclick={saveDraft} />
|
|
350
|
+
<TextButton label="预览" onclick={showPreview} />
|
|
351
|
+
<TextButton label="重置" type="secondary" onclick={resetForm} />
|
|
352
|
+
</div>
|
|
353
|
+
</div>
|
|
354
|
+
|
|
355
|
+
<style>
|
|
356
|
+
.form-actions {
|
|
357
|
+
display: flex;
|
|
358
|
+
flex-direction: column;
|
|
359
|
+
gap: 12px;
|
|
360
|
+
align-items: flex-start;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.secondary-actions {
|
|
364
|
+
display: flex;
|
|
365
|
+
gap: 16px;
|
|
366
|
+
}
|
|
367
|
+
</style>
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### 下拉菜单触发器
|
|
371
|
+
|
|
372
|
+
```svelte
|
|
373
|
+
<script>
|
|
374
|
+
let showDropdown = false;
|
|
375
|
+
|
|
376
|
+
const toggleDropdown = (event) => {
|
|
377
|
+
showDropdown = !showDropdown;
|
|
378
|
+
};
|
|
379
|
+
</script>
|
|
380
|
+
|
|
381
|
+
<div class="dropdown-container">
|
|
382
|
+
<TextButton
|
|
383
|
+
label="选项 ▼"
|
|
384
|
+
type={showDropdown ? 'primary' : 'default'}
|
|
385
|
+
onclick={toggleDropdown}
|
|
386
|
+
/>
|
|
387
|
+
|
|
388
|
+
{#if showDropdown}
|
|
389
|
+
<div class="dropdown-menu">
|
|
390
|
+
<TextButton label="选项 1" onclick={selectOption1} />
|
|
391
|
+
<TextButton label="选项 2" onclick={selectOption2} />
|
|
392
|
+
<TextButton label="选项 3" onclick={selectOption3} />
|
|
393
|
+
</div>
|
|
394
|
+
{/if}
|
|
395
|
+
</div>
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
## 无障碍访问
|
|
399
|
+
|
|
400
|
+
TextButton组件遵循无障碍访问最佳实践:
|
|
401
|
+
|
|
402
|
+
- 使用语义化的`<button>`元素
|
|
403
|
+
- 支持键盘导航(Tab、Enter、Space键)
|
|
404
|
+
- 正确的禁用状态处理
|
|
405
|
+
- 为屏幕阅读器提供聚焦和失焦事件
|
|
406
|
+
|
|
407
|
+
### 改善无障碍访问
|
|
408
|
+
|
|
409
|
+
```svelte
|
|
410
|
+
<!-- 为屏幕阅读器提供上下文 -->
|
|
411
|
+
<TextButton
|
|
412
|
+
label="删除"
|
|
413
|
+
onclick={handleDelete}
|
|
414
|
+
style="aria-label: 永久删除此项目"
|
|
415
|
+
/>
|
|
416
|
+
|
|
417
|
+
<!-- 添加角色和描述 -->
|
|
418
|
+
<TextButton
|
|
419
|
+
label="了解更多"
|
|
420
|
+
onclick={showDetails}
|
|
421
|
+
style="role: button; aria-describedby: help-text"
|
|
422
|
+
/>
|
|
423
|
+
<div id="help-text" style="display: none;">
|
|
424
|
+
打开关于此功能的详细信息
|
|
425
|
+
</div>
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
## 样式定制
|
|
429
|
+
|
|
430
|
+
组件使用以下CSS类:
|
|
431
|
+
|
|
432
|
+
- `.uniface-button` - 基础按钮类
|
|
433
|
+
- `.text-button` - 文本按钮特定样式
|
|
434
|
+
- `.{size}` - 尺寸特定样式(big、medium、mini)
|
|
435
|
+
- `.{type}` - 类型特定样式(default、primary等)
|
|
436
|
+
- `.disabled` - 禁用状态样式
|
|
437
|
+
|
|
438
|
+
### CSS示例
|
|
439
|
+
|
|
440
|
+
```css
|
|
441
|
+
.uniface-button.text-button {
|
|
442
|
+
display: inline-flex;
|
|
443
|
+
align-items: center;
|
|
444
|
+
justify-content: center;
|
|
445
|
+
padding: 4px 8px;
|
|
446
|
+
background: transparent;
|
|
447
|
+
border: none;
|
|
448
|
+
color: #333;
|
|
449
|
+
font-size: 14px;
|
|
450
|
+
cursor: pointer;
|
|
451
|
+
transition: all 0.2s ease;
|
|
452
|
+
text-decoration: none;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
.uniface-button.text-button:hover:not(.disabled) {
|
|
456
|
+
background: rgba(0, 0, 0, 0.05);
|
|
457
|
+
text-decoration: underline;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
.uniface-button.text-button:focus {
|
|
461
|
+
outline: 2px solid #007acc;
|
|
462
|
+
outline-offset: 2px;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
.uniface-button.text-button.primary {
|
|
466
|
+
color: #007acc;
|
|
467
|
+
font-weight: 500;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
.uniface-button.text-button.secondary {
|
|
471
|
+
color: #666;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
.uniface-button.text-button.big {
|
|
475
|
+
padding: 8px 12px;
|
|
476
|
+
font-size: 16px;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.uniface-button.text-button.mini {
|
|
480
|
+
padding: 2px 4px;
|
|
481
|
+
font-size: 12px;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
.uniface-button.text-button.disabled {
|
|
485
|
+
opacity: 0.6;
|
|
486
|
+
cursor: not-allowed;
|
|
487
|
+
}
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
## 最佳实践
|
|
491
|
+
|
|
492
|
+
1. **适当的上下文**: 将文本按钮用于次要操作和导航
|
|
493
|
+
2. **清晰的标签**: 提供清楚表明操作的描述性标签
|
|
494
|
+
3. **视觉层次**: 使用不同类型建立适当的视觉层次
|
|
495
|
+
4. **一致的间距**: 在文本按钮之间保持一致的间距
|
|
496
|
+
5. **悬停状态**: 确保悬停状态提供清晰的反馈
|
|
497
|
+
6. **无障碍访问**: 始终考虑键盘导航和屏幕阅读器
|
|
498
|
+
7. **上下文感知**: 确保文本按钮在其周围环境中工作良好
|
|
499
|
+
|
|
500
|
+
## 常见模式
|
|
501
|
+
|
|
502
|
+
### 内联操作
|
|
503
|
+
|
|
504
|
+
```svelte
|
|
505
|
+
<p>
|
|
506
|
+
您的更改已保存。
|
|
507
|
+
<TextButton label="撤销" onclick={undoChanges} />
|
|
508
|
+
</p>
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
### 卡片操作
|
|
512
|
+
|
|
513
|
+
```svelte
|
|
514
|
+
<div class="card">
|
|
515
|
+
<h3>文章标题</h3>
|
|
516
|
+
<p>文章摘要...</p>
|
|
517
|
+
|
|
518
|
+
<div class="card-actions">
|
|
519
|
+
<TextButton label="阅读更多" type="primary" onclick={readMore} />
|
|
520
|
+
<TextButton label="分享" onclick={shareArticle} />
|
|
521
|
+
<TextButton label="保存" onclick={saveArticle} />
|
|
522
|
+
</div>
|
|
523
|
+
</div>
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
### 列表项操作
|
|
527
|
+
|
|
528
|
+
```svelte
|
|
529
|
+
<div class="list-item">
|
|
530
|
+
<span class="item-name">文档.pdf</span>
|
|
531
|
+
<div class="item-actions">
|
|
532
|
+
<TextButton label="下载" onclick={download} />
|
|
533
|
+
<TextButton label="分享" onclick={share} />
|
|
534
|
+
<TextButton label="删除" type="secondary" onclick={deleteFile} />
|
|
535
|
+
</div>
|
|
536
|
+
</div>
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
## 与其他组件集成
|
|
540
|
+
|
|
541
|
+
```svelte
|
|
542
|
+
<!-- 与模态框 -->
|
|
543
|
+
<Modal bind:open={showModal}>
|
|
544
|
+
<h2>确认操作</h2>
|
|
545
|
+
<p>您确定要继续吗?</p>
|
|
546
|
+
|
|
547
|
+
<div class="modal-actions">
|
|
548
|
+
<Button label="确认" type="primary" onclick={confirm} />
|
|
549
|
+
<TextButton label="取消" onclick={() => showModal = false} />
|
|
550
|
+
</div>
|
|
551
|
+
</Modal>
|
|
552
|
+
|
|
553
|
+
<!-- 与工具提示 -->
|
|
554
|
+
<Tooltip text="此操作无法撤销">
|
|
555
|
+
<TextButton label="删除全部" type="secondary" onclick={deleteAll} />
|
|
556
|
+
</Tooltip>
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
## 浏览器支持
|
|
560
|
+
|
|
561
|
+
TextButton组件在支持以下特性的所有现代浏览器中工作:
|
|
562
|
+
- ES6+ JavaScript
|
|
563
|
+
- CSS Flexbox
|
|
564
|
+
- 语义化按钮元素
|
|
565
|
+
|
|
566
|
+
## 性能
|
|
567
|
+
|
|
568
|
+
- 最小化的样式,快速渲染
|
|
569
|
+
- 内置点击防抖
|
|
570
|
+
- 高效的事件处理
|
|
571
|
+
- 轻量级DOM结构
|