vue-devui 1.0.0-rc.10 → 1.0.0-rc.11

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 (94) hide show
  1. package/README.md +149 -149
  2. package/auto-complete/index.es.js +22 -14
  3. package/auto-complete/index.umd.js +8 -8
  4. package/auto-complete/style.css +1 -1
  5. package/badge/index.es.js +5 -1
  6. package/badge/index.umd.js +1 -1
  7. package/badge/style.css +1 -1
  8. package/button/index.es.js +1 -1
  9. package/button/index.umd.js +1 -1
  10. package/button/style.css +1 -1
  11. package/card/index.es.js +5 -1
  12. package/card/index.umd.js +1 -1
  13. package/card/style.css +1 -1
  14. package/checkbox/index.es.js +21 -13
  15. package/checkbox/index.umd.js +7 -7
  16. package/checkbox/style.css +1 -1
  17. package/collapse/index.es.js +1 -1
  18. package/collapse/index.umd.js +1 -1
  19. package/collapse/style.css +1 -1
  20. package/date-picker/index.es.js +22 -14
  21. package/date-picker/index.umd.js +9 -9
  22. package/date-picker/style.css +1 -1
  23. package/editable-select/style.css +1 -1
  24. package/form/index.es.js +21 -13
  25. package/form/index.umd.js +11 -11
  26. package/icon/index.es.js +1 -1
  27. package/icon/index.umd.js +1 -1
  28. package/icon/style.css +1 -1
  29. package/image-preview/style.css +1 -1
  30. package/input/index.es.js +22 -14
  31. package/input/index.umd.js +7 -7
  32. package/input/style.css +1 -1
  33. package/input-number/style.css +1 -1
  34. package/modal/index.es.js +1 -1
  35. package/modal/index.umd.js +1 -1
  36. package/modal/style.css +1 -1
  37. package/notification/index.es.js +1 -1
  38. package/notification/index.umd.js +1 -1
  39. package/notification/style.css +1 -1
  40. package/nuxt/components/TABLE_TOKEN.js +3 -0
  41. package/nuxt/components/TimeSelect.js +3 -0
  42. package/nuxt/components/tableProps.js +3 -0
  43. package/package.json +2 -1
  44. package/pagination/style.css +1 -1
  45. package/panel/style.css +1 -1
  46. package/radio/index.es.js +21 -13
  47. package/radio/index.umd.js +7 -7
  48. package/radio/style.css +1 -1
  49. package/rate/style.css +1 -1
  50. package/result/index.es.js +1 -1
  51. package/result/index.umd.js +1 -1
  52. package/result/style.css +1 -1
  53. package/search/index.es.js +23 -14
  54. package/search/index.umd.js +7 -7
  55. package/search/style.css +1 -1
  56. package/select/index.es.js +45 -18
  57. package/select/index.umd.js +11 -11
  58. package/select/style.css +1 -1
  59. package/slider/index.es.js +116 -143
  60. package/slider/index.umd.js +1 -1
  61. package/slider/style.css +1 -1
  62. package/statistic/index.es.js +34 -16
  63. package/statistic/index.umd.js +1 -1
  64. package/statistic/style.css +1 -1
  65. package/status/style.css +1 -1
  66. package/style.css +1 -1
  67. package/switch/index.es.js +21 -13
  68. package/switch/index.umd.js +9 -9
  69. package/switch/style.css +1 -1
  70. package/table/index.es.js +212 -177
  71. package/table/index.umd.js +15 -15
  72. package/table/style.css +1 -1
  73. package/tabs/index.es.js +3 -1
  74. package/tabs/index.umd.js +1 -1
  75. package/tabs/style.css +1 -1
  76. package/textarea/index.es.js +21 -13
  77. package/textarea/index.umd.js +9 -9
  78. package/textarea/style.css +1 -1
  79. package/time-select/index.d.ts +7 -0
  80. package/time-select/index.es.js +9460 -0
  81. package/time-select/index.umd.js +27 -0
  82. package/time-select/package.json +7 -0
  83. package/time-select/style.css +1 -0
  84. package/timeline/index.es.js +1 -1
  85. package/timeline/index.umd.js +1 -1
  86. package/timeline/style.css +1 -1
  87. package/tree/index.es.js +1073 -63
  88. package/tree/index.umd.js +17 -17
  89. package/tree/style.css +1 -1
  90. package/upload/index.es.js +49 -11
  91. package/upload/index.umd.js +1 -1
  92. package/upload/style.css +1 -1
  93. package/vue-devui.es.js +1756 -493
  94. package/vue-devui.umd.js +21 -21
package/tree/index.es.js CHANGED
@@ -29,7 +29,7 @@ var __objRest = (source, exclude) => {
29
29
  }
30
30
  return target;
31
31
  };
32
- import { createVNode, defineComponent, toRefs, inject, watch, provide, reactive, onUnmounted, Transition, mergeProps, ref, unref, nextTick, Comment, Text, h, Fragment, withDirectives, cloneVNode, computed, onMounted, Teleport, createTextVNode, onBeforeUnmount, toRef, renderSlot, useSlots } from "vue";
32
+ import { createVNode, defineComponent, toRefs, inject, watch, provide, reactive, onUnmounted, Transition, mergeProps, ref, unref, nextTick, Comment, Text, h, Fragment, withDirectives, cloneVNode, computed, onMounted, Teleport, createTextVNode, onBeforeUnmount, toRef, renderSlot, useSlots, isVNode, getCurrentInstance, onUpdated, shallowRef, toRaw, watchEffect } from "vue";
33
33
  import { offset, autoPlacement, arrow, shift, computePosition } from "@floating-ui/dom";
34
34
  const USE_TREE_TOKEN = "use-tree-token";
35
35
  const NODE_HEIGHT = 30;
@@ -1483,7 +1483,7 @@ var lodash = { exports: {} };
1483
1483
  if (typeof func != "function") {
1484
1484
  throw new TypeError2(FUNC_ERROR_TEXT);
1485
1485
  }
1486
- return setTimeout(function() {
1486
+ return setTimeout2(function() {
1487
1487
  func.apply(undefined$1, args);
1488
1488
  }, wait);
1489
1489
  }
@@ -2263,7 +2263,7 @@ var lodash = { exports: {} };
2263
2263
  end = end === undefined$1 ? length : end;
2264
2264
  return !start && end >= length ? array4 : baseSlice(array4, start, end);
2265
2265
  }
