react-native-drax 0.11.0-alpha.2 → 1.0.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.
- package/LICENSE.md +1 -1
- package/README.md +385 -227
- package/lib/module/DebugOverlay.js +121 -0
- package/lib/module/DebugOverlay.js.map +1 -0
- package/lib/module/Drax.js +36 -0
- package/lib/module/Drax.js.map +1 -0
- package/lib/module/DraxContext.js +6 -0
- package/lib/module/DraxContext.js.map +1 -0
- package/lib/module/DraxHandle.js +47 -0
- package/lib/module/DraxHandle.js.map +1 -0
- package/lib/module/DraxHandleContext.js +11 -0
- package/lib/module/DraxHandleContext.js.map +1 -0
- package/lib/module/DraxList.js +108 -0
- package/lib/module/DraxList.js.map +1 -0
- package/lib/module/DraxProvider.js +203 -0
- package/lib/module/DraxProvider.js.map +1 -0
- package/lib/module/DraxScrollView.js +167 -0
- package/lib/module/DraxScrollView.js.map +1 -0
- package/lib/module/DraxSubprovider.js +21 -0
- package/lib/module/DraxSubprovider.js.map +1 -0
- package/lib/module/DraxView.js +348 -0
- package/lib/module/DraxView.js.map +1 -0
- package/lib/module/HoverLayer.js +152 -0
- package/lib/module/HoverLayer.js.map +1 -0
- package/lib/module/SortableBoardContainer.js +386 -0
- package/lib/module/SortableBoardContainer.js.map +1 -0
- package/lib/module/SortableBoardContext.js +6 -0
- package/lib/module/SortableBoardContext.js.map +1 -0
- package/lib/module/SortableContainer.js +561 -0
- package/lib/module/SortableContainer.js.map +1 -0
- package/lib/module/SortableItem.js +226 -0
- package/lib/module/SortableItem.js.map +1 -0
- package/lib/module/SortableItemContext.js +38 -0
- package/lib/module/SortableItemContext.js.map +1 -0
- package/lib/module/compat/detectVersion.js +19 -0
- package/lib/module/compat/detectVersion.js.map +1 -0
- package/lib/module/compat/index.js +5 -0
- package/lib/module/compat/index.js.map +1 -0
- package/lib/module/compat/types.js +4 -0
- package/lib/module/compat/types.js.map +1 -0
- package/lib/module/compat/useDraxPanGesture.js +94 -0
- package/lib/module/compat/useDraxPanGesture.js.map +1 -0
- package/lib/module/hooks/index.js +5 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useCallbackDispatch.js +681 -0
- package/lib/module/hooks/useCallbackDispatch.js.map +1 -0
- package/lib/module/hooks/useDragGesture.js +240 -0
- package/lib/module/hooks/useDragGesture.js.map +1 -0
- package/lib/module/hooks/useDraxContext.js +12 -0
- package/lib/module/hooks/useDraxContext.js.map +1 -0
- package/lib/module/hooks/useDraxId.js +13 -0
- package/lib/module/hooks/useDraxId.js.map +1 -0
- package/lib/module/hooks/useDraxMethods.js +73 -0
- package/lib/module/hooks/useDraxMethods.js.map +1 -0
- package/lib/module/hooks/useDraxScrollHandler.js +97 -0
- package/lib/module/hooks/useDraxScrollHandler.js.map +1 -0
- package/lib/module/hooks/useSortableBoard.js +37 -0
- package/lib/module/hooks/useSortableBoard.js.map +1 -0
- package/lib/module/hooks/useSortableList.js +824 -0
- package/lib/module/hooks/useSortableList.js.map +1 -0
- package/lib/module/hooks/useSpatialIndex.js +283 -0
- package/lib/module/hooks/useSpatialIndex.js.map +1 -0
- package/lib/module/hooks/useViewStyles.js +158 -0
- package/lib/module/hooks/useViewStyles.js.map +1 -0
- package/lib/module/hooks/useWebScrollFreeze.js +52 -0
- package/lib/module/hooks/useWebScrollFreeze.js.map +1 -0
- package/lib/module/index.js +37 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/math.js +222 -0
- package/lib/module/math.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/params.js +88 -0
- package/lib/module/params.js.map +1 -0
- package/lib/module/types.js +213 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/DebugOverlay.d.ts +17 -0
- package/lib/typescript/src/DebugOverlay.d.ts.map +1 -0
- package/lib/typescript/src/Drax.d.ts +28 -0
- package/lib/typescript/src/Drax.d.ts.map +1 -0
- package/lib/typescript/src/DraxContext.d.ts +3 -0
- package/lib/typescript/src/DraxContext.d.ts.map +1 -0
- package/lib/typescript/src/DraxHandle.d.ts +25 -0
- package/lib/typescript/src/DraxHandle.d.ts.map +1 -0
- package/lib/typescript/src/DraxHandleContext.d.ts +12 -0
- package/lib/typescript/src/DraxHandleContext.d.ts.map +1 -0
- package/lib/typescript/src/DraxList.d.ts +66 -0
- package/lib/typescript/src/DraxList.d.ts.map +1 -0
- package/lib/typescript/src/DraxProvider.d.ts +4 -0
- package/lib/typescript/src/DraxProvider.d.ts.map +1 -0
- package/lib/typescript/src/DraxScrollView.d.ts +7 -0
- package/lib/typescript/src/DraxScrollView.d.ts.map +1 -0
- package/lib/typescript/src/DraxSubprovider.d.ts +4 -0
- package/lib/typescript/src/DraxSubprovider.d.ts.map +1 -0
- package/lib/typescript/src/DraxView.d.ts +4 -0
- package/lib/typescript/src/DraxView.d.ts.map +1 -0
- package/lib/typescript/src/HoverLayer.d.ts +38 -0
- package/lib/typescript/src/HoverLayer.d.ts.map +1 -0
- package/lib/typescript/src/SortableBoardContainer.d.ts +11 -0
- package/lib/typescript/src/SortableBoardContainer.d.ts.map +1 -0
- package/lib/typescript/src/SortableBoardContext.d.ts +4 -0
- package/lib/typescript/src/SortableBoardContext.d.ts.map +1 -0
- package/lib/typescript/src/SortableContainer.d.ts +13 -0
- package/lib/typescript/src/SortableContainer.d.ts.map +1 -0
- package/lib/typescript/src/SortableItem.d.ts +14 -0
- package/lib/typescript/src/SortableItem.d.ts.map +1 -0
- package/lib/typescript/src/SortableItemContext.d.ts +37 -0
- package/lib/typescript/src/SortableItemContext.d.ts.map +1 -0
- package/lib/typescript/src/compat/detectVersion.d.ts +2 -0
- package/lib/typescript/src/compat/detectVersion.d.ts.map +1 -0
- package/lib/typescript/src/compat/index.d.ts +4 -0
- package/lib/typescript/src/compat/index.d.ts.map +1 -0
- package/lib/typescript/src/compat/types.d.ts +33 -0
- package/lib/typescript/src/compat/types.d.ts.map +1 -0
- package/lib/typescript/src/compat/useDraxPanGesture.d.ts +8 -0
- package/lib/typescript/src/compat/useDraxPanGesture.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +3 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useCallbackDispatch.d.ts +40 -0
- package/lib/typescript/src/hooks/useCallbackDispatch.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useDragGesture.d.ts +17 -0
- package/lib/typescript/src/hooks/useDragGesture.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useDraxContext.d.ts +2 -0
- package/lib/typescript/src/hooks/useDraxContext.d.ts.map +1 -0
- package/{build → lib/typescript/src}/hooks/useDraxId.d.ts +1 -0
- package/lib/typescript/src/hooks/useDraxId.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useDraxMethods.d.ts +13 -0
- package/lib/typescript/src/hooks/useDraxMethods.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useDraxScrollHandler.d.ts +27 -0
- package/lib/typescript/src/hooks/useDraxScrollHandler.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useSortableBoard.d.ts +10 -0
- package/lib/typescript/src/hooks/useSortableBoard.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useSortableList.d.ts +11 -0
- package/lib/typescript/src/hooks/useSortableList.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useSpatialIndex.d.ts +22 -0
- package/lib/typescript/src/hooks/useSpatialIndex.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useViewStyles.d.ts +183 -0
- package/lib/typescript/src/hooks/useViewStyles.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useWebScrollFreeze.d.ts +14 -0
- package/lib/typescript/src/hooks/useWebScrollFreeze.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +25 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/math.d.ts +52 -0
- package/lib/typescript/src/math.d.ts.map +1 -0
- package/{build → lib/typescript/src}/params.d.ts +13 -9
- package/lib/typescript/src/params.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +743 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +164 -34
- package/src/DebugOverlay.tsx +140 -0
- package/src/Drax.ts +33 -0
- package/src/DraxContext.ts +8 -0
- package/src/DraxHandle.tsx +52 -0
- package/src/DraxHandleContext.ts +15 -0
- package/src/DraxList.tsx +181 -0
- package/src/DraxProvider.tsx +224 -0
- package/src/DraxScrollView.tsx +180 -0
- package/src/DraxSubprovider.tsx +22 -0
- package/src/DraxView.tsx +430 -0
- package/src/HoverLayer.tsx +167 -0
- package/src/SortableBoardContainer.tsx +439 -0
- package/src/SortableBoardContext.ts +6 -0
- package/src/SortableContainer.tsx +642 -0
- package/src/SortableItem.tsx +264 -0
- package/src/SortableItemContext.ts +46 -0
- package/src/compat/detectVersion.ts +17 -0
- package/src/compat/index.ts +7 -0
- package/src/compat/types.ts +35 -0
- package/src/compat/useDraxPanGesture.ts +112 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useCallbackDispatch.tsx +823 -0
- package/src/hooks/useDragGesture.ts +273 -0
- package/src/hooks/useDraxContext.ts +11 -0
- package/src/hooks/useDraxId.ts +11 -0
- package/src/hooks/useDraxMethods.ts +71 -0
- package/src/hooks/useDraxScrollHandler.ts +121 -0
- package/src/hooks/useSortableBoard.ts +44 -0
- package/src/hooks/useSortableList.ts +868 -0
- package/src/hooks/useSpatialIndex.ts +336 -0
- package/src/hooks/useViewStyles.ts +180 -0
- package/src/hooks/useWebScrollFreeze.ts +60 -0
- package/src/index.ts +110 -0
- package/src/math.ts +251 -0
- package/src/params.ts +74 -0
- package/src/types.ts +919 -0
- package/.editorconfig +0 -15
- package/.eslintrc.js +0 -4
- package/.prettierrc +0 -16
- package/CHANGELOG.md +0 -270
- package/CODE-OF-CONDUCT.md +0 -85
- package/CONTRIBUTING.md +0 -15
- package/FUNDING.yml +0 -4
- package/build/AllHoverViews.d.ts +0 -0
- package/build/AllHoverViews.js +0 -30
- package/build/DraxContext.d.ts +0 -2
- package/build/DraxContext.js +0 -6
- package/build/DraxList.d.ts +0 -8
- package/build/DraxList.js +0 -512
- package/build/DraxListItem.d.ts +0 -7
- package/build/DraxListItem.js +0 -121
- package/build/DraxProvider.d.ts +0 -2
- package/build/DraxProvider.js +0 -704
- package/build/DraxScrollView.d.ts +0 -6
- package/build/DraxScrollView.js +0 -136
- package/build/DraxSubprovider.d.ts +0 -3
- package/build/DraxSubprovider.js +0 -18
- package/build/DraxView.d.ts +0 -8
- package/build/DraxView.js +0 -93
- package/build/HoverView.d.ts +0 -8
- package/build/HoverView.js +0 -40
- package/build/PanGestureDetector.d.ts +0 -3
- package/build/PanGestureDetector.js +0 -49
- package/build/hooks/index.d.ts +0 -4
- package/build/hooks/index.js +0 -11
- package/build/hooks/useContent.d.ts +0 -23
- package/build/hooks/useContent.js +0 -212
- package/build/hooks/useDraxContext.d.ts +0 -1
- package/build/hooks/useDraxContext.js +0 -13
- package/build/hooks/useDraxId.js +0 -13
- package/build/hooks/useDraxProtocol.d.ts +0 -5
- package/build/hooks/useDraxProtocol.js +0 -32
- package/build/hooks/useDraxRegistry.d.ts +0 -78
- package/build/hooks/useDraxRegistry.js +0 -714
- package/build/hooks/useDraxScrollHandler.d.ts +0 -25
- package/build/hooks/useDraxScrollHandler.js +0 -89
- package/build/hooks/useDraxState.d.ts +0 -10
- package/build/hooks/useDraxState.js +0 -132
- package/build/hooks/useMeasurements.d.ts +0 -9
- package/build/hooks/useMeasurements.js +0 -119
- package/build/hooks/useStatus.d.ts +0 -11
- package/build/hooks/useStatus.js +0 -96
- package/build/index.d.ts +0 -9
- package/build/index.js +0 -33
- package/build/math.d.ts +0 -22
- package/build/math.js +0 -68
- package/build/params.js +0 -27
- package/build/transform.d.ts +0 -11
- package/build/transform.js +0 -59
- package/build/types.d.ts +0 -807
- package/build/types.js +0 -46
- package/docs/concept.md +0 -79
- package/docs/images/color-drag-drop.gif +0 -0
- package/docs/images/deck-cards.gif +0 -0
- package/docs/images/drag-drop-events.jpg +0 -0
- package/docs/images/knight-moves.gif +0 -0
- package/docs/images/reorderable-list.gif +0 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useRef } from 'react';
|
|
4
|
+
import Reanimated from 'react-native-reanimated';
|
|
5
|
+
import { DraxSubprovider } from "./DraxSubprovider.js";
|
|
6
|
+
import { DraxView } from "./DraxView.js";
|
|
7
|
+
import { useDraxScrollHandler } from "./hooks/useDraxScrollHandler.js";
|
|
8
|
+
import { useWebScrollFreeze } from "./hooks/useWebScrollFreeze.js";
|
|
9
|
+
import { defaultAutoScrollBackThreshold, defaultAutoScrollForwardThreshold, defaultAutoScrollJumpRatio, defaultScrollEventThrottle } from "./params.js";
|
|
10
|
+
import { AutoScrollDirection } from "./types.js";
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
export const DraxScrollView = props => {
|
|
13
|
+
const {
|
|
14
|
+
ref,
|
|
15
|
+
children,
|
|
16
|
+
style,
|
|
17
|
+
onContentSizeChange: onContentSizeChangeProp,
|
|
18
|
+
scrollEventThrottle = defaultScrollEventThrottle,
|
|
19
|
+
autoScrollJumpRatio = defaultAutoScrollJumpRatio,
|
|
20
|
+
autoScrollBackThreshold = defaultAutoScrollBackThreshold,
|
|
21
|
+
autoScrollForwardThreshold = defaultAutoScrollForwardThreshold,
|
|
22
|
+
id: idProp,
|
|
23
|
+
...scrollViewProps
|
|
24
|
+
} = props;
|
|
25
|
+
|
|
26
|
+
// Auto-scroll state.
|
|
27
|
+
const autoScrollStateRef = useRef({
|
|
28
|
+
x: AutoScrollDirection.None,
|
|
29
|
+
y: AutoScrollDirection.None
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Handle auto-scrolling on interval (ref-based to avoid circular deps with useDraxScrollHandler).
|
|
33
|
+
const doScrollRef = useRef(() => {});
|
|
34
|
+
const {
|
|
35
|
+
id,
|
|
36
|
+
containerMeasurementsRef,
|
|
37
|
+
contentSizeRef,
|
|
38
|
+
onContentSizeChange,
|
|
39
|
+
onMeasureContainer,
|
|
40
|
+
onScroll,
|
|
41
|
+
scrollRef,
|
|
42
|
+
scrollPosition,
|
|
43
|
+
setScrollRefs,
|
|
44
|
+
startScroll,
|
|
45
|
+
stopScroll
|
|
46
|
+
} = useDraxScrollHandler({
|
|
47
|
+
idProp,
|
|
48
|
+
onContentSizeChangeProp,
|
|
49
|
+
onScrollProp: props?.onScroll,
|
|
50
|
+
externalRef: ref,
|
|
51
|
+
doScroll: doScrollRef
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// Assign doScroll implementation now that we have scrollRef, measurements, etc.
|
|
55
|
+
doScrollRef.current = () => {
|
|
56
|
+
const scroll = scrollRef.current;
|
|
57
|
+
const containerMeasurements = containerMeasurementsRef.current;
|
|
58
|
+
const contentSize = contentSizeRef.current;
|
|
59
|
+
if (!scroll || !containerMeasurements || !contentSize) return;
|
|
60
|
+
const autoScrollState = autoScrollStateRef.current;
|
|
61
|
+
const jump = {
|
|
62
|
+
x: containerMeasurements.width * autoScrollJumpRatio,
|
|
63
|
+
y: containerMeasurements.height * autoScrollJumpRatio
|
|
64
|
+
};
|
|
65
|
+
let xNew;
|
|
66
|
+
let yNew;
|
|
67
|
+
if (autoScrollState.x === AutoScrollDirection.Forward) {
|
|
68
|
+
const xMax = contentSize.x - containerMeasurements.width;
|
|
69
|
+
if (scrollPosition.value.x < xMax) {
|
|
70
|
+
xNew = Math.min(scrollPosition.value.x + jump.x, xMax);
|
|
71
|
+
}
|
|
72
|
+
} else if (autoScrollState.x === AutoScrollDirection.Back) {
|
|
73
|
+
if (scrollPosition.value.x > 0) {
|
|
74
|
+
xNew = Math.max(scrollPosition.value.x - jump.x, 0);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (autoScrollState.y === AutoScrollDirection.Forward) {
|
|
78
|
+
const yMax = contentSize.y - containerMeasurements.height;
|
|
79
|
+
if (scrollPosition.value.y < yMax) {
|
|
80
|
+
yNew = Math.min(scrollPosition.value.y + jump.y, yMax);
|
|
81
|
+
}
|
|
82
|
+
} else if (autoScrollState.y === AutoScrollDirection.Back) {
|
|
83
|
+
if (scrollPosition.value.y > 0) {
|
|
84
|
+
yNew = Math.max(scrollPosition.value.y - jump.y, 0);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (xNew !== undefined || yNew !== undefined) {
|
|
88
|
+
// @ts-expect-error Reanimated's type augmentation hides scrollTo, but it exists at runtime
|
|
89
|
+
scroll.scrollTo({
|
|
90
|
+
x: xNew ?? scrollPosition.value.x,
|
|
91
|
+
y: yNew ?? scrollPosition.value.y
|
|
92
|
+
});
|
|
93
|
+
if ('flashScrollIndicators' in scroll && typeof scroll.flashScrollIndicators === 'function') {
|
|
94
|
+
scroll.flashScrollIndicators();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const {
|
|
99
|
+
freeze: freezeScroll,
|
|
100
|
+
unfreeze: unfreezeScroll
|
|
101
|
+
} = useWebScrollFreeze(scrollRef);
|
|
102
|
+
|
|
103
|
+
// Clear auto-scroll direction and stop the auto-scrolling interval.
|
|
104
|
+
const resetScroll = () => {
|
|
105
|
+
const autoScrollState = autoScrollStateRef.current;
|
|
106
|
+
autoScrollState.x = AutoScrollDirection.None;
|
|
107
|
+
autoScrollState.y = AutoScrollDirection.None;
|
|
108
|
+
stopScroll();
|
|
109
|
+
unfreezeScroll();
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// Monitor drag-over events to react with auto-scrolling.
|
|
113
|
+
const onMonitorDragOver = event => {
|
|
114
|
+
const {
|
|
115
|
+
monitorOffsetRatio
|
|
116
|
+
} = event;
|
|
117
|
+
const autoScrollState = autoScrollStateRef.current;
|
|
118
|
+
if (monitorOffsetRatio.x >= autoScrollForwardThreshold) {
|
|
119
|
+
autoScrollState.x = AutoScrollDirection.Forward;
|
|
120
|
+
} else if (monitorOffsetRatio.x <= autoScrollBackThreshold) {
|
|
121
|
+
autoScrollState.x = AutoScrollDirection.Back;
|
|
122
|
+
} else {
|
|
123
|
+
autoScrollState.x = AutoScrollDirection.None;
|
|
124
|
+
}
|
|
125
|
+
if (monitorOffsetRatio.y >= autoScrollForwardThreshold) {
|
|
126
|
+
autoScrollState.y = AutoScrollDirection.Forward;
|
|
127
|
+
} else if (monitorOffsetRatio.y <= autoScrollBackThreshold) {
|
|
128
|
+
autoScrollState.y = AutoScrollDirection.Back;
|
|
129
|
+
} else {
|
|
130
|
+
autoScrollState.y = AutoScrollDirection.None;
|
|
131
|
+
}
|
|
132
|
+
if (autoScrollState.x === AutoScrollDirection.None && autoScrollState.y === AutoScrollDirection.None) {
|
|
133
|
+
stopScroll();
|
|
134
|
+
} else {
|
|
135
|
+
startScroll();
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
const scrollViewParent = {
|
|
139
|
+
id,
|
|
140
|
+
viewRef: scrollRef,
|
|
141
|
+
isScrollContainer: true
|
|
142
|
+
};
|
|
143
|
+
return /*#__PURE__*/_jsx(DraxView, {
|
|
144
|
+
id: id,
|
|
145
|
+
style: style,
|
|
146
|
+
scrollPosition: scrollPosition,
|
|
147
|
+
onMeasure: onMeasureContainer,
|
|
148
|
+
onMonitorDragStart: freezeScroll,
|
|
149
|
+
onMonitorDragOver: onMonitorDragOver,
|
|
150
|
+
onMonitorDragExit: resetScroll,
|
|
151
|
+
onMonitorDragEnd: resetScroll,
|
|
152
|
+
onMonitorDragDrop: resetScroll,
|
|
153
|
+
children: /*#__PURE__*/_jsx(DraxSubprovider, {
|
|
154
|
+
parent: scrollViewParent,
|
|
155
|
+
children: /*#__PURE__*/_jsx(Reanimated.ScrollView, {
|
|
156
|
+
...scrollViewProps,
|
|
157
|
+
// @ts-expect-error — callback ref bridges AnimatedRef + external ref; runtime-compatible
|
|
158
|
+
ref: setScrollRefs,
|
|
159
|
+
onContentSizeChange: onContentSizeChange,
|
|
160
|
+
scrollEventThrottle: scrollEventThrottle,
|
|
161
|
+
onScroll: onScroll,
|
|
162
|
+
children: children
|
|
163
|
+
})
|
|
164
|
+
})
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
//# sourceMappingURL=DraxScrollView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useRef","Reanimated","DraxSubprovider","DraxView","useDraxScrollHandler","useWebScrollFreeze","defaultAutoScrollBackThreshold","defaultAutoScrollForwardThreshold","defaultAutoScrollJumpRatio","defaultScrollEventThrottle","AutoScrollDirection","jsx","_jsx","DraxScrollView","props","ref","children","style","onContentSizeChange","onContentSizeChangeProp","scrollEventThrottle","autoScrollJumpRatio","autoScrollBackThreshold","autoScrollForwardThreshold","id","idProp","scrollViewProps","autoScrollStateRef","x","None","y","doScrollRef","containerMeasurementsRef","contentSizeRef","onMeasureContainer","onScroll","scrollRef","scrollPosition","setScrollRefs","startScroll","stopScroll","onScrollProp","externalRef","doScroll","current","scroll","containerMeasurements","contentSize","autoScrollState","jump","width","height","xNew","yNew","Forward","xMax","value","Math","min","Back","max","yMax","undefined","scrollTo","flashScrollIndicators","freeze","freezeScroll","unfreeze","unfreezeScroll","resetScroll","onMonitorDragOver","event","monitorOffsetRatio","scrollViewParent","viewRef","isScrollContainer","onMeasure","onMonitorDragStart","onMonitorDragExit","onMonitorDragEnd","onMonitorDragDrop","parent","ScrollView"],"sourceRoot":"../../src","sources":["DraxScrollView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { DraxContext } from "./DraxContext.js";
|
|
5
|
+
import { useDraxContext } from "./hooks/index.js";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export const DraxSubprovider = ({
|
|
8
|
+
parent,
|
|
9
|
+
children
|
|
10
|
+
}) => {
|
|
11
|
+
const contextValue = useDraxContext();
|
|
12
|
+
const subContextValue = useMemo(() => ({
|
|
13
|
+
...contextValue,
|
|
14
|
+
parent
|
|
15
|
+
}), [contextValue, parent]);
|
|
16
|
+
return /*#__PURE__*/_jsx(DraxContext, {
|
|
17
|
+
value: subContextValue,
|
|
18
|
+
children: children
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=DraxSubprovider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","DraxContext","useDraxContext","jsx","_jsx","DraxSubprovider","parent","children","contextValue","subContextValue","value"],"sourceRoot":"../../src","sources":["DraxSubprovider.tsx"],"mappings":";;AACA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAASC,WAAW,QAAQ,kBAAe;AAC3C,SAASC,cAAc,QAAQ,kBAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGzC,OAAO,MAAMC,eAAe,GAAGA,CAAC;EAC9BC,MAAM;EACNC;AACuC,CAAC,KAAK;EAC7C,MAAMC,YAAY,GAAGN,cAAc,CAAC,CAAC;EACrC,MAAMO,eAAe,GAAGT,OAAO,CAC7B,OAAO;IAAE,GAAGQ,YAAY;IAAEF;EAAO,CAAC,CAAC,EACnC,CAACE,YAAY,EAAEF,MAAM,CACvB,CAAC;EACD,oBACEF,IAAA,CAACH,WAAW;IAACS,KAAK,EAAED,eAAgB;IAAAF,QAAA,EACjCA;EAAQ,CACE,CAAC;AAElB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
|
|
4
|
+
import { Platform } from 'react-native';
|
|
5
|
+
import { GestureDetector } from 'react-native-gesture-handler';
|
|
6
|
+
import Reanimated, { useAnimatedReaction, useSharedValue } from 'react-native-reanimated';
|
|
7
|
+
import { DraxHandleContext } from "./DraxHandleContext.js";
|
|
8
|
+
import { DraxSubprovider } from "./DraxSubprovider.js";
|
|
9
|
+
import { useDraxContext, useDraxId } from "./hooks/index.js";
|
|
10
|
+
import { useDragGesture } from "./hooks/useDragGesture.js";
|
|
11
|
+
import { isDraggable as computeIsDraggable } from "./hooks/useSpatialIndex.js";
|
|
12
|
+
import { useViewStyles } from "./hooks/useViewStyles.js";
|
|
13
|
+
import { defaultLongPressDelay } from "./params.js";
|
|
14
|
+
import { DraxViewDragStatus, DraxViewReceiveStatus } from "./types.js";
|
|
15
|
+
|
|
16
|
+
/** Keys that should NOT be passed through to Reanimated.View */
|
|
17
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
+
const DRAX_PROP_KEYS = new Set(['renderContent', 'renderHoverContent', 'noHover', 'registration', 'onMeasure', 'parent', 'isParent', 'scrollPosition', 'longPressDelay', 'lockDragXPosition', 'lockDragYPosition', 'id',
|
|
19
|
+
// Callback props
|
|
20
|
+
'onDragStart', 'onDrag', 'onDragEnter', 'onDragOver', 'onDragExit', 'onDragEnd', 'onDragDrop', 'onSnapEnd', 'onReceiveSnapEnd', 'onReceiveDragEnter', 'onReceiveDragOver', 'onReceiveDragExit', 'onReceiveDragDrop', 'onMonitorDragStart', 'onMonitorDragEnter', 'onMonitorDragOver', 'onMonitorDragExit', 'onMonitorDragEnd', 'onMonitorDragDrop', 'animateSnap', 'snapDelay', 'snapDuration', 'snapAnimator', 'dragPayload', 'receiverPayload', 'payload', 'draggable', 'receptive', 'monitoring', 'rejectOwnChildren', 'disableHoverViewMeasurementsOnLayout', 'dynamicReceptiveCallback', 'acceptsDrag', 'dragBoundsRef',
|
|
21
|
+
// Style props (handled by useViewStyles)
|
|
22
|
+
'style', 'dragInactiveStyle', 'draggingStyle', 'draggingWithReceiverStyle', 'draggingWithoutReceiverStyle', 'dragReleasedStyle', 'hoverStyle', 'hoverDraggingStyle', 'hoverDraggingWithReceiverStyle', 'hoverDraggingWithoutReceiverStyle', 'hoverDragReleasedStyle', 'receiverInactiveStyle', 'receivingStyle', 'otherDraggingStyle', 'otherDraggingWithReceiverStyle', 'otherDraggingWithoutReceiverStyle', 'dragHandle', 'dragActivationFailOffset', 'collisionAlgorithm', 'scrollHorizontal']);
|
|
23
|
+
|
|
24
|
+
/** Extract only ViewProps-compatible props by filtering out Drax-specific keys */
|
|
25
|
+
function extractViewProps(props) {
|
|
26
|
+
const viewProps = {};
|
|
27
|
+
for (const [key, value] of Object.entries(props)) {
|
|
28
|
+
if (!DRAX_PROP_KEYS.has(key)) {
|
|
29
|
+
viewProps[key] = value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return viewProps;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Isolated hook for scroll-position → spatial-index sync.
|
|
37
|
+
* Kept separate from DraxView so the worklet closure only captures
|
|
38
|
+
* SharedValues — never React refs from the component scope. The worklets
|
|
39
|
+
* serializer recursively freezes all plain objects in a worklet's closure,
|
|
40
|
+
* which would freeze useRef objects and trigger "Tried to modify key `current`"
|
|
41
|
+
* warnings when React nullifies refs on unmount.
|
|
42
|
+
*/
|
|
43
|
+
function useScrollPositionSync(scrollPosition, spatialIndexSV, scrollOffsetsSV) {
|
|
44
|
+
useAnimatedReaction(() => scrollPosition?.value, (pos, prev) => {
|
|
45
|
+
'worklet';
|
|
46
|
+
|
|
47
|
+
if (!pos) return;
|
|
48
|
+
if (prev && pos.x === prev.x && pos.y === prev.y) return;
|
|
49
|
+
const idx = spatialIndexSV.value;
|
|
50
|
+
if (idx < 0) return;
|
|
51
|
+
scrollOffsetsSV.modify(offsets => {
|
|
52
|
+
if (idx >= 0 && idx < offsets.length) {
|
|
53
|
+
offsets[idx] = pos;
|
|
54
|
+
}
|
|
55
|
+
return offsets;
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
export const DraxView = /*#__PURE__*/memo(props => {
|
|
60
|
+
const {
|
|
61
|
+
renderContent,
|
|
62
|
+
registration,
|
|
63
|
+
onMeasure,
|
|
64
|
+
parent: parentProp,
|
|
65
|
+
isParent,
|
|
66
|
+
scrollPosition,
|
|
67
|
+
longPressDelay = defaultLongPressDelay,
|
|
68
|
+
lockDragXPosition,
|
|
69
|
+
lockDragYPosition,
|
|
70
|
+
scrollHorizontal,
|
|
71
|
+
dragHandle,
|
|
72
|
+
dragBoundsRef,
|
|
73
|
+
children,
|
|
74
|
+
style,
|
|
75
|
+
id: idProp
|
|
76
|
+
} = props;
|
|
77
|
+
|
|
78
|
+
// Determine capabilities from props (shared with useSpatialIndex)
|
|
79
|
+
const draggable = computeIsDraggable(props);
|
|
80
|
+
|
|
81
|
+
// Unique id
|
|
82
|
+
const id = useDraxId(idProp);
|
|
83
|
+
|
|
84
|
+
// Connect with Drax context
|
|
85
|
+
const {
|
|
86
|
+
registerView,
|
|
87
|
+
unregisterView,
|
|
88
|
+
updateMeasurements: updateMeasurementsCtx,
|
|
89
|
+
updateViewProps,
|
|
90
|
+
getViewEntry,
|
|
91
|
+
rootViewRef,
|
|
92
|
+
scrollOffsetsSV,
|
|
93
|
+
parent: contextParent
|
|
94
|
+
} = useDraxContext();
|
|
95
|
+
|
|
96
|
+
// Parent view (from prop or context)
|
|
97
|
+
const parent = parentProp ?? contextParent;
|
|
98
|
+
const parentId = parent?.id;
|
|
99
|
+
const parentViewRef = parent ? parent.viewRef : rootViewRef;
|
|
100
|
+
|
|
101
|
+
// View ref for measuring
|
|
102
|
+
const viewRef = useRef(null);
|
|
103
|
+
const measurementsRef = useRef(undefined);
|
|
104
|
+
|
|
105
|
+
// ── Measurement ────────────────────────────────────────────────────
|
|
106
|
+
|
|
107
|
+
/** Finalize measurements and notify consumers.
|
|
108
|
+
* `transformDetected` = 1 when auto-detection found transform-based positioning
|
|
109
|
+
* (visual measurement used instead of Yoga layout). Consumers can check
|
|
110
|
+
* `measurements._transformDetected` to know whether shift subtraction is needed. */
|
|
111
|
+
const finalizeMeasurement = useCallback((x, y, width, height, handler, transformDetected = 0) => {
|
|
112
|
+
const measurements = {
|
|
113
|
+
height,
|
|
114
|
+
x,
|
|
115
|
+
y,
|
|
116
|
+
width,
|
|
117
|
+
_transformDetected: transformDetected
|
|
118
|
+
};
|
|
119
|
+
measurementsRef.current = measurements;
|
|
120
|
+
updateMeasurementsCtx(id, measurements);
|
|
121
|
+
onMeasure?.(measurements);
|
|
122
|
+
handler?.(measurements);
|
|
123
|
+
}, [id, updateMeasurementsCtx, onMeasure]);
|
|
124
|
+
const measureWithHandler = useCallback(handler => {
|
|
125
|
+
const view = viewRef.current;
|
|
126
|
+
if (!view || !parentViewRef.current) return;
|
|
127
|
+
view.measureLayout(parentViewRef.current, (x, y, width, height) => {
|
|
128
|
+
if (Platform.OS === 'web') {
|
|
129
|
+
// On web, measureLayout returns visual positions — add scroll to
|
|
130
|
+
// convert to content-relative.
|
|
131
|
+
const parentData = parentId ? getViewEntry(parentId) : undefined;
|
|
132
|
+
const parentScroll = parentData?.scrollPosition?.value ?? {
|
|
133
|
+
x: 0,
|
|
134
|
+
y: 0
|
|
135
|
+
};
|
|
136
|
+
finalizeMeasurement(x + parentScroll.x, y + parentScroll.y, width, height, handler);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// On Fabric, measureLayout uses includeTransform=false → returns Yoga
|
|
141
|
+
// layout positions. This is correct for FlatList/FlashList, but wrong
|
|
142
|
+
// for LegendList (which positions items via translateY, so all report y=0).
|
|
143
|
+
//
|
|
144
|
+
// Auto-detect: when measureLayout returns position=0 (the hallmark of
|
|
145
|
+
// transform-positioned items: position:absolute, top:0), also call
|
|
146
|
+
// measure() to get the visual position. If it differs, the item is
|
|
147
|
+
// transform-positioned. Only check when layoutPosition=0 to avoid
|
|
148
|
+
// false positives on shifted items (whose measureLayout is non-zero).
|
|
149
|
+
const layoutX = x;
|
|
150
|
+
const layoutY = y;
|
|
151
|
+
if (layoutX !== 0 && layoutY !== 0) {
|
|
152
|
+
// Non-zero layout position → normal Yoga layout, trust measureLayout.
|
|
153
|
+
finalizeMeasurement(layoutX, layoutY, width, height, handler);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const parentView = parentViewRef.current;
|
|
157
|
+
if (!parentView) {
|
|
158
|
+
finalizeMeasurement(layoutX, layoutY, width, height, handler);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
view.measure((_vx, _vy, _vw, _vh, pageX, pageY) => {
|
|
162
|
+
parentView.measure((_px, _py, _pw, _ph, parentPageX, parentPageY) => {
|
|
163
|
+
const parentData = parentId ? getViewEntry(parentId) : undefined;
|
|
164
|
+
const parentScroll = parentData?.scrollPosition?.value ?? {
|
|
165
|
+
x: 0,
|
|
166
|
+
y: 0
|
|
167
|
+
};
|
|
168
|
+
const visualX = pageX - parentPageX + parentScroll.x;
|
|
169
|
+
const visualY = pageY - parentPageY + parentScroll.y;
|
|
170
|
+
// If visual position differs from layout, the view is transform-positioned.
|
|
171
|
+
if (Math.abs(visualX - layoutX) > 1 || Math.abs(visualY - layoutY) > 1) {
|
|
172
|
+
finalizeMeasurement(visualX, visualY, width, height, handler, 1);
|
|
173
|
+
} else {
|
|
174
|
+
finalizeMeasurement(layoutX, layoutY, width, height, handler);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
}, () => {});
|
|
179
|
+
}, [id, parentId, viewRef, parentViewRef, getViewEntry, finalizeMeasurement]);
|
|
180
|
+
|
|
181
|
+
// ── Register/unregister with context ────────────────────────────────
|
|
182
|
+
// Keep a ref to the latest props so registry always has current callbacks
|
|
183
|
+
const propsRef = useRef(props);
|
|
184
|
+
propsRef.current = props;
|
|
185
|
+
useEffect(() => {
|
|
186
|
+
registerView({
|
|
187
|
+
id,
|
|
188
|
+
parentId,
|
|
189
|
+
scrollPosition,
|
|
190
|
+
props: propsRef.current
|
|
191
|
+
});
|
|
192
|
+
// Re-measure after registration. onLayout may have fired before
|
|
193
|
+
// registerView (useEffect runs after paint), causing updateMeasurements
|
|
194
|
+
// to silently drop data (entry didn't exist yet in registry).
|
|
195
|
+
measureWithHandler();
|
|
196
|
+
return () => unregisterView(id);
|
|
197
|
+
}, [id, parentId, scrollPosition, registerView, unregisterView, measureWithHandler]);
|
|
198
|
+
|
|
199
|
+
// ── Update registry when props change ────────────────────────────────
|
|
200
|
+
useEffect(() => {
|
|
201
|
+
updateViewProps(id, propsRef.current);
|
|
202
|
+
}, [id, updateViewProps, draggable, props.receptive, props.monitoring, props.collisionAlgorithm]);
|
|
203
|
+
const onLayout = () => {
|
|
204
|
+
measureWithHandler();
|
|
205
|
+
// Re-measure drag bounds on every layout change. The initial useEffect
|
|
206
|
+
// measurement may fire before the parent flex layout has settled (especially
|
|
207
|
+
// on native where Fabric commits layout asynchronously). By the time this
|
|
208
|
+
// DraxView receives onLayout, the bounds view's layout is also finalized.
|
|
209
|
+
if (dragBoundsRef?.current && rootViewRef.current) {
|
|
210
|
+
dragBoundsRef.current.measureLayout(rootViewRef.current, (x, y, width, height) => {
|
|
211
|
+
dragBoundsSV.value = {
|
|
212
|
+
x,
|
|
213
|
+
y,
|
|
214
|
+
width,
|
|
215
|
+
height
|
|
216
|
+
};
|
|
217
|
+
}, () => {});
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// External registration — useLayoutEffect so SortableItem's FLIP
|
|
222
|
+
// useLayoutEffect (which runs after children) sees measureFnRef.
|
|
223
|
+
useLayoutEffect(() => {
|
|
224
|
+
if (registration) {
|
|
225
|
+
registration({
|
|
226
|
+
id,
|
|
227
|
+
measure: measureWithHandler
|
|
228
|
+
});
|
|
229
|
+
return () => registration(undefined);
|
|
230
|
+
}
|
|
231
|
+
return undefined;
|
|
232
|
+
}, [id, measureWithHandler, registration]);
|
|
233
|
+
|
|
234
|
+
// ── Gesture (per-view, UI thread) ──────────────────────────────────
|
|
235
|
+
// Use a SharedValue for spatialIndex so it updates reactively after registration
|
|
236
|
+
const spatialIndexSV = useSharedValue(-1);
|
|
237
|
+
|
|
238
|
+
// Update spatialIndex after registration completes
|
|
239
|
+
useEffect(() => {
|
|
240
|
+
const entry = getViewEntry(id);
|
|
241
|
+
const index = entry?.spatialIndex ?? -1;
|
|
242
|
+
spatialIndexSV.value = index;
|
|
243
|
+
}, [id, getViewEntry, spatialIndexSV]);
|
|
244
|
+
|
|
245
|
+
// Sync scroll position to spatial index — delegated to a separate hook
|
|
246
|
+
// so the worklet closure only contains SharedValues (no refs from DraxView scope).
|
|
247
|
+
useScrollPositionSync(scrollPosition, spatialIndexSV, scrollOffsetsSV);
|
|
248
|
+
|
|
249
|
+
// SharedValues for gesture config — RNGH 3.0 reconfigures the native
|
|
250
|
+
// handler on the UI thread, bypassing JS→native bridge entirely.
|
|
251
|
+
const draggableSV = useSharedValue(draggable);
|
|
252
|
+
const longPressDelaySV = useSharedValue(longPressDelay);
|
|
253
|
+
|
|
254
|
+
// Update SharedValues when props change (in useEffect to avoid render-time writes)
|
|
255
|
+
useEffect(() => {
|
|
256
|
+
draggableSV.value = draggable;
|
|
257
|
+
longPressDelaySV.value = longPressDelay;
|
|
258
|
+
}, [draggable, longPressDelay, draggableSV, longPressDelaySV]);
|
|
259
|
+
|
|
260
|
+
// Drag bounds: measure the bounds view relative to root and store in SharedValue
|
|
261
|
+
const dragBoundsSV = useSharedValue(null);
|
|
262
|
+
useEffect(() => {
|
|
263
|
+
if (dragBoundsRef?.current && rootViewRef.current) {
|
|
264
|
+
dragBoundsRef.current.measureLayout(rootViewRef.current, (x, y, width, height) => {
|
|
265
|
+
dragBoundsSV.value = {
|
|
266
|
+
x,
|
|
267
|
+
y,
|
|
268
|
+
width,
|
|
269
|
+
height
|
|
270
|
+
};
|
|
271
|
+
}, () => {});
|
|
272
|
+
} else {
|
|
273
|
+
dragBoundsSV.value = null;
|
|
274
|
+
}
|
|
275
|
+
}, [dragBoundsRef, rootViewRef, dragBoundsSV]);
|
|
276
|
+
const gesture = useDragGesture(id, spatialIndexSV, draggableSV, longPressDelaySV, lockDragXPosition, lockDragYPosition, dragBoundsSV, props.dragActivationFailOffset, scrollHorizontal);
|
|
277
|
+
|
|
278
|
+
// ── Animated styles ────────────────────────────────────────────────
|
|
279
|
+
const {
|
|
280
|
+
animatedDragStyle
|
|
281
|
+
} = useViewStyles(id, props);
|
|
282
|
+
|
|
283
|
+
// ── Memoize parent for DraxSubprovider ──────────────────────────────
|
|
284
|
+
const subproviderParent = useMemo(() => ({
|
|
285
|
+
id,
|
|
286
|
+
viewRef
|
|
287
|
+
}), [id, viewRef]);
|
|
288
|
+
|
|
289
|
+
// ── Rendered children ──────────────────────────────────────────────
|
|
290
|
+
let renderedContent;
|
|
291
|
+
if (renderContent) {
|
|
292
|
+
renderedContent = renderContent({
|
|
293
|
+
viewState: {
|
|
294
|
+
dragStatus: DraxViewDragStatus.Inactive,
|
|
295
|
+
receiveStatus: DraxViewReceiveStatus.Inactive
|
|
296
|
+
},
|
|
297
|
+
hover: false,
|
|
298
|
+
children,
|
|
299
|
+
dimensions: measurementsRef.current ? {
|
|
300
|
+
width: measurementsRef.current.width,
|
|
301
|
+
height: measurementsRef.current.height
|
|
302
|
+
} : undefined
|
|
303
|
+
});
|
|
304
|
+
} else {
|
|
305
|
+
renderedContent = children;
|
|
306
|
+
}
|
|
307
|
+
if (isParent) {
|
|
308
|
+
renderedContent = /*#__PURE__*/_jsx(DraxSubprovider, {
|
|
309
|
+
parent: subproviderParent,
|
|
310
|
+
children: renderedContent
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// When dragHandle is true, provide the gesture via context so DraxHandle can attach it
|
|
315
|
+
if (dragHandle) {
|
|
316
|
+
renderedContent = /*#__PURE__*/_jsx(DraxHandleContext.Provider, {
|
|
317
|
+
value: {
|
|
318
|
+
gesture
|
|
319
|
+
},
|
|
320
|
+
children: renderedContent
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// ── Extract view-safe props ─────────────────────────────────────
|
|
325
|
+
// DraxView is memo()'d so props identity is stable between renders.
|
|
326
|
+
const viewProps = useMemo(() => extractViewProps(props), [props]);
|
|
327
|
+
|
|
328
|
+
// ── Render ─────────────────────────────────────────────────────────
|
|
329
|
+
const viewElement = /*#__PURE__*/_jsx(Reanimated.View, {
|
|
330
|
+
...viewProps,
|
|
331
|
+
style: [style, animatedDragStyle],
|
|
332
|
+
ref: viewRef,
|
|
333
|
+
onLayout: onLayout,
|
|
334
|
+
collapsable: false,
|
|
335
|
+
children: renderedContent
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
// When dragHandle is true, skip the GestureDetector wrapper —
|
|
339
|
+
// the gesture is attached to the DraxHandle child instead.
|
|
340
|
+
if (dragHandle) {
|
|
341
|
+
return viewElement;
|
|
342
|
+
}
|
|
343
|
+
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
344
|
+
gesture: gesture,
|
|
345
|
+
children: viewElement
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
//# sourceMappingURL=DraxView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","useCallback","useEffect","useLayoutEffect","useMemo","useRef","Platform","GestureDetector","Reanimated","useAnimatedReaction","useSharedValue","DraxHandleContext","DraxSubprovider","useDraxContext","useDraxId","useDragGesture","isDraggable","computeIsDraggable","useViewStyles","defaultLongPressDelay","DraxViewDragStatus","DraxViewReceiveStatus","jsx","_jsx","DRAX_PROP_KEYS","Set","extractViewProps","props","viewProps","key","value","Object","entries","has","useScrollPositionSync","scrollPosition","spatialIndexSV","scrollOffsetsSV","pos","prev","x","y","idx","modify","offsets","length","DraxView","renderContent","registration","onMeasure","parent","parentProp","isParent","longPressDelay","lockDragXPosition","lockDragYPosition","scrollHorizontal","dragHandle","dragBoundsRef","children","style","id","idProp","draggable","registerView","unregisterView","updateMeasurements","updateMeasurementsCtx","updateViewProps","getViewEntry","rootViewRef","contextParent","parentId","parentViewRef","viewRef","measurementsRef","undefined","finalizeMeasurement","width","height","handler","transformDetected","measurements","_transformDetected","current","measureWithHandler","view","measureLayout","OS","parentData","parentScroll","layoutX","layoutY","parentView","measure","_vx","_vy","_vw","_vh","pageX","pageY","_px","_py","_pw","_ph","parentPageX","parentPageY","visualX","visualY","Math","abs","propsRef","receptive","monitoring","collisionAlgorithm","onLayout","dragBoundsSV","entry","index","spatialIndex","draggableSV","longPressDelaySV","gesture","dragActivationFailOffset","animatedDragStyle","subproviderParent","renderedContent","viewState","dragStatus","Inactive","receiveStatus","hover","dimensions","Provider","viewElement","View","ref","collapsable"],"sourceRoot":"../../src","sources":["DraxView.tsx"],"mappings":"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","ignoreList":[]}
|