@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.
Files changed (178) hide show
  1. package/dist/accordion/README.md +169 -0
  2. package/dist/accordion/README_CN.md +176 -0
  3. package/dist/action-bar/README.md +275 -0
  4. package/dist/action-bar/README_CN.md +285 -0
  5. package/dist/app-layout/README.md +374 -0
  6. package/dist/app-layout/README_CN.md +381 -0
  7. package/dist/app-top-bar/README.md +357 -0
  8. package/dist/app-top-bar/README_CN.md +365 -0
  9. package/dist/attachment-files/AttachmentFilesField.svelte +67 -1
  10. package/dist/attachment-files/AttachmentFilesField.svelte.d.ts +8 -1
  11. package/dist/base-calendar/CalendarBase.svelte +0 -3
  12. package/dist/box/README.md +385 -0
  13. package/dist/box/README_CN.md +393 -0
  14. package/dist/breadcrumbs/README.md +442 -0
  15. package/dist/breadcrumbs/README_CN.md +442 -0
  16. package/dist/button/Button.svelte +27 -7
  17. package/dist/button/Button.svelte.d.ts +3 -1
  18. package/dist/button/IconButton.svelte +26 -6
  19. package/dist/button/IconButton.svelte.d.ts +3 -1
  20. package/dist/button/IconButton_README.md +513 -0
  21. package/dist/button/IconButton_README_CN.md +513 -0
  22. package/dist/button/README.md +428 -0
  23. package/dist/button/README_CN.md +428 -0
  24. package/dist/button/TextButton.svelte +26 -6
  25. package/dist/button/TextButton.svelte.d.ts +3 -1
  26. package/dist/button/TextButton_README.md +571 -0
  27. package/dist/button/TextButton_README_CN.md +571 -0
  28. package/dist/card/README.md +666 -0
  29. package/dist/card/README_CN.md +666 -0
  30. package/dist/cascade-options-select/CascadeOptionSelect.svelte +43 -7
  31. package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +3 -4
  32. package/dist/cascade-options-select/README.md +663 -2
  33. package/dist/cascade-options-select/README_CN.md +664 -0
  34. package/dist/checkbox/CheckBox.svelte +20 -6
  35. package/dist/checkbox/CheckBox.svelte.d.ts +4 -2
  36. package/dist/checkbox/README.md +562 -0
  37. package/dist/checkbox/README_CN.md +727 -0
  38. package/dist/common-editor/NumberInput.svelte +39 -26
  39. package/dist/common-editor/NumberInput.svelte.d.ts +5 -1
  40. package/dist/concise-data-table/ConciseListTable.svelte +133 -36
  41. package/dist/concise-data-table/ConciseListTable.svelte.d.ts +8 -1
  42. package/dist/concise-data-table/DataCell.svelte +5 -6
  43. package/dist/concise-data-table/DataRow.svelte +22 -2
  44. package/dist/concise-data-table/DataRow.svelte.d.ts +1 -0
  45. package/dist/concise-data-table/README.md +606 -0
  46. package/dist/concise-data-table/README_CN.md +611 -0
  47. package/dist/context-menu/ContextMenu.svelte +138 -21
  48. package/dist/context-menu/ContextMenu.svelte.d.ts +5 -0
  49. package/dist/context-menu/ContextMenuItem.d.ts +20 -4
  50. package/dist/context-menu/README.md +551 -0
  51. package/dist/context-menu/README_CN.md +551 -0
  52. package/dist/criteria-field/CriteriaField.svelte +3 -5
  53. package/dist/criteria-field/README.md +532 -0
  54. package/dist/criteria-field/README_CN.md +532 -0
  55. package/dist/data-table/README.md +712 -0
  56. package/dist/data-table/README_CN.md +712 -0
  57. package/dist/date-picker/DatePicker.svelte +44 -7
  58. package/dist/date-picker/DatePicker.svelte.d.ts +3 -4
  59. package/dist/date-picker/DateTimePicker.svelte +32 -8
  60. package/dist/date-picker/DateTimePicker.svelte.d.ts +3 -4
  61. package/dist/date-picker/README.md +326 -0
  62. package/dist/date-picker/README_CN.md +316 -0
  63. package/dist/date-picker/ScrollBar.svelte +18 -8
  64. package/dist/date-picker/ScrollBar.svelte.d.ts +1 -1
  65. package/dist/date-picker/TimePanel.svelte +5 -5
  66. package/dist/date-picker/TimePanel.svelte.d.ts +1 -1
  67. package/dist/date-range/README.md +374 -0
  68. package/dist/date-range/README_CN.md +374 -0
  69. package/dist/dialog/DialogBoard.svelte +1 -1
  70. package/dist/dialog/README.md +596 -0
  71. package/dist/dialog/README_CN.md +596 -0
  72. package/dist/drawer/README.md +679 -1
  73. package/dist/drawer/README_CN.md +679 -0
  74. package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
  75. package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
  76. package/dist/group-box/group-check-box/README.md +749 -0
  77. package/dist/group-box/group-check-box/README_CN.md +750 -0
  78. package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
  79. package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
  80. package/dist/group-box/group-radio-box/README.md +920 -0
  81. package/dist/group-box/group-radio-box/README_CN.md +920 -0
  82. package/dist/image-files/README.md +1346 -0
  83. package/dist/image-files/README_CN.md +1346 -0
  84. package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
  85. package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
  86. package/dist/lib/forwardAllEvents.d.ts +3 -0
  87. package/dist/lib/forwardAllEvents.js +24 -0
  88. package/dist/list-box/README.md +579 -0
  89. package/dist/list-box/README_CN.md +682 -0
  90. package/dist/lookup-editor/LookupEditor.svelte +15 -3
  91. package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
  92. package/dist/lookup-editor/README.md +684 -0
  93. package/dist/lookup-editor/README_CN.md +684 -0
  94. package/dist/memo-editor/MemoEditor.svelte +77 -27
  95. package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
  96. package/dist/memo-editor/README.md +819 -0
  97. package/dist/memo-editor/README_CN.md +819 -0
  98. package/dist/message-box/README.md +398 -0
  99. package/dist/message-box/README_CN.md +398 -0
  100. package/dist/number-editor/NumberEditor.svelte +2 -2
  101. package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
  102. package/dist/number-editor/README.md +353 -22
  103. package/dist/number-editor/README_CN.md +357 -0
  104. package/dist/number-range/README.md +443 -0
  105. package/dist/number-range/README_CN.md +443 -0
  106. package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
  107. package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
  108. package/dist/options-multi-select/README.md +480 -0
  109. package/dist/options-multi-select/README_CN.md +480 -0
  110. package/dist/options-select/OptionsSelect.svelte +36 -5
  111. package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
  112. package/dist/options-select/README.md +632 -0
  113. package/dist/options-select/README_CN.md +632 -0
  114. package/dist/page/README.md +605 -0
  115. package/dist/page/README_CN.md +605 -0
  116. package/dist/pagination/README.md +946 -0
  117. package/dist/pagination/README_CN.md +946 -0
  118. package/dist/pagination-panel/README.md +1075 -0
  119. package/dist/pagination-panel/README_CN.md +1075 -0
  120. package/dist/popup-hint/README.md +841 -0
  121. package/dist/popup-hint/README_CN.md +840 -0
  122. package/dist/progress-bar/README.md +242 -0
  123. package/dist/progress-bar/README_CN.md +242 -0
  124. package/dist/progress-step-bar/README.md +316 -0
  125. package/dist/progress-step-bar/README_CN.md +316 -0
  126. package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
  127. package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
  128. package/dist/prompts-text-editor/README.md +329 -0
  129. package/dist/prompts-text-editor/README_CN.md +329 -0
  130. package/dist/property-editor/README.md +969 -0
  131. package/dist/property-editor/README_CN.md +969 -0
  132. package/dist/radio-button/README.md +372 -0
  133. package/dist/radio-button/README_CN.md +372 -0
  134. package/dist/radio-button/RadioButton.svelte +32 -3
  135. package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
  136. package/dist/search-box/README.md +425 -0
  137. package/dist/search-box/README_CN.md +424 -0
  138. package/dist/search-box/SearchBox.svelte +22 -6
  139. package/dist/search-box/SearchBox.svelte.d.ts +4 -1
  140. package/dist/tabs/README.md +919 -0
  141. package/dist/tabs/README_CN.md +920 -0
  142. package/dist/tag/README.md +922 -0
  143. package/dist/tag/README_CN.md +922 -0
  144. package/dist/text-editor/PasswordEditor.svelte +17 -2
  145. package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
  146. package/dist/text-editor/PasswordEditor_README.md +551 -0
  147. package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
  148. package/dist/text-editor/README.md +466 -0
  149. package/dist/text-editor/README_CN.md +466 -0
  150. package/dist/text-editor/TextEditor.svelte +51 -19
  151. package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
  152. package/dist/ticatec-uniface-web.css +1 -0
  153. package/dist/time-editor/README.md +498 -24
  154. package/dist/time-editor/README_CN.md +498 -0
  155. package/dist/time-editor/TimeEditor.svelte +7 -3
  156. package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
  157. package/dist/toast/README.md +667 -0
  158. package/dist/toast/README_CN.md +667 -0
  159. package/dist/transfer/README.md +795 -0
  160. package/dist/transfer/Transfer.svelte +6 -4
  161. package/dist/transfer/Transfer.svelte.d.ts +3 -1
  162. package/dist/tree-view/README.md +761 -0
  163. package/dist/tree-view/README_CN.md +761 -0
  164. package/dist/tree-view/TreeView.svelte +5 -3
  165. package/dist/tree-view/TreeView.svelte.d.ts +3 -1
  166. package/dist/unit-number-editor/README.md +546 -20
  167. package/dist/unit-number-editor/README_CN.md +525 -0
  168. package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
  169. package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
  170. package/docs/form-field/cn/README_CN.md +364 -0
  171. package/docs/form-field/en/README.md +364 -0
  172. package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
  173. package/docs/form-panel/flex-form/en/README.md +586 -0
  174. package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
  175. package/docs/form-panel/flex-row-form/en/README.md +787 -0
  176. package/docs/form-panel/grid-form/en/README.md +744 -0
  177. package/package.json +1 -1
  178. package/dist/drawer/README-CN.md +0 -1
