@legendapp/list 3.0.0-beta.4 → 3.0.0-beta.40

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 (45) hide show
  1. package/.DS_Store +0 -0
  2. package/CHANGELOG.md +19 -0
  3. package/README.md +8 -1
  4. package/animated.d.ts +607 -5
  5. package/animated.js +2 -2
  6. package/animated.mjs +1 -1
  7. package/index.d.ts +1192 -11
  8. package/index.js +1989 -946
  9. package/index.mjs +1988 -947
  10. package/index.native.js +1758 -866
  11. package/index.native.mjs +1740 -850
  12. package/keyboard-test.d.ts +206 -0
  13. package/keyboard-test.js +34 -0
  14. package/keyboard-test.mjs +13 -0
  15. package/keyboard.d.ts +206 -8
  16. package/keyboard.js +340 -32
  17. package/keyboard.mjs +343 -34
  18. package/package.json +52 -1
  19. package/{types-JPHClxiw.d.mts → react-native.d.ts} +399 -154
  20. package/{section-list.native.js → react-native.js} +1838 -1094
  21. package/{section-list.native.mjs → react-native.mjs} +1811 -1077
  22. package/{types-JPHClxiw.d.ts → react.d.ts} +456 -154
  23. package/react.js +4812 -0
  24. package/react.mjs +4782 -0
  25. package/reanimated.d.ts +618 -7
  26. package/reanimated.js +156 -30
  27. package/reanimated.mjs +155 -29
  28. package/section-list.d.ts +607 -5
  29. package/section-list.js +38 -3679
  30. package/section-list.mjs +34 -3676
  31. package/animated.d.mts +0 -9
  32. package/index.d.mts +0 -23
  33. package/index.native.d.mts +0 -23
  34. package/index.native.d.ts +0 -23
  35. package/keyboard-controller.d.mts +0 -12
  36. package/keyboard-controller.d.ts +0 -12
  37. package/keyboard-controller.js +0 -69
  38. package/keyboard-controller.mjs +0 -48
  39. package/keyboard.d.mts +0 -13
  40. package/reanimated.d.mts +0 -18
  41. package/section-list.d.mts +0 -113
  42. package/section-list.native.d.mts +0 -113
  43. package/section-list.native.d.ts +0 -113
  44. package/types-YNdphn_A.d.mts +0 -670
  45. package/types-YNdphn_A.d.ts +0 -670
package/keyboard.mjs CHANGED
@@ -1,83 +1,392 @@
1
1
  import * as React from 'react';
2
- import { forwardRef } from 'react';
3
- import { Platform } from 'react-native';
2
+ import { useRef, useState, useMemo, useCallback, useEffect } from 'react';
3
+ import { StyleSheet, Platform } from 'react-native';
4
4
  import { useKeyboardHandler } from 'react-native-keyboard-controller';
5
- import { useAnimatedRef, useSharedValue, useAnimatedScrollHandler, runOnJS, scrollTo, useAnimatedProps, useAnimatedStyle } from 'react-native-reanimated';
5
+ import { useAnimatedRef, useSharedValue, isWorkletFunction, useAnimatedScrollHandler, runOnJS, useComposedEventHandler, useAnimatedProps, useAnimatedStyle } from 'react-native-reanimated';
6
+ import { internal, typedForwardRef } from '@legendapp/list/react-native';
6
7
  import { AnimatedLegendList } from '@legendapp/list/reanimated';
7
8
 
8
9
  // src/integrations/keyboard.tsx
