@uzum-tech/ui 2.0.6 → 2.0.8

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 (48) hide show
  1. package/dist/index.js +159 -87
  2. package/dist/index.mjs +159 -87
  3. package/dist/index.prod.js +2 -2
  4. package/dist/index.prod.mjs +2 -2
  5. package/es/_internal/icons/index.d.ts +0 -1
  6. package/es/_internal/icons/index.mjs +0 -1
  7. package/es/components.d.ts +74 -31
  8. package/es/tree/src/Tree.d.ts +49 -24
  9. package/es/tree/src/Tree.mjs +18 -13
  10. package/es/tree/src/TreeNodeCheckbox.d.ts +4 -0
  11. package/es/tree/src/TreeNodeSwitcher.mjs +24 -26
  12. package/es/tree/src/styles/index.cssr.mjs +11 -8
  13. package/es/tree/styles/light.d.ts +4 -0
  14. package/es/tree/styles/light.mjs +2 -0
  15. package/es/tree-select/index.d.ts +1 -1
  16. package/es/tree-select/src/TreeSelect.d.ts +52 -17
  17. package/es/tree-select/src/TreeSelect.mjs +78 -45
  18. package/es/tree-select/src/interface.d.ts +7 -1
  19. package/es/tree-select/src/scroll-option-end.d.ts +3 -0
  20. package/es/tree-select/src/scroll-option-end.mjs +28 -0
  21. package/es/tree-select/styles/light.d.ts +2 -0
  22. package/es/version.d.ts +1 -1
  23. package/es/version.mjs +1 -1
  24. package/lib/_internal/icons/index.d.ts +0 -1
  25. package/lib/_internal/icons/index.js +1 -3
  26. package/lib/components.d.ts +74 -31
  27. package/lib/tree/src/Tree.d.ts +49 -24
  28. package/lib/tree/src/Tree.js +16 -15
  29. package/lib/tree/src/TreeNodeCheckbox.d.ts +4 -0
  30. package/lib/tree/src/TreeNodeSwitcher.js +11 -14
  31. package/lib/tree/src/styles/index.cssr.js +11 -8
  32. package/lib/tree/styles/light.d.ts +4 -0
  33. package/lib/tree/styles/light.js +2 -0
  34. package/lib/tree-select/index.d.ts +1 -1
  35. package/lib/tree-select/src/TreeSelect.d.ts +52 -17
  36. package/lib/tree-select/src/TreeSelect.js +79 -49
  37. package/lib/tree-select/src/interface.d.ts +7 -1
  38. package/lib/tree-select/src/scroll-option-end.d.ts +3 -0
  39. package/lib/tree-select/src/scroll-option-end.js +30 -0
  40. package/lib/tree-select/styles/light.d.ts +2 -0
  41. package/lib/version.d.ts +1 -1
  42. package/lib/version.js +1 -1
  43. package/package.json +5 -4
  44. package/web-types.json +41 -1
  45. package/es/_internal/icons/Switcher.d.ts +0 -2
  46. package/es/_internal/icons/Switcher.mjs +0 -12
  47. package/lib/_internal/icons/Switcher.d.ts +0 -2
  48. package/lib/_internal/icons/Switcher.js +0 -10
@@ -19,6 +19,7 @@ const Tree_1 = require("../../tree/src/Tree");
19
19
  const utils_1 = require("../../tree/src/utils");
20
20
  const styles_1 = require("../styles");
21
21
  const interface_1 = require("./interface");
22
+ const scroll_option_end_1 = require("./scroll-option-end");
22
23
  const index_cssr_1 = __importDefault(require("./styles/index.cssr"));
23
24
  const utils_2 = require("./utils");