@@ -0,0 +1,428 @@
1
+ # Button 组件
2
+
3
+ 一个多功能的按钮组件,支持多种变体、尺寸和类型,具备图标支持、自定义样式和全面的事件处理。
4
+
5
+ ## 功能特性
6
+
7
+ - **多种类型**: 默认、主要、次要、第三级和第四级按钮样式
8
+ - **尺寸选项**: 大、中、小三种尺寸
9
+ - **图标支持**: 可选图标显示,位置灵活
10
+ - **变体样式**: 平面和圆角变体
11
+ - **事件处理**: 支持点击、聚焦和失焦事件
12
+ - **无障碍访问**: 使用语义化按钮元素,支持禁用状态
13
+ - **防抖保护**: 内置点击防抖,防止快速重复触发
14
+ - **自定义样式**: 灵活的样式定制
15
+
16
+ ## 基本用法
17
+
18
+ ```svelte
19
+ <script>
20
+ import Button from '@ticatec/uniface-element/Button';
21
+
22
+ const handleClick = (event) => {
23
+ console.log('按钮被点击!', event);
24
+ };
25
+ </script>
26
+
27
+ <Button
28
+ label="点击我"
29
+ onclick={handleClick}
30
+ />
31
+ ```
32
+
33
+ ## 属性参数
34
+
35
+ | 属性 | 类型 | 默认值 | 描述 |
36
+ |------|------|---------|-------------|
37
+ | `type` | `ButtonType` | `'default'` | 按钮类型(default、primary、secondary、third、forth) |
38
+ | `label` | `string` | `''` | 按钮文本标签 |
39
+ | `variant` | `'plain' \| 'round' \| ''` | `''` | 按钮变体样式 |
40
+ | `disabled` | `boolean` | `false` | 是否禁用按钮 |
41
+ | `style` | `string` | `''` | 自定义CSS样式 |
42
+ | `size` | `'big' \| 'medium' \| 'mini'` | `'medium'` | 按钮尺寸 |
43
+ | `onclick` | `(event: MouseEvent) => void` | - | 点击事件处理器 |
44
+ | `onfocus` | `(event: FocusEvent) => void` | `() => {}` | 聚焦事件处理器 |
45
+ | `onblur` | `(event: FocusEvent) => void` | `() => {}` | 失焦事件处理器 |
46
+ | `icon` | `string \| null` | `null` | 图标类名 |
47
+
48
+ ## 按钮类型
49
+
50
+ ```svelte
51
+ <!-- 默认按钮 -->
52
+ <Button label="默认" type="default" onclick={handleClick} />
53
+
54
+ <!-- 主要按钮 -->
55
+ <Button label="主要" type="primary" onclick={handleClick} />
56
+
57
+ <!-- 次要按钮 -->
58
+ <Button label="次要" type="secondary" onclick={handleClick} />
59
+
60
+ <!-- 第三级按钮 -->
61
+ <Button label="第三级" type="third" onclick={handleClick} />
62
+
63
+ <!-- 第四级按钮 -->
64
+ <Button label="第四级" type="forth" onclick={handleClick} />
65
+ ```
66
+
67
+ ## 按钮尺寸
68
+
69
+ ```svelte
70
+ <!-- 小型按钮 -->
71
+ <Button label="小型" size="mini" onclick={handleClick} />
72
+
73
+ <!-- 中型按钮(默认) -->
74
+ <Button label="中型" size="medium" onclick={handleClick} />
75
+
76
+ <!-- 大型按钮 -->
77
+ <Button label="大型" size="big" onclick={handleClick} />
78
+ ```
79
+
80
+ ## 按钮变体
81
+
82
+ ```svelte
83
+ <!-- 平面变体 -->
84
+ <Button label="平面" variant="plain" onclick={handleClick} />
85
+
86
+ <!-- 圆角变体 -->
87
+ <Button label="圆角" variant="round" onclick={handleClick} />
88
+ ```
89
+
90
+ ## 带图标
91
+
92
+ ```svelte
93
+ <!-- 带图标的按钮 -->
94
+ <Button
95
+ label="保存"
96
+ icon="fas fa-save"
97
+ onclick={handleSave}
98
+ />
99
+
100
+ <!-- 仅图标(使用空标签) -->
101
+ <Button
102
+ icon="fas fa-plus"
103
+ onclick={handleAdd}
104
+ />
105
+ ```
106
+
107
+ ## 事件处理
108
+
109
+ ```svelte
110
+ <script>
111
+ const handleClick = (event) => {
112
+ console.log('按钮被点击:', event);
113
+ };
114
+
115
+ const handleFocus = (event) => {
116
+ console.log('按钮获得焦点:', event);
117
+ // 显示工具提示或高亮
118
+ };
119
+
120
+ const handleBlur = (event) => {
121
+ console.log('按钮失去焦点:', event);
122
+ // 隐藏工具提示或移除高亮
123
+ };
124
+ </script>
125
+
126
+ <Button
127
+ label="交互按钮"
128
+ onclick={handleClick}
129
+ onfocus={handleFocus}
130
+ onblur={handleBlur}
131
+ />
132
+ ```
133
+
134
+ ## 禁用状态
135
+
136
+ ```svelte
137
+ <Button
138
+ label="禁用按钮"
139
+ disabled={true}
140
+ onclick={handleClick}
141
+ />
142
+ ```
143
+
144
+ ## 自定义样式
145
+
146
+ ```svelte
147
+ <Button
148
+ label="自定义样式"
149
+ style="background: linear-gradient(45deg, #ff6b6b, #4ecdc4); color: white; border: none;"
150
+ onclick={handleClick}
151
+ />
152
+ ```
153
+
154
+ ## 高级示例
155
+
156
+ ### 表单提交按钮
157
+
158
+ ```svelte
159
+ <script>
160
+ let isSubmitting = false;
161
+
162
+ const handleSubmit = async (event) => {
163
+ isSubmitting = true;
164
+ try {
165
+ await submitForm();
166
+ console.log('表单提交成功');
167
+ } catch (error) {
168
+ console.error('提交失败:', error);
169
+ } finally {
170
+ isSubmitting = false;
171
+ }
172
+ };
173
+ </script>
174
+
175
+ <Button
176
+ label={isSubmitting ? "提交中..." : "提交"}
177
+ type="primary"
178
+ disabled={isSubmitting}
179
+ icon={isSubmitting ? "fas fa-spinner fa-spin" : "fas fa-check"}
180
+ onclick={handleSubmit}
181
+ />
182
+ ```
183
+
184
+ ### 确认操作按钮
185
+
186
+ ```svelte
187
+ <script>
188
+ let showConfirm = false;
189
+
190
+ const handleDelete = (event) => {
191
+ if (!showConfirm) {
192
+ showConfirm = true;
193
+ setTimeout(() => showConfirm = false, 3000);
194
+ return;
195
+ }
196
+
197
+ // 执行删除操作
198
+ deleteItem();
199
+ showConfirm = false;
200
+ };
201
+ </script>
202
+
203
+ <Button
204
+ label={showConfirm ? "确认删除?" : "删除"}
205
+ type={showConfirm ? "primary" : "secondary"}
206
+ icon="fas fa-trash"
207
+ onclick={handleDelete}
208
+ style={showConfirm ? "background-color: #dc3545;" : ""}
209
+ />
210
+ ```
211
+
212
+ ### 导航按钮
213
+
214
+ ```svelte
215
+ <script>
216
+ import { goto } from '$app/navigation';
217
+
218
+ const navigateToPage = (event) => {
219
+ goto('/dashboard');
220
+ };
221
+ </script>
222
+
223
+ <Button
224
+ label="前往仪表板"
225
+ type="primary"
226
+ icon="fas fa-arrow-right"
227
+ onclick={navigateToPage}
228
+ />
229
+ ```
230
+
231
+ ### 按钮组
232
+
233
+ ```svelte
234
+ <div class="button-group">
235
+ <Button label="保存" type="primary" onclick={handleSave} />
236
+ <Button label="取消" type="secondary" onclick={handleCancel} />
237
+ <Button label="重置" type="third" onclick={handleReset} />
238
+ </div>
239
+
240
+ <style>
241
+ .button-group {
242
+ display: flex;
243
+ gap: 8px;
244
+ align-items: center;
245
+ }
246
+ </style>
247
+ ```
248
+
249
+ ### 加载按钮
250
+
251
+ ```svelte
252
+ <script>
253
+ let loading = false;
254
+
255
+ const handleAsyncAction = async (event) => {
256
+ loading = true;
257
+ try {
258
+ await performAsyncOperation();
259
+ } finally {
260
+ loading = false;
261
+ }
262
+ };
263
+ </script>
264
+
265
+ <Button
266
+ label={loading ? "加载中..." : "开始处理"}
267
+ disabled={loading}
268
+ icon={loading ? "fas fa-spinner fa-spin" : "fas fa-play"}
269
+ onclick={handleAsyncAction}
270
+ />
271
+ ```
272
+
273
+ ## 插槽用法
274
+
275
+ ```svelte
276
+ <!-- 自定义内容替代标签 -->
277
+ <Button onclick={handleClick}>
278
+ <div class="custom-content">
279
+ <i class="fas fa-star"></i>
280
+ <span>自定义内容</span>
281
+ <span class="badge">新</span>
282
+ </div>
283
+ </Button>
284
+ ```
285
+
286
+ ## 无障碍访问
287
+
288
+ Button组件遵循无障碍访问最佳实践:
289
+
290
+ - 使用语义化的`<button>`元素
291
+ - 支持键盘导航(Tab、Enter、Space键)
292
+ - 正确的禁用状态处理
293
+ - 为屏幕阅读器提供聚焦和失焦事件
294
+ - 需要时提供ARIA属性
295
+
296
+ ```svelte
297
+ <!-- 带ARIA标签的无障碍按钮 -->
298
+ <Button
299
+ icon="fas fa-search"
300
+ onclick={handleSearch}
301
+ style="aria-label: 搜索产品"
302
+ />
303
+ ```
304
+
305
+ ## 样式定制
306
+
307
+ 组件使用以下CSS类:
308
+
309
+ - `.uniface-button` - 基础按钮类
310
+ - `.common-button` - 通用按钮样式
311
+ - `.{variant}` - 变体特定样式(plain、round)
312
+ - `.{size}` - 尺寸特定样式(big、medium、mini)
313
+ - `.{type}` - 类型特定样式(default、primary等)
314
+ - `.disabled` - 禁用状态样式
315
+
316
+ ### CSS示例
317
+
318
+ ```css
319
+ .uniface-button {
320
+ display: inline-flex;
321
+ align-items: center;
322
+ justify-content: center;
323
+ gap: 8px;
324
+ padding: 8px 16px;
325
+ border: 1px solid #ddd;
326
+ background: #fff;
327
+ color: #333;
328
+ font-size: 14px;
329
+ cursor: pointer;
330
+ transition: all 0.2s ease;
331
+ }
332
+
333
+ .uniface-button:hover:not(.disabled) {
334
+ background: #f5f5f5;
335
+ }
336
+
337
+ .uniface-button:focus {
338
+ outline: 2px solid #007acc;
339
+ outline-offset: 2px;
340
+ }
341
+
342
+ .uniface-button.disabled {
343
+ opacity: 0.6;
344
+ cursor: not-allowed;
345
+ }
346
+
347
+ .uniface-button.primary {
348
+ background: #007acc;
349
+ color: white;
350
+ border-color: #007acc;
351
+ }
352
+
353
+ .uniface-button.round {
354
+ border-radius: 20px;
355
+ }
356
+
357
+ .uniface-button.big {
358
+ padding: 12px 24px;
359
+ font-size: 16px;
360
+ }
361
+
362
+ .uniface-button.mini {
363
+ padding: 4px 8px;
364
+ font-size: 12px;
365
+ }
366
+ ```
367
+
368
+ ## 最佳实践
369
+
370
+ 1. **一致的样式**: 在应用程序中一致地使用相同的按钮类型
371
+ 2. **清晰的标签**: 提供清楚表明操作的描述性标签
372
+ 3. **适当的类型**: 主要操作使用primary,辅助操作使用secondary
373
+ 4. **加载状态**: 为异步操作显示加载指示器
374
+ 5. **键盘导航**: 确保按钮可通过键盘访问
375
+ 6. **图标使用**: 使用图标增强理解,而非替代清晰的文本
376
+ 7. **防抖功能**: 组件包含内置防抖以防止意外双击
377
+
378
+ ## 常见模式
379
+
380
+ ### 模态框操作
381
+
382
+ ```svelte
383
+ <div class="modal-actions">
384
+ <Button
385
+ label="取消"
386
+ type="secondary"
387
+ onclick={closeModal}
388
+ />
389
+ <Button
390
+ label="确认"
391
+ type="primary"
392
+ onclick={confirmAction}
393
+ />
394
+ </div>
395
+ ```
396
+
397
+ ### 工具栏操作
398
+
399
+ ```svelte
400
+ <div class="toolbar">
401
+ <Button icon="fas fa-bold" variant="plain" onclick={toggleBold} />
402
+ <Button icon="fas fa-italic" variant="plain" onclick={toggleItalic} />
403
+ <Button icon="fas fa-underline" variant="plain" onclick={toggleUnderline} />
404
+ </div>
405
+ ```
406
+
407
+ ### 表单操作
408
+
409
+ ```svelte
410
+ <div class="form-actions">
411
+ <Button label="重置" type="third" onclick={resetForm} />
412
+ <Button label="保存草稿" type="secondary" onclick={saveDraft} />
413
+ <Button label="提交" type="primary" onclick={submitForm} />
414
+ </div>
415
+ ```
416
+
417
+ ## 浏览器支持
418
+
419
+ Button组件在支持以下特性的所有现代浏览器中工作:
420
+ - ES6+ JavaScript
421
+ - CSS Flexbox
422
+ - 语义化按钮元素
423
+
424
+ ## 性能
425
+
426
+ - 内置点击防抖防止快速点击导致的性能问题
427
+ - 轻量级实现,最小化重新渲染
428
+ - 高效的事件处理和适当的清理
@@ -5,8 +5,10 @@
5
5
  export let disabled: boolean = false;
