@v-c/tree-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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/dist/LegacyContext.cjs +12 -0
  3. package/dist/LegacyContext.d.ts +25 -0
  4. package/dist/LegacyContext.js +9 -0
  5. package/dist/OptionList.cjs +230 -0
  6. package/dist/OptionList.d.ts +2 -0
  7. package/dist/OptionList.js +223 -0
  8. package/dist/TreeNode.cjs +11 -0
  9. package/dist/TreeNode.d.ts +7 -0
  10. package/dist/TreeNode.js +5 -0
  11. package/dist/TreeSelect.cjs +953 -0
  12. package/dist/TreeSelect.d.ts +76 -0
  13. package/dist/TreeSelect.js +947 -0
  14. package/dist/TreeSelectContext.cjs +12 -0
  15. package/dist/TreeSelectContext.d.ts +28 -0
  16. package/dist/TreeSelectContext.js +9 -0
  17. package/dist/_virtual/rolldown_runtime.cjs +21 -0
  18. package/dist/hooks/useCache.cjs +25 -0
  19. package/dist/hooks/useCache.d.ts +6 -0
  20. package/dist/hooks/useCache.js +20 -0
  21. package/dist/hooks/useCheckedKeys.cjs +25 -0
  22. package/dist/hooks/useCheckedKeys.d.ts +4 -0
  23. package/dist/hooks/useCheckedKeys.js +20 -0
  24. package/dist/hooks/useDataEntities.cjs +40 -0
  25. package/dist/hooks/useDataEntities.d.ts +7 -0
  26. package/dist/hooks/useDataEntities.js +35 -0
  27. package/dist/hooks/useFilterTreeData.cjs +28 -0
  28. package/dist/hooks/useFilterTreeData.d.ts +8 -0
  29. package/dist/hooks/useFilterTreeData.js +23 -0
  30. package/dist/hooks/useRefFunc.cjs +15 -0
  31. package/dist/hooks/useRefFunc.d.ts +5 -0
  32. package/dist/hooks/useRefFunc.js +10 -0
  33. package/dist/hooks/useSearchConfig.cjs +23 -0
  34. package/dist/hooks/useSearchConfig.d.ts +6 -0
  35. package/dist/hooks/useSearchConfig.js +18 -0
  36. package/dist/hooks/useTreeData.cjs +43 -0
  37. package/dist/hooks/useTreeData.d.ts +6 -0
  38. package/dist/hooks/useTreeData.js +38 -0
  39. package/dist/index.cjs +18 -0
  40. package/dist/index.d.ts +14 -0
  41. package/dist/index.js +10 -0
  42. package/dist/interface.cjs +1 -0
  43. package/dist/interface.d.ts +57 -0
  44. package/dist/interface.js +0 -0
  45. package/dist/utils/legacyUtil.cjs +85 -0
  46. package/dist/utils/legacyUtil.d.ts +5 -0
  47. package/dist/utils/legacyUtil.js +80 -0
  48. package/dist/utils/strategyUtil.cjs +22 -0
  49. package/dist/utils/strategyUtil.d.ts +7 -0
  50. package/dist/utils/strategyUtil.js +18 -0
  51. package/dist/utils/valueUtil.cjs +36 -0
  52. package/dist/utils/valueUtil.d.ts +11 -0
  53. package/dist/utils/valueUtil.js +31 -0
  54. package/dist/utils/warningPropsUtil.cjs +18 -0
  55. package/dist/utils/warningPropsUtil.d.ts +4 -0
  56. package/dist/utils/warningPropsUtil.js +12 -0
  57. package/package.json +43 -0
