@ticatec/uniface-element 0.2.0 → 0.2.2

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 (209) hide show
  1. package/README.md +320 -1
  2. package/README_CN.md +392 -0
  3. package/dist/accordion/Accordion.svelte +1 -1
  4. package/dist/action-bar/ActionBar.svelte +7 -1
  5. package/dist/attachment-files/FileRender.svelte +1 -1
  6. package/dist/attachment-files/FileUploadBar.svelte +7 -6
  7. package/dist/attachment-files/FileUploadPanel.svelte +2 -2
  8. package/dist/base-calendar/DateContext.js +5 -4
  9. package/dist/base-calendar/YearPickupPanel.svelte +4 -4
  10. package/dist/card/Card.svelte +1 -1
  11. package/dist/card/Card.svelte.d.ts +1 -1
  12. package/dist/cascade-options-select/CascadeOptionSelect.svelte +2 -3
  13. package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +46 -1
  14. package/dist/cascade-options-select/CascadePanel.svelte +1 -1
  15. package/dist/checkbox/CheckBox.svelte +1 -1
  16. package/dist/color-picker/ColorPicker.svelte +9 -9
  17. package/dist/color-picker/ColorPicker.svelte.d.ts +0 -2
  18. package/dist/color-picker/ColorPickerPanel.svelte +11 -15
  19. package/dist/color-picker/ColorPickerPanel.svelte.d.ts +1 -1
  20. package/dist/common/CommonPicker.svelte +2 -2
  21. package/dist/common/CommonPicker.svelte.d.ts +1 -1
  22. package/dist/common/MouseClickHandler.d.ts +1 -1
  23. package/dist/common/Popover.svelte +28 -6
  24. package/dist/common/Popover.svelte.d.ts +9 -3
  25. package/dist/common/uniface-utils.js +6 -4
  26. package/dist/common-editor/CommonEditor.svelte +1 -1
  27. package/dist/common-editor/CommonEditor.svelte.d.ts +1 -1
  28. package/dist/common-editor/NumberInput.svelte +1 -1
  29. package/dist/common-editor/NumberInput.svelte.d.ts +1 -1
  30. package/dist/concise-data-table/ConciseListTable.svelte +7 -2
  31. package/dist/concise-data-table/ConciseListTable.svelte.d.ts +1 -0
  32. package/dist/concise-data-table/DataRow.svelte +1 -1
  33. package/dist/concise-data-table/TableOptions.d.ts +1 -1
  34. package/dist/data-table/DataTable.svelte +1 -1
  35. package/dist/data-table/parts/ActionsPanel.svelte +4 -3
  36. package/dist/data-table/parts/ActionsRow.svelte +3 -3
  37. package/dist/data-table/parts/ContentPanel.svelte +3 -2
  38. package/dist/data-table/parts/FixedColumnsPanel.svelte +0 -1
  39. package/dist/data-table/parts/FixedColumnsPanel.svelte.d.ts +1 -2
  40. package/dist/data-table/parts/FixedHeaderPanel.svelte +2 -2
  41. package/dist/data-table/parts/FixedRow.svelte +2 -1
  42. package/dist/data-table/parts/FixedRow.svelte.d.ts +1 -1
  43. package/dist/data-table/parts/HrefCell.svelte +23 -2
  44. package/dist/data-table/parts/PopupMenu.svelte +25 -2
  45. package/dist/data-table/parts/PopupMenu.svelte.d.ts +8 -1
  46. package/dist/date-picker/DatePicker.svelte +0 -1
  47. package/dist/date-picker/DateTimePicker.svelte +3 -3
  48. package/dist/date-picker/ScrollBar.svelte +4 -7
  49. package/dist/date-range/DateRangeEditor.svelte +1 -1
  50. package/dist/dialog/CommonDialog.svelte +8 -5
  51. package/dist/dialog/CommonDialog.svelte.d.ts +2 -1
  52. package/dist/dialog/Dialog.svelte +37 -12
  53. package/dist/dialog/Dialog.svelte.d.ts +4 -3
  54. package/dist/dialog/DialogBoard.svelte +11 -8
  55. package/dist/dialog/DialogWrapper.svelte +10 -0
  56. package/dist/{common-editor/DateInput.svelte.d.ts → dialog/DialogWrapper.svelte.d.ts} +6 -13
  57. package/dist/dialog/Dialogs.js +1 -1
  58. package/dist/dialog/ModalResult.d.ts +5 -0
  59. package/dist/dialog/ModalResult.js +5 -0
  60. package/dist/drawer/Drawer.svelte +1 -1
  61. package/dist/form-field/FormField.svelte +2 -1
  62. package/dist/form-field/FormField.svelte.d.ts +1 -0
  63. package/dist/form-panel/flex-row-form/FormContainer.svelte +1 -1
  64. package/dist/form-panel/grid-form/EmptyCell.svelte +8 -7
  65. package/dist/form-panel/grid-form/EmptyCell.svelte.d.ts +2 -2
  66. package/dist/form-panel/grid-form/GridField.svelte +1 -1
  67. package/dist/i18nRes/i18nRes.d.ts +2 -0
  68. package/dist/i18nRes/i18nRes.js +44 -0
  69. package/dist/i18nRes/index.d.ts +2 -0
  70. package/dist/i18nRes/index.js +2 -0
  71. package/dist/image-files/ImageFilesField.svelte +1 -1
  72. package/dist/indicator/IndicatorBoard.svelte +1 -1
  73. package/dist/inline-cell-editor/InvalidEditor.svelte +1 -0
  74. package/dist/input-options-select/InputOptionsSelect.svelte +6 -6
  75. package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +1 -1
  76. package/dist/layout/flex/FlexBlock.svelte +1 -1
  77. package/dist/lookup-editor/LookupEditor.svelte +1 -1
  78. package/dist/memo-editor/MemoEditor.svelte +2 -2
  79. package/dist/message-box/IMessageBox.d.ts +2 -4
  80. package/dist/message-box/IMessageBox.js +4 -6
  81. package/dist/message-box/MessageBoxBoard.svelte +1 -3
  82. package/dist/options-multi-select/OptionsMultiSelect.svelte +1 -1
  83. package/dist/prompts-text-editor/PromptsTextEditor.svelte +2 -2
  84. package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +1 -1
  85. package/dist/property-editor/PropertyEditor.svelte +3 -3
  86. package/dist/text-editor/PasswordEditor.svelte +1 -1
  87. package/dist/transfer/Transfer.svelte +17 -12
  88. package/dist/transfer/Transfer.svelte.d.ts +0 -1
  89. package/dist/unit-number-editor/UnitNumberEditor.svelte +2 -2
  90. package/docs/buttons/cn/ActionBar.md +459 -0
  91. package/docs/buttons/cn/Button.md +228 -0
  92. package/docs/buttons/cn/IconButton.md +294 -0
  93. package/docs/buttons/cn/README.md +600 -0
  94. package/docs/buttons/cn/TextButton.md +163 -0
  95. package/docs/buttons/en/ActionBar.md +459 -0
  96. package/docs/buttons/en/Button.md +228 -0
  97. package/docs/buttons/en/IconButton.md +294 -0
  98. package/docs/buttons/en/README.md +600 -0
  99. package/docs/buttons/en/TextButton.md +163 -0
  100. package/docs/containers/cn/accordion.md +622 -0
  101. package/docs/containers/cn/box.md +445 -0
  102. package/docs/containers/cn/card.md +404 -0
  103. package/docs/containers/cn/page.md +576 -0
  104. package/docs/containers/cn/tabs.md +686 -0
  105. package/docs/containers/en/accordion.md +622 -0
  106. package/docs/containers/en/box.md +445 -0
  107. package/docs/containers/en/card.md +404 -0
  108. package/docs/containers/en/page.md +576 -0
  109. package/docs/containers/en/tabs.md +686 -0
  110. package/docs/data-display/cn/concise-data-table.md +731 -0
  111. package/docs/data-display/cn/listbox.md +786 -0
  112. package/docs/data-display/cn/treeview.md +863 -0
  113. package/docs/data-display/en/concise-data-table.md +732 -0
  114. package/docs/data-display/en/listbox.md +786 -0
  115. package/docs/data-display/en/treeview.md +863 -0
  116. package/docs/data-table/cn/README.md +596 -0
  117. package/docs/data-table/en/README.md +596 -0
  118. package/docs/dialog/cn/README.md +767 -0
  119. package/docs/dialog/en/README.md +767 -0
  120. package/docs/form/cn/README.md +847 -0
  121. package/docs/form/en/README.md +847 -0
  122. package/docs/form-components/cn/README.md +495 -0
  123. package/docs/form-components/cn/attachmentfilesfield.md +757 -0
  124. package/docs/form-components/cn/cascade-options-select.md +374 -0
  125. package/docs/form-components/cn/checkbox.md +58 -0
  126. package/docs/form-components/cn/date-picker.md +138 -0
  127. package/docs/form-components/cn/datetime-picker.md +228 -0
  128. package/docs/form-components/cn/group-checkbox.md +405 -0
  129. package/docs/form-components/cn/group-radiobox.md +525 -0
  130. package/docs/form-components/cn/imagefilesfield.md +651 -0
  131. package/docs/form-components/cn/input-options-select.md +250 -0
  132. package/docs/form-components/cn/lookup-editor.md +406 -0
  133. package/docs/form-components/cn/memoeditor.md +409 -0
  134. package/docs/form-components/cn/number-editor.md +261 -0
  135. package/docs/form-components/cn/options-multi-select.md +177 -0
  136. package/docs/form-components/cn/options-select.md +83 -0
  137. package/docs/form-components/cn/passwordeditor.md +538 -0
  138. package/docs/form-components/cn/prompts-text-editor.md +241 -0
  139. package/docs/form-components/cn/radiobutton.md +84 -0
  140. package/docs/form-components/cn/switch.md +178 -0
  141. package/docs/form-components/cn/text-editor.md +142 -0
  142. package/docs/form-components/cn/time-editor.md +159 -0
  143. package/docs/form-components/cn/unit-number-editor.md +164 -0
  144. package/docs/form-components/en/README.md +463 -0
  145. package/docs/form-components/en/attachmentfilesfield.md +757 -0
  146. package/docs/form-components/en/cascade-options-select.md +358 -0
  147. package/docs/form-components/en/checkbox.md +59 -0
  148. package/docs/form-components/en/date-picker.md +138 -0
  149. package/docs/form-components/en/datetime-picker.md +228 -0
  150. package/docs/form-components/en/group-checkbox.md +395 -0
  151. package/docs/form-components/en/group-radiobox.md +498 -0
  152. package/docs/form-components/en/imagefilesfield.md +651 -0
  153. package/docs/form-components/en/input-options-select.md +239 -0
  154. package/docs/form-components/en/lookup-editor.md +389 -0
  155. package/docs/form-components/en/memoeditor.md +409 -0
  156. package/docs/form-components/en/number-editor.md +249 -0
  157. package/docs/form-components/en/options-multi-select.md +177 -0
  158. package/docs/form-components/en/options-select.md +83 -0
  159. package/docs/form-components/en/passwordeditor.md +538 -0
  160. package/docs/form-components/en/prompts-text-editor.md +241 -0
  161. package/docs/form-components/en/radiobutton.md +84 -0
  162. package/docs/form-components/en/switch.md +180 -0
  163. package/docs/form-components/en/text-editor.md +142 -0
  164. package/docs/form-components/en/time-editor.md +159 -0
  165. package/docs/form-components/en/unit-number-editor.md +164 -0
  166. package/docs/form-layout/cn/criteria-field.md +652 -0
  167. package/docs/form-layout/cn/flex-form.md +454 -0
  168. package/docs/form-layout/cn/flex-row-form.md +542 -0
  169. package/docs/form-layout/cn/form-field.md +923 -0
  170. package/docs/form-layout/cn/grid-form.md +676 -0
  171. package/docs/form-layout/en/criteria-field.md +652 -0
  172. package/docs/form-layout/en/flex-form.md +454 -0
  173. package/docs/form-layout/en/flex-row-form.md +542 -0
  174. package/docs/form-layout/en/form-field.md +923 -0
  175. package/docs/form-layout/en/grid-form.md +676 -0
  176. package/docs/global/cn/README.md +534 -0
  177. package/docs/global/en/README.md +534 -0
  178. package/docs/layout/cn/classiclayout.md +460 -0
  179. package/docs/layout/cn/headerlayout.md +524 -0
  180. package/docs/layout/cn/sidebarlayout.md +263 -0
  181. package/docs/layout/en/classiclayout.md +951 -0
  182. package/docs/layout/en/headerlayout.md +524 -0
  183. package/docs/layout/en/sidebarlayout.md +262 -0
  184. package/docs/misc/cn/README.md +1217 -0
  185. package/docs/misc/en/README.md +1217 -0
  186. package/docs/navigation/cn/breadcrumb.md +291 -0
  187. package/docs/navigation/cn/navigator.md +322 -0
  188. package/docs/navigation/cn/navigatormenu.md +512 -0
  189. package/docs/navigation/cn/progressbar.md +199 -0
  190. package/docs/navigation/cn/progressstepbar.md +299 -0
  191. package/docs/navigation/en/breadcrumb.md +291 -0
  192. package/docs/navigation/en/navigator.md +322 -0
  193. package/docs/navigation/en/navigatormenu.md +512 -0
  194. package/docs/navigation/en/progressbar.md +199 -0
  195. package/docs/navigation/en/progressstepbar.md +299 -0
  196. package/docs/search-filters/cn/daterange.md +1156 -0
  197. package/docs/search-filters/cn/numberrange.md +688 -0
  198. package/docs/search-filters/cn/searchbox.md +1582 -0
  199. package/docs/search-filters/en/daterange.md +1156 -0
  200. package/docs/search-filters/en/numberrange.md +688 -0
  201. package/docs/search-filters/en/searchbox.md +1582 -0
  202. package/package.json +53 -13
  203. package/dist/common-editor/DateInput.svelte +0 -27
  204. package/dist/i18n_resources/index.d.ts +0 -3
  205. package/dist/i18n_resources/index.js +0 -3
  206. /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.d.ts +0 -0
  207. /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.js +0 -0
  208. /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.d.ts +0 -0
  209. /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.js +0 -0
