react-modal-sheet 1.3.1 → 1.4.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.
- package/README.md +15 -15
- package/dist/SheetBackdrop.d.ts +1 -1
- package/dist/SheetContainer.d.ts +1 -1
- package/dist/react-modal-sheet.cjs.development.js +78 -50
- package/dist/react-modal-sheet.cjs.development.js.map +1 -1
- package/dist/react-modal-sheet.cjs.production.min.js +1 -1
- package/dist/react-modal-sheet.cjs.production.min.js.map +1 -1
- package/dist/react-modal-sheet.esm.js +80 -52
- package/dist/react-modal-sheet.esm.js.map +1 -1
- package/dist/sheet.d.ts +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/utils.d.ts +3 -1
- package/package.json +9 -9
- package/src/SheetBackdrop.tsx +2 -1
- package/src/SheetContainer.tsx +8 -3
- package/src/sheet.tsx +48 -60
- package/src/styles.ts +2 -0
- package/src/types.tsx +2 -1
- package/src/utils.ts +26 -1
package/README.md
CHANGED
|
@@ -71,21 +71,21 @@ Also, by constructing the sheet from smaller pieces makes it easier to apply any
|
|
|
71
71
|
|
|
72
72
|
## Props
|
|
73
73
|
|
|
74
|
-
| Name | Required | Default | Description
|
|
75
|
-
| -------------- | -------- | ---------------- |
|
|
76
|
-
| `children` | yes | | Use `Sheet.Container/Content/Header/Backdrop` to compose your bottom sheet.
|
|
77
|
-
| `isOpen` | yes | | Boolean that indicates whether the sheet is open or not.
|
|
78
|
-
| `onClose` | yes | | Callback fn that is called when the sheet is closed by the user.
|
|
79
|
-
| `disableDrag` | no | false | Disable drag for the whole sheet.
|
|
80
|
-
| `onOpenStart` | no | | Callback fn that is called when the sheet opening animation starts.
|
|
81
|
-
| `onOpenEnd` | no | | Callback fn that is called when the sheet opening animation is completed.
|
|
82
|
-
| `onCloseStart` | no | | Callback fn that is called when the sheet closing animation starts.
|
|
83
|
-
| `onCloseEnd` | no | | Callback fn that is called when the sheet closing animation is completed.
|
|
84
|
-
| `onSnap` | no | | Callback fn that is called with the current snap point index when the sheet snaps to a new snap point. Requires `snapPoints` prop.
|
|
85
|
-
| `snapPoints` | no | | Eg. `[
|
|
86
|
-
| `initialSnap` | no | 0 | Initial snap point when sheet is opened (index from `snapPoints`).
|
|
87
|
-
| `rootId` | no | | The id of the element where the main app is mounted, eg. "root". Enables iOS modal effect.
|
|
88
|
-
| `springConfig` | no | `DEFAULT_SPRING` | Overrides the config for the [spring animation](https://www.framer.com/api/motion/types/#spring).
|
|
74
|
+
| Name | Required | Default | Description |
|
|
75
|
+
| -------------- | -------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
76
|
+
| `children` | yes | | Use `Sheet.Container/Content/Header/Backdrop` to compose your bottom sheet. |
|
|
77
|
+
| `isOpen` | yes | | Boolean that indicates whether the sheet is open or not. |
|
|
78
|
+
| `onClose` | yes | | Callback fn that is called when the sheet is closed by the user. |
|
|
79
|
+
| `disableDrag` | no | false | Disable drag for the whole sheet. |
|
|
80
|
+
| `onOpenStart` | no | | Callback fn that is called when the sheet opening animation starts. |
|
|
81
|
+
| `onOpenEnd` | no | | Callback fn that is called when the sheet opening animation is completed. |
|
|
82
|
+
| `onCloseStart` | no | | Callback fn that is called when the sheet closing animation starts. |
|
|
83
|
+
| `onCloseEnd` | no | | Callback fn that is called when the sheet closing animation is completed. |
|
|
84
|
+
| `onSnap` | no | | Callback fn that is called with the current snap point index when the sheet snaps to a new snap point. Requires `snapPoints` prop. |
|
|
85
|
+
| `snapPoints` | no | | Eg. `[-50, 0.5, 100, 0]` - where positive values are pixels from the bottom of the screen and negative from the top. Values between 0-1 represent percentages, eg. `0.5` means 50% of window height from the bottom of the sceen. |
|
|
86
|
+
| `initialSnap` | no | 0 | Initial snap point when sheet is opened (index from `snapPoints`). |
|
|
87
|
+
| `rootId` | no | | The id of the element where the main app is mounted, eg. "root". Enables iOS modal effect. |
|
|
88
|
+
| `springConfig` | no | `DEFAULT_SPRING` | Overrides the config for the [spring animation](https://www.framer.com/api/motion/types/#spring). |
|
|
89
89
|
|
|
90
90
|
**`DEFAULT_SPRING`**
|
|
91
91
|
|
package/dist/SheetBackdrop.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
declare const SheetBackdrop: React.ForwardRefExoticComponent<Pick<import("framer-motion").MotionProps, "style" | "transformTemplate" | "transformValues" | "variants" | "transition" | "onViewportBoxUpdate" | "onBeforeLayoutMeasure" | "onLayoutMeasure" | "onUpdate" | "onAnimationStart" | "onAnimationComplete" | "onLayoutAnimationComplete" | "onPan" | "onPanStart" | "onPanSessionStart" | "onPanEnd" | "onTap" | "onTapStart" | "onTapCancel" | "whileTap" | "whileHover" | "onHoverStart" | "onHoverEnd" | "whileFocus" | "drag" | "whileDrag" | "dragDirectionLock" | "dragPropagation" | "dragConstraints" | "dragElastic" | "dragMomentum" | "dragTransition" | "dragControls" | "dragListener" | "onMeasureDragConstraints" | "_dragX" | "_dragY" | "onDragStart" | "onDragEnd" | "onDrag" | "onDirectionLock" | "onDragTransitionEnd" | "layout" | "layoutId" | "custom" | "inherit"> & React.RefAttributes<any>>;
|
|
2
|
+
declare const SheetBackdrop: React.ForwardRefExoticComponent<Pick<import("framer-motion").MotionProps, "style" | "transformTemplate" | "transformValues" | "variants" | "transition" | "onViewportBoxUpdate" | "onBeforeLayoutMeasure" | "onLayoutMeasure" | "onUpdate" | "onAnimationStart" | "onAnimationComplete" | "onLayoutAnimationComplete" | "onUnmount" | "onPan" | "onPanStart" | "onPanSessionStart" | "onPanEnd" | "onTap" | "onTapStart" | "onTapCancel" | "whileTap" | "whileHover" | "onHoverStart" | "onHoverEnd" | "whileFocus" | "drag" | "whileDrag" | "dragDirectionLock" | "dragPropagation" | "dragConstraints" | "dragElastic" | "dragMomentum" | "dragTransition" | "dragControls" | "dragListener" | "onMeasureDragConstraints" | "_dragX" | "_dragY" | "onDragStart" | "onDragEnd" | "onDrag" | "onDirectionLock" | "onDragTransitionEnd" | "layout" | "layoutId" | "custom" | "inherit"> & React.RefAttributes<any>>;
|
|
3
3
|
export default SheetBackdrop;
|
package/dist/SheetContainer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
declare const SheetContainer: React.ForwardRefExoticComponent<Pick<import("framer-motion").MotionProps, "style" | "transformTemplate" | "transformValues" | "variants" | "transition" | "onViewportBoxUpdate" | "onBeforeLayoutMeasure" | "onLayoutMeasure" | "onUpdate" | "onAnimationStart" | "onLayoutAnimationComplete" | "onPan" | "onPanStart" | "onPanSessionStart" | "onPanEnd" | "onTap" | "onTapStart" | "onTapCancel" | "whileTap" | "whileHover" | "onHoverStart" | "onHoverEnd" | "whileFocus" | "drag" | "whileDrag" | "dragDirectionLock" | "dragPropagation" | "dragConstraints" | "dragElastic" | "dragMomentum" | "dragTransition" | "dragControls" | "dragListener" | "onMeasureDragConstraints" | "_dragX" | "_dragY" | "onDragStart" | "onDragEnd" | "onDrag" | "onDirectionLock" | "onDragTransitionEnd" | "layout" | "layoutId" | "custom" | "inherit"> & {
|
|
2
|
+
declare const SheetContainer: React.ForwardRefExoticComponent<Pick<import("framer-motion").MotionProps, "style" | "transformTemplate" | "transformValues" | "variants" | "transition" | "onViewportBoxUpdate" | "onBeforeLayoutMeasure" | "onLayoutMeasure" | "onUpdate" | "onAnimationStart" | "onLayoutAnimationComplete" | "onUnmount" | "onPan" | "onPanStart" | "onPanSessionStart" | "onPanEnd" | "onTap" | "onTapStart" | "onTapCancel" | "whileTap" | "whileHover" | "onHoverStart" | "onHoverEnd" | "whileFocus" | "drag" | "whileDrag" | "dragDirectionLock" | "dragPropagation" | "dragConstraints" | "dragElastic" | "dragMomentum" | "dragTransition" | "dragControls" | "dragListener" | "onMeasureDragConstraints" | "_dragX" | "_dragY" | "onDragStart" | "onDragEnd" | "onDrag" | "onDirectionLock" | "onDragTransitionEnd" | "layout" | "layoutId" | "custom" | "inherit"> & {
|
|
3
3
|
children: React.ReactNode;
|
|
4
4
|
} & React.RefAttributes<any>>;
|
|
5
5
|
export default SheetContainer;
|
|
@@ -42,7 +42,7 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
42
42
|
return target;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
var
|
|
45
|
+
var isSSR = typeof window === 'undefined';
|
|
46
46
|
var getClosest = function getClosest(nums, goal) {
|
|
47
47
|
return nums.reduce(function (prev, curr) {
|
|
48
48
|
return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;
|
|
@@ -109,6 +109,32 @@ function cleanupRootStyles(rootId) {
|
|
|
109
109
|
root.addEventListener('transitionend', onTransitionEnd);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
+
var useIsomorphicLayoutEffect = isSSR ? React.useEffect : React.useLayoutEffect;
|
|
113
|
+
function useWindowHeight() {
|
|
114
|
+
var _useState = React.useState(0),
|
|
115
|
+
windowHeight = _useState[0],
|
|
116
|
+
setWindowHeight = _useState[1];
|
|
117
|
+
|
|
118
|
+
useIsomorphicLayoutEffect(function () {
|
|
119
|
+
var updateHeight = function updateHeight() {
|
|
120
|
+
return setWindowHeight(window.innerHeight);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
window.addEventListener('resize', updateHeight);
|
|
124
|
+
updateHeight();
|
|
125
|
+
return function () {
|
|
126
|
+
return window.removeEventListener('resize', updateHeight);
|
|
127
|
+
};
|
|
128
|
+
}, []);
|
|
129
|
+
return windowHeight;
|
|
130
|
+
}
|
|
131
|
+
var inDescendingOrder = function inDescendingOrder(arr) {
|
|
132
|
+
for (var i = 0; i < arr.length; i++) {
|
|
133
|
+
if (arr[i + 1] > arr[i]) return false;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return true;
|
|
137
|
+
};
|
|
112
138
|
|
|
113
139
|
var SheetContext = /*#__PURE__*/React.createContext(undefined);
|
|
114
140
|
var useSheetContext = function useSheetContext() {
|
|
@@ -180,7 +206,8 @@ var styles = {
|
|
|
180
206
|
left: 0,
|
|
181
207
|
right: 0,
|
|
182
208
|
zIndex: 9999999,
|
|
183
|
-
overflow: 'hidden'
|
|
209
|
+
overflow: 'hidden',
|
|
210
|
+
pointerEvents: 'none'
|
|
184
211
|
},
|
|
185
212
|
backdrop: {
|
|
186
213
|
zIndex: 1,
|
|
@@ -203,7 +230,8 @@ var styles = {
|
|
|
203
230
|
borderTopLeftRadius: '8px',
|
|
204
231
|
boxShadow: '0px -2px 16px rgba(0, 0, 0, 0.3)',
|
|
205
232
|
display: 'flex',
|
|
206
|
-
flexDirection: 'column'
|
|
233
|
+
flexDirection: 'column',
|
|
234
|
+
pointerEvents: 'auto'
|
|
207
235
|
},
|
|
208
236
|
headerWrapper: {
|
|
209
237
|
width: '100%'
|
|
@@ -252,14 +280,6 @@ var Sheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
252
280
|
disableDrag = _ref$disableDrag === void 0 ? false : _ref$disableDrag,
|
|
253
281
|
rest = _objectWithoutPropertiesLoose(_ref, ["children", "isOpen", "onClose", "onOpenStart", "onOpenEnd", "onCloseStart", "onCloseEnd", "onSnap", "snapPoints", "initialSnap", "rootId", "springConfig", "disableDrag"]);
|
|
254
282
|
|
|
255
|
-
var _React$useState = React.useState(false),
|
|
256
|
-
mounted = _React$useState[0],
|
|
257
|
-
setMounted = _React$useState[1];
|
|
258
|
-
|
|
259
|
-
var _React$useState2 = React.useState(false),
|
|
260
|
-
isDragging = _React$useState2[0],
|
|
261
|
-
setDragging = _React$useState2[1];
|
|
262
|
-
|
|
263
283
|
var sheetRef = React.useRef(null);
|
|
264
284
|
var callbacks = React.useRef({
|
|
265
285
|
onOpenStart: onOpenStart,
|
|
@@ -269,24 +289,27 @@ var Sheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
269
289
|
}); // prettier-ignore
|
|
270
290
|
|
|
271
291
|
var indicatorRotation = framerMotion.useMotionValue(0);
|
|
272
|
-
var
|
|
273
|
-
var
|
|
274
|
-
|
|
275
|
-
|
|
292
|
+
var windowHeight = useWindowHeight();
|
|
293
|
+
var y = framerMotion.useMotionValue(isOpen ? windowHeight : 0);
|
|
294
|
+
|
|
295
|
+
if (snapPoints) {
|
|
296
|
+
// Convert negative / percentage snap points to absolute values
|
|
297
|
+
snapPoints = snapPoints.map(function (point) {
|
|
298
|
+
if (point > 0 && point <= 1) return point * windowHeight; // percentage values e.g. between 0.0 and 1.0
|
|
299
|
+
|
|
300
|
+
return point < 0 ? windowHeight + point : point; // negative values
|
|
301
|
+
});
|
|
302
|
+
console.assert(inDescendingOrder(snapPoints) || windowHeight === 0, "Snap points need to be in descending order got: [" + snapPoints + "]");
|
|
303
|
+
}
|
|
304
|
+
|
|
276
305
|
var handleDrag = React.useCallback(function (_, _ref2) {
|
|
277
306
|
var delta = _ref2.delta;
|
|
278
307
|
// Update drag indicator rotation based on drag velocity
|
|
279
|
-
var velocity =
|
|
308
|
+
var velocity = y.getVelocity();
|
|
280
309
|
if (velocity > 0) indicatorRotation.set(10);
|
|
281
310
|
if (velocity < 0) indicatorRotation.set(-10); // Make sure user cannot drag beyond the top of the sheet
|
|
282
311
|
|
|
283
|
-
|
|
284
|
-
}, []); // eslint-disable-line
|
|
285
|
-
|
|
286
|
-
var handleDragStart = React.useCallback(function () {
|
|
287
|
-
// Sync the drag value with the spring value so that dragging start at the correct y position
|
|
288
|
-
sheetDragY.set(sheetSpringY.get());
|
|
289
|
-
setDragging(true);
|
|
312
|
+
y.set(Math.max(y.get() + delta.y, 0));
|
|
290
313
|
}, []); // eslint-disable-line
|
|
291
314
|
|
|
292
315
|
var handleDragEnd = React.useCallback(function (_, _ref3) {
|
|
@@ -300,10 +323,13 @@ var Sheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
300
323
|
var contentHeight = sheetEl.getBoundingClientRect().height;
|
|
301
324
|
var snapTo = snapPoints ? getClosest(snapPoints.map(function (p) {
|
|
302
325
|
return contentHeight - p;
|
|
303
|
-
}),
|
|
326
|
+
}), y.get()) // prettier-ignore
|
|
327
|
+
: y.get() / contentHeight > 0.6 // Close if dragged over 60%
|
|
304
328
|
? contentHeight : 0; // Update the spring value so that the sheet is animated to the snap point
|
|
305
329
|
|
|
306
|
-
|
|
330
|
+
framerMotion.animate(y, snapTo, _extends({
|
|
331
|
+
type: 'spring'
|
|
332
|
+
}, springConfig));
|
|
307
333
|
|
|
308
334
|
if (snapPoints && onSnap) {
|
|
309
335
|
var snapValue = Math.abs(Math.round(snapPoints[0] - snapTo));
|
|
@@ -312,7 +338,6 @@ var Sheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
312
338
|
}
|
|
313
339
|
|
|
314
340
|
if (snapTo >= contentHeight) onClose();
|
|
315
|
-
setDragging(false);
|
|
316
341
|
} // Reset indicator rotation after dragging
|
|
317
342
|
|
|
318
343
|
|
|
@@ -328,16 +353,14 @@ var Sheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
328
353
|
onCloseStart: onCloseStart,
|
|
329
354
|
onCloseEnd: onCloseEnd
|
|
330
355
|
};
|
|
331
|
-
});
|
|
332
|
-
React.useEffect(function () {
|
|
333
|
-
setMounted(true);
|
|
334
|
-
}, []); // Trigger onSnap callback when sheet is opened or closed
|
|
356
|
+
}); // Trigger onSnap callback when sheet is opened or closed
|
|
335
357
|
|
|
336
358
|
React.useEffect(function () {
|
|
337
|
-
if (!snapPoints || !onSnap
|
|
359
|
+
if (!snapPoints || !onSnap) return;
|
|
338
360
|
var snapIndex = isOpen ? initialSnap : snapPoints.length - 1;
|
|
339
361
|
onSnap(snapIndex);
|
|
340
|
-
}, [isOpen]);
|
|
362
|
+
}, [isOpen]); // eslint-disable-line
|
|
363
|
+
|
|
341
364
|
React.useImperativeHandle(ref, function () {
|
|
342
365
|
return {
|
|
343
366
|
snapTo: function snapTo(snapIndex) {
|
|
@@ -345,7 +368,9 @@ var Sheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
345
368
|
var sheetEl = sheetRef.current;
|
|
346
369
|
var contentHeight = sheetEl.getBoundingClientRect().height;
|
|
347
370
|
var snapTo = contentHeight - snapPoints[snapIndex];
|
|
348
|
-
|
|
371
|
+
framerMotion.animate(y, snapTo, _extends({
|
|
372
|
+
type: 'spring'
|
|
373
|
+
}, springConfig));
|
|
349
374
|
if (onSnap) onSnap(snapIndex);
|
|
350
375
|
if (snapTo >= contentHeight) onClose();
|
|
351
376
|
}
|
|
@@ -362,37 +387,35 @@ var Sheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
362
387
|
},
|
|
363
388
|
dragMomentum: false,
|
|
364
389
|
onDrag: handleDrag,
|
|
365
|
-
onDragStart: handleDragStart,
|
|
366
390
|
onDragEnd: handleDragEnd
|
|
367
391
|
};
|
|
368
392
|
var context = {
|
|
369
393
|
y: y,
|
|
370
394
|
sheetRef: sheetRef,
|
|
371
395
|
isOpen: isOpen,
|
|
372
|
-
isDragging: isDragging,
|
|
373
396
|
initialSnap: initialSnap,
|
|
374
397
|
snapPoints: snapPoints,
|
|
375
398
|
indicatorRotation: indicatorRotation,
|
|
376
399
|
callbacks: callbacks,
|
|
377
|
-
dragProps: dragProps
|
|
400
|
+
dragProps: dragProps,
|
|
401
|
+
windowHeight: windowHeight,
|
|
402
|
+
springConfig: springConfig
|
|
378
403
|
};
|
|
379
404
|
|
|
380
405
|
var wrapperProps = _extends({}, rest, {
|
|
381
406
|
ref: ref,
|
|
382
|
-
style:
|
|
383
|
-
pointerEvents: pointerEvents
|
|
384
|
-
})
|
|
407
|
+
style: styles.wrapper
|
|
385
408
|
});
|
|
386
409
|
|
|
387
|
-
|
|
410
|
+
var sheet = React.createElement(SheetContext.Provider, {
|
|
388
411
|
value: context
|
|
389
412
|
}, React.createElement("div", Object.assign({}, wrapperProps), React.createElement(framerMotion.AnimatePresence, null, isOpen ? React.Children.map(children, function (child, i) {
|
|
390
413
|
return React.cloneElement(child, {
|
|
391
414
|
key: "sheet-child-" + i
|
|
392
415
|
});
|
|
393
|
-
}) : null)))
|
|
394
|
-
|
|
395
|
-
|
|
416
|
+
}) : null)));
|
|
417
|
+
if (isSSR) return sheet;
|
|
418
|
+
return ReactDOM.createPortal(sheet, document.body);
|
|
396
419
|
});
|
|
397
420
|
|
|
398
421
|
var MAX_HEIGHT = 'calc(100% - env(safe-area-inset-top) - 34px)';
|
|
@@ -409,7 +432,9 @@ var SheetContainer = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
409
432
|
snapPoints = _useSheetContext.snapPoints,
|
|
410
433
|
_useSheetContext$init = _useSheetContext.initialSnap,
|
|
411
434
|
initialSnap = _useSheetContext$init === void 0 ? 0 : _useSheetContext$init,
|
|
412
|
-
sheetRef = _useSheetContext.sheetRef
|
|
435
|
+
sheetRef = _useSheetContext.sheetRef,
|
|
436
|
+
windowHeight = _useSheetContext.windowHeight,
|
|
437
|
+
springConfig = _useSheetContext.springConfig;
|
|
413
438
|
|
|
414
439
|
var _useEventCallbacks = useEventCallbacks(isOpen, callbacks),
|
|
415
440
|
handleAnimationComplete = _useEventCallbacks.handleAnimationComplete;
|
|
@@ -426,16 +451,16 @@ var SheetContainer = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
426
451
|
y: y
|
|
427
452
|
}),
|
|
428
453
|
initial: {
|
|
429
|
-
y:
|
|
454
|
+
y: windowHeight
|
|
430
455
|
},
|
|
431
456
|
animate: {
|
|
432
457
|
y: initialY,
|
|
433
|
-
transition: {
|
|
434
|
-
type: '
|
|
435
|
-
}
|
|
458
|
+
transition: _extends({
|
|
459
|
+
type: 'spring'
|
|
460
|
+
}, springConfig)
|
|
436
461
|
},
|
|
437
462
|
exit: {
|
|
438
|
-
y:
|
|
463
|
+
y: windowHeight
|
|
439
464
|
},
|
|
440
465
|
onAnimationComplete: handleAnimationComplete
|
|
441
466
|
}), children);
|
|
@@ -506,10 +531,13 @@ var SheetBackdrop = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
506
531
|
rest = _objectWithoutPropertiesLoose(_ref, ["style"]);
|
|
507
532
|
|
|
508
533
|
var Comp = isClickable(rest) ? framerMotion.motion.button : framerMotion.motion.div;
|
|
534
|
+
var pointerEvents = isClickable(rest) ? 'auto' : 'none';
|
|
509
535
|
return React.createElement(Comp, Object.assign({}, rest, {
|
|
510
536
|
ref: ref,
|
|
511
537
|
className: "react-modal-sheet-backdrop",
|
|
512
|
-
style: _extends({}, styles.backdrop, style
|
|
538
|
+
style: _extends({}, styles.backdrop, style, {
|
|
539
|
+
pointerEvents: pointerEvents
|
|
540
|
+
}),
|
|
513
541
|
initial: {
|
|
514
542
|
opacity: 0
|
|
515
543
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-modal-sheet.cjs.development.js","sources":["../src/utils.ts","../src/context.tsx","../src/hooks.tsx","../src/styles.ts","../src/sheet.tsx","../src/SheetContainer.tsx","../src/SheetContent.tsx","../src/SheetHeader.tsx","../src/SheetBackdrop.tsx","../src/index.tsx"],"sourcesContent":["export const isBrowser = typeof window !== 'undefined';\n\nexport const getClosest = (nums: number[], goal: number) => {\n return nums.reduce((prev, curr) => {\n return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;\n });\n};\n\nconst highlightId = 'react-modal-sheet-highlight';\n\nexport function applyRootStyles(rootId: string) {\n const body = document.querySelector('body') as HTMLBodyElement;\n const root = document.querySelector(`#${rootId}`) as HTMLDivElement;\n\n if (root) {\n const p = 24;\n const h = window.innerHeight;\n const s = (h - p) / h;\n body.style.backgroundColor = '#000';\n root.style.overflow = 'hidden';\n root.style.willChange = 'transform';\n root.style.transition = 'transform 200ms linear';\n root.style.transform = `translateY(calc(env(safe-area-inset-top) + ${p / 2}px)) scale(${s})`; // prettier-ignore\n root.style.borderTopRightRadius = '10px';\n root.style.borderTopLeftRadius = '10px';\n\n // Add highlighed overlay to emphasize the modality effect\n const highlight = document.createElement('div');\n highlight.setAttribute('aria-hidden', 'true');\n highlight.id = highlightId;\n highlight.style.position = 'absolute';\n highlight.style.top = '0px';\n highlight.style.left = '0px';\n highlight.style.bottom = '0px';\n highlight.style.right = '0px';\n highlight.style.opacity = '0';\n highlight.style.transition = 'opacity 200ms linear';\n highlight.style.backgroundColor = 'rgba(150, 150, 150, 0.1)';\n\n root.appendChild(highlight);\n requestAnimationFrame(() => (highlight.style.opacity = '1'));\n }\n}\n\nexport function cleanupRootStyles(rootId: string) {\n const body = document.querySelector('body') as HTMLBodyElement;\n const root = document.getElementById(rootId) as HTMLDivElement;\n const highlight = document.getElementById(highlightId) as HTMLDivElement;\n\n function onTransitionEnd() {\n root.style.removeProperty('overflow');\n root.style.removeProperty('will-change');\n root.style.removeProperty('transition');\n body.style.removeProperty('background-color');\n root.removeEventListener('transitionend', onTransitionEnd);\n highlight.parentNode?.removeChild(highlight);\n }\n\n if (root && highlight) {\n // Start animating back\n root.style.removeProperty('border-top-right-radius');\n root.style.removeProperty('border-top-left-radius');\n root.style.removeProperty('transform');\n highlight.style.opacity = '0';\n\n // Remove temp properties after animation is finished\n root.addEventListener('transitionend', onTransitionEnd);\n }\n}\n","import * as React from 'react';\nimport { SheetContextType } from './types';\n\nexport const SheetContext = React.createContext<SheetContextType | undefined>(\n undefined\n);\n\nexport const useSheetContext = () => {\n const context = React.useContext(SheetContext);\n if (!context) throw Error('Sheet context error');\n return context;\n};\n","import * as React from 'react';\n\nimport { SheetEvents } from './types';\nimport { applyRootStyles, cleanupRootStyles } from './utils';\n\nexport const useModalEffect = (isOpen: boolean, rootId?: string) => {\n const prevOpen = usePrevious(isOpen);\n\n // Automatically apply the iOS modal effect to the body when sheet opens/closes\n React.useEffect(() => {\n if (rootId && !prevOpen && isOpen) {\n applyRootStyles(rootId);\n } else if (rootId && !isOpen && prevOpen) {\n cleanupRootStyles(rootId);\n }\n }, [isOpen, prevOpen]); // eslint-disable-line\n\n // Make sure to cleanup modal styles on unmount\n React.useEffect(() => {\n return () => {\n if (rootId && isOpen) cleanupRootStyles(rootId);\n };\n }, [isOpen]); // eslint-disable-line\n};\n\nexport const useEventCallbacks = (\n isOpen: boolean,\n callbacks: React.MutableRefObject<SheetEvents>\n) => {\n const prevOpen = usePrevious(isOpen);\n const didOpen = React.useRef(false);\n\n // Because of AnimatePrecence we don't have access to latest isOpen value\n // so we need to read and write to a ref to determine if we are\n // opening or closing the sheet\n const handleAnimationComplete = React.useCallback(() => {\n if (!didOpen.current) {\n callbacks.current.onOpenEnd?.();\n didOpen.current = true;\n } else {\n callbacks.current.onCloseEnd?.();\n didOpen.current = false;\n }\n }, [isOpen, prevOpen]); // eslint-disable-line\n\n React.useEffect(() => {\n if (!prevOpen && isOpen) {\n callbacks.current.onOpenStart?.();\n } else if (!isOpen && prevOpen) {\n callbacks.current.onCloseStart?.();\n }\n }, [isOpen, prevOpen]); // eslint-disable-line\n\n return { handleAnimationComplete };\n};\n\nconst usePrevious = <T,>(state: T): T | undefined => {\n const ref = React.useRef<T>();\n\n React.useEffect(() => {\n ref.current = state;\n });\n\n return ref.current;\n};\n","import * as CSS from 'csstype';\n\nconst styles: { [key: string]: CSS.Properties } = {\n wrapper: {\n position: 'fixed',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 9999999,\n overflow: 'hidden',\n },\n backdrop: {\n zIndex: 1,\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(51, 51, 51, 0.5)',\n touchAction: 'none', // Disable iOS body scrolling\n },\n container: {\n zIndex: 2,\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: '100%',\n backgroundColor: '#fff',\n borderTopRightRadius: '8px',\n borderTopLeftRadius: '8px',\n boxShadow: '0px -2px 16px rgba(0, 0, 0, 0.3)',\n display: 'flex',\n flexDirection: 'column',\n },\n headerWrapper: {\n width: '100%',\n },\n header: {\n height: '40px',\n width: '100%',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n indicator: {\n width: '18px',\n height: '4px',\n borderRadius: '99px',\n backgroundColor: '#ddd',\n },\n content: {\n flex: 1,\n overflow: 'auto',\n position: 'relative',\n },\n};\n\nexport default styles;\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\n\nimport {\n useSpring,\n useMotionValue,\n AnimatePresence,\n PanInfo,\n} from 'framer-motion';\n\nimport { SheetProps } from './types';\nimport { getClosest, isBrowser } from './utils';\nimport { SheetContext } from './context';\nimport { useModalEffect } from './hooks';\nimport styles from './styles';\n\nconst Sheet = React.forwardRef<any, SheetProps>(\n (\n {\n children,\n isOpen,\n onClose,\n onOpenStart,\n onOpenEnd,\n onCloseStart,\n onCloseEnd,\n onSnap,\n snapPoints,\n initialSnap = 0,\n rootId,\n springConfig = { stiffness: 300, damping: 30, mass: 0.2 },\n disableDrag = false,\n ...rest\n },\n ref\n ) => {\n const [mounted, setMounted] = React.useState(false);\n const [isDragging, setDragging] = React.useState(false);\n const sheetRef = React.useRef<any>(null);\n const callbacks = React.useRef({ onOpenStart, onOpenEnd, onCloseStart, onCloseEnd }); // prettier-ignore\n const indicatorRotation = useMotionValue(0);\n const sheetDragY = useMotionValue(isBrowser ? window.innerHeight : 0);\n const sheetSpringY = useSpring(sheetDragY, springConfig);\n const y = isDragging ? sheetDragY : sheetSpringY;\n const pointerEvents = isOpen ? 'auto' : 'none';\n\n const handleDrag = React.useCallback((_, { delta }: PanInfo) => {\n // Update drag indicator rotation based on drag velocity\n const velocity = sheetDragY.getVelocity();\n if (velocity > 0) indicatorRotation.set(10);\n if (velocity < 0) indicatorRotation.set(-10);\n\n // Make sure user cannot drag beyond the top of the sheet\n sheetDragY.set(Math.max(sheetDragY.get() + delta.y, 0));\n }, []); // eslint-disable-line\n\n const handleDragStart = React.useCallback(() => {\n // Sync the drag value with the spring value so that dragging start at the correct y position\n sheetDragY.set(sheetSpringY.get());\n setDragging(true);\n }, []); // eslint-disable-line\n\n const handleDragEnd = React.useCallback(\n (_, { velocity }: PanInfo) => {\n if (velocity.y > 500) {\n // User flicked the sheet down\n onClose();\n } else {\n const sheetEl = sheetRef.current as HTMLDivElement;\n const contentHeight = sheetEl.getBoundingClientRect().height;\n const snapTo = snapPoints\n ? getClosest(\n snapPoints.map(p => contentHeight - p),\n sheetDragY.get()\n )\n : sheetDragY.get() / contentHeight > 0.6 // Close if dragged over 60%\n ? contentHeight\n : 0;\n\n // Update the spring value so that the sheet is animated to the snap point\n sheetSpringY.set(snapTo);\n\n if (snapPoints && onSnap) {\n const snapValue = Math.abs(Math.round(snapPoints[0] - snapTo));\n const snapIndex = snapPoints.indexOf(snapValue);\n onSnap(snapIndex);\n }\n\n if (snapTo >= contentHeight) onClose();\n\n setDragging(false);\n }\n\n // Reset indicator rotation after dragging\n indicatorRotation.set(0);\n },\n [onClose, onSnap] // eslint-disable-line\n );\n\n // Keep the callback fns up-to-date so that they can be accessed inside\n // the effect without including them to the dependencies array\n React.useEffect(() => {\n callbacks.current = { onOpenStart, onOpenEnd, onCloseStart, onCloseEnd };\n });\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n // Trigger onSnap callback when sheet is opened or closed\n React.useEffect(() => {\n if (!snapPoints || !onSnap || !mounted) return;\n const snapIndex = isOpen ? initialSnap : snapPoints.length - 1;\n onSnap(snapIndex);\n }, [isOpen]);\n\n React.useImperativeHandle(ref, () => ({\n snapTo: (snapIndex: number) => {\n if (snapPoints && snapPoints[snapIndex] !== undefined) {\n const sheetEl = sheetRef.current as HTMLDivElement;\n const contentHeight = sheetEl.getBoundingClientRect().height;\n const snapTo = contentHeight - snapPoints[snapIndex];\n\n sheetSpringY.set(snapTo);\n if (onSnap) onSnap(snapIndex);\n if (snapTo >= contentHeight) onClose();\n }\n },\n }));\n\n useModalEffect(isOpen, rootId);\n\n const dragProps = disableDrag\n ? ({} as any)\n : {\n drag: 'y' as const,\n dragElastic: 0,\n dragConstraints: { top: 0, bottom: 0 },\n dragMomentum: false,\n onDrag: handleDrag,\n onDragStart: handleDragStart,\n onDragEnd: handleDragEnd,\n };\n\n const context = {\n y,\n sheetRef,\n isOpen,\n isDragging,\n initialSnap,\n snapPoints,\n indicatorRotation,\n callbacks,\n dragProps,\n };\n\n const wrapperProps = {\n ...rest,\n ref,\n style: {\n ...styles.wrapper,\n pointerEvents,\n } as any,\n };\n\n return mounted ? (\n ReactDOM.createPortal(\n <SheetContext.Provider value={context}>\n <div {...wrapperProps}>\n <AnimatePresence>\n {/* NOTE: AnimatePresence requires us to set keys to children */}\n {isOpen\n ? React.Children.map(children, (child: any, i) =>\n React.cloneElement(child, { key: `sheet-child-${i}` })\n )\n : null}\n </AnimatePresence>\n </div>\n </SheetContext.Provider>,\n document.body\n )\n ) : (\n // NOTE: return the wrapper div so that SSR frameworks don't get confused\n // with the HTML structure (\"Expected server HTML to contain a matching <div>...\")\n <div {...wrapperProps} />\n );\n }\n);\n\nexport default Sheet;\n","import * as React from 'react';\nimport { motion } from 'framer-motion';\nimport mergeRefs from 'react-merge-refs';\n\nimport { SheetContainerProps } from './types';\nimport { useSheetContext } from './context';\nimport { useEventCallbacks } from './hooks';\nimport styles from './styles';\n\nconst MAX_HEIGHT = 'calc(100% - env(safe-area-inset-top) - 34px)';\n\nconst SheetContainer = React.forwardRef<any, SheetContainerProps>(\n ({ children, style = {}, ...rest }, ref) => {\n const {\n y,\n isOpen,\n callbacks,\n snapPoints,\n initialSnap = 0,\n sheetRef,\n } = useSheetContext();\n\n const { handleAnimationComplete } = useEventCallbacks(isOpen, callbacks);\n const initialY = snapPoints ? snapPoints[0] - snapPoints[initialSnap] : 0;\n const h = snapPoints ? snapPoints[0] : null;\n const sheetHeight = h ? `min(${h}px, ${MAX_HEIGHT})` : MAX_HEIGHT;\n\n return (\n <motion.div\n {...rest}\n ref={mergeRefs([sheetRef, ref])}\n className=\"react-modal-sheet-container\"\n style={{ ...styles.container, height: sheetHeight, ...style, y }}\n initial={{ y: window.innerHeight }}\n animate={{ y: initialY, transition: { type: 'tween' } }}\n exit={{ y: window.innerHeight }}\n onAnimationComplete={handleAnimationComplete}\n >\n {children}\n </motion.div>\n );\n }\n);\n\nexport default SheetContainer;\n","import * as React from 'react';\nimport { motion } from 'framer-motion';\n\nimport { SheetDraggableProps } from './types';\nimport styles from './styles';\nimport { useSheetContext } from './context';\n\nconst SheetContent = React.forwardRef<any, SheetDraggableProps>(\n ({ children, disableDrag = false, style = {}, ...rest }, ref) => {\n const { dragProps } = useSheetContext();\n\n return (\n <motion.div\n {...rest}\n ref={ref}\n className=\"react-modal-sheet-content\"\n style={{ ...styles.content, ...style }}\n {...(disableDrag ? {} : dragProps)}\n >\n {children}\n </motion.div>\n );\n }\n);\n\nexport default SheetContent;\n","import * as React from 'react';\nimport { motion, useTransform } from 'framer-motion';\n\nimport { SheetDraggableProps } from './types';\nimport { useSheetContext } from './context';\nimport styles from './styles';\n\nconst SheetHeader = React.forwardRef<any, SheetDraggableProps>(\n ({ children, disableDrag = false, style = {}, ...rest }, ref) => {\n const { indicatorRotation, dragProps } = useSheetContext();\n\n const indicator1Transform = useTransform(\n indicatorRotation,\n r => `translateX(2px) rotate(${r}deg)`\n );\n\n const indicator2Transform = useTransform(\n indicatorRotation,\n r => `translateX(-2px) rotate(${-1 * r}deg)`\n );\n\n return (\n <motion.div\n {...rest}\n ref={ref}\n style={{ ...styles.headerWrapper, ...style }}\n {...(disableDrag ? {} : dragProps)}\n >\n {children || (\n <div className=\"react-modal-sheet-header\" style={styles.header}>\n <motion.span\n className=\"react-modal-sheet-drag-indicator\"\n style={{ ...styles.indicator, transform: indicator1Transform }}\n />\n <motion.span\n className=\"react-modal-sheet-drag-indicator\"\n style={{ ...styles.indicator, transform: indicator2Transform }}\n />\n </div>\n )}\n </motion.div>\n );\n }\n);\n\nexport default SheetHeader;\n","import * as React from 'react';\nimport { motion } from 'framer-motion';\n\nimport { SheetBackdropProps } from './types';\nimport styles from './styles';\n\nconst isClickable = (props: any) => !!props.onClick || !!props.onTap;\n\nconst SheetBackdrop = React.forwardRef<any, SheetBackdropProps>(\n ({ style = {}, ...rest }, ref) => {\n const Comp = isClickable(rest) ? motion.button : motion.div;\n\n return (\n <Comp\n {...rest}\n ref={ref}\n className=\"react-modal-sheet-backdrop\"\n style={{ ...styles.backdrop, ...style }}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n />\n );\n }\n);\n\nexport default SheetBackdrop;\n","import Sheet from './sheet';\nimport SheetContainer from './SheetContainer';\nimport SheetContent from './SheetContent';\nimport SheetHeader from './SheetHeader';\nimport SheetBackdrop from './SheetBackdrop';\n\nexport type SheetRef = {\n snapTo: (index: number) => void;\n};\n\ntype SheetCompoundComponent = {\n Container: typeof SheetContainer;\n Header: typeof SheetHeader;\n Content: typeof SheetContent;\n Backdrop: typeof SheetBackdrop;\n};\n\n// HACK: this is needed to get the typing to work properly...\nconst _Sheet: any = Sheet;\n_Sheet.Container = SheetContainer;\n_Sheet.Header = SheetHeader;\n_Sheet.Content = SheetContent;\n_Sheet.Backdrop = SheetBackdrop;\n\nconst SheetCompound: typeof Sheet & SheetCompoundComponent = _Sheet;\n\nexport default SheetCompound;\n"],"names":["isBrowser","window","getClosest","nums","goal","reduce","prev","curr","Math","abs","highlightId","applyRootStyles","rootId","body","document","querySelector","root","p","h","innerHeight","s","style","backgroundColor","overflow","willChange","transition","transform","borderTopRightRadius","borderTopLeftRadius","highlight","createElement","setAttribute","id","position","top","left","bottom","right","opacity","appendChild","requestAnimationFrame","cleanupRootStyles","getElementById","onTransitionEnd","removeProperty","removeEventListener","parentNode","removeChild","addEventListener","SheetContext","React","undefined","useSheetContext","context","Error","useModalEffect","isOpen","prevOpen","usePrevious","useEventCallbacks","callbacks","didOpen","handleAnimationComplete","current","onOpenEnd","onCloseEnd","onOpenStart","onCloseStart","state","ref","styles","wrapper","zIndex","backdrop","width","height","touchAction","container","boxShadow","display","flexDirection","headerWrapper","header","alignItems","justifyContent","indicator","borderRadius","content","flex","Sheet","children","onClose","onSnap","snapPoints","initialSnap","springConfig","stiffness","damping","mass","disableDrag","rest","mounted","setMounted","isDragging","setDragging","sheetRef","indicatorRotation","useMotionValue","sheetDragY","sheetSpringY","useSpring","y","pointerEvents","handleDrag","_","delta","velocity","getVelocity","set","max","get","handleDragStart","handleDragEnd","sheetEl","contentHeight","getBoundingClientRect","snapTo","map","snapValue","round","snapIndex","indexOf","length","dragProps","drag","dragElastic","dragConstraints","dragMomentum","onDrag","onDragStart","onDragEnd","wrapperProps","ReactDOM","Provider","value","AnimatePresence","child","i","key","MAX_HEIGHT","SheetContainer","initialY","sheetHeight","motion","div","mergeRefs","className","initial","animate","type","exit","onAnimationComplete","SheetContent","SheetHeader","indicator1Transform","useTransform","r","indicator2Transform","span","isClickable","props","onClick","onTap","SheetBackdrop","Comp","button","_Sheet","Container","Header","Content","Backdrop","SheetCompound"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"react-modal-sheet.cjs.development.js","sources":["../src/utils.ts","../src/context.tsx","../src/hooks.tsx","../src/styles.ts","../src/sheet.tsx","../src/SheetContainer.tsx","../src/SheetContent.tsx","../src/SheetHeader.tsx","../src/SheetBackdrop.tsx","../src/index.tsx"],"sourcesContent":["import { useEffect, useLayoutEffect, useState } from 'react';\n\nexport const isSSR = typeof window === 'undefined';\n\nexport const getClosest = (nums: number[], goal: number) => {\n return nums.reduce((prev, curr) => {\n return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;\n });\n};\n\nconst highlightId = 'react-modal-sheet-highlight';\n\nexport function applyRootStyles(rootId: string) {\n const body = document.querySelector('body') as HTMLBodyElement;\n const root = document.querySelector(`#${rootId}`) as HTMLDivElement;\n\n if (root) {\n const p = 24;\n const h = window.innerHeight;\n const s = (h - p) / h;\n body.style.backgroundColor = '#000';\n root.style.overflow = 'hidden';\n root.style.willChange = 'transform';\n root.style.transition = 'transform 200ms linear';\n root.style.transform = `translateY(calc(env(safe-area-inset-top) + ${p / 2}px)) scale(${s})`; // prettier-ignore\n root.style.borderTopRightRadius = '10px';\n root.style.borderTopLeftRadius = '10px';\n\n // Add highlighed overlay to emphasize the modality effect\n const highlight = document.createElement('div');\n highlight.setAttribute('aria-hidden', 'true');\n highlight.id = highlightId;\n highlight.style.position = 'absolute';\n highlight.style.top = '0px';\n highlight.style.left = '0px';\n highlight.style.bottom = '0px';\n highlight.style.right = '0px';\n highlight.style.opacity = '0';\n highlight.style.transition = 'opacity 200ms linear';\n highlight.style.backgroundColor = 'rgba(150, 150, 150, 0.1)';\n\n root.appendChild(highlight);\n requestAnimationFrame(() => (highlight.style.opacity = '1'));\n }\n}\n\nexport function cleanupRootStyles(rootId: string) {\n const body = document.querySelector('body') as HTMLBodyElement;\n const root = document.getElementById(rootId) as HTMLDivElement;\n const highlight = document.getElementById(highlightId) as HTMLDivElement;\n\n function onTransitionEnd() {\n root.style.removeProperty('overflow');\n root.style.removeProperty('will-change');\n root.style.removeProperty('transition');\n body.style.removeProperty('background-color');\n root.removeEventListener('transitionend', onTransitionEnd);\n highlight.parentNode?.removeChild(highlight);\n }\n\n if (root && highlight) {\n // Start animating back\n root.style.removeProperty('border-top-right-radius');\n root.style.removeProperty('border-top-left-radius');\n root.style.removeProperty('transform');\n highlight.style.opacity = '0';\n\n // Remove temp properties after animation is finished\n root.addEventListener('transitionend', onTransitionEnd);\n }\n}\n\nconst useIsomorphicLayoutEffect = isSSR ? useEffect : useLayoutEffect;\n\nexport function useWindowHeight() {\n const [windowHeight, setWindowHeight] = useState(0);\n\n useIsomorphicLayoutEffect(() => {\n const updateHeight = () => setWindowHeight(window.innerHeight);\n window.addEventListener('resize', updateHeight);\n updateHeight();\n return () => window.removeEventListener('resize', updateHeight);\n }, []);\n\n return windowHeight;\n}\n\nexport const inDescendingOrder = (arr: number[]) => {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i + 1] > arr[i]) return false;\n }\n\n return true;\n};\n","import * as React from 'react';\nimport { SheetContextType } from './types';\n\nexport const SheetContext = React.createContext<SheetContextType | undefined>(\n undefined\n);\n\nexport const useSheetContext = () => {\n const context = React.useContext(SheetContext);\n if (!context) throw Error('Sheet context error');\n return context;\n};\n","import * as React from 'react';\n\nimport { SheetEvents } from './types';\nimport { applyRootStyles, cleanupRootStyles } from './utils';\n\nexport const useModalEffect = (isOpen: boolean, rootId?: string) => {\n const prevOpen = usePrevious(isOpen);\n\n // Automatically apply the iOS modal effect to the body when sheet opens/closes\n React.useEffect(() => {\n if (rootId && !prevOpen && isOpen) {\n applyRootStyles(rootId);\n } else if (rootId && !isOpen && prevOpen) {\n cleanupRootStyles(rootId);\n }\n }, [isOpen, prevOpen]); // eslint-disable-line\n\n // Make sure to cleanup modal styles on unmount\n React.useEffect(() => {\n return () => {\n if (rootId && isOpen) cleanupRootStyles(rootId);\n };\n }, [isOpen]); // eslint-disable-line\n};\n\nexport const useEventCallbacks = (\n isOpen: boolean,\n callbacks: React.MutableRefObject<SheetEvents>\n) => {\n const prevOpen = usePrevious(isOpen);\n const didOpen = React.useRef(false);\n\n // Because of AnimatePrecence we don't have access to latest isOpen value\n // so we need to read and write to a ref to determine if we are\n // opening or closing the sheet\n const handleAnimationComplete = React.useCallback(() => {\n if (!didOpen.current) {\n callbacks.current.onOpenEnd?.();\n didOpen.current = true;\n } else {\n callbacks.current.onCloseEnd?.();\n didOpen.current = false;\n }\n }, [isOpen, prevOpen]); // eslint-disable-line\n\n React.useEffect(() => {\n if (!prevOpen && isOpen) {\n callbacks.current.onOpenStart?.();\n } else if (!isOpen && prevOpen) {\n callbacks.current.onCloseStart?.();\n }\n }, [isOpen, prevOpen]); // eslint-disable-line\n\n return { handleAnimationComplete };\n};\n\nconst usePrevious = <T,>(state: T): T | undefined => {\n const ref = React.useRef<T>();\n\n React.useEffect(() => {\n ref.current = state;\n });\n\n return ref.current;\n};\n","import * as CSS from 'csstype';\n\nconst styles: { [key: string]: CSS.Properties } = {\n wrapper: {\n position: 'fixed',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 9999999,\n overflow: 'hidden',\n pointerEvents: 'none',\n },\n backdrop: {\n zIndex: 1,\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(51, 51, 51, 0.5)',\n touchAction: 'none', // Disable iOS body scrolling\n },\n container: {\n zIndex: 2,\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: '100%',\n backgroundColor: '#fff',\n borderTopRightRadius: '8px',\n borderTopLeftRadius: '8px',\n boxShadow: '0px -2px 16px rgba(0, 0, 0, 0.3)',\n display: 'flex',\n flexDirection: 'column',\n pointerEvents: 'auto',\n },\n headerWrapper: {\n width: '100%',\n },\n header: {\n height: '40px',\n width: '100%',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n indicator: {\n width: '18px',\n height: '4px',\n borderRadius: '99px',\n backgroundColor: '#ddd',\n },\n content: {\n flex: 1,\n overflow: 'auto',\n position: 'relative',\n },\n};\n\nexport default styles;\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\n\nimport {\n animate,\n useMotionValue,\n PanInfo,\n AnimatePresence,\n} from 'framer-motion';\n\nimport { SheetContextType, SheetProps } from './types';\nimport { getClosest, inDescendingOrder, isSSR, useWindowHeight } from './utils';\nimport { SheetContext } from './context';\nimport { useModalEffect } from './hooks';\nimport styles from './styles';\n\nconst Sheet = React.forwardRef<any, SheetProps>(\n (\n {\n children,\n isOpen,\n onClose,\n onOpenStart,\n onOpenEnd,\n onCloseStart,\n onCloseEnd,\n onSnap,\n snapPoints,\n initialSnap = 0,\n rootId,\n springConfig = { stiffness: 300, damping: 30, mass: 0.2 },\n disableDrag = false,\n ...rest\n },\n ref\n ) => {\n const sheetRef = React.useRef<any>(null);\n const callbacks = React.useRef({ onOpenStart, onOpenEnd, onCloseStart, onCloseEnd }); // prettier-ignore\n const indicatorRotation = useMotionValue(0);\n const windowHeight = useWindowHeight();\n const y = useMotionValue(isOpen ? windowHeight : 0);\n\n if (snapPoints) {\n // Convert negative / percentage snap points to absolute values\n snapPoints = snapPoints.map(point => {\n if (point > 0 && point <= 1) return point * windowHeight; // percentage values e.g. between 0.0 and 1.0\n return point < 0 ? windowHeight + point : point; // negative values\n });\n\n console.assert(\n inDescendingOrder(snapPoints) || windowHeight === 0,\n `Snap points need to be in descending order got: [${snapPoints}]`\n );\n }\n\n const handleDrag = React.useCallback((_, { delta }: PanInfo) => {\n // Update drag indicator rotation based on drag velocity\n const velocity = y.getVelocity();\n if (velocity > 0) indicatorRotation.set(10);\n if (velocity < 0) indicatorRotation.set(-10);\n\n // Make sure user cannot drag beyond the top of the sheet\n y.set(Math.max(y.get() + delta.y, 0));\n }, []); // eslint-disable-line\n\n const handleDragEnd = React.useCallback(\n (_, { velocity }: PanInfo) => {\n if (velocity.y > 500) {\n // User flicked the sheet down\n onClose();\n } else {\n const sheetEl = sheetRef.current as HTMLDivElement;\n const contentHeight = sheetEl.getBoundingClientRect().height;\n const snapTo = snapPoints\n ? getClosest(snapPoints.map(p => contentHeight - p), y.get()) // prettier-ignore\n : y.get() / contentHeight > 0.6 // Close if dragged over 60%\n ? contentHeight\n : 0;\n\n // Update the spring value so that the sheet is animated to the snap point\n animate(y, snapTo, { type: 'spring', ...springConfig });\n\n if (snapPoints && onSnap) {\n const snapValue = Math.abs(Math.round(snapPoints[0] - snapTo));\n const snapIndex = snapPoints.indexOf(snapValue);\n onSnap(snapIndex);\n }\n\n if (snapTo >= contentHeight) onClose();\n }\n\n // Reset indicator rotation after dragging\n indicatorRotation.set(0);\n },\n [onClose, onSnap] // eslint-disable-line\n );\n\n // Keep the callback fns up-to-date so that they can be accessed inside\n // the effect without including them to the dependencies array\n React.useEffect(() => {\n callbacks.current = { onOpenStart, onOpenEnd, onCloseStart, onCloseEnd };\n });\n\n // Trigger onSnap callback when sheet is opened or closed\n React.useEffect(() => {\n if (!snapPoints || !onSnap) return;\n const snapIndex = isOpen ? initialSnap : snapPoints.length - 1;\n onSnap(snapIndex);\n }, [isOpen]); // eslint-disable-line\n\n React.useImperativeHandle(ref, () => ({\n snapTo: (snapIndex: number) => {\n if (snapPoints && snapPoints[snapIndex] !== undefined) {\n const sheetEl = sheetRef.current as HTMLDivElement;\n const contentHeight = sheetEl.getBoundingClientRect().height;\n const snapTo = contentHeight - snapPoints[snapIndex];\n\n animate(y, snapTo, { type: 'spring', ...springConfig });\n if (onSnap) onSnap(snapIndex);\n if (snapTo >= contentHeight) onClose();\n }\n },\n }));\n\n useModalEffect(isOpen, rootId);\n\n const dragProps = disableDrag\n ? ({} as any)\n : {\n drag: 'y' as const,\n dragElastic: 0,\n dragConstraints: { top: 0, bottom: 0 },\n dragMomentum: false,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n };\n\n const context: SheetContextType = {\n y,\n sheetRef,\n isOpen,\n initialSnap,\n snapPoints,\n indicatorRotation,\n callbacks,\n dragProps,\n windowHeight,\n springConfig,\n };\n\n const wrapperProps = {\n ...rest,\n ref,\n style: styles.wrapper,\n };\n\n const sheet = (\n <SheetContext.Provider value={context}>\n <div {...wrapperProps}>\n <AnimatePresence>\n {/* NOTE: AnimatePresence requires us to set keys to children */}\n {isOpen\n ? React.Children.map(children, (child: any, i) =>\n React.cloneElement(child, { key: `sheet-child-${i}` })\n )\n : null}\n </AnimatePresence>\n </div>\n </SheetContext.Provider>\n );\n\n if (isSSR) return sheet;\n\n return ReactDOM.createPortal(sheet, document.body);\n }\n);\n\nexport default Sheet;\n","import * as React from 'react';\nimport { motion } from 'framer-motion';\nimport mergeRefs from 'react-merge-refs';\n\nimport { SheetContainerProps } from './types';\nimport { useSheetContext } from './context';\nimport { useEventCallbacks } from './hooks';\nimport styles from './styles';\n\nconst MAX_HEIGHT = 'calc(100% - env(safe-area-inset-top) - 34px)';\n\nconst SheetContainer = React.forwardRef<any, SheetContainerProps>(\n ({ children, style = {}, ...rest }, ref) => {\n const {\n y,\n isOpen,\n callbacks,\n snapPoints,\n initialSnap = 0,\n sheetRef,\n windowHeight,\n springConfig,\n } = useSheetContext();\n\n const { handleAnimationComplete } = useEventCallbacks(isOpen, callbacks);\n const initialY = snapPoints ? snapPoints[0] - snapPoints[initialSnap] : 0;\n const h = snapPoints ? snapPoints[0] : null;\n const sheetHeight = h ? `min(${h}px, ${MAX_HEIGHT})` : MAX_HEIGHT;\n\n return (\n <motion.div\n {...rest}\n ref={mergeRefs([sheetRef, ref])}\n className=\"react-modal-sheet-container\"\n style={{ ...styles.container, height: sheetHeight, ...style, y }}\n initial={{ y: windowHeight }}\n animate={{\n y: initialY,\n transition: { type: 'spring', ...springConfig },\n }}\n exit={{ y: windowHeight }}\n onAnimationComplete={handleAnimationComplete}\n >\n {children}\n </motion.div>\n );\n }\n);\n\nexport default SheetContainer;\n","import * as React from 'react';\nimport { motion } from 'framer-motion';\n\nimport { SheetDraggableProps } from './types';\nimport styles from './styles';\nimport { useSheetContext } from './context';\n\nconst SheetContent = React.forwardRef<any, SheetDraggableProps>(\n ({ children, disableDrag = false, style = {}, ...rest }, ref) => {\n const { dragProps } = useSheetContext();\n\n return (\n <motion.div\n {...rest}\n ref={ref}\n className=\"react-modal-sheet-content\"\n style={{ ...styles.content, ...style }}\n {...(disableDrag ? {} : dragProps)}\n >\n {children}\n </motion.div>\n );\n }\n);\n\nexport default SheetContent;\n","import * as React from 'react';\nimport { motion, useTransform } from 'framer-motion';\n\nimport { SheetDraggableProps } from './types';\nimport { useSheetContext } from './context';\nimport styles from './styles';\n\nconst SheetHeader = React.forwardRef<any, SheetDraggableProps>(\n ({ children, disableDrag = false, style = {}, ...rest }, ref) => {\n const { indicatorRotation, dragProps } = useSheetContext();\n\n const indicator1Transform = useTransform(\n indicatorRotation,\n r => `translateX(2px) rotate(${r}deg)`\n );\n\n const indicator2Transform = useTransform(\n indicatorRotation,\n r => `translateX(-2px) rotate(${-1 * r}deg)`\n );\n\n return (\n <motion.div\n {...rest}\n ref={ref}\n style={{ ...styles.headerWrapper, ...style }}\n {...(disableDrag ? {} : dragProps)}\n >\n {children || (\n <div className=\"react-modal-sheet-header\" style={styles.header}>\n <motion.span\n className=\"react-modal-sheet-drag-indicator\"\n style={{ ...styles.indicator, transform: indicator1Transform }}\n />\n <motion.span\n className=\"react-modal-sheet-drag-indicator\"\n style={{ ...styles.indicator, transform: indicator2Transform }}\n />\n </div>\n )}\n </motion.div>\n );\n }\n);\n\nexport default SheetHeader;\n","import * as React from 'react';\nimport { motion } from 'framer-motion';\n\nimport { SheetBackdropProps } from './types';\nimport styles from './styles';\n\nconst isClickable = (props: any) => !!props.onClick || !!props.onTap;\n\nconst SheetBackdrop = React.forwardRef<any, SheetBackdropProps>(\n ({ style = {}, ...rest }, ref) => {\n const Comp = isClickable(rest) ? motion.button : motion.div;\n const pointerEvents = isClickable(rest) ? 'auto' : 'none';\n\n return (\n <Comp\n {...rest}\n ref={ref}\n className=\"react-modal-sheet-backdrop\"\n style={{ ...styles.backdrop, ...style, pointerEvents }}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n />\n );\n }\n);\n\nexport default SheetBackdrop;\n","import Sheet from './sheet';\nimport SheetContainer from './SheetContainer';\nimport SheetContent from './SheetContent';\nimport SheetHeader from './SheetHeader';\nimport SheetBackdrop from './SheetBackdrop';\n\nexport type SheetRef = {\n snapTo: (index: number) => void;\n};\n\ntype SheetCompoundComponent = {\n Container: typeof SheetContainer;\n Header: typeof SheetHeader;\n Content: typeof SheetContent;\n Backdrop: typeof SheetBackdrop;\n};\n\n// HACK: this is needed to get the typing to work properly...\nconst _Sheet: any = Sheet;\n_Sheet.Container = SheetContainer;\n_Sheet.Header = SheetHeader;\n_Sheet.Content = SheetContent;\n_Sheet.Backdrop = SheetBackdrop;\n\nconst SheetCompound: typeof Sheet & SheetCompoundComponent = _Sheet;\n\nexport default SheetCompound;\n"],"names":["isSSR","window","getClosest","nums","goal","reduce","prev","curr","Math","abs","highlightId","applyRootStyles","rootId","body","document","querySelector","root","p","h","innerHeight","s","style","backgroundColor","overflow","willChange","transition","transform","borderTopRightRadius","borderTopLeftRadius","highlight","createElement","setAttribute","id","position","top","left","bottom","right","opacity","appendChild","requestAnimationFrame","cleanupRootStyles","getElementById","onTransitionEnd","removeProperty","removeEventListener","parentNode","removeChild","addEventListener","useIsomorphicLayoutEffect","useEffect","useLayoutEffect","useWindowHeight","useState","windowHeight","setWindowHeight","updateHeight","inDescendingOrder","arr","i","length","SheetContext","React","undefined","useSheetContext","context","Error","useModalEffect","isOpen","prevOpen","usePrevious","useEventCallbacks","callbacks","didOpen","handleAnimationComplete","current","onOpenEnd","onCloseEnd","onOpenStart","onCloseStart","state","ref","styles","wrapper","zIndex","pointerEvents","backdrop","width","height","touchAction","container","boxShadow","display","flexDirection","headerWrapper","header","alignItems","justifyContent","indicator","borderRadius","content","flex","Sheet","children","onClose","onSnap","snapPoints","initialSnap","springConfig","stiffness","damping","mass","disableDrag","rest","sheetRef","indicatorRotation","useMotionValue","y","map","point","console","assert","handleDrag","_","delta","velocity","getVelocity","set","max","get","handleDragEnd","sheetEl","contentHeight","getBoundingClientRect","snapTo","animate","type","snapValue","round","snapIndex","indexOf","dragProps","drag","dragElastic","dragConstraints","dragMomentum","onDrag","onDragEnd","wrapperProps","sheet","Provider","value","AnimatePresence","child","key","ReactDOM","MAX_HEIGHT","SheetContainer","initialY","sheetHeight","motion","div","mergeRefs","className","initial","exit","onAnimationComplete","SheetContent","SheetHeader","indicator1Transform","useTransform","r","indicator2Transform","span","isClickable","props","onClick","onTap","SheetBackdrop","Comp","button","_Sheet","Container","Header","Content","Backdrop","SheetCompound"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("react"),n=require("react-dom"),r=require("framer-motion"),o=(e=require("react-merge-refs"))&&"object"==typeof e&&"default"in e?e.default:e;function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function i(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var s="undefined"
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("react"),n=require("react-dom"),r=require("framer-motion"),o=(e=require("react-merge-refs"))&&"object"==typeof e&&"default"in e?e.default:e;function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function i(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var s="undefined"==typeof window;function l(e){var t=document.querySelector("body"),n=document.getElementById(e),r=document.getElementById("react-modal-sheet-highlight");n&&r&&(n.style.removeProperty("border-top-right-radius"),n.style.removeProperty("border-top-left-radius"),n.style.removeProperty("transform"),r.style.opacity="0",n.addEventListener("transitionend",(function e(){var o;n.style.removeProperty("overflow"),n.style.removeProperty("will-change"),n.style.removeProperty("transition"),t.style.removeProperty("background-color"),n.removeEventListener("transitionend",e),null==(o=r.parentNode)||o.removeChild(r)})))}var c=s?t.useEffect:t.useLayoutEffect,d=t.createContext(void 0),u=function(){var e=t.useContext(d);if(!e)throw Error("Sheet context error");return e},f=function(e){var n=t.useRef();return t.useEffect((function(){n.current=e})),n.current},p={wrapper:{position:"fixed",top:0,bottom:0,left:0,right:0,zIndex:9999999,overflow:"hidden",pointerEvents:"none"},backdrop:{zIndex:1,position:"fixed",top:0,left:0,width:"100%",height:"100%",backgroundColor:"rgba(51, 51, 51, 0.5)",touchAction:"none"},container:{zIndex:2,position:"absolute",left:0,bottom:0,width:"100%",backgroundColor:"#fff",borderTopRightRadius:"8px",borderTopLeftRadius:"8px",boxShadow:"0px -2px 16px rgba(0, 0, 0, 0.3)",display:"flex",flexDirection:"column",pointerEvents:"auto"},headerWrapper:{width:"100%"},header:{height:"40px",width:"100%",position:"relative",display:"flex",alignItems:"center",justifyContent:"center"},indicator:{width:"18px",height:"4px",borderRadius:"99px",backgroundColor:"#ddd"},content:{flex:1,overflow:"auto",position:"relative"}},m=t.forwardRef((function(e,o){var u=e.children,m=e.isOpen,y=e.onClose,g=e.onOpenStart,h=e.onOpenEnd,v=e.onCloseStart,b=e.onCloseEnd,E=e.onSnap,C=e.snapPoints,x=e.initialSnap,w=void 0===x?0:x,O=e.rootId,S=e.springConfig,R=void 0===S?{stiffness:300,damping:30,mass:.2}:S,P=e.disableDrag,k=void 0!==P&&P,j=i(e,["children","isOpen","onClose","onOpenStart","onOpenEnd","onCloseStart","onCloseEnd","onSnap","snapPoints","initialSnap","rootId","springConfig","disableDrag"]),D=t.useRef(null),I=t.useRef({onOpenStart:g,onOpenEnd:h,onCloseStart:v,onCloseEnd:b}),M=r.useMotionValue(0),q=function(){var e=t.useState(0),n=e[0],r=e[1];return c((function(){var e=function(){return r(window.innerHeight)};return window.addEventListener("resize",e),e(),function(){return window.removeEventListener("resize",e)}}),[]),n}(),T=r.useMotionValue(m?q:0);C&&(C=C.map((function(e){return e>0&&e<=1?e*q:e<0?q+e:e})),console.assert(function(e){for(var t=0;t<e.length;t++)if(e[t+1]>e[t])return!1;return!0}(C)||0===q,"Snap points need to be in descending order got: ["+C+"]"));var A=t.useCallback((function(e,t){var n=t.delta,r=T.getVelocity();r>0&&M.set(10),r<0&&M.set(-10),T.set(Math.max(T.get()+n.y,0))}),[]),L=t.useCallback((function(e,t){var n,o;if(t.velocity.y>500)y();else{var i=D.current.getBoundingClientRect().height,s=C?(n=C.map((function(e){return i-e})),o=T.get(),n.reduce((function(e,t){return Math.abs(t-o)<Math.abs(e-o)?t:e}))):T.get()/i>.6?i:0;if(r.animate(T,s,a({type:"spring"},R)),C&&E){var l=Math.abs(Math.round(C[0]-s)),c=C.indexOf(l);E(c)}s>=i&&y()}M.set(0)}),[y,E]);t.useEffect((function(){I.current={onOpenStart:g,onOpenEnd:h,onCloseStart:v,onCloseEnd:b}})),t.useEffect((function(){C&&E&&E(m?w:C.length-1)}),[m]),t.useImperativeHandle(o,(function(){return{snapTo:function(e){if(C&&void 0!==C[e]){var t=D.current.getBoundingClientRect().height,n=t-C[e];r.animate(T,n,a({type:"spring"},R)),E&&E(e),n>=t&&y()}}}})),function(e,n){var r=f(e);t.useEffect((function(){n&&!r&&e?function(e){var t=document.querySelector("body"),n=document.querySelector("#"+e);if(n){var r=window.innerHeight,o=(r-24)/r;t.style.backgroundColor="#000",n.style.overflow="hidden",n.style.willChange="transform",n.style.transition="transform 200ms linear",n.style.transform="translateY(calc(env(safe-area-inset-top) + 12px)) scale("+o+")",n.style.borderTopRightRadius="10px",n.style.borderTopLeftRadius="10px";var a=document.createElement("div");a.setAttribute("aria-hidden","true"),a.id="react-modal-sheet-highlight",a.style.position="absolute",a.style.top="0px",a.style.left="0px",a.style.bottom="0px",a.style.right="0px",a.style.opacity="0",a.style.transition="opacity 200ms linear",a.style.backgroundColor="rgba(150, 150, 150, 0.1)",n.appendChild(a),requestAnimationFrame((function(){return a.style.opacity="1"}))}}(n):n&&!e&&r&&l(n)}),[e,r]),t.useEffect((function(){return function(){n&&e&&l(n)}}),[e])}(m,O);var N={y:T,sheetRef:D,isOpen:m,initialSnap:w,snapPoints:C,indicatorRotation:M,callbacks:I,dragProps:k?{}:{drag:"y",dragElastic:0,dragConstraints:{top:0,bottom:0},dragMomentum:!1,onDrag:A,onDragEnd:L},windowHeight:q,springConfig:R},H=a({},j,{ref:o,style:p.wrapper}),z=t.createElement(d.Provider,{value:N},t.createElement("div",Object.assign({},H),t.createElement(r.AnimatePresence,null,m?t.Children.map(u,(function(e,n){return t.cloneElement(e,{key:"sheet-child-"+n})})):null)));return s?z:n.createPortal(z,document.body)})),y="calc(100% - env(safe-area-inset-top) - 34px)",g=t.forwardRef((function(e,n){var s=e.children,l=e.style,c=void 0===l?{}:l,d=i(e,["children","style"]),m=u(),g=m.y,h=m.snapPoints,v=m.initialSnap,b=void 0===v?0:v,E=m.sheetRef,C=m.windowHeight,x=m.springConfig,w=function(e,n){var r=f(e),o=t.useRef(!1),a=t.useCallback((function(){o.current?(null==n.current.onCloseEnd||n.current.onCloseEnd(),o.current=!1):(null==n.current.onOpenEnd||n.current.onOpenEnd(),o.current=!0)}),[e,r]);return t.useEffect((function(){!r&&e?null==n.current.onOpenStart||n.current.onOpenStart():!e&&r&&(null==n.current.onCloseStart||n.current.onCloseStart())}),[e,r]),{handleAnimationComplete:a}}(m.isOpen,m.callbacks).handleAnimationComplete,O=h?h[0]-h[b]:0,S=h?h[0]:null,R=S?"min("+S+"px, "+y+")":y;return t.createElement(r.motion.div,Object.assign({},d,{ref:o([E,n]),className:"react-modal-sheet-container",style:a({},p.container,{height:R},c,{y:g}),initial:{y:C},animate:{y:O,transition:a({type:"spring"},x)},exit:{y:C},onAnimationComplete:w}),s)})),h=t.forwardRef((function(e,n){var o=e.children,s=e.disableDrag,l=void 0!==s&&s,c=e.style,d=void 0===c?{}:c,f=i(e,["children","disableDrag","style"]),m=u().dragProps;return t.createElement(r.motion.div,Object.assign({},f,{ref:n,className:"react-modal-sheet-content",style:a({},p.content,d)},l?{}:m),o)})),v=t.forwardRef((function(e,n){var o=e.children,s=e.disableDrag,l=void 0!==s&&s,c=e.style,d=void 0===c?{}:c,f=i(e,["children","disableDrag","style"]),m=u(),y=m.indicatorRotation,g=m.dragProps,h=r.useTransform(y,(function(e){return"translateX(2px) rotate("+e+"deg)"})),v=r.useTransform(y,(function(e){return"translateX(-2px) rotate("+-1*e+"deg)"}));return t.createElement(r.motion.div,Object.assign({},f,{ref:n,style:a({},p.headerWrapper,d)},l?{}:g),o||t.createElement("div",{className:"react-modal-sheet-header",style:p.header},t.createElement(r.motion.span,{className:"react-modal-sheet-drag-indicator",style:a({},p.indicator,{transform:h})}),t.createElement(r.motion.span,{className:"react-modal-sheet-drag-indicator",style:a({},p.indicator,{transform:v})})))})),b=function(e){return!!e.onClick||!!e.onTap},E=t.forwardRef((function(e,n){var o=e.style,s=void 0===o?{}:o,l=i(e,["style"]),c=b(l)?r.motion.button:r.motion.div,d=b(l)?"auto":"none";return t.createElement(c,Object.assign({},l,{ref:n,className:"react-modal-sheet-backdrop",style:a({},p.backdrop,s,{pointerEvents:d}),initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}}))})),C=m;C.Container=g,C.Header=v,C.Content=h,C.Backdrop=E,exports.default=C;
|
|
2
2
|
//# sourceMappingURL=react-modal-sheet.cjs.production.min.js.map
|