24
25
  exports.treeSelectProps = Object.assign(Object.assign(Object.assign(Object.assign({}, _mixins_1.useTheme.props), { bordered: {
@@ -39,7 +40,7 @@ exports.treeSelectProps = Object.assign(Object.assign(Object.assign(Object.assig
39
40
  }, filterable: Boolean, checkStrategy: {
40
41
  type: String,
41
42
  default: 'all'
42
- }, loading: Boolean, maxTagCount: [String, Number], multiple: Boolean, showPath: Boolean, separator: {
43
+ }, loading: Boolean, maxTagCount: [String, Number], multiple: Boolean, remote: Boolean, showPath: Boolean, separator: {
43
44
  type: String,
44
45
  default: ' / '
45
46
  }, options: {
@@ -54,7 +55,7 @@ exports.treeSelectProps = Object.assign(Object.assign(Object.assign(Object.assig
54
55
  }, size: String, value: [String, Number, Array], to: _utils_1.useAdjustedTo.propTo, menuProps: Object, virtualScroll: {
55
56
  type: Boolean,
56
57
  default: true
57
- }, status: String, renderTag: Function }), Tree_1.treeSharedProps), { renderLabel: Function, renderPrefix: Function, renderSuffix: Function, nodeProps: Function, onBlur: Function, onFocus: Function, onLoad: Function, onUpdateShow: [Function, Array], onUpdateValue: [Function, Array], 'onUpdate:value': [Function, Array], 'onUpdate:show': [Function, Array],
58
+ }, status: String, renderTag: Function }), Tree_1.treeSharedProps), { renderLabel: Function, renderPrefix: Function, renderSuffix: Function, nodeProps: Function, onBlur: Function, onFocus: Function, onScroll: [Function, Array], onScrollOptionEnd: [Function, Array], onSearch: [Function, Array], onLoad: Function, onUpdateShow: [Function, Array], onUpdateValue: [Function, Array], 'onUpdate:value': [Function, Array], 'onUpdate:show': [Function, Array],
58
59
  /**
59
60
  * @deprecated
60
61
  */
@@ -85,20 +86,20 @@ exports.default = (0, vue_1.defineComponent)({
85
86
  const controlledShowRef = (0, vue_1.toRef)(props, 'show');
86
87
  const mergedShowRef = (0, vooks_1.useMergedState)(controlledShowRef, uncontrolledShowRef);
87
88
  const patternRef = (0, vue_1.ref)('');
89
+ const treePatternRef = (0, vue_1.computed)(() => {
90
+ return props.remote ? '' : patternRef.value;
91
+ });
88
92
  const mergedFilterRef = (0, vue_1.computed)(() => {
89
- const { filter } = props;
90
- if (filter)
91
- return filter;
92
- const { labelField } = props;
93
+ if (props.filter)
94
+ return props.filter;
93
95
  return (pattern, node) => {
94
96
  if (!pattern.length)
95
97
  return true;
96
- return node[labelField]
98
+ return node[props.labelField]
97
99
  .toLowerCase()
98
100
  .includes(pattern.toLowerCase());
99
101
  };
100
102
  });
101
- // used to resolve selected options
102
103
  const dataTreeMateRef = (0, vue_1.computed)(() => (0, treemate_1.createTreeMate)(props.options, (0, Tree_1.createTreeMateOptions)(props.keyField, props.childrenField, props.disabledField, undefined)));
103
104
  const { value: initMergedValue } = mergedValueRef;
104
105
  const pendingNodeKeyRef = (0, vue_1.ref)(props.checkable
@@ -117,6 +118,7 @@ exports.default = (0, vue_1.defineComponent)({
117
118
  const controlledExpandedKeysRef = (0, vue_1.toRef)(props, 'expandedKeys');
118
119
  const mergedExpandedKeysRef = (0, vooks_1.useMergedState)(controlledExpandedKeysRef, uncontrolledExpandedKeysRef);
119
120
  const focusedRef = (0, vue_1.ref)(false);
121
+ let visibleRootEndKeys = new Set();
120
122
  const mergedPlaceholderRef = (0, vue_1.computed)(() => {
121
123
  const { placeholder } = props;
122
124
  if (placeholder !== undefined)
@@ -232,17 +234,17 @@ exports.default = (0, vue_1.defineComponent)({
232
234
  }
233
235
  uncontrolledExpandedKeysRef.value = keys;
234
236
  }
235
- function doFocus(e) {
237
+ function doFocus(event) {
236
238
  const { onFocus } = props;
237
239
  if (onFocus)
238
- onFocus(e);
240
+ onFocus(event);
239
241
  triggerFormFocus();
240
242
  }
241
- function doBlur(e) {
243
+ function doBlur(event) {
242
244
  closeMenu();
243
245
  const { onBlur } = props;
244
246
  if (onBlur)
245
- onBlur(e);
247
+ onBlur(event);
246
248
  triggerFormBlur();
247
249
  }
248
250
  function closeMenu() {
@@ -259,11 +261,12 @@ exports.default = (0, vue_1.defineComponent)({
259
261
  }
260
262
  function handleMenuLeave() {
261
263
  patternRef.value = '';
264
+ visibleRootEndKeys = new Set();
262
265
  }
263
- function handleMenuClickoutside(e) {
266
+ function handleMenuClickoutside(event) {
264
267
  var _a;
265
268
  if (mergedShowRef.value) {
266
- if (!((_a = triggerInstRef.value) === null || _a === void 0 ? void 0 : _a.$el.contains((0, seemly_1.getPreciseEventTarget)(e)))) {
269
+ if (!((_a = triggerInstRef.value) === null || _a === void 0 ? void 0 : _a.$el.contains((0, seemly_1.getPreciseEventTarget)(event)))) {
267
270
  // outside select, don't need to return focus
268
271
  closeMenu();
269
272
  }
@@ -316,40 +319,40 @@ exports.default = (0, vue_1.defineComponent)({
316
319
  doUpdateIndeterminateKeys(keys, getOptionsByKeys(keys));
317
320
  }
318
321
  }
319
- function handleTriggerFocus(e) {
322
+ function handleTriggerFocus(event) {
320
323
  var _a;
321
- if ((_a = menuElRef.value) === null || _a === void 0 ? void 0 : _a.contains(e.relatedTarget))
324
+ if ((_a = menuElRef.value) === null || _a === void 0 ? void 0 : _a.contains(event.relatedTarget))
322
325
  return;
323
326
  focusedRef.value = true;
324
- doFocus(e);
327
+ doFocus(event);
325
328
  }
326
- function handleTriggerBlur(e) {
329
+ function handleTriggerBlur(event) {
327
330
  var _a;
328
- if ((_a = menuElRef.value) === null || _a === void 0 ? void 0 : _a.contains(e.relatedTarget))
331
+ if ((_a = menuElRef.value) === null || _a === void 0 ? void 0 : _a.contains(event.relatedTarget))
329
332
  return;
330
333
  focusedRef.value = false;
331
- doBlur(e);
334
+ doBlur(event);
332
335
  }
333
- function handleMenuFocusin(e) {
336
+ function handleMenuFocusin(event) {
334
337
  var _a, _b, _c;
335
- if (((_a = menuElRef.value) === null || _a === void 0 ? void 0 : _a.contains(e.relatedTarget))
336
- || ((_c = (_b = triggerInstRef.value) === null || _b === void 0 ? void 0 : _b.$el) === null || _c === void 0 ? void 0 : _c.contains(e.relatedTarget))) {
338
+ if (((_a = menuElRef.value) === null || _a === void 0 ? void 0 : _a.contains(event.relatedTarget))
339
+ || ((_c = (_b = triggerInstRef.value) === null || _b === void 0 ? void 0 : _b.$el) === null || _c === void 0 ? void 0 : _c.contains(event.relatedTarget))) {
337
340
  return;
338
341
  }
339
342
  focusedRef.value = true;
340
- doFocus(e);
343
+ doFocus(event);
341
344
  }
342
- function handleMenuFocusout(e) {
345
+ function handleMenuFocusout(event) {
343
346
  var _a, _b, _c;
344
- if (((_a = menuElRef.value) === null || _a === void 0 ? void 0 : _a.contains(e.relatedTarget))
345
- || ((_c = (_b = triggerInstRef.value) === null || _b === void 0 ? void 0 : _b.$el) === null || _c === void 0 ? void 0 : _c.contains(e.relatedTarget))) {
347
+ if (((_a = menuElRef.value) === null || _a === void 0 ? void 0 : _a.contains(event.relatedTarget))
348
+ || ((_c = (_b = triggerInstRef.value) === null || _b === void 0 ? void 0 : _b.$el) === null || _c === void 0 ? void 0 : _c.contains(event.relatedTarget))) {
346
349
  return;
347
350
  }
348
351
  focusedRef.value = false;
349
- doBlur(e);
352
+ doBlur(event);
350
353
  }
351
- function handleClear(e) {
352
- e.stopPropagation();
354
+ function handleClear(event) {
355
+ event.stopPropagation();
353
356
  const { multiple } = props;
354
357
  if (!multiple && props.filterable) {
355
358
  closeMenu();
@@ -399,20 +402,24 @@ exports.default = (0, vue_1.defineComponent)({
399
402
  }
400
403
  }
401
404
  }
402
- function handlePatternInput(e) {
403
- const { value } = e.target;
405
+ function doSearch(value) {
406
+ props.onSearch && (0, _utils_1.call)(props.onSearch, value);
407
+ }
408
+ function handlePatternInput(event) {
409
+ const { value } = event.target;
404
410
  patternRef.value = value;
411
+ doSearch(value);
405
412
  }
406
- function treeHandleKeydown(e) {
413
+ function treeHandleKeydown(event) {
407
414
  const { value: treeInst } = treeInstRef;
408
415
  if (treeInst) {
409
- treeInst.handleKeydown(e);
416
+ treeInst.handleKeydown(event);
410
417
  }
411
418
  }
412
- function handleKeydown(e) {
413
- if (e.key === 'Enter') {
419
+ function handleKeydown(event) {
420
+ if (event.key === 'Enter') {
414
421
  if (mergedShowRef.value) {
415
- treeHandleKeydown(e);
422
+ treeHandleKeydown(event);
416
423
  if (!props.multiple) {
417
424
  closeMenu();
418
425
  focusSelection();
@@ -421,20 +428,20 @@ exports.default = (0, vue_1.defineComponent)({
421
428
  else {
422
429
  openMenu();
423
430
  }
424
- e.preventDefault();
431
+ event.preventDefault();
425
432
  }
426
- else if (e.key === 'Escape') {
433
+ else if (event.key === 'Escape') {
427
434
  if (mergedShowRef.value) {
428
- (0, _utils_1.markEventEffectPerformed)(e);
435
+ (0, _utils_1.markEventEffectPerformed)(event);
429
436
  closeMenu();
430
437
  focusSelection();
431
438
  }
432
439
  }
433
440
  else {
434
441
  if (mergedShowRef.value) {
435
- treeHandleKeydown(e);
442
+ treeHandleKeydown(event);
436
443
  }
437
- else if (e.key === 'ArrowDown') {
444
+ else if (event.key === 'ArrowDown') {
438
445
  openMenu();
439
446
  }
440
447
  }
@@ -443,11 +450,33 @@ exports.default = (0, vue_1.defineComponent)({
443
450
  closeMenu();
444
451
  focusSelection();
445
452
  }
446
- function handleMenuMousedown(e) {
453
+ function handleMenuMousedown(event) {
447
454
  // If there's an action slot later, we need to check if mousedown happens
448
455
  // in action panel
449
- if (!(0, seemly_1.happensIn)(e, 'action'))
450
- e.preventDefault();
456
+ if (!(0, seemly_1.happensIn)(event, 'action'))
457
+ event.preventDefault();
458
+ }
459
+ function doScroll(event) {
460
+ const { onScroll } = props;
461
+ if (onScroll)
462
+ (0, _utils_1.call)(onScroll, event);
463
+ }
464
+ function doScrollOptionEnd(option, event) {
465
+ props.onScrollOptionEnd && (0, _utils_1.call)(props.onScrollOptionEnd, option, event);
466
+ }
467
+ function handleTreeScroll(event) {
468
+ doScroll(event);
469
+ if (!props.onScrollOptionEnd)
470
+ return;
471
+ const scrollElement = (event.currentTarget
472
+ || event.target);
473
+ if (!scrollElement)
474
+ return;
475
+ const { reachedOptions, visibleKeys } = (0, scroll_option_end_1.scanReachedRootOptions)(scrollElement, dataTreeMateRef.value.treeNodes, mergedExpandedKeysRef.value, visibleRootEndKeys);
476
+ visibleRootEndKeys = visibleKeys;
477
+ for (const reachedOption of reachedOptions) {
478
+ doScrollOptionEnd(reachedOption, event);
479
+ }
451
480
  }
452
481
  const selectionRenderTagRef = (0, vue_1.computed)(() => {
453
482
  const { renderTag } = props;
@@ -540,7 +569,7 @@ exports.default = (0, vue_1.defineComponent)({
540
569
  : undefined;
541
570
  return Object.assign(Object.assign({}, exposedMethods), { menuElRef, mergedStatus: mergedStatusRef, triggerInstRef,
542
571
  followerInstRef,
543
- treeInstRef, mergedClsPrefix: mergedClsPrefixRef, mergedValue: mergedValueRef, mergedShow: mergedShowRef, namespace: namespaceRef, adjustedTo: (0, _utils_1.useAdjustedTo)(props), isMounted: (0, vooks_1.useIsMounted)(), focused: focusedRef, menuPadding: menuPaddingRef, mergedPlaceholder: mergedPlaceholderRef, mergedExpandedKeys: mergedExpandedKeysRef, treeSelectedKeys: treeSelectedKeysRef, treeCheckedKeys: treeCheckedKeysRef, mergedSize: mergedSizeRef, mergedDisabled: mergedDisabledRef, selectedOption: selectedOptionRef, selectedOptions: selectedOptionsRef, pattern: patternRef, pendingNodeKey: pendingNodeKeyRef, mergedCascade: mergedCascadeRef, mergedFilter: mergedFilterRef, selectionRenderTag: selectionRenderTagRef, handleTriggerOrMenuResize,
572
+ treeInstRef, mergedClsPrefix: mergedClsPrefixRef, mergedValue: mergedValueRef, mergedShow: mergedShowRef, namespace: namespaceRef, adjustedTo: (0, _utils_1.useAdjustedTo)(props), isMounted: (0, vooks_1.useIsMounted)(), focused: focusedRef, menuPadding: menuPaddingRef, mergedPlaceholder: mergedPlaceholderRef, mergedExpandedKeys: mergedExpandedKeysRef, treeSelectedKeys: treeSelectedKeysRef, treeCheckedKeys: treeCheckedKeysRef, mergedSize: mergedSizeRef, mergedDisabled: mergedDisabledRef, selectedOption: selectedOptionRef, selectedOptions: selectedOptionsRef, pattern: patternRef, treePattern: treePatternRef, pendingNodeKey: pendingNodeKeyRef, mergedCascade: mergedCascadeRef, mergedFilter: mergedFilterRef, selectionRenderTag: selectionRenderTagRef, handleTriggerOrMenuResize,
544
573
  doUpdateExpandedKeys,
545
574
  handleMenuLeave,
546
575
  handleTriggerClick,
@@ -556,7 +585,8 @@ exports.default = (0, vue_1.defineComponent)({
556
585
  handlePatternInput,
557
586
  handleKeydown,
558
587
  handleTabOut,
559
- handleMenuMousedown, mergedTheme: themeRef, cssVars: inlineThemeDisabled ? undefined : cssVarsRef, themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender });
588
+ handleMenuMousedown,
589
+ handleTreeScroll, mergedTheme: themeRef, cssVars: inlineThemeDisabled ? undefined : cssVarsRef, themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender });
560
590
  },
561
591
  render() {
562
592
  const { mergedTheme, mergedClsPrefix, $slots } = this;
@@ -584,9 +614,9 @@ exports.default = (0, vue_1.defineComponent)({
584
614
  (menuProps === null || menuProps === void 0 ? void 0 : menuProps.style) || '',
585
615
  this.cssVars
586
616
  ], tabindex: 0, onMousedown: this.handleMenuMousedown, onKeydown: this.handleKeydown, onFocusin: this.handleMenuFocusin, onFocusout: this.handleMenuFocusout }),
587
- (0, vue_1.h)(tree_1.UTree, { ref: "treeInstRef", blockLine: true, allowCheckingNotLoaded: this.allowCheckingNotLoaded, showIrrelevantNodes: false, animated: false, pattern: this.pattern, filter: this.mergedFilter, data: options, cancelable: multiple, labelField: this.labelField, keyField: this.keyField, disabledField: this.disabledField, childrenField: this.childrenField, theme: mergedTheme.peers.Tree, themeOverrides: mergedTheme.peerOverrides.Tree, defaultExpandAll: this.defaultExpandAll, defaultExpandedKeys: this.defaultExpandedKeys, expandedKeys: this.mergedExpandedKeys, checkedKeys: this.treeCheckedKeys, selectedKeys: this.treeSelectedKeys, checkable: checkable, checkStrategy: this.checkStrategy, cascade: this.mergedCascade, leafOnly: this.leafOnly, multiple: this.multiple, renderLabel: this.renderLabel, renderPrefix: this.renderPrefix, renderSuffix: this.renderSuffix, renderSwitcherIcon: this.renderSwitcherIcon, nodeProps: this.nodeProps, virtualScroll: this.consistentMenuWidth && this.virtualScroll, internalTreeSelect: true, internalUnifySelectCheck: true, internalScrollable: true, internalScrollablePadding: this.menuPadding, internalFocusable: false, internalCheckboxFocusable: false, internalRenderEmpty: () => ((0, vue_1.h)("div", { class: `${mergedClsPrefix}-tree-select-menu__empty` }, (0, _utils_1.resolveSlot)($slots.empty, () => [
617
+ (0, vue_1.h)(tree_1.UTree, { ref: "treeInstRef", blockLine: true, allowCheckingNotLoaded: this.allowCheckingNotLoaded, showIrrelevantNodes: false, animated: false, pattern: this.treePattern, filter: this.mergedFilter, data: options, cancelable: multiple, labelField: this.labelField, keyField: this.keyField, disabledField: this.disabledField, childrenField: this.childrenField, theme: mergedTheme.peers.Tree, themeOverrides: mergedTheme.peerOverrides.Tree, defaultExpandAll: this.defaultExpandAll, defaultExpandedKeys: this.defaultExpandedKeys, expandedKeys: this.mergedExpandedKeys, checkedKeys: this.treeCheckedKeys, selectedKeys: this.treeSelectedKeys, checkable: checkable, checkStrategy: this.checkStrategy, cascade: this.mergedCascade, leafOnly: this.leafOnly, multiple: this.multiple, renderLabel: this.renderLabel, renderPrefix: this.renderPrefix, renderSuffix: this.renderSuffix, renderSwitcherIcon: this.renderSwitcherIcon, nodeProps: this.nodeProps, virtualScroll: this.consistentMenuWidth && this.virtualScroll, internalTreeSelect: true, internalUnifySelectCheck: true, internalScrollable: true, internalScrollablePadding: this.menuPadding, internalFocusable: false, internalCheckboxFocusable: false, internalRenderEmpty: () => ((0, vue_1.h)("div", { class: `${mergedClsPrefix}-tree-select-menu__empty` }, (0, _utils_1.resolveSlot)($slots.empty, () => [
588
618
  (0, vue_1.h)(empty_1.UEmpty, { theme: mergedTheme.peers.Empty, themeOverrides: mergedTheme.peerOverrides.Empty })
589
- ]))), onLoad: this.onLoad, onUpdateCheckedKeys: this.handleUpdateCheckedKeys, onUpdateIndeterminateKeys: this.handleUpdateIndeterminateKeys, onUpdateExpandedKeys: this.doUpdateExpandedKeys }),
619
+ ]))), onLoad: this.onLoad, onUpdateCheckedKeys: this.handleUpdateCheckedKeys, onUpdateIndeterminateKeys: this.handleUpdateIndeterminateKeys, onUpdateExpandedKeys: this.doUpdateExpandedKeys, onScroll: this.handleTreeScroll }),
590
620
  (0, _utils_1.resolveWrappedSlot)($slots.action, (children) => {
591
621
  return children ? ((0, vue_1.h)("div", { class: `${mergedClsPrefix}-tree-select-menu__action`, "data-action": true }, children)) : null;
592
622
  }),
@@ -1,4 +1,4 @@
1
- import type { TreeMate, TreeNode } from 'treemate';
1
+ import type { Key, TreeMate, TreeNode } from 'treemate';
2
2
  import type { HTMLAttributes, Ref, VNodeChild } from 'vue';
3
3
  import type { TreeOption, TreeOptionBase } from '../../tree/src/interface';
4
4
  export type TreeSelectOption = Omit<TreeOptionBase, 'checkboxDisabled' | 'isLeaf' | 'children'> & {
@@ -28,6 +28,12 @@ export type OnUpdateValueImpl = (value: string | number | (string | number) | st
28
28
  }) => void;
29
29
  export type OnUpdateIndeterminateKeysImpl = (value: string | number | (string | number) | string[] | number[] | Array<string | number> | null, option: TreeSelectOption | null | Array<TreeSelectOption | null>) => void;
30
30
  export type Value = string | number | Array<string | number> | null;
31
+ export type OnScrollOptionEnd = (option: TreeSelectOption, event: Event) => void;
32
+ export type FilterHandler = (pattern: string, node: TreeSelectOption) => boolean;
33
+ export interface ScrollOptionEndScanResult {
34
+ reachedOptions: TreeSelectOption[];
35
+ visibleKeys: Set<Key>;
36
+ }
31
37
  export interface TreeSelectInjection {
32
38
  pendingNodeKeyRef: Ref<string | number | null>;
33
39
  dataTreeMate: Ref<TreeMate<TreeOption>>;
@@ -0,0 +1,3 @@
1
+ import type { Key } from '../../tree/src/interface';
2
+ import type { ScrollOptionEndScanResult, TreeSelectTmNode } from './interface';
3
+ export declare function scanReachedRootOptions(scrollElement: HTMLElement, rootNodes: TreeSelectTmNode[], expandedKeys: Key[] | undefined, previousVisibleKeys: Set<Key>): ScrollOptionEndScanResult;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scanReachedRootOptions = scanReachedRootOptions;
4
+ const _utils_1 = require("../../_utils");
5
+ function isVerticallyVisibleWithin(element, containerRect) {
6
+ const elementRect = element.getBoundingClientRect();
7
+ return (elementRect.top < containerRect.bottom
8
+ && elementRect.bottom > containerRect.top);
9
+ }
10
+ function scanReachedRootOptions(scrollElement, rootNodes, expandedKeys, previousVisibleKeys) {
11
+ const containerRect = scrollElement.getBoundingClientRect();
12
+ const visibleKeys = new Set();
13
+ const reachedOptions = [];
14
+ for (const rootNode of rootNodes) {
15
+ const { children } = rootNode;
16
+ if (!(children === null || children === void 0 ? void 0 : children.length) || !(expandedKeys === null || expandedKeys === void 0 ? void 0 : expandedKeys.includes(rootNode.key)))
17
+ continue;
18
+ const lastChild = children[children.length - 1];
19
+ const lastChildElement = scrollElement.querySelector(`[data-key="${(0, _utils_1.createDataKey)(lastChild.key)}"]`);
20
+ const isHiddenOrMissing = !lastChildElement
21
+ || !isVerticallyVisibleWithin(lastChildElement, containerRect);
22
+ if (isHiddenOrMissing)
23
+ continue;
24
+ visibleKeys.add(rootNode.key);
25
+ if (!previousVisibleKeys.has(rootNode.key)) {
26
+ reachedOptions.push(rootNode.rawNode);
27
+ }
28
+ }
29
+ return { reachedOptions, visibleKeys };
30
+ }
@@ -30,6 +30,8 @@ declare const treeSelectLight: import("../../_mixins/use-theme").Theme<"TreeSele
30
30
  nodeColorPressed: string;
31
31
  nodeColorActive: string;
32
32
  arrowColor: string;
33
+ switcherColor: string;
34
+ switcherSize: string;
33
35
  nodeTextColor: string;
34
36
  nodeTextColorDisabled: string;
35
37
  loadingColor: string;
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const _default: "2.0.6";
1
+ declare const _default: "2.0.8";
2
2
  export default _default;
package/lib/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = '2.0.6';
3
+ exports.default = '2.0.8';
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@uzum-tech/ui",
3
- "version": "2.0.6",
3
+ "version": "2.0.8",
4
+ "packageManager": "pnpm@10.33.0",
4
5
  "description": "A Vue 3 Component Library. Fairly Complete, Theme Customizable, Uses TypeScript, Fast",
5
6
  "author": {
6
7
  "name": "KapitalLab",
@@ -57,9 +58,9 @@
57
58
  "dev": "pnpm run clean && pnpm run gen-version && pnpm run gen-volar-dts && NODE_ENV=development vite",
58
59
  "build:package": "pnpm run gen-version && pnpm run clean && pnpm run gen-volar-dts && tsc -b --force tsconfig.esm.json && tsx scripts/pre-build/pre-cjs-build.ts && tsc -b --force tsconfig.cjs.json && rollup -c && pnpm run test:umd && pnpm run test:esm && pnpm run post-build && rimraf {es,lib}/*.tsbuildinfo",
59
60
  "build:themes": "tsc -b --force themes/tusimple/tsconfig.esm.json && tsc -b --force themes/tusimple/tsconfig.cjs.json",
60
- "build:site": "bash ./scripts/pre-build-site/pre-build-site.sh && NODE_ENV=production NODE_OPTIONS=--max-old-space-size=4096 vite build && bash ./scripts/post-build-site/post-build-site.sh",
61
+ "build:site": "sh ./scripts/pre-build-site/pre-build-site.sh && NODE_ENV=production NODE_OPTIONS=--max-old-space-size=4096 vite build && sh ./scripts/post-build-site/post-build-site.sh",
61
62
  "clean": "rimraf site lib es dist node_modules/@uzum-tech/ui themes/tusimple/es themes/tusimple/lib",
62
- "release:package": "pnpm run test && pnpm run build:package && npm publish --no-git-checks",
63
+ "release:package": "npm login && pnpm install && pnpm run test && pnpm run build:package && npm publish --no-git-checks",
63
64
  "release:changelog": "tsx scripts/release-changelog.ts",
64
65
  "lint": "pnpm run lint:code && pnpm run lint:type",
65
66
  "lint:type": "pnpm run lint:src-type && pnpm run lint:demo-type",
@@ -79,7 +80,7 @@
79
80
  "gen-version": "tsx scripts/gen-version.ts",
80
81
  "gen-volar-dts": "tsx scripts/gen-component-declaration.ts",
81
82
  "post-build": "tsx scripts/post-build/index.ts",
82
- "build:site:ts": "bash ./scripts/pre-build-site/pre-build-site.sh && TUSIMPLE=true NODE_ENV=production NODE_OPTIONS=--max-old-space-size=4096 vite build && bash ./scripts/post-build-site/post-build-site.sh",
83
+ "build:site:ts": "sh ./scripts/pre-build-site/pre-build-site.sh && TUSIMPLE=true NODE_ENV=production NODE_OPTIONS=--max-old-space-size=4096 vite build && sh ./scripts/post-build-site/post-build-site.sh",
83
84
  "prepare": "husky",
84
85
  "transpile-docs": "tsx scripts/md-to-vue.ts data-table",
85
86
  "type-check": "vue-tsc --noEmit",
package/web-types.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "framework": "vue",
4
4
  "name": "@uzum-tech/ui",
5
- "version": "2.0.6",
5
+ "version": "2.0.8",
6
6
  "js-types-syntax": "typescript",
7
7
  "contributions": {
8
8
  "html": {
@@ -15731,6 +15731,16 @@
15731
15731
  "description": "Placeholder.",
15732
15732
  "default": "'Please Select'"
15733
15733
  },
15734
+ {
15735
+ "name": "remote",
15736
+ "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/tree-select",
15737
+ "type": "boolean",
15738
+ "description": "Whether to disable client-side filtering when `filterable` is set, so the `search` event can be used to load options remotely.",
15739
+ "default": "false",
15740
+ "description-sections": {
15741
+ "since": "2.0.8"
15742
+ }
15743
+ },
15734
15744
  {
15735
15745
  "name": "placement",
15736
15746
  "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/tree-select",
@@ -15890,6 +15900,36 @@
15890
15900
  "since": "2.27.0"
15891
15901
  }
15892
15902
  },
15903
+ {
15904
+ "name": "scroll",
15905
+ "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/tree-select",
15906
+ "type": "(e: Event) => void",
15907
+ "description": "Callback fired on every scroll of the options menu. Useful for loading options asynchronously.",
15908
+ "default": "undefined",
15909
+ "description-sections": {
15910
+ "since": "2.0.7"
15911
+ }
15912
+ },
15913
+ {
15914
+ "name": "scroll-option-end",
15915
+ "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/tree-select",
15916
+ "type": "(option: TreeSelectOption, e: Event) => void",
15917
+ "description": "Callback fired when the last child of a top-level (root) expanded branch becomes visible in the menu. Called per root branch with that root's option.",
15918
+ "default": "undefined",
15919
+ "description-sections": {
15920
+ "since": "2.0.7"
15921
+ }
15922
+ },
15923
+ {
15924
+ "name": "search",
15925
+ "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/tree-select",
15926
+ "type": "(value: string) => void",
15927
+ "description": "Callback fired when the filter input changes. Used together with `remote` to load options on the server.",
15928
+ "default": "undefined",
15929
+ "description-sections": {
15930
+ "since": "2.0.8"
15931
+ }
15932
+ },
15893
15933
  {
15894
15934
  "name": "update:expanded-keys",
15895
15935
  "doc-url": "https://uzum-ui.kapitalbank.uz/en-US/os-theme/components/tree-select",
@@ -1,2 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
- export default _default;
@@ -1,12 +0,0 @@
1
- import { defineComponent, h } from 'vue';
2
- export default defineComponent({
3
- name: 'Switcher',
4
- render() {
5
- return h("svg", {
6
- xmlns: "http://www.w3.org/2000/svg",
7
- viewBox: "0 0 32 32"
8
- }, h("path", {
9
- d: "M12 8l10 8l-10 8z"
10
- }));
11
- }
12
- });
@@ -1,2 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
- export default _default;
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vue_1 = require("vue");
4
- exports.default = (0, vue_1.defineComponent)({
5
- name: 'Switcher',
6
- render() {
7
- return ((0, vue_1.h)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 32 32" },
8
- (0, vue_1.h)("path", { d: "M12 8l10 8l-10 8z" })));
9
- }
10
- });