@ticatec/uniface-element 0.2.4 → 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.
- package/dist/accordion/README.md +169 -0
- package/dist/accordion/README_CN.md +176 -0
- package/dist/action-bar/README.md +275 -0
- package/dist/action-bar/README_CN.md +285 -0
- package/dist/app-layout/README.md +374 -0
- package/dist/app-layout/README_CN.md +381 -0
- package/dist/app-top-bar/README.md +357 -0
- package/dist/app-top-bar/README_CN.md +365 -0
- package/dist/attachment-files/AttachmentFilesField.svelte +67 -1
- package/dist/attachment-files/AttachmentFilesField.svelte.d.ts +8 -1
- package/dist/base-calendar/CalendarBase.svelte +0 -3
- package/dist/box/README.md +385 -0
- package/dist/box/README_CN.md +393 -0
- package/dist/breadcrumbs/README.md +442 -0
- package/dist/breadcrumbs/README_CN.md +442 -0
- package/dist/button/Button.svelte +27 -7
- package/dist/button/Button.svelte.d.ts +3 -1
- package/dist/button/IconButton.svelte +26 -6
- package/dist/button/IconButton.svelte.d.ts +3 -1
- package/dist/button/IconButton_README.md +513 -0
- package/dist/button/IconButton_README_CN.md +513 -0
- package/dist/button/README.md +428 -0
- package/dist/button/README_CN.md +428 -0
- package/dist/button/TextButton.svelte +26 -6
- package/dist/button/TextButton.svelte.d.ts +3 -1
- package/dist/button/TextButton_README.md +571 -0
- package/dist/button/TextButton_README_CN.md +571 -0
- package/dist/card/README.md +666 -0
- package/dist/card/README_CN.md +666 -0
- package/dist/cascade-options-select/CascadeOptionSelect.svelte +43 -7
- package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +3 -4
- package/dist/cascade-options-select/README.md +663 -2
- package/dist/cascade-options-select/README_CN.md +664 -0
- package/dist/checkbox/CheckBox.svelte +20 -6
- package/dist/checkbox/CheckBox.svelte.d.ts +4 -2
- package/dist/checkbox/README.md +562 -0
- package/dist/checkbox/README_CN.md +727 -0
- package/dist/common-editor/NumberInput.svelte +39 -26
- package/dist/common-editor/NumberInput.svelte.d.ts +5 -1
- package/dist/concise-data-table/ConciseListTable.svelte +133 -36
- package/dist/concise-data-table/ConciseListTable.svelte.d.ts +8 -1
- package/dist/concise-data-table/DataCell.svelte +5 -6
- package/dist/concise-data-table/DataRow.svelte +22 -2
- package/dist/concise-data-table/DataRow.svelte.d.ts +1 -0
- package/dist/concise-data-table/README.md +606 -0
- package/dist/concise-data-table/README_CN.md +611 -0
- package/dist/context-menu/ContextMenu.svelte +138 -21
- package/dist/context-menu/ContextMenu.svelte.d.ts +5 -0
- package/dist/context-menu/ContextMenuItem.d.ts +20 -4
- package/dist/context-menu/README.md +551 -0
- package/dist/context-menu/README_CN.md +551 -0
- package/dist/criteria-field/CriteriaField.svelte +3 -5
- package/dist/criteria-field/README.md +532 -0
- package/dist/criteria-field/README_CN.md +532 -0
- package/dist/data-table/README.md +712 -0
- package/dist/data-table/README_CN.md +712 -0
- package/dist/date-picker/DatePicker.svelte +44 -7
- package/dist/date-picker/DatePicker.svelte.d.ts +3 -4
- package/dist/date-picker/DateTimePicker.svelte +32 -8
- package/dist/date-picker/DateTimePicker.svelte.d.ts +3 -4
- package/dist/date-picker/README.md +326 -0
- package/dist/date-picker/README_CN.md +316 -0
- package/dist/date-picker/ScrollBar.svelte +18 -8
- package/dist/date-picker/ScrollBar.svelte.d.ts +1 -1
- package/dist/date-picker/TimePanel.svelte +5 -5
- package/dist/date-picker/TimePanel.svelte.d.ts +1 -1
- package/dist/date-range/README.md +374 -0
- package/dist/date-range/README_CN.md +374 -0
- package/dist/dialog/README.md +596 -0
- package/dist/dialog/README_CN.md +596 -0
- package/dist/drawer/README.md +679 -1
- package/dist/drawer/README_CN.md +679 -0
- package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
- package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
- package/dist/group-box/group-check-box/README.md +749 -0
- package/dist/group-box/group-check-box/README_CN.md +750 -0
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
- package/dist/group-box/group-radio-box/README.md +920 -0
- package/dist/group-box/group-radio-box/README_CN.md +920 -0
- package/dist/image-files/README.md +1346 -0
- package/dist/image-files/README_CN.md +1346 -0
- package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
- package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
- package/dist/lib/forwardAllEvents.d.ts +3 -0
- package/dist/lib/forwardAllEvents.js +24 -0
- package/dist/list-box/README.md +579 -0
- package/dist/list-box/README_CN.md +682 -0
- package/dist/lookup-editor/LookupEditor.svelte +15 -3
- package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
- package/dist/lookup-editor/README.md +684 -0
- package/dist/lookup-editor/README_CN.md +684 -0
- package/dist/memo-editor/MemoEditor.svelte +77 -27
- package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
- package/dist/memo-editor/README.md +819 -0
- package/dist/memo-editor/README_CN.md +819 -0
- package/dist/message-box/README.md +398 -0
- package/dist/message-box/README_CN.md +398 -0
- package/dist/number-editor/NumberEditor.svelte +2 -2
- package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
- package/dist/number-editor/README.md +353 -22
- package/dist/number-editor/README_CN.md +357 -0
- package/dist/number-range/README.md +443 -0
- package/dist/number-range/README_CN.md +443 -0
- package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
- package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
- package/dist/options-multi-select/README.md +480 -0
- package/dist/options-multi-select/README_CN.md +480 -0
- package/dist/options-select/OptionsSelect.svelte +36 -5
- package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
- package/dist/options-select/README.md +632 -0
- package/dist/options-select/README_CN.md +632 -0
- package/dist/page/README.md +605 -0
- package/dist/page/README_CN.md +605 -0
- package/dist/pagination/README.md +946 -0
- package/dist/pagination/README_CN.md +946 -0
- package/dist/pagination-panel/README.md +1075 -0
- package/dist/pagination-panel/README_CN.md +1075 -0
- package/dist/popup-hint/README.md +841 -0
- package/dist/popup-hint/README_CN.md +840 -0
- package/dist/progress-bar/README.md +242 -0
- package/dist/progress-bar/README_CN.md +242 -0
- package/dist/progress-step-bar/README.md +316 -0
- package/dist/progress-step-bar/README_CN.md +316 -0
- package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
- package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
- package/dist/prompts-text-editor/README.md +329 -0
- package/dist/prompts-text-editor/README_CN.md +329 -0
- package/dist/property-editor/README.md +969 -0
- package/dist/property-editor/README_CN.md +969 -0
- package/dist/radio-button/README.md +372 -0
- package/dist/radio-button/README_CN.md +372 -0
- package/dist/radio-button/RadioButton.svelte +32 -3
- package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
- package/dist/search-box/README.md +425 -0
- package/dist/search-box/README_CN.md +424 -0
- package/dist/search-box/SearchBox.svelte +22 -6
- package/dist/search-box/SearchBox.svelte.d.ts +4 -1
- package/dist/tabs/README.md +919 -0
- package/dist/tabs/README_CN.md +920 -0
- package/dist/tag/README.md +922 -0
- package/dist/tag/README_CN.md +922 -0
- package/dist/text-editor/PasswordEditor.svelte +17 -2
- package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
- package/dist/text-editor/PasswordEditor_README.md +551 -0
- package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
- package/dist/text-editor/README.md +466 -0
- package/dist/text-editor/README_CN.md +466 -0
- package/dist/text-editor/TextEditor.svelte +51 -19
- package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
- package/dist/time-editor/README.md +498 -24
- package/dist/time-editor/README_CN.md +498 -0
- package/dist/time-editor/TimeEditor.svelte +7 -3
- package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
- package/dist/toast/README.md +667 -0
- package/dist/toast/README_CN.md +667 -0
- package/dist/transfer/README.md +795 -0
- package/dist/transfer/Transfer.svelte +6 -4
- package/dist/transfer/Transfer.svelte.d.ts +3 -1
- package/dist/tree-view/README.md +761 -0
- package/dist/tree-view/README_CN.md +761 -0
- package/dist/tree-view/TreeView.svelte +5 -3
- package/dist/tree-view/TreeView.svelte.d.ts +3 -1
- package/dist/unit-number-editor/README.md +546 -20
- package/dist/unit-number-editor/README_CN.md +525 -0
- package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
- package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
- package/docs/form-field/cn/README_CN.md +364 -0
- package/docs/form-field/en/README.md +364 -0
- package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
- package/docs/form-panel/flex-form/en/README.md +586 -0
- package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
- package/docs/form-panel/flex-row-form/en/README.md +787 -0
- package/docs/form-panel/grid-form/en/README.md +744 -0
- package/package.json +1 -1
- package/dist/drawer/README-CN.md +0 -1
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
import {DisplayMode} from "../common/DisplayMode";
|
|
4
4
|
import type {OnChangeHandler} from "../common/OnChangeHandler";
|
|
5
5
|
import {tick} from "svelte";
|
|
6
|
-
import type {LazyLoader} from "../list-box/types"
|
|
7
|
-
import i18nRes from "../i18nRes";
|
|
8
|
-
|
|
9
|
-
import loading from "../assets/loading.gif"
|
|
10
6
|
import CommonPicker from "../common/CommonPicker.svelte";
|
|
7
|
+
import loadingGif from "../assets/loading.gif";
|
|
8
|
+
import type {LazyLoader} from "../list-box/types";
|
|
11
9
|
|
|
12
10
|
export let variant: '' | 'plain' | 'outlined' | 'filled' = '';
|
|
13
11
|
export let disabled: boolean = false;
|
|
@@ -22,84 +20,157 @@
|
|
|
22
20
|
export let placeholder: string = "";
|
|
23
21
|
export let displayMode: DisplayMode = DisplayMode.Edit;
|
|
24
22
|
export let itemRender: any = null;
|
|
25
|
-
export let
|
|
23
|
+
export let onchange: OnChangeHandler<any> = null as unknown as OnChangeHandler<any>;
|
|
24
|
+
export let oninput: OnChangeHandler<string> = null as unknown as OnChangeHandler<string>;
|
|
25
|
+
export let onfocus: (() => void) | null = null;
|
|
26
|
+
export let onblur: (() => void) | null = null;
|
|
26
27
|
export let lazyLoader: LazyLoader = null as unknown as LazyLoader;
|
|
27
28
|
|
|
28
29
|
let editor: any;
|
|
29
30
|
let inputText: string;
|
|
30
31
|
let oldValue: any = value;
|
|
31
|
-
let options: Array<any> = [];
|
|
32
32
|
let scrollElement: any;
|
|
33
|
-
|
|
33
|
+
let options: Array<any> = [];
|
|
34
|
+
|
|
34
35
|
let idleTime = 0;
|
|
35
36
|
let interval: any;
|
|
36
37
|
let pageNo: number;
|
|
37
38
|
let isBusy: boolean;
|
|
38
39
|
let hasMore: boolean;
|
|
40
|
+
let loading: boolean = false;
|
|
41
|
+
let loadingController: AbortController | null = null;
|
|
39
42
|
|
|
40
43
|
const handleInputText = () => {
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
idleTime = 0;
|
|
44
|
-
interval = setInterval(delayReload, 50)
|
|
45
|
-
} else {
|
|
46
|
-
idleTime = 0;
|
|
47
|
-
}
|
|
44
|
+
if (lazyLoader != null) {
|
|
45
|
+
delayReload();
|
|
48
46
|
}
|
|
49
47
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
|
|
49
|
+
const lazyLoad = async (searchText: string, page: number, isLoadMore: boolean = false) => {
|
|
50
|
+
// 取消之前的加载请求
|
|
51
|
+
if (loadingController) {
|
|
52
|
+
loadingController.abort();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// 创建新的AbortController
|
|
56
|
+
loadingController = new AbortController();
|
|
57
|
+
const currentController = loadingController;
|
|
58
|
+
|
|
59
|
+
loading = true;
|
|
60
|
+
if (!isLoadMore) {
|
|
61
|
+
isBusy = true;
|
|
62
|
+
}
|
|
63
|
+
|
|
53
64
|
try {
|
|
54
|
-
let
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
let res = await lazyLoader(searchText, page);
|
|
66
|
+
|
|
67
|
+
// 检查请求是否被取消
|
|
68
|
+
if (currentController.signal.aborted) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (page == 1) {
|
|
73
|
+
options = res.list;
|
|
74
|
+
} else {
|
|
75
|
+
options = [...options, ...res.list];
|
|
76
|
+
}
|
|
77
|
+
hasMore = res.hasMore;
|
|
78
|
+
pageNo = page;
|
|
79
|
+
} catch (e) {
|
|
80
|
+
// 如果是取消请求的错误,忽略它
|
|
81
|
+
if (currentController.signal.aborted) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
console.error('LazyLoader error:', e);
|
|
85
|
+
if (page == 1) {
|
|
86
|
+
options = [];
|
|
87
|
+
hasMore = false;
|
|
62
88
|
}
|
|
63
|
-
showPopup = true;
|
|
64
89
|
} finally {
|
|
65
|
-
|
|
90
|
+
// 只有当前请求没有被取消时才更新loading状态
|
|
91
|
+
if (!currentController.signal.aborted) {
|
|
92
|
+
loading = false;
|
|
93
|
+
isBusy = false;
|
|
94
|
+
loadingController = null;
|
|
95
|
+
}
|
|
66
96
|
}
|
|
67
97
|
}
|
|
68
98
|
|
|
69
|
-
const delayReload =
|
|
70
|
-
|
|
71
|
-
if (
|
|
99
|
+
const delayReload = () => {
|
|
100
|
+
// 取消之前的延迟加载
|
|
101
|
+
if (interval) {
|
|
72
102
|
clearInterval(interval);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// 取消当前正在进行的加载
|
|
106
|
+
if (loadingController) {
|
|
107
|
+
loadingController.abort();
|
|
108
|
+
loadingController = null;
|
|
109
|
+
loading = false;
|
|
110
|
+
isBusy = false;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// 重置状态
|
|
114
|
+
options = [];
|
|
115
|
+
hasMore = false;
|
|
116
|
+
|
|
117
|
+
// 设置新的延迟加载
|
|
118
|
+
idleTime = 0;
|
|
119
|
+
interval = setInterval(() => {
|
|
120
|
+
idleTime += 100;
|
|
121
|
+
if (idleTime >= 500) {
|
|
122
|
+
clearInterval(interval);
|
|
123
|
+
lazyLoad(text, 1, false);
|
|
77
124
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
125
|
+
}, 100);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const loadMore = () => {
|
|
129
|
+
if (hasMore && !isBusy) {
|
|
130
|
+
lazyLoad(text, pageNo + 1, true);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const handleScroll = (event: Event) => {
|
|
135
|
+
const target = event.target as HTMLElement;
|
|
136
|
+
const scrollTop = target.scrollTop;
|
|
137
|
+
const scrollHeight = target.scrollHeight;
|
|
138
|
+
const clientHeight = target.clientHeight;
|
|
139
|
+
|
|
140
|
+
console.log('Scroll event:', { scrollTop, scrollHeight, clientHeight, hasMore, isBusy });
|
|
141
|
+
|
|
142
|
+
// 当滚动到距离底部20px以内时,自动加载下一页
|
|
143
|
+
if (scrollTop + clientHeight >= scrollHeight - 20 && hasMore && !isBusy) {
|
|
144
|
+
console.log('Auto loading more...');
|
|
145
|
+
loadMore();
|
|
81
146
|
}
|
|
82
147
|
}
|
|
83
148
|
|
|
84
149
|
const handleItemClick = (data: any) => () => {
|
|
150
|
+
isUserTyping = false;
|
|
85
151
|
value = data[keyField];
|
|
86
152
|
text = data[textField];
|
|
87
153
|
if (value != oldValue) {
|
|
88
|
-
|
|
154
|
+
onchange?.(data);
|
|
89
155
|
}
|
|
90
156
|
editor.focus();
|
|
91
157
|
showPopup = false;
|
|
92
158
|
}
|
|
93
159
|
|
|
94
160
|
let composing: boolean = false;
|
|
161
|
+
let hasFocus: boolean = false;
|
|
162
|
+
let isUserTyping: boolean = false;
|
|
95
163
|
|
|
96
164
|
const handleInput = () => {
|
|
97
|
-
if (composing
|
|
165
|
+
if (!composing) {
|
|
166
|
+
isUserTyping = true;
|
|
98
167
|
text = inputText;
|
|
99
168
|
value = null;
|
|
169
|
+
oninput?.(text);
|
|
100
170
|
handleInputText();
|
|
101
171
|
}
|
|
102
172
|
};
|
|
173
|
+
|
|
103
174
|
const handleCompositionStart = (event: CompositionEvent) => {
|
|
104
175
|
composing = true;
|
|
105
176
|
};
|
|
@@ -108,13 +179,28 @@
|
|
|
108
179
|
composing = false;
|
|
109
180
|
text = inputText;
|
|
110
181
|
value = null;
|
|
182
|
+
oninput?.(text);
|
|
111
183
|
handleInputText();
|
|
112
184
|
};
|
|
113
185
|
|
|
186
|
+
const handleFocus = () => {
|
|
187
|
+
if (!hasFocus) {
|
|
188
|
+
hasFocus = true;
|
|
189
|
+
onfocus?.();
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
const handleBlur = (event: FocusEvent) => {
|
|
194
|
+
if (!showPopup) {
|
|
195
|
+
hasFocus = false;
|
|
196
|
+
onblur?.();
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
|
|
114
200
|
const clean = () => {
|
|
115
201
|
value = null;
|
|
116
202
|
text = '';
|
|
117
|
-
|
|
203
|
+
onchange?.(value);
|
|
118
204
|
showPopup = false;
|
|
119
205
|
editor.focus();
|
|
120
206
|
}
|
|
@@ -123,24 +209,43 @@
|
|
|
123
209
|
|
|
124
210
|
let mh;
|
|
125
211
|
|
|
126
|
-
$: mh = `min-height: 80px;
|
|
212
|
+
$: mh = `min-height: 80px; ${menu$height > 0 ? 'height: ' + menu$height + 'px;' : 'max-height: 300px;'} overflow-y: auto;`;
|
|
127
213
|
|
|
128
|
-
$: showPopup = options && options.length > 0;
|
|
214
|
+
$: showPopup = (options && options.length > 0) || loading;
|
|
129
215
|
|
|
130
|
-
$:
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
216
|
+
$: {
|
|
217
|
+
// 不要在用户正在输入时更新inputText
|
|
218
|
+
if (!isUserTyping) {
|
|
219
|
+
if (value == null) {
|
|
220
|
+
inputText = text;
|
|
221
|
+
} else {
|
|
222
|
+
// 如果已选择值,根据焦点状态显示keyField或textField
|
|
223
|
+
let selectedItem = options.find(op => op[keyField] == value);
|
|
224
|
+
if (selectedItem) {
|
|
225
|
+
inputText = hasFocus ? selectedItem[keyField] : selectedItem[textField];
|
|
226
|
+
} else {
|
|
227
|
+
inputText = hasFocus ? value : text;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
137
230
|
}
|
|
138
231
|
}
|
|
139
232
|
|
|
140
|
-
|
|
233
|
+
|
|
234
|
+
$: if (!showPopup && value == null && !isUserTyping) {
|
|
141
235
|
text = '';
|
|
142
236
|
}
|
|
143
237
|
|
|
238
|
+
// 监听popup关闭,如果是点击外部关闭且之前有焦点,触发blur
|
|
239
|
+
$: if (!showPopup && hasFocus) {
|
|
240
|
+
// 延迟检查,如果input仍然有焦点,说明是选择项目导致的关闭
|
|
241
|
+
setTimeout(() => {
|
|
242
|
+
if (document.activeElement !== editor) {
|
|
243
|
+
hasFocus = false;
|
|
244
|
+
onblur?.();
|
|
245
|
+
}
|
|
246
|
+
}, 50);
|
|
247
|
+
}
|
|
248
|
+
|
|
144
249
|
|
|
145
250
|
</script>
|
|
146
251
|
<!-- 待解决浏览模式显示的问题 -->
|
|
@@ -148,17 +253,18 @@
|
|
|
148
253
|
<CommonPicker {displayMode} {variant} {style} {compact}
|
|
149
254
|
bind:showPopup canClean={value!=null} autoFit {clean} textValue={text} {readonly} {disabled}>
|
|
150
255
|
<input style="width: 100%" bind:this={editor} {placeholder}
|
|
151
|
-
class="text-editor" bind:value={inputText} readonly
|
|
256
|
+
class="text-editor" bind:value={inputText} {readonly}
|
|
152
257
|
on:input={handleInput}
|
|
153
|
-
on:compositionstart={handleCompositionStart} on:compositionend={handleCompositionEnd}
|
|
154
|
-
|
|
258
|
+
on:compositionstart={handleCompositionStart} on:compositionend={handleCompositionEnd}
|
|
259
|
+
on:focus={handleFocus} on:blur={handleBlur}/>
|
|
260
|
+
{#if loading}
|
|
155
261
|
<div style="position: absolute; top: 0px; bottom: 0px; right: 8px">
|
|
156
262
|
<div style="position: relative; top: 50%; transform: translateY(-50%)">
|
|
157
|
-
<img src={
|
|
263
|
+
<img src={loadingGif} alt="loading" width="16" height="16"/>
|
|
158
264
|
</div>
|
|
159
265
|
</div>
|
|
160
266
|
{/if}
|
|
161
|
-
<div class="options-popover" bind:this={scrollElement} style={mh} slot="popup-panel">
|
|
267
|
+
<div class="options-popover" bind:this={scrollElement} style={mh} slot="popup-panel" on:scroll={handleScroll}>
|
|
162
268
|
{#each options as op}
|
|
163
269
|
<div class="option-item" on:click={handleItemClick(op)} aria-hidden="true">
|
|
164
270
|
{#if itemRender != null}
|
|
@@ -170,15 +276,5 @@
|
|
|
170
276
|
{/if}
|
|
171
277
|
</div>
|
|
172
278
|
{/each}
|
|
173
|
-
{#if hasMore}
|
|
174
|
-
<div class="more-indicator-footer" aria-hidden="true" on:click={loadMore}>
|
|
175
|
-
{i18nRes.common.textMore}
|
|
176
|
-
</div>
|
|
177
|
-
{/if}
|
|
178
|
-
{#if isBusy}
|
|
179
|
-
<div class="popover-mask-overlay">
|
|
180
|
-
|
|
181
|
-
</div>
|
|
182
|
-
{/if}
|
|
183
279
|
</div>
|
|
184
280
|
</CommonPicker>
|
|
@@ -28,7 +28,10 @@ declare const InputOptionsSelect: $$__sveltets_2_IsomorphicComponent<{
|
|
|
28
28
|
placeholder?: string;
|
|
29
29
|
displayMode?: DisplayMode;
|
|
30
30
|
itemRender?: any;
|
|
31
|
-
|
|
31
|
+
onchange?: OnChangeHandler<any>;
|
|
32
|
+
oninput?: OnChangeHandler<string>;
|
|
33
|
+
onfocus?: (() => void) | null;
|
|
34
|
+
onblur?: (() => void) | null;
|
|
32
35
|
lazyLoader?: LazyLoader;
|
|
33
36
|
}, {
|
|
34
37
|
[evt: string]: CustomEvent<any>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// forwardAllEvents.ts
|
|
2
|
+
export function forwardAllEvents(node, props, internalHandlers = {}) {
|
|
3
|
+
const removeFns = [];
|
|
4
|
+
Object.keys(props).forEach(key => {
|
|
5
|
+
if (key.startsWith("on") && typeof props[key] === "function") {
|
|
6
|
+
const eventName = key.slice(2).toLowerCase(); // onblur -> blur
|
|
7
|
+
const externalHandler = props[key];
|
|
8
|
+
const internalHandler = internalHandlers[eventName];
|
|
9
|
+
const listener = (e) => {
|
|
10
|
+
// 先执行内部逻辑
|
|
11
|
+
internalHandler?.(e);
|
|
12
|
+
// 再执行外部逻辑
|
|
13
|
+
externalHandler?.(e);
|
|
14
|
+
};
|
|
15
|
+
node.addEventListener(eventName, listener);
|
|
16
|
+
removeFns.push(() => node.removeEventListener(eventName, listener));
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
destroy() {
|
|
21
|
+
removeFns.forEach(fn => fn());
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|