6
6
  export let size: 'big' | 'medium' | 'mini' = 'medium';
7
7
  export let label: string = '';
8
- export let type: 'default' | 'primary' | 'secondary' | 'third' | 'forth' = 'default'; // 默认按钮类型
9
- export let onClick: MouseClickHandler;
8
+ export let type: 'default' | 'primary' | 'secondary' | 'third' | 'forth' = 'default';
9
+ export let onclick: MouseClickHandler;
10
+ export let onfocus: (event: FocusEvent) => void = () => {};
11
+ export let onblur: (event: FocusEvent) => void = () => {};
10
12
  export let style: string = '';
11
13
 
12
14
  let enableClick: boolean = true;
@@ -14,21 +16,39 @@
14
16
  const handleClick = (e: MouseEvent) => {
15
17
  if (!disabled && enableClick) {
16
18
  enableClick = false;
17
- onClick?.(e)
19
+ onclick?.(e)
18
20
  setTimeout(() => {
19
21
  enableClick = true
20
22
  }, 500);
21
23
  }
22
24
  e.stopPropagation();
23
- e.preventDefault();
25
+ }
24
26
 
27
+ const handleFocus = (e: FocusEvent) => {
28
+ if (!disabled) {
29
+ onfocus?.(e);
30
+ }
31
+ }
32
+
33
+ const handleBlur = (e: FocusEvent) => {
34
+ if (!disabled) {
35
+ onblur?.(e);
36
+ }
25
37
  }
26
38
 
27
39
  </script>
28
- <div class="uniface-button text-button {size} {type}" {style} class:disabled aria-hidden="true" on:click={handleClick}>
40
+ <button
41
+ class="uniface-button text-button {size} {type}"
42
+ {style}
43
+ class:disabled
44
+ {disabled}
45
+ on:click={handleClick}
46
+ on:focus={handleFocus}
47
+ on:blur={handleBlur}
48
+ >
29
49
  <slot>
30
50
  {#if label != null && label.length > 0}
31
51
  <span>{label}</span>
32
52
  {/if}
33
53
  </slot>
34
- </div>
54
+ </button>
@@ -22,7 +22,9 @@ declare const TextButton: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_Prop
22
22
  size?: "big" | "medium" | "mini";
23
23
  label?: string;
24
24
  type?: "default" | "primary" | "secondary" | "third" | "forth";
25
- onClick: MouseClickHandler;
25
+ onclick: MouseClickHandler;
26
+ onfocus?: (event: FocusEvent) => void;
27
+ onblur?: (event: FocusEvent) => void;
26
28
  style?: string;
27
29
  }, {
28
30
  default: {};