@@ -0,0 +1,228 @@
1
+ # Button 组件
2
+
3
+ 主要的 `Button` 组件提供了支持图标和标签的全面按钮功能。
4
+
5
+ ## 基础用法
6
+
7
+ ```svelte
8
+ <script lang="ts">
9
+ import Button from '@ticatec/uniface-element/Button';
10
+
11
+ const handleClick = async (event: MouseEvent) => {
12
+ console.log('按钮被点击!');
13
+ // 执行异步操作
14
+ };
15
+ </script>
16
+
17
+ <Button
18
+ label="保存更改"
19
+ type="primary"
20
+ icon="icon_google_save"
21
+ onClick={handleClick}
22
+ />
23
+ ```
24
+
25
+ ## 高级配置
26
+
27
+ ```svelte
28
+ <script lang="ts">
29
+ import Button from '@ticatec/uniface-element/Button';
30
+ import type { ButtonType } from '@ticatec/uniface-element';
31
+
32
+ let isSubmitting = false;
33
+
34
+ const handleSubmit = async (event: MouseEvent) => {
35
+ isSubmitting = true;
36
+ try {
37
+ await submitForm();
38
+ } finally {
39
+ isSubmitting = false;
40
+ }
41
+ };
42
+ </script>
43
+
44
+ <Button
45
+ label={isSubmitting ? "提交中..." : "提交表单"}
46
+ type="primary"
47
+ size="big"
48
+ variant="round"
49
+ icon="icon_google_send"
50
+ disabled={isSubmitting}
51
+ style="margin: 16px;"
52
+ onClick={handleSubmit}
53
+ />
54
+ ```
55
+
56
+ ## 属性
57
+
58
+ | 属性 | 类型 | 默认值 | 描述 |
59
+ |------|------|--------|------|
60
+ | `label` | `string` | `''` | 按钮文本标签 |
61
+ | `type` | `ButtonType` | `'default'` | 视觉样式变体 |
62
+ | `size` | `'big' \| 'medium' \| 'mini'` | `'medium'` | 按钮大小 |
63
+ | `variant` | `'plain' \| 'round' \| ''` | `''` | 附加样式变体 |
64
+ | `icon` | `string \| null` | `null` | 图标类(如 Google Material Icons) |
65
+ | `disabled` | `boolean` | `false` | 禁用按钮交互 |
66
+ | `style` | `string` | `''` | 自定义 CSS 样式 |
67
+ | `onClick` | `(event: MouseEvent) => void` | - | 点击事件处理器 |
68
+
69
+ ## 带插槽内容的按钮
70
+
71
+ ```svelte
72
+ <Button type="secondary" onClick={handleAction}>
73
+ <i class="icon_google_star"></i>
74
+ <span>自定义内容</span>
75
+ <span class="badge">3</span>
76
+ </Button>
77
+ ```
78
+
79
+ ## 样式变体
80
+
81
+ ### ButtonType 选项
82
+
83
+ ```typescript
84
+ type ButtonType = 'default' | 'primary' | 'secondary' | 'third' | 'forth';
85
+ ```
86
+
87
+ ### 视觉外观
88
+
89
+ - **default**: 标准中性按钮外观
90
+ - **primary**: 强调主要操作的按钮(通常为蓝色)
91
+ - **secondary**: 次要操作按钮(通常为灰色)
92
+ - **third**: 替代样式(通常用于警告/注意)
93
+ - **forth**: 附加样式变体
94
+
95
+ ### 大小变体
96
+
97
+ - **big**: 大按钮尺寸,用于突出操作
98
+ - **medium**: 标准按钮尺寸,适用于大多数使用场景
99
+ - **mini**: 小按钮尺寸,用于紧凑界面
100
+
101
+ ### 样式变体
102
+
103
+ - **plain**: 最小化样式变体
104
+ - **round**: 圆角变体
105
+ - **'' (空字符串)**: 标准样式
106
+
107
+ ## 图标使用
108
+
109
+ 组件使用 `@ticatec/uniface-google-material-icons` 作为图标库。只需传入图标类名:
110
+
111
+ ```svelte
112
+ <!-- 常用 Material Icons -->
113
+ <Button icon="icon_google_save" label="保存" />
114
+ <Button icon="icon_google_edit" label="编辑" />
115
+ <Button icon="icon_google_delete" label="删除" />
116
+ <Button icon="icon_google_add" label="添加" />
117
+ <Button icon="icon_google_remove" label="移除" />
118
+ <Button icon="icon_google_search" label="搜索" />
119
+ <Button icon="icon_google_settings" label="设置" />
120
+ <Button icon="icon_google_home" label="主页" />
121
+ <Button icon="icon_google_check" label="确认" />
122
+ <Button icon="icon_google_arrow_back" label="返回" />
123
+ ```
124
+
125
+ ## 最佳实践
126
+
127
+ ### 使用合适的按钮类型
128
+
129
+ 根据操作重要性选择正确的按钮类型:
130
+
131
+ ```svelte
132
+ <!-- 主要操作 -->
133
+ <Button label="保存" type="primary" />
134
+ <Button label="提交" type="primary" />
135
+
136
+ <!-- 次要操作 -->
137
+ <Button label="取消" type="secondary" />
138
+ <Button label="预览" type="secondary" />
139
+
140
+ <!-- 危险操作 -->
141
+ <Button label="删除" type="third" />
142
+ <Button label="移除" type="third" />
143
+ ```
144
+
145
+ ### 正确处理异步操作
146
+
147
+ 始终处理加载状态和错误:
148
+
149
+ ```svelte
150
+ <script lang="ts">
151
+ let isLoading = false;
152
+ let error = null;
153
+
154
+ const handleAction = async () => {
155
+ isLoading = true;
156
+ error = null;
157
+
158
+ try {
159
+ await performAction();
160
+ } catch (err) {
161
+ error = err.message;
162
+ } finally {
163
+ isLoading = false;
164
+ }
165
+ };
166
+ </script>
167
+
168
+ <Button
169
+ label={isLoading ? "处理中..." : "开始处理"}
170
+ type="primary"
171
+ disabled={isLoading}
172
+ onClick={handleAction}
173
+ />
174
+
175
+ {#if error}
176
+ <div class="error">{error}</div>
177
+ {/if}
178
+ ```
179
+
180
+ ### 提供视觉反馈
181
+
182
+ 使用图标和适当的样式:
183
+
184
+ ```svelte
185
+ <!-- 成功操作 -->
186
+ <Button label="保存" icon="icon_google_save" type="primary" />
187
+
188
+ <!-- 危险操作 -->
189
+ <Button label="删除" icon="icon_google_delete" type="third" />
190
+
191
+ <!-- 导航操作 -->
192
+ <Button label="返回" icon="icon_google_arrow_back" type="secondary" />
193
+ ```
194
+
195
+ ### 考虑移动端响应式
196
+
197
+ 为不同屏幕尺寸使用合适的大小:
198
+
199
+ ```svelte
200
+ <div class="responsive-buttons">
201
+ <!-- 桌面端: 普通大小,移动端: 更大以适应触摸 -->
202
+ <Button label="操作" size="big" class="mobile-friendly" />
203
+ </div>
204
+
205
+ <style>
206
+ .responsive-buttons .mobile-friendly {
207
+ /* 响应式样式 */
208
+ }
209
+
210
+ @media (max-width: 768px) {
211
+ .responsive-buttons .mobile-friendly {
212
+ min-height: 44px; /* iOS 推荐的触摸目标大小 */
213
+ }
214
+ }
215
+ </style>
216
+ ```
217
+
218
+ ## 无障碍性注意事项
219
+
220
+ **⚠️ 重要提示**:当前的按钮组件存在以下无障碍性限制:
221
+
222
+ - **非语义化元素**:所有按钮都使用 `<div>` 元素而不是 `<button>`
223
+ - **对屏幕阅读器隐藏**:所有按钮默认都有 `aria-hidden="true"`
224
+ - **无键盘导航**:组件不支持 Tab 导航或 Enter/Space 激活
225
+ - **无焦点管理**:组件不提供 focus 方法或支持 `bind:this`
226
+ - **无 ARIA 属性支持**:自定义 aria-* 属性无法传递
227
+
228
+ 如需完全的无障碍性支持,请考虑使用正确的语义化元素包装组件。
@@ -0,0 +1,294 @@
1
+ # IconButton 组件
2
+
3
+ `IconButton` 组件专为紧凑界面中的纯图标按钮而设计。
4
+
5
+ ## 基础用法
6
+
7
+ ```svelte
8
+ <script lang="ts">
9
+ import IconButton from '@ticatec/uniface-element/IconButton';
10
+
11
+ const handleEdit = async (event: MouseEvent) => {
12
+ // 处理编辑操作
13
+ };
14
+ </script>
15
+
16
+ <IconButton
17
+ icon="icon_google_edit"
18
+ type="primary"
19
+ onClick={handleEdit}
20
+ />
21
+ ```
22
+
23
+ ## 使用示例
24
+
25
+ ```svelte
26
+ <script lang="ts">
27
+ import IconButton from '@ticatec/uniface-element/IconButton';
28
+
29
+ const toolbarActions = {
30
+ edit: async () => { /* 编辑逻辑 */ },
31
+ delete: async () => { /* 删除逻辑 */ },
32
+ share: async () => { /* 分享逻辑 */ },
33
+ favorite: async () => { /* 收藏逻辑 */ }
34
+ };
35
+ </script>
36
+
37
+ <!-- 工具栏图标按钮 -->
38
+ <div class="toolbar">
39
+ <IconButton icon="icon_google_edit" type="default" onClick={toolbarActions.edit} />
40
+ <IconButton icon="icon_google_delete" type="third" onClick={toolbarActions.delete} />
41
+ <IconButton icon="icon_google_share" type="secondary" onClick={toolbarActions.share} />
42
+ <IconButton icon="icon_google_favorite" type="primary" onClick={toolbarActions.favorite} />
43
+ </div>
44
+
45
+ <!-- 不同大小 -->
46
+ <IconButton icon="icon_google_settings" size="big" onClick={toolbarActions.edit} />
47
+ <IconButton icon="icon_google_settings" size="medium" onClick={toolbarActions.edit} />
48
+ <IconButton icon="icon_google_settings" size="mini" onClick={toolbarActions.edit} />
49
+
50
+ <!-- 带自定义插槽内容 -->
51
+ <IconButton type="primary" onClick={toolbarActions.edit}>
52
+ <i class="icon_google_edit"></i>
53
+ </IconButton>
54
+
55
+ <style>
56
+ .toolbar {
57
+ display: flex;
58
+ gap: 8px;
59
+ align-items: center;
60
+ }
61
+ </style>
62
+ ```
63
+
64
+ ## 属性
65
+
66
+ | 属性 | 类型 | 默认值 | 描述 |
67
+ |------|------|--------|------|
68
+ | `icon` | `string` | `''` | 图标类(如 Google Material Icons) |
69
+ | `type` | `ButtonType` | `'default'` | 视觉样式变体 |
70
+ | `size` | `'big' \| 'medium' \| 'mini'` | `'medium'` | 按钮大小 |
71
+ | `disabled` | `boolean` | `false` | 禁用按钮交互 |
72
+ | `style` | `string` | `''` | 自定义 CSS 样式 |
73
+ | `onClick` | `(event: MouseEvent) => void` | - | 点击事件处理器 |
74
+
75
+ ## 样式变体
76
+
77
+ ### ButtonType 选项
78
+
79
+ ```typescript
80
+ type ButtonType = 'default' | 'primary' | 'secondary' | 'third' | 'forth';
81
+ ```
82
+
83
+ ### 视觉外观
84
+
85
+ - **default**: 标准中性按钮外观
86
+ - **primary**: 强调主要操作的按钮(通常为蓝色)
87
+ - **secondary**: 次要操作按钮(通常为灰色)
88
+ - **third**: 替代样式(通常用于警告/注意)
89
+ - **forth**: 附加样式变体
90
+
91
+ ### 大小变体
92
+
93
+ - **big**: 大图标按钮,用于突出操作
94
+ - **medium**: 标准图标按钮,适用于大多数使用场景
95
+ - **mini**: 小图标按钮,用于紧凑界面
96
+
97
+ ## 常用图标
98
+
99
+ 使用 `@ticatec/uniface-google-material-icons` 图标库:
100
+
101
+ ```svelte
102
+ <!-- 编辑操作 -->
103
+ <IconButton icon="icon_google_edit" />
104
+ <IconButton icon="icon_google_create" />
105
+ <IconButton icon="icon_google_mode_edit" />
106
+
107
+ <!-- 删除操作 -->
108
+ <IconButton icon="icon_google_delete" type="third" />
109
+ <IconButton icon="icon_google_delete_forever" type="third" />
110
+ <IconButton icon="icon_google_remove" type="third" />
111
+
112
+ <!-- 查看操作 -->
113
+ <IconButton icon="icon_google_visibility" />
114
+ <IconButton icon="icon_google_preview" />
115
+ <IconButton icon="icon_google_search" />
116
+
117
+ <!-- 设置操作 -->
118
+ <IconButton icon="icon_google_settings" />
119
+ <IconButton icon="icon_google_tune" />
120
+ <IconButton icon="icon_google_more_vert" />
121
+
122
+ <!-- 导航操作 -->
123
+ <IconButton icon="icon_google_arrow_back" />
124
+ <IconButton icon="icon_google_arrow_forward" />
125
+ <IconButton icon="icon_google_close" />
126
+
127
+ <!-- 状态操作 -->
128
+ <IconButton icon="icon_google_favorite" type="primary" />
129
+ <IconButton icon="icon_google_star" type="primary" />
130
+ <IconButton icon="icon_google_bookmark" />
131
+ ```
132
+
133
+ ## 使用场景
134
+
135
+ IconButton 组件特别适合以下场景:
136
+
137
+ - 数据表格行操作
138
+ - 工具栏按钮
139
+ - 卡片操作
140
+ - 紧凑的导航控件
141
+ - 状态切换按钮
142
+
143
+ ## 最佳实践
144
+
145
+ ### 数据表格行操作
146
+
147
+ ```svelte
148
+ <script lang="ts">
149
+ import IconButton from '@ticatec/uniface-element/IconButton';
150
+
151
+ export let item: any;
152
+ export let onEdit: (item: any) => Promise<void>;
153
+ export let onDelete: (item: any) => Promise<void>;
154
+ export let onView: (item: any) => Promise<void>;
155
+ </script>
156
+
157
+ <div class="table-actions">
158
+ <IconButton
159
+ icon="icon_google_visibility"
160
+ type="default"
161
+ onClick={async () => await onView(item)}
162
+ />
163
+ <IconButton
164
+ icon="icon_google_edit"
165
+ type="primary"
166
+ onClick={async () => await onEdit(item)}
167
+ />
168
+ <IconButton
169
+ icon="icon_google_delete"
170
+ type="third"
171
+ onClick={async () => await onDelete(item)}
172
+ />
173
+ </div>
174
+
175
+ <style>
176
+ .table-actions {
177
+ display: flex;
178
+ gap: 4px;
179
+ }
180
+ </style>
181
+ ```
182
+
183
+ ### 卡片操作栏
184
+
185
+ ```svelte
186
+ <script lang="ts">
187
+ import IconButton from '@ticatec/uniface-element/IconButton';
188
+
189
+ let isFavorite = false;
190
+ let isBookmarked = false;
191
+
192
+ const toggleFavorite = async () => {
193
+ isFavorite = !isFavorite;
194
+ // 保存状态到服务器
195
+ };
196
+
197
+ const toggleBookmark = async () => {
198
+ isBookmarked = !isBookmarked;
199
+ // 保存状态到服务器
200
+ };
201
+
202
+ const shareContent = async () => {
203
+ // 分享功能
204
+ };
205
+ </script>
206
+
207
+ <div class="card-actions">
208
+ <IconButton
209
+ icon={isFavorite ? "icon_google_favorite" : "icon_google_favorite_border"}
210
+ type={isFavorite ? "primary" : "default"}
211
+ onClick={toggleFavorite}
212
+ />
213
+ <IconButton
214
+ icon={isBookmarked ? "icon_google_bookmark" : "icon_google_bookmark_border"}
215
+ type={isBookmarked ? "primary" : "default"}
216
+ onClick={toggleBookmark}
217
+ />
218
+ <IconButton
219
+ icon="icon_google_share"
220
+ type="secondary"
221
+ onClick={shareContent}
222
+ />
223
+ </div>
224
+
225
+ <style>
226
+ .card-actions {
227
+ display: flex;
228
+ gap: 8px;
229
+ justify-content: flex-end;
230
+ padding: 8px 0;
231
+ }
232
+ </style>
233
+ ```
234
+
235
+ ### 工具栏布局
236
+
237
+ ```svelte
238
+ <script lang="ts">
239
+ import IconButton from '@ticatec/uniface-element/IconButton';
240
+
241
+ const toolbarActions = {
242
+ save: async () => { /* 保存 */ },
243
+ undo: async () => { /* 撤销 */ },
244
+ redo: async () => { /* 重做 */ },
245
+ settings: async () => { /* 设置 */ }
246
+ };
247
+ </script>
248
+
249
+ <div class="editor-toolbar">
250
+ <div class="toolbar-group">
251
+ <IconButton icon="icon_google_save" type="primary" onClick={toolbarActions.save} />
252
+ </div>
253
+
254
+ <div class="toolbar-divider"></div>
255
+
256
+ <div class="toolbar-group">
257
+ <IconButton icon="icon_google_undo" onClick={toolbarActions.undo} />
258
+ <IconButton icon="icon_google_redo" onClick={toolbarActions.redo} />
259
+ </div>
260
+
261
+ <div class="toolbar-divider"></div>
262
+
263
+ <div class="toolbar-group">
264
+ <IconButton icon="icon_google_settings" onClick={toolbarActions.settings} />
265
+ </div>
266
+ </div>
267
+
268
+ <style>
269
+ .editor-toolbar {
270
+ display: flex;
271
+ align-items: center;
272
+ gap: 8px;
273
+ padding: 8px;
274
+ border-bottom: 1px solid #e0e0e0;
275
+ background: #f8f9fa;
276
+ }
277
+
278
+ .toolbar-group {
279
+ display: flex;
280
+ gap: 4px;
281
+ }
282
+
283
+ .toolbar-divider {
284
+ width: 1px;
285
+ height: 24px;
286
+ background: #d0d0d0;
287
+ margin: 0 4px;
288
+ }
289
+ </style>
290
+ ```
291
+
292
+ ## 点击节流
293
+
294
+ IconButton 组件实现了自动点击节流,具有 500ms 冷却时间,以防止意外的双击并确保正确的异步操作处理。