@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,372 @@
1
+ # 单选按钮组件
2
+
3
+ 一个用于从一组选项中进行单一选择的单选按钮组件。单选按钮允许用户从一组互斥的预定义选项中精确选择一个。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install @ticatec/uniface-element
9
+ ```
10
+
11
+ ## 导入
12
+
13
+ ```typescript
14
+ import RadioButton from "@ticatec/uniface-element/RadioButton";
15
+ ```
16
+
17
+ ## 基本用法
18
+
19
+ ```svelte
20
+ <script>
21
+ import RadioButton from "@ticatec/uniface-element/RadioButton";
22
+
23
+ let selectedSize = '';
24
+ </script>
25
+
26
+ <RadioButton bind:group={selectedSize} value="small" label="小" />
27
+ <RadioButton bind:group={selectedSize} value="medium" label="中" />
28
+ <RadioButton bind:group={selectedSize} value="large" label="大" />
29
+
30
+ <p>已选择:{selectedSize}</p>
31
+ ```
32
+
33
+ ## 属性
34
+
35
+ | 属性 | 类型 | 默认值 | 描述 |
36
+ |------|------|---------|-------------|
37
+ | `value` | `any` | 必需 | 该单选按钮选项的值 |
38
+ | `label` | `string` | 必需 | 单选按钮的显示标签 |
39
+ | `group` | `any` | 必需 | 绑定到保存所选值的变量 |
40
+ | `disabled` | `boolean` | `false` | 单选按钮是否禁用 |
41
+ | `readonly` | `boolean` | `false` | 单选按钮是否只读 |
42
+ | `compact` | `boolean` | `false` | 是否使用紧凑间距 |
43
+ | `style` | `string` | `""` | 附加 CSS 样式 |
44
+ | `onfocus` | `((event: FocusEvent) => void) \| null` | `null` | 单选按钮获得焦点时的回调函数 |
45
+ | `onblur` | `((event: FocusEvent) => void) \| null` | `null` | 单选按钮失去焦点时的回调函数 |
46
+ | `onchange` | `((event: Event) => void) \| null` | `null` | 选择更改时的回调函数 |
47
+
48
+ ## 事件
49
+
50
+ | 事件 | 描述 |
51
+ |-------|-------------|
52
+ | `focus` | 单选按钮获得焦点时触发 |
53
+ | `blur` | 单选按钮失去焦点时触发 |
54
+ | `change` | 选择更改时触发 |
55
+ | `click` | 单选按钮被点击时触发 |
56
+
57
+ ## 方法
58
+
59
+ | 方法 | 描述 |
60
+ |--------|-------------|
61
+ | `setFocus()` | 以编程方式使单选按钮获得焦点 |
62
+
63
+ ## 示例
64
+
65
+ ### 基本单选按钮组
66
+
67
+ ```svelte
68
+ <script>
69
+ import RadioButton from "@ticatec/uniface-element/RadioButton";
70
+
71
+ let selectedOption = 'option1';
72
+ </script>
73
+
74
+ <h3>选择一个选项:</h3>
75
+ <RadioButton bind:group={selectedOption} value="option1" label="选项 1" />
76
+ <RadioButton bind:group={selectedOption} value="option2" label="选项 2" />
77
+ <RadioButton bind:group={selectedOption} value="option3" label="选项 3" />
78
+
79
+ <p>你选择了:{selectedOption}</p>
80
+ ```
81
+
82
+ ### 带事件处理程序
83
+
84
+ ```svelte
85
+ <script>
86
+ import RadioButton from "@ticatec/uniface-element/RadioButton";
87
+
88
+ let selectedColor = '';
89
+
90
+ function handleChange(event) {
91
+ console.log('颜色更改为:', event.target.value);
92
+ }
93
+
94
+ function handleFocus(event) {
95
+ console.log('单选按钮已聚焦');
96
+ }
97
+
98
+ function handleBlur(event) {
99
+ console.log('单选按钮已失焦');
100
+ }
101
+ </script>
102
+
103
+ <h3>选择一个颜色:</h3>
104
+ <RadioButton
105
+ bind:group={selectedColor}
106
+ value="red"
107
+ label="红色"
108
+ onchange={handleChange}
109
+ onfocus={handleFocus}
110
+ onblur={handleBlur}
111
+ />
112
+ <RadioButton
113
+ bind:group={selectedColor}
114
+ value="green"
115
+ label="绿色"
116
+ onchange={handleChange}
117
+ onfocus={handleFocus}
118
+ onblur={handleBlur}
119
+ />
120
+ <RadioButton
121
+ bind:group={selectedColor}
122
+ value="blue"
123
+ label="蓝色"
124
+ onchange={handleChange}
125
+ onfocus={handleFocus}
126
+ onblur={handleBlur}
127
+ />
128
+ ```
129
+
130
+ ### 禁用和只读状态
131
+
132
+ ```svelte
133
+ <script>
134
+ import RadioButton from "@ticatec/uniface-element/RadioButton";
135
+
136
+ let selectedPlan = 'basic';
137
+ </script>
138
+
139
+ <h3>订阅计划:</h3>
140
+ <RadioButton bind:group={selectedPlan} value="free" label="免费(有限制)" disabled />
141
+ <RadioButton bind:group={selectedPlan} value="basic" label="基础" />
142
+ <RadioButton bind:group={selectedPlan} value="premium" label="高级" />
143
+ <RadioButton bind:group={selectedPlan} value="enterprise" label="企业" readonly />
144
+ ```
145
+
146
+ ### 紧凑样式
147
+
148
+ ```svelte
149
+ <script>
150
+ import RadioButton from "@ticatec/uniface-element/RadioButton";
151
+
152
+ let selectedTheme = 'light';
153
+ </script>
154
+
155
+ <div style="display: flex; gap: 16px;">
156
+ <RadioButton bind:group={selectedTheme} value="light" label="明亮" compact />
157
+ <RadioButton bind:group={selectedTheme} value="dark" label="暗黑" compact />
158
+ <RadioButton bind:group={selectedTheme} value="auto" label="自动" compact />
159
+ </div>
160
+ ```
161
+
162
+ ### 表单集成
163
+
164
+ ```svelte
165
+ <script>
166
+ import RadioButton from "@ticatec/uniface-element/RadioButton";
167
+ import Button from "@ticatec/uniface-element/Button";
168
+
169
+ let formData = {
170
+ priority: '',
171
+ category: '',
172
+ urgency: ''
173
+ };
174
+
175
+ function handleSubmit() {
176
+ console.log('表单提交:', formData);
177
+ }
178
+ </script>
179
+
180
+ <form on:submit|preventDefault={handleSubmit}>
181
+ <fieldset>
182
+ <legend>优先级</legend>
183
+ <RadioButton bind:group={formData.priority} value="low" label="低优先级" />
184
+ <RadioButton bind:group={formData.priority} value="medium" label="中优先级" />
185
+ <RadioButton bind:group={formData.priority} value="high" label="高优先级" />
186
+ </fieldset>
187
+
188
+ <fieldset>
189
+ <legend>类别</legend>
190
+ <RadioButton bind:group={formData.category} value="bug" label="错误报告" />
191
+ <RadioButton bind:group={formData.category} value="feature" label="功能请求" />
192
+ <RadioButton bind:group={formData.category} value="support" label="支持问题" />
193
+ </fieldset>
194
+
195
+ <fieldset>
196
+ <legend>紧急程度</legend>
197
+ <RadioButton bind:group={formData.urgency} value="immediate" label="立即" />
198
+ <RadioButton bind:group={formData.urgency} value="soon" label="本周" />
199
+ <RadioButton bind:group={formData.urgency} value="later" label="随时" />
200
+ </fieldset>
201
+
202
+ <Button type="primary" label="提交" onClick={handleSubmit} />
203
+ </form>
204
+
205
+ <style>
206
+ fieldset {
207
+ border: 1px solid #ddd;
208
+ border-radius: 4px;
209
+ padding: 16px;
210
+ margin-bottom: 16px;
211
+ }
212
+
213
+ legend {
214
+ font-weight: bold;
215
+ padding: 0 8px;
216
+ }
217
+ </style>
218
+ ```
219
+
220
+ ### 动态选项
221
+
222
+ ```svelte
223
+ <script>
224
+ import RadioButton from "@ticatec/uniface-element/RadioButton";
225
+
226
+ let selectedLanguage = '';
227
+ let languages = [
228
+ { value: 'js', label: 'JavaScript' },
229
+ { value: 'ts', label: 'TypeScript' },
230
+ { value: 'py', label: 'Python' },
231
+ { value: 'java', label: 'Java' },
232
+ { value: 'go', label: 'Go' }
233
+ ];
234
+ </script>
235
+
236
+ <h3>首选编程语言:</h3>
237
+ {#each languages as lang}
238
+ <RadioButton
239
+ bind:group={selectedLanguage}
240
+ value={lang.value}
241
+ label={lang.label}
242
+ />
243
+ {/each}
244
+
245
+ {#if selectedLanguage}
246
+ <p>你选择了:{languages.find(l => l.value === selectedLanguage)?.label}</p>
247
+ {/if}
248
+ ```
249
+
250
+ ### 带自定义样式
251
+
252
+ ```svelte
253
+ <script>
254
+ import RadioButton from "@ticatec/uniface-element/RadioButton";
255
+
256
+ let selectedSize = 'medium';
257
+ </script>
258
+
259
+ <div class="size-selector">
260
+ <RadioButton
261
+ bind:group={selectedSize}
262
+ value="small"
263
+ label="小 (S)"
264
+ style="margin-right: 24px;"
265
+ />
266
+ <RadioButton
267
+ bind:group={selectedSize}
268
+ value="medium"
269
+ label="中 (M)"
270
+ style="margin-right: 24px;"
271
+ />
272
+ <RadioButton
273
+ bind:group={selectedSize}
274
+ value="large"
275
+ label="大 (L)"
276
+ />
277
+ </div>
278
+
279
+ <style>
280
+ .size-selector {
281
+ padding: 16px;
282
+ background: #f8f9fa;
283
+ border-radius: 8px;
284
+ display: flex;
285
+ align-items: center;
286
+ }
287
+ </style>
288
+ ```
289
+
290
+ ### 编程式焦点
291
+
292
+ ```svelte
293
+ <script>
294
+ import RadioButton from "@ticatec/uniface-element/RadioButton";
295
+ import Button from "@ticatec/uniface-element/Button";
296
+
297
+ let selectedAnswer = '';
298
+ let firstRadio, secondRadio, thirdRadio;
299
+
300
+ function focusFirst() {
301
+ firstRadio.setFocus();
302
+ }
303
+
304
+ function focusSecond() {
305
+ secondRadio.setFocus();
306
+ }
307
+
308
+ function focusThird() {
309
+ thirdRadio.setFocus();
310
+ }
311
+ </script>
312
+
313
+ <h3>调查问题:</h3>
314
+ <RadioButton bind:this={firstRadio} bind:group={selectedAnswer} value="yes" label="是" />
315
+ <RadioButton bind:this={secondRadio} bind:group={selectedAnswer} value="no" label="否" />
316
+ <RadioButton bind:this={thirdRadio} bind:group={selectedAnswer} value="maybe" label="也许" />
317
+
318
+ <div style="margin-top: 16px;">
319
+ <Button label="聚焦 是" onClick={focusFirst} />
320
+ <Button label="聚焦 否" onClick={focusSecond} />
321
+ <Button label="聚焦 也许" onClick={focusThird} />
322
+ </div>
323
+ ```
324
+
325
+ ## 功能
326
+
327
+ - **单一选择**:确保组内只能选择一个选项
328
+ - **键盘导航**:支持 Tab 键和箭头键的完整键盘可访问性
329
+ - **焦点管理**:支持编程式焦点控制和事件处理
330
+ - **状态管理**:支持禁用和只读状态
331
+ - **自定义样式**:灵活的样式选项和紧凑模式
332
+ - **事件处理**:支持用户交互的全面事件处理
333
+
334
+ ## 行为
335
+
336
+ 1. **选择**:点击一个单选按钮会选择它并取消组内其他按钮的选择
337
+ 2. **键盘**:箭头键在选项间导航,空格键选择焦点所在的选项
338
+ 3. **焦点**:Tab 键在单选按钮组间移动焦点
339
+ 4. **标签**:点击标签会选择关联的单选按钮
340
+ 5. **禁用**:禁用状态的单选按钮无法被选择或聚焦
341
+ 6. **只读**:只读状态的单选按钮无法更改但可以聚焦
342
+
343
+ ## 可访问性
344
+
345
+ - 适当的 ARIA 属性和角色
346
+ - 键盘导航支持
347
+ - 屏幕阅读器兼容的标签
348
+ - 焦点指示器和管理
349
+ - 带适当标签的语义化 HTML 结构
350
+
351
+ ## 最佳实践
352
+
353
+ 1. **分组相关选项**:对互斥选择使用单选按钮
354
+ 2. **清晰标签**:为每个选项提供描述性、简洁的标签
355
+ 3. **默认选择**:考虑提供一个合理的默认选择
356
+ 4. **选项数量**:限制为 2-7 个选项以获得最佳可用性
357
+ 5. **逻辑顺序**:按逻辑顺序排列选项
358
+ 6. **视觉分组**:使用 `<fieldset>` 和 `<legend>` 分组相关单选按钮
359
+
360
+ ## 浏览器支持
361
+
362
+ - 支持完整表单控件的现代浏览器
363
+ - 兼容 Svelte 5+
364
+ - 响应式设计原则
365
+ - 触控友好界面
366
+
367
+ ## 相关组件
368
+
369
+ - `CheckBox` - 用于多选
370
+ - `Switch` - 用于二元开/关状态
371
+ - `OptionsSelect` - 用于下拉单选
372
+ - `Button` - 用于基于操作的选择
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import {onMount} from "svelte";
2
+ import {onMount, createEventDispatcher} from "svelte";
3
3
 
4
4
  export let value: any;
5
5
  export let label: string;
@@ -8,8 +8,19 @@
8
8
  export let readonly: boolean = false;
9
9
  export let compact: boolean = false;
10
10
  export let style: string = '';
11
+ export let onfocus: ((event: FocusEvent) => void) | null = null;
12
+ export let onblur: ((event: FocusEvent) => void) | null = null;
13
+ export let onchange: ((event: Event) => void) | null = null;
11
14
 
12
15
  let roProps: any = {};
16
+ let inputElement: HTMLInputElement;
17
+ const dispatch = createEventDispatcher();
18
+
19
+ export const setFocus = () => {
20
+ setTimeout(() => {
21
+ inputElement && inputElement.focus();
22
+ }, 50);
23
+ }
13
24
 
14
25
  onMount(()=>{
15
26
 
@@ -19,14 +30,32 @@
19
30
  if (disabled || readonly) {
20
31
  e.stopPropagation();
21
32
  e.preventDefault();
33
+ } else {
34
+ dispatch('click', e);
22
35
  }
23
36
  }
24
37
 
38
+ const handleFocus = (e: FocusEvent) => {
39
+ dispatch('focus', e);
40
+ onfocus?.(e);
41
+ }
42
+
43
+ const handleBlur = (e: FocusEvent) => {
44
+ dispatch('blur', e);
45
+ onblur?.(e);
46
+ }
47
+
48
+ const handleChange = (e: Event) => {
49
+ dispatch('change', e);
50
+ onchange?.(e);
51
+ }
52
+
25
53
  $: roProps = readonly ? {readonly} : {}
26
54
 
27
55
  </script>
28
56
 
29
- <label class="uniface-radio-button" {style} class:disabled class:compact>{label}
30
- <input type="radio" bind:group {disabled} {...roProps} on:click={handleClick} {value}>
57
+ <label class="uniface-radio-button" {style} class:disabled class:compact on:click={handleClick}>{label}
58
+ <input bind:this={inputElement} type="radio" bind:group {disabled} {...roProps} {value}
59
+ on:focus={handleFocus} on:blur={handleBlur} on:change={handleChange}>
31
60
  <span></span>
32
61
  </label>
@@ -19,8 +19,19 @@ declare const RadioButton: $$__sveltets_2_IsomorphicComponent<{
19
19
  readonly?: boolean;
20
20
  compact?: boolean;
21
21
  style?: string;
22
+ onfocus?: ((event: FocusEvent) => void) | null;
23
+ onblur?: ((event: FocusEvent) => void) | null;
24
+ onchange?: ((event: Event) => void) | null;
25
+ setFocus?: () => void;
22
26
  }, {
27
+ click: CustomEvent<any>;
28
+ focus: CustomEvent<any>;
29
+ blur: CustomEvent<any>;
30
+ change: CustomEvent<any>;
31
+ } & {
23
32
  [evt: string]: CustomEvent<any>;
24
- }, {}, {}, string>;
33
+ }, {}, {
34
+ setFocus: () => void;
35
+ }, string>;
25
36
  type RadioButton = InstanceType<typeof RadioButton>;
26
37
  export default RadioButton;