react-modal-sheet 1.3.2 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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. `[600, 400, 0]` - the distance from the bottom of the screen in px. (TODO: support % values) |
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
 
@@ -99,7 +99,7 @@ Spring animation happens when the sheet is opened/closed or when it snaps to a s
99
99
  }
100
100
  ```
101
101
 
102
- ## Methods
102
+ ## Methods and properties
103
103
 
104
104
  ### `snapTo(index)`
105
105
 
@@ -142,6 +142,51 @@ function Example() {
142
142
  }
143
143
  ```
144
144
 
145
+ ### Motion value `y`
146
+
147
+ The `y` value is an internal `MotionValue` that represents the distance to the top most position of the sheet when it is fully open. So for example the `y` value is zero when the sheet is completely open.
148
+
149
+ Similarly to the `snapTo` method the `y` value can be accessed via a ref.
150
+
151
+ The `y` value can be useful for certain situtation eg. when you want to combine snap points with scrollable sheet content and ensure that the content stays properly scrollable in any snap point. Below you can see a simplified example of this situation and for a more detailed example take a look at the [ScrollableSnapPoints](example/components/ScrollableSnapPoints.tsx) component in the example app.
152
+
153
+ ```tsx
154
+ import React from 'react';
155
+ import Sheet, { SheetRef } from 'react-modal-sheet';
156
+
157
+ function Example() {
158
+ const [isOpen, setOpen] = React.useState(false);
159
+ const ref = React.useRef<SheetRef>();
160
+
161
+ return (
162
+ <>
163
+ <button onClick={() => setOpen(true)}>Open sheet</button>
164
+
165
+ <Sheet
166
+ isOpen={isOpen}
167
+ onClose={() => setOpen(false)}
168
+ snapPoints={[600, 400, 100, 0]}
169
+ initialSnap={1}
170
+ >
171
+ <Sheet.Container>
172
+ {/**
173
+ * Since `Sheet.Content` is a `motion.div` it can receive motion values
174
+ * in it's style prop which allows us to utilise the exposed `y` value.
175
+ *
176
+ * By syncing the padding bottom with the `y` motion value we introduce
177
+ * an offset that ensures that the sheet content can be scrolled all the
178
+ * way to the bottom in every snap point.
179
+ */}
180
+ <Sheet.Content style={{ paddingBottom: ref.current?.y }}>
181
+ {/* Some content here that makes the sheet content scrollable */}
182
+ </Sheet.Content>
183
+ </Sheet.Container>
184
+ </Sheet>
185
+ </>
186
+ );
187
+ }
188
+ ```
189
+
145
190
  ## Compound Components
146
191
 
147
192
  ### `Sheet.Container`
@@ -378,4 +423,4 @@ If you want to see a more real-world-like implementation you can take a look at
378
423
 
379
424
  ### Building a reusable sheet
380
425
 
381
- In your projects it might make sense to build a reusable bottom sheet that has all the accessibility features included and can then be easily used in various places in the project. Take a look at the [A11ySheet example](example/components/a11y/A11ySheet.tsx) to get some insight on how to build such a component. By incorporating all the accessibility features inside your own reusable component you don't need to repeat them every time you want to use a bottom sheet in your app.
426
+ In your projects it might make sense to build a reusable bottom sheet that has all the accessibility features included and can then be easily used in various places in the project. Take a look at the [A11ySheet](example/components/a11y/A11ySheet.tsx) example to get some insight on how to build such a component. By incorporating all the accessibility features inside your own reusable component you don't need to repeat them every time you want to use a bottom sheet in your app.
@@ -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;
@@ -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;
package/dist/index.d.ts CHANGED
@@ -1,9 +1,11 @@
1
+ import { MotionValue } from 'framer-motion';
1
2
  import Sheet from './sheet';
2
3
  import SheetContainer from './SheetContainer';
3
4
  import SheetContent from './SheetContent';
4
5
  import SheetHeader from './SheetHeader';
5
6
  import SheetBackdrop from './SheetBackdrop';
6
7
  export declare type SheetRef = {
8
+ y: MotionValue<number>;
7
9
  snapTo: (index: number) => void;
8
10
  };
