niuma-ui 2.0.3 → 2.0.4
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/CHANGELOG.md +38 -0
- package/dist/components/_shared/src/reka.d.ts +1 -1
- package/dist/components/_shared/src/reka.js +2 -2
- package/dist/components/anchor/index.d.ts +1 -1
- package/dist/components/anchor/src/RsAnchor.css +63 -32
- package/dist/components/anchor/src/RsAnchor.d.ts +29 -2
- package/dist/components/anchor/src/RsAnchor.impl.js +199 -81
- package/dist/components/anchor/src/RsAnchor.js +1 -1
- package/dist/components/anchor/src/anchor-utils.d.ts +36 -4
- package/dist/components/anchor/src/anchor-utils.js +81 -19
- package/dist/components/auto-complete/index.d.ts +2 -0
- package/dist/components/auto-complete/src/RsAutoComplete.css +122 -0
- package/dist/components/auto-complete/src/RsAutoComplete.d.ts +47 -7
- package/dist/components/auto-complete/src/RsAutoComplete.impl.js +180 -72
- package/dist/components/auto-complete/src/RsAutoComplete.js +4 -1
- package/dist/components/auto-complete/src/auto-complete-utils.d.ts +7 -0
- package/dist/components/auto-complete/src/auto-complete-utils.js +17 -0
- package/dist/components/avatar/index.d.ts +1 -0
- package/dist/components/avatar/src/RsAvatar.css +36 -19
- package/dist/components/avatar/src/RsAvatar.d.ts +9 -3
- package/dist/components/avatar/src/RsAvatar.impl.js +57 -33
- package/dist/components/avatar/src/RsAvatar.js +2 -1
- package/dist/components/avatar/src/avatar-utils.d.ts +16 -7
- package/dist/components/avatar/src/avatar-utils.js +41 -3
- package/dist/components/breadcrumb/index.d.ts +1 -1
- package/dist/components/breadcrumb/src/RsBreadcrumb.css +50 -17
- package/dist/components/breadcrumb/src/RsBreadcrumb.d.ts +45 -6
- package/dist/components/breadcrumb/src/RsBreadcrumb.impl.js +111 -12
- package/dist/components/breadcrumb/src/RsBreadcrumb.js +2 -1
- package/dist/components/breadcrumb/src/breadcrumb-utils.d.ts +37 -5
- package/dist/components/breadcrumb/src/breadcrumb-utils.js +70 -9
- package/dist/components/calendar-grid/index.d.ts +2 -0
- package/dist/components/calendar-grid/src/RsCalendarGrid.css +105 -45
- package/dist/components/calendar-grid/src/RsCalendarGrid.d.ts +62 -2
- package/dist/components/calendar-grid/src/RsCalendarGrid.impl.js +265 -94
- package/dist/components/calendar-grid/src/RsCalendarGrid.js +1 -1
- package/dist/components/calendar-grid/src/calendar-grid-utils.d.ts +72 -0
- package/dist/components/calendar-grid/src/calendar-grid-utils.js +122 -0
- package/dist/components/card/index.d.ts +1 -1
- package/dist/components/card/src/RsCard.css +108 -98
- package/dist/components/card/src/RsCard.d.ts +3 -12
- package/dist/components/card/src/RsCard.impl.js +29 -25
- package/dist/components/card/src/RsCard.js +2 -1
- package/dist/components/card/src/card-utils.d.ts +25 -0
- package/dist/components/card/src/card-utils.js +10 -0
- package/dist/components/cascader/index.d.ts +1 -0
- package/dist/components/cascader/src/RsCascader.css +175 -30
- package/dist/components/cascader/src/RsCascader.d.ts +15 -3
- package/dist/components/cascader/src/RsCascader.impl.js +277 -48
- package/dist/components/cascader/src/RsCascader.js +1 -1
- package/dist/components/cascader/src/cascader-utils.d.ts +2 -0
- package/dist/components/cascader/src/cascader-utils.js +8 -1
- package/dist/components/checkbox/index.d.ts +1 -0
- package/dist/components/checkbox/src/RsCheckbox.css +46 -23
- package/dist/components/checkbox/src/RsCheckbox.d.ts +11 -1
- package/dist/components/checkbox/src/RsCheckbox.impl.js +37 -9
- package/dist/components/checkbox/src/RsCheckbox.js +2 -1
- package/dist/components/checkbox/src/checkbox-utils.d.ts +4 -0
- package/dist/components/checkbox/src/checkbox-utils.js +12 -0
- package/dist/components/container/index.d.ts +1 -1
- package/dist/components/container/src/RsContainer.css +11 -11
- package/dist/components/container/src/RsContainer.d.ts +2 -12
- package/dist/components/container/src/RsContainer.impl.js +10 -57
- package/dist/components/container/src/RsContainer.js +1 -1
- package/dist/components/container/src/container-utils.d.ts +23 -0
- package/dist/components/container/src/container-utils.js +51 -0
- package/dist/components/date-picker/index.d.ts +4 -2
- package/dist/components/date-picker/src/RsDatePicker.css +42 -22
- package/dist/components/date-picker/src/RsDatePicker.d.ts +44 -20
- package/dist/components/date-picker/src/RsDatePicker.impl.js +484 -222
- package/dist/components/date-picker/src/RsDatePicker.js +1 -3
- package/dist/components/date-picker/src/RsDateTimePicker.d.ts +33 -6
- package/dist/components/date-picker/src/RsDateTimePicker.impl.js +47 -6
- package/dist/components/date-picker/src/date-picker-utils.d.ts +19 -0
- package/dist/components/date-picker/src/date-picker-utils.js +33 -10
- package/dist/components/dynamic-tags/index.d.ts +1 -1
- package/dist/components/dynamic-tags/src/RsDynamicTags.css +115 -38
- package/dist/components/dynamic-tags/src/RsDynamicTags.d.ts +58 -17
- package/dist/components/dynamic-tags/src/RsDynamicTags.impl.js +269 -106
- package/dist/components/dynamic-tags/src/RsDynamicTags.js +1 -1
- package/dist/components/dynamic-tags/src/dynamic-tags-utils.d.ts +19 -0
- package/dist/components/dynamic-tags/src/dynamic-tags-utils.js +60 -0
- package/dist/components/fieldset/src/RsFieldset.css +71 -41
- package/dist/components/fieldset/src/RsFieldset.d.ts +21 -2
- package/dist/components/fieldset/src/RsFieldset.impl.js +93 -26
- package/dist/components/fieldset/src/RsFieldset.js +1 -1
- package/dist/components/fieldset/src/fieldset-utils.d.ts +4 -0
- package/dist/components/fieldset/src/fieldset-utils.js +9 -1
- package/dist/components/form/index.d.ts +1 -0
- package/dist/components/form/src/RsForm.css +15 -12
- package/dist/components/form/src/RsForm.d.ts +20 -22
- package/dist/components/form/src/RsForm.impl.js +33 -20
- package/dist/components/form/src/RsForm.js +1 -1
- package/dist/components/form/src/form-utils.d.ts +7 -0
- package/dist/components/form/src/form-utils.js +28 -1
- package/dist/components/input/index.d.ts +1 -1
- package/dist/components/input/src/RsInput.css +78 -260
- package/dist/components/input/src/RsInput.d.ts +5 -3
- package/dist/components/input/src/RsInput.impl.js +8 -16
- package/dist/components/input/src/RsInput.js +1 -1
- package/dist/components/input/src/input-utils.d.ts +11 -0
- package/dist/components/input/src/input-utils.js +22 -0
- package/dist/components/input-number/index.d.ts +1 -0
- package/dist/components/input-number/src/RsInputNumber.css +31 -31
- package/dist/components/input-number/src/RsInputNumber.d.ts +15 -13
- package/dist/components/input-number/src/RsInputNumber.impl.js +17 -4
- package/dist/components/input-number/src/RsInputNumber.js +1 -1
- package/dist/components/label/src/RsLabel.css +30 -11
- package/dist/components/label/src/RsLabel.d.ts +18 -1
- package/dist/components/label/src/RsLabel.impl.js +63 -10
- package/dist/components/label/src/RsLabel.js +1 -1
- package/dist/components/label/src/label-utils.d.ts +6 -0
- package/dist/components/label/src/label-utils.js +16 -0
- package/dist/components/link/src/RsLink.d.ts +2 -2
- package/dist/components/loading/src/RsLoading.d.ts +1 -1
- package/dist/components/mentions/index.d.ts +2 -1
- package/dist/components/mentions/src/RsMentions.css +119 -3
- package/dist/components/mentions/src/RsMentions.d.ts +56 -4
- package/dist/components/mentions/src/RsMentions.impl.js +298 -79
- package/dist/components/mentions/src/RsMentions.js +1 -3
- package/dist/components/mentions/src/mentions-utils.d.ts +5 -1
- package/dist/components/mentions/src/mentions-utils.js +28 -9
- package/dist/components/popover/src/RsPopover.d.ts +1 -1
- package/dist/components/radio/index.d.ts +1 -1
- package/dist/components/radio/src/RsRadio.css +7 -6
- package/dist/components/radio/src/RsRadio.d.ts +8 -5
- package/dist/components/radio/src/RsRadio.impl.js +34 -24
- package/dist/components/radio/src/RsRadio.js +2 -1
- package/dist/components/radio/src/RsRadioItem.css +61 -44
- package/dist/components/radio/src/RsRadioItem.d.ts +2 -2
- package/dist/components/radio/src/RsRadioItem.impl.js +53 -20
- package/dist/components/radio/src/RsRadioItem.js +2 -1
- package/dist/components/radio/src/radio-utils.d.ts +12 -1
- package/dist/components/radio/src/radio-utils.js +15 -1
- package/dist/components/scrollbar/src/RsScrollbar.css +71 -24
- package/dist/components/scrollbar/src/RsScrollbar.d.ts +9 -5
- package/dist/components/scrollbar/src/RsScrollbar.impl.js +372 -47
- package/dist/components/scrollbar/src/RsScrollbar.js +2 -1
- package/dist/components/scrollbar/src/scrollbar-utils.d.ts +34 -2
- package/dist/components/scrollbar/src/scrollbar-utils.js +64 -1
- package/dist/components/select/index.d.ts +1 -0
- package/dist/components/select/src/RsSelect.css +54 -42
- package/dist/components/select/src/RsSelect.d.ts +19 -2
- package/dist/components/select/src/RsSelect.impl.js +727 -312
- package/dist/components/select/src/RsSelect.js +1 -1
- package/dist/components/select/src/select-utils.d.ts +4 -2
- package/dist/components/select/src/select-utils.js +8 -3
- package/dist/components/select/src/use-rs-select.d.ts +1 -0
- package/dist/components/select/src/use-rs-select.js +23 -17
- package/dist/components/switch/index.d.ts +2 -1
- package/dist/components/switch/src/RsSwitch.css +36 -18
- package/dist/components/switch/src/RsSwitch.d.ts +18 -5
- package/dist/components/switch/src/RsSwitch.impl.js +61 -29
- package/dist/components/switch/src/RsSwitch.js +2 -1
- package/dist/components/switch/src/switch-utils.d.ts +4 -0
- package/dist/components/switch/src/switch-utils.js +9 -0
- package/dist/components/textarea/src/RsTextarea.css +23 -23
- package/dist/components/textarea/src/RsTextarea.d.ts +6 -12
- package/dist/components/textarea/src/RsTextarea.impl.js +37 -46
- package/dist/components/textarea/src/RsTextarea.js +1 -1
- package/dist/components/textarea/src/textarea-utils.d.ts +27 -0
- package/dist/components/textarea/src/textarea-utils.js +61 -0
- package/dist/components/time-picker/index.d.ts +3 -2
- package/dist/components/time-picker/src/RsTimePicker.css +41 -24
- package/dist/components/time-picker/src/RsTimePicker.d.ts +52 -7
- package/dist/components/time-picker/src/RsTimePicker.impl.js +520 -156
- package/dist/components/time-picker/src/RsTimePicker.js +1 -3
- package/dist/components/time-picker/src/RsTimePickerColumns.css +26 -18
- package/dist/components/time-picker/src/RsTimePickerColumns.d.ts +3 -1
- package/dist/components/time-picker/src/RsTimePickerColumns.impl.js +62 -9
- package/dist/components/time-picker/src/RsTimePickerColumns.js +1 -1
- package/dist/components/time-picker/src/time-picker-utils.d.ts +38 -0
- package/dist/components/time-picker/src/time-picker-utils.js +97 -5
- package/dist/components/toaster/src/RsToaster.d.ts +1 -1
- package/dist/components/tooltip/src/RsTooltip.d.ts +1 -1
- package/dist/components/tree/src/RsTree.d.ts +3 -3
- package/dist/components/tree-select/index.d.ts +2 -0
- package/dist/components/tree-select/src/RsTreeSelect.css +100 -25
- package/dist/components/tree-select/src/RsTreeSelect.d.ts +91 -7
- package/dist/components/tree-select/src/RsTreeSelect.impl.js +464 -79
- package/dist/components/tree-select/src/RsTreeSelect.js +1 -1
- package/dist/components/tree-select/src/tree-select-utils.d.ts +20 -0
- package/dist/components/tree-select/src/tree-select-utils.js +60 -0
- package/dist/components/upload/index.d.ts +2 -1
- package/dist/components/upload/src/RsUpload.css +223 -75
- package/dist/components/upload/src/RsUpload.d.ts +77 -1
- package/dist/components/upload/src/RsUpload.impl.js +404 -90
- package/dist/components/upload/src/RsUpload.js +1 -1
- package/dist/components/upload/src/upload-utils.d.ts +21 -2
- package/dist/components/upload/src/upload-utils.js +139 -9
- package/dist/index.d.ts +21 -11
- package/dist/index.js +6 -0
- package/dist/locale/messages.js +46 -2
- package/dist/styles.css +518 -154
- package/dist/theme/brand.example.css +1 -1
- package/package.json +1 -1
- package/dist/components/breadcrumb/src/RsBreadcrumbItems.d.ts +0 -8
- package/dist/components/breadcrumb/src/RsBreadcrumbItems.impl.js +0 -40
- package/dist/components/breadcrumb/src/RsBreadcrumbItems.js +0 -5
- package/dist/components/date-picker/src/RsDatePicker-1.css +0 -157
- package/dist/components/mentions/src/RsMentions-1.css +0 -29
- package/dist/components/time-picker/src/RsTimePicker-1.css +0 -98
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
|
|
2
|
+
.rs-auto-complete[data-v-a95db999] {
|
|
3
|
+
position: relative;
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
width: 100%;
|
|
7
|
+
max-width: 100%;
|
|
8
|
+
box-sizing: border-box;
|
|
9
|
+
vertical-align: middle;
|
|
10
|
+
color-scheme: inherit;
|
|
11
|
+
}
|
|
12
|
+
.rs-auto-complete__input[data-v-a95db999] {
|
|
13
|
+
box-sizing: border-box;
|
|
14
|
+
width: 100%;
|
|
15
|
+
height: var(--rs-control-height-md);
|
|
16
|
+
padding: 0 var(--rs-space-md);
|
|
17
|
+
border: 1px solid var(--rs-input-border, var(--rs-border));
|
|
18
|
+
border-radius: var(--rs-select-radius, var(--rs-radius-sm));
|
|
19
|
+
background: var(--rs-input-bg);
|
|
20
|
+
color: var(--rs-text);
|
|
21
|
+
font-family: inherit;
|
|
22
|
+
font-size: var(--rs-font-size-sm);
|
|
23
|
+
line-height: var(--rs-line-height-tight);
|
|
24
|
+
outline: none;
|
|
25
|
+
box-shadow: var(--rs-input-shadow, none);
|
|
26
|
+
transition:
|
|
27
|
+
border-color var(--rs-transition-fast),
|
|
28
|
+
box-shadow var(--rs-transition-fast),
|
|
29
|
+
background var(--rs-transition-fast);
|
|
30
|
+
}
|
|
31
|
+
.rs-auto-complete--ssm .rs-auto-complete__input[data-v-a95db999] {
|
|
32
|
+
height: var(--rs-control-height-ssm);
|
|
33
|
+
padding: 0 var(--rs-space-sm);
|
|
34
|
+
font-size: var(--rs-font-size-xs);
|
|
35
|
+
}
|
|
36
|
+
.rs-auto-complete--sm .rs-auto-complete__input[data-v-a95db999] {
|
|
37
|
+
height: var(--rs-control-height-sm);
|
|
38
|
+
padding: 0 var(--rs-space-sm);
|
|
39
|
+
font-size: var(--rs-font-size-xs);
|
|
40
|
+
}
|
|
41
|
+
.rs-auto-complete--lg .rs-auto-complete__input[data-v-a95db999] {
|
|
42
|
+
height: var(--rs-control-height-lg);
|
|
43
|
+
padding: 0 var(--rs-space-lg);
|
|
44
|
+
font-size: var(--rs-font-size-base);
|
|
45
|
+
}
|
|
46
|
+
.rs-auto-complete--clearable .rs-auto-complete__input[data-v-a95db999] {
|
|
47
|
+
padding-inline-end: calc(var(--rs-space-md) + 1.25rem);
|
|
48
|
+
}
|
|
49
|
+
.rs-auto-complete__input[data-v-a95db999]::placeholder {
|
|
50
|
+
color: var(--rs-placeholder);
|
|
51
|
+
}
|
|
52
|
+
.rs-auto-complete__input[data-v-a95db999]:hover:not(:disabled) {
|
|
53
|
+
border-color: var(--rs-input-border-hover, var(--rs-border));
|
|
54
|
+
}
|
|
55
|
+
.rs-auto-complete__input[data-v-a95db999]:focus {
|
|
56
|
+
border-color: var(--rs-focus-border, var(--rs-primary));
|
|
57
|
+
background: var(--rs-input-bg);
|
|
58
|
+
box-shadow:
|
|
59
|
+
var(--rs-input-shadow, none),
|
|
60
|
+
0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
|
|
61
|
+
}
|
|
62
|
+
.rs-auto-complete__input[data-v-a95db999]:disabled {
|
|
63
|
+
opacity: 0.38;
|
|
64
|
+
cursor: not-allowed;
|
|
65
|
+
background: var(--rs-surface-hover);
|
|
66
|
+
}
|
|
67
|
+
.rs-auto-complete__clear[data-v-a95db999] {
|
|
68
|
+
position: absolute;
|
|
69
|
+
top: 50%;
|
|
70
|
+
inset-inline-end: var(--rs-space-sm);
|
|
71
|
+
display: inline-flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
justify-content: center;
|
|
74
|
+
width: 1.25rem;
|
|
75
|
+
height: 1.25rem;
|
|
76
|
+
padding: 0;
|
|
77
|
+
border: 0;
|
|
78
|
+
border-radius: var(--rs-radius-xs);
|
|
79
|
+
background: transparent;
|
|
80
|
+
color: var(--rs-muted);
|
|
81
|
+
transform: translateY(-50%);
|
|
82
|
+
cursor: pointer;
|
|
83
|
+
}
|
|
84
|
+
.rs-auto-complete__clear[data-v-a95db999]:hover {
|
|
85
|
+
color: var(--rs-text);
|
|
86
|
+
background: var(--rs-item-hover);
|
|
87
|
+
}
|
|
88
|
+
.rs-auto-complete__list[data-v-a95db999] {
|
|
89
|
+
appearance: none;
|
|
90
|
+
color-scheme: inherit;
|
|
91
|
+
z-index: calc(var(--rs-z-modal) + 2);
|
|
92
|
+
box-sizing: border-box;
|
|
93
|
+
min-width: 8rem;
|
|
94
|
+
max-width: min(24rem, calc(100vw - 1rem));
|
|
95
|
+
max-height: 16rem;
|
|
96
|
+
margin: 0;
|
|
97
|
+
padding: var(--rs-space-xs);
|
|
98
|
+
overflow: auto;
|
|
99
|
+
border: 1px solid var(--rs-dialog-border, var(--rs-border));
|
|
100
|
+
border-radius: var(--rs-radius);
|
|
101
|
+
background: var(--rs-surface-elevated);
|
|
102
|
+
box-shadow: var(--rs-shadow-lg);
|
|
103
|
+
color: var(--rs-text);
|
|
104
|
+
font: inherit;
|
|
105
|
+
font-size: var(--rs-font-size-sm);
|
|
106
|
+
line-height: var(--rs-line-height-tight);
|
|
107
|
+
outline: none;
|
|
108
|
+
}
|
|
109
|
+
.rs-auto-complete__item[data-v-a95db999] {
|
|
110
|
+
padding: var(--rs-space-sm) var(--rs-space-md);
|
|
111
|
+
border-radius: var(--rs-radius-sm);
|
|
112
|
+
color: var(--rs-text);
|
|
113
|
+
background: transparent;
|
|
114
|
+
}
|
|
115
|
+
.rs-auto-complete__item--active[data-v-a95db999],
|
|
116
|
+
.rs-auto-complete__list option[data-v-a95db999]:checked,
|
|
117
|
+
.rs-auto-complete__list option[data-v-a95db999]:hover:not(:disabled) {
|
|
118
|
+
background: var(--rs-item-hover);
|
|
119
|
+
}
|
|
120
|
+
.rs-auto-complete__list option[data-v-a95db999]:disabled {
|
|
121
|
+
color: var(--rs-muted);
|
|
122
|
+
}
|
|
@@ -1,39 +1,79 @@
|
|
|
1
1
|
import type { RsComponentSize } from '../../../theme/types';
|
|
2
|
-
import { type
|
|
2
|
+
import { type RsAutoCompleteFilterOption, type RsAutoCompleteOption, type RsAutoCompleteOptionInput } from './auto-complete-utils';
|
|
3
|
+
/**
|
|
4
|
+
* RsAutoComplete 模板 ref 请用此类型。
|
|
5
|
+
* 不要写 `InstanceType<typeof RsAutoComplete>`:组件实例类型过深,vue-tsc 会报 Excessive stack depth。
|
|
6
|
+
*/
|
|
7
|
+
export interface RsAutoCompleteExpose {
|
|
8
|
+
focus: () => void;
|
|
9
|
+
blur: () => void;
|
|
10
|
+
}
|
|
11
|
+
/** 模板 ref 实例:expose + 根节点 */
|
|
12
|
+
export type RsAutoCompleteInstance = RsAutoCompleteExpose & {
|
|
13
|
+
$el: HTMLElement;
|
|
14
|
+
};
|
|
15
|
+
export type { RsAutoCompleteFilterOption, RsAutoCompleteOption, RsAutoCompleteOptionInput };
|
|
3
16
|
type __VLS_Props = {
|
|
4
|
-
options?: ReadonlyArray<
|
|
17
|
+
options?: ReadonlyArray<RsAutoCompleteOptionInput>;
|
|
5
18
|
placeholder?: string;
|
|
6
19
|
disabled?: boolean;
|
|
7
20
|
size?: RsComponentSize;
|
|
8
21
|
allowClear?: boolean;
|
|
9
|
-
filterOption?:
|
|
22
|
+
filterOption?: RsAutoCompleteFilterOption | boolean;
|
|
10
23
|
debounce?: number;
|
|
11
24
|
emptyText?: string;
|
|
25
|
+
/** 远程搜索进行中。列表空时显示 loadingText。 */
|
|
26
|
+
loading?: boolean;
|
|
27
|
+
loadingText?: string;
|
|
28
|
+
id?: string;
|
|
29
|
+
name?: string;
|
|
30
|
+
/** 无障碍名称。旁边已有可见 label 时可省略。 */
|
|
31
|
+
ariaLabel?: string;
|
|
12
32
|
};
|
|
13
33
|
type __VLS_ModelProps = {
|
|
14
34
|
modelValue?: string;
|
|
15
35
|
'open'?: boolean;
|
|
16
36
|
};
|
|
17
37
|
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
18
|
-
declare
|
|
38
|
+
declare var __VLS_12: {}, __VLS_14: {
|
|
39
|
+
option: import("../../select").RsSelectOption;
|
|
40
|
+
active: boolean;
|
|
41
|
+
};
|
|
42
|
+
type __VLS_Slots = {} & {
|
|
43
|
+
empty?: (props: typeof __VLS_12) => any;
|
|
44
|
+
} & {
|
|
45
|
+
option?: (props: typeof __VLS_14) => any;
|
|
46
|
+
};
|
|
47
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsAutoCompleteExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
19
48
|
search: (query: string) => any;
|
|
20
49
|
select: (value: string) => any;
|
|
50
|
+
blur: (event: FocusEvent) => any;
|
|
51
|
+
focus: (event: FocusEvent) => any;
|
|
21
52
|
clear: () => any;
|
|
22
53
|
"update:modelValue": (value: string) => any;
|
|
23
54
|
"update:open": (value: boolean) => any;
|
|
24
55
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
25
56
|
onSearch?: ((query: string) => any) | undefined;
|
|
26
57
|
onSelect?: ((value: string) => any) | undefined;
|
|
58
|
+
onBlur?: ((event: FocusEvent) => any) | undefined;
|
|
59
|
+
onFocus?: ((event: FocusEvent) => any) | undefined;
|
|
27
60
|
onClear?: (() => any) | undefined;
|
|
28
61
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
29
62
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
30
63
|
}>, {
|
|
31
64
|
disabled: boolean;
|
|
32
|
-
|
|
65
|
+
loading: boolean;
|
|
66
|
+
allowClear: boolean;
|
|
67
|
+
options: ReadonlyArray<RsAutoCompleteOptionInput>;
|
|
33
68
|
emptyText: string;
|
|
34
|
-
filterOption:
|
|
69
|
+
filterOption: RsAutoCompleteFilterOption | boolean;
|
|
35
70
|
debounce: number;
|
|
36
|
-
allowClear: boolean;
|
|
37
71
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
72
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
38
73
|
declare const _default: typeof __VLS_export;
|
|
39
74
|
export default _default;
|
|
75
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
76
|
+
new (): {
|
|
77
|
+
$slots: S;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
import { RS_COMPONENT_SIZE_ICON_PX } from "../../../theme/types.js";
|
|
1
2
|
import { useRsI18n } from "../../../composables/useRsI18n.js";
|
|
2
3
|
import RsIcon_default from "../../icon/src/RsIcon.js";
|
|
4
|
+
import { useRsFormContext, useRsFormField } from "../../form/src/form-utils.js";
|
|
3
5
|
import { useResolvedRsComponentSize } from "../../_shared/src/resolve-size.js";
|
|
4
|
-
import { filterSelectOptions, splitSelectLabelHighlight } from "../../select/src/select-utils.js";
|
|
5
6
|
import { placeAnchoredPopup, stepEnabledIndex } from "../../_shared/src/overlay-utils.js";
|
|
6
|
-
import {
|
|
7
|
+
import { filterRsAutoCompleteOptions, normalizeRsAutoCompleteOptions } from "./auto-complete-utils.js";
|
|
8
|
+
import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, onUnmounted, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useAttrs, useId, useModel, vModelDynamic, watch, withDirectives, withModifiers } from "vue";
|
|
7
9
|
//#region src/components/auto-complete/src/RsAutoComplete.vue?vue&type=script&setup=true&lang.ts
|
|
8
10
|
var _hoisted_1 = [
|
|
11
|
+
"id",
|
|
12
|
+
"name",
|
|
9
13
|
"placeholder",
|
|
10
14
|
"disabled",
|
|
15
|
+
"aria-label",
|
|
11
16
|
"aria-expanded",
|
|
12
17
|
"aria-controls",
|
|
13
18
|
"aria-activedescendant"
|
|
@@ -15,25 +20,24 @@ var _hoisted_1 = [
|
|
|
15
20
|
var _hoisted_2 = ["aria-label"];
|
|
16
21
|
var _hoisted_3 = [
|
|
17
22
|
"id",
|
|
23
|
+
"size",
|
|
18
24
|
"aria-label",
|
|
19
|
-
"
|
|
25
|
+
"aria-busy",
|
|
26
|
+
"data-rs-theme",
|
|
27
|
+
"data-placement",
|
|
28
|
+
"value"
|
|
20
29
|
];
|
|
21
30
|
var _hoisted_4 = {
|
|
22
31
|
key: 0,
|
|
23
|
-
|
|
24
|
-
|
|
32
|
+
disabled: "",
|
|
33
|
+
value: ""
|
|
25
34
|
};
|
|
26
35
|
var _hoisted_5 = [
|
|
27
36
|
"id",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
37
|
+
"value",
|
|
38
|
+
"disabled",
|
|
39
|
+
"title"
|
|
31
40
|
];
|
|
32
|
-
var _hoisted_6 = { class: "rs-auto-complete__label" };
|
|
33
|
-
var _hoisted_7 = {
|
|
34
|
-
key: 0,
|
|
35
|
-
class: "rs-auto-complete__mark"
|
|
36
|
-
};
|
|
37
41
|
var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
38
42
|
name: "RsAutoComplete",
|
|
39
43
|
inheritAttrs: false,
|
|
@@ -55,7 +59,15 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
|
|
|
55
59
|
default: true
|
|
56
60
|
},
|
|
57
61
|
debounce: { default: 0 },
|
|
58
|
-
emptyText: { default: "" }
|
|
62
|
+
emptyText: { default: "" },
|
|
63
|
+
loading: {
|
|
64
|
+
type: Boolean,
|
|
65
|
+
default: false
|
|
66
|
+
},
|
|
67
|
+
loadingText: {},
|
|
68
|
+
id: {},
|
|
69
|
+
name: {},
|
|
70
|
+
ariaLabel: {}
|
|
59
71
|
}, {
|
|
60
72
|
"modelValue": { default: "" },
|
|
61
73
|
"modelModifiers": {},
|
|
@@ -68,16 +80,22 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
|
|
|
68
80
|
emits: /*@__PURE__*/ mergeModels([
|
|
69
81
|
"search",
|
|
70
82
|
"select",
|
|
71
|
-
"clear"
|
|
83
|
+
"clear",
|
|
84
|
+
"focus",
|
|
85
|
+
"blur"
|
|
72
86
|
], ["update:modelValue", "update:open"]),
|
|
73
|
-
setup(__props, { emit: __emit }) {
|
|
87
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
74
88
|
const model = useModel(__props, "modelValue");
|
|
75
89
|
const openModel = useModel(__props, "open");
|
|
76
90
|
const props = __props;
|
|
77
91
|
const emit = __emit;
|
|
78
92
|
const { t } = useRsI18n();
|
|
93
|
+
const attrs = useAttrs();
|
|
94
|
+
const formContext = useRsFormContext();
|
|
79
95
|
const resolvedSize = useResolvedRsComponentSize(() => props.size);
|
|
80
96
|
const listId = useId();
|
|
97
|
+
const autoId = useId();
|
|
98
|
+
const inputId = computed(() => props.id || autoId);
|
|
81
99
|
const inputRef = ref(null);
|
|
82
100
|
const listRef = ref(null);
|
|
83
101
|
const highlight = ref(0);
|
|
@@ -89,17 +107,43 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
|
|
|
89
107
|
width: 0,
|
|
90
108
|
placement: "bottom"
|
|
91
109
|
});
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
110
|
+
/** 面板挂到 body 后仍跟输入框最近的 data-rs-theme(深色岛 / 混主题页)。 */
|
|
111
|
+
const panelTheme = ref();
|
|
112
|
+
function syncPanelTheme() {
|
|
113
|
+
const el = inputRef.value;
|
|
114
|
+
if (!el) {
|
|
115
|
+
panelTheme.value = void 0;
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const themed = el.closest("[data-rs-theme]");
|
|
119
|
+
panelTheme.value = themed instanceof HTMLElement ? themed.dataset.rsTheme : void 0;
|
|
120
|
+
}
|
|
121
|
+
const resolvedDisabled = computed(() => props.disabled || Boolean(formContext?.disabled.value));
|
|
122
|
+
const iconPx = computed(() => RS_COMPONENT_SIZE_ICON_PX[resolvedSize.value]);
|
|
123
|
+
const normalized = computed(() => normalizeRsAutoCompleteOptions(props.options));
|
|
124
|
+
const suggestions = computed(() => filterRsAutoCompleteOptions(normalized.value, model.value, props.filterOption));
|
|
125
|
+
const suggestionViews = computed(() => suggestions.value.map((option, index) => ({
|
|
126
|
+
option,
|
|
127
|
+
index,
|
|
128
|
+
optionId: `${listId}-${String(option.value)}`
|
|
129
|
+
})));
|
|
130
|
+
const listSize = computed(() => {
|
|
131
|
+
const count = suggestions.value.length;
|
|
132
|
+
if (count === 0) return 2;
|
|
133
|
+
return Math.min(8, Math.max(2, count));
|
|
99
134
|
});
|
|
100
|
-
const open = computed(() => Boolean(openModel.value && !
|
|
135
|
+
const open = computed(() => Boolean(openModel.value && !resolvedDisabled.value && !dismissed.value));
|
|
101
136
|
const activeOption = computed(() => suggestions.value[highlight.value]);
|
|
102
|
-
const
|
|
137
|
+
const selectedValue = computed(() => activeOption.value ? String(activeOption.value.value) : "");
|
|
138
|
+
const activeOptionId = computed(() => {
|
|
139
|
+
if (!open.value || !activeOption.value) return void 0;
|
|
140
|
+
return `${listId}-${String(activeOption.value.value)}`;
|
|
141
|
+
});
|
|
142
|
+
const showClear = computed(() => Boolean(props.allowClear && model.value && !resolvedDisabled.value));
|
|
143
|
+
const listStatusText = computed(() => {
|
|
144
|
+
if (props.loading && !suggestions.value.length) return props.loadingText || t("select.loading");
|
|
145
|
+
return props.emptyText || t("select.empty");
|
|
146
|
+
});
|
|
103
147
|
watch(model, (query) => {
|
|
104
148
|
if (searchTimer.value) clearTimeout(searchTimer.value);
|
|
105
149
|
const wait = props.debounce ?? 0;
|
|
@@ -128,15 +172,35 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
|
|
|
128
172
|
});
|
|
129
173
|
}
|
|
130
174
|
let frame = 0;
|
|
175
|
+
let overlayBound = false;
|
|
131
176
|
function requestPlace() {
|
|
132
|
-
if (frame) return;
|
|
177
|
+
if (typeof window === "undefined" || frame) return;
|
|
133
178
|
frame = window.requestAnimationFrame(() => {
|
|
134
179
|
frame = 0;
|
|
135
180
|
placePopup();
|
|
136
181
|
});
|
|
137
182
|
}
|
|
183
|
+
function onWindowChange() {
|
|
184
|
+
if (open.value) requestPlace();
|
|
185
|
+
}
|
|
186
|
+
function attachOverlay() {
|
|
187
|
+
if (overlayBound || typeof window === "undefined") return;
|
|
188
|
+
overlayBound = true;
|
|
189
|
+
window.addEventListener("resize", onWindowChange);
|
|
190
|
+
window.addEventListener("scroll", onWindowChange, true);
|
|
191
|
+
}
|
|
192
|
+
function detachOverlay() {
|
|
193
|
+
if (frame && typeof window !== "undefined") {
|
|
194
|
+
window.cancelAnimationFrame(frame);
|
|
195
|
+
frame = 0;
|
|
196
|
+
}
|
|
197
|
+
if (!overlayBound || typeof window === "undefined") return;
|
|
198
|
+
overlayBound = false;
|
|
199
|
+
window.removeEventListener("resize", onWindowChange);
|
|
200
|
+
window.removeEventListener("scroll", onWindowChange, true);
|
|
201
|
+
}
|
|
138
202
|
function showList() {
|
|
139
|
-
if (
|
|
203
|
+
if (resolvedDisabled.value) return;
|
|
140
204
|
dismissed.value = false;
|
|
141
205
|
openModel.value = true;
|
|
142
206
|
requestPlace();
|
|
@@ -152,6 +216,11 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
|
|
|
152
216
|
hideList();
|
|
153
217
|
nextTick(() => inputRef.value?.focus());
|
|
154
218
|
}
|
|
219
|
+
function onNativeSelect(event) {
|
|
220
|
+
const value = event.target.value;
|
|
221
|
+
const option = suggestions.value.find((item) => String(item.value) === value);
|
|
222
|
+
if (option) onPick(option);
|
|
223
|
+
}
|
|
155
224
|
function onClear() {
|
|
156
225
|
model.value = "";
|
|
157
226
|
emit("clear");
|
|
@@ -202,48 +271,84 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
|
|
|
202
271
|
function onInput() {
|
|
203
272
|
showList();
|
|
204
273
|
}
|
|
205
|
-
function onFocus() {
|
|
274
|
+
function onFocus(event) {
|
|
275
|
+
emit("focus", event);
|
|
206
276
|
showList();
|
|
207
277
|
}
|
|
208
|
-
|
|
209
|
-
|
|
278
|
+
let blurTimer = 0;
|
|
279
|
+
function onBlur(event) {
|
|
280
|
+
emit("blur", event);
|
|
281
|
+
if (blurTimer) window.clearTimeout(blurTimer);
|
|
282
|
+
blurTimer = window.setTimeout(() => {
|
|
283
|
+
blurTimer = 0;
|
|
210
284
|
if (document.activeElement === inputRef.value) return;
|
|
211
285
|
hideList();
|
|
212
286
|
}, 0);
|
|
213
287
|
}
|
|
288
|
+
function scrollActiveIntoView() {
|
|
289
|
+
if (!open.value || !activeOptionId.value) return;
|
|
290
|
+
document.getElementById(activeOptionId.value)?.scrollIntoView({ block: "nearest" });
|
|
291
|
+
}
|
|
214
292
|
watch(suggestions, (list) => {
|
|
215
293
|
highlight.value = list.findIndex((item) => !item.disabled);
|
|
216
294
|
if (highlight.value < 0) highlight.value = 0;
|
|
217
|
-
requestPlace();
|
|
295
|
+
if (open.value) requestPlace();
|
|
296
|
+
});
|
|
297
|
+
watch(highlight, () => {
|
|
298
|
+
nextTick(scrollActiveIntoView);
|
|
218
299
|
});
|
|
219
300
|
watch(open, (isOpen) => {
|
|
220
|
-
if (isOpen)
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
301
|
+
if (isOpen) {
|
|
302
|
+
attachOverlay();
|
|
303
|
+
nextTick(() => {
|
|
304
|
+
syncPanelTheme();
|
|
305
|
+
requestPlace();
|
|
306
|
+
});
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
detachOverlay();
|
|
310
|
+
});
|
|
311
|
+
function setFieldValue(value) {
|
|
312
|
+
model.value = value == null ? "" : String(value);
|
|
224
313
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
314
|
+
useRsFormField(() => ({
|
|
315
|
+
get name() {
|
|
316
|
+
return props.name;
|
|
317
|
+
},
|
|
318
|
+
getValue: () => model.value,
|
|
319
|
+
setValue: setFieldValue
|
|
320
|
+
}));
|
|
321
|
+
function focus() {
|
|
322
|
+
inputRef.value?.focus();
|
|
323
|
+
}
|
|
324
|
+
function blur() {
|
|
325
|
+
inputRef.value?.blur();
|
|
326
|
+
}
|
|
327
|
+
__expose({
|
|
328
|
+
focus,
|
|
329
|
+
blur
|
|
228
330
|
});
|
|
229
331
|
onUnmounted(() => {
|
|
230
|
-
|
|
332
|
+
detachOverlay();
|
|
231
333
|
if (searchTimer.value) clearTimeout(searchTimer.value);
|
|
232
|
-
window.
|
|
233
|
-
window.removeEventListener("scroll", onWindowChange, true);
|
|
334
|
+
if (blurTimer) window.clearTimeout(blurTimer);
|
|
234
335
|
});
|
|
235
|
-
function parts(label) {
|
|
236
|
-
return splitSelectLabelHighlight(label, model.value);
|
|
237
|
-
}
|
|
238
336
|
return (_ctx, _cache) => {
|
|
239
|
-
return openBlock(), createElementBlock("div", { class: normalizeClass(["rs-auto-complete", [`rs-auto-complete--${unref(resolvedSize)}`, {
|
|
240
|
-
|
|
337
|
+
return openBlock(), createElementBlock("div", { class: normalizeClass(["rs-auto-complete", [`rs-auto-complete--${unref(resolvedSize)}`, {
|
|
338
|
+
"rs-auto-complete--clearable": showClear.value,
|
|
339
|
+
"rs-auto-complete--disabled": resolvedDisabled.value
|
|
340
|
+
}]]) }, [
|
|
341
|
+
withDirectives(createElementVNode("input", mergeProps({
|
|
342
|
+
id: inputId.value,
|
|
241
343
|
ref_key: "inputRef",
|
|
242
|
-
ref: inputRef
|
|
344
|
+
ref: inputRef
|
|
345
|
+
}, unref(attrs), {
|
|
243
346
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
|
|
244
347
|
class: "rs-auto-complete__input",
|
|
245
|
-
|
|
246
|
-
|
|
348
|
+
name: __props.name,
|
|
349
|
+
placeholder: __props.placeholder ?? unref(t)("autocomplete.placeholder"),
|
|
350
|
+
disabled: resolvedDisabled.value,
|
|
351
|
+
"aria-label": __props.ariaLabel,
|
|
247
352
|
autocomplete: "off",
|
|
248
353
|
role: "combobox",
|
|
249
354
|
"aria-autocomplete": "list",
|
|
@@ -255,8 +360,8 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
|
|
|
255
360
|
onInput,
|
|
256
361
|
onFocus,
|
|
257
362
|
onBlur
|
|
258
|
-
}, null,
|
|
259
|
-
|
|
363
|
+
}), null, 16, _hoisted_1), [[vModelDynamic, model.value]]),
|
|
364
|
+
showClear.value ? (openBlock(), createElementBlock("button", {
|
|
260
365
|
key: 0,
|
|
261
366
|
type: "button",
|
|
262
367
|
class: "rs-auto-complete__clear",
|
|
@@ -265,39 +370,42 @@ var RsAutoComplete_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
|
|
|
265
370
|
onClick: onClear
|
|
266
371
|
}, [createVNode(RsIcon_default, {
|
|
267
372
|
name: "x",
|
|
268
|
-
size:
|
|
269
|
-
})], 40, _hoisted_2)) : createCommentVNode("", true),
|
|
270
|
-
(openBlock(), createBlock(Teleport, { to: "body" }, [open.value ? (openBlock(), createElementBlock("
|
|
373
|
+
size: iconPx.value
|
|
374
|
+
}, null, 8, ["size"])], 40, _hoisted_2)) : createCommentVNode("", true),
|
|
375
|
+
(openBlock(), createBlock(Teleport, { to: "body" }, [open.value ? (openBlock(), createElementBlock("select", {
|
|
271
376
|
key: 0,
|
|
272
377
|
id: unref(listId),
|
|
273
378
|
ref_key: "listRef",
|
|
274
379
|
ref: listRef,
|
|
275
380
|
class: "rs-auto-complete__list",
|
|
276
|
-
|
|
381
|
+
size: listSize.value,
|
|
382
|
+
tabindex: "-1",
|
|
277
383
|
"aria-label": unref(t)("autocomplete.suggestions"),
|
|
384
|
+
"aria-busy": __props.loading ? "true" : void 0,
|
|
385
|
+
"data-rs-theme": panelTheme.value,
|
|
278
386
|
"data-placement": popup.value.placement,
|
|
387
|
+
value: selectedValue.value,
|
|
279
388
|
style: normalizeStyle({
|
|
280
389
|
position: "fixed",
|
|
281
390
|
top: `${popup.value.top}px`,
|
|
282
391
|
left: `${popup.value.left}px`,
|
|
283
392
|
width: `${popup.value.width}px`
|
|
284
|
-
})
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}), 128))], 12, _hoisted_3)) : createCommentVNode("", true)]))
|
|
393
|
+
}),
|
|
394
|
+
onMousedown: _cache[2] || (_cache[2] = withModifiers(() => {}, ["prevent"])),
|
|
395
|
+
onChange: onNativeSelect
|
|
396
|
+
}, [!suggestions.value.length ? (openBlock(), createElementBlock("option", _hoisted_4, [renderSlot(_ctx.$slots, "empty", {}, () => [createTextVNode(toDisplayString(listStatusText.value), 1)], true)])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(suggestionViews.value, (row) => {
|
|
397
|
+
return openBlock(), createElementBlock("option", {
|
|
398
|
+
id: row.optionId,
|
|
399
|
+
key: String(row.option.value),
|
|
400
|
+
class: normalizeClass(["rs-auto-complete__item", { "rs-auto-complete__item--active": row.index === highlight.value }]),
|
|
401
|
+
value: String(row.option.value),
|
|
402
|
+
disabled: row.option.disabled,
|
|
403
|
+
title: row.option.title
|
|
404
|
+
}, [renderSlot(_ctx.$slots, "option", {
|
|
405
|
+
option: row.option,
|
|
406
|
+
active: row.index === highlight.value
|
|
407
|
+
}, () => [createTextVNode(toDisplayString(row.option.label), 1)], true)], 10, _hoisted_5);
|
|
408
|
+
}), 128))], 44, _hoisted_3)) : createCommentVNode("", true)]))
|
|
301
409
|
], 2);
|
|
302
410
|
};
|
|
303
411
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import './RsAutoComplete.css'
|
|
2
|
+
import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
|
|
1
3
|
import RsAutoComplete_vue_vue_type_script_setup_true_lang_default from "./RsAutoComplete.impl.js";
|
|
4
|
+
|
|
2
5
|
//#region src/components/auto-complete/src/RsAutoComplete.vue
|
|
3
|
-
var RsAutoComplete_default = RsAutoComplete_vue_vue_type_script_setup_true_lang_default;
|
|
6
|
+
var RsAutoComplete_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsAutoComplete_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-a95db999"]]);
|
|
4
7
|
//#endregion
|
|
5
8
|
export { RsAutoComplete_default as default };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type RsSelectFilterOption, type RsSelectOption } from '../../select/src/select-utils';
|
|
2
|
+
export type RsAutoCompleteOption = RsSelectOption;
|
|
3
|
+
export type RsAutoCompleteFilterOption = RsSelectFilterOption;
|
|
4
|
+
export type RsAutoCompleteOptionInput = string | RsSelectOption;
|
|
5
|
+
export declare function normalizeRsAutoCompleteOptions(options: ReadonlyArray<RsAutoCompleteOptionInput> | undefined): RsAutoCompleteOption[];
|
|
6
|
+
/** filterOption === false 时不过滤,交给远程 @search。 */
|
|
7
|
+
export declare function filterRsAutoCompleteOptions(options: RsAutoCompleteOption[], query: string, filterOption?: RsAutoCompleteFilterOption | boolean): RsAutoCompleteOption[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { filterSelectOptions } from "../../select/src/select-utils.js";
|
|
2
|
+
//#region src/components/auto-complete/src/auto-complete-utils.ts
|
|
3
|
+
function normalizeRsAutoCompleteOptions(options) {
|
|
4
|
+
if (!options?.length) return [];
|
|
5
|
+
return options.map((item) => typeof item === "string" ? {
|
|
6
|
+
label: item,
|
|
7
|
+
value: item
|
|
8
|
+
} : item);
|
|
9
|
+
}
|
|
10
|
+
var containsIgnoreCase = (text, query) => text.toLowerCase().includes(query.toLowerCase());
|
|
11
|
+
/** filterOption === false 时不过滤,交给远程 @search。 */
|
|
12
|
+
function filterRsAutoCompleteOptions(options, query, filterOption) {
|
|
13
|
+
if (filterOption === false) return options;
|
|
14
|
+
return filterSelectOptions(options, query, containsIgnoreCase, filterOption);
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { filterRsAutoCompleteOptions, normalizeRsAutoCompleteOptions };
|