@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
package/README_CN.md ADDED
@@ -0,0 +1,392 @@
1
+ # Uniface Element
2
+
3
+ [![npm version](https://badge.fury.io/js/%40ticatec%2Funiface-element.svg)](https://badge.fury.io/js/%40ticatec%2Funiface-element)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ 基于 Svelte 5 构建的全面企业级 UI 组件库,专为现代化 Web 应用程序设计。
7
+
8
+ [English Documentation](./README.md)
9
+
10
+ ## 特性
11
+
12
+ ✨ **企业级组件** - 为商业应用提供完整的组件集合
13
+ 🎨 **主题系统** - 基于 CSS 变量的主题化,可自定义设计令牌
14
+ 📱 **响应式设计** - 移动优先的响应式组件
15
+ 🌍 **国际化支持** - 内置中英文国际化资源
16
+ 🎯 **TypeScript 支持** - 完整的 TypeScript 类型定义,提供更好的开发体验
17
+ 🔧 **模块化架构** - 支持按需导入,优化打包体积
18
+ ⚡ **高性能** - 基于 Svelte 5 构建,性能卓越
19
+
20
+ ## 安装
21
+
22
+ ```bash
23
+ npm install @ticatec/uniface-element
24
+ ```
25
+
26
+ ## 快速开始
27
+
28
+ ### 1. 导入样式
29
+
30
+ ```typescript
31
+ // 导入主样式文件
32
+ import '@ticatec/uniface-element/ticatec-uniface-web.css';
33
+ ```
34
+
35
+ ### 2. 使用组件
36
+
37
+ ```svelte
38
+ <script lang="ts">
39
+ import Button from '@ticatec/uniface-element/Button';
40
+ import DataTable, Dialog from '@ticatec/uniface-element/DataTable';
41
+ import Dialog from '@ticatec/uniface-element/Dialog';
42
+ import type { DataColumn } from '@ticatec/uniface-element/DataTable';
43
+
44
+ let columns: DataColumn[] = [
45
+ { field: 'name', title: '姓名', width: 150 },
46
+ { field: 'email', title: '邮箱', width: 200 }
47
+ ];
48
+
49
+ let data = [
50
+ { name: '张三', email: 'zhangsan@example.com' },
51
+ { name: '李四', email: 'lisi@example.com' }
52
+ ];
53
+ </script>
54
+
55
+ <Button type="primary" on:click={() => console.log('点击了!')}>
56
+ 点击我
57
+ </Button>
58
+
59
+ <DataTable {columns} list={data} />
60
+ ```
61
+
62
+ ## 组件分类
63
+
64
+ ### 布局组件
65
+ - **应用布局**: `SidebarLayout`、`HeaderLayout`、`ClassicLayout`、`ColumnsLayout`、`RowsLayout`
66
+ - **容器组件**: `Box`、`Card`、`Page`、`Accordion`
67
+ - **表单布局**: `FlexForm`、`GridForm`、`FormField`
68
+ - **工具组件**: `Split`、`Separator`
69
+
70
+ ### 数据展示
71
+ - **表格组件**: `DataTable`、`ConciseDataTable`
72
+ - **列表组件**: `ListBox`、`TreeView`
73
+ - **导航组件**: `Breadcrumbs`、`Tabs`、`NavigatorMenu`
74
+ - **指示器**: `ProgressBar`、`ProgressStepBar`、`Tag`
75
+
76
+ ### 表单控件
77
+ - **输入组件**: `TextEditor`、`NumberEditor`、`MemoEditor`、`PasswordEditor`
78
+ - **选择组件**: `OptionsSelect`、`OptionsMultiSelect`、`CascadeOptionsSelect`
79
+ - **日期时间**: `DatePicker`、`DateTimePicker`、`TimeEditor`
80
+ - **其他控件**: `CheckBox`、`RadioButton`、`Switch`、`ColorPicker`
81
+
82
+ ### 反馈组件
83
+ - **对话框**: `Dialog`、`MessageBox`、`Drawer`
84
+ - **消息通知**: `Toast`、`PopupHint`
85
+ - **遮罩层**: `FullScreenOverlay`
86
+
87
+ ### 高级组件
88
+ - **编辑器**: `InlineCellEditor`、`PropertyEditor`、`PromptsTextEditor`
89
+ - **文件上传**: `AttachmentFiles`、`ImageFiles`
90
+ - **数据传输**: `Transfer`
91
+ - **搜索组件**: `SearchBox`、`CriteriaField`
92
+
93
+ ## 页面全局组件
94
+
95
+ 页面全局组件直接加载在 body 上,使用时不需要单独引入,可通过全局方法直接使用。通常在系统主页面直接加载:
96
+
97
+ ```svelte
98
+ <script lang="ts">
99
+ import ToastBoard from "@ticatec/uniface-element/ToastBoard";
100
+ import { DialogBoard } from "@ticatec/uniface-element/DialogBoard";
101
+ import IndicatorBoard from "@ticatec/uniface-element/IndicatorBoard";
102
+ import MessageBoxBoard from "@ticatec/uniface-element/MessageBoxBoard";
103
+ </script>
104
+
105
+ <div>
106
+ <!-- 主页面内容 -->
107
+ </div>
108
+
109
+ <IndicatorBoard/>
110
+ <DialogBoard/>
111
+ <ToastBoard/>
112
+ <MessageBoxBoard/>
113
+ ```
114
+
115
+ ### 异步操作指示器 `Indicator`
116
+
117
+ 用于异步操作时遮罩页面并显示操作信息,避免用户异常操作:
118
+
119
+ ```typescript
120
+ try {
121
+ window.Indicator.show('正在加载数据...');
122
+ // 异步调用 await service.search();
123
+ } finally {
124
+ window.Indicator.hide();
125
+ }
126
+ ```
127
+
128
+ ### 弹出消息 `Toast`
129
+
130
+ 用于显示操作结果和提示信息:
131
+
132
+ ```typescript
133
+ // 显示错误消息(默认3秒)
134
+ window.Toast.show("无法删除活跃用户", "error", 2);
135
+
136
+ // 显示成功消息
137
+ window.Toast.show("操作成功", "success");
138
+
139
+ // 显示信息提示
140
+ window.Toast.show("这是一条信息", "info");
141
+ ```
142
+
143
+ ### 消息提示框 `MessageBox`
144
+
145
+ 用于确认操作和信息提示:
146
+
147
+ ```typescript
148
+ import ModalResult from '@ticatec/uniface-element/ModalResult';
149
+
150
+ const deleteConfirm = async (user: any) => {
151
+ const result = await window.MessageBox.showConfirm(`确定要删除用户[${user.name}]吗?`);
152
+ if (result === ModalResult.MR_OK) {
153
+ // 执行删除操作
154
+ }
155
+ }
156
+
157
+ // 显示信息提示
158
+ await window.MessageBox.showInfo("操作完成", "提示");
159
+ ```
160
+
161
+ ## 使用示例
162
+
163
+ ### 带行选择的数据表格
164
+
165
+ ```svelte
166
+ <script lang="ts">
167
+ import DataTable from '@ticatec/uniface-element/DataTable';
168
+ import type { DataColumn } from '@ticatec/uniface-element';
169
+
170
+ let columns: DataColumn[] = [
171
+ {
172
+ field: 'name',
173
+ title: '姓名',
174
+ width: 200
175
+ },
176
+ {
177
+ field: 'email',
178
+ title: '邮箱',
179
+ width: 250
180
+ },
181
+ {
182
+ field: 'status',
183
+ title: '状态',
184
+ width: 120
185
+ }
186
+ ];
187
+
188
+ let data = [
189
+ { id: 1, name: '张三', email: 'zhangsan@example.com', status: '活跃' },
190
+ { id: 2, name: '李四', email: 'lisi@example.com', status: '非活跃' },
191
+ { id: 3, name: '王五', email: 'wangwu@example.com', status: '活跃' }
192
+ ];
193
+
194
+ let selectedRows = [];
195
+ </script>
196
+
197
+ <DataTable {columns} list={data} bind:selectedRows />
198
+ ```
199
+
200
+ ### 表单对话框
201
+
202
+ ```svelte
203
+ <script lang="ts">
204
+ import Dialog, Button, TextEditor, FormField from '@ticatec/uniface-element/Dialog, Button, TextEditor, FormField';
205
+
206
+ let showDialog = false;
207
+ let formData = { name: '', email: '' };
208
+ </script>
209
+
210
+ <Button on:click={() => showDialog = true}>打开对话框</Button>
211
+
212
+ <Dialog bind:visible={showDialog} title="编辑用户">
213
+ <FormField label="姓名">
214
+ <TextEditor bind:value={formData.name} />
215
+ </FormField>
216
+
217
+ <FormField label="邮箱">
218
+ <TextEditor bind:value={formData.email} type="email" />
219
+ </FormField>
220
+
221
+ <svelte:fragment slot="actions">
222
+ <Button on:click={() => showDialog = false}>取消</Button>
223
+ <Button type="primary" on:click={() => showDialog = false}>保存</Button>
224
+ </svelte:fragment>
225
+ </Dialog>
226
+ ```
227
+
228
+ ## 布局组件详细介绍
229
+
230
+ ## 文档
231
+
232
+ `/docs` 目录中提供了全面的组件文档:
233
+
234
+ ### 布局组件
235
+ - [SidebarLayout](./docs/layout/cn/sidebarlayout.md) | [English](./docs/layout/en/sidebarlayout.md) - 左侧边栏与可调整大小的主内容区域
236
+ - [HeaderLayout](./docs/layout/cn/headerlayout.md) | [English](./docs/layout/en/headerlayout.md) - 顶部头部与内容区域及可选侧边栏
237
+ - [ClassicLayout](./docs/layout/cn/classiclayout.md) | [English](./docs/layout/en/classiclayout.md) - 全屏布局,包含头部、底部、侧边栏和内容区域
238
+
239
+ ### 按钮组件
240
+ - [按钮系统](./docs/buttons/cn/README.md) | [English](./docs/buttons/en/README.md) - 完整的按钮组件,包括 Button、TextButton、IconButton 和 ActionBar
241
+
242
+ ### 对话框组件
243
+ - [对话框系统](./docs/dialog/cn/README.md) | [English](./docs/dialog/en/README.md) - 模态对话框系统,包含 DialogBoard、Dialog 和 CommonDialog 组件
244
+
245
+ ### 表单组件
246
+ - [表单控件](./docs/form/cn/README.md) | [English](./docs/form/en/README.md) - 全面的表单输入组件,包括 TextEditor、NumberEditor、CheckBox、OptionsSelect 等
247
+
248
+ ### 全局组件
249
+ - [全局组件](./docs/global/cn/README.md) | [English](./docs/global/en/README.md) - 应用程序级组件,包括 ToastBoard、DialogBoard、IndicatorBoard 和 MessageBoxBoard
250
+
251
+ ### 杂项组件
252
+ - [实用组件](./docs/misc/cn/README.md) | [English](./docs/misc/en/README.md) - 其他组件,包括 Split、Drawer、Tag 和 Card
253
+
254
+ 每个组件文档都包括:
255
+ - 包含所有属性和方法的 API 参考
256
+ - 高级用法示例和模式
257
+ - 最佳实践和样式指南
258
+ - 无障碍访问注意事项
259
+ - 集成提示
260
+
261
+ ## 主题定制
262
+
263
+ 组件库使用 CSS 自定义属性进行主题化。你可以通过覆盖这些变量来自定义外观:
264
+
265
+ ```css
266
+ :root {
267
+ --uniface-primary-color: #0061FF;
268
+ --uniface-secondary-color: #22BDFF;
269
+ --uniface-primary-text-color: #374151;
270
+ --uniface-button-common-bg: #f0f0f0;
271
+ --uniface-hover-item-background: #f7f7f7;
272
+ /* ... 更多变量 */
273
+ }
274
+ ```
275
+
276
+ ## 国际化
277
+
278
+ 组件库内置国际化支持:
279
+
280
+ 中文资源文件:
281
+ 可以将文件放置在静态网站的目录下,比如`/assets/uniface_zh-CN.json`
282
+ ```json
283
+ {
284
+ "uniface": {
285
+ "common": {
286
+ "btnClose": "关闭",
287
+ "btnCancel": "取消",
288
+ "btnConfirm": "确定",
289
+ "textMore": "加载更多"
290
+ },
291
+ "colorPicker": "选择颜色",
292
+ "calendar": {
293
+ "months": [
294
+ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
295
+ ],
296
+ "monthsAbbr": [
297
+ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
298
+ ],
299
+ "weekTitle": [
300
+ "周日", "周一", "周二", "周三", "周四", "周五", "周六"
301
+ ],
302
+ "weekTitleAbbr": [
303
+ "日", "一", "二", "三", "四", "五", "六"
304
+ ],
305
+ "confirmText": "确定"
306
+ },
307
+ "upload": {
308
+ "btnRetry": "重试",
309
+ "btnRemove": "删除",
310
+ "btnPickup": "选择文件"
311
+ },
312
+ "propertyEditor": {
313
+ "colName": "属性",
314
+ "colValue": "值"
315
+ },
316
+ "dataTable": {
317
+ "rowNo": "#",
318
+ "actions": "操作",
319
+ "emptyDataSet": "暂无数据"
320
+ },
321
+ "transfer": {
322
+ "selectIndicator": "已选择: {{selected}}/{{total}}"
323
+ }
324
+ }
325
+ }
326
+ ```
327
+
328
+ ```typescript
329
+ import i18n, {i18nUtils} from "@ticatec/i18n";
330
+
331
+ // 设置语言
332
+ i18n.setLanguage('zh-CN'); // 或 'en'
333
+ i18nUtils.loadResources('/assets/uniface.json');
334
+ ```
335
+
336
+
337
+
338
+ ## 可用导入
339
+
340
+ ### 模块化导入
341
+ ```typescript
342
+ // 单个组件导入
343
+ import Button from '@ticatec/uniface-element/Button';
344
+ import DataTable from '@ticatec/uniface-element/DataTable';
345
+ import SidebarLayout from '@ticatec/uniface-element/app-layout/SidebarLayout';
346
+ import AttachmentFilesField from '@ticatec/uniface-element/AttachmentFiles';
347
+ import ImageFilesField from '@ticatec/uniface-element/ImageFiles';
348
+ import MemoEditor from '@ticatec/uniface-element/MemoEditor';
349
+
350
+ // 工具导入
351
+ import { utils } from '@ticatec/uniface-element/utils';
352
+ import type { DataColumn } from '@ticatec/uniface-element/types';
353
+ ```
354
+
355
+ ## 开发
356
+
357
+ ```bash
358
+ # 安装依赖
359
+ npm install
360
+
361
+ # 启动开发服务器
362
+ npm run dev
363
+
364
+ # 构建组件库
365
+ npm run build
366
+
367
+ # 运行类型检查
368
+ npm run check
369
+ ```
370
+
371
+ ## 浏览器支持
372
+
373
+ - Chrome ≥ 88
374
+ - Firefox ≥ 85
375
+ - Safari ≥ 14
376
+ - Edge ≥ 88
377
+
378
+ ## 贡献
379
+
380
+ 欢迎贡献代码!请查看我们的 [贡献指南](./CONTRIBUTING.md) 了解详细信息。
381
+
382
+ ## 许可证
383
+
384
+ MIT 许可证 - 查看 [LICENSE](./LICENSE) 文件了解详细信息。
385
+
386
+ ## 作者
387
+
388
+ **Henry Feng** - [Ticatec](https://github.com/ticatec-auckland)
389
+
390
+ ---
391
+
392
+ 更多详细文档和示例,请访问我们的 [文档网站](#) 或查看 `/src/routes/demo` 目录中的示例组件。
@@ -22,7 +22,7 @@
22
22
  }
23
23
  })
24
24
 
25
- const handleAccordionClick = (accordion: AccordionItem) => (event: MouseEvent) => {
25
+ const handleAccordionClick = (accordion: AccordionItem) => async (event: MouseEvent) => {
26
26
  if (exclusive) {
27
27
  if (activeItem != accordion) {
28
28
  activeItem = accordion;
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
 
3
+ import type ButtonAction from "./ButtonAction";
3
4
  import type {ButtonActions} from "./ButtonAction";
4
5
  import Button from "../button/Button.svelte";
5
6
  import Separator from "../separator/Separator.svelte";
@@ -8,13 +9,18 @@
8
9
  export let style: string = '';
9
10
  export let gap: number = 8;
10
11
 
12
+ const handleButtonClick = (button: ButtonAction) => (event: MouseEvent) => {
13
+ button.handler?.(event)
14
+ }
15
+
11
16
 
12
17
  </script>
13
18
 
14
19
  <div class="uniface-action-bar" style="gap: {gap}px; {style}">
15
20
  {#each (buttons ?? []) as button}
16
21
  {#if button}
17
- <Button label={button.label} icon={button.icon} disabled={button.disabled===true} type={button.type} onClick={button.handler}/>
22
+ <Button label={button.label} icon={button.icon} disabled={button.disabled===true} type={button.type}
23
+ onClick={handleButtonClick(button)}/>
18
24
  {:else }
19
25
  <Separator height="24px"/>
20
26
  {/if}
@@ -48,7 +48,7 @@
48
48
 
49
49
  <div style="width: 80px; height: 100%; box-sizing: border-box; padding: 6px 8px;">
50
50
  <div class="file-icon">
51
- <img src={icon} width="64px" height="64px"/>
51
+ <img src={icon} alt="icon" width="64px" height="64px"/>
52
52
  <div class="action-icon" style="top: 15px;">
53
53
  <i class="icon_google_file_download" ></i>
54
54
  </div>
@@ -5,7 +5,8 @@
5
5
  import {ProgressStatus} from "../progress-bar/ProgressStatus";
6
6
  import {onMount} from "svelte";
7
7
  import type UploadFile from "./UploadFile";
8
- import i18n from "@ticatec/i18n";
8
+ import i18nRes from "../i18nRes";
9
+
9
10
 
10
11
  export let file: UploadFile;
11
12
  export let removeFile: (file: any) => void;
@@ -13,9 +14,9 @@
13
14
  let status: ProgressStatus;
14
15
  let progress: number = 0;
15
16
 
16
- let cancelLabel: string = i18n.getText('uniface.upload.btnCancel', 'Cancel');
17
- let retryLabel: string = i18n.getText('uniface.upload.btnRetry', 'Retry');
18
- let removeLabel: string = i18n.getText('uniface.upload.btnRemove', 'Delete');
17
+ let cancelLabel: string = i18nRes.common.btnCancel;
18
+ let retryLabel: string = i18nRes.upload.btnRetry;
19
+ let removeLabel: string = i18nRes.upload.btnRemove;
19
20
 
20
21
  const cancelUpload = async () => {
21
22
  if (await file.cancel()) {
@@ -23,11 +24,11 @@
23
24
  }
24
25
  }
25
26
 
26
- const retryUpload = () => {
27
+ const retryUpload = async () => {
27
28
  file.restart();
28
29
  }
29
30
 
30
- const removeUploadFile = () => {
31
+ const removeUploadFile = async () => {
31
32
  removeFile?.(file);
32
33
  }
33
34
 
@@ -8,7 +8,7 @@
8
8
  import type {FileUpload} from "./FileUpload";
9
9
  import utils from "../common/utils";
10
10
  import ModalPopover from "../common/ModalPopover.svelte";
11
- import i18n from "@ticatec/i18n";
11
+ import i18nRes from "../i18nRes";
12
12
 
13
13
  export let accept: string = "*/*";
14
14
  export let maxSize: number = 1024 * 1024 * 10;
@@ -19,7 +19,7 @@
19
19
  export let canClose: boolean = false;
20
20
  export let visible: boolean = false;
21
21
 
22
- let btnPickup: string = i18n.getText('uniface.upload.btnPickup', "Pickup files");
22
+ let btnPickup: string = i18nRes.upload.btnPickup;
23
23
 
24
24
  let files: Array<UploadFile> = [];
25
25
  let dropZone: any;
@@ -1,3 +1,4 @@
1
+ import i18nRes from "../i18nRes";
1
2
  import i18n from "@ticatec/i18n";
2
3
  export default class DateContext {
3
4
  _weekBegin = 1;
@@ -13,16 +14,16 @@ export default class DateContext {
13
14
  return DateContext.instance;
14
15
  }
15
16
  get months() {
16
- return i18n.get("uniface.calendar.months");
17
+ return i18nRes.calendar.months;
17
18
  }
18
19
  get monthsAbbr() {
19
- return i18n.get("uniface.calendar.monthsAbbr");
20
+ return i18nRes.calendar.monthsAbbr;
20
21
  }
21
22
  get weekTitle() {
22
- return i18n.get("uniface.calendar.weekTitle");
23
+ return i18nRes.calendar.weekTitle;
23
24
  }
24
25
  get weekTitleAbbr() {
25
- return i18n.get("uniface.calendar.weekTitleAbbr");
26
+ return i18nRes.calendar.weekTitleAbbr;
26
27
  }
27
28
  set weekBegin(value) {
28
29
  if (value < 0 || value > 6) {
@@ -28,24 +28,24 @@
28
28
  const isDisabled = (y: number) => (maxYear!=null && y > maxYear) || (minYear!=null && y < minYear);
29
29
 
30
30
  </script>
31
- <div class="uniface-year-pickup-panel" on:click={onClick}>
31
+ <div class="uniface-year-pickup-panel" aria-hidden="true" on:click={onClick}>
32
32
  <div>
33
33
  <div>
34
34
  <div style="text-align: center">
35
35
  <div style="display: inline-block; width: 30px; height: 10px; padding: 6px 0">
36
- <i class="icon_google_keyboard_arrow_up" on:click={showYears(-years)}></i>
36
+ <i class="icon_google_keyboard_arrow_up" aria-hidden="true" on:click={showYears(-years)}></i>
37
37
  </div>
38
38
  </div>
39
39
  <div style="display: grid; grid-template-columns: auto auto auto auto; width: 100%; overflow: hidden">
40
40
  {#each Array(years) as _, i}
41
- <div class="year-block" on:click={handleYearClick(i)} class:disabled={isDisabled(year-offset+i)} class:selected={year===year-offset+i}>
41
+ <div class="year-block" on:click={handleYearClick(i)} aria-hidden="true" class:disabled={isDisabled(year-offset+i)} class:selected={year===year-offset+i}>
42
42
  <span>{year-offset+i}</span>
43
43
  </div>
44
44
  {/each}
45
45
  </div>
46
46
  <div style="text-align: center">
47
47
  <div style="display: inline-block; width: 30px; height: 10px; padding: 6px 0">
48
- <i class="icon_google_keyboard_arrow_down" on:click={showYears(years)}></i>
48
+ <i class="icon_google_keyboard_arrow_down" aria-hidden="true" on:click={showYears(years)}></i>
49
49
  </div>
50
50
  </div>
51
51
  </div>
@@ -9,7 +9,7 @@
9
9
  export let actions: Array<CardAction> = [];
10
10
  export let variant: 'plain' | '3d' = 'plain';
11
11
  export let iconColor: string | null = null;
12
- export let data: any;
12
+ export let data: any = null;
13
13
 
14
14
  </script>
15
15
 
@@ -23,7 +23,7 @@ declare const Card: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithC
23
23
  actions?: Array<CardAction>;
24
24
  variant?: "plain" | "3d";
25
25
  iconColor?: string | null;
26
- data: any;
26
+ data?: any;
27
27
  }, {
28
28
  'header-bar': {};
29
29
  default: {};
@@ -134,6 +134,5 @@
134
134
  </div>
135
135
  {/if}
136
136
  </div>
137
- </CommonPicker>
138
-
139
- <!--{/if}-->
137
+ </div>
138
+ </CommonPicker>
@@ -1 +1,46 @@
1
- export {};
1
+ import { DisplayMode } from "../common/DisplayMode";
2
+ import type { OnChangeHandler } from "../common/OnChangeHandler";
3
+ import type { IsLeafDetermine } from "./isLeafDetermine";
4
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
5
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
6
+ $$bindings?: Bindings;
7
+ } & Exports;
8
+ (internal: unknown, props: Props & {
9
+ $$events?: Events;
10
+ $$slots?: Slots;
11
+ }): Exports & {
12
+ $set?: any;
13
+ $on?: any;
14
+ };
15
+ z_$$bindings?: Bindings;
16
+ }
17
+ declare const CascadeOptionSelect: $$__sveltets_2_IsomorphicComponent<{
18
+ variant?: "" | "plain" | "outlined" | "filled";
19
+ disabled?: boolean;
20
+ readonly?: boolean;
21
+ compact?: boolean;
22
+ mandatory?: boolean;
23
+ value?: any;
24
+ keyField?: string;
25
+ textField?: string;
26
+ abbrField?: string;
27
+ childrenField?: string;
28
+ style?: string;
29
+ placeholder?: string;
30
+ displayMode?: DisplayMode;
31
+ emptyText?: string | null;
32
+ checkLeaf?: IsLeafDetermine | null;
33
+ text?: string;
34
+ nodes?: Array<any>;
35
+ menu$height?: number;
36
+ onSelect: (item: any) => Promise<Array<any>>;
37
+ box$style?: string;
38
+ onChange?: OnChangeHandler<any>;
39
+ }, {
40
+ blur: FocusEvent;
41
+ focus: FocusEvent;
42
+ } & {
43
+ [evt: string]: CustomEvent<any>;
44
+ }, {}, {}, string>;
45
+ type CascadeOptionSelect = InstanceType<typeof CascadeOptionSelect>;
46
+ export default CascadeOptionSelect;
@@ -43,7 +43,7 @@
43
43
  <div style="position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: #e1e1e110;">
44
44
  <div style="position: relative; width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center">
45
45
  <div style="width: 100px; margin: 0 auto; text-align: center; background-color: #f0f0f0; border-radius: 4px; padding: 8px 12px; box-sizing: border-box;">
46
- <img src={iconLoading} width="32" height="32"/>
46
+ <img src={iconLoading} alt="loading" width="32" height="32"/>
47
47
  </div>
48
48
  </div>
49
49
  </div>
@@ -59,7 +59,7 @@
59
59
 
60
60
  </script>
61
61
  <div class="uniface-checkbox" class:disabled class:compact {style}>
62
- <label on:click={handleClickEvent}>
62
+ <label aria-hidden="true" on:click={handleClickEvent}>
63
63
  <input bind:this={checkbox} type="checkbox" bind:checked={checked} {readonly} {disabled}/>
64
64
  {#if label}
65
65
  <span>{label}</span>