@sdata/web-vue 3.3.0 → 3.4.0

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 (97) hide show
  1. package/dist/sd.css +16 -12
  2. package/dist/sd.min.css +1 -1
  3. package/es/_components/select-view/select-view.d.ts +1 -1
  4. package/es/_components/select-view/style/index.css +2 -5
  5. package/es/_components/virtual-list/interface.d.ts +13 -6
  6. package/es/_components/virtual-list/style/index.scss +3 -1
  7. package/es/_components/virtual-list/virtual-list.vue.d.ts +31 -77
  8. package/es/_components/virtual-list/virtual-list.vue_vue_type_script_setup_true_lang.js +180 -503
  9. package/es/auto-complete/auto-complete.d.ts +1 -1
  10. package/es/auto-complete/auto-complete.js +3 -1
  11. package/es/auto-complete/index.d.ts +3 -3
  12. package/es/card/card.d.ts +3 -3
  13. package/es/card/index.d.ts +6 -6
  14. package/es/cascader/base-cascader-panel.d.ts +1 -1
  15. package/es/cascader/cascader-option.d.ts +1 -1
  16. package/es/cascader/cascader-option.js +8 -3
  17. package/es/cascader/cascader-panel.vue.d.ts +1 -1
  18. package/es/cascader/cascader-search-panel.d.ts +1 -1
  19. package/es/cascader/cascader.vue.d.ts +2 -2
  20. package/es/cascader/style/index.css +4 -1
  21. package/es/cascader/style/index.d.ts +1 -0
  22. package/es/cascader/style/index.scss +4 -1
  23. package/es/config-provider/config-provider.vue.d.ts +1 -1
  24. package/es/config-provider/index.d.ts +3 -3
  25. package/es/descriptions/descriptions.d.ts +2 -2
  26. package/es/descriptions/index.d.ts +6 -6
  27. package/es/drawer/drawer.vue.d.ts +2 -2
  28. package/es/drawer/index.d.ts +5 -5
  29. package/es/dropdown/dropdown-panel.vue.d.ts +1 -1
  30. package/es/ellipsis/ellipsis.vue.d.ts +1 -1
  31. package/es/ellipsis/ellipsis.vue_vue_type_script_setup_true_lang.js +1 -1
  32. package/es/ellipsis/index.d.ts +6 -6
  33. package/es/ellipsis/performant-ellipsis.vue.d.ts +1 -1
  34. package/es/image/preview-group.vue.d.ts +1 -1
  35. package/es/index.css +16 -12
  36. package/es/input-tag/style/index.css +2 -5
  37. package/es/input-tag/style/input-tag.scss +1 -3
  38. package/es/link/index.d.ts +6 -6
  39. package/es/link/link.vue.d.ts +2 -2
  40. package/es/list/list-item-meta.vue.d.ts +2 -2
  41. package/es/list/list-item-meta.vue_vue_type_script_setup_true_lang.js +10 -3
  42. package/es/list/style/index.css +5 -0
  43. package/es/list/style/index.d.ts +1 -0
  44. package/es/list/style/index.scss +6 -0
  45. package/es/menu/item.d.ts +1 -1
  46. package/es/modal/index.d.ts +5 -5
  47. package/es/modal/modal.vue.d.ts +2 -2
  48. package/es/progress/line.vue.d.ts +1 -1
  49. package/es/qr-code/index.d.ts +12 -12
  50. package/es/qr-code/qr-code.vue.d.ts +4 -4
  51. package/es/select/index.d.ts +5 -5
  52. package/es/select/select-dropdown.vue.d.ts +1 -1
  53. package/es/select/select.d.ts +2 -2
  54. package/es/select/select.js +4 -2
  55. package/es/select/style/index.d.ts +1 -0
  56. package/es/slider/index.d.ts +3 -3
  57. package/es/slider/slider.vue.d.ts +1 -1
  58. package/es/spin/index.d.ts +3 -3
  59. package/es/spin/spin.d.ts +1 -1
  60. package/es/statistic/index.d.ts +3 -3
  61. package/es/statistic/statistic.vue.d.ts +1 -1
  62. package/es/table/index.d.ts +13 -7
  63. package/es/table/style/index.css +4 -1
  64. package/es/table/style/index.scss +6 -1
  65. package/es/table/table-column.d.ts +1 -1
  66. package/es/table/table-td.d.ts +1 -1
  67. package/es/table/table.d.ts +3 -1
  68. package/es/table/table.js +66 -34
  69. package/es/tabs/index.d.ts +3 -3
  70. package/es/tabs/tabs.d.ts +1 -1
  71. package/es/tag/index.d.ts +6 -6
  72. package/es/tag/style/index.css +1 -1
  73. package/es/tag/style/index.scss +1 -1
  74. package/es/tag/tag.vue.d.ts +2 -2
  75. package/es/timeline/index.d.ts +6 -6
  76. package/es/timeline/timeline.d.ts +3 -3
  77. package/es/tree/base-node.vue.d.ts +4 -8
  78. package/es/tree/base-node.vue_vue_type_script_setup_true_lang.js +14 -16
  79. package/es/tree/tree.vue.d.ts +2 -2
  80. package/es/tree-select/tree-select.vue.d.ts +4 -4
  81. package/es/typography/base.d.ts +1 -1
  82. package/es/watermark/index.d.ts +3 -3
  83. package/es/watermark/watermark.d.ts +1 -1
  84. package/json/web-types.json +1 -1
  85. package/package.json +3 -3
  86. package/es/_components/virtual-list/use-virtual-size.js +0 -94
  87. package/es/_components/virtual-list-v2/hooks/use-size.d.ts +0 -17
  88. package/es/_components/virtual-list-v2/hooks/use-size.js +0 -95
  89. package/es/_components/virtual-list-v2/index.d.ts +0 -2
  90. package/es/_components/virtual-list-v2/index.js +0 -5
  91. package/es/_components/virtual-list-v2/interface.d.ts +0 -44
  92. package/es/_components/virtual-list-v2/virtual-list-item.d.ts +0 -22
  93. package/es/_components/virtual-list-v2/virtual-list-item.js +0 -37
  94. package/es/_components/virtual-list-v2/virtual-list.js +0 -47
  95. package/es/_components/virtual-list-v2/virtual-list.vue.d.ts +0 -749
  96. package/es/_components/virtual-list-v2/virtual-list.vue_vue_type_script_lang.js +0 -179
  97. package/es/_virtual/_plugin-vue_export-helper.js +0 -8
