@v-c/select 0.0.1

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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/dist/BaseSelect/Polite.cjs +37 -0
  3. package/dist/BaseSelect/Polite.d.ts +7 -0
  4. package/dist/BaseSelect/Polite.js +34 -0
  5. package/dist/BaseSelect/index.cjs +763 -0
  6. package/dist/BaseSelect/index.d.ts +133 -0
  7. package/dist/BaseSelect/index.js +759 -0
  8. package/dist/OptGroup.cjs +5 -0
  9. package/dist/OptGroup.d.ts +6 -0
  10. package/dist/OptGroup.js +4 -0
  11. package/dist/Option.cjs +5 -0
  12. package/dist/Option.d.ts +8 -0
  13. package/dist/Option.js +4 -0
  14. package/dist/OptionList.cjs +255 -0
  15. package/dist/OptionList.d.ts +17 -0
  16. package/dist/OptionList.js +249 -0
  17. package/dist/Select.cjs +833 -0
  18. package/dist/Select.d.ts +96 -0
  19. package/dist/Select.js +828 -0
  20. package/dist/SelectContext.cjs +11 -0
  21. package/dist/SelectContext.d.ts +32 -0
  22. package/dist/SelectContext.js +9 -0
  23. package/dist/SelectInput/Affix.cjs +16 -0
  24. package/dist/SelectInput/Affix.d.ts +2 -0
  25. package/dist/SelectInput/Affix.js +13 -0
  26. package/dist/SelectInput/Content/MultipleContent.cjs +142 -0
  27. package/dist/SelectInput/Content/MultipleContent.d.ts +3 -0
  28. package/dist/SelectInput/Content/MultipleContent.js +138 -0
  29. package/dist/SelectInput/Content/Placeholder.cjs +33 -0
  30. package/dist/SelectInput/Content/Placeholder.d.ts +5 -0
  31. package/dist/SelectInput/Content/Placeholder.js +30 -0
  32. package/dist/SelectInput/Content/SingleContent.cjs +80 -0
  33. package/dist/SelectInput/Content/SingleContent.d.ts +3 -0
  34. package/dist/SelectInput/Content/SingleContent.js +77 -0
  35. package/dist/SelectInput/Content/index.cjs +40 -0
  36. package/dist/SelectInput/Content/index.d.ts +6 -0
  37. package/dist/SelectInput/Content/index.js +36 -0
  38. package/dist/SelectInput/Input.cjs +176 -0
  39. package/dist/SelectInput/Input.d.ts +22 -0
  40. package/dist/SelectInput/Input.js +173 -0
  41. package/dist/SelectInput/context.cjs +11 -0
  42. package/dist/SelectInput/context.d.ts +5 -0
  43. package/dist/SelectInput/context.js +9 -0
  44. package/dist/SelectInput/index.cjs +330 -0
  45. package/dist/SelectInput/index.d.ts +44 -0
  46. package/dist/SelectInput/index.js +325 -0
  47. package/dist/SelectTrigger.cjs +189 -0
  48. package/dist/SelectTrigger.d.ts +26 -0
  49. package/dist/SelectTrigger.js +185 -0
  50. package/dist/TransBtn.cjs +69 -0
  51. package/dist/TransBtn.d.ts +22 -0
  52. package/dist/TransBtn.js +66 -0
  53. package/dist/_virtual/rolldown_runtime.cjs +21 -0
  54. package/dist/hooks/index.cjs +23 -0
  55. package/dist/hooks/index.d.ts +17 -0
  56. package/dist/hooks/index.js +12 -0
  57. package/dist/hooks/useAllowClear.cjs +17 -0
  58. package/dist/hooks/useAllowClear.d.ts +9 -0
  59. package/dist/hooks/useAllowClear.js +16 -0
  60. package/dist/hooks/useBaseProps.cjs +12 -0
  61. package/dist/hooks/useBaseProps.d.ts +10 -0
  62. package/dist/hooks/useBaseProps.js +9 -0
  63. package/dist/hooks/useCache.cjs +36 -0
  64. package/dist/hooks/useCache.d.ts +7 -0
  65. package/dist/hooks/useCache.js +34 -0
  66. package/dist/hooks/useComponents.cjs +15 -0
  67. package/dist/hooks/useComponents.d.ts +8 -0
  68. package/dist/hooks/useComponents.js +13 -0
  69. package/dist/hooks/useFilterOptions.cjs +39 -0
  70. package/dist/hooks/useFilterOptions.d.ts +3 -0
  71. package/dist/hooks/useFilterOptions.js +37 -0
  72. package/dist/hooks/useLock.cjs +26 -0
  73. package/dist/hooks/useLock.d.ts +1 -0
  74. package/dist/hooks/useLock.js +24 -0
  75. package/dist/hooks/useOpen.cjs +58 -0
  76. package/dist/hooks/useOpen.d.ts +19 -0
  77. package/dist/hooks/useOpen.js +56 -0
  78. package/dist/hooks/useOptions.cjs +38 -0
  79. package/dist/hooks/useOptions.d.ts +13 -0
  80. package/dist/hooks/useOptions.js +36 -0
  81. package/dist/hooks/useRefFunc.cjs +12 -0
  82. package/dist/hooks/useRefFunc.d.ts +6 -0
  83. package/dist/hooks/useRefFunc.js +10 -0
  84. package/dist/hooks/useSearchConfig.cjs +21 -0
  85. package/dist/hooks/useSearchConfig.d.ts +11 -0
  86. package/dist/hooks/useSearchConfig.js +19 -0
  87. package/dist/hooks/useSelectTriggerControl.cjs +18 -0
  88. package/dist/hooks/useSelectTriggerControl.d.ts +2 -0
  89. package/dist/hooks/useSelectTriggerControl.js +16 -0
  90. package/dist/index.cjs +16 -0
  91. package/dist/index.d.ts +10 -0
  92. package/dist/index.js +8 -0
  93. package/dist/interface.cjs +0 -0
  94. package/dist/interface.d.ts +23 -0
  95. package/dist/interface.js +0 -0
  96. package/dist/utils/commonUtil.cjs +37 -0
  97. package/dist/utils/commonUtil.d.ts +12 -0
  98. package/dist/utils/commonUtil.js +30 -0
  99. package/dist/utils/keyUtil.cjs +36 -0
  100. package/dist/utils/keyUtil.d.ts +2 -0
  101. package/dist/utils/keyUtil.js +34 -0
  102. package/dist/utils/legacyUtil.cjs +32 -0
  103. package/dist/utils/legacyUtil.d.ts +3 -0
  104. package/dist/utils/legacyUtil.js +31 -0
  105. package/dist/utils/platformUtil.cjs +5 -0
  106. package/dist/utils/platformUtil.d.ts +1 -0
  107. package/dist/utils/platformUtil.js +5 -0
  108. package/dist/utils/valueUtil.cjs +79 -0
  109. package/dist/utils/valueUtil.d.ts +18 -0
  110. package/dist/utils/valueUtil.js +75 -0
  111. package/package.json +43 -0
