react-native-drax 0.10.3 → 0.11.0-alpha.2

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 (47) hide show
  1. package/.eslintrc.js +2 -73
  2. package/.prettierrc +16 -0
  3. package/README.md +81 -1
  4. package/build/AllHoverViews.d.ts +0 -0
  5. package/build/AllHoverViews.js +30 -0
  6. package/build/DraxContext.d.ts +0 -1
  7. package/build/DraxList.d.ts +3 -3
  8. package/build/DraxList.js +231 -216
  9. package/build/DraxListItem.d.ts +7 -0
  10. package/build/DraxListItem.js +121 -0
  11. package/build/DraxProvider.d.ts +1 -3
  12. package/build/DraxProvider.js +322 -259
  13. package/build/DraxScrollView.d.ts +1 -1
  14. package/build/DraxScrollView.js +29 -90
  15. package/build/DraxSubprovider.d.ts +2 -2
  16. package/build/DraxSubprovider.js +1 -1
  17. package/build/DraxView.d.ts +7 -2
  18. package/build/DraxView.js +60 -383
  19. package/build/HoverView.d.ts +8 -0
  20. package/build/HoverView.js +40 -0
  21. package/build/PanGestureDetector.d.ts +3 -0
  22. package/build/PanGestureDetector.js +49 -0
  23. package/build/hooks/useContent.d.ts +23 -0
  24. package/build/hooks/useContent.js +212 -0
  25. package/build/hooks/useDraxProtocol.d.ts +5 -0
  26. package/build/hooks/useDraxProtocol.js +32 -0
  27. package/build/hooks/useDraxRegistry.d.ts +21 -20
  28. package/build/hooks/useDraxRegistry.js +195 -182
  29. package/build/hooks/useDraxScrollHandler.d.ts +25 -0
  30. package/build/hooks/useDraxScrollHandler.js +89 -0
  31. package/build/hooks/useDraxState.d.ts +1 -1
  32. package/build/hooks/useDraxState.js +9 -6
  33. package/build/hooks/useMeasurements.d.ts +9 -0
  34. package/build/hooks/useMeasurements.js +119 -0
  35. package/build/hooks/useStatus.d.ts +11 -0
  36. package/build/hooks/useStatus.js +96 -0
  37. package/build/index.d.ts +2 -0
  38. package/build/index.js +4 -1
  39. package/build/math.d.ts +2 -2
  40. package/build/math.js +10 -6
  41. package/build/params.d.ts +9 -0
  42. package/build/params.js +7 -1
  43. package/build/transform.d.ts +11 -4
  44. package/build/transform.js +50 -8
  45. package/build/types.d.ts +238 -87
  46. package/build/types.js +10 -7
  47. package/package.json +43 -45
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.DraxListItem = void 0;
27
+ const react_1 = __importStar(require("react"));
28
+ const react_native_reanimated_1 = require("react-native-reanimated");
29
+ const DraxView_1 = require("./DraxView");
30
+ // const defaultStyles = StyleSheet.create({
31
+ // draggingStyle: { opacity: 0 },
32
+ // dragReleasedStyle: { opacity: 0.5 },
33
+ // });
34
+ const RenderItemComponent = ({ itemProps: { index, item, originalIndex, horizontal, lockItemDragsToMainAxis, draggedItem, shiftsRef, itemMeasurementsRef, prevItemMeasurementsRef, resetDraggedItem, keyExtractor, previousShiftsRef, registrationsRef, data, }, ...draxViewProps }) => {
35
+ const animatedValueX = (0, react_native_reanimated_1.useSharedValue)(0);
36
+ const animatedValueY = (0, react_native_reanimated_1.useSharedValue)(0);
37
+ const itemKey = (item && keyExtractor?.(item, index)) ?? item?.key ?? item?.id;
38
+ const shiftTransformStyle = (0, react_native_reanimated_1.useAnimatedStyle)(() => {
39
+ return {
40
+ transform: [{ translateX: animatedValueX.value }, { translateY: animatedValueY.value }],
41
+ };
42
+ });
43
+ (0, react_native_reanimated_1.useAnimatedReaction)(() => shiftsRef.value[originalIndex], shift => {
44
+ const isDragged = typeof draggedItem.value === 'number';
45
+ /** Apply reordering animations by shifting items between them */
46
+ if (isDragged) {
47
+ animatedValueX.value = (0, react_native_reanimated_1.withTiming)(shift.x, {
48
+ duration: 200,
49
+ });
50
+ animatedValueY.value = (0, react_native_reanimated_1.withTiming)(shift.y, {
51
+ duration: 200,
52
+ });
53
+ }
54
+ });
55
+ (0, react_1.useLayoutEffect)(() => {
56
+ /** Reset the shift when the item moves to a new index. */
57
+ animatedValueX.value = 0;
58
+ animatedValueY.value = 0;
59
+ }, [index]);
60
+ (0, react_1.useLayoutEffect)(() => {
61
+ const measurements = itemMeasurementsRef.current[originalIndex];
62
+ const previousMeasurementsIndex = prevItemMeasurementsRef.current.findIndex(item => item?.key === itemKey);
63
+ const previousMeasurements = prevItemMeasurementsRef.current[previousMeasurementsIndex];
64
+ const isLayoutShifted = previousShiftsRef.value.some(item => item.x || item.y);
65
+ /**
66
+ * Animate as items are added/removed from the list.
67
+ * For newly added items, if layout is shifted, it's most probably an external drag that was dropped in the list
68
+ * and it skips list layout animation.
69
+ *
70
+ * @todo implement animations even for this described scenario
71
+ * by applying the shift offset.
72
+ */
73
+ if (previousMeasurements && measurements && !isLayoutShifted) {
74
+ const offsetX = previousMeasurements.x - measurements.x;
75
+ const offsetY = previousMeasurements.y - measurements.y;
76
+ /** Start from previous values before the items data (order) changed */
77
+ animatedValueX.value = offsetX;
78
+ animatedValueY.value = offsetY;
79
+ animatedValueX.value = (0, react_native_reanimated_1.withTiming)(0, {
80
+ duration: 200,
81
+ });
82
+ animatedValueY.value = (0, react_native_reanimated_1.withTiming)(0, {
83
+ duration: 200,
84
+ });
85
+ }
86
+ }, [itemKey, originalIndex, horizontal, itemMeasurementsRef, prevItemMeasurementsRef, previousShiftsRef]);
87
+ return (react_1.default.createElement(DraxView_1.DraxView, { lockDragXPosition: lockItemDragsToMainAxis && !horizontal, lockDragYPosition: lockItemDragsToMainAxis && horizontal, ...draxViewProps, style: [shiftTransformStyle, draxViewProps.style], payload: { ...draxViewProps.payload, index, originalIndex, item: data?.[index] }, onDragEnd: event => {
88
+ draxViewProps.onDragEnd?.(event);
89
+ resetDraggedItem();
90
+ }, onDragDrop: event => {
91
+ draxViewProps.onDragDrop?.(event);
92
+ resetDraggedItem();
93
+ }, onMeasure: measurements => {
94
+ draxViewProps.onMeasure?.(measurements);
95
+ if (originalIndex !== undefined && measurements) {
96
+ /**
97
+ * @todo 🪲 BUG
98
+ * @platform web
99
+ * @summary Somehow the measurements for the same item are getting duplicated.
100
+ */
101
+ // Clear any duplicate measurements
102
+ const duplicateIndex = itemMeasurementsRef.current.findIndex((item, idx) => idx !== originalIndex && item?.key === itemKey);
103
+ if (duplicateIndex !== -1) {
104
+ itemMeasurementsRef.current[duplicateIndex] = undefined;
105
+ }
106
+ // Store the new measurement
107
+ itemMeasurementsRef.current[originalIndex] = {
108
+ ...measurements,
109
+ key: itemKey,
110
+ };
111
+ }
112
+ }, registration: registration => {
113
+ draxViewProps.registration?.(registration);
114
+ if (registration && originalIndex !== undefined) {
115
+ // console.log(`registering [${index}, ${originalIndex}], ${registration.id}`);
116
+ registrationsRef.current[originalIndex] = registration;
117
+ registration.measure();
118
+ }
119
+ } }));
120
+ };
121
+ exports.DraxListItem = (0, react_1.memo)(RenderItemComponent);
@@ -1,4 +1,2 @@
1
- /// <reference types="react" />
2
- /// <reference types="react" />
3
1
  import { DraxProviderProps } from './types';
4
- export declare const DraxProvider: ({ debug, style, children, }: DraxProviderProps) => JSX.Element;
2
+ export declare const DraxProvider: ({ debug, style, children }: DraxProviderProps) => JSX.Element;