@vunk/plus 1.15.0 → 1.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/components/bubble-list/index.cjs +1 -1
  2. package/components/bubble-list/index.mjs +276 -123
  3. package/components/bubble-list/src/core/index.vue.d.ts +62 -14
  4. package/components/bubble-list/src/ctx.d.ts +12 -0
  5. package/components/bubble-list/src/index.vue.d.ts +32 -10
  6. package/components/components.css +1 -1
  7. package/components/drawer/src/ctx.d.ts +1 -1
  8. package/components/drawer/src/index.vue.d.ts +7 -7
  9. package/components/pixi-frame/src/apng.vue.d.ts +2 -2
  10. package/components/pixi-frame/src/bitmap-generator.vue.d.ts +18 -18
  11. package/components/pixi-frame/src/bitmap.vue.d.ts +18 -18
  12. package/components/pixi-frame/src/buffer-image.vue.d.ts +18 -18
  13. package/components/pixi-frame/src/core.vue.d.ts +2 -2
  14. package/components/pixi-frame/src/index.vue.d.ts +44 -44
  15. package/components/pixi-frame/src/video.vue.d.ts +2 -2
  16. package/components/recorder-button/src/index.vue.d.ts +2 -2
  17. package/components/scrollbar/src/index.vue.d.ts +2 -2
  18. package/components/speech-button/src/index.vue.d.ts +1 -1
  19. package/components/table-columns/src/ctx.d.ts +2 -2
  20. package/components/table-columns/src/el-ctx.d.ts +3 -3
  21. package/components/table-columns/src/index.vue.d.ts +4 -4
  22. package/components/tables-v1/src/ctx.d.ts +11 -11
  23. package/components/tables-v1/src/el-ctx.d.ts +7 -7
  24. package/components/tables-v1/src/index.vue.d.ts +12 -12
  25. package/components/tables-v1-checkbox/src/ctx.d.ts +9 -9
  26. package/components/tables-v1-checkbox/src/index.vue.d.ts +44 -44
  27. package/components/text/src/ctx.d.ts +1 -1
  28. package/components/text/src/index.vue.d.ts +6 -6
  29. package/components/thinking/src/index.vue.d.ts +2 -2
  30. package/components/vditor/src/ctx.d.ts +1 -1
  31. package/components/vditor/src/index.vue.d.ts +1 -1
  32. package/index.css +3 -1
  33. package/package.json +6 -1
  34. package/vue-virtual-scroller/index.cjs +1 -0
  35. package/vue-virtual-scroller/index.d.ts +4 -0
  36. package/vue-virtual-scroller/index.mjs +2708 -0
  37. package/vue-virtual-scroller/src/components/DynamicScroller.vue.d.ts +52 -0
  38. package/vue-virtual-scroller/src/components/DynamicScrollerItem.vue.d.ts +36 -0
  39. package/vue-virtual-scroller/src/components/ItemView.vue.d.ts +24 -0
  40. package/vue-virtual-scroller/src/components/RecycleScroller.vue.d.ts +65 -0
  41. package/vue-virtual-scroller/src/components/ResizeObserver.vue.d.ts +7 -0
  42. package/vue-virtual-scroller/src/components/WindowScroller.vue.d.ts +54 -0
  43. package/vue-virtual-scroller/src/composables/dynamicScrollerMeasureQueue.d.ts +19 -0
  44. package/vue-virtual-scroller/src/composables/dynamicScrollerMeasurement.d.ts +41 -0
  45. package/vue-virtual-scroller/src/composables/scrollerOptions.d.ts +66 -0
  46. package/vue-virtual-scroller/src/composables/useDynamicScroller.d.ts +109 -0
  47. package/vue-virtual-scroller/src/composables/useDynamicScrollerItem.d.ts +21 -0
  48. package/vue-virtual-scroller/src/composables/useIdState.d.ts +7 -0
  49. package/vue-virtual-scroller/src/composables/useRecycleScroller.d.ts +65 -0
  50. package/vue-virtual-scroller/src/composables/useTableColumnWidths.d.ts +28 -0
  51. package/vue-virtual-scroller/src/composables/useWindowScroller.d.ts +17 -0
  52. package/vue-virtual-scroller/src/config.d.ts +7 -0
  53. package/vue-virtual-scroller/src/directives/observeVisibility.d.ts +8 -0
  54. package/vue-virtual-scroller/src/engine/cache.d.ts +8 -0
  55. package/vue-virtual-scroller/src/engine/keyField.d.ts +13 -0
  56. package/vue-virtual-scroller/src/engine/scroll.d.ts +14 -0
  57. package/vue-virtual-scroller/src/index.d.ts +25 -0
  58. package/vue-virtual-scroller/src/scrollparent.d.ts +27 -0
  59. package/vue-virtual-scroller/src/typecheck/generic-components.typecheck.vue.d.ts +3 -0
  60. package/vue-virtual-scroller/src/typecheck/generic-composables.typecheck.d.ts +1 -0
  61. package/vue-virtual-scroller/src/types.d.ts +139 -0
  62. package/vue-virtual-scroller/src/utils/eventEmitter.d.ts +21 -0
  63. package/vue-virtual-scroller/src/utils/itemSize.d.ts +13 -0
  64. package/vue-virtual-scroller/src/utils/viewStyle.d.ts +29 -0
  65. package/vue-virtual-scroller/src/utils.d.ts +1 -0
  66. package/vue-virtual-scroller/vue-virtual-scroller.css +1 -0
