@souscheflabs/reanimated-flashlist 0.1.7

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 (104) hide show
  1. package/README.md +282 -0
  2. package/lib/AnimatedFlashList.d.ts +6 -0
  3. package/lib/AnimatedFlashList.d.ts.map +1 -0
  4. package/lib/AnimatedFlashList.js +207 -0
  5. package/lib/AnimatedFlashListItem.d.ts +33 -0
  6. package/lib/AnimatedFlashListItem.d.ts.map +1 -0
  7. package/lib/AnimatedFlashListItem.js +155 -0
  8. package/lib/__tests__/utils/test-utils.d.ts +82 -0
  9. package/lib/__tests__/utils/test-utils.d.ts.map +1 -0
  10. package/lib/__tests__/utils/test-utils.js +115 -0
  11. package/lib/constants/animations.d.ts +39 -0
  12. package/lib/constants/animations.d.ts.map +1 -0
  13. package/lib/constants/animations.js +100 -0
  14. package/lib/constants/drag.d.ts +11 -0
  15. package/lib/constants/drag.d.ts.map +1 -0
  16. package/lib/constants/drag.js +47 -0
  17. package/lib/constants/index.d.ts +3 -0
  18. package/lib/constants/index.d.ts.map +1 -0
  19. package/lib/constants/index.js +18 -0
  20. package/lib/contexts/DragStateContext.d.ts +73 -0
  21. package/lib/contexts/DragStateContext.d.ts.map +1 -0
  22. package/lib/contexts/DragStateContext.js +148 -0
  23. package/lib/contexts/ListAnimationContext.d.ts +104 -0
  24. package/lib/contexts/ListAnimationContext.d.ts.map +1 -0
  25. package/lib/contexts/ListAnimationContext.js +184 -0
  26. package/lib/contexts/index.d.ts +5 -0
  27. package/lib/contexts/index.d.ts.map +1 -0
  28. package/lib/contexts/index.js +10 -0
  29. package/lib/hooks/animations/index.d.ts +9 -0
  30. package/lib/hooks/animations/index.d.ts.map +1 -0
  31. package/lib/hooks/animations/index.js +13 -0
  32. package/lib/hooks/animations/useListEntryAnimation.d.ts +38 -0
  33. package/lib/hooks/animations/useListEntryAnimation.d.ts.map +1 -0
  34. package/lib/hooks/animations/useListEntryAnimation.js +90 -0
  35. package/lib/hooks/animations/useListExitAnimation.d.ts +67 -0
  36. package/lib/hooks/animations/useListExitAnimation.d.ts.map +1 -0
  37. package/lib/hooks/animations/useListExitAnimation.js +146 -0
  38. package/lib/hooks/drag/index.d.ts +20 -0
  39. package/lib/hooks/drag/index.d.ts.map +1 -0
  40. package/lib/hooks/drag/index.js +26 -0
  41. package/lib/hooks/drag/useDragAnimatedStyle.d.ts +33 -0
  42. package/lib/hooks/drag/useDragAnimatedStyle.d.ts.map +1 -0
  43. package/lib/hooks/drag/useDragAnimatedStyle.js +61 -0
  44. package/lib/hooks/drag/useDragGesture.d.ts +30 -0
  45. package/lib/hooks/drag/useDragGesture.d.ts.map +1 -0
  46. package/lib/hooks/drag/useDragGesture.js +189 -0
  47. package/lib/hooks/drag/useDragShift.d.ts +21 -0
  48. package/lib/hooks/drag/useDragShift.d.ts.map +1 -0
  49. package/lib/hooks/drag/useDragShift.js +85 -0
  50. package/lib/hooks/drag/useDropCompensation.d.ts +27 -0
  51. package/lib/hooks/drag/useDropCompensation.d.ts.map +1 -0
  52. package/lib/hooks/drag/useDropCompensation.js +90 -0
  53. package/lib/hooks/index.d.ts +8 -0
  54. package/lib/hooks/index.d.ts.map +1 -0
  55. package/lib/hooks/index.js +18 -0
  56. package/lib/index.d.ts +42 -0
  57. package/lib/index.d.ts.map +1 -0
  58. package/lib/index.js +69 -0
  59. package/lib/types/animations.d.ts +71 -0
  60. package/lib/types/animations.d.ts.map +1 -0
  61. package/lib/types/animations.js +2 -0
  62. package/lib/types/drag.d.ts +94 -0
  63. package/lib/types/drag.d.ts.map +1 -0
  64. package/lib/types/drag.js +2 -0
  65. package/lib/types/index.d.ts +4 -0
  66. package/lib/types/index.d.ts.map +1 -0
  67. package/lib/types/index.js +19 -0
  68. package/lib/types/list.d.ts +136 -0
  69. package/lib/types/list.d.ts.map +1 -0
  70. package/lib/types/list.js +2 -0
  71. package/package.json +73 -0
  72. package/src/AnimatedFlashList.tsx +411 -0
  73. package/src/AnimatedFlashListItem.tsx +212 -0
  74. package/src/__tests__/components/AnimatedFlashList.test.tsx +365 -0
  75. package/src/__tests__/components/AnimatedFlashListItem.test.tsx +371 -0
  76. package/src/__tests__/contexts/DragStateContext.test.tsx +169 -0
  77. package/src/__tests__/contexts/ListAnimationContext.test.tsx +324 -0
  78. package/src/__tests__/hooks/useDragAnimatedStyle.test.tsx +118 -0
  79. package/src/__tests__/hooks/useDragGesture.test.tsx +169 -0
  80. package/src/__tests__/hooks/useDragShift.test.tsx +94 -0
  81. package/src/__tests__/hooks/useDropCompensation.test.tsx +182 -0
  82. package/src/__tests__/hooks/useListEntryAnimation.test.tsx +135 -0
  83. package/src/__tests__/hooks/useListExitAnimation.test.tsx +175 -0
  84. package/src/__tests__/utils/test-utils.tsx +159 -0
  85. package/src/constants/animations.ts +107 -0
  86. package/src/constants/drag.ts +51 -0
  87. package/src/constants/index.ts +2 -0
  88. package/src/contexts/DragStateContext.tsx +197 -0
  89. package/src/contexts/ListAnimationContext.tsx +302 -0
  90. package/src/contexts/index.ts +9 -0
  91. package/src/hooks/animations/index.ts +9 -0
  92. package/src/hooks/animations/useListEntryAnimation.ts +108 -0
  93. package/src/hooks/animations/useListExitAnimation.ts +197 -0
  94. package/src/hooks/drag/index.ts +20 -0
  95. package/src/hooks/drag/useDragAnimatedStyle.ts +80 -0
  96. package/src/hooks/drag/useDragGesture.ts +267 -0
  97. package/src/hooks/drag/useDragShift.ts +119 -0
  98. package/src/hooks/drag/useDropCompensation.ts +120 -0
  99. package/src/hooks/index.ts +16 -0
  100. package/src/index.ts +105 -0
  101. package/src/types/animations.ts +76 -0
  102. package/src/types/drag.ts +101 -0
  103. package/src/types/index.ts +3 -0
  104. package/src/types/list.ts +178 -0
