@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,424 @@
1
+ # 搜索框组件
2
+
3
+ 一个专为搜索功能设计的文本输入组件,内置搜索图标并优化了输入处理。支持国际化文本输入的组合事件处理和清除功能。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install @ticatec/uniface-element
9
+ ```
10
+
11
+ ## 导入
12
+
13
+ ```typescript
14
+ import SearchBox from "@ticatec/uniface-element/SearchBox";
15
+ ```
16
+
17
+ ## 基本用法
18
+
19
+ ```svelte
20
+ <script>
21
+ import SearchBox from "@ticatec/uniface-element/SearchBox";
22
+
23
+ let searchQuery = '';
24
+
25
+ function handleSearch(query) {
26
+ console.log('搜索:', query);
27
+ }
28
+ </script>
29
+
30
+ <SearchBox
31
+ bind:value={searchQuery}
32
+ onchange={handleSearch}
33
+ placeholder="搜索..."
34
+ />
35
+ ```
36
+
37
+ ## 属性
38
+
39
+ | 属性 | 类型 | 默认值 | 描述 |
40
+ |------|------|---------|-------------|
41
+ | `value` | `string \| null` | 必需 | 当前搜索输入值 |
42
+ | `onchange` | `OnChangeHandler<string \| null>` | `null` | 输入值更改(失焦/回车)时的回调函数 |
43
+ | `oninput` | `OnChangeHandler<string \| null>` | `null` | 输入值实时更改时的回调函数 |
44
+ | `onfocus` | `((event: FocusEvent) => void) \| null` | `null` | 输入框获得焦点时的回调函数 |
45
+ | `onblur` | `((event: FocusEvent) => void) \| null` | `null` | 输入框失去焦点时的回调函数 |
46
+ | `disabled` | `boolean` | `false` | 输入框是否禁用 |
47
+ | `placeholder` | `string \| null` | `null` | 占位符文本 |
48
+ | `variant` | `"" \| "plain" \| "outlined" \| "filled"` | `""` | 输入框的视觉变体 |
49
+ | `compact` | `boolean` | `false` | 是否使用紧凑间距 |
50
+ | `style` | `string` | `""` | 附加 CSS 样式 |
51
+
52
+ ## 方法
53
+
54
+ | 方法 | 描述 |
55
+ |--------|-------------|
56
+ | `focus()` | 以编程方式使搜索输入框获得焦点 |
57
+
58
+ ## 示例
59
+
60
+ ### 基本搜索
61
+
62
+ ```svelte
63
+ <script>
64
+ import SearchBox from "@ticatec/uniface-element/SearchBox";
65
+
66
+ let searchTerm = '';
67
+ let results = [];
68
+
69
+ function performSearch(query) {
70
+ if (query) {
71
+ // 模拟搜索
72
+ results = [`"${query}" 的结果 1`, `"${query}" 的结果 2`];
73
+ } else {
74
+ results = [];
75
+ }
76
+ }
77
+ </script>
78
+
79
+ <SearchBox
80
+ bind:value={searchTerm}
81
+ onchange={performSearch}
82
+ placeholder="搜索产品..."
83
+ />
84
+
85
+ {#if results.length > 0}
86
+ <ul>
87
+ {#each results as result}
88
+ <li>{result}</li>
89
+ {/each}
90
+ </ul>
91
+ {/if}
92
+ ```
93
+
94
+ ### 实时搜索
95
+
96
+ ```svelte
97
+ <script>
98
+ import SearchBox from "@ticatec/uniface-element/SearchBox";
99
+ import { debounce } from 'lodash-es';
100
+
101
+ let searchQuery = '';
102
+ let suggestions = [];
103
+
104
+ // 防抖搜索函数
105
+ const debouncedSearch = debounce((query) => {
106
+ if (query.length > 2) {
107
+ // 模拟 API 调用
108
+ suggestions = [
109
+ `${query} 建议 1`,
110
+ `${query} 建议 2`,
111
+ `${query} 建议 3`
112
+ ];
113
+ } else {
114
+ suggestions = [];
115
+ }
116
+ }, 300);
117
+
118
+ function handleInput(query) {
119
+ debouncedSearch(query);
120
+ }
121
+ </script>
122
+
123
+ <SearchBox
124
+ bind:value={searchQuery}
125
+ oninput={handleInput}
126
+ placeholder="输入以搜索..."
127
+ />
128
+
129
+ {#if suggestions.length > 0}
130
+ <div class="suggestions">
131
+ {#each suggestions as suggestion}
132
+ <div class="suggestion-item">{suggestion}</div>
133
+ {/each}
134
+ </div>
135
+ {/if}
136
+
137
+ <style>
138
+ .suggestions {
139
+ border: 1px solid #ddd;
140
+ border-radius: 4px;
141
+ margin-top: 4px;
142
+ }
143
+
144
+ .suggestion-item {
145
+ padding: 8px 12px;
146
+ cursor: pointer;
147
+ }
148
+
149
+ .suggestion-item:hover {
150
+ background-color: #f5f5f5;
151
+ }
152
+ </style>
153
+ ```
154
+
155
+ ### 带事件处理程序
156
+
157
+ ```svelte
158
+ <script>
159
+ import SearchBox from "@ticatec/uniface-element/SearchBox";
160
+
161
+ let searchValue = '';
162
+ let isSearching = false;
163
+
164
+ function handleChange(query) {
165
+ console.log('搜索确认:', query);
166
+ // 执行最终搜索
167
+ }
168
+
169
+ function handleInput(query) {
170
+ console.log('输入更改:', query);
171
+ // 实时建议
172
+ }
173
+
174
+ function handleFocus(event) {
175
+ console.log('搜索框已聚焦');
176
+ isSearching = true;
177
+ }
178
+
179
+ function handleBlur(event) {
180
+ console.log('搜索框已失焦');
181
+ isSearching = false;
182
+ }
183
+ </script>
184
+
185
+ <SearchBox
186
+ bind:value={searchValue}
187
+ onchange={handleChange}
188
+ oninput={handleInput}
189
+ onfocus={handleFocus}
190
+ onblur={handleBlur}
191
+ placeholder="搜索..."
192
+ />
193
+
194
+ {#if isSearching}
195
+ <p>搜索进行中...</p>
196
+ {/if}
197
+ ```
198
+
199
+ ### 不同变体
200
+
201
+ ```svelte
202
+ <script>
203
+ import SearchBox from "@ticatec/uniface-element/SearchBox";
204
+
205
+ let search1 = '', search2 = '', search3 = '';
206
+ </script>
207
+
208
+ <!-- 默认变体 -->
209
+ <SearchBox bind:value={search1} placeholder="默认搜索" />
210
+
211
+ <!-- 轮廓变体 -->
212
+ <SearchBox bind:value={search2} variant="outlined" placeholder="轮廓搜索" />
213
+
214
+ <!-- 填充变体 -->
215
+ <SearchBox bind:value={search3} variant="filled" placeholder="填充搜索" />
216
+ ```
217
+
218
+ ### 紧凑模式
219
+
220
+ ```svelte
221
+ <script>
222
+ import SearchBox from "@ticatec/uniface-element/SearchBox";
223
+
224
+ let compactSearch = '';
225
+ </script>
226
+
227
+ <div class="toolbar">
228
+ <SearchBox
229
+ bind:value={compactSearch}
230
+ compact
231
+ placeholder="快速搜索"
232
+ />
233
+ </div>
234
+
235
+ <style>
236
+ .toolbar {
237
+ display: flex;
238
+ align-items: center;
239
+ padding: 8px;
240
+ background: #f8f9fa;
241
+ }
242
+ </style>
243
+ ```
244
+
245
+ ### 带过滤器的搜索
246
+
247
+ ```svelte
248
+ <script>
249
+ import SearchBox from "@ticatec/uniface-element/SearchBox";
250
+ import Button from "@ticatec/uniface-element/Button";
251
+
252
+ let searchTerm = '';
253
+ let filterType = 'all';
254
+ let items = [
255
+ { name: '苹果 iPhone', category: 'electronics' },
256
+ { name: '耐克鞋', category: 'clothing' },
257
+ { name: '咖啡机', category: 'appliances' },
258
+ { name: '三星电视', category: 'electronics' }
259
+ ];
260
+
261
+ $: filteredItems = items.filter(item => {
262
+ const matchesSearch = !searchTerm ||
263
+ item.name.toLowerCase().includes(searchTerm.toLowerCase());
264
+ const matchesFilter = filterType === 'all' ||
265
+ item.category === filterType;
266
+ return matchesSearch && matchesFilter;
267
+ });
268
+
269
+ function clearSearch() {
270
+ searchTerm = '';
271
+ }
272
+ </script>
273
+
274
+ <div class="search-controls">
275
+ <SearchBox
276
+ bind:value={searchTerm}
277
+ placeholder="搜索产品..."
278
+ style="flex: 1; margin-right: 8px;"
279
+ />
280
+ <Button label="清除" onClick={clearSearch} />
281
+ </div>
282
+
283
+ <div class="filters">
284
+ <label>
285
+ <input type="radio" bind:group={filterType} value="all" />
286
+ 全部
287
+ </label>
288
+ <label>
289
+ <input type="radio" bind:group={filterType} value="electronics" />
290
+ 电子产品
291
+ </label>
292
+ <label>
293
+ <input type="radio" bind:group={filterType} value="clothing" />
294
+ 服装
295
+ </label>
296
+ </div>
297
+
298
+ <div class="results">
299
+ {#each filteredItems as item}
300
+ <div class="item">{item.name} - {item.category}</div>
301
+ {/each}
302
+ </div>
303
+
304
+ <style>
305
+ .search-controls {
306
+ display: flex;
307
+ margin-bottom: 16px;
308
+ }
309
+
310
+ .filters {
311
+ display: flex;
312
+ gap: 16px;
313
+ margin-bottom: 16px;
314
+ }
315
+
316
+ .item {
317
+ padding: 8px;
318
+ border-bottom: 1px solid #eee;
319
+ }
320
+ </style>
321
+ ```
322
+
323
+ ### 禁用状态
324
+
325
+ ```svelte
326
+ <script>
327
+ import SearchBox from "@ticatec/uniface-element/SearchBox";
328
+
329
+ let searchValue = '';
330
+ let isDisabled = false;
331
+ </script>
332
+
333
+ <label>
334
+ <input type="checkbox" bind:checked={isDisabled} />
335
+ 禁用搜索
336
+ </label>
337
+
338
+ <SearchBox
339
+ bind:value={searchValue}
340
+ disabled={isDisabled}
341
+ placeholder="启用时可搜索..."
342
+ />
343
+ ```
344
+
345
+ ### 编程式焦点
346
+
347
+ ```svelte
348
+ <script>
349
+ import SearchBox from "@ticatec/uniface-element/SearchBox";
350
+ import Button from "@ticatec/uniface-element/Button";
351
+
352
+ let searchBox;
353
+ let searchValue = '';
354
+
355
+ function focusSearch() {
356
+ searchBox.focus();
357
+ }
358
+ </script>
359
+
360
+ <Button label="聚焦搜索" onClick={focusSearch} />
361
+
362
+ <SearchBox
363
+ bind:this={searchBox}
364
+ bind:value={searchValue}
365
+ placeholder="点击按钮聚焦我"
366
+ />
367
+ ```
368
+
369
+ ## 功能
370
+
371
+ - **搜索图标**:内置搜索图标,提供清晰的视觉提示
372
+ - **清除功能**:当输入框中有文本时自动显示清除按钮
373
+ - **组合事件**:支持国际化文本输入(IME 支持)
374
+ - **实时输入**:分别处理输入和更改事件
375
+ - **焦点管理**:支持编程式焦点控制和事件处理
376
+ - **灵活样式**:支持多种视觉变体和自定义样式选项
377
+
378
+ ## 输入处理
379
+
380
+ 搜索框组件提供复杂的输入处理:
381
+
382
+ 1. **实时更新**:每次按键触发 `oninput` 回调
383
+ 2. **确认更改**:失焦或按回车键触发 `onchange` 回调
384
+ 3. **组合支持**:正确处理国际化语言的 IME 输入
385
+ 4. **清除操作**:清除时触发输入和更改回调
386
+
387
+ ## 行为
388
+
389
+ 1. **输入**:实时更新触发 `oninput` 回调
390
+ 2. **回车/失焦**:确认更改触发 `onchange` 回调
391
+ 3. **清除按钮**:当输入框有文本时显示,点击时清除输入
392
+ 4. **焦点**:通过点击或 Tab 键聚焦,可通过 `focus()` 方法编程控制
393
+ 5. **IME 输入**:组合事件防止多键输入期间的过早更新
394
+
395
+ ## 可访问性
396
+
397
+ - 为搜索功能提供适当的 ARIA 属性
398
+ - 支持键盘导航
399
+ - 屏幕阅读器兼容
400
+ - 焦点指示器和管理
401
+ - 清除按钮的可访问性
402
+
403
+ ## 最佳实践
404
+
405
+ 1. **搜索反馈**:在搜索操作期间提供视觉反馈
406
+ 2. **防抖**:对实时搜索使用防抖以避免过多 API 调用
407
+ 3. **空状态**:优雅处理空搜索结果
408
+ 4. **加载状态**:为异步搜索显示加载指示器
409
+ 5. **清除操作**:始终提供清除搜索的方法
410
+ 6. **占位符文本**:使用描述性的占位符文本
411
+
412
+ ## 浏览器支持
413
+
414
+ - 支持组合事件的现代浏览器
415
+ - 兼容 Svelte 5+
416
+ - 支持国际化输入法编辑器(IME)
417
+ - 触控友好界面
418
+
419
+ ## 相关组件
420
+
421
+ - `TextEditor` - 不带搜索功能的基本文本输入
422
+ - `PromptsTextEditor` - 带建议下拉菜单的文本输入
423
+ - `LookupEditor` - 带搜索和选择功能的高级查找
424
+ - `OptionsSelect` - 带搜索功能的下拉选择
@@ -8,7 +8,10 @@
8
8
  export let style: string = '';
9
9
  export let value: string | null;
10
10
  export let disabled: boolean = false;
11
- export let onChange: OnChangeHandler<string|null> = null as unknown as OnChangeHandler<string|null>;
11
+ export let onchange: OnChangeHandler<string|null> = null as unknown as OnChangeHandler<string|null>;
12
+ export let oninput: OnChangeHandler<string|null> = null as unknown as OnChangeHandler<string|null>;
13
+ export let onfocus: ((event: FocusEvent) => void) | null = null;
14
+ export let onblur: ((event: FocusEvent) => void) | null = null;
12
15
 
13
16
  export let placeholder: string | null = null;
14
17
 
@@ -25,9 +28,9 @@
25
28
  $: inputText = value??'';
26
29
 
27
30
  const handleInput = () => {
28
- if (composing == false) {
31
+ if (!composing) {
29
32
  value = inputText;
30
- onChange?.(value);
33
+ oninput?.(value);
31
34
  }
32
35
  };
33
36
  const handleCompositionStart = (event: CompositionEvent) => {
@@ -37,12 +40,25 @@
37
40
  const handleCompositionEnd = (event: CompositionEvent) => {
38
41
  composing = false;
39
42
  value = inputText;
40
- onChange?.(value);
43
+ oninput?.(value);
44
+ };
45
+
46
+ const handleChange = () => {
47
+ onchange?.(value);
48
+ };
49
+
50
+ const handleFocus = (event: FocusEvent) => {
51
+ onfocus?.(event);
52
+ };
53
+
54
+ const handleBlur = (event: FocusEvent) => {
55
+ onblur?.(event);
41
56
  };
42
57
 
43
58
  const clean = () => {
44
59
  value = null;
45
- onChange?.(value);
60
+ oninput?.(value);
61
+ onchange?.(value);
46
62
  }
47
63
 
48
64
  </script>
@@ -52,5 +68,5 @@
52
68
  <i class="icon_google_search"></i>
53
69
  </div>
54
70
  <input bind:this={editor} style="width: 100%" bind:value={inputText} {disabled} on:input={handleInput} on:compositionstart={handleCompositionStart}
55
- on:compositionend={handleCompositionEnd} {placeholder}/>
71
+ on:compositionend={handleCompositionEnd} on:change={handleChange} on:focus={handleFocus} on:blur={handleBlur} {placeholder}/>
56
72
  </CommonEditor>
@@ -18,7 +18,10 @@ declare const SearchBox: $$__sveltets_2_IsomorphicComponent<{
18
18
  style?: string;
19
19
  value: string | null;
20
20
  disabled?: boolean;
21
- onChange?: OnChangeHandler<string | null>;
21
+ onchange?: OnChangeHandler<string | null>;
22
+ oninput?: OnChangeHandler<string | null>;
23
+ onfocus?: ((event: FocusEvent) => void) | null;
24
+ onblur?: ((event: FocusEvent) => void) | null;
22
25
  placeholder?: string | null;
23
26
  focus?: () => void;
24
27
  }, {