@@ -0,0 +1,947 @@
1
+ import { useLegacyProvider } from "./LegacyContext.js";
2
+ import { useTreeSelectProvider } from "./TreeSelectContext.js";
3
+ import { fillFieldNames, isNil, toArray } from "./utils/valueUtil.js";
4
+ import OptionList_default from "./OptionList.js";
5
+ import useCache from "./hooks/useCache.js";
6
+ import useCheckedKeys from "./hooks/useCheckedKeys.js";
7
+ import useDataEntities from "./hooks/useDataEntities.js";
8
+ import { convertChildrenToData, fillAdditionalInfo, fillLegacyProps } from "./utils/legacyUtil.js";
9
+ import useFilterTreeData from "./hooks/useFilterTreeData.js";
10
+ import useRefFunc from "./hooks/useRefFunc.js";
11
+ import useSearchConfig from "./hooks/useSearchConfig.js";
12
+ import useTreeData from "./hooks/useTreeData.js";
13
+ import { SHOW_ALL, SHOW_CHILD, formatStrategyValues } from "./utils/strategyUtil.js";
14
+ import warningProps from "./utils/warningPropsUtil.js";
15
+ import { computed, createVNode, defineComponent, mergeDefaults, mergeProps, shallowRef, watch } from "vue";
16
+ import { BaseSelect } from "@v-c/select";
17
+ import { conductCheck } from "@v-c/tree";
18
+ import { omit, useId, useMergedState } from "@v-c/util";
19
+ import { filterEmpty } from "@v-c/util/dist/props-util";
20
+ function isRawValue(value) {
21
+ return !value || typeof value !== "object";
22
+ }
23
+ var defaults = {
24
+ prefixCls: "vc-tree-select",
25
+ listHeight: 200,
26
+ listItemHeight: 20,
27
+ listItemScrollOffset: 0,
28
+ popupMatchSelectWidth: true
29
+ };
30
+ var omitKeyList = [
31
+ "id",
32
+ "prefixCls",
33
+ "value",
34
+ "defaultValue",
35
+ "onChange",
36
+ "showSearch",
37
+ "searchValue",
38
+ "inputValue",
39
+ "onSearch",
40
+ "autoClearSearchValue",
41
+ "filterTreeNode",
42
+ "treeNodeFilterProp",
43
+ "onSelect",
44
+ "onDeselect",
45
+ "showCheckedStrategy",
46
+ "treeNodeLabelProp",
47
+ "fieldNames",
48
+ "multiple",
49
+ "treeCheckable",
50
+ "treeCheckStrictly",
51
+ "labelInValue",
52
+ "maxCount",
53
+ "treeData",
54
+ "treeDataSimpleMode",
55
+ "treeDefaultExpandAll",
56
+ "treeExpandedKeys",
57
+ "treeDefaultExpandedKeys",
58
+ "onTreeExpand",
59
+ "treeExpandAction",
60
+ "virtual",
61
+ "listHeight",
62
+ "listItemHeight",
63
+ "listItemScrollOffset",
64
+ "onPopupVisibleChange",
65
+ "popupMatchSelectWidth",
66
+ "treeTitleRender",
67
+ "treeLine",
68
+ "treeIcon",
69
+ "showTreeIcon",
70
+ "switcherIcon",
71
+ "treeMotion",
72
+ "treeLoadedKeys",
73
+ "onTreeLoad",
74
+ "loadData",
75
+ "onPopupScroll",
76
+ "classNames",
77
+ "styles"
78
+ ];
79
+ var TreeSelect_default = /* @__PURE__ */ defineComponent({
80
+ props: /* @__PURE__ */ mergeDefaults({
81
+ prefixCls: {
82
+ type: String,
83
+ required: false,
84
+ default: void 0
85
+ },
86
+ id: {
87
+ type: String,
88
+ required: false,
89
+ default: void 0
90
+ },
91
+ classNames: {
92
+ type: Object,
93
+ required: false,
94
+ default: void 0
95
+ },
96
+ styles: {
97
+ type: Object,
98
+ required: false,
99
+ default: void 0
100
+ },
101
+ value: {
102
+ required: false,
103
+ default: void 0
104
+ },
105
+ defaultValue: {
106
+ required: false,
107
+ default: void 0
108
+ },
109
+ onChange: {
110
+ type: Function,
111
+ required: false,
112
+ default: void 0
113
+ },
114
+ showSearch: {
115
+ type: [Boolean, Object],
116
+ required: false,
117
+ default: void 0
118
+ },
119
+ searchValue: {
120
+ type: String,
121
+ required: false,
122
+ default: void 0
123
+ },
124
+ inputValue: {
125
+ type: String,
126
+ required: false,
127
+ default: void 0
128
+ },
129
+ onSearch: {
130
+ type: Function,
131
+ required: false,
132
+ default: void 0
133
+ },
134
+ autoClearSearchValue: {
135
+ type: Boolean,
136
+ required: false,
137
+ default: void 0
138
+ },
139
+ filterTreeNode: {
140
+ type: [Boolean, Function],
141
+ required: false,
142
+ default: void 0
143
+ },
144
+ treeNodeFilterProp: {
145
+ type: String,
146
+ required: false,
147
+ default: void 0
148
+ },
149
+ onSelect: {
150
+ type: Function,
151
+ required: false,
152
+ default: void 0
153
+ },
154
+ onDeselect: {
155
+ type: Function,
156
+ required: false,
157
+ default: void 0
158
+ },
159
+ showCheckedStrategy: {
160
+ required: false,
161
+ default: void 0
162
+ },
163
+ treeNodeLabelProp: {
164
+ type: String,
165
+ required: false,
166
+ default: void 0
167
+ },
168
+ fieldNames: {
169
+ type: Object,
170
+ required: false,
171
+ default: void 0
172
+ },
173
+ multiple: {
174
+ type: Boolean,
175
+ required: false,
176
+ default: void 0
177
+ },
178
+ treeCheckable: {
179
+ type: [
180
+ Boolean,
181
+ Object,
182
+ Function,
183
+ String,
184
+ Number,
185
+ null,
186
+ Array
187
+ ],
188
+ required: false,
189
+ default: void 0
190
+ },
191
+ treeCheckStrictly: {
192
+ type: Boolean,
193
+ required: false,
194
+ default: void 0
195
+ },
196
+ labelInValue: {
197
+ type: Boolean,
198
+ required: false,
199
+ default: void 0
200
+ },
201
+ maxCount: {
202
+ type: Number,
203
+ required: false,
204
+ default: void 0
205
+ },
206
+ treeData: {
207
+ type: Array,
208
+ required: false,
209
+ default: void 0
210
+ },
211
+ treeDataSimpleMode: {
212
+ type: [Boolean, Object],
213
+ required: false,
214
+ default: void 0
215
+ },
216
+ loadData: {
217
+ type: Function,
218
+ required: false,
219
+ default: void 0
220
+ },
221
+ treeLoadedKeys: {
222
+ type: Array,
223
+ required: false,
224
+ default: void 0
225
+ },
226
+ onTreeLoad: {
227
+ type: Function,
228
+ required: false,
229
+ default: void 0
230
+ },
231
+ treeDefaultExpandAll: {
232
+ type: Boolean,
233
+ required: false,
234
+ default: void 0
235
+ },
236
+ treeExpandedKeys: {
237
+ type: Array,
238
+ required: false,
239
+ default: void 0
240
+ },
241
+ treeDefaultExpandedKeys: {
242
+ type: Array,
243
+ required: false,
244
+ default: void 0
245
+ },
246
+ onTreeExpand: {
247
+ type: Function,
248
+ required: false,
249
+ default: void 0
250
+ },
251
+ treeExpandAction: {
252
+ type: [Boolean, String],
253
+ required: false,
254
+ default: void 0
255
+ },
256
+ virtual: {
257
+ type: Boolean,
258
+ required: false,
259
+ default: void 0
260
+ },
261
+ listHeight: {
262
+ type: Number,
263
+ required: false,
264
+ default: void 0
265
+ },
266
+ listItemHeight: {
267
+ type: Number,
268
+ required: false,
269
+ default: void 0
270
+ },
271
+ listItemScrollOffset: {
272
+ type: Number,
273
+ required: false,
274
+ default: void 0
275
+ },
276
+ onPopupVisibleChange: {
277
+ type: Function,
278
+ required: false,
279
+ default: void 0
280
+ },
281
+ treeTitleRender: {
282
+ type: Function,
283
+ required: false,
284
+ default: void 0
285
+ },
286
+ treeLine: {
287
+ type: Boolean,
288
+ required: false,
289
+ default: void 0
290
+ },
291
+ treeIcon: {
292
+ type: [
293
+ Object,
294
+ Function,
295
+ String,
296
+ Number,
297
+ null,
298
+ Boolean,
299
+ Array
300
+ ],
301
+ required: false,
302
+ default: void 0
303
+ },
304
+ showTreeIcon: {
305
+ type: Boolean,
306
+ required: false,
307
+ default: void 0
308
+ },
309
+ switcherIcon: {
310
+ type: [
311
+ Object,
312
+ Function,
313
+ String,
314
+ Number,
315
+ null,
316
+ Boolean,
317
+ Array
318
+ ],
319
+ required: false,
320
+ default: void 0
321
+ },
322
+ treeMotion: {
323
+ required: false,
324
+ default: void 0
325
+ },
326
+ onPopupScroll: {
327
+ type: Function,
328
+ required: false,
329
+ default: void 0
330
+ },
331
+ popupMatchSelectWidth: {
332
+ type: [Boolean, Number],
333
+ required: false,
334
+ default: void 0
335
+ },
336
+ className: {
337
+ type: String,
338
+ required: false,
339
+ default: void 0
340
+ },
341
+ style: {
342
+ type: Object,
343
+ required: false,
344
+ default: void 0
345
+ },
346
+ tagRender: {
347
+ type: Function,
348
+ required: false,
349
+ default: void 0
350
+ },
351
+ direction: {
352
+ type: String,
353
+ required: false,
354
+ default: void 0
355
+ },
356
+ autoFocus: {
357
+ type: Boolean,
358
+ required: false,
359
+ default: void 0
360
+ },
361
+ placeholder: {
362
+ type: [
363
+ Object,
364
+ Function,
365
+ String,
366
+ Number,
367
+ null,
368
+ Boolean,
369
+ Array
370
+ ],
371
+ required: false,
372
+ default: void 0
373
+ },
374
+ title: {
375
+ type: String,
376
+ required: false,
377
+ default: void 0
378
+ },
379
+ tabIndex: {
380
+ type: Number,
381
+ required: false,
382
+ default: void 0
383
+ },
384
+ notFoundContent: {
385
+ type: [
386
+ Object,
387
+ Function,
388
+ String,
389
+ Number,
390
+ null,
391
+ Boolean,
392
+ Array
393
+ ],
394
+ required: false,
395
+ default: void 0
396
+ },
397
+ onClear: {
398
+ type: Function,
399
+ required: false,
400
+ default: void 0
401
+ },
402
+ maxLength: {
403
+ type: Number,
404
+ required: false,
405
+ default: void 0
406
+ },
407
+ showScrollBar: {
408
+ type: [Boolean, String],
409
+ required: false,
410
+ default: void 0
411
+ },
412
+ choiceTransitionName: {
413
+ type: String,
414
+ required: false,
415
+ default: void 0
416
+ },
417
+ disabled: {
418
+ type: Boolean,
419
+ required: false,
420
+ default: void 0
421
+ },
422
+ loading: {
423
+ type: Boolean,
424
+ required: false,
425
+ default: void 0
426
+ },
427
+ open: {
428
+ type: Boolean,
429
+ required: false,
430
+ default: void 0
431
+ },
432
+ defaultOpen: {
433
+ type: Boolean,
434
+ required: false,
435
+ default: void 0
436
+ },
437
+ getInputElement: {
438
+ type: Function,
439
+ required: false,
440
+ default: void 0
441
+ },
442
+ getRawInputElement: {
443
+ type: Function,
444
+ required: false,
445
+ default: void 0
446
+ },
447
+ maxTagTextLength: {
448
+ type: Number,
449
+ required: false,
450
+ default: void 0
451
+ },
452
+ maxTagCount: {
453
+ type: [Number, String],
454
+ required: false,
455
+ default: void 0
456
+ },
457
+ maxTagPlaceholder: {
458
+ type: [
459
+ Object,
460
+ Function,
461
+ String,
462
+ Number,
463
+ null,
464
+ Boolean,
465
+ Array
466
+ ],
467
+ required: false,
468
+ default: void 0
469
+ },
470
+ tokenSeparators: {
471
+ type: Array,
472
+ required: false,
473
+ default: void 0
474
+ },
475
+ allowClear: {
476
+ type: [Boolean, Object],
477
+ required: false,
478
+ default: void 0
479
+ },
480
+ prefix: {
481
+ type: [
482
+ Object,
483
+ Function,
484
+ String,
485
+ Number,
486
+ null,
487
+ Boolean,
488
+ Array
489
+ ],
490
+ required: false,
491
+ default: void 0
492
+ },
493
+ suffixIcon: {
494
+ type: [
495
+ Object,
496
+ Function,
497
+ String,
498
+ Number,
499
+ null,
500
+ Boolean,
501
+ Array
502
+ ],
503
+ required: false,
504
+ default: void 0
505
+ },
506
+ suffix: {
507
+ type: [
508
+ Object,
509
+ Function,
510
+ String,
511
+ Number,
512
+ null,
513
+ Boolean,
514
+ Array
515
+ ],
516
+ required: false,
517
+ default: void 0
518
+ },
519
+ clearIcon: {
520
+ type: [
521
+ Object,
522
+ Function,
523
+ String,
524
+ Number,
525
+ null,
526
+ Boolean,
527
+ Array
528
+ ],
529
+ required: false,
530
+ default: void 0
531
+ },
532
+ removeIcon: {
533
+ type: [
534
+ Object,
535
+ Function,
536
+ String,
537
+ Number,
538
+ null,
539
+ Boolean,
540
+ Array
541
+ ],
542
+ required: false,
543
+ default: void 0
544
+ },
545
+ animation: {
546
+ type: String,
547
+ required: false,
548
+ default: void 0
549
+ },
550
+ transitionName: {
551
+ type: String,
552
+ required: false,
553
+ default: void 0
554
+ },
555
+ popupStyle: {
556
+ type: Object,
557
+ required: false,
558
+ default: void 0
559
+ },
560
+ popupClassName: {
561
+ type: String,
562
+ required: false,
563
+ default: void 0
564
+ },
565
+ popupRender: {
566
+ type: Function,
567
+ required: false,
568
+ default: void 0
569
+ },
570
+ popupAlign: {
571
+ type: Object,
572
+ required: false,
573
+ default: void 0
574
+ },
575
+ placement: {
576
+ type: String,
577
+ required: false,
578
+ default: void 0
579
+ },
580
+ builtinPlacements: {
581
+ type: Object,
582
+ required: false,
583
+ default: void 0
584
+ },
585
+ getPopupContainer: {
586
+ type: Function,
587
+ required: false,
588
+ default: void 0
589
+ },
590
+ showAction: {
591
+ type: Array,
592
+ required: false,
593
+ default: void 0
594
+ },
595
+ onBlur: {
596
+ type: Function,
597
+ required: false,
598
+ default: void 0
599
+ },
600
+ onFocus: {
601
+ type: Function,
602
+ required: false,
603
+ default: void 0
604
+ },
605
+ onKeyUp: {
606
+ type: Function,
607
+ required: false,
608
+ default: void 0
609
+ },
610
+ onKeyDown: {
611
+ type: Function,
612
+ required: false,
613
+ default: void 0
614
+ },
615
+ onMouseDown: {
616
+ type: Function,
617
+ required: false,
618
+ default: void 0
619
+ },
620
+ onInputKeyDown: {
621
+ type: Function,
622
+ required: false,
623
+ default: void 0
624
+ },
625
+ onMouseEnter: {
626
+ type: Function,
627
+ required: false,
628
+ default: void 0
629
+ },
630
+ onMouseLeave: {
631
+ type: Function,
632
+ required: false,
633
+ default: void 0
634
+ },
635
+ onClick: {
636
+ type: Function,
637
+ required: false,
638
+ default: void 0
639
+ },
640
+ components: {
641
+ type: Object,
642
+ required: false,
643
+ default: void 0
644
+ }
645
+ }, defaults),
646
+ name: "TreeSelect",
647
+ inheritAttrs: false,
648
+ setup(props, { attrs, expose, slots }) {
649
+ const baseSelectRef = shallowRef(null);
650
+ expose({
651
+ focus: () => baseSelectRef.value?.focus(),
652
+ blur: () => baseSelectRef.value?.blur(),
653
+ scrollTo: (arg) => baseSelectRef.value?.scrollTo?.(arg)
654
+ });
655
+ const mergedId = useId(props.id);
656
+ const treeConduction = computed(() => !!props.treeCheckable && !props.treeCheckStrictly);
657
+ const mergedCheckable = computed(() => props.treeCheckable || props.treeCheckStrictly);
658
+ const mergedLabelInValue = computed(() => !!props.treeCheckStrictly || !!props.labelInValue);
659
+ const mergedMultiple = computed(() => !!mergedCheckable.value || !!props.multiple);
660
+ const searchProps = computed(() => ({
661
+ searchValue: props.searchValue,
662
+ inputValue: props.inputValue,
663
+ onSearch: props.onSearch,
664
+ autoClearSearchValue: props.autoClearSearchValue,
665
+ filterTreeNode: props.filterTreeNode,
666
+ treeNodeFilterProp: props.treeNodeFilterProp
667
+ }));
668
+ const [mergedShowSearch, searchConfig] = useSearchConfig(computed(() => props.showSearch), searchProps);
669
+ const mergedTreeNodeFilterProp = computed(() => searchConfig.value.treeNodeFilterProp || "value");
670
+ const mergedAutoClearSearchValue = computed(() => searchConfig.value.autoClearSearchValue !== false);
671
+ const internalValue = shallowRef(props?.value ?? props?.defaultValue);
672
+ watch(() => props.value, () => {
673
+ internalValue.value = props?.value;
674
+ });
675
+ const setInternalValue = (val) => {
676
+ internalValue.value = val;
677
+ };
678
+ const mergedShowCheckedStrategy = computed(() => {
679
+ if (!props.treeCheckable) return SHOW_ALL;
680
+ return props.showCheckedStrategy || "SHOW_CHILD";
681
+ });
682
+ if (process.env.NODE_ENV !== "production") warningProps(props);
683
+ const mergedFieldNames = computed(() => fillFieldNames(props.fieldNames));
684
+ const [internalSearchValue, setSearchValue] = useMergedState(() => "", { value: computed(() => searchConfig.value.searchValue) });
685
+ const mergedSearchValue = computed(() => internalSearchValue.value || "");
686
+ const onInternalSearch = (searchText) => {
687
+ setSearchValue(searchText);
688
+ searchConfig.value.onSearch?.(searchText);
689
+ };
690
+ const slotTreeData = shallowRef([]);
691
+ const slotTreeDataSignature = shallowRef("");
692
+ const mergedSourceTreeData = computed(() => {
693
+ if (props.treeData !== void 0) return props.treeData;
694
+ return slotTreeData.value;
695
+ });
696
+ const getTreeDataSignature = (data) => {
697
+ const dig = (list) => {
698
+ return (list || []).map((node) => {
699
+ const key = String(node?.key);
700
+ const children = node?.children;
701
+ return `${key}{${children?.length ? dig(children) : ""}}`;
702
+ }).join("|");
703
+ };
704
+ return dig(data);
705
+ };
706
+ const mergedTreeData = useTreeData(mergedSourceTreeData, computed(() => props.treeDataSimpleMode));
707
+ const { keyEntities, valueEntities } = useDataEntities(mergedTreeData, mergedFieldNames);
708
+ const splitRawValues = (newRawValues) => {
709
+ const missingRawValues = [];
710
+ const existRawValues = [];
711
+ newRawValues.forEach((val) => {
712
+ if (valueEntities.value.has(val)) existRawValues.push(val);
713
+ else missingRawValues.push(val);
714
+ });
715
+ return {
716
+ missingRawValues,
717
+ existRawValues
718
+ };
719
+ };
720
+ const filteredTreeData = useFilterTreeData(mergedTreeData, mergedSearchValue, {
721
+ fieldNames: mergedFieldNames,
722
+ treeNodeFilterProp: mergedTreeNodeFilterProp,
723
+ filterTreeNode: computed(() => searchConfig.value.filterTreeNode)
724
+ });
725
+ const getLabel = (item) => {
726
+ if (!item) return;
727
+ if (props.treeNodeLabelProp) return item[props.treeNodeLabelProp];
728
+ const titleList = mergedFieldNames.value._title;
729
+ for (let i = 0; i < titleList.length; i += 1) {
730
+ const title = item[titleList[i]];
731
+ if (title !== void 0) return title;
732
+ }
733
+ };
734
+ const toLabeledValues = (draftValues) => {
735
+ return toArray(draftValues).map((val) => {
736
+ if (isRawValue(val)) return { value: val };
737
+ return val;
738
+ });
739
+ };
740
+ const renderTreeTitleRender = (node) => {
741
+ let label;
742
+ const labelInfo = props?.treeTitleRender?.(node);
743
+ if (typeof labelInfo === "string" || typeof labelInfo === "number") label = labelInfo;
744
+ else {
745
+ const labelArr = filterEmpty(Array.isArray(labelInfo) ? labelInfo : [labelInfo]);
746
+ if (labelArr.length) label = labelArr.length === 1 ? labelArr[0] : labelArr;
747
+ }
748
+ return label;
749
+ };
750
+ const convert2LabelValues = (draftValues) => {
751
+ return toLabeledValues(draftValues).map((item) => {
752
+ let { label: rawLabel } = item;
753
+ const { value: rawValue, halfChecked: rawHalfChecked } = item;
754
+ let rawDisabled;
755
+ const entity = valueEntities.value.get(rawValue);
756
+ if (entity) {
757
+ rawLabel = props.treeTitleRender ? renderTreeTitleRender(entity.node) : rawLabel ?? getLabel(entity.node);
758
+ rawDisabled = entity.node.disabled;
759
+ } else if (rawLabel === void 0) rawLabel = toLabeledValues(internalValue.value).find((labeledItem) => labeledItem.value === rawValue)?.label;
760
+ return {
761
+ label: rawLabel,
762
+ value: rawValue,
763
+ halfChecked: rawHalfChecked,
764
+ disabled: rawDisabled
765
+ };
766
+ });
767
+ };
768
+ const rawMixedLabeledValues = computed(() => toLabeledValues(internalValue.value === null ? [] : internalValue.value));
769
+ const rawLabeledValues = computed(() => rawMixedLabeledValues.value.filter((item) => !item.halfChecked));
770
+ const rawHalfLabeledValues = computed(() => rawMixedLabeledValues.value.filter((item) => !!item.halfChecked));
771
+ const rawValues = computed(() => rawLabeledValues.value.map((item) => item.value));
772
+ const [rawCheckedValues, rawHalfCheckedValues] = useCheckedKeys(rawLabeledValues, rawHalfLabeledValues, treeConduction, keyEntities);
773
+ const [cachedDisplayValues] = useCache(computed(() => {
774
+ const rawDisplayValues = convert2LabelValues(formatStrategyValues(rawCheckedValues.value, mergedShowCheckedStrategy.value, keyEntities.value, mergedFieldNames.value).map((key) => keyEntities.value[String(key)]?.node?.[mergedFieldNames.value.value] ?? key).map((val) => {
775
+ const targetItem = rawLabeledValues.value.find((item) => item.value === val);
776
+ let label;
777
+ if (props.labelInValue) label = targetItem?.label;
778
+ else label = renderTreeTitleRender(targetItem);
779
+ return {
780
+ value: val,
781
+ label
782
+ };
783
+ }));
784
+ const firstVal = rawDisplayValues[0];
785
+ if (!mergedMultiple.value && firstVal && isNil(firstVal.value) && isNil(firstVal.label)) return [];
786
+ return rawDisplayValues.map((item) => ({
787
+ ...item,
788
+ label: item.label ?? item.value
789
+ }));
790
+ }));
791
+ const mergedMaxCount = computed(() => {
792
+ if (mergedMultiple.value && (mergedShowCheckedStrategy.value === "SHOW_CHILD" || props.treeCheckStrictly || !props.treeCheckable)) return props.maxCount;
793
+ return null;
794
+ });
795
+ const triggerChange = useRefFunc((newRawValues, extra, source) => {
796
+ const formattedKeyList = formatStrategyValues(newRawValues, mergedShowCheckedStrategy.value, keyEntities.value, mergedFieldNames.value);
797
+ if (mergedMaxCount.value && formattedKeyList.length > mergedMaxCount.value) return;
798
+ setInternalValue(convert2LabelValues(newRawValues));
799
+ if (mergedAutoClearSearchValue.value) setSearchValue("");
800
+ if (props.onChange) {
801
+ let eventValues = newRawValues;
802
+ if (treeConduction.value) eventValues = formattedKeyList.map((key) => {
803
+ const entity = valueEntities.value.get(key);
804
+ return entity ? entity.node[mergedFieldNames.value.value] : key;
805
+ });
806
+ const { triggerValue, selected } = extra || {
807
+ triggerValue: void 0,
808
+ selected: void 0
809
+ };
810
+ let returnRawValues = eventValues;
811
+ if (props.treeCheckStrictly) {
812
+ const halfValues = rawHalfLabeledValues.value.filter((item) => !eventValues.includes(item.value));
813
+ returnRawValues = [...returnRawValues, ...halfValues];
814
+ }
815
+ const returnLabeledValues = convert2LabelValues(returnRawValues);
816
+ const additionalInfo = {
817
+ preValue: rawLabeledValues.value,
818
+ triggerValue
819
+ };
820
+ let showPosition = true;
821
+ if (props.treeCheckStrictly || source === "selection" && !selected) showPosition = false;
822
+ fillAdditionalInfo(additionalInfo, triggerValue, newRawValues, mergedTreeData.value, showPosition, mergedFieldNames.value);
823
+ if (mergedCheckable.value) additionalInfo.checked = selected;
824
+ else additionalInfo.selected = selected;
825
+ const returnValues = mergedLabelInValue.value ? returnLabeledValues : returnLabeledValues.map((item) => item.value);
826
+ props.onChange(mergedMultiple.value ? returnValues : returnValues[0], mergedLabelInValue.value ? null : returnLabeledValues.map((item) => item.label), additionalInfo);
827
+ }
828
+ });
829
+ const onOptionSelect = (selectedKey, { selected, source }) => {
830
+ const node = keyEntities.value[String(selectedKey)]?.node;
831
+ const selectedValue = node?.[mergedFieldNames.value.value] ?? selectedKey;
832
+ if (!mergedMultiple.value) triggerChange([selectedValue], {
833
+ selected: true,
834
+ triggerValue: selectedValue
835
+ }, "option");
836
+ else {
837
+ let newRawValues = selected ? [...rawValues.value, selectedValue] : rawCheckedValues.value.filter((v) => v !== selectedValue);
838
+ if (treeConduction.value) {
839
+ const { missingRawValues, existRawValues } = splitRawValues(newRawValues);
840
+ const keyList = existRawValues.map((val) => {
841
+ const entity = valueEntities.value.get(val);
842
+ return entity ? entity.key : val;
843
+ });
844
+ let checkedKeys;
845
+ if (selected) ({checkedKeys} = conductCheck(keyList, true, keyEntities.value));
846
+ else ({checkedKeys} = conductCheck(keyList, {
847
+ checked: false,
848
+ halfCheckedKeys: rawHalfCheckedValues.value
849
+ }, keyEntities.value));
850
+ newRawValues = [...missingRawValues, ...checkedKeys.map((key) => keyEntities.value[String(key)].node[mergedFieldNames.value.value])];
851
+ }
852
+ triggerChange(newRawValues, {
853
+ selected,
854
+ triggerValue: selectedValue
855
+ }, source || "option");
856
+ }
857
+ if (selected || !mergedMultiple.value) props.onSelect?.(selectedValue, fillLegacyProps(node));
858
+ else props.onDeselect?.(selectedValue, fillLegacyProps(node));
859
+ };
860
+ const onInternalPopupVisibleChange = (open) => {
861
+ props.onPopupVisibleChange?.(open);
862
+ };
863
+ const onDisplayValuesChange = useRefFunc((newValues, info) => {
864
+ const newRawValues = newValues.map((item) => item.value);
865
+ if (info.type === "clear") {
866
+ triggerChange(newRawValues, {}, "selection");
867
+ return;
868
+ }
869
+ if (info.values.length) onOptionSelect(info.values[0].value, {
870
+ selected: false,
871
+ source: "selection"
872
+ });
873
+ });
874
+ useTreeSelectProvider(computed(() => {
875
+ return {
876
+ virtual: props.virtual,
877
+ popupMatchSelectWidth: props.popupMatchSelectWidth ?? defaults.popupMatchSelectWidth,
878
+ listHeight: props.listHeight ?? defaults.listHeight,
879
+ listItemHeight: props.listItemHeight ?? defaults.listItemHeight,
880
+ listItemScrollOffset: props.listItemScrollOffset ?? defaults.listItemScrollOffset,
881
+ treeData: filteredTreeData.value,
882
+ fieldNames: mergedFieldNames.value,
883
+ onSelect: onOptionSelect,
884
+ treeExpandAction: props.treeExpandAction,
885
+ treeTitleRender: props.treeTitleRender,
886
+ onPopupScroll: props.onPopupScroll,
887
+ leftMaxCount: props.maxCount === void 0 ? null : props.maxCount - cachedDisplayValues.value.length,
888
+ leafCountOnly: mergedShowCheckedStrategy.value === "SHOW_CHILD" && !props.treeCheckStrictly && !!props.treeCheckable,
889
+ valueEntities: valueEntities.value,
890
+ classNames: props.classNames,
891
+ styles: props.styles
892
+ };
893
+ }));
894
+ useLegacyProvider(computed(() => ({
895
+ checkable: mergedCheckable.value,
896
+ loadData: props.loadData,
897
+ treeLoadedKeys: props.treeLoadedKeys,
898
+ onTreeLoad: props.onTreeLoad,
899
+ checkedKeys: rawCheckedValues.value,
900
+ halfCheckedKeys: rawHalfCheckedValues.value,
901
+ treeDefaultExpandAll: props.treeDefaultExpandAll,
902
+ treeExpandedKeys: props.treeExpandedKeys,
903
+ treeDefaultExpandedKeys: props.treeDefaultExpandedKeys || [],
904
+ onTreeExpand: props.onTreeExpand,
905
+ treeIcon: props.treeIcon,
906
+ treeMotion: props.treeMotion,
907
+ showTreeIcon: props.showTreeIcon,
908
+ switcherIcon: props.switcherIcon,
909
+ treeLine: props.treeLine,
910
+ treeNodeFilterProp: mergedTreeNodeFilterProp.value,
911
+ keyEntities: keyEntities.value
912
+ })));
913
+ return () => {
914
+ if (props.treeData === void 0) {
915
+ const parsed = convertChildrenToData(slots.default?.() ?? []);
916
+ const signature = getTreeDataSignature(parsed);
917
+ if (signature !== slotTreeDataSignature.value) {
918
+ slotTreeDataSignature.value = signature;
919
+ slotTreeData.value = parsed;
920
+ }
921
+ }
922
+ return createVNode(BaseSelect, mergeProps({ ...attrs }, omit(props, omitKeyList), {
923
+ "ref": (el) => {
924
+ baseSelectRef.value = el;
925
+ },
926
+ "id": mergedId,
927
+ "prefixCls": props.prefixCls || defaults.prefixCls,
928
+ "mode": mergedMultiple.value ? "multiple" : void 0,
929
+ "classNames": props.classNames,
930
+ "styles": props.styles,
931
+ "displayValues": cachedDisplayValues.value,
932
+ "onDisplayValuesChange": onDisplayValuesChange,
933
+ "autoClearSearchValue": mergedAutoClearSearchValue.value,
934
+ "showSearch": mergedShowSearch.value,
935
+ "searchValue": mergedSearchValue.value,
936
+ "onSearch": (v) => {
937
+ onInternalSearch(v);
938
+ },
939
+ "OptionList": OptionList_default,
940
+ "emptyOptions": !mergedTreeData.value.length,
941
+ "onPopupVisibleChange": onInternalPopupVisibleChange,
942
+ "popupMatchSelectWidth": props.popupMatchSelectWidth ?? defaults.popupMatchSelectWidth
943
+ }), null);
944
+ };
945
+ }
946
+ });
947
+ export { TreeSelect_default as default };