9
11
  declare type SheetCompoundComponent = {
@@ -42,7 +42,7 @@ function _objectWithoutPropertiesLoose(source, excluded) {
42
42
  return target;
43
43
  }
44
44
 
45
- var isBrowser = typeof window !== 'undefined';
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,10 +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
283
  var sheetRef = React.useRef(null);
260
284
  var callbacks = React.useRef({
261
285
  onOpenStart: onOpenStart,
@@ -265,8 +289,22 @@ var Sheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
265
289
  }); // prettier-ignore
266
290
 
267
291
  var indicatorRotation = framerMotion.useMotionValue(0);
268
- var y = framerMotion.useMotionValue(isBrowser ? window.innerHeight : 0);
269
- var pointerEvents = isOpen ? 'auto' : 'none';
292
+ var windowHeight = useWindowHeight(); // NOTE: the inital value for `y` doesn't matter since it is overwritten by
293
+ // the value driven by the `AnimatePresence` component when the sheet is opened
294
+ // and after that it is driven by the gestures and/or snapping
295
+
296
+ var y = framerMotion.useMotionValue(0);
297
+
298
+ if (snapPoints) {
299
+ // Convert negative / percentage snap points to absolute values
300
+ snapPoints = snapPoints.map(function (point) {
301
+ if (point > 0 && point <= 1) return point * windowHeight; // percentage values e.g. between 0.0 and 1.0
302
+
303
+ return point < 0 ? windowHeight + point : point; // negative values
304
+ });
305
+ console.assert(inDescendingOrder(snapPoints) || windowHeight === 0, "Snap points need to be in descending order got: [" + snapPoints + "]");
306
+ }
307
+
270
308
  var handleDrag = React.useCallback(function (_, _ref2) {
271
309
  var delta = _ref2.delta;
272
310
  // Update drag indicator rotation based on drag velocity
@@ -318,18 +356,17 @@ var Sheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
318
356
  onCloseStart: onCloseStart,
319
357
  onCloseEnd: onCloseEnd
320
358
  };
321
- });
322
- React.useEffect(function () {
323
- setMounted(true);
324
- }, []); // Trigger onSnap callback when sheet is opened or closed
359
+ }); // Trigger onSnap callback when sheet is opened or closed
325
360
 
326
361
  React.useEffect(function () {
327
- if (!snapPoints || !onSnap || !mounted) return;
362
+ if (!snapPoints || !onSnap) return;
328
363
  var snapIndex = isOpen ? initialSnap : snapPoints.length - 1;
329
364
  onSnap(snapIndex);
330
- }, [isOpen]);
365
+ }, [isOpen]); // eslint-disable-line
366
+
331
367
  React.useImperativeHandle(ref, function () {
332
368
  return {
369
+ y: y,
333
370
  snapTo: function snapTo(snapIndex) {
334
371
  if (snapPoints && snapPoints[snapIndex] !== undefined) {
335
372
  var sheetEl = sheetRef.current;
@@ -364,25 +401,25 @@ var Sheet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
364
401
  snapPoints: snapPoints,
365
402
  indicatorRotation: indicatorRotation,
366
403
  callbacks: callbacks,
367
- dragProps: dragProps
404
+ dragProps: dragProps,
405
+ windowHeight: windowHeight,
406
+ springConfig: springConfig
368
407
  };
369
408
 
370
409
  var wrapperProps = _extends({}, rest, {
371
410
  ref: ref,
372
- style: _extends({}, styles.wrapper, {
373
- pointerEvents: pointerEvents
374
- })
411
+ style: styles.wrapper
375
412
  });
376
413
 
377
- return mounted ? ReactDOM.createPortal(React.createElement(SheetContext.Provider, {
414
+ var sheet = React.createElement(SheetContext.Provider, {
378
415
  value: context
379
416
  }, React.createElement("div", Object.assign({}, wrapperProps), React.createElement(framerMotion.AnimatePresence, null, isOpen ? React.Children.map(children, function (child, i) {
380
417
  return React.cloneElement(child, {
381
418
  key: "sheet-child-" + i
382
419
  });
383
- }) : null))), document.body) : // NOTE: return the wrapper div so that SSR frameworks don't get confused
384
- // with the HTML structure ("Expected server HTML to contain a matching <div>...")
385
- React.createElement("div", Object.assign({}, wrapperProps));
420
+ }) : null)));
421
+ if (isSSR) return sheet;
422
+ return ReactDOM.createPortal(sheet, document.body);
386
423
  });
387
424
 
388
425
  var MAX_HEIGHT = 'calc(100% - env(safe-area-inset-top) - 34px)';
@@ -399,7 +436,9 @@ var SheetContainer = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
399
436
  snapPoints = _useSheetContext.snapPoints,
400
437
  _useSheetContext$init = _useSheetContext.initialSnap,