@@ -1,12 +1,13 @@
1
1
  import { _objectSpread2 } from "../../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectSpread2.js";
2
2
  import { getPrefixCls } from "../../_utils/global-config.js";
3
- import { isObject, isString } from "../../_utils/is.js";
4
- import { useVirtualSize } from "./use-virtual-size.js";
3
+ import { isString } from "../../_utils/is.js";
4
+ import { _objectWithoutProperties } from "../../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectWithoutProperties.js";
5
5
  import { _asyncToGenerator } from "../../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/asyncToGenerator.js";
6
- import { Fragment, computed, createBlock, createElementBlock, defineComponent, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, onUpdated, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toHandlers, unref, watch, withCtx } from "vue";
6
+ import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, unref, watch, withCtx } from "vue";
7
7
  import { OverlayScrollbars } from "overlayscrollbars";
8
- import { DynamicScroller, DynamicScrollerItem, RecycleScroller } from "vue-virtual-scroller";
8
+ import { Virtualizer } from "virtua/vue";
9
9
  //#region components/_components/virtual-list/virtual-list.vue?vue&type=script&setup=true&lang.ts
10
+ var _excluded = ["class", "style"];
10
11
  var virtual_list_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent(_objectSpread2(_objectSpread2({}, { name: "VirtualList" }), {}, {
11
12
  __name: "virtual-list",
12
13
  props: {
@@ -130,21 +131,16 @@ var virtual_list_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
130
131
  const props = __props;
131
132
  const prefixCls = getPrefixCls("virtual-list");
132
133
  const scrollbarHostRef = ref();
133
- const scrollerRef = ref();
134
134
  const viewportRef = ref();
135
- const compatItemRefs = /* @__PURE__ */ new Map();
135
+ const virtuaRef = ref();
136
136
  const osInstanceRef = ref(null);
137
137
  const overlayViewportReadyRef = ref(false);
138
138
  const resolvedItems = computed(() => {
139
139
  var _props$items;
140
140
  return (_props$items = props.items) !== null && _props$items !== void 0 ? _props$items : [];
141
141
  });
142
- const isCompatMode = computed(() => {
143
- return Boolean(props.component || props.listAttrs || props.contentWrapperAttrs || props.contentAttrs || props.listStyle || props.paddingPosition !== "content");
144
- });
145
- const hasCompatContentWrapper = computed(() => {
146
- return Boolean(props.contentWrapperAttrs || isObject(props.component) && props.component.item);
147
- });
142
+ const isEmpty = computed(() => resolvedItems.value.length === 0);
143
+ const isHorizontal = computed(() => props.direction === "horizontal");
148
144
  const resolvedScrollbarProps = computed(() => {
149
145
  if (typeof props.scrollbar === "boolean") return { type: "embed" };
150
146
  return _objectSpread2({ type: "embed" }, props.scrollbar);
@@ -166,158 +162,74 @@ var virtual_list_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
166
162
  if (props.height === void 0) return;
167
163
  return typeof props.height === "number" ? `${props.height}px` : props.height;
168
164
  });
169
- const mergedCompatComponent = computed(() => {
170
- var _props$component;
171
- if (isObject(props.component)) return _objectSpread2({
172
- container: "div",
173
- list: "div",
174
- content: "div",
175
- item: "div"
176
- }, props.component);
177
- return {
178
- container: (_props$component = props.component) !== null && _props$component !== void 0 ? _props$component : "div",
179
- list: "div",
180
- content: "div",
181
- item: "div"
182
- };
183
- });
184
- const compatFixedSize = computed(() => {
185
- return props.fixedSize || typeof props.itemSize === "number";
186
- });
187
- const compatEstimatedSize = computed(() => {
188
- if (props.estimatedSize !== void 0) return props.estimatedSize;
189
- if (typeof props.itemSize === "number") return props.itemSize;
190
- if (typeof props.minItemSize === "number") return props.minItemSize;
191
- });
192
- const compatViewportSize = ref(0);
193
- const compatResolvedItemSize = computed(() => {
194
- var _compatEstimatedSize$;
195
- return (_compatEstimatedSize$ = compatEstimatedSize.value) !== null && _compatEstimatedSize$ !== void 0 ? _compatEstimatedSize$ : 30;
196
- });
197
- const compatBuffer = computed(() => {
198
- var _props$buffer;
199
- return (_props$buffer = props.buffer) !== null && _props$buffer !== void 0 ? _props$buffer : 200;
200
- });
201
- const compatOverscan = computed(() => {
202
- const baseItemSize = Math.max(compatResolvedItemSize.value, 1);
203
- return Math.max(Math.ceil(compatBuffer.value / baseItemSize), 0);
204
- });
205
- const compatVisibleCount = computed(() => {
206
- const baseItemSize = Math.max(compatResolvedItemSize.value, 1);
207
- if (compatViewportSize.value <= 0) return 1;
208
- return Math.max(Math.ceil(compatViewportSize.value / baseItemSize), 1);
209
- });
210
- const getCompatItemKey = (item, index) => {
211
- const keyField = props.keyField;
212
- if (typeof keyField === "function") return keyField(item, index);
213
- if (item && typeof item === "object" && isString(keyField)) {
214
- var _item$keyField;
215
- return (_item$keyField = item[keyField]) !== null && _item$keyField !== void 0 ? _item$keyField : index;
216
- }
217
- return index;
218
- };
219
- const { frontPadding: compatFrontPadding, behindPadding: compatBehindPadding, start: compatStartRef, end: compatEnd, getStartByScroll: getCompatStartByScroll, setItemSize: compatSetItemSize, setStart: setCompatStart, getScrollOffset: getCompatScrollOffset, getItemSize: getCompatItemSize } = useVirtualSize({
220
- dataKeys: computed(() => {
221
- return resolvedItems.value.map((item, index) => getCompatItemKey(item, index));
222
- }),
223
- fixedSize: compatFixedSize,
224
- estimatedSize: compatEstimatedSize,
225
- overscan: compatOverscan,
226
- visibleCount: compatVisibleCount
227
- });
228
- const compatCurrentList = computed(() => {
229
- if (!isCompatMode.value) return [];
230
- if (props.threshold && resolvedItems.value.length <= props.threshold) return resolvedItems.value;
231
- return resolvedItems.value.slice(compatStartRef.value, compatEnd.value);
232
- });
233
- const compatStart = computed(() => {
234
- if (props.threshold && resolvedItems.value.length <= props.threshold) return 0;
235
- return compatStartRef.value;
236
- });
237
- const compatViewportStyle = computed(() => {
238
- const style = { minHeight: 0 };
239
- if (resolvedHeightValue.value !== void 0) style.height = resolvedHeightValue.value !== "auto" ? "100%" : resolvedHeightValue.value;
240
- if (!overlayViewportReadyRef.value) if (props.direction === "horizontal") {
241
- style.overflowX = "auto";
242
- style.overflowY = "hidden";
243
- } else {
244
- style.overflowY = "auto";
245
- style.overflowX = "hidden";
246
- }
247
- return style;
248
- });
249
- const compatListPaddingStyle = computed(() => {
250
- if (props.paddingPosition !== "list") return;
251
- return {
252
- paddingTop: `${compatFrontPadding.value}px`,
253
- paddingBottom: `${compatBehindPadding.value}px`
254
- };
255
- });
256
- const compatContentPaddingStyle = computed(() => {
257
- if (props.paddingPosition !== "content") return;
258
- return {
259
- paddingTop: `${compatFrontPadding.value}px`,
260
- paddingBottom: `${compatBehindPadding.value}px`
261
- };
262
- });
263
- const compatListStyle = computed(() => {
264
- if (!props.listStyle && !compatListPaddingStyle.value) return;
265
- return _objectSpread2(_objectSpread2({}, props.listStyle), compatListPaddingStyle.value);
266
- });
267
- const compatContentStyle = computed(() => {
268
- return compatContentPaddingStyle.value;
269
- });
270
- const compatContentWrapperStyle = computed(() => {
271
- if (!hasCompatContentWrapper.value || props.paddingPosition !== "content") return;
272
- return compatContentStyle.value;
273
- });
274
- const updateCompatItemSize = (key, element) => {
275
- const height = element.getBoundingClientRect().height || element.offsetHeight;
276
- if (height) compatSetItemSize(key, height);
277
- };
278
- const updateCompatItemSizes = () => {
279
- compatItemRefs.forEach((element, key) => {
280
- updateCompatItemSize(key, element);
281
- });
282
- };
283
- const updateCompatViewportSize = () => {
284
- var _scrollerElement$clie, _scrollerElement$clie2;
285
- if (!isCompatMode.value) {
286
- compatViewportSize.value = 0;
287
- return;
165
+ const resolveSizeValue = (value) => {
166
+ if (typeof value === "number") return value > 0 ? value : void 0;
167
+ if (typeof value === "string") {
168
+ const parsed = Number.parseFloat(value);
169
+ return parsed > 0 ? parsed : void 0;
288
170
  }
289
- const scrollerElement = getScrollerElement();
290
- const nextViewportSize = props.direction === "horizontal" ? (_scrollerElement$clie = scrollerElement === null || scrollerElement === void 0 ? void 0 : scrollerElement.clientWidth) !== null && _scrollerElement$clie !== void 0 ? _scrollerElement$clie : 0 : (_scrollerElement$clie2 = scrollerElement === null || scrollerElement === void 0 ? void 0 : scrollerElement.clientHeight) !== null && _scrollerElement$clie2 !== void 0 ? _scrollerElement$clie2 : 0;
291
- if (nextViewportSize > 0) compatViewportSize.value = nextViewportSize;
292
171
  };
293
- const setCompatItemRef = (key, value) => {
294
- var _value$$el;
295
- const element = (_value$$el = value === null || value === void 0 ? void 0 : value.$el) !== null && _value$$el !== void 0 ? _value$$el : value;
296
- if (!(element instanceof HTMLElement)) {
297
- compatItemRefs.delete(key);
298
- return;
299
- }
300
- compatItemRefs.set(key, element);
301
- updateCompatItemSize(key, element);
172
+ const formatSizeValue = (value) => {
173
+ if (typeof value === "number") return value > 0 ? `${value}px` : void 0;
174
+ if (typeof value === "string") return resolveSizeValue(value) === void 0 ? void 0 : value;
302
175
  };
303
- const getCompatContentStyle = (index) => {
304
- if (hasCompatContentWrapper.value) return;
305
- if (props.paddingPosition !== "content") return compatContentStyle.value;
306
- const style = _objectSpread2({}, compatContentStyle.value);
307
- if (index === 0) style.paddingTop = `${compatFrontPadding.value}px`;
308
- if (index === compatCurrentList.value.length - 1) style.paddingBottom = `${compatBehindPadding.value}px`;
309
- return style;
310
- };
311
- const isDynamicScroller = computed(() => {
312
- return !isCompatMode.value && props.itemSize === void 0;
176
+ const itemSizeHint = computed(() => {
177
+ var _props$estimatedSize;
178
+ const itemSize = resolveSizeValue(typeof props.itemSize === "number" || typeof props.itemSize === "string" ? props.itemSize : void 0);
179
+ if (itemSize !== void 0) return itemSize;
180
+ return (_props$estimatedSize = props.estimatedSize) !== null && _props$estimatedSize !== void 0 ? _props$estimatedSize : resolveSizeValue(props.minItemSize);
181
+ });
182
+ const fixedItemSizeValue = computed(() => {
183
+ if (!props.fixedSize) return;
184
+ return formatSizeValue(typeof props.itemSize === "number" || typeof props.itemSize === "string" ? props.itemSize : void 0);
185
+ });
186
+ const minItemSizeValue = computed(() => formatSizeValue(props.minItemSize));
187
+ const virtualizerKey = computed(() => {
188
+ var _itemSizeHint$value, _minItemSizeValue$val;
189
+ return [
190
+ isHorizontal.value ? "horizontal" : "vertical",
191
+ props.fixedSize ? "fixed" : "dynamic",
192
+ (_itemSizeHint$value = itemSizeHint.value) !== null && _itemSizeHint$value !== void 0 ? _itemSizeHint$value : "auto",
193
+ (_minItemSizeValue$val = minItemSizeValue.value) !== null && _minItemSizeValue$val !== void 0 ? _minItemSizeValue$val : "none"
194
+ ].join(":");
195
+ });
196
+ const resolvedBuffer = computed(() => props.buffer);
197
+ const resolvedAs = computed(() => props.listTag || "div");
198
+ const resolvedItem = computed(() => props.itemTag || "div");
199
+ const resolvedListAttrs = computed(() => {
200
+ if (!props.listAttrs) return;
201
+ const _props$listAttrs = props.listAttrs, { class: _class, style: _style } = _props$listAttrs;
202
+ return _objectWithoutProperties(_props$listAttrs, _excluded);
203
+ });
204
+ const listClassNames = computed(() => {
205
+ var _props$listAttrs2;
206
+ return [
207
+ (_props$listAttrs2 = props.listAttrs) === null || _props$listAttrs2 === void 0 ? void 0 : _props$listAttrs2.class,
208
+ `${prefixCls}-content`,
209
+ props.listClass
210
+ ];
313
211
  });
314
- const currentScroller = computed(() => {
315
- return isDynamicScroller.value ? DynamicScroller : RecycleScroller;
212
+ const listStyle = computed(() => {
213
+ var _props$listAttrs3;
214
+ return [(_props$listAttrs3 = props.listAttrs) === null || _props$listAttrs3 === void 0 ? void 0 : _props$listAttrs3.style, props.listStyle];
215
+ });
216
+ const resolvedItemProps = computed(() => {
217
+ const itemStyle = {};
218
+ if (fixedItemSizeValue.value !== void 0) if (isHorizontal.value) itemStyle.width = fixedItemSizeValue.value;
219
+ else itemStyle.height = fixedItemSizeValue.value;
220
+ if (minItemSizeValue.value !== void 0) if (isHorizontal.value) itemStyle.minWidth = minItemSizeValue.value;
221
+ else itemStyle.minHeight = minItemSizeValue.value;
222
+ if (props.itemClass === void 0 && Object.keys(itemStyle).length === 0) return;
223
+ const itemClass = props.itemClass;
224
+ return () => ({
225
+ class: itemClass,
226
+ style: itemStyle
227
+ });
316
228
  });
317
- const scrollerStyle = computed(() => {
229
+ const viewportStyle = computed(() => {
318
230
  const style = { minHeight: 0 };
319
231
  if (resolvedHeightValue.value !== void 0) style.height = "100%";
320
- if (!overlayViewportReadyRef.value) if (props.direction === "horizontal") {
232
+ if (!overlayViewportReadyRef.value) if (isHorizontal.value) {
321
233
  style.overflowX = "auto";
322
234
  style.overflowY = "hidden";
323
235
  } else {
@@ -353,55 +265,6 @@ var virtual_list_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
353
265
  if (!instance || instance.state().destroyed) return null;
354
266
  return instance;
355
267
  };
356
- const getScrollerElement = () => {
357
- if (isCompatMode.value) {
358
- var _viewportRef$value;
359
- return (_viewportRef$value = viewportRef.value) !== null && _viewportRef$value !== void 0 ? _viewportRef$value : null;
360
- }
361
- const scroller = scrollerRef.value;
362
- return (scroller === null || scroller === void 0 ? void 0 : scroller.$el) instanceof HTMLElement ? scroller.$el : null;
363
- };
364
- const getEstimatedItemSize = () => {
365
- if (typeof props.itemSize === "number" && props.itemSize > 0) return props.itemSize;
366
- if (typeof props.minItemSize === "number" && props.minItemSize > 0) return props.minItemSize;
367
- return 32;
368
- };
369
- const shouldResetScrollForSmallList = (nextItems, previousItems) => {
370
- const viewport = getScrollerElement();
371
- if (!viewport || viewport.scrollTop <= 0 || !(previousItems === null || previousItems === void 0 ? void 0 : previousItems.length)) return false;
372
- if (!nextItems.length) return true;
373
- if (nextItems.length >= previousItems.length || props.shift) return false;
374
- const estimatedItemSize = getEstimatedItemSize();
375
- const visibleCount = Math.max(1, Math.ceil(viewport.clientHeight / estimatedItemSize));
376
- return nextItems.length <= visibleCount * 2;
377
- };
378
- const clampScrollPosition = () => {
379
- const viewport = getScrollerElement();
380
- if (!viewport) return;
381
- const maxScrollTop = Math.max(viewport.scrollHeight - viewport.clientHeight, 0);
382
- if (viewport.scrollTop > maxScrollTop) scrollToPosition(maxScrollTop);
383
- };
384
- const refreshVisibleWindow = (itemsChanged = true) => {
385
- if (isDynamicScroller.value) {
386
- forceUpdate(true);
387
- return;
388
- }
389
- updateVisibleItems(itemsChanged, true);
390
- };
391
- const waitForLayoutFrame = function() {
392
- var _ref = _asyncToGenerator(function* () {
393
- yield new Promise((resolve) => {
394
- if (typeof requestAnimationFrame === "function") {
395
- requestAnimationFrame(() => resolve());
396
- return;
397
- }
398
- resolve();
399
- });
400
- });
401
- return function waitForLayoutFrame() {
402
- return _ref.apply(this, arguments);
403
- };
404
- }();
405
268
  const destroyOverlayScrollbar = () => {
406
269
  var _osInstanceRef$value;
407
270
  overlayViewportReadyRef.value = false;
@@ -409,11 +272,11 @@ var virtual_list_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
409
272
  osInstanceRef.value = null;
410
273
  };
411
274
  const initOverlayScrollbar = function() {
412
- var _ref2 = _asyncToGenerator(function* (waitForDom = true) {
275
+ var _ref = _asyncToGenerator(function* (waitForDom = true) {
413
276
  destroyOverlayScrollbar();
414
277
  if (waitForDom) yield nextTick();
415
278
  const host = scrollbarHostRef.value;
416
- const viewport = getScrollerElement();
279
+ const viewport = viewportRef.value;
417
280
  if (!host || !viewport) return;
418
281
  osInstanceRef.value = OverlayScrollbars({
419
282
  target: host,
@@ -422,232 +285,114 @@ var virtual_list_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
422
285
  padding: false,
423
286
  content: false
424
287
  }
425
- }, resolvedOverlayOptions.value, { scroll: (_instance, event) => {
426
- if (!isCompatMode.value) onScroll(event);
427
- } });
288
+ }, resolvedOverlayOptions.value);
428
289
  overlayViewportReadyRef.value = true;
429
290
  });
430
291
  return function initOverlayScrollbar() {
431
- return _ref2.apply(this, arguments);
292
+ return _ref.apply(this, arguments);
432
293
  };
433
294
  }();
434
- onMounted(_asyncToGenerator(function* () {
435
- yield nextTick();
436
- updateCompatViewportSize();
295
+ onMounted(() => {
437
296
  initOverlayScrollbar(false);
438
- }));
439
- onUpdated(() => {
440
- if (isCompatMode.value) {
441
- updateCompatItemSizes();
442
- updateCompatViewportSize();
443
- }
444
297
  });
445
- watch([currentScroller, resolvedOverlayOptions], _asyncToGenerator(function* () {
298
+ onBeforeUnmount(() => {
299
+ destroyOverlayScrollbar();
300
+ });
301
+ watch([resolvedOverlayOptions], _asyncToGenerator(function* () {
446
302
  yield nextTick();
447
- const viewport = getScrollerElement();
448
303
  const osInstance = resolveOSInstance();
449
- if (!viewport || !scrollbarHostRef.value) return;
450
- if (!osInstance || osInstance.elements().viewport !== viewport) {
304
+ if (!osInstance) {
451
305
  yield initOverlayScrollbar(true);
452
306
  return;
453
307
  }
454
308
  osInstance.options(resolvedOverlayOptions.value);
455
309
  osInstance.update(true);
456
310
  }), { deep: true });
457
- watch(() => resolvedItems.value, function() {
458
- var _ref3 = _asyncToGenerator(function* (nextItems, previousItems) {
459
- var _resolveOSInstance, _resolveOSInstance2;
460
- yield nextTick();
461
- if (isCompatMode.value) {
462
- updateCompatItemSizes();
463
- updateCompatViewportSize();
464
- }
465
- (_resolveOSInstance = resolveOSInstance()) === null || _resolveOSInstance === void 0 || _resolveOSInstance.update(true);
466
- yield waitForLayoutFrame();
467
- if (shouldResetScrollForSmallList(nextItems, previousItems)) {
468
- scrollToPosition(0);
469
- yield waitForLayoutFrame();
470
- }
471
- refreshVisibleWindow(true);
472
- yield nextTick();
473
- yield waitForLayoutFrame();
474
- clampScrollPosition();
475
- (_resolveOSInstance2 = resolveOSInstance()) === null || _resolveOSInstance2 === void 0 || _resolveOSInstance2.update(true);
476
- yield nextTick();
477
- yield waitForLayoutFrame();
478
- refreshVisibleWindow(true);
479
- });
480
- return function(_x, _x2) {
481
- return _ref3.apply(this, arguments);
482
- };
483
- }(), { deep: true });
484
- onBeforeUnmount(() => {
485
- destroyOverlayScrollbar();
486
- });
487
- const scrollerProps = computed(() => {
488
- const commonProps = {
489
- items: resolvedItems.value,
490
- height: props.height,
491
- keyField: props.keyField,
492
- direction: props.direction,
493
- listTag: props.listTag,
494
- itemTag: props.itemTag,
495
- shift: props.shift,
496
- cache: props.cache,
497
- disableTransform: props.disableTransform,
498
- flowMode: props.flowMode,
499
- hiddenPosition: props.hiddenPosition,
500
- enabled: props.enabled
501
- };
502
- if (isDynamicScroller.value) {
503
- var _props$minItemSize;
504
- return _objectSpread2(_objectSpread2({}, commonProps), {}, { minItemSize: (_props$minItemSize = props.minItemSize) !== null && _props$minItemSize !== void 0 ? _props$minItemSize : 32 });
505
- }
506
- return _objectSpread2(_objectSpread2({}, commonProps), {}, {
507
- itemSize: props.itemSize,
508
- gridItems: props.gridItems,
509
- itemSecondarySize: props.itemSecondarySize,
510
- minItemSize: props.minItemSize,
511
- sizeField: props.sizeField,
512
- typeField: props.typeField,
513
- buffer: props.buffer,
514
- prerender: props.prerender,
515
- emitUpdate: props.emitUpdate,
516
- updateInterval: props.updateInterval,
517
- skipHover: props.skipHover,
518
- listClass: props.listClass,
519
- itemClass: props.itemClass
520
- });
521
- });
311
+ watch(() => resolvedItems.value, _asyncToGenerator(function* () {
312
+ var _resolveOSInstance;
313
+ yield nextTick();
314
+ (_resolveOSInstance = resolveOSInstance()) === null || _resolveOSInstance === void 0 || _resolveOSInstance.update(true);
315
+ }), { deep: true });
522
316
  const onScroll = (ev) => {
523
317
  emit("scroll", ev);
524
318
  const target = ev.target;
525
319
  if (!target) return;
526
320
  if (Math.floor(target.scrollHeight - (target.scrollTop + target.clientHeight)) <= 0) emit("reachBottom", ev);
527
321
  };
528
- const onCompatScroll = (ev) => {
529
- const target = ev.target;
530
- if (target) {
531
- const nextStart = getCompatStartByScroll(target.scrollTop);
532
- if (nextStart !== compatStartRef.value) setCompatStart(nextStart);
533
- }
534
- onScroll(ev);
535
- };
536
- const onScrollEnd = () => {
537
- var _osInstance$elements$;
322
+ const onVirtuaScroll = () => {};
323
+ const onVirtuaScrollEnd = () => {
324
+ var _ref2, _osInstance$elements$;
538
325
  emit("scrollEnd");
539
326
  const osInstance = resolveOSInstance();
540
- if (!(osInstance ? (_osInstance$elements$ = osInstance.elements().scrollOffsetElement) !== null && _osInstance$elements$ !== void 0 ? _osInstance$elements$ : osInstance.elements().viewport : getScrollerElement())) return;
327
+ if (!((_ref2 = (_osInstance$elements$ = osInstance === null || osInstance === void 0 ? void 0 : osInstance.elements().scrollOffsetElement) !== null && _osInstance$elements$ !== void 0 ? _osInstance$elements$ : osInstance === null || osInstance === void 0 ? void 0 : osInstance.elements().viewport) !== null && _ref2 !== void 0 ? _ref2 : viewportRef.value)) return;
541
328
  emit("reachBottom", new Event("scroll"));
542
329
  };
543
- const scrollerListeners = computed(() => {
544
- if (isDynamicScroller.value) return {
545
- resize: () => emit("resize"),
546
- visible: () => emit("visible")
547
- };
548
- return {
549
- resize: () => emit("resize"),
550
- visible: () => emit("visible"),
551
- hidden: () => emit("hidden"),
552
- update: (startIndex, endIndex, visibleStartIndex, visibleEndIndex) => emit("update", startIndex, endIndex, visibleStartIndex, visibleEndIndex),
553
- scrollStart: () => emit("scrollStart"),
554
- scrollEnd: onScrollEnd
555
- };
556
- });
557
330
  const normalizeAlign = (align) => {
558
331
  if (!align || align === "auto") return "nearest";
559
332
  if (align === "top") return "start";
560
333
  if (align === "bottom") return "end";
561
334
  return align;
562
335
  };
563
- const getSlotItemWithSize = (slotProps) => {
564
- return "itemWithSize" in slotProps ? slotProps.itemWithSize : void 0;
336
+ const getItemKey = (item, index) => {
337
+ const keyField = props.keyField;
338
+ if (typeof keyField === "function") return keyField(item, index);
339
+ if (item && typeof item === "object" && isString(keyField)) {
340
+ var _item$keyField;
341
+ return (_item$keyField = item[keyField]) !== null && _item$keyField !== void 0 ? _item$keyField : index;
342
+ }
343
+ return index;
344
+ };
345
+ const findIndexByKey = (key) => {
346
+ return resolvedItems.value.findIndex((item, index) => getItemKey(item, index) === key);
565
347
  };
566
- const getScroller = () => scrollerRef.value;
348
+ const getVirtua = () => virtuaRef.value;
567
349
  const scrollToItem = (index, options) => {
568
- var _getScroller;
569
- if (isCompatMode.value) {
570
- scrollTo({
571
- index,
572
- align: (options === null || options === void 0 ? void 0 : options.smooth) ? "auto" : void 0,
573
- smooth: options === null || options === void 0 ? void 0 : options.smooth,
574
- offset: options === null || options === void 0 ? void 0 : options.offset
575
- });
576
- return;
577
- }
578
- (_getScroller = getScroller()) === null || _getScroller === void 0 || _getScroller.scrollToItem(index, options);
350
+ var _getVirtua;
351
+ (_getVirtua = getVirtua()) === null || _getVirtua === void 0 || _getVirtua.scrollToIndex(index, {
352
+ align: normalizeAlign(options === null || options === void 0 ? void 0 : options.align),
353
+ smooth: options === null || options === void 0 ? void 0 : options.smooth,
354
+ offset: options === null || options === void 0 ? void 0 : options.offset
355
+ });
579
356
  };
580
357
  const scrollToPosition = (position, options) => {
581
- var _getScroller2;
582
- if (isCompatMode.value) {
583
- const viewport = getScrollerElement();
584
- if (!viewport) return;
585
- if (options === null || options === void 0 ? void 0 : options.smooth) viewport.scrollTo({
358
+ const viewport = viewportRef.value;
359
+ if (!viewport) return;
360
+ if (options === null || options === void 0 ? void 0 : options.smooth) {
361
+ viewport.scrollTo({
586
362
  top: position,
587
363
  behavior: "smooth"
588
364
  });
589
- else viewport.scrollTop = position;
590
365
  return;
591
366
  }
592
- (_getScroller2 = getScroller()) === null || _getScroller2 === void 0 || _getScroller2.scrollToPosition(position, options);
367
+ viewport.scrollTop = position;
593
368
  };
594
369
  const findItemIndex = (offset) => {
595
- var _getScroller$findItem, _getScroller3;
596
- if (isCompatMode.value) return getCompatStartByScroll(offset);
597
- return (_getScroller$findItem = (_getScroller3 = getScroller()) === null || _getScroller3 === void 0 ? void 0 : _getScroller3.findItemIndex(offset)) !== null && _getScroller$findItem !== void 0 ? _getScroller$findItem : -1;
370
+ var _getVirtua$findItemIn, _getVirtua2;
371
+ return (_getVirtua$findItemIn = (_getVirtua2 = getVirtua()) === null || _getVirtua2 === void 0 ? void 0 : _getVirtua2.findItemIndex(offset)) !== null && _getVirtua$findItemIn !== void 0 ? _getVirtua$findItemIn : -1;
598
372
  };
599
373
  const getItemOffset = (index) => {
600
- var _getScroller$getItemO, _getScroller4;
601
- if (isCompatMode.value) return getCompatScrollOffset(index);
602
- return (_getScroller$getItemO = (_getScroller4 = getScroller()) === null || _getScroller4 === void 0 ? void 0 : _getScroller4.getItemOffset(index)) !== null && _getScroller$getItemO !== void 0 ? _getScroller$getItemO : 0;
374
+ var _getVirtua$getItemOff, _getVirtua3;
375
+ return (_getVirtua$getItemOff = (_getVirtua3 = getVirtua()) === null || _getVirtua3 === void 0 ? void 0 : _getVirtua3.getItemOffset(index)) !== null && _getVirtua$getItemOff !== void 0 ? _getVirtua$getItemOff : 0;
603
376
  };
604
377
  const getItemSize = (index) => {
605
- var _getScroller$getItemS, _getScroller5;
606
- if (isCompatMode.value) return getCompatItemSize(index);
607
- if (isDynamicScroller.value) {
608
- const dynamicScroller = getScroller();
609
- if (!dynamicScroller) return 0;
610
- return dynamicScroller.getItemSize(resolvedItems.value[index], index);
611
- }
612
- return (_getScroller$getItemS = (_getScroller5 = getScroller()) === null || _getScroller5 === void 0 ? void 0 : _getScroller5.getItemSize(index)) !== null && _getScroller$getItemS !== void 0 ? _getScroller$getItemS : 0;
378
+ var _getVirtua$getItemSiz, _getVirtua4;
379
+ return (_getVirtua$getItemSiz = (_getVirtua4 = getVirtua()) === null || _getVirtua4 === void 0 ? void 0 : _getVirtua4.getItemSize(index)) !== null && _getVirtua$getItemSiz !== void 0 ? _getVirtua$getItemSiz : 0;
613
380
  };
614
381
  const cacheSnapshot = () => {
615
- const scroller = getScroller();
616
- if (!(scroller === null || scroller === void 0 ? void 0 : scroller.cacheSnapshot)) return;
617
- if ("value" in scroller.cacheSnapshot) return scroller.cacheSnapshot.value;
618
- return scroller.cacheSnapshot;
619
- };
620
- const restoreCache = (snapshot) => {
621
- var _getScroller$restoreC, _getScroller6;
622
- return (_getScroller$restoreC = (_getScroller6 = getScroller()) === null || _getScroller6 === void 0 ? void 0 : _getScroller6.restoreCache(snapshot)) !== null && _getScroller$restoreC !== void 0 ? _getScroller$restoreC : false;
623
- };
624
- const updateVisibleItems = (itemsChanged, checkPositionDiff) => {
625
- const scroller = getScroller();
626
- scroller === null || scroller === void 0 || scroller.updateVisibleItems(itemsChanged, checkPositionDiff);
382
+ var _getVirtua5;
383
+ return (_getVirtua5 = getVirtua()) === null || _getVirtua5 === void 0 ? void 0 : _getVirtua5.cache;
627
384
  };
385
+ const restoreCache = () => false;
386
+ const updateVisibleItems = () => {};
628
387
  const scrollToBottom = () => {
629
- if (isCompatMode.value) {
630
- const viewport = getScrollerElement();
631
- if (!viewport) return;
632
- scrollToPosition(viewport.scrollHeight);
633
- return;
634
- }
635
- const scroller = getScroller();
636
- scroller === null || scroller === void 0 || scroller.scrollToBottom();
388
+ const handle = getVirtua();
389
+ if (!handle) return;
390
+ handle.scrollTo(handle.scrollSize);
637
391
  };
638
- const forceUpdate = (clear) => {
639
- if (isCompatMode.value) {
640
- if (clear) setCompatStart(0);
641
- return;
642
- }
643
- const scroller = getScroller();
644
- scroller === null || scroller === void 0 || scroller.forceUpdate(clear);
645
- };
646
- const getDynamicItemSize = (item, index) => {
647
- var _scroller$getItemSize;
648
- if (isCompatMode.value) return typeof index === "number" ? getCompatItemSize(index) : 0;
649
- const scroller = getScroller();
650
- return (_scroller$getItemSize = scroller === null || scroller === void 0 ? void 0 : scroller.getItemSize(item, index)) !== null && _scroller$getItemSize !== void 0 ? _scroller$getItemSize : 0;
392
+ const forceUpdate = () => {};
393
+ const getDynamicItemSize = (_item, index) => {
394
+ if (typeof index !== "number") return 0;
395
+ return getItemSize(index);
651
396
  };
652
397
  const scrollTo = (options) => {
653
398
  if (typeof options === "number") {
@@ -655,28 +400,8 @@ var virtual_list_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
655
400
  return;
656
401
  }
657
402
  let index = options.index;
658
- if (typeof index !== "number" && options.key !== void 0) {
659
- const keyField = props.keyField;
660
- index = resolvedItems.value.findIndex((item, currentIndex) => {
661
- if (typeof keyField === "function") return keyField(item, currentIndex) === options.key;
662
- if (item && typeof item === "object" && isString(keyField)) return item[keyField] === options.key;
663
- return currentIndex === options.key;
664
- });
665
- }
403
+ if (typeof index !== "number" && options.key !== void 0) index = findIndexByKey(options.key);
666
404
  if (typeof index !== "number" || index < 0) return;
667
- if (isCompatMode.value) {
668
- setCompatStart(index - compatOverscan.value);
669
- scrollToPosition(getCompatScrollOffset(index), {
670
- smooth: options.smooth,
671
- offset: options.offset
672
- });
673
- nextTick(() => {
674
- const scrollTop = getCompatScrollOffset(index);
675
- const viewport = getScrollerElement();
676
- if (viewport && scrollTop !== viewport.scrollTop) viewport.scrollTop = scrollTop;
677
- });
678
- return;
679
- }
680
405
  scrollToItem(index, {
681
406
  align: normalizeAlign(options.align),
682
407
  smooth: options.smooth,
@@ -703,111 +428,63 @@ var virtual_list_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
703
428
  ref: scrollbarHostRef,
704
429
  class: normalizeClass(hostClassNames.value),
705
430
  style: normalizeStyle(containerOuterStyle.value)
706
- }, [isCompatMode.value ? (openBlock(), createBlock(resolveDynamicComponent(mergedCompatComponent.value.container), {
707
- key: 0,
431
+ }, [createElementVNode("div", {
708
432
  ref_key: "viewportRef",
709
433
  ref: viewportRef,
710
434
  class: normalizeClass(`${unref(prefixCls)}-scroller`),
711
- style: normalizeStyle(compatViewportStyle.value),
712
- onScroll: onCompatScroll
713
- }, {
714
- default: withCtx(() => [(openBlock(), createBlock(resolveDynamicComponent(mergedCompatComponent.value.list), mergeProps(props.listAttrs, { style: compatListStyle.value }), {
715
- default: withCtx(() => [
716
- renderSlot(_ctx.$slots, "before"),
717
- hasCompatContentWrapper.value ? (openBlock(), createBlock(resolveDynamicComponent(mergedCompatComponent.value.content), mergeProps({ key: 0 }, props.contentWrapperAttrs, { style: compatContentWrapperStyle.value }), {
718
- default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(compatCurrentList.value, (item, index) => {
719
- return openBlock(), createBlock(resolveDynamicComponent(mergedCompatComponent.value.item), mergeProps({ key: getCompatItemKey(item, compatStart.value + index) }, { ref_for: true }, props.contentAttrs, {
720
- ref_for: true,
721
- ref: (element) => setCompatItemRef(getCompatItemKey(item, compatStart.value + index), element),
722
- style: getCompatContentStyle(index)
723
- }), {
724
- default: withCtx(() => [renderSlot(_ctx.$slots, "item", {
725
- item,
726
- index: compatStart.value + index,
727
- active: true,
728
- itemWithSize: void 0
729
- }, () => [renderSlot(_ctx.$slots, "default", {
730
- item,
731
- index: compatStart.value + index,
732
- active: true,
733
- itemWithSize: void 0
734
- })])]),
735
- _: 2
736
- }, 1040, ["style"]);
737
- }), 128))]),
738
- _: 3
739
- }, 16, ["style"])) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(compatCurrentList.value, (item, index) => {
740
- return openBlock(), createBlock(resolveDynamicComponent(mergedCompatComponent.value.content), mergeProps({ key: getCompatItemKey(item, compatStart.value + index) }, { ref_for: true }, props.contentAttrs, {
741
- ref_for: true,
742
- ref: (element) => setCompatItemRef(getCompatItemKey(item, compatStart.value + index), element),
743
- style: getCompatContentStyle(index)
744
- }), {
745
- default: withCtx(() => [renderSlot(_ctx.$slots, "item", {
746
- item,
747
- index: compatStart.value + index,
748
- active: true,
749
- itemWithSize: void 0
750
- }, () => [renderSlot(_ctx.$slots, "default", {
751
- item,
752
- index: compatStart.value + index,
753
- active: true,
754
- itemWithSize: void 0
755
- })])]),
756
- _: 2
757
- }, 1040, ["style"]);
758
- }), 128)),
759
- renderSlot(_ctx.$slots, "after")
760
- ]),
761
- _: 3
762
- }, 16, ["style"]))]),
763
- _: 3
764
- }, 40, ["class", "style"])) : (openBlock(), createBlock(resolveDynamicComponent(currentScroller.value), mergeProps({
765
- key: 1,
766
- ref_key: "scrollerRef",
767
- ref: scrollerRef,
768
- class: `${unref(prefixCls)}-scroller`,
769
- style: scrollerStyle.value
770
- }, scrollerProps.value, toHandlers(scrollerListeners.value)), {
771
- before: withCtx(() => [renderSlot(_ctx.$slots, "before")]),
772
- default: withCtx((slotProps) => [isDynamicScroller.value ? (openBlock(), createBlock(unref(DynamicScrollerItem), {
773
- key: 0,
774
- item: slotProps.item,
775
- active: slotProps.active,
776
- index: slotProps.index,
777
- "size-dependencies": null
778
- }, {
779
- default: withCtx(() => [renderSlot(_ctx.$slots, "item", {
780
- item: slotProps.item,
781
- index: slotProps.index,
782
- active: slotProps.active,
783
- itemWithSize: getSlotItemWithSize(slotProps)
435
+ style: normalizeStyle(viewportStyle.value),
436
+ onScroll
437
+ }, [
438
+ renderSlot(_ctx.$slots, "before"),
439
+ !isEmpty.value ? (openBlock(), createBlock(unref(Virtualizer), mergeProps({
440
+ key: virtualizerKey.value,
441
+ ref_key: "virtuaRef",
442
+ ref: virtuaRef
443
+ }, resolvedListAttrs.value, {
444
+ data: resolvedItems.value,
445
+ horizontal: isHorizontal.value,
446
+ "item-size": itemSizeHint.value,
447
+ "buffer-size": resolvedBuffer.value,
448
+ "ssr-count": props.prerender,
449
+ shift: props.shift,
450
+ cache: props.cache,
451
+ as: resolvedAs.value,
452
+ item: resolvedItem.value,
453
+ "item-props": resolvedItemProps.value,
454
+ class: listClassNames.value,
455
+ style: listStyle.value,
456
+ onScroll: onVirtuaScroll,
457
+ onScrollEnd: onVirtuaScrollEnd
458
+ }), {
459
+ default: withCtx(({ item, index }) => [renderSlot(_ctx.$slots, "item", {
460
+ item,
461
+ index,
462
+ active: true,
463
+ itemWithSize: void 0
784
464
  }, () => [renderSlot(_ctx.$slots, "default", {
785
- item: slotProps.item,
786
- index: slotProps.index,
787
- active: slotProps.active,
788
- itemWithSize: getSlotItemWithSize(slotProps)
465
+ item,
466
+ index,
467
+ active: true,
468
+ itemWithSize: void 0
789
469
  })])]),
790
- _: 2
791
- }, 1032, [
470
+ _: 3
471
+ }, 16, [
472
+ "data",
473
+ "horizontal",
474
+ "item-size",
475
+ "buffer-size",
476
+ "ssr-count",
477
+ "shift",
478
+ "cache",
479
+ "as",
792
480
  "item",
793
- "active",
794
- "index"
795
- ])) : renderSlot(_ctx.$slots, "item", {
796
- key: 1,
797
- item: slotProps.item,
798
- index: slotProps.index,
799
- active: slotProps.active,
800
- itemWithSize: getSlotItemWithSize(slotProps)
801
- }, () => [renderSlot(_ctx.$slots, "default", {
802
- item: slotProps.item,
803
- index: slotProps.index,
804
- active: slotProps.active,
805
- itemWithSize: getSlotItemWithSize(slotProps)
806
- })])]),
807
- empty: withCtx(() => [renderSlot(_ctx.$slots, "empty")]),
808
- after: withCtx(() => [renderSlot(_ctx.$slots, "after")]),
809
- _: 3
810
- }, 16, ["class", "style"]))], 6);
481
+ "item-props",
482
+ "class",
483
+ "style"
484
+ ])) : createCommentVNode("", true),
485
+ renderSlot(_ctx.$slots, "after"),
486
+ isEmpty.value ? renderSlot(_ctx.$slots, "empty", { key: 1 }) : createCommentVNode("", true)
487
+ ], 38)], 6);
811
488
  };
812
489
  }
813
490
  }));