2266
- var clearTimeout = ctxClearTimeout || function(id) {
2266
+ var clearTimeout2 = ctxClearTimeout || function(id) {
2267
2267
  return root.clearTimeout(id);
2268
2268
  };
2269
2269
  function cloneBuffer(buffer, isDeep) {
@@ -3292,7 +3292,7 @@ var lodash = { exports: {} };
3292
3292
  return object4[key];
3293
3293
  }
3294
3294
  var setData = shortOut(baseSetData);
3295
- var setTimeout = ctxSetTimeout || function(func, wait) {
3295
+ var setTimeout2 = ctxSetTimeout || function(func, wait) {
3296
3296
  return root.setTimeout(func, wait);
3297
3297
  };
3298
3298
  var setToString = shortOut(baseSetToString);
@@ -4084,7 +4084,7 @@ var lodash = { exports: {} };
4084
4084
  }
4085
4085
  function leadingEdge(time) {
4086
4086
  lastInvokeTime = time;
4087
- timerId = setTimeout(timerExpired, wait);
4087
+ timerId = setTimeout2(timerExpired, wait);
4088
4088
  return leading ? invokeFunc(time) : result2;
4089
4089
  }
4090
4090
  function remainingWait(time) {
@@ -4100,7 +4100,7 @@ var lodash = { exports: {} };
4100
4100
  if (shouldInvoke(time)) {
4101
4101
  return trailingEdge(time);
4102
4102
  }
4103
- timerId = setTimeout(timerExpired, remainingWait(time));
4103
+ timerId = setTimeout2(timerExpired, remainingWait(time));
4104
4104
  }
4105
4105
  function trailingEdge(time) {
4106
4106
  timerId = undefined$1;
@@ -4112,7 +4112,7 @@ var lodash = { exports: {} };
4112
4112
  }
4113
4113
  function cancel() {
4114
4114
  if (timerId !== undefined$1) {
4115
- clearTimeout(timerId);
4115
+ clearTimeout2(timerId);
4116
4116
  }
4117
4117
  lastInvokeTime = 0;
4118
4118
  lastArgs = lastCallTime = lastThis = timerId = undefined$1;
@@ -4130,13 +4130,13 @@ var lodash = { exports: {} };
4130
4130
  return leadingEdge(lastCallTime);
4131
4131
  }
4132
4132
  if (maxing) {
4133
- clearTimeout(timerId);
4134
- timerId = setTimeout(timerExpired, wait);
4133
+ clearTimeout2(timerId);
4134
+ timerId = setTimeout2(timerExpired, wait);
4135
4135
  return invokeFunc(lastCallTime);
4136
4136
  }
4137
4137
  }
4138
4138
  if (timerId === undefined$1) {
4139
- timerId = setTimeout(timerExpired, wait);
4139
+ timerId = setTimeout2(timerExpired, wait);
4140
4140
  }
4141
4141
  return result2;
4142
4142
  }