@@ -0,0 +1,371 @@
1
+ import React from 'react';
2
+ import { Text, View } from 'react-native';
3
+ import { render } from '../utils/test-utils';
4
+ import { AnimatedFlashListItem } from '../../AnimatedFlashListItem';
5
+ import type { AnimatedRenderItemInfo } from '../../types';
6
+
7
+ interface TestItem {
8
+ id: string;
9
+ title: string;
10
+ }
11
+
12
+ describe('AnimatedFlashListItem', () => {
13
+ const defaultItem: TestItem = { id: 'item-1', title: 'Test Item' };
14
+
15
+ const defaultRenderItem = ({ item }: AnimatedRenderItemInfo<TestItem>) => (
16
+ <View testID={`content-${item.id}`}>
17
+ <Text>{item.title}</Text>
18
+ </View>
19
+ );
20
+
21
+ it('renders without crashing', () => {
22
+ expect(() => {
23
+ render(
24
+ <AnimatedFlashListItem<TestItem>
25
+ item={defaultItem}
26
+ index={0}
27
+ totalItems={5}
28
+ isDragEnabled={false}
29
+ renderItem={defaultRenderItem}
30
+ />,
31
+ );
32
+ }).not.toThrow();
33
+ });
34
+
35
+ it('renders the item content from renderItem prop', () => {
36
+ const { getByText } = render(
37
+ <AnimatedFlashListItem<TestItem>
38
+ item={defaultItem}
39
+ index={0}
40
+ totalItems={5}
41
+ isDragEnabled={false}
42
+ renderItem={defaultRenderItem}
43
+ />,
44
+ );
45
+
46
+ expect(getByText('Test Item')).toBeTruthy();
47
+ });
48
+
49
+ it('passes item data to renderItem', () => {
50
+ let receivedItem: TestItem | null = null;
51
+
52
+ const renderItem = ({ item }: AnimatedRenderItemInfo<TestItem>) => {
53
+ receivedItem = item;
54
+ return (
55
+ <View>
56
+ <Text>{item.title}</Text>
57
+ </View>
58
+ );
59
+ };
60
+
61
+ render(
62
+ <AnimatedFlashListItem<TestItem>
63
+ item={defaultItem}
64
+ index={0}
65
+ totalItems={5}
66
+ isDragEnabled={false}
67
+ renderItem={renderItem}
68
+ />,
69
+ );
70
+
71
+ expect(receivedItem).toEqual(defaultItem);
72
+ });
73
+
74
+ it('passes index to renderItem', () => {
75
+ let receivedIndex: number | null = null;
76
+
77
+ const renderItem = ({ item, index }: AnimatedRenderItemInfo<TestItem>) => {
78
+ receivedIndex = index;
79
+ return (
80
+ <View>
81
+ <Text>{item.title}</Text>
82
+ </View>
83
+ );
84
+ };
85
+
86
+ render(
87
+ <AnimatedFlashListItem<TestItem>
88
+ item={defaultItem}
89
+ index={3}
90
+ totalItems={5}
91
+ isDragEnabled={false}
92
+ renderItem={renderItem}
93
+ />,
94
+ );
95
+
96
+ expect(receivedIndex).toBe(3);
97
+ });
98
+
99
+ it('passes totalItems to renderItem', () => {
100
+ let receivedTotalItems: number | null = null;
101
+
102
+ const renderItem = ({ item, totalItems }: AnimatedRenderItemInfo<TestItem>) => {
103
+ receivedTotalItems = totalItems;
104
+ return (
105
+ <View>
106
+ <Text>{item.title}</Text>
107
+ </View>
108
+ );
109
+ };
110
+
111
+ render(
112
+ <AnimatedFlashListItem<TestItem>
113
+ item={defaultItem}
114
+ index={0}
115
+ totalItems={10}
116
+ isDragEnabled={false}
117
+ renderItem={renderItem}
118
+ />,
119
+ );
120
+
121
+ expect(receivedTotalItems).toBe(10);
122
+ });
123
+
124
+ it('provides dragHandleProps when isDragEnabled is true', () => {
125
+ let receivedDragHandleProps: unknown = null;
126
+
127
+ const renderItem = ({ item, dragHandleProps }: AnimatedRenderItemInfo<TestItem>) => {
128
+ receivedDragHandleProps = dragHandleProps;
129
+ return (
130
+ <View>
131
+ <Text>{item.title}</Text>
132
+ </View>
133
+ );
134
+ };
135
+
136
+ render(
137
+ <AnimatedFlashListItem<TestItem>
138
+ item={defaultItem}
139
+ index={0}
140
+ totalItems={5}
141
+ isDragEnabled={true}
142
+ renderItem={renderItem}
143
+ />,
144
+ );
145
+
146
+ expect(receivedDragHandleProps).not.toBeNull();
147
+ expect((receivedDragHandleProps as any).gesture).toBeDefined();
148
+ expect((receivedDragHandleProps as any).isDragging).toBeDefined();
149
+ });
150
+
151
+ it('provides null dragHandleProps when isDragEnabled is false', () => {
152
+ let receivedDragHandleProps: unknown = 'initial';
153
+
154
+ const renderItem = ({ item, dragHandleProps }: AnimatedRenderItemInfo<TestItem>) => {
155
+ receivedDragHandleProps = dragHandleProps;
156
+ return (
157
+ <View>
158
+ <Text>{item.title}</Text>
159
+ </View>
160
+ );
161
+ };
162
+
163
+ render(
164
+ <AnimatedFlashListItem<TestItem>
165
+ item={defaultItem}
166
+ index={0}
167
+ totalItems={5}
168
+ isDragEnabled={false}
169
+ renderItem={renderItem}
170
+ />,
171
+ );
172
+
173
+ expect(receivedDragHandleProps).toBeNull();
174
+ });
175
+
176
+ it('provides triggerExitAnimation function', () => {
177
+ let receivedTriggerExit: unknown = null;
178
+
179
+ const renderItem = ({
180
+ item,
181
+ triggerExitAnimation,
182
+ }: AnimatedRenderItemInfo<TestItem>) => {
183
+ receivedTriggerExit = triggerExitAnimation;
184
+ return (
185
+ <View>
186
+ <Text>{item.title}</Text>
187
+ </View>
188
+ );
189
+ };
190
+
191
+ render(
192
+ <AnimatedFlashListItem<TestItem>
193
+ item={defaultItem}
194
+ index={0}
195
+ totalItems={5}
196
+ isDragEnabled={false}
197
+ renderItem={renderItem}
198
+ />,
199
+ );
200
+
201
+ expect(typeof receivedTriggerExit).toBe('function');
202
+ });
203
+
204
+ it('provides resetExitAnimation function', () => {
205
+ let receivedResetExit: unknown = null;
206
+
207
+ const renderItem = ({
208
+ item,
209
+ resetExitAnimation,
210
+ }: AnimatedRenderItemInfo<TestItem>) => {
211
+ receivedResetExit = resetExitAnimation;
212
+ return (
213
+ <View>
214
+ <Text>{item.title}</Text>
215
+ </View>
216
+ );
217
+ };
218
+
219
+ render(
220
+ <AnimatedFlashListItem<TestItem>
221
+ item={defaultItem}
222
+ index={0}
223
+ totalItems={5}
224
+ isDragEnabled={false}
225
+ renderItem={renderItem}
226
+ />,
227
+ );
228
+
229
+ expect(typeof receivedResetExit).toBe('function');
230
+ });
231
+
232
+ it('calls onReorderByDelta when provided', () => {
233
+ const onReorderByDelta = jest.fn();
234
+
235
+ render(
236
+ <AnimatedFlashListItem<TestItem>
237
+ item={defaultItem}
238
+ index={0}
239
+ totalItems={5}
240
+ isDragEnabled={true}
241
+ renderItem={defaultRenderItem}
242
+ onReorderByDelta={onReorderByDelta}
243
+ />,
244
+ );
245
+
246
+ // Callback should be provided but not called until drag completes
247
+ expect(onReorderByDelta).not.toHaveBeenCalled();
248
+ });
249
+
250
+ it('calls onHapticFeedback when provided', () => {
251
+ const onHapticFeedback = jest.fn();
252
+
253
+ render(
254
+ <AnimatedFlashListItem<TestItem>
255
+ item={defaultItem}
256
+ index={0}
257
+ totalItems={5}
258
+ isDragEnabled={true}
259
+ renderItem={defaultRenderItem}
260
+ onHapticFeedback={onHapticFeedback}
261
+ />,
262
+ );
263
+
264
+ // Callback should be provided but not called until drag starts
265
+ expect(onHapticFeedback).not.toHaveBeenCalled();
266
+ });
267
+
268
+ it('re-renders when item changes', () => {
269
+ const item1: TestItem = { id: 'item-1', title: 'First Item' };
270
+ const item2: TestItem = { id: 'item-2', title: 'Second Item' };
271
+
272
+ const { rerender, getByText, queryByText } = render(
273
+ <AnimatedFlashListItem<TestItem>
274
+ item={item1}
275
+ index={0}
276
+ totalItems={5}
277
+ isDragEnabled={false}
278
+ renderItem={defaultRenderItem}
279
+ />,
280
+ );
281
+
282
+ expect(getByText('First Item')).toBeTruthy();
283
+ expect(queryByText('Second Item')).toBeNull();
284
+
285
+ rerender(
286
+ <AnimatedFlashListItem<TestItem>
287
+ item={item2}
288
+ index={0}
289
+ totalItems={5}
290
+ isDragEnabled={false}
291
+ renderItem={defaultRenderItem}
292
+ />,
293
+ );
294
+
295
+ expect(getByText('Second Item')).toBeTruthy();
296
+ });
297
+
298
+ it('updates when index changes', () => {
299
+ let lastIndex = -1;
300
+
301
+ const renderItem = ({ item, index }: AnimatedRenderItemInfo<TestItem>) => {
302
+ lastIndex = index;
303
+ return (
304
+ <View>
305
+ <Text>{item.title}</Text>
306
+ </View>
307
+ );
308
+ };
309
+
310
+ const { rerender } = render(
311
+ <AnimatedFlashListItem<TestItem>
312
+ item={defaultItem}
313
+ index={0}
314
+ totalItems={5}
315
+ isDragEnabled={false}
316
+ renderItem={renderItem}
317
+ />,
318
+ );
319
+
320
+ expect(lastIndex).toBe(0);
321
+
322
+ rerender(
323
+ <AnimatedFlashListItem<TestItem>
324
+ item={defaultItem}
325
+ index={2}
326
+ totalItems={5}
327
+ isDragEnabled={false}
328
+ renderItem={renderItem}
329
+ />,
330
+ );
331
+
332
+ expect(lastIndex).toBe(2);
333
+ });
334
+
335
+ it('handles isDragEnabled toggle', () => {
336
+ let dragHandleProps: unknown = null;
337
+
338
+ const renderItem = ({ item, dragHandleProps: props }: AnimatedRenderItemInfo<TestItem>) => {
339
+ dragHandleProps = props;
340
+ return (
341
+ <View>
342
+ <Text>{item.title}</Text>
343
+ </View>
344
+ );
345
+ };
346
+
347
+ const { rerender } = render(
348
+ <AnimatedFlashListItem<TestItem>
349
+ item={defaultItem}
350
+ index={0}
351
+ totalItems={5}
352
+ isDragEnabled={true}
353
+ renderItem={renderItem}
354
+ />,
355
+ );
356
+
357
+ expect(dragHandleProps).not.toBeNull();
358
+
359
+ rerender(
360
+ <AnimatedFlashListItem<TestItem>
361
+ item={defaultItem}
362
+ index={0}
363
+ totalItems={5}
364
+ isDragEnabled={false}
365
+ renderItem={renderItem}
366
+ />,
367
+ );
368
+
369
+ expect(dragHandleProps).toBeNull();
370
+ });
371
+ });
@@ -0,0 +1,169 @@
1
+ import React from 'react';
2
+ import { renderHook, act } from '@testing-library/react-native';
3
+ import {
4
+ DragStateProvider,
5
+ useDragState,
6
+ } from '../../contexts/DragStateContext';
7
+ import { DEFAULT_DRAG_CONFIG } from '../../constants';
8
+ import { createMockFlashListRef } from '../utils/test-utils';
9
+
10
+ describe('DragStateContext', () => {
11
+ describe('useDragState', () => {
12
+ it('throws when used outside DragStateProvider', () => {
13
+ const consoleSpy = jest.spyOn(console, 'error').mockImplementation();
14
+
15
+ expect(() => {
16
+ renderHook(() => useDragState());
17
+ }).toThrow('useDragState must be used within DragStateProvider');
18
+
19
+ consoleSpy.mockRestore();
20
+ });
21
+
22
+ it('provides context value when used within DragStateProvider', () => {
23
+ const wrapper = ({ children }: { children: React.ReactNode }) => (
24
+ <DragStateProvider>{children}</DragStateProvider>
25
+ );
26
+
27
+ const { result } = renderHook(() => useDragState(), { wrapper });
28
+
29
+ expect(result.current).toBeDefined();
30
+ expect(result.current.isDragging).toBeDefined();
31
+ expect(result.current.draggedIndex).toBeDefined();
32
+ expect(result.current.draggedItemId).toBeDefined();
33
+ });
34
+ });
35
+
36
+ describe('DragStateProvider', () => {
37
+ const createWrapper = (config?: Parameters<typeof DragStateProvider>[0]['config']) => {
38
+ const Wrapper = ({ children }: { children: React.ReactNode }) => (
39
+ <DragStateProvider config={config}>{children}</DragStateProvider>
40
+ );
41
+ return Wrapper;
42
+ };
43
+
44
+ it('initializes SharedValues with default values', () => {
45
+ const { result } = renderHook(() => useDragState(), {
46
+ wrapper: createWrapper(),
47
+ });
48
+
49
+ expect(result.current.isDragging.value).toBe(false);
50
+ expect(result.current.draggedIndex.value).toBe(-1);
51
+ expect(result.current.draggedItemId.value).toBe('');
52
+ expect(result.current.currentTranslateY.value).toBe(0);
53
+ expect(result.current.draggedScale.value).toBe(1);
54
+ expect(result.current.scrollOffset.value).toBe(0);
55
+ expect(result.current.contentHeight.value).toBe(0);
56
+ expect(result.current.visibleHeight.value).toBe(0);
57
+ expect(result.current.measuredItemHeight.value).toBe(0);
58
+ expect(result.current.isDropping.value).toBe(false);
59
+ });
60
+
61
+ it('uses default drag config', () => {
62
+ const { result } = renderHook(() => useDragState(), {
63
+ wrapper: createWrapper(),
64
+ });
65
+
66
+ expect(result.current.config).toEqual(DEFAULT_DRAG_CONFIG);
67
+ });
68
+
69
+ it('merges custom config with defaults', () => {
70
+ const customConfig = {
71
+ longPressDuration: 500,
72
+ dragScale: 1.1,
73
+ };
74
+
75
+ const { result } = renderHook(() => useDragState(), {
76
+ wrapper: createWrapper(customConfig),
77
+ });
78
+
79
+ expect(result.current.config.longPressDuration).toBe(500);
80
+ expect(result.current.config.dragScale).toBe(1.1);
81
+ // Should still have other default values
82
+ expect(result.current.config.estimatedItemHeight).toBe(
83
+ DEFAULT_DRAG_CONFIG.estimatedItemHeight,
84
+ );
85
+ });
86
+
87
+ it('provides setListRef function', () => {
88
+ const { result } = renderHook(() => useDragState(), {
89
+ wrapper: createWrapper(),
90
+ });
91
+
92
+ expect(typeof result.current.setListRef).toBe('function');
93
+ });
94
+
95
+ it('provides scrollToOffset function', () => {
96
+ const { result } = renderHook(() => useDragState(), {
97
+ wrapper: createWrapper(),
98
+ });
99
+
100
+ expect(typeof result.current.scrollToOffset).toBe('function');
101
+ });
102
+
103
+ it('scrollToOffset calls the ref scrollToOffset when ref is set', () => {
104
+ const { result } = renderHook(() => useDragState(), {
105
+ wrapper: createWrapper(),
106
+ });
107
+
108
+ const mockRef = createMockFlashListRef();
109
+
110
+ act(() => {
111
+ result.current.setListRef(mockRef as any);
112
+ });
113
+
114
+ act(() => {
115
+ result.current.scrollToOffset(100, true);
116
+ });
117
+
118
+ expect(mockRef.scrollToOffset).toHaveBeenCalledWith({
119
+ offset: 100,
120
+ animated: true,
121
+ });
122
+ });
123
+
124
+ it('scrollToOffset does not crash when ref is null', () => {
125
+ const { result } = renderHook(() => useDragState(), {
126
+ wrapper: createWrapper(),
127
+ });
128
+
129
+ // Should not throw when ref is not set
130
+ expect(() => {
131
+ act(() => {
132
+ result.current.scrollToOffset(100);
133
+ });
134
+ }).not.toThrow();
135
+ });
136
+
137
+ it('resetDragState resets all values to defaults', () => {
138
+ const { result } = renderHook(() => useDragState(), {
139
+ wrapper: createWrapper(),
140
+ });
141
+
142
+ // Simulate drag state
143
+ act(() => {
144
+ result.current.isDragging.value = true;
145
+ result.current.draggedIndex.value = 2;
146
+ result.current.draggedItemId.value = 'item-2';
147
+ result.current.currentTranslateY.value = 100;
148
+ result.current.draggedScale.value = 1.05;
149
+ result.current.measuredItemHeight.value = 80;
150
+ result.current.isDropping.value = true;
151
+ });
152
+
153
+ // Reset
154
+ act(() => {
155
+ result.current.resetDragState();
156
+ });
157
+
158
+ // Verify reset
159
+ expect(result.current.isDragging.value).toBe(false);
160
+ expect(result.current.draggedIndex.value).toBe(-1);
161
+ expect(result.current.draggedItemId.value).toBe('');
162
+ expect(result.current.currentTranslateY.value).toBe(0);
163
+ expect(result.current.draggedScale.value).toBe(1);
164
+ expect(result.current.measuredItemHeight.value).toBe(0);
165
+ expect(result.current.isDropping.value).toBe(false);
166
+ });
167
+
168
+ });
169
+ });