401
438
  initialSnap = _useSheetContext$init === void 0 ? 0 : _useSheetContext$init,
402
- sheetRef = _useSheetContext.sheetRef;
439
+ sheetRef = _useSheetContext.sheetRef,
440
+ windowHeight = _useSheetContext.windowHeight,
441
+ springConfig = _useSheetContext.springConfig;
403
442
 
404
443
  var _useEventCallbacks = useEventCallbacks(isOpen, callbacks),
405
444
  handleAnimationComplete = _useEventCallbacks.handleAnimationComplete;
@@ -416,16 +455,16 @@ var SheetContainer = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
416
455
  y: y
417
456
  }),
418
457
  initial: {
419
- y: window.innerHeight
458
+ y: windowHeight
420
459
  },
421
460
  animate: {
422
461
  y: initialY,
423
- transition: {
424
- type: 'tween'
425
- }
462
+ transition: _extends({
463
+ type: 'spring'
464
+ }, springConfig)
426
465
  },
427
466
  exit: {
428
- y: window.innerHeight
467
+ y: windowHeight
429
468
  },
430
469
  onAnimationComplete: handleAnimationComplete
431
470
  }), children);
@@ -496,10 +535,13 @@ var SheetBackdrop = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
496
535
  rest = _objectWithoutPropertiesLoose(_ref, ["style"]);
497
536
 
498
537
  var Comp = isClickable(rest) ? framerMotion.motion.button : framerMotion.motion.div;