9
- var KeyboardAvoidingLegendList = forwardRef(function KeyboardAvoidingLegendList2(props, forwardedRef) {
10
+ var { useCombinedRef } = internal;
11
+ var clampProgress = (progress) => {
12
+ "worklet";
13
+ return Math.min(1, Math.max(0, progress));
14
+ };
15
+ var calculateKeyboardInset = (height, safeAreaInsetBottom) => {
16
+ "worklet";
17
+ return Math.max(0, height - safeAreaInsetBottom);
18
+ };
19
+ var calculateEffectiveKeyboardHeight = (keyboardHeight, contentLength, scrollLength, alignItemsAtEnd) => {
20
+ "worklet";
21
+ if (alignItemsAtEnd) {
22
+ return keyboardHeight;
23
+ } else {
24
+ const availableSpace = Math.max(0, scrollLength - contentLength);
25
+ return Math.max(0, keyboardHeight - availableSpace);
26
+ }
27
+ };
28
+ var calculateKeyboardTargetOffset = (startOffset, keyboardHeight, isOpening, progress) => {
29
+ "worklet";
30
+ const normalizedProgress = isOpening ? progress : 1 - progress;
31
+ const delta = (isOpening ? keyboardHeight : -keyboardHeight) * normalizedProgress;
32
+ return Math.max(0, startOffset + delta);
33
+ };
34
+ var KeyboardAvoidingLegendList = typedForwardRef(function KeyboardAvoidingLegendList2(props, forwardedRef) {
10
35
  const {
36
+ contentContainerStyle: contentContainerStyleProp,
11
37
  contentInset: contentInsetProp,
12
38
  horizontal,
39
+ onMetricsChange: onMetricsChangeProp,
40
+ onContentSizeChange: onContentSizeChangeProp,
41
+ onLayout: onLayoutProp,
13
42
  onScroll: onScrollProp,
14
43
  safeAreaInsetBottom = 0,
44
+ style: styleProp,
15
45
  ...rest
16
46
  } = props;
47
+ const { alignItemsAtEnd } = props;
48
+ const styleFlattened = StyleSheet.flatten(styleProp);
49
+ const refLegendList = useRef(null);
50
+ const combinedRef = useCombinedRef(forwardedRef, refLegendList);
51
+ const isIos = Platform.OS === "ios";
52
+ const isAndroid = Platform.OS === "android";
17
53
  const scrollViewRef = useAnimatedRef();
18
54
  const scrollOffsetY = useSharedValue(0);
55
+ const animatedOffsetY = useSharedValue(null);
19
56
  const scrollOffsetAtKeyboardStart = useSharedValue(0);
57
+ const animationMode = useSharedValue("idle");
20
58
  const keyboardInset = useSharedValue(0);
59
+ const keyboardHeight = useSharedValue(0);
60
+ const contentLength = useSharedValue(0);
61
+ const scrollLength = useSharedValue(0);
62
+ const isOpening = useSharedValue(false);
63
+ const didInteractive = useSharedValue(false);
64
+ const shouldUpdateAlignItemsAtEndMinSize = useSharedValue(false);
65
+ const isKeyboardOpen = useSharedValue(false);
66
+ const keyboardInsetRef = useRef(0);
67
+ const [alignItemsAtEndMinSize, setAlignItemsAtEndMinSize] = useState(void 0);
68
+ const onScrollValue = onScrollProp;
69
+ const onScrollCallback = typeof onScrollValue === "function" ? onScrollValue : void 0;
70
+ const onScrollProcessed = onScrollValue && typeof onScrollValue === "object" && "workletEventHandler" in onScrollValue ? onScrollValue : null;
71
+ const onScrollCallbackIsWorklet = useMemo(
72
+ () => onScrollCallback ? isWorkletFunction(onScrollCallback) : false,
73
+ [onScrollCallback]
74
+ );
75
+ const handleContentSizeChange = useCallback(
76
+ (width, height) => {
77
+ const nextContentLength = horizontal ? width : height;
78
+ if (Number.isFinite(nextContentLength) && nextContentLength > 0) {
79
+ contentLength.set(nextContentLength);
80
+ }
81
+ onContentSizeChangeProp == null ? void 0 : onContentSizeChangeProp(width, height);
82
+ },
83
+ [contentLength, horizontal, onContentSizeChangeProp]
84
+ );
85
+ const handleLayout = useCallback(
86
+ (event) => {
87
+ const nextScrollLength = event.nativeEvent.layout[horizontal ? "width" : "height"];
88
+ if (Number.isFinite(nextScrollLength) && nextScrollLength > 0) {
89
+ scrollLength.set(nextScrollLength);
90
+ }
91
+ onLayoutProp == null ? void 0 : onLayoutProp(event);
92
+ },
93
+ [horizontal, onLayoutProp, scrollLength]
94
+ );
21
95
  const scrollHandler = useAnimatedScrollHandler(
22
96
  (event) => {
23
- scrollOffsetY.value = event.contentOffset[horizontal ? "x" : "y"];
24
- if (onScrollProp) {
25
- runOnJS(onScrollProp)(event);
97
+ if (animationMode.get() !== "running" || didInteractive.get()) {
98
+ scrollOffsetY.set(event.contentOffset[horizontal ? "x" : "y"]);
99
+ }
100
+ if (onScrollCallback) {
101
+ if (onScrollCallbackIsWorklet) {
102
+ onScrollCallback(event);
103
+ } else {
104
+ runOnJS(onScrollCallback)(event);
105
+ }
106
+ }
107
+ },
108
+ [horizontal, onScrollCallback, onScrollCallbackIsWorklet]
109
+ );
110
+ const composedScrollHandler = useComposedEventHandler([
111
+ scrollHandler,
112
+ onScrollProcessed
113
+ ]);
114
+ const finalScrollHandler = onScrollProcessed ? composedScrollHandler : scrollHandler;
115
+ const setScrollProcessingEnabled = useCallback(
116
+ (enabled) => {
117
+ var _a;
118
+ return (_a = refLegendList.current) == null ? void 0 : _a.setScrollProcessingEnabled(enabled);
119
+ },
120
+ [refLegendList]
121
+ );
122
+ const reportContentInset = useCallback(
123
+ (bottom) => {
124
+ var _a;
125
+ return (_a = refLegendList.current) == null ? void 0 : _a.reportContentInset({ bottom });
126
+ },
127
+ [refLegendList]
128
+ );
129
+ const clearAlignItemsAtEndMinSize = useCallback(() => {
130
+ setAlignItemsAtEndMinSize((prev) => prev === void 0 ? prev : void 0);
131
+ }, []);
132
+ const updateAlignItemsAtEndMinSize = useCallback(
133
+ (nextKeyboardInset) => {
134
+ var _a;
135
+ if (isAndroid) {
136
+ return;
137
+ }
138
+ if (nextKeyboardInset !== void 0) {
139
+ keyboardInsetRef.current = nextKeyboardInset;
140
+ }
141
+ if (!alignItemsAtEnd || horizontal) {
142
+ clearAlignItemsAtEndMinSize();
143
+ return;
144
+ }
145
+ const state = (_a = refLegendList.current) == null ? void 0 : _a.getState();
146
+ if (!state) {
147
+ return;
148
+ }
149
+ const currentInset = keyboardInsetRef.current;
150
+ if (currentInset <= 0) {
151
+ clearAlignItemsAtEndMinSize();
152
+ return;
153
+ }
154
+ if (state.scrollLength <= 0) {
155
+ return;
26
156
  }
157
+ const nextMinSize = Math.max(0, state.scrollLength - currentInset);
158
+ setAlignItemsAtEndMinSize((prev) => prev === nextMinSize ? prev : nextMinSize);
27
159
  },
28
- [onScrollProp, horizontal]
160
+ [alignItemsAtEnd, clearAlignItemsAtEndMinSize, horizontal]
161
+ );
162
+ const updateScrollMetrics = useCallback(() => {
163
+ var _a;
164
+ const state = (_a = refLegendList.current) == null ? void 0 : _a.getState();
165
+ if (!state) {
166
+ return;
167
+ }
168
+ contentLength.set(state.contentLength);
169
+ scrollLength.set(state.scrollLength);
170
+ updateAlignItemsAtEndMinSize();
171
+ }, [contentLength, scrollLength, updateAlignItemsAtEndMinSize]);
172
+ const handleMetricsChange = useCallback(
173
+ (metrics) => {
174
+ updateScrollMetrics();
175
+ onMetricsChangeProp == null ? void 0 : onMetricsChangeProp(metrics);
176
+ },
177
+ [onMetricsChangeProp, updateScrollMetrics]
178
+ );
179
+ useEffect(() => {
180
+ updateAlignItemsAtEndMinSize();
181
+ }, [updateAlignItemsAtEndMinSize]);
182
+ const getEffectiveKeyboardHeightFromInset = useCallback(
183
+ (nextKeyboardInset) => {
184
+ "worklet";
185
+ return calculateEffectiveKeyboardHeight(
186
+ nextKeyboardInset,
187
+ contentLength.get(),
188
+ scrollLength.get(),
189
+ alignItemsAtEnd
190
+ );
191
+ },
192
+ [alignItemsAtEnd, contentLength, scrollLength]
193
+ );
194
+ const getEffectiveKeyboardHeightFromEvent = useCallback(
195
+ (eventHeight) => {
196
+ "worklet";
197
+ const nextKeyboardInset = calculateKeyboardInset(eventHeight, safeAreaInsetBottom);
198
+ return getEffectiveKeyboardHeightFromInset(nextKeyboardInset);
199
+ },
200
+ [getEffectiveKeyboardHeightFromInset, safeAreaInsetBottom]
29
201
  );
30
202
  useKeyboardHandler(
31
203
  // biome-ignore assist/source/useSortedKeys: prefer start/move/end
32
204
  {
33
- onStart: () => {
205
+ onStart: (event) => {
206
+ "worklet";
207
+ const progress = clampProgress(event.progress);
208
+ if (isKeyboardOpen.get() && progress >= 1 && event.height > 0) {
209
+ didInteractive.set(false);
210
+ animationMode.set("idle");
211
+ runOnJS(setScrollProcessingEnabled)(true);
212
+ return;
213
+ }
214
+ animationMode.set("running");
215
+ if (!didInteractive.get()) {
216
+ if (event.height > 0) {
217
+ keyboardHeight.set(calculateKeyboardInset(event.height, safeAreaInsetBottom));
218
+ }
219
+ const vIsOpening = progress > 0;
220
+ isOpening.set(vIsOpening);
221
+ shouldUpdateAlignItemsAtEndMinSize.set(
222
+ !!alignItemsAtEnd && !horizontal && contentLength.get() < scrollLength.get()
223
+ );
224
+ if (!shouldUpdateAlignItemsAtEndMinSize.get()) {
225
+ runOnJS(clearAlignItemsAtEndMinSize)();
226
+ }
227
+ const vScrollOffset = scrollOffsetY.get();
228
+ scrollOffsetAtKeyboardStart.set(vScrollOffset);
229
+ if (isIos) {
230
+ const vEffectiveKeyboardHeight = getEffectiveKeyboardHeightFromInset(keyboardHeight.get());
231
+ const targetOffset = Math.max(
232
+ 0,
233
+ vIsOpening ? vScrollOffset + vEffectiveKeyboardHeight : vScrollOffset - vEffectiveKeyboardHeight
234
+ );
235
+ scrollOffsetY.set(targetOffset);
236
+ animatedOffsetY.set(targetOffset);
237
+ keyboardInset.set(vEffectiveKeyboardHeight);
238
+ runOnJS(updateAlignItemsAtEndMinSize)(vEffectiveKeyboardHeight);
239
+ } else if (isAndroid) {
240
+ animatedOffsetY.set(vScrollOffset);
241
+ }
242
+ runOnJS(setScrollProcessingEnabled)(false);
243
+ }
244
+ },
245
+ onInteractive: (event) => {
34
246
  "worklet";
35
- scrollOffsetAtKeyboardStart.value = scrollOffsetY.value;
247
+ if (animationMode.get() !== "running") {
248
+ runOnJS(setScrollProcessingEnabled)(false);
249
+ }
250
+ animationMode.set("running");
251
+ if (!didInteractive.get()) {
252
+ didInteractive.set(true);
253
+ }
254
+ if (isAndroid && !horizontal) {
255
+ const newInset = calculateKeyboardInset(event.height, safeAreaInsetBottom);
256
+ keyboardInset.set(newInset);
257
+ }
258
+ if (shouldUpdateAlignItemsAtEndMinSize.get() && !horizontal && alignItemsAtEnd) {
259
+ const vEffectiveKeyboardHeight = getEffectiveKeyboardHeightFromEvent(event.height);
260
+ runOnJS(updateAlignItemsAtEndMinSize)(vEffectiveKeyboardHeight);
261
+ }
36
262
  },
37
263
  onMove: (event) => {
38
264
  "worklet";
39
- const targetOffset = scrollOffsetAtKeyboardStart.value + event.height;
40
- scrollOffsetY.value = targetOffset;
41
- scrollTo(scrollViewRef, 0, targetOffset, false);
42
- if (!horizontal) {
43
- keyboardInset.value = Math.max(0, event.height - safeAreaInsetBottom);
265
+ const vIsOpening = isOpening.get();
266
+ if (isAndroid) {
267
+ if (!didInteractive.get()) {
268
+ const progress = clampProgress(event.progress);
269
+ const vEffectiveKeyboardHeight = getEffectiveKeyboardHeightFromInset(keyboardHeight.get());
270
+ const targetOffset = calculateKeyboardTargetOffset(
271
+ scrollOffsetAtKeyboardStart.get(),
272
+ vEffectiveKeyboardHeight,
273
+ vIsOpening,
274
+ progress
275
+ );
276
+ scrollOffsetY.set(targetOffset);
277
+ animatedOffsetY.set(targetOffset);
278
+ }
279
+ if (!horizontal) {
280
+ const newInset = calculateKeyboardInset(event.height, safeAreaInsetBottom);
281
+ keyboardInset.set(newInset);
282
+ }
283
+ }
284
+ if (!horizontal && alignItemsAtEnd && !vIsOpening && shouldUpdateAlignItemsAtEndMinSize.get()) {
285
+ const vEffectiveKeyboardHeight = getEffectiveKeyboardHeightFromEvent(event.height);
286
+ runOnJS(updateAlignItemsAtEndMinSize)(vEffectiveKeyboardHeight);
44
287
  }
45
288
  },
46
289
  onEnd: (event) => {
47
290
  "worklet";
48
- const targetOffset = scrollOffsetAtKeyboardStart.value + event.height;
49
- scrollOffsetY.value = targetOffset;
50
- scrollTo(scrollViewRef, 0, targetOffset, false);
51
- if (!horizontal) {
52
- keyboardInset.value = Math.max(0, event.height - safeAreaInsetBottom);
291
+ const wasInteractive = didInteractive.get();
292
+ const vMode = animationMode.get();
293
+ animationMode.set("idle");
294
+ if (vMode === "running") {
295
+ const progress = clampProgress(event.progress);
296
+ const vEffectiveKeyboardHeight = getEffectiveKeyboardHeightFromInset(keyboardHeight.get());
297
+ const vIsOpening = isOpening.get();
298
+ if (!wasInteractive) {
299
+ const targetOffset = calculateKeyboardTargetOffset(
300
+ scrollOffsetAtKeyboardStart.get(),
301
+ vEffectiveKeyboardHeight,
302
+ vIsOpening,
303
+ progress
304
+ );
305
+ scrollOffsetY.set(targetOffset);
306
+ animatedOffsetY.set(targetOffset);
307
+ }
308
+ runOnJS(setScrollProcessingEnabled)(true);
309
+ didInteractive.set(false);
310
+ isKeyboardOpen.set(event.height > 0);
311
+ if (!horizontal) {
312
+ const newInset = calculateKeyboardInset(event.height, safeAreaInsetBottom);
313
+ keyboardInset.set(newInset);
314
+ runOnJS(reportContentInset)(newInset);
315
+ if (!vIsOpening) {
316
+ runOnJS(updateAlignItemsAtEndMinSize)(newInset);
317
+ }
318
+ if (newInset <= 0) {
319
+ animatedOffsetY.set(scrollOffsetY.get());
320
+ }
321
+ }
53
322
  }
54
323
  }
55
324
  },
56
- [scrollViewRef, safeAreaInsetBottom]
325
+ [
326
+ alignItemsAtEnd,
327
+ clearAlignItemsAtEndMinSize,
328
+ getEffectiveKeyboardHeightFromEvent,
329
+ getEffectiveKeyboardHeightFromInset,
330
+ horizontal,
331
+ reportContentInset,
332
+ safeAreaInsetBottom,
333
+ scrollViewRef,
334
+ setScrollProcessingEnabled,
335
+ updateAlignItemsAtEndMinSize
336
+ ]
57
337
  );
58
- const animatedProps = Platform.OS === "ios" ? useAnimatedProps(() => {
338
+ const animatedProps = useAnimatedProps(() => {
59
339
  "worklet";
60
340
  var _a, _b, _c, _d;
61
- return {
62
- contentInset: {
63
- bottom: ((_a = contentInsetProp == null ? void 0 : contentInsetProp.bottom) != null ? _a : 0) + (horizontal ? 0 : keyboardInset.value),
341
+ const vAnimatedOffsetY = animatedOffsetY.get();
342
+ const baseProps = {
343
+ contentOffset: vAnimatedOffsetY === null ? void 0 : {
344
+ x: 0,
345
+ y: vAnimatedOffsetY
346
+ }
347
+ };
348
+ if (isIos) {
349
+ const keyboardInsetBottom = keyboardInset.get();
350
+ const contentInset = {
351
+ bottom: ((_a = contentInsetProp == null ? void 0 : contentInsetProp.bottom) != null ? _a : 0) + (horizontal ? 0 : keyboardInsetBottom),
64
352
  left: (_b = contentInsetProp == null ? void 0 : contentInsetProp.left) != null ? _b : 0,
65
353
  right: (_c = contentInsetProp == null ? void 0 : contentInsetProp.right) != null ? _c : 0,
66
354
  top: (_d = contentInsetProp == null ? void 0 : contentInsetProp.top) != null ? _d : 0
67
- }
68
- };
69
- }) : void 0;
70
- const style = Platform.OS !== "ios" ? useAnimatedStyle(() => ({
71
- marginBottom: keyboardInset.value
72
- })) : void 0;
355
+ };
356
+ return Object.assign(baseProps, {
357
+ contentInset
358
+ });
359
+ } else {
360
+ return baseProps;
361
+ }
362
+ });
363
+ const style = isAndroid ? useAnimatedStyle(
364
+ () => ({
365
+ ...styleFlattened || {},
366
+ marginBottom: keyboardInset.get()
367
+ }),
368
+ [styleProp, keyboardInset]
369
+ ) : styleProp;
370
+ const contentContainerStyle = useMemo(() => {
371
+ if (alignItemsAtEndMinSize === void 0) {
372
+ return contentContainerStyleProp;
373
+ }
374
+ const minSizeStyle = horizontal ? { minWidth: alignItemsAtEndMinSize } : { minHeight: alignItemsAtEndMinSize };
375
+ return contentContainerStyleProp ? [contentContainerStyleProp, minSizeStyle] : minSizeStyle;
376
+ }, [alignItemsAtEndMinSize, contentContainerStyleProp, horizontal]);
73
377
  return /* @__PURE__ */ React.createElement(
74
378
  AnimatedLegendList,
75
379
  {
76
380
  ...rest,
77
381
  animatedProps,
382
+ automaticallyAdjustContentInsets: false,
383
+ contentContainerStyle,
78
384
  keyboardDismissMode: "interactive",
79
- onScroll: scrollHandler,
80
- ref: forwardedRef,
385
+ onContentSizeChange: handleContentSizeChange,
386
+ onLayout: handleLayout,
387
+ onMetricsChange: handleMetricsChange,
388
+ onScroll: finalScrollHandler,
389
+ ref: combinedRef,
81
390
  refScrollView: scrollViewRef,
82
391
  scrollIndicatorInsets: { bottom: 0, top: 0 },
83
392
  style
@@ -85,4 +394,4 @@ var KeyboardAvoidingLegendList = forwardRef(function KeyboardAvoidingLegendList2
85
394
  );
86
395
  });
87
396
 
88
- export { KeyboardAvoidingLegendList, KeyboardAvoidingLegendList as LegendList };
397
+ export { KeyboardAvoidingLegendList };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@legendapp/list",
3
- "version": "3.0.0-beta.4",
3
+ "version": "3.0.0-beta.40",
4
4
  "description": "Legend List is a drop-in replacement for FlatList with much better performance and supporting dynamically sized items.",
5
5
  "sideEffects": false,
6
6
  "private": false,
@@ -8,6 +8,57 @@
8
8
  "module": "./index.mjs",
9
9
  "types": "./index.d.ts",
10
10
  "react-native": "./index.native.js",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./index.d.ts",
14
+ "react-native": "./index.native.js",
15
+ "import": "./index.mjs",
16
+ "require": "./index.js",
17
+ "default": "./index.js"
18
+ },
19
+ "./animated": {
20
+ "types": "./animated.d.ts",
21
+ "import": "./animated.mjs",
22
+ "require": "./animated.js",
23
+ "default": "./animated.js"
24
+ },
25
+ "./keyboard": {
26
+ "types": "./keyboard.d.ts",
27
+ "import": "./keyboard.mjs",
28
+ "require": "./keyboard.js",
29
+ "default": "./keyboard.js"
30
+ },
31
+ "./keyboard-test": {
32
+ "types": "./keyboard-test.d.ts",
33
+ "import": "./keyboard-test.mjs",
34
+ "require": "./keyboard-test.js",
35
+ "default": "./keyboard-test.js"
36
+ },
37
+ "./reanimated": {
38
+ "types": "./reanimated.d.ts",
39
+ "import": "./reanimated.mjs",
40
+ "require": "./reanimated.js",
41
+ "default": "./reanimated.js"
42
+ },
43
+ "./react-native": {
44
+ "types": "./react-native.d.ts",
45
+ "import": "./react-native.mjs",
46
+ "require": "./react-native.js",
47
+ "default": "./react-native.js"
48
+ },
49
+ "./section-list": {
50
+ "types": "./section-list.d.ts",
51
+ "import": "./section-list.mjs",
52
+ "require": "./section-list.js",
53
+ "default": "./section-list.js"
54
+ },
55
+ "./react": {
56
+ "types": "./react.d.ts",
57
+ "import": "./react.mjs",
58
+ "require": "./react.js",
59
+ "default": "./react.js"
60
+ }
61
+ },
11
62
  "files": [
12
63
  "**"
13
64
  ],