@tamagui/sheet 1.0.1-beta.100

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.
@@ -0,0 +1,220 @@
1
+ import { isSSR, isWeb, styled, themeable, withStaticProperties } from "@tamagui/core";
2
+ import { createContextScope } from "@tamagui/create-context";
3
+ import { XStack, YStack } from "@tamagui/stacks";
4
+ import { useControllableState } from "@tamagui/use-controllable-state";
5
+ import React, {
6
+ forwardRef,
7
+ isValidElement,
8
+ useCallback,
9
+ useEffect,
10
+ useLayoutEffect,
11
+ useMemo,
12
+ useRef,
13
+ useState
14
+ } from "react";
15
+ import { Animated, PanResponder } from "react-native";
16
+ const DRAWER_NAME = "Drawer";
17
+ const DRAWER_HANDLE_NAME = "DrawerHandle";
18
+ const DrawerHandleFrame = styled(XStack, {
19
+ name: DRAWER_HANDLE_NAME,
20
+ height: 10,
21
+ borderRadius: 100,
22
+ backgroundColor: "$background",
23
+ position: "absolute",
24
+ pointerEvents: "auto",
25
+ zIndex: 10,
26
+ y: -18,
27
+ top: 0,
28
+ left: "35%",
29
+ right: "35%",
30
+ opacity: 0.5,
31
+ hoverStyle: {
32
+ opacity: 0.7
33
+ }
34
+ });
35
+ const DrawerHandle = DrawerHandleFrame.extractable(({ __scopeDrawer, ...props }) => {
36
+ const context = useDrawerContext(DRAWER_HANDLE_NAME, __scopeDrawer);
37
+ return <DrawerHandleFrame onPress={() => {
38
+ const nextPos = (context.position + 1) % context.snapPoints.length;
39
+ context.setPosition(nextPos);
40
+ }} {...props} />;
41
+ });
42
+ const [createDrawerContext, createDrawerScope] = createContextScope(DRAWER_NAME);
43
+ const [DrawerProvider, useDrawerContext] = createDrawerContext(DRAWER_NAME, {});
44
+ const DrawerBackdrop = styled(YStack, {
45
+ name: "DrawerBackdrop",
46
+ backgroundColor: "$color",
47
+ fullscreen: true,
48
+ opacity: 0.2
49
+ });
50
+ const DrawerFrame = styled(YStack, {
51
+ name: "DrawerFrame",
52
+ flex: 1,
53
+ backgroundColor: "$background",
54
+ borderTopLeftRadius: "$4",
55
+ borderTopRightRadius: "$4",
56
+ padding: "$4",
57
+ width: "100%"
58
+ });
59
+ const useIsSSR = () => {
60
+ const [val, setVal] = useState(isWeb ? isSSR : false);
61
+ useEffect(() => {
62
+ if (isWeb && !isSSR) {
63
+ setVal(false);
64
+ }
65
+ }, []);
66
+ return val;
67
+ };
68
+ const Drawer = withStaticProperties(themeable(forwardRef((props, ref) => {
69
+ const {
70
+ __scopeDrawer,
71
+ snapPoints: snapPointsProp = [80, 10],
72
+ children: childrenProp,
73
+ position: positionProp,
74
+ onChangePosition,
75
+ defaultPosition,
76
+ ...rest
77
+ } = props;
78
+ const isServerSide = useIsSSR();
79
+ const [position, setPosition] = useControllableState({
80
+ prop: positionProp,
81
+ defaultProp: defaultPosition || 0,
82
+ onChange: onChangePosition,
83
+ strategy: "most-recent-wins"
84
+ });
85
+ const [layout, setLayout] = useState();
86
+ const positionValue = useRef();
87
+ if (!positionValue.current) {
88
+ positionValue.current = new Animated.Value(position);
89
+ }
90
+ const snapPoints = useMemo(() => snapPointsProp, [JSON.stringify(snapPointsProp)]);
91
+ if (isServerSide) {
92
+ return null;
93
+ }
94
+ const spring = useRef(null);
95
+ function stopSpring() {
96
+ var _a;
97
+ (_a = spring.current) == null ? void 0 : _a.stop();
98
+ spring.current = null;
99
+ }
100
+ const positions = useMemo(() => snapPoints.map((point) => getYForPosition(point, layout)), [layout, snapPoints]);
101
+ const animateTo = useCallback((position2) => {
102
+ if (!positionValue.current)
103
+ return;
104
+ const toValue = positions[position2];
105
+ stopSpring();
106
+ spring.current = Animated.spring(positionValue.current, {
107
+ useNativeDriver: !isWeb,
108
+ toValue
109
+ });
110
+ spring.current.start(({ finished }) => finished && stopSpring());
111
+ }, [positions]);
112
+ useLayoutEffect(() => {
113
+ animateTo(position);
114
+ }, [position, animateTo]);
115
+ const panResponder = useMemo(() => {
116
+ if (!layout)
117
+ return;
118
+ console.log("setup pan");
119
+ const pos = positionValue.current;
120
+ const minY = positions[0];
121
+ let startY = pos["_value"];
122
+ return PanResponder.create({
123
+ onMoveShouldSetPanResponder: (_e, { dy }) => {
124
+ return Math.abs(dy) > 6;
125
+ },
126
+ onPanResponderGrant: () => {
127
+ stopSpring();
128
+ startY = pos["_value"];
129
+ },
130
+ onPanResponderMove: (_e, { dy }) => {
131
+ const to = dy + startY;
132
+ pos.setValue(resisted(to, minY));
133
+ },
134
+ onPanResponderRelease: (_e, { vy, dy }) => {
135
+ const at = dy + startY;
136
+ const end = at + layout.height * vy * 0.33;
137
+ let closestPoint = 0;
138
+ let dist = Infinity;
139
+ for (let i = 0; i < positions.length; i++) {
140
+ const position2 = positions[i];
141
+ const curDist = end > position2 ? end - position2 : position2 - end;
142
+ if (curDist < dist) {
143
+ dist = curDist;
144
+ closestPoint = i;
145
+ }
146
+ }
147
+ setPosition(closestPoint);
148
+ animateTo(closestPoint);
149
+ }
150
+ });
151
+ }, [layout, positions, setPosition]);
152
+ let handleComponent = null;
153
+ let backdropComponent = null;
154
+ let frameComponent = null;
155
+ React.Children.forEach(childrenProp, (child) => {
156
+ var _a;
157
+ if (isValidElement(child)) {
158
+ switch ((_a = child.type) == null ? void 0 : _a["staticConfig"].componentName) {
159
+ case "DrawerHandle":
160
+ handleComponent = child;
161
+ break;
162
+ case "DrawerFrame":
163
+ frameComponent = child;
164
+ break;
165
+ case "DrawerBackdrop":
166
+ backdropComponent = child;
167
+ break;
168
+ default:
169
+ console.warn("Warning: passed invalid child to Drawer", child);
170
+ }
171
+ }
172
+ });
173
+ return <DrawerProvider scope={__scopeDrawer} position={position} snapPoints={snapPoints} setPosition={setPosition}>
174
+ {backdropComponent}
175
+ {handleComponent}
176
+ <Animated.View {...panResponder == null ? void 0 : panResponder.panHandlers} onLayout={(e) => {
177
+ setLayout(e.nativeEvent.layout);
178
+ }} style={{
179
+ width: "100%",
180
+ height: "100%",
181
+ transform: [{ translateY: positionValue.current }]
182
+ }}>{frameComponent}</Animated.View>
183
+ </DrawerProvider>;
184
+ }), {
185
+ componentName: "Drawer"
186
+ }), {
187
+ Handle: DrawerHandle,
188
+ Frame: DrawerFrame,
189
+ Backdrop: DrawerBackdrop
190
+ });
191
+ function getYForPosition(point, layout) {
192
+ if (!layout)
193
+ return 0;
194
+ if (point === void 0) {
195
+ console.warn(`No snapPoint`);
196
+ return 0;
197
+ }
198
+ const pct = point / 100;
199
+ const next = layout.height - pct * layout.height;
200
+ return next;
201
+ }
202
+ function resisted(y, minY, maxOverflow = 25) {
203
+ if (y < minY) {
204
+ const past = minY - y;
205
+ const pctPast = Math.min(maxOverflow, past) / maxOverflow;
206
+ const diminishBy = 1.1 - Math.pow(0.1, pctPast);
207
+ const extra = -diminishBy * maxOverflow;
208
+ return minY + extra;
209
+ }
210
+ return y;
211
+ }
212
+ export {
213
+ Drawer,
214
+ DrawerBackdrop,
215
+ DrawerFrame,
216
+ DrawerHandle,
217
+ DrawerHandleFrame,
218
+ createDrawerScope
219
+ };
220
+ //# sourceMappingURL=Drawer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/Drawer.tsx"],
4
+ "sourcesContent": ["import { isSSR, isWeb, styled, themeable, withStaticProperties } from '@tamagui/core'\nimport { ScopedProps, createContextScope } from '@tamagui/create-context'\nimport { XStack, XStackProps, YStack } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport React, {\n ReactNode,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { Animated, LayoutRectangle, PanResponder, View } from 'react-native'\n\ntype PositionChangeHandler =\n | ((position: number) => void)\n | React.Dispatch<React.SetStateAction<number>>\n\nconst DRAWER_NAME = 'Drawer'\nconst DRAWER_HANDLE_NAME = 'DrawerHandle'\n\nexport const DrawerHandleFrame = styled(XStack, {\n name: DRAWER_HANDLE_NAME,\n height: 10,\n borderRadius: 100,\n backgroundColor: '$background',\n position: 'absolute',\n pointerEvents: 'auto',\n zIndex: 10,\n y: -18,\n top: 0,\n left: '35%',\n right: '35%',\n opacity: 0.5,\n\n hoverStyle: {\n opacity: 0.7,\n },\n})\n\nexport const DrawerHandle = DrawerHandleFrame.extractable(\n ({ __scopeDrawer, ...props }: ScopedProps<XStackProps, 'Drawer'>) => {\n const context = useDrawerContext(DRAWER_HANDLE_NAME, __scopeDrawer)\n\n return (\n <DrawerHandleFrame\n onPress={() => {\n const nextPos = (context.position + 1) % context.snapPoints.length\n context.setPosition(nextPos)\n }}\n {...props}\n />\n )\n }\n)\n\ntype DrawerContextValue = {\n position: number\n snapPoints: number[]\n setPosition: React.Dispatch<React.SetStateAction<number>>\n}\n\nconst [createDrawerContext, createDrawerScope] = createContextScope(DRAWER_NAME)\nconst [DrawerProvider, useDrawerContext] = createDrawerContext<DrawerContextValue>(\n DRAWER_NAME,\n {} as any\n)\n\nexport const DrawerBackdrop = styled(YStack, {\n name: 'DrawerBackdrop',\n backgroundColor: '$color',\n fullscreen: true,\n opacity: 0.2,\n})\n\nexport const DrawerFrame = styled(YStack, {\n name: 'DrawerFrame',\n flex: 1,\n backgroundColor: '$background',\n borderTopLeftRadius: '$4',\n borderTopRightRadius: '$4',\n padding: '$4',\n width: '100%',\n})\n\nexport type DrawerProps = ScopedProps<\n {\n open?: boolean\n defaultOpen?: boolean\n defaultPosition?: number\n snapPoints?: number[]\n position?: number\n onChangePosition?: PositionChangeHandler\n children?: ReactNode\n },\n 'Drawer'\n>\n\nconst useIsSSR = () => {\n const [val, setVal] = useState(isWeb ? isSSR : false)\n useEffect(() => {\n if (isWeb && !isSSR) {\n setVal(false)\n }\n }, [])\n return val\n}\n\nexport const Drawer = withStaticProperties(\n themeable(\n forwardRef<View, DrawerProps>((props, ref) => {\n const {\n __scopeDrawer,\n snapPoints: snapPointsProp = [80, 10],\n children: childrenProp,\n position: positionProp,\n onChangePosition,\n defaultPosition,\n ...rest\n } = props\n const isServerSide = useIsSSR()\n\n const [position, setPosition] = useControllableState({\n prop: positionProp,\n defaultProp: defaultPosition || 0,\n onChange: onChangePosition,\n strategy: 'most-recent-wins',\n })\n\n const [layout, setLayout] = useState<LayoutRectangle>()\n\n const positionValue = useRef<Animated.Value>()\n if (!positionValue.current) {\n positionValue.current = new Animated.Value(position)\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const snapPoints = useMemo(() => snapPointsProp, [JSON.stringify(snapPointsProp)])\n\n // we can put non-server side hooks after conditional because based on env\n if (isServerSide) {\n return null\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const spring = useRef<Animated.CompositeAnimation | null>(null)\n\n function stopSpring() {\n spring.current?.stop()\n spring.current = null\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const positions = useMemo(\n () => snapPoints.map((point) => getYForPosition(point, layout)),\n [layout, snapPoints]\n )\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const animateTo = useCallback(\n (position: number) => {\n if (!positionValue.current) return\n const toValue = positions[position]\n stopSpring()\n spring.current = Animated.spring(positionValue.current, {\n useNativeDriver: !isWeb,\n toValue,\n })\n spring.current.start(({ finished }) => finished && stopSpring())\n },\n [positions]\n )\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(() => {\n animateTo(position)\n }, [position, animateTo])\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const panResponder = useMemo(() => {\n if (!layout) return\n console.log('setup pan')\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const pos = positionValue.current!\n const minY = positions[0]\n let startY = pos['_value']\n\n return PanResponder.create({\n onMoveShouldSetPanResponder: (_e, { dy }) => {\n // we could do some detection of other touchables and cancel here..\n // console.log('wut is', _e)\n return Math.abs(dy) > 6\n },\n onPanResponderGrant: () => {\n stopSpring()\n startY = pos['_value']\n },\n onPanResponderMove: (_e, { dy }) => {\n const to = dy + startY\n pos.setValue(resisted(to, minY))\n },\n onPanResponderRelease: (_e, { vy, dy }) => {\n const at = dy + startY\n // seems liky vy goes up to about 4 at the very most (+ is down, - is up)\n // lets base our multiplier on the total layout height\n const end = at + layout.height * vy * 0.33\n let closestPoint = 0\n let dist = Infinity\n for (let i = 0; i < positions.length; i++) {\n const position = positions[i]\n const curDist = end > position ? end - position : position - end\n if (curDist < dist) {\n dist = curDist\n closestPoint = i\n }\n }\n // have to call both because state may not change but need to snap back\n setPosition(closestPoint)\n animateTo(closestPoint)\n },\n })\n }, [layout, positions, setPosition])\n\n let handleComponent: React.ReactElement | null = null\n let backdropComponent: React.ReactElement | null = null\n let frameComponent: React.ReactElement | null = null\n\n React.Children.forEach(childrenProp, (child) => {\n if (isValidElement(child)) {\n switch (child.type?.['staticConfig'].componentName) {\n case 'DrawerHandle':\n handleComponent = child\n break\n case 'DrawerFrame':\n frameComponent = child\n break\n case 'DrawerBackdrop':\n backdropComponent = child\n break\n default:\n console.warn('Warning: passed invalid child to Drawer', child)\n }\n }\n })\n\n return (\n <DrawerProvider\n scope={__scopeDrawer}\n position={position}\n snapPoints={snapPoints}\n setPosition={setPosition}\n >\n {backdropComponent}\n {handleComponent}\n <Animated.View\n {...panResponder?.panHandlers}\n onLayout={(e) => {\n setLayout(e.nativeEvent.layout)\n }}\n style={{\n width: '100%',\n height: '100%',\n transform: [{ translateY: positionValue.current }],\n }}\n >\n {frameComponent}\n </Animated.View>\n </DrawerProvider>\n )\n }),\n {\n componentName: 'Drawer',\n }\n ),\n {\n Handle: DrawerHandle,\n Frame: DrawerFrame,\n Backdrop: DrawerBackdrop,\n }\n)\n\nfunction getYForPosition(point?: number, layout?: LayoutRectangle) {\n if (!layout) return 0\n if (point === undefined) {\n console.warn(`No snapPoint`)\n return 0\n }\n const pct = point / 100\n const next = layout.height - pct * layout.height\n return next\n}\n\nfunction resisted(y: number, minY: number, maxOverflow = 25) {\n if (y < minY) {\n const past = minY - y\n const pctPast = Math.min(maxOverflow, past) / maxOverflow\n const diminishBy = 1.1 - Math.pow(0.1, pctPast)\n const extra = -diminishBy * maxOverflow\n return minY + extra\n }\n return y\n}\n\nexport { createDrawerScope }\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,220 @@
1
+ import { isSSR, isWeb, styled, themeable, withStaticProperties } from "@tamagui/core";
2
+ import { createContextScope } from "@tamagui/create-context";
3
+ import { XStack, YStack } from "@tamagui/stacks";
4
+ import { useControllableState } from "@tamagui/use-controllable-state";
5
+ import React, {
6
+ forwardRef,
7
+ isValidElement,
8
+ useCallback,
9
+ useEffect,
10
+ useLayoutEffect,
11
+ useMemo,
12
+ useRef,
13
+ useState
14
+ } from "react";
15
+ import { Animated, PanResponder } from "react-native";
16
+ const DRAWER_NAME = "Drawer";
17
+ const DRAWER_HANDLE_NAME = "DrawerHandle";
18
+ const DrawerHandleFrame = styled(XStack, {
19
+ name: DRAWER_HANDLE_NAME,
20
+ height: 10,
21
+ borderRadius: 100,
22
+ backgroundColor: "$background",
23
+ position: "absolute",
24
+ pointerEvents: "auto",
25
+ zIndex: 10,
26
+ y: -18,
27
+ top: 0,
28
+ left: "35%",
29
+ right: "35%",
30
+ opacity: 0.5,
31
+ hoverStyle: {
32
+ opacity: 0.7
33
+ }
34
+ });
35
+ const DrawerHandle = DrawerHandleFrame.extractable(({ __scopeDrawer, ...props }) => {
36
+ const context = useDrawerContext(DRAWER_HANDLE_NAME, __scopeDrawer);
37
+ return <DrawerHandleFrame onPress={() => {
38
+ const nextPos = (context.position + 1) % context.snapPoints.length;
39
+ context.setPosition(nextPos);
40
+ }} {...props} />;
41
+ });
42
+ const [createDrawerContext, createDrawerScope] = createContextScope(DRAWER_NAME);
43
+ const [DrawerProvider, useDrawerContext] = createDrawerContext(DRAWER_NAME, {});
44
+ const DrawerBackdrop = styled(YStack, {
45
+ name: "DrawerBackdrop",
46
+ backgroundColor: "$color",
47
+ fullscreen: true,
48
+ opacity: 0.2
49
+ });
50
+ const DrawerFrame = styled(YStack, {
51
+ name: "DrawerFrame",
52
+ flex: 1,
53
+ backgroundColor: "$background",
54
+ borderTopLeftRadius: "$4",
55
+ borderTopRightRadius: "$4",
56
+ padding: "$4",
57
+ width: "100%"
58
+ });
59
+ const useIsSSR = () => {
60
+ const [val, setVal] = useState(isWeb ? isSSR : false);
61
+ useEffect(() => {
62
+ if (isWeb && !isSSR) {
63
+ setVal(false);
64
+ }
65
+ }, []);
66
+ return val;
67
+ };
68
+ const Drawer = withStaticProperties(themeable(forwardRef((props, ref) => {
69
+ const {
70
+ __scopeDrawer,
71
+ snapPoints: snapPointsProp = [80, 10],
72
+ children: childrenProp,
73
+ position: positionProp,
74
+ onChangePosition,
75
+ defaultPosition,
76
+ ...rest
77
+ } = props;
78
+ const isServerSide = useIsSSR();
79
+ const [position, setPosition] = useControllableState({
80
+ prop: positionProp,
81
+ defaultProp: defaultPosition || 0,
82
+ onChange: onChangePosition,
83
+ strategy: "most-recent-wins"
84
+ });
85
+ const [layout, setLayout] = useState();
86
+ const positionValue = useRef();
87
+ if (!positionValue.current) {
88
+ positionValue.current = new Animated.Value(position);
89
+ }
90
+ const snapPoints = useMemo(() => snapPointsProp, [JSON.stringify(snapPointsProp)]);
91
+ if (isServerSide) {
92
+ return null;
93
+ }
94
+ const spring = useRef(null);
95
+ function stopSpring() {
96
+ var _a;
97
+ (_a = spring.current) == null ? void 0 : _a.stop();
98
+ spring.current = null;
99
+ }
100
+ const positions = useMemo(() => snapPoints.map((point) => getYForPosition(point, layout)), [layout, snapPoints]);
101
+ const animateTo = useCallback((position2) => {
102
+ if (!positionValue.current)
103
+ return;
104
+ const toValue = positions[position2];
105
+ stopSpring();
106
+ spring.current = Animated.spring(positionValue.current, {
107
+ useNativeDriver: !isWeb,
108
+ toValue
109
+ });
110
+ spring.current.start(({ finished }) => finished && stopSpring());
111
+ }, [positions]);
112
+ useLayoutEffect(() => {
113
+ animateTo(position);
114
+ }, [position, animateTo]);
115
+ const panResponder = useMemo(() => {
116
+ if (!layout)
117
+ return;
118
+ console.log("setup pan");
119
+ const pos = positionValue.current;
120
+ const minY = positions[0];
121
+ let startY = pos["_value"];
122
+ return PanResponder.create({
123
+ onMoveShouldSetPanResponder: (_e, { dy }) => {
124
+ return Math.abs(dy) > 6;
125
+ },
126
+ onPanResponderGrant: () => {
127
+ stopSpring();
128
+ startY = pos["_value"];
129
+ },
130
+ onPanResponderMove: (_e, { dy }) => {
131
+ const to = dy + startY;
132
+ pos.setValue(resisted(to, minY));
133
+ },
134
+ onPanResponderRelease: (_e, { vy, dy }) => {
135
+ const at = dy + startY;
136
+ const end = at + layout.height * vy * 0.33;
137
+ let closestPoint = 0;
138
+ let dist = Infinity;
139
+ for (let i = 0; i < positions.length; i++) {
140
+ const position2 = positions[i];
141
+ const curDist = end > position2 ? end - position2 : position2 - end;
142
+ if (curDist < dist) {
143
+ dist = curDist;
144
+ closestPoint = i;
145
+ }
146
+ }
147
+ setPosition(closestPoint);
148
+ animateTo(closestPoint);
149
+ }
150
+ });
151
+ }, [layout, positions, setPosition]);
152
+ let handleComponent = null;
153
+ let backdropComponent = null;
154
+ let frameComponent = null;
155
+ React.Children.forEach(childrenProp, (child) => {
156
+ var _a;
157
+ if (isValidElement(child)) {
158
+ switch ((_a = child.type) == null ? void 0 : _a["staticConfig"].componentName) {
159
+ case "DrawerHandle":
160
+ handleComponent = child;
161
+ break;
162
+ case "DrawerFrame":
163
+ frameComponent = child;
164
+ break;
165
+ case "DrawerBackdrop":
166
+ backdropComponent = child;
167
+ break;
168
+ default:
169
+ console.warn("Warning: passed invalid child to Drawer", child);
170
+ }
171
+ }
172
+ });
173
+ return <DrawerProvider scope={__scopeDrawer} position={position} snapPoints={snapPoints} setPosition={setPosition}>
174
+ {backdropComponent}
175
+ {handleComponent}
176
+ <Animated.View {...panResponder == null ? void 0 : panResponder.panHandlers} onLayout={(e) => {
177
+ setLayout(e.nativeEvent.layout);
178
+ }} style={{
179
+ width: "100%",
180
+ height: "100%",
181
+ transform: [{ translateY: positionValue.current }]
182
+ }}>{frameComponent}</Animated.View>
183
+ </DrawerProvider>;
184
+ }), {
185
+ componentName: "Drawer"
186
+ }), {
187
+ Handle: DrawerHandle,
188
+ Frame: DrawerFrame,
189
+ Backdrop: DrawerBackdrop
190
+ });
191
+ function getYForPosition(point, layout) {
192
+ if (!layout)
193
+ return 0;
194
+ if (point === void 0) {
195
+ console.warn(`No snapPoint`);
196
+ return 0;
197
+ }
198
+ const pct = point / 100;
199
+ const next = layout.height - pct * layout.height;
200
+ return next;
201
+ }
202
+ function resisted(y, minY, maxOverflow = 25) {
203
+ if (y < minY) {
204
+ const past = minY - y;
205
+ const pctPast = Math.min(maxOverflow, past) / maxOverflow;
206
+ const diminishBy = 1.1 - Math.pow(0.1, pctPast);
207
+ const extra = -diminishBy * maxOverflow;
208
+ return minY + extra;
209
+ }
210
+ return y;
211
+ }
212
+ export {
213
+ Drawer,
214
+ DrawerBackdrop,
215
+ DrawerFrame,
216
+ DrawerHandle,
217
+ DrawerHandleFrame,
218
+ createDrawerScope
219
+ };
220
+ //# sourceMappingURL=Sheet.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/Sheet.tsx"],
4
+ "sourcesContent": ["import { isSSR, isWeb, styled, themeable, withStaticProperties } from '@tamagui/core'\nimport { ScopedProps, createContextScope } from '@tamagui/create-context'\nimport { XStack, XStackProps, YStack } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport React, {\n ReactNode,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { Animated, LayoutRectangle, PanResponder, View } from 'react-native'\n\ntype PositionChangeHandler =\n | ((position: number) => void)\n | React.Dispatch<React.SetStateAction<number>>\n\nconst DRAWER_NAME = 'Drawer'\nconst DRAWER_HANDLE_NAME = 'DrawerHandle'\n\nexport const DrawerHandleFrame = styled(XStack, {\n name: DRAWER_HANDLE_NAME,\n height: 10,\n borderRadius: 100,\n backgroundColor: '$background',\n position: 'absolute',\n pointerEvents: 'auto',\n zIndex: 10,\n y: -18,\n top: 0,\n left: '35%',\n right: '35%',\n opacity: 0.5,\n\n hoverStyle: {\n opacity: 0.7,\n },\n})\n\nexport const DrawerHandle = DrawerHandleFrame.extractable(\n ({ __scopeDrawer, ...props }: ScopedProps<XStackProps, 'Drawer'>) => {\n const context = useDrawerContext(DRAWER_HANDLE_NAME, __scopeDrawer)\n\n return (\n <DrawerHandleFrame\n onPress={() => {\n const nextPos = (context.position + 1) % context.snapPoints.length\n context.setPosition(nextPos)\n }}\n {...props}\n />\n )\n }\n)\n\ntype DrawerContextValue = {\n position: number\n snapPoints: number[]\n setPosition: React.Dispatch<React.SetStateAction<number>>\n}\n\nconst [createDrawerContext, createDrawerScope] = createContextScope(DRAWER_NAME)\nconst [DrawerProvider, useDrawerContext] = createDrawerContext<DrawerContextValue>(\n DRAWER_NAME,\n {} as any\n)\n\nexport const DrawerBackdrop = styled(YStack, {\n name: 'DrawerBackdrop',\n backgroundColor: '$color',\n fullscreen: true,\n opacity: 0.2,\n})\n\nexport const DrawerFrame = styled(YStack, {\n name: 'DrawerFrame',\n flex: 1,\n backgroundColor: '$background',\n borderTopLeftRadius: '$4',\n borderTopRightRadius: '$4',\n padding: '$4',\n width: '100%',\n})\n\nexport type DrawerProps = ScopedProps<\n {\n open?: boolean\n defaultOpen?: boolean\n defaultPosition?: number\n snapPoints?: number[]\n position?: number\n onChangePosition?: PositionChangeHandler\n children?: ReactNode\n },\n 'Drawer'\n>\n\nconst useIsSSR = () => {\n const [val, setVal] = useState(isWeb ? isSSR : false)\n useEffect(() => {\n if (isWeb && !isSSR) {\n setVal(false)\n }\n }, [])\n return val\n}\n\nexport const Drawer = withStaticProperties(\n themeable(\n forwardRef<View, DrawerProps>((props, ref) => {\n const {\n __scopeDrawer,\n snapPoints: snapPointsProp = [80, 10],\n children: childrenProp,\n position: positionProp,\n onChangePosition,\n defaultPosition,\n ...rest\n } = props\n const isServerSide = useIsSSR()\n\n const [position, setPosition] = useControllableState({\n prop: positionProp,\n defaultProp: defaultPosition || 0,\n onChange: onChangePosition,\n strategy: 'most-recent-wins',\n })\n\n const [layout, setLayout] = useState<LayoutRectangle>()\n\n const positionValue = useRef<Animated.Value>()\n if (!positionValue.current) {\n positionValue.current = new Animated.Value(position)\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const snapPoints = useMemo(() => snapPointsProp, [JSON.stringify(snapPointsProp)])\n\n // we can put non-server side hooks after conditional because based on env\n if (isServerSide) {\n return null\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const spring = useRef<Animated.CompositeAnimation | null>(null)\n\n function stopSpring() {\n spring.current?.stop()\n spring.current = null\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const positions = useMemo(\n () => snapPoints.map((point) => getYForPosition(point, layout)),\n [layout, snapPoints]\n )\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const animateTo = useCallback(\n (position: number) => {\n if (!positionValue.current) return\n const toValue = positions[position]\n stopSpring()\n spring.current = Animated.spring(positionValue.current, {\n useNativeDriver: !isWeb,\n toValue,\n })\n spring.current.start(({ finished }) => finished && stopSpring())\n },\n [positions]\n )\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(() => {\n animateTo(position)\n }, [position, animateTo])\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const panResponder = useMemo(() => {\n if (!layout) return\n console.log('setup pan')\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const pos = positionValue.current!\n const minY = positions[0]\n let startY = pos['_value']\n\n return PanResponder.create({\n onMoveShouldSetPanResponder: (_e, { dy }) => {\n // we could do some detection of other touchables and cancel here..\n // console.log('wut is', _e)\n return Math.abs(dy) > 6\n },\n onPanResponderGrant: () => {\n stopSpring()\n startY = pos['_value']\n },\n onPanResponderMove: (_e, { dy }) => {\n const to = dy + startY\n pos.setValue(resisted(to, minY))\n },\n onPanResponderRelease: (_e, { vy, dy }) => {\n const at = dy + startY\n // seems liky vy goes up to about 4 at the very most (+ is down, - is up)\n // lets base our multiplier on the total layout height\n const end = at + layout.height * vy * 0.33\n let closestPoint = 0\n let dist = Infinity\n for (let i = 0; i < positions.length; i++) {\n const position = positions[i]\n const curDist = end > position ? end - position : position - end\n if (curDist < dist) {\n dist = curDist\n closestPoint = i\n }\n }\n // have to call both because state may not change but need to snap back\n setPosition(closestPoint)\n animateTo(closestPoint)\n },\n })\n }, [layout, positions, setPosition])\n\n let handleComponent: React.ReactElement | null = null\n let backdropComponent: React.ReactElement | null = null\n let frameComponent: React.ReactElement | null = null\n\n React.Children.forEach(childrenProp, (child) => {\n if (isValidElement(child)) {\n switch (child.type?.['staticConfig'].componentName) {\n case 'DrawerHandle':\n handleComponent = child\n break\n case 'DrawerFrame':\n frameComponent = child\n break\n case 'DrawerBackdrop':\n backdropComponent = child\n break\n default:\n console.warn('Warning: passed invalid child to Drawer', child)\n }\n }\n })\n\n return (\n <DrawerProvider\n scope={__scopeDrawer}\n position={position}\n snapPoints={snapPoints}\n setPosition={setPosition}\n >\n {backdropComponent}\n {handleComponent}\n <Animated.View\n {...panResponder?.panHandlers}\n onLayout={(e) => {\n setLayout(e.nativeEvent.layout)\n }}\n style={{\n width: '100%',\n height: '100%',\n transform: [{ translateY: positionValue.current }],\n }}\n >\n {frameComponent}\n </Animated.View>\n </DrawerProvider>\n )\n }),\n {\n componentName: 'Drawer',\n }\n ),\n {\n Handle: DrawerHandle,\n Frame: DrawerFrame,\n Backdrop: DrawerBackdrop,\n }\n)\n\nfunction getYForPosition(point?: number, layout?: LayoutRectangle) {\n if (!layout) return 0\n if (point === undefined) {\n console.warn(`No snapPoint`)\n return 0\n }\n const pct = point / 100\n const next = layout.height - pct * layout.height\n return next\n}\n\nfunction resisted(y: number, minY: number, maxOverflow = 25) {\n if (y < minY) {\n const past = minY - y\n const pctPast = Math.min(maxOverflow, past) / maxOverflow\n const diminishBy = 1.1 - Math.pow(0.1, pctPast)\n const extra = -diminishBy * maxOverflow\n return minY + extra\n }\n return y\n}\n\nexport { createDrawerScope }\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./Sheet";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "sourcesContent": ["export * from './Sheet'\n"],
5
+ "mappings": "AAAA;",
6
+ "names": []
7
+ }
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@tamagui/sheet",
3
+ "version": "1.0.1-beta.100",
4
+ "sideEffects": [
5
+ "*.css"
6
+ ],
7
+ "source": "src/index.ts",
8
+ "types": "./types/index.d.ts",
9
+ "main": "dist/cjs",
10
+ "module": "dist/esm",
11
+ "module:jsx": "dist/jsx",
12
+ "license": "MIT",
13
+ "files": [
14
+ "src",
15
+ "types",
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "build": "tamagui-build",
20
+ "watch": "tamagui-build --watch"
21
+ },
22
+ "dependencies": {
23
+ "@tamagui/core": "^1.0.1-beta.100",
24
+ "@tamagui/create-context": "^1.0.1-beta.100",
25
+ "@tamagui/stacks": "^1.0.1-beta.100",
26
+ "@tamagui/use-controllable-state": "^1.0.1-beta.100"
27
+ },
28
+ "peerDependencies": {
29
+ "react": "*",
30
+ "react-dom": "*",
31
+ "react-native": "*"
32
+ },
33
+ "devDependencies": {
34
+ "@tamagui/build": "^1.0.1-beta.100",
35
+ "react": "*",
36
+ "react-dom": "*",
37
+ "react-native": "*"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public"
41
+ }
42
+ }