538
+ var pointerEvents = isClickable(rest) ? 'auto' : 'none';
499
539
  return React.createElement(Comp, Object.assign({}, rest, {
500
540
  ref: ref,
501
541
  className: "react-modal-sheet-backdrop",
502
- style: _extends({}, styles.backdrop, style),
542
+ style: _extends({}, styles.backdrop, style, {
543
+ pointerEvents: pointerEvents
544
+ }),
503
545
  initial: {
504
546
  opacity: 0
505
547
  },
@@ -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 animate,\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 sheetRef = React.useRef<any>(null);\n const callbacks = React.useRef({ onOpenStart, onOpenEnd, onCloseStart, onCloseEnd }); // prettier-ignore\n const indicatorRotation = useMotionValue(0);\n const y = useMotionValue(isBrowser ? window.innerHeight : 0);\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 = 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 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 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 = {\n y,\n sheetRef,\n isOpen,\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","sheetRef","indicatorRotation","useMotionValue","y","pointerEvents","handleDrag","_","delta","velocity","getVelocity","set","max","get","handleDragEnd","sheetEl","contentHeight","getBoundingClientRect","snapTo","map","animate","type","snapValue","round","snapIndex","indexOf","length","dragProps","drag","dragElastic","dragConstraints","dragMomentum","onDrag","onDragEnd","wrapperProps","ReactDOM","Provider","value","AnimatePresence","child","i","key","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
+ {"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\n // NOTE: the inital value for `y` doesn't matter since it is overwritten by\n // the value driven by the `AnimatePresence` component when the sheet is opened\n // and after that it is driven by the gestures and/or snapping\n const y = useMotionValue(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 y,\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 { MotionValue } from 'framer-motion';\n\nimport Sheet from './sheet';\nimport SheetContainer from './SheetContainer';\nimport SheetContent from './SheetContent';\nimport SheetHeader from './SheetHeader';\nimport SheetBackdrop from './SheetBackdrop';\n\nexport type SheetRef = {\n y: MotionValue<number>;\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"!=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=t.createContext(void 0),d=function(){var e=t.useContext(c);if(!e)throw Error("Sheet context error");return e},u=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"},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"},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"}},f=t.forwardRef((function(e,o){var d=e.children,f=e.isOpen,m=e.onClose,y=e.onOpenStart,h=e.onOpenEnd,g=e.onCloseStart,v=e.onCloseEnd,b=e.onSnap,x=e.snapPoints,C=e.initialSnap,E=void 0===C?0:C,w=e.rootId,O=e.springConfig,S=void 0===O?{stiffness:300,damping:30,mass:.2}:O,R=e.disableDrag,P=void 0!==R&&R,k=i(e,["children","isOpen","onClose","onOpenStart","onOpenEnd","onCloseStart","onCloseEnd","onSnap","snapPoints","initialSnap","rootId","springConfig","disableDrag"]),j=t.useState(!1),D=j[0],I=j[1],M=t.useRef(null),q=t.useRef({onOpenStart:y,onOpenEnd:h,onCloseStart:g,onCloseEnd:v}),T=r.useMotionValue(0),A=r.useMotionValue(s?window.innerHeight:0),N=f?"auto":"none",H=t.useCallback((function(e,t){var n=t.delta,r=A.getVelocity();r>0&&T.set(10),r<0&&T.set(-10),A.set(Math.max(A.get()+n.y,0))}),[]),B=t.useCallback((function(e,t){var n,o;if(t.velocity.y>500)m();else{var i=M.current.getBoundingClientRect().height,s=x?(n=x.map((function(e){return i-e})),o=A.get(),n.reduce((function(e,t){return Math.abs(t-o)<Math.abs(e-o)?t:e}))):A.get()/i>.6?i:0;if(r.animate(A,s,a({type:"spring"},S)),x&&b){var l=Math.abs(Math.round(x[0]-s)),c=x.indexOf(l);b(c)}s>=i&&m()}T.set(0)}),[m,b]);t.useEffect((function(){q.current={onOpenStart:y,onOpenEnd:h,onCloseStart:g,onCloseEnd:v}})),t.useEffect((function(){I(!0)}),[]),t.useEffect((function(){x&&b&&D&&b(f?E:x.length-1)}),[f]),t.useImperativeHandle(o,(function(){return{snapTo:function(e){if(x&&void 0!==x[e]){var t=M.current.getBoundingClientRect().height,n=t-x[e];r.animate(A,n,a({type:"spring"},S)),b&&b(e),n>=t&&m()}}}})),function(e,n){var r=u(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])}(f,w);var L={y:A,sheetRef:M,isOpen:f,initialSnap:E,snapPoints:x,indicatorRotation:T,callbacks:q,dragProps:P?{}:{drag:"y",dragElastic:0,dragConstraints:{top:0,bottom:0},dragMomentum:!1,onDrag:H,onDragEnd:B}},z=a({},k,{ref:o,style:a({},p.wrapper,{pointerEvents:N})});return D?n.createPortal(t.createElement(c.Provider,{value:L},t.createElement("div",Object.assign({},z),t.createElement(r.AnimatePresence,null,f?t.Children.map(d,(function(e,n){return t.cloneElement(e,{key:"sheet-child-"+n})})):null))),document.body):t.createElement("div",Object.assign({},z))})),m="calc(100% - env(safe-area-inset-top) - 34px)",y=t.forwardRef((function(e,n){var s=e.children,l=e.style,c=void 0===l?{}:l,f=i(e,["children","style"]),y=d(),h=y.y,g=y.snapPoints,v=y.initialSnap,b=void 0===v?0:v,x=y.sheetRef,C=function(e,n){var r=u(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}}(y.isOpen,y.callbacks).handleAnimationComplete,E=g?g[0]-g[b]:0,w=g?g[0]:null,O=w?"min("+w+"px, "+m+")":m;return t.createElement(r.motion.div,Object.assign({},f,{ref:o([x,n]),className:"react-modal-sheet-container",style:a({},p.container,{height:O},c,{y:h}),initial:{y:window.innerHeight},animate:{y:E,transition:{type:"tween"}},exit:{y:window.innerHeight},onAnimationComplete:C}),s)})),h=t.forwardRef((function(e,n){var o=e.children,s=e.disableDrag,l=void 0!==s&&s,c=e.style,u=void 0===c?{}:c,f=i(e,["children","disableDrag","style"]),m=d().dragProps;return t.createElement(r.motion.div,Object.assign({},f,{ref:n,className:"react-modal-sheet-content",style:a({},p.content,u)},l?{}:m),o)})),g=t.forwardRef((function(e,n){var o=e.children,s=e.disableDrag,l=void 0!==s&&s,c=e.style,u=void 0===c?{}:c,f=i(e,["children","disableDrag","style"]),m=d(),y=m.indicatorRotation,h=m.dragProps,g=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,u)},l?{}:h),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:g})}),t.createElement(r.motion.span,{className:"react-modal-sheet-drag-indicator",style:a({},p.indicator,{transform:v})})))})),v=t.forwardRef((function(e,n){var o,s=e.style,l=void 0===s?{}:s,c=i(e,["style"]),d=(o=c).onClick||o.onTap?r.motion.button:r.motion.div;return t.createElement(d,Object.assign({},c,{ref:n,className:"react-modal-sheet-backdrop",style:a({},p.backdrop,l),initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}}))})),b=f;b.Container=y,b.Header=g,b.Content=h,b.Backdrop=v,exports.default=b;
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(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{y:T,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