@@ -7676,6 +7676,16 @@ Schema.register = function register(type4, validator) {
7676
7676
  Schema.warning = warning;
7677
7677
  Schema.messages = messages;
7678
7678
  Schema.validators = validators;
7679
+ function getFieldValue(obj, path) {
7680
+ return {
7681
+ get value() {
7682
+ return lodash.exports.get(obj, path);
7683
+ },
7684
+ set value(val) {
7685
+ lodash.exports.set(obj, path, val);
7686
+ }
7687
+ };
7688
+ }
7679
7689
  function useFormItem(messageType, _rules, validateState) {
7680
7690
  const formContext = inject(FORM_TOKEN);
7681
7691
  const ns2 = useNamespace("form");
@@ -7714,17 +7724,12 @@ function useFormItemValidate(props, _rules) {
7714
7724
  const computedField = computed(() => {
7715
7725
  return typeof props.field === "string" ? props.field : "";
7716
7726
  });
7717
- const fieldValue = computed({
7718
- get: () => {
7719
- const formData = formContext.data;
7720
- if (!formData || !props.field) {
7721
- return;
7722
- }
7723
- return formData[props.field];
7724
- },
7725
- set: (val) => {
7726
- formContext.data[props.field] = val;
7727
+ const fieldValue = computed(() => {
7728
+ const formData = formContext.data;
7729
+ if (!formData || !props.field) {
7730
+ return;
7727
7731
  }
7732
+ return getFieldValue(formData, props.field).value;
7728
7733
  });
7729
7734
  const getRuleByTrigger = (triggerVal) => {
7730
7735
  return _rules.value.filter((rule) => {
@@ -7793,13 +7798,16 @@ function useFormItemValidate(props, _rules) {
7793
7798
  if (!formContext.data || !props.field) {
7794
7799
  return;
7795
7800
  }
7796
- isResetting = true;
7797
- fieldValue.value = initFieldValue;
7801
+ const currentValue = getFieldValue(formContext.data, props.field);
7802
+ if (!lodash.exports.isEqual(currentValue.value, initFieldValue)) {
7803
+ isResetting = true;
7804
+ }
7805
+ currentValue.value = initFieldValue;
7798
7806
  await nextTick();
7799
7807
  clearValidate();
7800
7808
  };
7801
7809
  onMounted(() => {
7802
- initFieldValue = lodash.exports.cloneDeep(formContext.data[props.field]);
7810
+ initFieldValue = lodash.exports.clone(fieldValue.value);
7803
7811
  });
7804
7812
  return { validateState, validateMessage, validate, resetField, clearValidate };
7805
7813
  }
@@ -8258,7 +8266,6 @@ defineComponent({
8258
8266
  });
8259
8267
  const ns = useNamespace("tree");
8260
8268
  function useTreeNode(data) {
8261
- const { getChildren } = inject(USE_TREE_TOKEN);
8262
8269
  const nodeClass = computed(() => {
8263
8270
  var _a;
8264
8271
  return [ns.e("node"), ((_a = data.value) == null ? void 0 : _a.expanded) && ns.em("node", "open")];
@@ -8268,16 +8275,19 @@ function useTreeNode(data) {
8268
8275
  return { paddingLeft: `${NODE_INDENT * (((_a = data.value) == null ? void 0 : _a.level) - 1)}px` };
8269
8276
  });
8270
8277
  const nodeVLineClass = computed(() => {
8271
- var _a, _b;
8272
- return [!((_a = data.value) == null ? void 0 : _a.isLeaf) && ((_b = data.value) == null ? void 0 : _b.expanded) && ns.e("node-vline")];
8273
- });
8274
- const nodeVLineStyle = computed(() => {
8275
8278
  var _a;
8276
- return {
8277
- height: `${NODE_HEIGHT * (getChildren(data.value, { expanded: true }).length - 1) + NODE_HEIGHT / 2 + 1}px`,
8278
- left: `${NODE_INDENT * (((_a = data.value) == null ? void 0 : _a.level) - 1) + 9}px`,
8279
- top: `${NODE_HEIGHT}px`
8280
- };
8279
+ return [((_a = data.value) == null ? void 0 : _a.level) !== 1 && ns.e("node-vline")];
8280
+ });
8281
+ const nodeVLineStyles = computed(() => {
8282
+ if (!data.value || data.value.level === 1) {
8283
+ return [];
8284
+ }
8285
+ const { currentIndex = 0, parentChildNode = 0, level, expanded, isLeaf } = data.value;
8286
+ return Array.from({ length: data.value.level - 1 }).map((_, index2) => ({
8287
+ height: `${currentIndex + 1 === parentChildNode && index2 === 0 ? isLeaf || !expanded ? NODE_HEIGHT / 2 : NODE_HEIGHT : NODE_HEIGHT}px`,
8288
+ left: `${NODE_INDENT * (level - index2 - 2) + 9}px`,
8289
+ top: `0px`
8290
+ }));
8281
8291
  });
8282
8292
  const nodeHLineClass = computed(() => {
8283
8293
  var _a;
@@ -8297,7 +8307,7 @@ function useTreeNode(data) {
8297
8307
  nodeContentClass,
8298
8308
  nodeTitleClass,
8299
8309
  nodeVLineClass,
8300
- nodeVLineStyle,
8310
+ nodeVLineStyles,
8301
8311
  nodeHLineClass
8302
8312
  };
8303
8313
  }
@@ -8355,7 +8365,7 @@ var DTreeNode = defineComponent({
8355
8365
  nodeStyle,
8356
8366
  nodeContentClass,
8357
8367
  nodeVLineClass,
8358
- nodeVLineStyle,
8368
+ nodeVLineStyles,
8359
8369
  nodeHLineClass
8360
8370
  } = useTreeNode(data);
8361
8371
  const halfChecked = computed(() => {
@@ -8375,7 +8385,7 @@ var DTreeNode = defineComponent({
8375
8385
  halfchecked: halfChecked.value,
8376
8386
  modelValue: (_c = data.value) == null ? void 0 : _c.checked,
8377
8387
  "onUpdate:modelValue": () => {
8378
- toggleCheckNode(data.value);
8388
+ toggleCheckNode == null ? void 0 : toggleCheckNode(data.value);
8379
8389
  },
8380
8390
  onClick: (event) => {
8381
8391
  event.stopPropagation();
@@ -8384,13 +8394,13 @@ var DTreeNode = defineComponent({
8384
8394
  return createVNode("div", {
8385
8395
  "class": nodeClass.value,
8386
8396
  "style": nodeStyle.value
8387
- }, [createVNode("span", {
8397
+ }, [nodeVLineStyles.value.map((item) => createVNode("span", {
8388
8398
  "class": nodeVLineClass.value,
8389
- "style": nodeVLineStyle.value
8390
- }, null), createVNode("div", {
8399
+ "style": item
8400
+ }, null)), createVNode("div", {
8391
8401
  "class": nodeContentClass.value,
8392
8402
  "onClick": () => {
8393
- toggleSelectNode(data.value);
8403
+ toggleSelectNode == null ? void 0 : toggleSelectNode(data.value);
8394
8404
  }
8395
8405
  }, [createVNode("span", {
8396
8406
  "class": nodeHLineClass.value
@@ -8407,11 +8417,973 @@ var DTreeNode = defineComponent({
8407
8417
  }, [check.value && createVNode(Checkbox, checkboxProps2, null), slots.default ? renderSlot(useSlots(), "default", {
8408
8418
  nodeData: data
8409
8419
  }) : createVNode(DTreeNodeContent, {
8410
- "data": data
8420
+ "data": data.value
8411
8421
  }, null)])])]);
8412
8422
  };
8413
8423
  }
8414
8424
  });
8425
+ const virtualListProps = {
8426
+ data: {
8427
+ type: Array,
8428
+ default: () => []
8429
+ },
8430
+ component: {
8431
+ type: String,
8432
+ default: "div"
8433
+ },
8434
+ height: {
8435
+ type: Number,
8436
+ default: 100
8437
+ },
8438
+ itemHeight: {
8439
+ type: Number,
8440
+ default: 0
8441
+ },
8442
+ virtual: {
8443
+ type: Boolean,
8444
+ default: true
8445
+ },
8446
+ fullHeight: {
8447
+ type: Boolean
8448
+ },
8449
+ itemKey: {
8450
+ type: [String, Number, Function]
8451
+ }
8452
+ };
8453
+ const resizeObserverContainerProps = {
8454
+ height: {
8455
+ type: Number
8456
+ },
8457
+ offset: {
8458
+ type: Number || void 0
8459
+ },
8460
+ disabled: {
8461
+ type: Function
8462
+ },
8463
+ onInnerResize: {
8464
+ type: Function
8465
+ }
8466
+ };
8467
+ const scrollBarProps = {
8468
+ scrollTop: {
8469
+ type: Number
8470
+ },
8471
+ scrollHeight: {
8472
+ type: Number
8473
+ },
8474
+ height: {
8475
+ type: Number
8476
+ },
8477
+ count: {
8478
+ type: Number
8479
+ },
8480
+ onScroll: {
8481
+ type: Function
8482
+ },
8483
+ onStartMove: {
8484
+ type: Function
8485
+ },
8486
+ onStopMove: {
8487
+ type: Function
8488
+ }
8489
+ };
8490
+ const resizeObserverProps = {
8491
+ disabled: {
8492
+ type: Boolean
8493
+ },
8494
+ onResize: {
8495
+ type: Function
8496
+ }
8497
+ };
8498
+ function useVirtual(props) {
8499
+ const isVirtual = computed(() => {
8500
+ const {
8501
+ height,
8502
+ virtual
8503
+ } = props;
8504
+ return !!(virtual !== false && height);
8505
+ });
8506
+ const inVirtual = computed(() => {
8507
+ const {
8508
+ height,
8509
+ data
8510
+ } = props;
8511
+ return isVirtual.value && data && 20 * data.length > height;
8512
+ });
8513
+ return {
8514
+ isVirtual,
8515
+ inVirtual
8516
+ };
8517
+ }
8518
+ function useHeights(mergedData, getKey) {
8519
+ const instance = /* @__PURE__ */ new Map();
8520
+ let heights = /* @__PURE__ */ new Map();
8521
+ const updatedMark = ref(Symbol("update"));
8522
+ watch(mergedData, () => {
8523
+ heights = /* @__PURE__ */ new Map();
8524
+ updatedMark.value = Symbol("update");
8525
+ });
8526
+ let heightUpdateId = 0;
8527
+ function collectHeight() {
8528
+ heightUpdateId += 1;
8529
+ const currentId = heightUpdateId;
8530
+ Promise.resolve().then(() => {
8531
+ if (currentId !== heightUpdateId) {
8532
+ return;
8533
+ }
8534
+ instance.forEach((element, key) => {
8535
+ if (element && element.offsetParent) {
8536
+ const {
8537
+ offsetHeight
8538
+ } = element;
8539
+ if (heights.get(key) !== offsetHeight) {
8540
+ updatedMark.value = Symbol("update");
8541
+ heights.set(key, element.offsetHeight);
8542
+ }
8543
+ }
8544
+ });
8545
+ });
8546
+ }
8547
+ function setInstance(item, ins) {
8548
+ const key = getKey(item);
8549
+ if (ins) {
8550
+ instance.set(key, ins.$el || ins);
8551
+ collectHeight();
8552
+ } else {
8553
+ instance.delete(key);
8554
+ }
8555
+ }
8556
+ return [setInstance, collectHeight, heights, updatedMark];
8557
+ }
8558
+ var useOriginScroll = (isScrollAtTop, isScrollAtBottom) => {
8559
+ let lock = false;
8560
+ let lockTimeout = null;
8561
+ function lockScroll2() {
8562
+ if (lockTimeout) {
8563
+ clearTimeout(lockTimeout);
8564
+ }
8565
+ lock = true;
8566
+ lockTimeout = setTimeout(() => {
8567
+ lock = false;
8568
+ }, 50);
8569
+ }
8570
+ return (deltaY, smoothOffset = false) => {
8571
+ const originScroll = deltaY < 0 && isScrollAtTop.value || deltaY > 0 && isScrollAtBottom.value;
8572
+ if (smoothOffset && originScroll) {
8573
+ if (lockTimeout) {
8574
+ clearTimeout(lockTimeout);
8575
+ }
8576
+ lock = false;
8577
+ } else if (!originScroll || lock) {
8578
+ lockScroll2();
8579
+ }
8580
+ return !lock && originScroll;
8581
+ };
8582
+ };
8583
+ const isValid = (value) => {
8584
+ return value !== void 0 && value !== null && value !== "";
8585
+ };
8586
+ const isEmptyElement = (c) => {
8587
+ var _a, _b;
8588
+ return !!c && (c.type === Comment || c.type === Fragment && ((_a = c == null ? void 0 : c.children) == null ? void 0 : _a.length) === 0 || c.type === Text && ((_b = c == null ? void 0 : c.children) == null ? void 0 : _b.trim()) === "");
8589
+ };
8590
+ const flattenChildren = (children, filterEmpty = true) => {
8591
+ const temp = Array.isArray(children) ? children : [children];
8592
+ const res = [];
8593
+ temp.forEach((child) => {
8594
+ if (Array.isArray(child)) {
8595
+ res.push(...flattenChildren(child, filterEmpty));
8596
+ } else if (child && child.type === Fragment) {
8597
+ res.push(...flattenChildren(child.children, filterEmpty));
8598
+ } else if (child && isVNode(child)) {
8599
+ if (filterEmpty && !isEmptyElement(child)) {
8600
+ res.push(child);
8601
+ } else if (!filterEmpty) {
8602
+ res.push(child);
8603
+ }
8604
+ } else if (isValid(child)) {
8605
+ res.push(child);
8606
+ }
8607
+ });
8608
+ return res;
8609
+ };
8610
+ const findDOMNode = (instance) => {
8611
+ var _a;
8612
+ let node = ((_a = instance == null ? void 0 : instance.vnode) == null ? void 0 : _a.el) || instance && ((instance == null ? void 0 : instance.$el) || instance);
8613
+ while (node && !node.tagName) {
8614
+ node = node.nextSibling;
8615
+ }
8616
+ return node;
8617
+ };
8618
+ const isFF = typeof navigator === "object" && /Firefox/i.test(navigator.userAgent);
8619
+ function useFrameWheel(inVirtual, isScrollAtTop, isScrollAtBottom, onWheelDelta) {
8620
+ let offsetRef = 0;
8621
+ let nextFrame = null;
8622
+ let wheelValue = null;
8623
+ let isMouseScroll = false;
8624
+ const originScroll = useOriginScroll(isScrollAtTop, isScrollAtBottom);
8625
+ const onRawWheel = (event) => {
8626
+ var _a;
8627
+ if (!inVirtual.value) {
8628
+ return;
8629
+ }
8630
+ if (nextFrame) {
8631
+ window.cancelAnimationFrame(nextFrame);
8632
+ }
8633
+ const {
8634
+ deltaY
8635
+ } = event;
8636
+ offsetRef += deltaY;
8637
+ wheelValue = deltaY;
8638
+ if (originScroll(deltaY, false)) {
8639
+ return;
8640
+ }
8641
+ if (!isFF) {
8642
+ (_a = event == null ? void 0 : event.preventDefault) == null ? void 0 : _a.call(event);
8643
+ }
8644
+ nextFrame = window.requestAnimationFrame(() => {
8645
+ const patchMultiple = isMouseScroll ? 10 : 1;
8646
+ onWheelDelta(offsetRef * patchMultiple);
8647
+ offsetRef = 0;
8648
+ });
8649
+ };
8650
+ const onFireFoxScroll = (event) => {
8651
+ if (!inVirtual.value) {
8652
+ return;
8653
+ }
8654
+ isMouseScroll = event.detail === wheelValue;
8655
+ };
8656
+ return [onRawWheel, onFireFoxScroll];
8657
+ }
8658
+ const SMOOTH_PTG = 14 / 15;
8659
+ function useMobileTouchMove(inVirtual, listRef, callback) {
8660
+ let touched = false;
8661
+ let touchY = 0;
8662
+ let element = null;
8663
+ let interval = null;
8664
+ const onTouchMove = (e) => {
8665
+ if (touched) {
8666
+ const currentY = Math.ceil(e.touches[0].pageY);
8667
+ let offsetY = touchY - currentY;
8668
+ touchY = currentY;
8669
+ if (callback(offsetY)) {
8670
+ e.preventDefault();
8671
+ }
8672
+ if (interval) {
8673
+ clearInterval(interval);
8674
+ }
8675
+ interval = setInterval(() => {
8676
+ offsetY *= SMOOTH_PTG;
8677
+ if (!callback(offsetY, true) || Math.abs(offsetY) <= 0.1) {
8678
+ if (interval) {
8679
+ clearInterval(interval);
8680
+ }
8681
+ }
8682
+ }, 16);
8683
+ }
8684
+ };
8685
+ const cleanUpEvents = () => {
8686
+ if (element) {
8687
+ element.removeEventListener("touchmove", onTouchMove);
8688
+ element.removeEventListener("touchend", () => {
8689
+ touched = false;
8690
+ cleanUpEvents();
8691
+ });
8692
+ }
8693
+ };
8694
+ const onTouchEnd = () => {
8695
+ touched = false;
8696
+ cleanUpEvents();
8697
+ };
8698
+ const onTouchStart = (e) => {
8699
+ cleanUpEvents();
8700
+ if (e.touches.length === 1 && !touched) {
8701
+ touched = true;
8702
+ touchY = Math.ceil(e.touches[0].pageY);
8703
+ element = e.target;
8704
+ element.addEventListener("touchmove", onTouchMove, {
8705
+ passive: false
8706
+ });
8707
+ element.addEventListener("touchend", onTouchEnd);
8708
+ }
8709
+ };
8710
+ onMounted(() => {
8711
+ watch(inVirtual, (val) => {
8712
+ var _a, _b;
8713
+ (_a = listRef.value) == null ? void 0 : _a.removeEventListener("touchstart", onTouchStart);
8714
+ cleanUpEvents();
8715
+ if (interval) {
8716
+ clearInterval(interval);
8717
+ }
8718
+ if (val) {
8719
+ (_b = listRef.value) == null ? void 0 : _b.addEventListener("touchstart", onTouchStart, {
8720
+ passive: false
8721
+ });
8722
+ }
8723
+ }, {
8724
+ immediate: true
8725
+ });
8726
+ });
8727
+ }
8728
+ var ResizeObserver$1 = defineComponent({
8729
+ name: "ResizeObserver",
8730
+ props: resizeObserverProps,
8731
+ emits: ["resize"],
8732
+ setup(props, {
8733
+ slots
8734
+ }) {
8735
+ const state = reactive({
8736
+ width: 0,
8737
+ height: 0,
8738
+ offsetHeight: 0,
8739
+ offsetWidth: 0
8740
+ });
8741
+ const currentElement = ref(null);
8742
+ const resizeObserver = ref(null);
8743
+ const destroyObserver = () => {
8744
+ if (resizeObserver.value) {
8745
+ resizeObserver.value.disconnect();
8746
+ resizeObserver.value = null;
8747
+ }
8748
+ };
8749
+ const onTriggerResize = (entries) => {
8750
+ const {
8751
+ onResize
8752
+ } = props;
8753
+ const target = entries[0].target;
8754
+ const {
8755
+ width,
8756
+ height
8757
+ } = target.getBoundingClientRect();
8758
+ const {
8759
+ offsetWidth,
8760
+ offsetHeight
8761
+ } = target;
8762
+ const fixedWidth = Math.floor(width);
8763
+ const fixedHeight = Math.floor(height);
8764
+ if (state.width !== fixedWidth || state.height !== fixedHeight || state.offsetWidth !== offsetWidth || state.offsetHeight !== offsetHeight) {
8765
+ const size = {
8766
+ width: fixedWidth,
8767
+ height: fixedHeight,
8768
+ offsetWidth,
8769
+ offsetHeight
8770
+ };
8771
+ Object.assign(state, size);
8772
+ if (onResize) {
8773
+ Promise.resolve().then(() => {
8774
+ onResize(__spreadProps(__spreadValues({}, size), {
8775
+ offsetWidth,
8776
+ offsetHeight
8777
+ }), target);
8778
+ });
8779
+ }
8780
+ }
8781
+ };
8782
+ const instance = getCurrentInstance();
8783
+ const registerObserver = () => {
8784
+ const {
8785
+ disabled
8786
+ } = props;
8787
+ if (disabled) {
8788
+ destroyObserver();
8789
+ return;
8790
+ }
8791
+ if (instance) {
8792
+ const element = findDOMNode(instance);
8793
+ const elementChanged = element !== currentElement.value;
8794
+ if (elementChanged) {
8795
+ destroyObserver();
8796
+ currentElement.value = element;
8797
+ }
8798
+ if (!resizeObserver.value && element) {
8799
+ resizeObserver.value = new ResizeObserver(onTriggerResize);
8800
+ resizeObserver.value.observe(element);
8801
+ }
8802
+ }
8803
+ };
8804
+ onMounted(() => {
8805
+ registerObserver();
8806
+ });
8807
+ onUpdated(() => {
8808
+ registerObserver();
8809
+ });
8810
+ onUnmounted(() => {
8811
+ destroyObserver();
8812
+ });
8813
+ return () => {
8814
+ var _a;
8815
+ return (_a = slots.default) == null ? void 0 : _a.call(slots)[0];
8816
+ };
8817
+ }
8818
+ });
8819
+ const INIT_INNER_STYLE = {
8820
+ display: "flex",
8821
+ flexDirection: "column"
8822
+ };
8823
+ var ResizeObserverContainer = defineComponent({
8824
+ name: "ResizeObserverContainer",
8825
+ props: resizeObserverContainerProps,
8826
+ setup(props, ctx) {
8827
+ const {
8828
+ height,
8829
+ offset: offset2
8830
+ } = toRefs(props);
8831
+ const outerStyle = ref({});
8832
+ const innerStyle = ref(INIT_INNER_STYLE);
8833
+ watch([() => height.value, () => offset2.value], () => {
8834
+ if (props.offset !== void 0) {
8835
+ outerStyle.value = {
8836
+ height: `${height.value}px`,
8837
+ position: "relative",
8838
+ overflow: "hidden"
8839
+ };
8840
+ innerStyle.value = __spreadProps(__spreadValues({}, innerStyle.value), {
8841
+ transform: `translateY(${offset2.value}px)`,
8842
+ position: "absolute",
8843
+ left: 0,
8844
+ right: 0,
8845
+ top: 0
8846
+ });
8847
+ }
8848
+ });
8849
+ return () => createVNode("div", {
8850
+ "style": outerStyle.value
8851
+ }, [createVNode(ResizeObserver$1, {
8852
+ "onResize": ({
8853
+ offsetHeight
8854
+ }) => {
8855
+ if (offsetHeight && props.onInnerResize) {
8856
+ props.onInnerResize();
8857
+ }
8858
+ }
8859
+ }, {
8860
+ default: () => {
8861
+ var _a, _b;
8862
+ return [createVNode("div", {
8863
+ "style": innerStyle.value
8864
+ }, [(_b = (_a = ctx.slots).default) == null ? void 0 : _b.call(_a)])];
8865
+ }
8866
+ })]);
8867
+ }
8868
+ });
8869
+ function getPageY(e) {
8870
+ return "touches" in e ? e.touches[0].pageY : e.pageY;
8871
+ }
8872
+ var ScrollBar = defineComponent({
8873
+ name: "ScrollBar",
8874
+ props: scrollBarProps,
8875
+ setup(props, ctx) {
8876
+ const scrollbarRef = ref(null);
8877
+ const thumbRef = ref(null);
8878
+ const moveRaf = ref(0);
8879
+ const state = reactive({
8880
+ dragging: false,
8881
+ pageY: null,
8882
+ startTop: null,
8883
+ visible: false
8884
+ });
8885
+ const visibleTimeout = ref(null);
8886
+ const canScroll = computed(() => {
8887
+ return (props.scrollHeight || 0) > (props.height || 0);
8888
+ });
8889
+ const getSpinHeight = () => {
8890
+ const {
8891
+ height = 0,
8892
+ count = 0
8893
+ } = props;
8894
+ let baseHeight = height / count * 10;
8895
+ baseHeight = Math.max(baseHeight, 20);
8896
+ baseHeight = Math.min(baseHeight, height / 2);
8897
+ return Math.floor(baseHeight);
8898
+ };
8899
+ const getEnableScrollRange = () => {
8900
+ const {
8901
+ scrollHeight = 0,
8902
+ height = 0
8903
+ } = props;
8904
+ return scrollHeight - height || 0;
8905
+ };
8906
+ const getEnableHeightRange = () => {
8907
+ const {
8908
+ height = 0
8909
+ } = props;
8910
+ const spinHeight = getSpinHeight();
8911
+ return height - spinHeight || 0;
8912
+ };
8913
+ const getTop = () => {
8914
+ const {
8915
+ scrollTop = 0
8916
+ } = props;
8917
+ const enableScrollRange = getEnableScrollRange();
8918
+ const enableHeightRange = getEnableHeightRange();
8919
+ if (scrollTop === 0 || enableScrollRange === 0) {
8920
+ return 0;
8921
+ }
8922
+ const ptg = scrollTop / enableScrollRange;
8923
+ return ptg * enableHeightRange;
8924
+ };
8925
+ const onMouseMove = (e) => {
8926
+ const {
8927
+ dragging,
8928
+ pageY,
8929
+ startTop
8930
+ } = state;
8931
+ const {
8932
+ onScroll
8933
+ } = props;
8934
+ window.cancelAnimationFrame(moveRaf.value);
8935
+ if (dragging) {
8936
+ const offsetY = getPageY(e) - (pageY || 0);
8937
+ const newTop = (startTop || 0) + offsetY;
8938
+ const enableScrollRange = getEnableScrollRange();
8939
+ const enableHeightRange = getEnableHeightRange();
8940
+ const ptg = enableHeightRange ? newTop / enableHeightRange : 0;
8941
+ const newScrollTop = Math.ceil(ptg * enableScrollRange);
8942
+ moveRaf.value = window.requestAnimationFrame(() => {
8943
+ if (onScroll) {
8944
+ onScroll(newScrollTop);
8945
+ }
8946
+ });
8947
+ }
8948
+ };
8949
+ const onMouseUp = (callback) => {
8950
+ const {
8951
+ onStopMove
8952
+ } = props;
8953
+ state.dragging = false;
8954
+ if (onStopMove) {
8955
+ onStopMove();
8956
+ }
8957
+ if (callback) {
8958
+ callback();
8959
+ }
8960
+ };
8961
+ const onMouseDown = (e, callback) => {
8962
+ var _a, _b;
8963
+ const {
8964
+ onStartMove
8965
+ } = props;
8966
+ Object.assign(state, {
8967
+ dragging: true,
8968
+ pageY: getPageY(e),
8969
+ startTop: getTop()
8970
+ });
8971
+ if (onStartMove) {
8972
+ onStartMove();
8973
+ }
8974
+ window.addEventListener("mousemove", onMouseMove);
8975
+ window.addEventListener("mouseup", () => onMouseUp(callback));
8976
+ (_a = thumbRef == null ? void 0 : thumbRef.value) == null ? void 0 : _a.addEventListener("touchmove", onMouseMove, {
8977
+ passive: false
8978
+ });
8979
+ (_b = thumbRef == null ? void 0 : thumbRef.value) == null ? void 0 : _b.addEventListener("touchend", () => onMouseUp(callback));
8980
+ e.stopPropagation();
8981
+ e.preventDefault();
8982
+ };
8983
+ const removeEvents = () => {
8984
+ var _a, _b, _c, _d;
8985
+ window.removeEventListener("mousemove", onMouseMove);
8986
+ window.removeEventListener("mouseup", () => onMouseUp(removeEvents));
8987
+ (_a = scrollbarRef == null ? void 0 : scrollbarRef.value) == null ? void 0 : _a.removeEventListener("touchstart", (e) => {
8988
+ e.preventDefault();
8989
+ }, {
8990
+ passive: false
8991
+ });
8992
+ (_b = thumbRef == null ? void 0 : thumbRef.value) == null ? void 0 : _b.removeEventListener("touchstart", (e) => onMouseDown(e, removeEvents), {
8993
+ passive: false
8994
+ });
8995
+ (_c = thumbRef == null ? void 0 : thumbRef.value) == null ? void 0 : _c.removeEventListener("touchmove", onMouseMove, {
8996
+ passive: false
8997
+ });
8998
+ (_d = thumbRef == null ? void 0 : thumbRef.value) == null ? void 0 : _d.removeEventListener("touchend", () => onMouseUp(removeEvents));
8999
+ window.cancelAnimationFrame(moveRaf.value);
9000
+ };
9001
+ const onContainerMouseDown = (e) => {
9002
+ e.stopPropagation();
9003
+ e.preventDefault();
9004
+ };
9005
+ onBeforeUnmount(() => {
9006
+ removeEvents();
9007
+ if (visibleTimeout.value) {
9008
+ clearTimeout(visibleTimeout.value);
9009
+ }
9010
+ });
9011
+ onMounted(() => {
9012
+ var _a, _b;
9013
+ (_a = scrollbarRef == null ? void 0 : scrollbarRef.value) == null ? void 0 : _a.addEventListener("touchstart", (e) => {
9014
+ e.preventDefault();
9015
+ }, {
9016
+ passive: false
9017
+ });
9018
+ (_b = thumbRef.value) == null ? void 0 : _b.addEventListener("touchstart", (e) => onMouseDown(e, removeEvents), {
9019
+ passive: false
9020
+ });
9021
+ });
9022
+ const onShowBar = () => {
9023
+ if (visibleTimeout.value) {
9024
+ clearTimeout(visibleTimeout.value);
9025
+ }
9026
+ state.visible = true;
9027
+ visibleTimeout.value = setTimeout(() => {
9028
+ state.visible = false;
9029
+ }, 1e3);
9030
+ };
9031
+ ctx.expose({
9032
+ onShowBar
9033
+ });
9034
+ return () => {
9035
+ const display = canScroll.value && state.visible ? void 0 : "none";
9036
+ return createVNode("div", {
9037
+ "ref": scrollbarRef,
9038
+ "style": {
9039
+ width: "8px",
9040
+ top: 0,
9041
+ bottom: 0,
9042
+ right: 0,
9043
+ position: "absolute",
9044
+ display
9045
+ },
9046
+ "onMousedown": onContainerMouseDown,
9047
+ "onMousemove": onShowBar
9048
+ }, [createVNode("div", {
9049
+ "ref": thumbRef,
9050
+ "style": {
9051
+ width: "100%",
9052
+ height: getSpinHeight() + "px",
9053
+ top: getTop() + "px",
9054
+ left: 0,
9055
+ position: "absolute",
9056
+ background: "rgba(0, 0, 0, 0.5)",
9057
+ borderRadius: "99px",
9058
+ cursor: "pointer",
9059
+ userSelect: "none"
9060
+ },
9061
+ "onMousedown": (e) => onMouseDown(e, removeEvents)
9062
+ }, null)]);
9063
+ };
9064
+ }
9065
+ });
9066
+ function _isSlot(s) {
9067
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
9068
+ }
9069
+ const Item = ({
9070
+ setRef
9071
+ }, {
9072
+ slots
9073
+ }) => {
9074
+ var _a;
9075
+ const children = flattenChildren((_a = slots.default) == null ? void 0 : _a.call(slots));
9076
+ return children && children.length ? cloneVNode(children[0], {
9077
+ ref: setRef
9078
+ }) : children;
9079
+ };
9080
+ Item.props = {
9081
+ setRef: {
9082
+ type: Function
9083
+ }
9084
+ };
9085
+ function renderChildren(list, startIndex, endIndex, setNodeRef, {
9086
+ getKey
9087
+ }, renderFunc) {
9088
+ if (renderFunc === void 0) {
9089
+ return "";
9090
+ }
9091
+ return list.slice(startIndex, endIndex + 1).map((item, index2) => {
9092
+ const eleIndex = startIndex + index2;
9093
+ const node = renderFunc(item, eleIndex, {});
9094
+ const key = getKey(item);
9095
+ return createVNode(Item, {
9096
+ "key": key,
9097
+ "setRef": (ele) => setNodeRef(item, ele)
9098
+ }, _isSlot(node) ? node : {
9099
+ default: () => [node]
9100
+ });
9101
+ });
9102
+ }
9103
+ const ScrollStyle = {
9104
+ overflowY: "auto",
9105
+ overflowAnchor: "none"
9106
+ };
9107
+ var VirtualList = defineComponent({
9108
+ name: "DVirtualList",
9109
+ props: virtualListProps,
9110
+ setup(props, ctx) {
9111
+ const {
9112
+ isVirtual,
9113
+ inVirtual
9114
+ } = useVirtual(props);
9115
+ const state = reactive({
9116
+ scrollTop: 0,
9117
+ scrollMoving: false
9118
+ });
9119
+ const data = computed(() => {
9120
+ return props.data || [];
9121
+ });
9122
+ const mergedData = shallowRef([]);
9123
+ watch(data, () => {
9124
+ mergedData.value = toRaw(data.value).slice();
9125
+ }, {
9126
+ immediate: true
9127
+ });
9128
+ const itemKey = shallowRef(null);
9129
+ watch(() => props.itemKey, (val) => {
9130
+ if (typeof val === "function") {
9131
+ itemKey.value = val;
9132
+ } else {
9133
+ if (val) {
9134
+ itemKey.value = (item) => item == null ? void 0 : item[val];
9135
+ }
9136
+ }
9137
+ }, {
9138
+ immediate: true
9139
+ });
9140
+ const componentRef = ref();
9141
+ const fillerInnerRef = ref();
9142
+ const barRef = ref();
9143
+ const getKey = (item) => {
9144
+ if (!itemKey.value || !props.itemKey) {
9145
+ return;
9146
+ }
9147
+ return itemKey.value(item);
9148
+ };
9149
+ const [setInstance, collectHeight, heights, updatedMark] = useHeights(mergedData, getKey);
9150
+ const calRes = reactive({
9151
+ scrollHeight: void 0,
9152
+ start: 0,
9153
+ end: 0,
9154
+ offset: void 0
9155
+ });
9156
+ const offsetHeight = ref(0);
9157
+ onMounted(() => {
9158
+ nextTick(() => {
9159
+ var _a;
9160
+ offsetHeight.value = ((_a = fillerInnerRef.value) == null ? void 0 : _a.offsetHeight) || 0;
9161
+ });
9162
+ });
9163
+ onUpdated(() => {
9164
+ nextTick(() => {
9165
+ var _a;
9166
+ offsetHeight.value = ((_a = fillerInnerRef.value) == null ? void 0 : _a.offsetHeight) || 0;
9167
+ });
9168
+ });
9169
+ watch([isVirtual, mergedData], () => {
9170
+ if (!isVirtual.value) {
9171
+ Object.assign(calRes, {
9172
+ scrollHeight: void 0,
9173
+ start: 0,
9174
+ end: mergedData.value.length - 1,
9175
+ offset: void 0
9176
+ });
9177
+ }
9178
+ }, {
9179
+ immediate: true
9180
+ });
9181
+ watch([isVirtual, mergedData, offsetHeight, inVirtual], () => {
9182
+ if (isVirtual.value && !inVirtual.value) {
9183
+ Object.assign(calRes, {
9184
+ scrollHeight: offsetHeight.value,
9185
+ start: 0,
9186
+ end: mergedData.value.length - 1,
9187
+ offset: void 0
9188
+ });
9189
+ }
9190
+ }, {
9191
+ immediate: true
9192
+ });
9193
+ watch([inVirtual, isVirtual, () => state.scrollTop, mergedData, updatedMark, () => props.height, offsetHeight], () => {
9194
+ if (!isVirtual.value || !inVirtual.value) {
9195
+ return;
9196
+ }
9197
+ let itemTop = 0;
9198
+ let startIndex;
9199
+ let startOffset;
9200
+ let endIndex;
9201
+ const mergedDataValue = unref(mergedData);
9202
+ const scrollTop = state.scrollTop;
9203
+ const {
9204
+ height
9205
+ } = props;
9206
+ const scrollTopHeight = scrollTop + height;
9207
+ for (let i = 0; i < mergedDataValue.length; i += 1) {
9208
+ const mergedDataItem = mergedDataValue[i];
9209
+ let cacheHeight;
9210
+ if (props.itemKey) {
9211
+ const key = getKey(mergedDataItem);
9212
+ cacheHeight = heights.get(key);
9213
+ }
9214
+ if (cacheHeight === void 0) {
9215
+ cacheHeight = props.itemHeight || 20;
9216
+ }
9217
+ const currentItemBottom = itemTop + cacheHeight;
9218
+ if (startIndex === void 0 && currentItemBottom >= scrollTop) {
9219
+ startIndex = i;
9220
+ startOffset = itemTop;
9221
+ }
9222
+ if (endIndex === void 0 && currentItemBottom > scrollTopHeight) {
9223
+ endIndex = i;
9224
+ }
9225
+ itemTop = currentItemBottom;
9226
+ }
9227
+ if (startIndex === void 0) {
9228
+ startIndex = 0;
9229
+ startOffset = 0;
9230
+ }
9231
+ if (endIndex === void 0) {
9232
+ endIndex = mergedDataValue.length - 1;
9233
+ }
9234
+ endIndex = Math.min(endIndex + 1, mergedDataValue.length);
9235
+ Object.assign(calRes, {
9236
+ scrollHeight: itemTop,
9237
+ start: startIndex,
9238
+ end: endIndex,
9239
+ offset: startOffset
9240
+ });
9241
+ }, {
9242
+ immediate: true
9243
+ });
9244
+ const maxScrollHeight = computed(() => (calRes.scrollHeight || 0) - props.height);
9245
+ const keepInRange = (newScrollTop) => {
9246
+ let newTop = newScrollTop;
9247
+ if (!Number.isNaN(maxScrollHeight.value)) {
9248
+ newTop = Math.min(newTop, maxScrollHeight.value);
9249
+ }
9250
+ newTop = Math.max(newTop, 0);
9251
+ return newTop;
9252
+ };
9253
+ const isScrollAtTop = computed(() => state.scrollTop <= 0);
9254
+ const isScrollAtBottom = computed(() => state.scrollTop >= maxScrollHeight.value);
9255
+ const originScroll = useOriginScroll(isScrollAtTop, isScrollAtBottom);
9256
+ const syncScrollTop = (newTop) => {
9257
+ let value;
9258
+ if (typeof newTop === "function") {
9259
+ value = newTop(state.scrollTop);
9260
+ } else {
9261
+ value = newTop;
9262
+ }
9263
+ const alignedTop = keepInRange(value);
9264
+ if (componentRef.value) {
9265
+ componentRef.value.scrollTop = alignedTop;
9266
+ }
9267
+ state.scrollTop = alignedTop;
9268
+ };
9269
+ const onScrollBar = (newScrollTop) => {
9270
+ const newTop = newScrollTop;
9271
+ syncScrollTop(newTop);
9272
+ };
9273
+ const onComponentScroll = (e) => {
9274
+ var _a, _b;
9275
+ const {
9276
+ scrollTop: newScrollTop
9277
+ } = e.currentTarget;
9278
+ if (Math.abs(newScrollTop - state.scrollTop) >= 1) {
9279
+ syncScrollTop(newScrollTop);
9280
+ }
9281
+ (_b = (_a = barRef == null ? void 0 : barRef.value) == null ? void 0 : _a.onShowBar) == null ? void 0 : _b.call(_a);
9282
+ ctx.emit("scroll", e);
9283
+ };
9284
+ const [onRawWheel, onFireFoxScroll] = useFrameWheel(isVirtual, isScrollAtTop, isScrollAtBottom, (offsetY) => {
9285
+ syncScrollTop((top) => {
9286
+ const newTop = top + offsetY;
9287
+ return newTop;
9288
+ });
9289
+ });
9290
+ useMobileTouchMove(isVirtual, componentRef, (deltaY, smoothOffset) => {
9291
+ if (originScroll(deltaY, !!smoothOffset)) {
9292
+ return false;
9293
+ }
9294
+ onRawWheel({
9295
+ deltaY
9296
+ });
9297
+ return true;
9298
+ });
9299
+ const onMozMousePixelScroll = (e) => {
9300
+ if (isVirtual.value) {
9301
+ e.preventDefault();
9302
+ }
9303
+ };
9304
+ const removeEventListener = () => {
9305
+ if (componentRef.value) {
9306
+ componentRef.value.removeEventListener("wheel", onRawWheel, {
9307
+ passive: false
9308
+ });
9309
+ componentRef.value.removeEventListener("DOMMouseScroll", onFireFoxScroll);
9310
+ componentRef.value.removeEventListener("MozMousePixelScroll", onMozMousePixelScroll);
9311
+ }
9312
+ };
9313
+ watchEffect(() => {
9314
+ nextTick(() => {
9315
+ if (componentRef.value) {
9316
+ removeEventListener();
9317
+ componentRef.value.addEventListener("wheel", onRawWheel, {
9318
+ passive: false
9319
+ });
9320
+ componentRef.value.addEventListener("DOMMouseScroll", onFireFoxScroll);
9321
+ componentRef.value.addEventListener("MozMousePixelScroll", onMozMousePixelScroll);
9322
+ }
9323
+ });
9324
+ });
9325
+ onBeforeUnmount(() => {
9326
+ removeEventListener();
9327
+ });
9328
+ const componentStyle = computed(() => {
9329
+ let cs = null;
9330
+ if (props.height) {
9331
+ cs = __spreadValues({
9332
+ maxHeight: isVirtual.value ? props.height + "px" : void 0
9333
+ }, ScrollStyle);
9334
+ if (isVirtual.value) {
9335
+ cs.overflowY = "hidden";
9336
+ if (state.scrollMoving) {
9337
+ cs.pointerEvents = "none";
9338
+ }
9339
+ }
9340
+ }
9341
+ return cs;
9342
+ });
9343
+ watch([() => calRes.start, () => calRes.end, mergedData], () => {
9344
+ const renderList = mergedData.value.slice(calRes.start, calRes.end + 1);
9345
+ ctx.emit("show-change", renderList, mergedData.value);
9346
+ }, {
9347
+ flush: "post"
9348
+ });
9349
+ return () => {
9350
+ const Component = props.component;
9351
+ return createVNode("div", {
9352
+ "style": {
9353
+ position: "relative"
9354
+ }
9355
+ }, [createVNode(Component, {
9356
+ "style": componentStyle.value,
9357
+ "ref": componentRef,
9358
+ "onScroll": onComponentScroll
9359
+ }, {
9360
+ default: () => [createVNode(ResizeObserverContainer, {
9361
+ "height": calRes.scrollHeight,
9362
+ "offset": calRes.offset,
9363
+ "onInnerResize": collectHeight,
9364
+ "ref": fillerInnerRef
9365
+ }, {
9366
+ default: () => renderChildren(mergedData.value, calRes.start, calRes.end, setInstance, {
9367
+ getKey
9368
+ }, ctx.slots.item)
9369
+ })]
9370
+ }), isVirtual.value && createVNode(ScrollBar, {
9371
+ "ref": barRef,
9372
+ "scrollTop": state.scrollTop,
9373
+ "height": props.height,
9374
+ "scrollHeight": calRes.scrollHeight,
9375
+ "count": mergedData.value.length,
9376
+ "onScroll": onScrollBar,
9377
+ "onStartMove": () => {
9378
+ state.scrollMoving = true;
9379
+ },
9380
+ "onStopMove": () => {
9381
+ state.scrollMoving = false;
9382
+ }
9383
+ }, null)]);
9384
+ };
9385
+ }
9386
+ });
8415
9387
  function useToggle() {
8416
9388
  return function useToggle2(data, core) {
8417
9389
  const { getNode, setNodeValue } = core;
@@ -8463,7 +9435,7 @@ function omit(obj, ...keys) {
8463
9435
  }
8464
9436
  function generateInnerTree(tree2, key = "children", level = 0, path = []) {
8465
9437
  level++;
8466
- return tree2.reduce((acc, item) => {
9438
+ return tree2.reduce((acc, item, currentIndex) => {
8467
9439
  var _a, _b;
8468
9440
  const newItem = Object.assign({}, item);
8469
9441
  if (newItem.id === void 0) {
@@ -8471,6 +9443,8 @@ function generateInnerTree(tree2, key = "children", level = 0, path = []) {
8471
9443
  newItem.idType = "random";
8472
9444
  }
8473
9445
  newItem.level = level;
9446
+ newItem.parentChildNode = tree2.length;
9447
+ newItem.currentIndex = currentIndex;
8474
9448
  if (path.length > 0 && ((_a = path[path.length - 1]) == null ? void 0 : _a.level) >= level) {
8475
9449
  while (((_b = path[path.length - 1]) == null ? void 0 : _b.level) >= level) {
8476
9450
  path.pop();
@@ -8493,11 +9467,21 @@ const DEFAULT_CONFIG = {
8493
9467
  recursive: true
8494
9468
  };
8495
9469
  function useCore() {
9470
+ const nodeMap = /* @__PURE__ */ new Map();
8496
9471
  return function useCore2(data) {
8497
9472
  const getLevel = (node) => {
8498
9473
  return data.value.find((item) => item.id === node.id).level;
8499
9474
  };
8500
9475
  const getChildren = (node, userConfig = DEFAULT_CONFIG) => {
9476
+ if (node.isLeaf) {
9477
+ return [];
9478
+ }
9479
+ if (node.id && nodeMap.has(node.id)) {
9480
+ const cacheNode = nodeMap.get(node.id);
9481
+ if (cacheNode) {
9482
+ return cacheNode;
9483
+ }
9484
+ }
8501
9485
  const getInnerExpendedTree = () => {
8502
9486
  return computed(() => {
8503
9487
  let excludeNodes = [];
@@ -8507,7 +9491,7 @@ function useCore() {
8507
9491
  if (excludeNodes.map((innerNode) => innerNode.id).includes(item.id)) {
8508
9492
  continue;
8509
9493
  }
8510
- if (item.expanded !== true) {
9494
+ if (item.expanded !== true && !item.isLeaf) {
8511
9495
  excludeNodes = getChildren(item);
8512
9496
  }
8513
9497
  result2.push(item);
@@ -8526,6 +9510,9 @@ function useCore() {
8526
9510
  result.push(treeData.value[i]);
8527
9511
  }
8528
9512
  }
9513
+ if (node.id) {
9514
+ nodeMap.set(node.id, result);
9515
+ }
8529
9516
  return result;
8530
9517
  };
8531
9518
  const getParent = (node) => {
@@ -8555,11 +9542,16 @@ function useCore() {
8555
9542
  return data.value.find((item) => item.id === node.id);
8556
9543
  };
8557
9544
  const setNodeValue = (node, key, value) => {
9545
+ nodeMap.clear();
8558
9546
  data.value[getIndex(node)][key] = value;
8559
9547
  };
8560
9548
  const setTree = (newTree) => {
9549
+ nodeMap.clear();
8561
9550
  data.value = generateInnerTree(newTree);
8562
9551
  };
9552
+ onUnmounted(() => {
9553
+ nodeMap.clear();
9554
+ });
8563
9555
  return {
8564
9556
  getLevel,
8565
9557
  getChildren,
@@ -8756,6 +9748,9 @@ const treeProps = {
8756
9748
  check: {
8757
9749
  type: [Boolean, String],
8758
9750
  default: false
9751
+ },
9752
+ height: {
9753
+ type: [Number, String]
8759
9754
  }
8760
9755
  };
8761
9756
  var tree = "";
@@ -8792,28 +9787,43 @@ var Tree = defineComponent({
8792
9787
  expose({
8793
9788
  treeFactory
8794
9789
  });
9790
+ const renderDTreeNode = (treeNode) => slots.default ? renderSlot(useSlots(), "default", {
9791
+ treeFactory,
9792
+ nodeData: treeNode
9793
+ }) : createVNode(DTreeNode, {
9794
+ "data": treeNode,
9795
+ "check": check.value
9796
+ }, {
9797
+ default: () => slots.content ? renderSlot(useSlots(), "content", {
9798
+ nodeData: treeNode
9799
+ }) : createVNode(DTreeNodeContent, {
9800
+ "data": treeNode
9801
+ }, null),
9802
+ icon: () => slots.icon ? renderSlot(useSlots(), "icon", {
9803
+ nodeData: treeNode,
9804
+ toggleNode
9805
+ }) : createVNode(DTreeNodeToggle, {
9806
+ "data": treeNode
9807
+ }, null)
9808
+ });
8795
9809
  return () => {
8796
- return createVNode("div", {
9810
+ const Component = props.height ? VirtualList : "div";
9811
+ const treeData = getExpendedTree == null ? void 0 : getExpendedTree().value;
9812
+ const vSlotsProps = {
9813
+ default: props.height || (() => treeData == null ? void 0 : treeData.map(renderDTreeNode)),
9814
+ item: props.height && ((treeNode) => renderDTreeNode(treeNode))
9815
+ };
9816
+ let virtualListProps2 = {};
9817
+ if (props.height) {
9818
+ virtualListProps2 = {
9819
+ height: props.height,
9820
+ data: treeData,
9821
+ itemHeight: NODE_HEIGHT
9822
+ };
9823
+ }
9824
+ return createVNode(Component, mergeProps({
8797
9825
  "class": ns2.b()
8798
- }, [getExpendedTree == null ? void 0 : getExpendedTree().value.map((treeNode) => slots.default ? renderSlot(useSlots(), "default", {
8799
- treeFactory,
8800
- nodeData: treeNode
8801
- }) : createVNode(DTreeNode, {
8802
- "data": treeNode,
8803
- "check": check.value
8804
- }, {
8805
- default: () => slots.content ? renderSlot(useSlots(), "content", {
8806
- nodeData: treeNode
8807
- }) : createVNode(DTreeNodeContent, {
8808
- "data": treeNode
8809
- }, null),
8810
- icon: () => slots.icon ? renderSlot(useSlots(), "icon", {
8811
- nodeData: treeNode,
8812
- toggleNode
8813
- }) : createVNode(DTreeNodeToggle, {
8814
- "data": treeNode
8815
- }, null)
8816
- }))]);
9826
+ }, virtualListProps2), vSlotsProps);
8817
9827
  };
8818
9828
  }
8819
9829
  });