@@ -0,0 +1,833 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ const require_rolldown_runtime = require("./_virtual/rolldown_runtime.cjs");
3
+ const require_SelectContext = require("./SelectContext.cjs");
4
+ const require_valueUtil = require("./utils/valueUtil.cjs");
5
+ const require_OptionList = require("./OptionList.cjs");
6
+ const require_commonUtil = require("./utils/commonUtil.cjs");
7
+ const require_index = require("./BaseSelect/index.cjs");
8
+ const require_useCache = require("./hooks/useCache.cjs");
9
+ const require_useFilterOptions = require("./hooks/useFilterOptions.cjs");
10
+ const require_useOptions = require("./hooks/useOptions.cjs");
11
+ const require_useRefFunc = require("./hooks/useRefFunc.cjs");
12
+ const require_useSearchConfig = require("./hooks/useSearchConfig.cjs");
13
+ const require_legacyUtil = require("./utils/legacyUtil.cjs");
14
+ let vue = require("vue");
15
+ let __v_c_util_dist_hooks_useId = require("@v-c/util/dist/hooks/useId");
16
+ __v_c_util_dist_hooks_useId = require_rolldown_runtime.__toESM(__v_c_util_dist_hooks_useId);
17
+ let __v_c_util_dist_omit = require("@v-c/util/dist/omit");
18
+ __v_c_util_dist_omit = require_rolldown_runtime.__toESM(__v_c_util_dist_omit);
19
+ let __v_c_util_dist_props_util = require("@v-c/util/dist/props-util");
20
+ var OMIT_DOM_PROPS = ["inputValue"];
21
+ var omitKeyList = [
22
+ "id",
23
+ "mode",
24
+ "prefixCls",
25
+ "backfill",
26
+ "fieldNames",
27
+ "showSearch",
28
+ "searchValue",
29
+ "onSearch",
30
+ "autoClearSearchValue",
31
+ "filterOption",
32
+ "optionFilterProp",
33
+ "filterSort",
34
+ "onSelect",
35
+ "onDeselect",
36
+ "onActive",
37
+ "popupMatchSelectWidth",
38
+ "optionLabelProp",
39
+ "options",
40
+ "optionRender",
41
+ "children",
42
+ "defaultActiveFirstOption",
43
+ "menuItemSelectedIcon",
44
+ "virtual",
45
+ "direction",
46
+ "listHeight",
47
+ "listItemHeight",
48
+ "labelRender",
49
+ "value",
50
+ "defaultValue",
51
+ "labelInValue",
52
+ "onChange",
53
+ "maxCount",
54
+ "classNames",
55
+ "styles"
56
+ ];
57
+ function isRawValue(value) {
58
+ return !value || typeof value !== "object";
59
+ }
60
+ var Select = /* @__PURE__ */ (0, vue.defineComponent)({
61
+ props: /* @__PURE__ */ (0, vue.mergeDefaults)({
62
+ prefixCls: {
63
+ type: String,
64
+ required: false,
65
+ default: void 0
66
+ },
67
+ id: {
68
+ type: String,
69
+ required: false,
70
+ default: void 0
71
+ },
72
+ backfill: {
73
+ type: Boolean,
74
+ required: false,
75
+ default: void 0
76
+ },
77
+ fieldNames: {
78
+ type: Object,
79
+ required: false,
80
+ default: void 0
81
+ },
82
+ onSearch: {
83
+ type: Function,
84
+ required: false,
85
+ default: void 0
86
+ },
87
+ showSearch: {
88
+ type: [Boolean, Object],
89
+ required: false,
90
+ default: void 0
91
+ },
92
+ searchValue: {
93
+ type: String,
94
+ required: false,
95
+ default: void 0
96
+ },
97
+ autoClearSearchValue: {
98
+ type: Boolean,
99
+ required: false,
100
+ default: void 0
101
+ },
102
+ onSelect: {
103
+ type: Function,
104
+ required: false,
105
+ default: void 0
106
+ },
107
+ onDeselect: {
108
+ type: Function,
109
+ required: false,
110
+ default: void 0
111
+ },
112
+ onActive: {
113
+ type: Function,
114
+ required: false,
115
+ default: void 0
116
+ },
117
+ filterOption: {
118
+ type: [Boolean, Function],
119
+ required: false,
120
+ default: void 0
121
+ },
122
+ filterSort: {
123
+ type: Function,
124
+ required: false,
125
+ default: void 0
126
+ },
127
+ optionFilterProp: {
128
+ type: String,
129
+ required: false,
130
+ default: void 0
131
+ },
132
+ optionLabelProp: {
133
+ type: String,
134
+ required: false,
135
+ default: void 0
136
+ },
137
+ options: {
138
+ type: Array,
139
+ required: false,
140
+ default: void 0
141
+ },
142
+ optionRender: {
143
+ type: Function,
144
+ required: false,
145
+ default: void 0
146
+ },
147
+ defaultActiveFirstOption: {
148
+ type: Boolean,
149
+ required: false,
150
+ default: void 0
151
+ },
152
+ virtual: {
153
+ type: Boolean,
154
+ required: false,
155
+ default: void 0
156
+ },
157
+ direction: {
158
+ type: String,
159
+ required: false,
160
+ default: void 0
161
+ },
162
+ listHeight: {
163
+ type: Number,
164
+ required: false,
165
+ default: void 0
166
+ },
167
+ listItemHeight: {
168
+ type: Number,
169
+ required: false,
170
+ default: void 0
171
+ },
172
+ labelRender: {
173
+ type: Function,
174
+ required: false,
175
+ default: void 0
176
+ },
177
+ menuItemSelectedIcon: {
178
+ type: [
179
+ Object,
180
+ Function,
181
+ String,
182
+ Number,
183
+ null,
184
+ Boolean,
185
+ Array
186
+ ],
187
+ required: false,
188
+ default: void 0
189
+ },
190
+ mode: {
191
+ type: String,
192
+ required: false,
193
+ default: void 0
194
+ },
195
+ labelInValue: {
196
+ type: Boolean,
197
+ required: false,
198
+ default: void 0
199
+ },
200
+ value: {
201
+ required: false,
202
+ default: void 0
203
+ },
204
+ defaultValue: {
205
+ required: false,
206
+ default: void 0
207
+ },
208
+ maxCount: {
209
+ type: Number,
210
+ required: false,
211
+ default: void 0
212
+ },
213
+ onChange: {
214
+ type: Function,
215
+ required: false,
216
+ default: void 0
217
+ },
218
+ classNames: {
219
+ type: Object,
220
+ required: false,
221
+ default: void 0
222
+ },
223
+ styles: {
224
+ type: Object,
225
+ required: false,
226
+ default: void 0
227
+ },
228
+ className: {
229
+ type: String,
230
+ required: false,
231
+ default: void 0
232
+ },
233
+ style: {
234
+ type: Object,
235
+ required: false,
236
+ default: void 0
237
+ },
238
+ tagRender: {
239
+ type: Function,
240
+ required: false,
241
+ default: void 0
242
+ },
243
+ autoFocus: {
244
+ type: Boolean,
245
+ required: false,
246
+ default: void 0
247
+ },
248
+ placeholder: {
249
+ type: [
250
+ Object,
251
+ Function,
252
+ String,
253
+ Number,
254
+ null,
255
+ Boolean,
256
+ Array
257
+ ],
258
+ required: false,
259
+ default: void 0
260
+ },
261
+ title: {
262
+ type: String,
263
+ required: false,
264
+ default: void 0
265
+ },
266
+ tabIndex: {
267
+ type: Number,
268
+ required: false,
269
+ default: void 0
270
+ },
271
+ notFoundContent: {
272
+ type: [
273
+ Object,
274
+ Function,
275
+ String,
276
+ Number,
277
+ null,
278
+ Boolean,
279
+ Array
280
+ ],
281
+ required: false,
282
+ default: void 0
283
+ },
284
+ onClear: {
285
+ type: Function,
286
+ required: false,
287
+ default: void 0
288
+ },
289
+ maxLength: {
290
+ type: Number,
291
+ required: false,
292
+ default: void 0
293
+ },
294
+ showScrollBar: {
295
+ type: [Boolean, String],
296
+ required: false,
297
+ default: void 0
298
+ },
299
+ choiceTransitionName: {
300
+ type: String,
301
+ required: false,
302
+ default: void 0
303
+ },
304
+ disabled: {
305
+ type: Boolean,
306
+ required: false,
307
+ default: void 0
308
+ },
309
+ loading: {
310
+ type: Boolean,
311
+ required: false,
312
+ default: void 0
313
+ },
314
+ open: {
315
+ type: Boolean,
316
+ required: false,
317
+ default: void 0
318
+ },
319
+ defaultOpen: {
320
+ type: Boolean,
321
+ required: false,
322
+ default: void 0
323
+ },
324
+ onPopupVisibleChange: {
325
+ type: Function,
326
+ required: false,
327
+ default: void 0
328
+ },
329
+ getInputElement: {
330
+ type: Function,
331
+ required: false,
332
+ default: void 0
333
+ },
334
+ getRawInputElement: {
335
+ type: Function,
336
+ required: false,
337
+ default: void 0
338
+ },
339
+ maxTagTextLength: {
340
+ type: Number,
341
+ required: false,
342
+ default: void 0
343
+ },
344
+ maxTagCount: {
345
+ type: [Number, String],
346
+ required: false,
347
+ default: void 0
348
+ },
349
+ maxTagPlaceholder: {
350
+ type: [
351
+ Object,
352
+ Function,
353
+ String,
354
+ Number,
355
+ null,
356
+ Boolean,
357
+ Array
358
+ ],
359
+ required: false,
360
+ default: void 0
361
+ },
362
+ tokenSeparators: {
363
+ type: Array,
364
+ required: false,
365
+ default: void 0
366
+ },
367
+ allowClear: {
368
+ type: [Boolean, Object],
369
+ required: false,
370
+ default: void 0
371
+ },
372
+ prefix: {
373
+ type: [
374
+ Object,
375
+ Function,
376
+ String,
377
+ Number,
378
+ null,
379
+ Boolean,
380
+ Array
381
+ ],
382
+ required: false,
383
+ default: void 0
384
+ },
385
+ suffixIcon: {
386
+ type: [
387
+ Object,
388
+ Function,
389
+ String,
390
+ Number,
391
+ null,
392
+ Boolean,
393
+ Array
394
+ ],
395
+ required: false,
396
+ default: void 0
397
+ },
398
+ suffix: {
399
+ type: [
400
+ Object,
401
+ Function,
402
+ String,
403
+ Number,
404
+ null,
405
+ Boolean,
406
+ Array
407
+ ],
408
+ required: false,
409
+ default: void 0
410
+ },
411
+ clearIcon: {
412
+ type: [
413
+ Object,
414
+ Function,
415
+ String,
416
+ Number,
417
+ null,
418
+ Boolean,
419
+ Array
420
+ ],
421
+ required: false,
422
+ default: void 0
423
+ },
424
+ removeIcon: {
425
+ type: [
426
+ Object,
427
+ Function,
428
+ String,
429
+ Number,
430
+ null,
431
+ Boolean,
432
+ Array
433
+ ],
434
+ required: false,
435
+ default: void 0
436
+ },
437
+ animation: {
438
+ type: String,
439
+ required: false,
440
+ default: void 0
441
+ },
442
+ transitionName: {
443
+ type: String,
444
+ required: false,
445
+ default: void 0
446
+ },
447
+ popupStyle: {
448
+ type: Object,
449
+ required: false,
450
+ default: void 0
451
+ },
452
+ popupClassName: {
453
+ type: String,
454
+ required: false,
455
+ default: void 0
456
+ },
457
+ popupMatchSelectWidth: {
458
+ type: [Boolean, Number],
459
+ required: false,
460
+ default: void 0
461
+ },
462
+ popupRender: {
463
+ type: Function,
464
+ required: false,
465
+ default: void 0
466
+ },
467
+ popupAlign: {
468
+ type: Object,
469
+ required: false,
470
+ default: void 0
471
+ },
472
+ placement: {
473
+ type: String,
474
+ required: false,
475
+ default: void 0
476
+ },
477
+ builtinPlacements: {
478
+ type: Object,
479
+ required: false,
480
+ default: void 0
481
+ },
482
+ getPopupContainer: {
483
+ type: Function,
484
+ required: false,
485
+ default: void 0
486
+ },
487
+ showAction: {
488
+ type: Array,
489
+ required: false,
490
+ default: void 0
491
+ },
492
+ onBlur: {
493
+ type: Function,
494
+ required: false,
495
+ default: void 0
496
+ },
497
+ onFocus: {
498
+ type: Function,
499
+ required: false,
500
+ default: void 0
501
+ },
502
+ onKeyUp: {
503
+ type: Function,
504
+ required: false,
505
+ default: void 0
506
+ },
507
+ onKeyDown: {
508
+ type: Function,
509
+ required: false,
510
+ default: void 0
511
+ },
512
+ onMouseDown: {
513
+ type: Function,
514
+ required: false,
515
+ default: void 0
516
+ },
517
+ onPopupScroll: {
518
+ type: Function,
519
+ required: false,
520
+ default: void 0
521
+ },
522
+ onInputKeyDown: {
523
+ type: Function,
524
+ required: false,
525
+ default: void 0
526
+ },
527
+ onMouseEnter: {
528
+ type: Function,
529
+ required: false,
530
+ default: void 0
531
+ },
532
+ onMouseLeave: {
533
+ type: Function,
534
+ required: false,
535
+ default: void 0
536
+ },
537
+ onClick: {
538
+ type: Function,
539
+ required: false,
540
+ default: void 0
541
+ },
542
+ components: {
543
+ type: Object,
544
+ required: false,
545
+ default: void 0
546
+ }
547
+ }, {
548
+ prefixCls: "vc-select",
549
+ popupMatchSelectWidth: true,
550
+ listHeight: 200,
551
+ listItemHeight: 20
552
+ }),
553
+ name: "VcSelect",
554
+ inheritAttrs: false,
555
+ setup(props, { attrs, expose, slots }) {
556
+ const baseSelectRef = (0, vue.shallowRef)(null);
557
+ expose({
558
+ focus: () => baseSelectRef.value?.focus(),
559
+ blur: () => baseSelectRef.value?.blur(),
560
+ scrollTo: (arg) => baseSelectRef.value?.scrollTo?.(arg)
561
+ });
562
+ const mergedId = (0, __v_c_util_dist_hooks_useId.default)(props.id);
563
+ const multiple = (0, vue.computed)(() => require_index.isMultiple(props.mode));
564
+ const [mergedShowSearch, searchConfig] = require_useSearchConfig.default((0, vue.toRef)(props, "showSearch"), {
565
+ filterOption: (0, vue.toRef)(props, "filterOption"),
566
+ searchValue: (0, vue.toRef)(props, "searchValue"),
567
+ optionFilterProp: (0, vue.toRef)(props, "optionFilterProp"),
568
+ filterSort: (0, vue.toRef)(props, "filterSort"),
569
+ onSearch: (0, vue.toRef)(props, "onSearch"),
570
+ autoClearSearchValue: (0, vue.toRef)(props, "autoClearSearchValue")
571
+ }, (0, vue.toRef)(props, "mode"));
572
+ const mergedFilterOption = (0, vue.computed)(() => {
573
+ if (searchConfig.value.filterOption === void 0 && props.mode === "combobox") return false;
574
+ return searchConfig.value.filterOption;
575
+ });
576
+ const mergedFieldNames = (0, vue.computed)(() => require_valueUtil.fillFieldNames(props.fieldNames, false));
577
+ const internalSearchValue = (0, vue.shallowRef)(props.searchValue || "");
578
+ (0, vue.watch)(() => props.searchValue, (val) => {
579
+ if (val !== void 0) internalSearchValue.value = val;
580
+ });
581
+ const setSearchValue = (val) => {
582
+ internalSearchValue.value = val;
583
+ };
584
+ const mergedSearchValue = (0, vue.computed)(() => internalSearchValue.value || "");
585
+ const childrenOptionsRef = (0, vue.shallowRef)([]);
586
+ const parsedOptions = require_useOptions.default((0, vue.toRef)(props, "options"), childrenOptionsRef, mergedFieldNames, (0, vue.toRef)(props, "optionFilterProp"), (0, vue.toRef)(props, "optionLabelProp"));
587
+ const valueOptions = (0, vue.computed)(() => parsedOptions.value.valueOptions);
588
+ const labelOptions = (0, vue.computed)(() => parsedOptions.value.labelOptions);
589
+ const mergedOptions = (0, vue.computed)(() => parsedOptions.value.options);
590
+ const convert2LabelValues = (draftValues) => {
591
+ return require_commonUtil.toArray(draftValues).map((val) => {
592
+ let rawValue;
593
+ let rawLabel;
594
+ let rawDisabled;
595
+ let rawTitle;
596
+ if (isRawValue(val)) rawValue = val;
597
+ else {
598
+ rawLabel = val.label;
599
+ rawValue = val.value;
600
+ }
601
+ const option = valueOptions.value.get(rawValue);
602
+ if (option) {
603
+ if (rawLabel === void 0) rawLabel = option?.[props.optionLabelProp || mergedFieldNames.value.label];
604
+ rawDisabled = option?.disabled;
605
+ rawTitle = option?.title;
606
+ }
607
+ return {
608
+ label: rawLabel,
609
+ value: rawValue,
610
+ key: rawValue,
611
+ disabled: rawDisabled,
612
+ title: rawTitle
613
+ };
614
+ });
615
+ };
616
+ const internalValue = (0, vue.shallowRef)(props.defaultValue);
617
+ (0, vue.watch)(() => props.value, (val) => {
618
+ if (val !== void 0) internalValue.value = val;
619
+ }, { immediate: true });
620
+ const setInternalValue = (val) => {
621
+ if (props.value === void 0) internalValue.value = val;
622
+ };
623
+ const [mergedValues, getMixedOption] = require_useCache.default((0, vue.computed)(() => {
624
+ const values = convert2LabelValues(multiple.value && internalValue.value === null ? [] : internalValue.value);
625
+ if (props.mode === "combobox" && require_commonUtil.isComboNoValue(values[0]?.value)) return [];
626
+ return values;
627
+ }), valueOptions);
628
+ const displayValues = (0, vue.computed)(() => {
629
+ if (!props.mode && mergedValues.value.length === 1) {
630
+ const firstValue = mergedValues.value[0];
631
+ if (firstValue.value === null && (firstValue.label === null || firstValue.label === void 0)) return [];
632
+ }
633
+ return mergedValues.value.map((item) => ({
634
+ ...item,
635
+ label: (typeof props.labelRender === "function" ? props.labelRender(item) : item.label) ?? item.value
636
+ }));
637
+ });
638
+ const rawValues = (0, vue.computed)(() => new Set(mergedValues.value.map((val) => val.value)));
639
+ (0, vue.watch)(mergedValues, () => {
640
+ if (props.mode === "combobox") {
641
+ const strValue = mergedValues.value[0]?.value;
642
+ setSearchValue(require_commonUtil.hasValue(strValue) ? String(strValue) : "");
643
+ }
644
+ });
645
+ const createTagOption = require_useRefFunc.default((val, label) => {
646
+ const mergedLabel = label ?? val;
647
+ return {
648
+ [mergedFieldNames.value.value]: val,
649
+ [mergedFieldNames.value.label]: mergedLabel
650
+ };
651
+ });
652
+ const filteredOptions = require_useFilterOptions.default((0, vue.computed)(() => {
653
+ if (props.mode !== "tags") return mergedOptions.value;
654
+ const cloneOptions = [...mergedOptions.value];
655
+ const existOptions = (val) => valueOptions.value.has(val);
656
+ [...mergedValues.value].sort((a, b) => a.value < b.value ? -1 : 1).forEach((item) => {
657
+ const val = item.value;
658
+ if (!existOptions(val)) cloneOptions.push(createTagOption(val, item.label));
659
+ });
660
+ return cloneOptions;
661
+ }), mergedFieldNames, mergedSearchValue, mergedFilterOption, (0, vue.toRef)(props, "optionFilterProp"));
662
+ const filledSearchOptions = (0, vue.computed)(() => {
663
+ if (props.mode !== "tags" || !mergedSearchValue.value || filteredOptions.value.some((item) => item[props.optionFilterProp || "value"] === mergedSearchValue.value)) return filteredOptions.value;
664
+ if (filteredOptions.value.some((item) => item[mergedFieldNames.value.value] === mergedSearchValue.value)) return filteredOptions.value;
665
+ return [createTagOption(mergedSearchValue.value), ...filteredOptions.value];
666
+ });
667
+ const sorter = (inputOptions) => {
668
+ return [...inputOptions].sort((a, b) => searchConfig.value.filterSort(a, b, { searchValue: mergedSearchValue.value })).map((item) => {
669
+ if (Array.isArray(item.options)) return {
670
+ ...item,
671
+ options: item.options.length > 0 ? sorter(item.options) : item.options
672
+ };
673
+ return item;
674
+ });
675
+ };
676
+ const orderedFilteredOptions = (0, vue.computed)(() => {
677
+ if (!searchConfig.value.filterSort) return filledSearchOptions.value;
678
+ return sorter(filledSearchOptions.value);
679
+ });
680
+ const displayOptions = (0, vue.computed)(() => require_valueUtil.flattenOptions(orderedFilteredOptions.value, {
681
+ fieldNames: mergedFieldNames.value,
682
+ childrenAsData: false
683
+ }));
684
+ const triggerChange = (values) => {
685
+ const labeledValues = convert2LabelValues(values);
686
+ setInternalValue(labeledValues);
687
+ if (props.onChange && (labeledValues.length !== mergedValues.value.length || labeledValues.some((newVal, index) => mergedValues.value[index]?.value !== newVal?.value))) {
688
+ const returnValues = props.labelInValue ? labeledValues.map(({ label: l, value: v }) => ({
689
+ label: l,
690
+ value: v
691
+ })) : labeledValues.map((v) => v.value);
692
+ const returnOptions = labeledValues.map((v) => require_valueUtil.injectPropsWithOption(getMixedOption(v.value)));
693
+ props.onChange(multiple.value ? returnValues : returnValues[0], multiple.value ? returnOptions : returnOptions[0]);
694
+ }
695
+ };
696
+ const activeValue = (0, vue.shallowRef)(null);
697
+ const accessibilityIndex = (0, vue.shallowRef)(0);
698
+ const mergedDefaultActiveFirstOption = (0, vue.computed)(() => props.defaultActiveFirstOption !== void 0 ? props.defaultActiveFirstOption : props.mode !== "combobox");
699
+ const onActiveValue = (active, index, { source = "keyboard" } = {}) => {
700
+ accessibilityIndex.value = index;
701
+ if (props.backfill && props.mode === "combobox" && active !== null && source === "keyboard") activeValue.value = String(active);
702
+ props.onActive?.(active);
703
+ };
704
+ const triggerSelect = (val, selected, type) => {
705
+ const getSelectEnt = () => {
706
+ const option = getMixedOption(val);
707
+ return [props.labelInValue ? {
708
+ label: option?.[mergedFieldNames.value.label],
709
+ value: val
710
+ } : val, require_valueUtil.injectPropsWithOption(option)];
711
+ };
712
+ if (selected && props.onSelect) {
713
+ const [wrappedValue, option] = getSelectEnt();
714
+ props.onSelect(wrappedValue, option);
715
+ } else if (!selected && props.onDeselect && type !== "clear") {
716
+ const [wrappedValue, option] = getSelectEnt();
717
+ props.onDeselect(wrappedValue, option);
718
+ }
719
+ };
720
+ const onInternalSelect = require_useRefFunc.default((val, info) => {
721
+ let cloneValues;
722
+ const mergedSelect = multiple.value ? info.selected : true;
723
+ if (mergedSelect) cloneValues = multiple.value ? [...mergedValues.value, val] : [val];
724
+ else cloneValues = mergedValues.value.filter((v) => v.value !== val);
725
+ triggerChange(cloneValues);
726
+ triggerSelect(val, mergedSelect);
727
+ if (props.mode === "combobox") activeValue.value = "";
728
+ else if (!multiple.value || searchConfig.value.autoClearSearchValue) {
729
+ setSearchValue("");
730
+ activeValue.value = "";
731
+ }
732
+ });
733
+ const onDisplayValuesChange = (nextValues, info) => {
734
+ triggerChange(nextValues);
735
+ const { type, values } = info;
736
+ if (type === "remove" || type === "clear") values.forEach((item) => {
737
+ triggerSelect(item.value, false, type);
738
+ });
739
+ };
740
+ const onInternalSearch = (searchText, info) => {
741
+ setSearchValue(searchText);
742
+ activeValue.value = null;
743
+ if (info.source === "submit") {
744
+ const formatted = (searchText || "").trim();
745
+ if (formatted) {
746
+ triggerChange(Array.from(new Set([...rawValues.value, formatted])));
747
+ triggerSelect(formatted, true);
748
+ setSearchValue("");
749
+ }
750
+ return;
751
+ }
752
+ if (info.source !== "blur") {
753
+ if (props.mode === "combobox") triggerChange(searchText);
754
+ searchConfig.value.onSearch?.(searchText);
755
+ }
756
+ };
757
+ const onInternalSearchSplit = (words) => {
758
+ let patchValues = words;
759
+ if (props.mode !== "tags") patchValues = words.map((word) => {
760
+ return labelOptions.value.get(word)?.[mergedFieldNames.value.value];
761
+ }).filter((val) => val !== void 0);
762
+ const newRawValues = Array.from(new Set([...rawValues.value, ...patchValues]));
763
+ triggerChange(newRawValues);
764
+ newRawValues.forEach((newRawValue) => {
765
+ triggerSelect(newRawValue, true);
766
+ });
767
+ };
768
+ require_SelectContext.useSelectProvider((0, vue.computed)(() => {
769
+ const realVirtual = props.virtual !== false && props.popupMatchSelectWidth !== false;
770
+ return {
771
+ ...parsedOptions.value,
772
+ flattenOptions: displayOptions.value,
773
+ onActiveValue,
774
+ defaultActiveFirstOption: mergedDefaultActiveFirstOption.value,
775
+ onSelect: onInternalSelect,
776
+ menuItemSelectedIcon: props.menuItemSelectedIcon,
777
+ rawValues: rawValues.value,
778
+ fieldNames: mergedFieldNames.value,
779
+ virtual: realVirtual,
780
+ direction: props.direction,
781
+ listHeight: props.listHeight,
782
+ listItemHeight: props.listItemHeight,
783
+ childrenAsData: false,
784
+ maxCount: props.maxCount,
785
+ optionRender: props.optionRender,
786
+ classNames: props.classNames,
787
+ styles: props.styles
788
+ };
789
+ }));
790
+ let lastChildrenKey = "";
791
+ return () => {
792
+ if (!props.options || props.options.length === 0) {
793
+ const newChildrenOptions = require_legacyUtil.convertChildrenToData((0, __v_c_util_dist_props_util.filterEmpty)(slots?.default?.() ?? []));
794
+ const newKey = newChildrenOptions.map((o) => `${o.value}`).join(",");
795
+ if (lastChildrenKey !== newKey) {
796
+ lastChildrenKey = newKey;
797
+ childrenOptionsRef.value = newChildrenOptions;
798
+ }
799
+ }
800
+ const restAttrs = { ...attrs };
801
+ const restProps = (0, __v_c_util_dist_omit.default)(props, omitKeyList);
802
+ const { prefixCls, mode, classNames, styles, maxCount, placeholder, direction, popupMatchSelectWidth } = props;
803
+ return (0, vue.createVNode)(require_index.BaseSelect, (0, vue.mergeProps)(restAttrs, restProps, {
804
+ "placeholder": placeholder,
805
+ "id": mergedId,
806
+ "prefixCls": prefixCls,
807
+ "ref": (el) => {
808
+ baseSelectRef.value = el;
809
+ },
810
+ "omitDomProps": OMIT_DOM_PROPS,
811
+ "mode": mode,
812
+ "classNames": classNames,
813
+ "styles": styles,
814
+ "displayValues": displayValues.value,
815
+ "onDisplayValuesChange": onDisplayValuesChange,
816
+ "maxCount": maxCount,
817
+ "direction": direction,
818
+ "showSearch": mergedShowSearch.value,
819
+ "searchValue": mergedSearchValue.value,
820
+ "onSearch": onInternalSearch,
821
+ "autoClearSearchValue": searchConfig.value.autoClearSearchValue,
822
+ "onSearchSplit": onInternalSearchSplit,
823
+ "popupMatchSelectWidth": popupMatchSelectWidth,
824
+ "OptionList": require_OptionList.default,
825
+ "emptyOptions": !displayOptions.value.length,
826
+ "activeValue": activeValue.value || void 0,
827
+ "activeDescendantId": `${mergedId}_list_${accessibilityIndex.value}`
828
+ }), null);
829
+ };
830
+ }
831
+ });
832
+ var Select_default = Select;
833
+ exports.default = Select_default;