@@ -0,0 +1,8 @@
1
+ import type { CacheSnapshot, KeyFieldValue, ScrollAlign } from '../types';
2
+ export declare function getItemKey(item: unknown, index: number, keyField: KeyFieldValue<any> | null): string | number;
3
+ export declare function getItemKeys(items: unknown[], keyField: KeyFieldValue<any> | null): Array<string | number>;
4
+ export declare function buildCacheSnapshot(items: unknown[], keyField: KeyFieldValue<any> | null, getSize: (item: unknown, index: number, key: string | number) => number | undefined): CacheSnapshot;
5
+ export declare function isCacheSnapshotCompatible(snapshot: CacheSnapshot | null | undefined, items: unknown[], keyField: KeyFieldValue<any> | null): snapshot is CacheSnapshot;
6
+ export declare function restoreCacheMap(snapshot: CacheSnapshot | null | undefined, items: unknown[], keyField: KeyFieldValue<any> | null): Record<string | number, number>;
7
+ export declare function findPrependOffset(previousKeys: Array<string | number>, nextKeys: Array<string | number>): number;
8
+ export declare function getAlignedScrollOffset(itemStart: number, itemSize: number, viewportStart: number, viewportSize: number, align: ScrollAlign | undefined, offset?: number): number | null;
@@ -0,0 +1,13 @@
1
+ import type { KeyFieldValue, KeyValue } from '../types';
2
+ /**
3
+ * Formats a keyField value for human-readable error messages.
4
+ */
5
+ export declare function formatKeyField(keyField: KeyFieldValue<any> | null): string;
6
+ /**
7
+ * Resolves the stable key for a list item from either a property name or a callback.
8
+ */
9
+ export declare function resolveItemKey<TItem>(item: TItem, index: number, keyField: KeyFieldValue<TItem> | null): KeyValue;
10
+ /**
11
+ * Resolves an object-item key when an index is available or can be ignored by the resolver.
12
+ */
13
+ export declare function resolveItemKeyWithOptionalIndex<TItem>(item: TItem, index: number | undefined, keyField: KeyFieldValue<TItem>): KeyValue;
@@ -0,0 +1,14 @@
1
+ import type { ScrollDirection, ScrollToOptions } from '../types';
2
+ export declare function normalizeOffset(offset: number, direction: ScrollDirection, target: HTMLElement | Window | null | undefined): number;
3
+ export declare function denormalizeOffset(offset: number, direction: ScrollDirection, target: HTMLElement | Window | null | undefined): number;
4
+ export declare function scrollElementTo(target: HTMLElement | Window, direction: ScrollDirection, position: number, options?: ScrollToOptions): void;
5
+ /**
6
+ * Resolve the viewport size used to decide which items should be rendered.
7
+ *
8
+ * In page mode the viewport is the scroll parent (typically `window`, or a
9
+ * scrollable ancestor element when supplied). Outside page mode it is the
10
+ * scroller's own root element. The `scrollParent` argument lets callers opt
11
+ * into a custom HTMLElement viewport (issue #928) — without it page mode
12
+ * keeps its legacy `window.innerHeight/Width` reading.
13
+ */
14
+ export declare function getViewportSize(el: HTMLElement, direction: ScrollDirection, pageMode: boolean, scrollParent?: HTMLElement | Window): number;
@@ -0,0 +1,25 @@
1
+ import type { App } from 'vue';
2
+ import type { PluginOptions } from './types';
3
+ import './components/scroller.css';
4
+ import DynamicScroller from './components/DynamicScroller.vue';
5
+ import DynamicScrollerItem from './components/DynamicScrollerItem.vue';
6
+ import RecycleScroller from './components/RecycleScroller.vue';
7
+ import WindowScroller from './components/WindowScroller.vue';
8
+ export { useDynamicScroller } from './composables/useDynamicScroller';
9
+ export type { UseDynamicScrollerItemBindingOptions, UseDynamicScrollerOptions, UseDynamicScrollerReturn } from './composables/useDynamicScroller';
10
+ export { useDynamicScrollerItem } from './composables/useDynamicScrollerItem';
11
+ export type { UseDynamicScrollerItemOptions, UseDynamicScrollerItemReturn } from './composables/useDynamicScrollerItem';
12
+ export { useIdState } from './composables/useIdState';
13
+ export { useRecycleScroller } from './composables/useRecycleScroller';
14
+ export type { UseRecycleScrollerOptions, UseRecycleScrollerReturn } from './composables/useRecycleScroller';
15
+ export { useTableColumnWidths } from './composables/useTableColumnWidths';
16
+ export type { UseTableColumnWidthsOptions, UseTableColumnWidthsReturn } from './composables/useTableColumnWidths';
17
+ export { useWindowScroller } from './composables/useWindowScroller';
18
+ export type { UseWindowScrollerOptions, UseWindowScrollerReturn } from './composables/useWindowScroller';
19
+ export { DynamicScroller, DynamicScrollerItem, RecycleScroller, WindowScroller, };
20
+ export type * from './types';
21
+ declare const plugin: {
22
+ version: string;
23
+ install(app: App, options?: PluginOptions): void;
24
+ };
25
+ export default plugin;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Walk the DOM tree starting from `node`'s parent and return the first
3
+ * ancestor whose computed `overflow*` allows scrolling. Falls back to the
4
+ * document's scrolling element (typically `<html>`) when no ancestor scrolls.
5
+ *
6
+ * @param node - The element whose scroll parent should be resolved.
7
+ * @returns The first scrollable ancestor, or the document scrolling element.
8
+ */
9
+ export declare function getScrollParent(node: Node): Element | undefined;
10
+ /**
11
+ * Resolve the scroll-parent target used by the scroller's pageMode paths.
12
+ *
13
+ * Combines the auto-detection of `getScrollParent` with an optional explicit
14
+ * override and normalizes html/body to `window`, so callers get a single
15
+ * "target" they can listen on AND measure against (geometry math reads the
16
+ * returned target's rect; for `window` it uses `innerHeight/innerWidth`).
17
+ *
18
+ * @param node - The scroller's root element. Used as the start of the DOM
19
+ * walk when no override is provided.
20
+ * @param override - Optional explicit scroll-parent. Accepts either an
21
+ * `HTMLElement` or `Window`. When `undefined`, falls back to auto-detection.
22
+ * @returns A `Window` or `HTMLElement` to listen on and measure against.
23
+ * Returns `undefined` only when `node` is not a host element AND no
24
+ * override was supplied — callers should fall back to `window` in that
25
+ * case (matches the legacy behavior in `useRecycleScroller`).
26
+ */
27
+ export declare function resolveScrollParent(node: Node | undefined, override?: HTMLElement | Window): Window | HTMLElement | undefined;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,139 @@
1
+ import type { ComputedRef, Ref } from 'vue';
2
+ export type ScrollDirection = 'vertical' | 'horizontal';
3
+ export type ScrollAlign = 'start' | 'center' | 'end' | 'nearest';
4
+ export type KeyValue = string | number;
5
+ export type KeyFieldResolver<TItem = unknown> = (item: TItem, index: number) => KeyValue;
6
+ export type KeyFieldValue<TItem = unknown> = string | KeyFieldResolver<TItem>;
7
+ export type ItemSizeResolver<TItem = unknown> = (item: TItem, index: number) => number;
8
+ export type ItemSizeValue<TItem = unknown> = number | null | ItemSizeResolver<TItem>;
9
+ export type StringKeyOf<T> = Extract<keyof T, string>;
10
+ /**
11
+ * Default key-field shape for generic option helpers.
12
+ * Keep valid object field names plus resolver functions, instead of freezing to `'id'`.
13
+ */
14
+ export type DefaultKeyField<TItem> = TItem extends object ? StringKeyOf<TItem> | KeyFieldResolver<TItem> : string;
15
+ export type ValidKeyField<TItem, TKeyField extends KeyFieldValue<TItem>> = TItem extends object ? TKeyField extends KeyFieldResolver<TItem> ? TKeyField : TKeyField extends StringKeyOf<TItem> ? TKeyField : never : string;
16
+ export type NumericFieldKey<TItem> = TItem extends object ? Extract<{
17
+ [K in StringKeyOf<TItem>]-?: Exclude<TItem[K], undefined> extends number ? K : never;
18
+ }[StringKeyOf<TItem>], string> : string;
19
+ export type ValidSizeField<TItem, TSizeField extends string> = TItem extends object ? [NumericFieldKey<TItem>] extends [never] ? string : TSizeField extends NumericFieldKey<TItem> ? TSizeField : never : string;
20
+ export type ItemKey<TItem, TKeyField extends KeyFieldValue<TItem> = 'id'> = TItem extends object ? TKeyField extends KeyFieldResolver<TItem> ? Extract<ReturnType<TKeyField>, KeyValue> : Extract<TKeyField extends keyof TItem ? TItem[TKeyField] : never, KeyValue> : number;
21
+ export type ClassValue = string | Record<string, boolean> | Array<string | Record<string, boolean>>;
22
+ export interface ScrollToOptions {
23
+ align?: ScrollAlign;
24
+ smooth?: boolean;
25
+ offset?: number;
26
+ }
27
+ export interface ScrollState {
28
+ start: number;
29
+ end: number;
30
+ }
31
+ export interface ViewNonReactive<TKey = KeyValue> {
32
+ id: number;
33
+ index: number;
34
+ used: boolean;
35
+ key: TKey;
36
+ type: unknown;
37
+ }
38
+ export interface View<TItem = unknown, TKey = KeyValue> {
39
+ item: TItem;
40
+ position: number;
41
+ offset: number;
42
+ nr: ViewNonReactive<TKey>;
43
+ }
44
+ /**
45
+ * Public pooled-view shape exposed by `useDynamicScroller`.
46
+ * It flattens common render fields while still exposing measured metadata.
47
+ */
48
+ export interface DynamicScrollerView<TItem = unknown, TKey = KeyValue> {
49
+ item: TItem;
50
+ itemWithSize: ItemWithSize<TItem, TKey>;
51
+ size: number | undefined;
52
+ position: number;
53
+ offset: number;
54
+ id: number;
55
+ index: number;
56
+ used: boolean;
57
+ key: TKey;
58
+ type: unknown;
59
+ }
60
+ export interface CacheSnapshot {
61
+ keys: KeyValue[];
62
+ sizes: Array<number | null>;
63
+ }
64
+ export interface SizeEntry {
65
+ accumulator: number;
66
+ size?: number;
67
+ }
68
+ export interface Sizes {
69
+ [key: number]: SizeEntry;
70
+ }
71
+ export interface VScrollData {
72
+ active: boolean;
73
+ sizes: Record<KeyValue, number>;
74
+ keyField: KeyFieldValue<any>;
75
+ simpleArray: boolean;
76
+ }
77
+ export interface ItemWithSize<TItem = unknown, TKey = KeyValue> {
78
+ item: TItem;
79
+ id: TKey;
80
+ size: number | undefined;
81
+ }
82
+ export interface RecycleScrollerSlotProps<TItem = unknown> {
83
+ item: TItem;
84
+ index: number;
85
+ active: boolean;
86
+ }
87
+ export interface DynamicScrollerSlotProps<TItem = unknown, TKey = KeyValue> extends RecycleScrollerSlotProps<TItem> {
88
+ itemWithSize: ItemWithSize<TItem, TKey>;
89
+ }
90
+ export interface RecycleScrollerExposed<TItem = unknown, TKey = KeyValue> {
91
+ el: Ref<HTMLElement | undefined>;
92
+ visiblePool: ComputedRef<Array<View<TItem, TKey>>>;
93
+ startSpacerSize: Ref<number>;
94
+ endSpacerSize: Ref<number>;
95
+ scrollToItem: (index: number, options?: ScrollToOptions) => void;
96
+ scrollToPosition: (position: number, options?: ScrollToOptions) => void;
97
+ getScroll: () => ScrollState;
98
+ findItemIndex: (offset: number) => number;
99
+ getItemOffset: (index: number) => number;
100
+ getItemSize: (index: number) => number;
101
+ cacheSnapshot: ComputedRef<CacheSnapshot>;
102
+ restoreCache: (snapshot: CacheSnapshot | null | undefined) => boolean;
103
+ updateVisibleItems: (itemsChanged: boolean, checkPositionDiff?: boolean) => {
104
+ continuous: boolean;
105
+ };
106
+ }
107
+ export interface DynamicScrollerExposed<TItem = unknown> {
108
+ startSpacerSize: Ref<number>;
109
+ endSpacerSize: Ref<number>;
110
+ scrollToItem: (index: number, options?: ScrollToOptions) => void;
111
+ scrollToPosition: (position: number, options?: ScrollToOptions) => void;
112
+ findItemIndex: (offset: number) => number;
113
+ getItemOffset: (index: number) => number;
114
+ scrollToBottom: () => void;
115
+ getItemSize: (item: TItem, index?: number) => number;
116
+ cacheSnapshot: ComputedRef<CacheSnapshot>;
117
+ restoreCache: (snapshot: CacheSnapshot | null | undefined) => boolean;
118
+ forceUpdate: (clear?: boolean) => void;
119
+ }
120
+ export interface WindowScrollerExposed<TItem = unknown, TKey = KeyValue> {
121
+ el: Ref<HTMLElement | undefined>;
122
+ startSpacerSize: Ref<number>;
123
+ endSpacerSize: Ref<number>;
124
+ scrollToItem: (index: number, options?: ScrollToOptions) => void;
125
+ scrollToPosition: (position: number, options?: ScrollToOptions) => void;
126
+ getScroll: () => ScrollState;
127
+ findItemIndex: (offset: number) => number;
128
+ getItemOffset: (index: number) => number;
129
+ getItemSize: (index: number) => number;
130
+ cacheSnapshot: ComputedRef<CacheSnapshot>;
131
+ restoreCache: (snapshot: CacheSnapshot | null | undefined) => boolean;
132
+ updateVisibleItems: (itemsChanged: boolean, checkPositionDiff?: boolean) => {
133
+ continuous: boolean;
134
+ };
135
+ }
136
+ export interface PluginOptions {
137
+ installComponents?: boolean;
138
+ componentsPrefix?: string;
139
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Event payload map keyed by event name.
3
+ */
4
+ export type EventMap = object;
5
+ /**
6
+ * Event handler for one payload shape.
7
+ */
8
+ export type EventHandler<TEvent> = (event: TEvent) => void;
9
+ /**
10
+ * Tiny typed emitter used for internal package coordination.
11
+ */
12
+ export interface EventEmitter<TEvents extends EventMap> {
13
+ on: <TKey extends keyof TEvents>(type: TKey, handler: EventHandler<TEvents[TKey]>) => void;
14
+ off: <TKey extends keyof TEvents>(type: TKey, handler: EventHandler<TEvents[TKey]>) => void;
15
+ emit: <TKey extends keyof TEvents>(type: TKey, event: TEvents[TKey]) => void;
16
+ clear: () => void;
17
+ }
18
+ /**
19
+ * Create lightweight event emitter without external runtime dependency.
20
+ */
21
+ export declare function createEventEmitter<TEvents extends EventMap>(): EventEmitter<TEvents>;
@@ -0,0 +1,13 @@
1
+ import type { ItemSizeValue } from '../types';
2
+ /**
3
+ * Return numeric fixed item size when scroller runs in fixed-size mode.
4
+ */
5
+ export declare function getFixedItemSize<TItem>(itemSize: ItemSizeValue<TItem>): number | null;
6
+ /**
7
+ * Resolve serializable size value for cache snapshots.
8
+ */
9
+ export declare function resolveSnapshotItemSize<TItem>(item: TItem, index: number, itemSize: ItemSizeValue<TItem>, restoredSize: number | undefined, sizeField?: string): number | undefined;
10
+ /**
11
+ * Resolve runtime size for variable-size mode, with safety fallback.
12
+ */
13
+ export declare function resolveVariableItemSize<TItem>(item: TItem, index: number, itemSize: ItemSizeValue<TItem>, restoredSize: number | undefined, minItemSize: number | string | null | undefined, sizeField?: string): number;
@@ -0,0 +1,29 @@
1
+ import type { CSSProperties } from 'vue';
2
+ import type { ScrollDirection, View } from '../types';
3
+ /**
4
+ * Supported pooled-view positioning modes.
5
+ */
6
+ export type PooledViewPositionMode = 'transform' | 'position' | 'flow';
7
+ /**
8
+ * Shared style inputs for pooled view positioning.
9
+ */
10
+ export interface PooledViewStyleOptions {
11
+ direction: ScrollDirection;
12
+ mode?: PooledViewPositionMode;
13
+ itemSize?: number | null;
14
+ gridItems?: number;
15
+ itemSecondarySize?: number;
16
+ }
17
+ /**
18
+ * Resolve pooled-view positioning mode from public options.
19
+ */
20
+ export declare function resolvePooledViewMode(options: {
21
+ direction: ScrollDirection;
22
+ disableTransform?: boolean;
23
+ flowMode?: boolean;
24
+ gridItems?: number;
25
+ }): PooledViewPositionMode;
26
+ /**
27
+ * Build deterministic inline styles for a pooled view.
28
+ */
29
+ export declare function getPooledViewStyle<TItem, TKey>(view: View<TItem, TKey>, options: PooledViewStyleOptions): CSSProperties;
@@ -0,0 +1 @@
1
+ export declare function supportsPassive(): boolean;
@@ -0,0 +1 @@
1
+ .vue-recycle-scroller__resize-observer[data-v-08cc04ab]{position:absolute;inset:0;opacity:0;pointer-events:none;z-index:-1}.vue-recycle-scroller{position:relative}.vue-recycle-scroller.flow-mode{overflow-anchor:none}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.grid-mode:not(.page-mode){overflow:auto}.vue-recycle-scroller.direction-horizontal{display:flex}.vue-recycle-scroller__slot{flex:auto 0 0}.vue-recycle-scroller__item-wrapper{flex:1;box-sizing:border-box;overflow:hidden;position:relative}.vue-recycle-scroller.flow-mode .vue-recycle-scroller__item-wrapper{overflow:visible;overflow-anchor:none}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{position:absolute;top:0;left:0;will-change:transform}.vue-recycle-scroller.ready.flow-mode .vue-recycle-scroller__item-view{position:static;top:auto;left:auto;will-change:auto;overflow-anchor:none}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.vue-recycle-scroller__item-spacer{box-sizing:border-box;flex:0 0 auto;padding:0;margin:0;border:0;visibility:hidden;pointer-events:none;overflow-anchor:none}