@tamagui/sheet 1.29.5 → 1.30.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.
Files changed (64) hide show
  1. package/dist/cjs/SheetImplementationCustom.js +44 -24
  2. package/dist/cjs/SheetImplementationCustom.js.map +1 -1
  3. package/dist/cjs/SheetScrollView.js +4 -15
  4. package/dist/cjs/SheetScrollView.js.map +1 -1
  5. package/dist/cjs/createSheet.js +15 -8
  6. package/dist/cjs/createSheet.js.map +1 -1
  7. package/dist/cjs/useSheetOffscreenSize.js +39 -0
  8. package/dist/cjs/useSheetOffscreenSize.js.map +6 -0
  9. package/dist/cjs/useSheetProviderProps.js +4 -0
  10. package/dist/cjs/useSheetProviderProps.js.map +1 -1
  11. package/dist/esm/SheetImplementationCustom.js +44 -24
  12. package/dist/esm/SheetImplementationCustom.js.map +1 -1
  13. package/dist/esm/SheetScrollView.js +7 -18
  14. package/dist/esm/SheetScrollView.js.map +1 -1
  15. package/dist/esm/createSheet.js +16 -8
  16. package/dist/esm/createSheet.js.map +1 -1
  17. package/dist/esm/useSheetOffscreenSize.js +15 -0
  18. package/dist/esm/useSheetOffscreenSize.js.map +6 -0
  19. package/dist/esm/useSheetProviderProps.js +4 -0
  20. package/dist/esm/useSheetProviderProps.js.map +1 -1
  21. package/dist/jsx/SheetImplementationCustom.js +43 -23
  22. package/dist/jsx/SheetImplementationCustom.js.map +1 -1
  23. package/dist/jsx/SheetImplementationCustom.mjs +43 -23
  24. package/dist/jsx/SheetImplementationCustom.mjs.map +1 -1
  25. package/dist/jsx/SheetScrollView.js +5 -16
  26. package/dist/jsx/SheetScrollView.js.map +1 -1
  27. package/dist/jsx/SheetScrollView.mjs +5 -16
  28. package/dist/jsx/SheetScrollView.mjs.map +1 -1
  29. package/dist/jsx/createSheet.js +16 -8
  30. package/dist/jsx/createSheet.js.map +1 -1
  31. package/dist/jsx/createSheet.mjs +16 -8
  32. package/dist/jsx/createSheet.mjs.map +1 -1
  33. package/dist/jsx/useSheetOffscreenSize.js +15 -0
  34. package/dist/jsx/useSheetOffscreenSize.js.map +6 -0
  35. package/dist/jsx/useSheetOffscreenSize.mjs +15 -0
  36. package/dist/jsx/useSheetOffscreenSize.mjs.map +6 -0
  37. package/dist/jsx/useSheetProviderProps.js +4 -0
  38. package/dist/jsx/useSheetProviderProps.js.map +1 -1
  39. package/dist/jsx/useSheetProviderProps.mjs +4 -0
  40. package/dist/jsx/useSheetProviderProps.mjs.map +1 -1
  41. package/package.json +13 -13
  42. package/src/SheetImplementationCustom.tsx +55 -26
  43. package/src/SheetScrollView.tsx +8 -14
  44. package/src/createSheet.tsx +14 -9
  45. package/src/types.tsx +5 -0
  46. package/src/useSheetOffscreenSize.tsx +13 -0
  47. package/src/useSheetProviderProps.tsx +5 -0
  48. package/types/Sheet.d.ts +1 -0
  49. package/types/Sheet.d.ts.map +1 -1
  50. package/types/SheetContext.d.ts +10 -0
  51. package/types/SheetContext.d.ts.map +1 -1
  52. package/types/SheetImplementationCustom.d.ts +1 -0
  53. package/types/SheetImplementationCustom.d.ts.map +1 -1
  54. package/types/SheetScrollView.d.ts.map +1 -1
  55. package/types/createSheet.d.ts +1 -0
  56. package/types/createSheet.d.ts.map +1 -1
  57. package/types/types.d.ts +4 -0
  58. package/types/types.d.ts.map +1 -1
  59. package/types/useSheet.d.ts +2 -0
  60. package/types/useSheet.d.ts.map +1 -1
  61. package/types/useSheetOffscreenSize.d.ts +3 -0
  62. package/types/useSheetOffscreenSize.d.ts.map +1 -0
  63. package/types/useSheetProviderProps.d.ts +2 -0
  64. package/types/useSheetProviderProps.d.ts.map +1 -1
@@ -1,5 +1,6 @@
1
1
  import { useComposedRefs } from "@tamagui/compose-refs";
2
2
  import {
3
+ Stack,
3
4
  mergeEvent,
4
5
  useDidFinishSSR,
5
6
  withStaticProperties
@@ -17,6 +18,7 @@ import { useSheetContext } from "./SheetContext";
17
18
  import { SheetImplementationCustom } from "./SheetImplementationCustom";
18
19
  import { SheetScrollView } from "./SheetScrollView";
19
20
  import { useSheetController } from "./useSheetController";
21
+ import { useSheetOffscreenSize } from "./useSheetOffscreenSize";
20
22
  function createSheet({ Handle, Frame, Overlay }) {
21
23
  const SheetHandle = Handle.extractable(
22
24
  ({ __scopeSheet, ...props }) => {
@@ -73,7 +75,6 @@ function createSheet({ Handle, Frame, Overlay }) {
73
75
  return null;
74
76
  }
75
77
  );
76
- const SHEET_COVER_NAME = `${SHEET_NAME}Cover`;
77
78
  const SheetFrame = Frame.extractable(
78
79
  forwardRef(
79
80
  ({
@@ -82,33 +83,40 @@ function createSheet({ Handle, Frame, Overlay }) {
82
83
  ...props
83
84
  }, forwardedRef) => {
84
85
  const context = useSheetContext(SHEET_NAME, __scopeSheet);
85
- const composedContentRef = useComposedRefs(forwardedRef, context.contentRef);
86
+ const { removeScrollEnabled, frameSize, contentRef } = context;
87
+ const composedContentRef = useComposedRefs(forwardedRef, contentRef);
88
+ const offscreenSize = useSheetOffscreenSize(context);
86
89
  return <>
87
90
  <RemoveScroll
88
91
  forwardProps
89
- enabled={context.removeScrollEnabled}
92
+ enabled={removeScrollEnabled}
90
93
  allowPinchZoom
91
- shards={[context.contentRef]}
94
+ shards={[contentRef]}
92
95
  removeScrollBar={false}
93
96
  >
94
97
  {
95
98
  /* @ts-ignore */
96
99
  }
97
- <Frame ref={composedContentRef} {...props}>{children}</Frame>
100
+ <Frame ref={composedContentRef} height={frameSize} {...props}>
101
+ {children}
102
+ <Stack data-sheet-offscreen-pad height={offscreenSize} width="100%" />
103
+ </Frame>
98
104
  </RemoveScroll>
99
105
  {
100
106
  /* below frame hide when bouncing past 100% */
101
107
  }
102
108
  {!props.disableHideBottomOverflow && // @ts-ignore
103
109
  <Frame
104
- componentName={SHEET_COVER_NAME}
105
110
  {...props}
111
+ componentName="SheetCover"
106
112
  children={null}
107
113
  position="absolute"
108
- bottom={-20}
109
- maxHeight={300}
114
+ bottom="-50%"
115
+ zIndex={-1}
116
+ height={context.frameSize}
110
117
  left={0}
111
118
  right={0}
119
+ borderWidth={0}
112
120
  borderRadius={0}
113
121
  shadowOpacity={0}
114
122
  />}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createSheet.tsx"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["Sheet"]
6
6
  }
@@ -1,5 +1,6 @@
1
1
  import { useComposedRefs } from "@tamagui/compose-refs";
2
2
  import {
3
+ Stack,
3
4
  mergeEvent,
4
5
  useDidFinishSSR,
5
6
  withStaticProperties
@@ -17,6 +18,7 @@ import { useSheetContext } from "./SheetContext";
17
18
  import { SheetImplementationCustom } from "./SheetImplementationCustom";
18
19
  import { SheetScrollView } from "./SheetScrollView";
19
20
  import { useSheetController } from "./useSheetController";
21
+ import { useSheetOffscreenSize } from "./useSheetOffscreenSize";
20
22
  function createSheet({ Handle, Frame, Overlay }) {
21
23
  const SheetHandle = Handle.extractable(
22
24
  ({ __scopeSheet, ...props }) => {
@@ -73,7 +75,6 @@ function createSheet({ Handle, Frame, Overlay }) {
73
75
  return null;
74
76
  }
75
77
  );
76
- const SHEET_COVER_NAME = `${SHEET_NAME}Cover`;
77
78
  const SheetFrame = Frame.extractable(
78
79
  forwardRef(
79
80
  ({
@@ -82,33 +83,40 @@ function createSheet({ Handle, Frame, Overlay }) {
82
83
  ...props
83
84
  }, forwardedRef) => {
84
85
  const context = useSheetContext(SHEET_NAME, __scopeSheet);
85
- const composedContentRef = useComposedRefs(forwardedRef, context.contentRef);
86
+ const { removeScrollEnabled, frameSize, contentRef } = context;
87
+ const composedContentRef = useComposedRefs(forwardedRef, contentRef);
88
+ const offscreenSize = useSheetOffscreenSize(context);
86
89
  return <>
87
90
  <RemoveScroll
88
91
  forwardProps
89
- enabled={context.removeScrollEnabled}
92
+ enabled={removeScrollEnabled}
90
93
  allowPinchZoom
91
- shards={[context.contentRef]}
94
+ shards={[contentRef]}
92
95
  removeScrollBar={false}
93
96
  >
94
97
  {
95
98
  /* @ts-ignore */
96
99
  }
97
- <Frame ref={composedContentRef} {...props}>{children}</Frame>
100
+ <Frame ref={composedContentRef} height={frameSize} {...props}>
101
+ {children}
102
+ <Stack data-sheet-offscreen-pad height={offscreenSize} width="100%" />
103
+ </Frame>
98
104
  </RemoveScroll>
99
105
  {
100
106
  /* below frame hide when bouncing past 100% */
101
107
  }
102
108
  {!props.disableHideBottomOverflow && // @ts-ignore
103
109
  <Frame
104
- componentName={SHEET_COVER_NAME}
105
110
  {...props}
111
+ componentName="SheetCover"
106
112
  children={null}
107
113
  position="absolute"
108
- bottom={-20}
109
- maxHeight={300}
114
+ bottom="-50%"
115
+ zIndex={-1}
116
+ height={context.frameSize}
110
117
  left={0}
111
118
  right={0}
119
+ borderWidth={0}
112
120
  borderRadius={0}
113
121
  shadowOpacity={0}
114
122
  />}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createSheet.tsx"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["Sheet"]
6
6
  }
@@ -0,0 +1,15 @@
1
+ const useSheetOffscreenSize = ({
2
+ snapPoints,
3
+ position,
4
+ screenSize
5
+ }) => {
6
+ const maxPercentOpened = snapPoints[0] / 100;
7
+ const percentOpened = (snapPoints[position] || 0) / 100;
8
+ const percentHidden = 1 - maxPercentOpened - percentOpened;
9
+ const offscreenSize = percentHidden * screenSize;
10
+ return offscreenSize;
11
+ };
12
+ export {
13
+ useSheetOffscreenSize
14
+ };
15
+ //# sourceMappingURL=useSheetOffscreenSize.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useSheetOffscreenSize.tsx"],
4
+ "mappings": "AAEO,MAAM,wBAAwB,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,MAAyB;AACvB,QAAM,mBAAmB,WAAW,CAAC,IAAI;AACzC,QAAM,iBAAiB,WAAW,QAAQ,KAAK,KAAK;AACpD,QAAM,gBAAgB,IAAI,mBAAmB;AAC7C,QAAM,gBAAgB,gBAAgB;AACtC,SAAO;AACT;",
5
+ "names": []
6
+ }
@@ -0,0 +1,15 @@
1
+ const useSheetOffscreenSize = ({
2
+ snapPoints,
3
+ position,
4
+ screenSize
5
+ }) => {
6
+ const maxPercentOpened = snapPoints[0] / 100;
7
+ const percentOpened = (snapPoints[position] || 0) / 100;
8
+ const percentHidden = 1 - maxPercentOpened - percentOpened;
9
+ const offscreenSize = percentHidden * screenSize;
10
+ return offscreenSize;
11
+ };
12
+ export {
13
+ useSheetOffscreenSize
14
+ };
15
+ //# sourceMappingURL=useSheetOffscreenSize.mjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useSheetOffscreenSize.tsx"],
4
+ "mappings": "AAEO,MAAM,wBAAwB,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,MAAyB;AACvB,QAAM,mBAAmB,WAAW,CAAC,IAAI;AACzC,QAAM,iBAAiB,WAAW,QAAQ,KAAK,KAAK;AACpD,QAAM,gBAAgB,IAAI,mBAAmB;AAC7C,QAAM,gBAAgB,gBAAgB;AACtC,SAAO;AACT;",
5
+ "names": []
6
+ }
@@ -63,7 +63,11 @@ function useSheetProviderProps(props, state, options = {}) {
63
63
  scrollLock: false
64
64
  }));
65
65
  const removeScrollEnabled = props.forceRemoveScrollEnabled ?? (open && props.modal);
66
+ const maxSnapPoint = snapPoints.reduce((prev, cur) => Math.max(prev, cur));
67
+ const screenSize = frameSize / (maxSnapPoint / 100);
66
68
  const providerProps = {
69
+ screenSize,
70
+ maxSnapPoint,
67
71
  removeScrollEnabled,
68
72
  scrollBridge,
69
73
  modal: !!props.modal,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/useSheetProviderProps.tsx"],
4
- "mappings": "AAAA,SAAyB,0BAA0B;AACnD,SAAS,mBAAmB;AAC5B,SAAS,4BAA4B;AACrC,OAAO,SAAS,aAAa,WAAW,SAAS,gBAAgB;AAO1D,SAAS,sBACd,OACA,OACA,UAEI,CAAC,GACL;AACA,QAAM,aAAa,MAAM,OAAuB,IAAI;AACpD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAiB,CAAC;AACpD,QAAM,iBAAiB,MAAM,cAAc,CAAC,EAAE;AAE9C,QAAM,aAAa;AAAA,IACjB,MAAO,MAAM,wBAAwB,CAAC,GAAG,gBAAgB,CAAC,IAAI;AAAA;AAAA,IAE9D,CAAC,KAAK,UAAU,cAAc,GAAG,MAAM,qBAAqB;AAAA,EAC9D;AAGA,QAAM,CAAC,WAAW,oBAAoB,IAAI,qBAAqB;AAAA,IAC7D,MAAM,MAAM;AAAA,IACZ,aAAa,MAAM,oBAAoB,MAAM,OAAO,IAAI;AAAA,IACxD,UAAU,MAAM;AAAA,IAChB,UAAU;AAAA,IACV,YAAY;AAAA,EACd,CAAC;AAED,QAAM,WAAW,MAAM,SAAS,QAAQ,KAAK;AAE7C,QAAM,EAAE,KAAK,IAAI;AAEjB,QAAM,cAAc;AAAA,IAClB,CAAC,SAAiB;AAEhB,UAAI,MAAM,yBAAyB,SAAS,WAAW,SAAS,GAAG;AACjE,cAAM,QAAQ,KAAK;AAAA,MACrB,OAAO;AACL,6BAAqB,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,CAAC,MAAM,uBAAuB,WAAW,QAAQ,sBAAsB,MAAM,OAAO;AAAA,EACtF;AAEA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,WAAW,KAAK,CAAC,MAAM,IAAI,KAAK,IAAI,GAAG,GAAG;AAC5C,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,MAAM,yBAAyB,aAAa,WAAW,SAAS,GAAG;AAC7E,yBAAqB,CAAC;AAAA,EACxB;AAGA,QAAM,wBAAwB,QAAQ,WAAW;AACjD,YAAU,MAAM;AACd,QAAI,uBAAuB;AACzB,kBAAY,CAAC;AAAA,IACf;AAAA,EACF,GAAG,CAAC,aAAa,qBAAqB,CAAC;AAEvC,QAAM,SAAS,mBAAmB;AAClC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAEA,QAAM,eAAe,YAA0B,OAAO;AAAA,IACpD,SAAS;AAAA,IACT,GAAG;AAAA,IACH,OAAO;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,IACd,MAAM,MAAM;AAAA,IAAC;AAAA,IACb,SAAS,MAAM;AAAA,IAAC;AAAA,IAChB,YAAY;AAAA,EACd,EAAE;AAEF,QAAM,sBAAsB,MAAM,6BAA6B,QAAQ,MAAM;AAE7E,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA,OAAO,CAAC,CAAC,MAAM;AAAA,IACf,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,QAAQ,CAAC,CAAC,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB,MAAM,yBAAyB;AAAA,IACtD,uBAAuB,MAAM,yBAAyB;AAAA,IACtD,oBAAoB,QAAQ;AAAA,IAC5B,OAAO,MAAM;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,EACjB;AAEA,SAAO;AACT;",
4
+ "mappings": "AAAA,SAAyB,0BAA0B;AACnD,SAAS,mBAAmB;AAC5B,SAAS,4BAA4B;AACrC,OAAO,SAAS,aAAa,WAAW,SAAS,gBAAgB;AAO1D,SAAS,sBACd,OACA,OACA,UAEI,CAAC,GACL;AACA,QAAM,aAAa,MAAM,OAAuB,IAAI;AACpD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAiB,CAAC;AACpD,QAAM,iBAAiB,MAAM,cAAc,CAAC,EAAE;AAE9C,QAAM,aAAa;AAAA,IACjB,MAAO,MAAM,wBAAwB,CAAC,GAAG,gBAAgB,CAAC,IAAI;AAAA;AAAA,IAE9D,CAAC,KAAK,UAAU,cAAc,GAAG,MAAM,qBAAqB;AAAA,EAC9D;AAGA,QAAM,CAAC,WAAW,oBAAoB,IAAI,qBAAqB;AAAA,IAC7D,MAAM,MAAM;AAAA,IACZ,aAAa,MAAM,oBAAoB,MAAM,OAAO,IAAI;AAAA,IACxD,UAAU,MAAM;AAAA,IAChB,UAAU;AAAA,IACV,YAAY;AAAA,EACd,CAAC;AAED,QAAM,WAAW,MAAM,SAAS,QAAQ,KAAK;AAE7C,QAAM,EAAE,KAAK,IAAI;AAEjB,QAAM,cAAc;AAAA,IAClB,CAAC,SAAiB;AAEhB,UAAI,MAAM,yBAAyB,SAAS,WAAW,SAAS,GAAG;AACjE,cAAM,QAAQ,KAAK;AAAA,MACrB,OAAO;AACL,6BAAqB,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,CAAC,MAAM,uBAAuB,WAAW,QAAQ,sBAAsB,MAAM,OAAO;AAAA,EACtF;AAEA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,WAAW,KAAK,CAAC,MAAM,IAAI,KAAK,IAAI,GAAG,GAAG;AAC5C,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,MAAM,yBAAyB,aAAa,WAAW,SAAS,GAAG;AAC7E,yBAAqB,CAAC;AAAA,EACxB;AAGA,QAAM,wBAAwB,QAAQ,WAAW;AACjD,YAAU,MAAM;AACd,QAAI,uBAAuB;AACzB,kBAAY,CAAC;AAAA,IACf;AAAA,EACF,GAAG,CAAC,aAAa,qBAAqB,CAAC;AAEvC,QAAM,SAAS,mBAAmB;AAClC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAEA,QAAM,eAAe,YAA0B,OAAO;AAAA,IACpD,SAAS;AAAA,IACT,GAAG;AAAA,IACH,OAAO;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,IACd,MAAM,MAAM;AAAA,IAAC;AAAA,IACb,SAAS,MAAM;AAAA,IAAC;AAAA,IAChB,YAAY;AAAA,EACd,EAAE;AAEF,QAAM,sBAAsB,MAAM,6BAA6B,QAAQ,MAAM;AAE7E,QAAM,eAAe,WAAW,OAAO,CAAC,MAAM,QAAQ,KAAK,IAAI,MAAM,GAAG,CAAC;AACzE,QAAM,aAAa,aAAa,eAAe;AAE/C,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,CAAC,CAAC,MAAM;AAAA,IACf,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,QAAQ,CAAC,CAAC,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB,MAAM,yBAAyB;AAAA,IACtD,uBAAuB,MAAM,yBAAyB;AAAA,IACtD,oBAAoB,QAAQ;AAAA,IAC5B,OAAO,MAAM;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,EACjB;AAEA,SAAO;AACT;",
5
5
  "names": []
6
6
  }
@@ -63,7 +63,11 @@ function useSheetProviderProps(props, state, options = {}) {
63
63
  scrollLock: false
64
64
  }));
65
65
  const removeScrollEnabled = props.forceRemoveScrollEnabled ?? (open && props.modal);
66
+ const maxSnapPoint = snapPoints.reduce((prev, cur) => Math.max(prev, cur));
67
+ const screenSize = frameSize / (maxSnapPoint / 100);
66
68
  const providerProps = {
69
+ screenSize,
70
+ maxSnapPoint,
67
71
  removeScrollEnabled,
68
72
  scrollBridge,
69
73
  modal: !!props.modal,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/useSheetProviderProps.tsx"],
4
- "mappings": "AAAA,SAAyB,0BAA0B;AACnD,SAAS,mBAAmB;AAC5B,SAAS,4BAA4B;AACrC,OAAO,SAAS,aAAa,WAAW,SAAS,gBAAgB;AAO1D,SAAS,sBACd,OACA,OACA,UAEI,CAAC,GACL;AACA,QAAM,aAAa,MAAM,OAAuB,IAAI;AACpD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAiB,CAAC;AACpD,QAAM,iBAAiB,MAAM,cAAc,CAAC,EAAE;AAE9C,QAAM,aAAa;AAAA,IACjB,MAAO,MAAM,wBAAwB,CAAC,GAAG,gBAAgB,CAAC,IAAI;AAAA;AAAA,IAE9D,CAAC,KAAK,UAAU,cAAc,GAAG,MAAM,qBAAqB;AAAA,EAC9D;AAGA,QAAM,CAAC,WAAW,oBAAoB,IAAI,qBAAqB;AAAA,IAC7D,MAAM,MAAM;AAAA,IACZ,aAAa,MAAM,oBAAoB,MAAM,OAAO,IAAI;AAAA,IACxD,UAAU,MAAM;AAAA,IAChB,UAAU;AAAA,IACV,YAAY;AAAA,EACd,CAAC;AAED,QAAM,WAAW,MAAM,SAAS,QAAQ,KAAK;AAE7C,QAAM,EAAE,KAAK,IAAI;AAEjB,QAAM,cAAc;AAAA,IAClB,CAAC,SAAiB;AAEhB,UAAI,MAAM,yBAAyB,SAAS,WAAW,SAAS,GAAG;AACjE,cAAM,QAAQ,KAAK;AAAA,MACrB,OAAO;AACL,6BAAqB,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,CAAC,MAAM,uBAAuB,WAAW,QAAQ,sBAAsB,MAAM,OAAO;AAAA,EACtF;AAEA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,WAAW,KAAK,CAAC,MAAM,IAAI,KAAK,IAAI,GAAG,GAAG;AAC5C,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,MAAM,yBAAyB,aAAa,WAAW,SAAS,GAAG;AAC7E,yBAAqB,CAAC;AAAA,EACxB;AAGA,QAAM,wBAAwB,QAAQ,WAAW;AACjD,YAAU,MAAM;AACd,QAAI,uBAAuB;AACzB,kBAAY,CAAC;AAAA,IACf;AAAA,EACF,GAAG,CAAC,aAAa,qBAAqB,CAAC;AAEvC,QAAM,SAAS,mBAAmB;AAClC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAEA,QAAM,eAAe,YAA0B,OAAO;AAAA,IACpD,SAAS;AAAA,IACT,GAAG;AAAA,IACH,OAAO;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,IACd,MAAM,MAAM;AAAA,IAAC;AAAA,IACb,SAAS,MAAM;AAAA,IAAC;AAAA,IAChB,YAAY;AAAA,EACd,EAAE;AAEF,QAAM,sBAAsB,MAAM,6BAA6B,QAAQ,MAAM;AAE7E,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA,OAAO,CAAC,CAAC,MAAM;AAAA,IACf,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,QAAQ,CAAC,CAAC,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB,MAAM,yBAAyB;AAAA,IACtD,uBAAuB,MAAM,yBAAyB;AAAA,IACtD,oBAAoB,QAAQ;AAAA,IAC5B,OAAO,MAAM;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,EACjB;AAEA,SAAO;AACT;",
4
+ "mappings": "AAAA,SAAyB,0BAA0B;AACnD,SAAS,mBAAmB;AAC5B,SAAS,4BAA4B;AACrC,OAAO,SAAS,aAAa,WAAW,SAAS,gBAAgB;AAO1D,SAAS,sBACd,OACA,OACA,UAEI,CAAC,GACL;AACA,QAAM,aAAa,MAAM,OAAuB,IAAI;AACpD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAiB,CAAC;AACpD,QAAM,iBAAiB,MAAM,cAAc,CAAC,EAAE;AAE9C,QAAM,aAAa;AAAA,IACjB,MAAO,MAAM,wBAAwB,CAAC,GAAG,gBAAgB,CAAC,IAAI;AAAA;AAAA,IAE9D,CAAC,KAAK,UAAU,cAAc,GAAG,MAAM,qBAAqB;AAAA,EAC9D;AAGA,QAAM,CAAC,WAAW,oBAAoB,IAAI,qBAAqB;AAAA,IAC7D,MAAM,MAAM;AAAA,IACZ,aAAa,MAAM,oBAAoB,MAAM,OAAO,IAAI;AAAA,IACxD,UAAU,MAAM;AAAA,IAChB,UAAU;AAAA,IACV,YAAY;AAAA,EACd,CAAC;AAED,QAAM,WAAW,MAAM,SAAS,QAAQ,KAAK;AAE7C,QAAM,EAAE,KAAK,IAAI;AAEjB,QAAM,cAAc;AAAA,IAClB,CAAC,SAAiB;AAEhB,UAAI,MAAM,yBAAyB,SAAS,WAAW,SAAS,GAAG;AACjE,cAAM,QAAQ,KAAK;AAAA,MACrB,OAAO;AACL,6BAAqB,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,CAAC,MAAM,uBAAuB,WAAW,QAAQ,sBAAsB,MAAM,OAAO;AAAA,EACtF;AAEA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,WAAW,KAAK,CAAC,MAAM,IAAI,KAAK,IAAI,GAAG,GAAG;AAC5C,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,MAAM,yBAAyB,aAAa,WAAW,SAAS,GAAG;AAC7E,yBAAqB,CAAC;AAAA,EACxB;AAGA,QAAM,wBAAwB,QAAQ,WAAW;AACjD,YAAU,MAAM;AACd,QAAI,uBAAuB;AACzB,kBAAY,CAAC;AAAA,IACf;AAAA,EACF,GAAG,CAAC,aAAa,qBAAqB,CAAC;AAEvC,QAAM,SAAS,mBAAmB;AAClC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAEA,QAAM,eAAe,YAA0B,OAAO;AAAA,IACpD,SAAS;AAAA,IACT,GAAG;AAAA,IACH,OAAO;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,IACd,MAAM,MAAM;AAAA,IAAC;AAAA,IACb,SAAS,MAAM;AAAA,IAAC;AAAA,IAChB,YAAY;AAAA,EACd,EAAE;AAEF,QAAM,sBAAsB,MAAM,6BAA6B,QAAQ,MAAM;AAE7E,QAAM,eAAe,WAAW,OAAO,CAAC,MAAM,QAAQ,KAAK,IAAI,MAAM,GAAG,CAAC;AACzE,QAAM,aAAa,aAAa,eAAe;AAE/C,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,CAAC,CAAC,MAAM;AAAA,IACf,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,QAAQ,CAAC,CAAC,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB,MAAM,yBAAyB;AAAA,IACtD,uBAAuB,MAAM,yBAAyB;AAAA,IACtD,oBAAoB,QAAQ;AAAA,IAC5B,OAAO,MAAM;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,EACjB;AAEA,SAAO;AACT;",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/sheet",
3
- "version": "1.29.5",
3
+ "version": "1.30.0",
4
4
  "sideEffects": [
5
5
  "*.css"
6
6
  ],
@@ -31,24 +31,24 @@
31
31
  }
32
32
  },
33
33
  "dependencies": {
34
- "@tamagui/animations-react-native": "1.29.5",
35
- "@tamagui/compose-refs": "1.29.5",
36
- "@tamagui/core": "1.29.5",
37
- "@tamagui/create-context": "1.29.5",
38
- "@tamagui/portal": "1.29.5",
39
- "@tamagui/remove-scroll": "1.29.5",
40
- "@tamagui/scroll-view": "1.29.5",
41
- "@tamagui/stacks": "1.29.5",
42
- "@tamagui/use-constant": "1.29.5",
43
- "@tamagui/use-controllable-state": "1.29.5",
44
- "@tamagui/use-keyboard-visible": "1.29.5"
34
+ "@tamagui/animations-react-native": "1.30.0",
35
+ "@tamagui/compose-refs": "1.30.0",
36
+ "@tamagui/core": "1.30.0",
37
+ "@tamagui/create-context": "1.30.0",
38
+ "@tamagui/portal": "1.30.0",
39
+ "@tamagui/remove-scroll": "1.30.0",
40
+ "@tamagui/scroll-view": "1.30.0",
41
+ "@tamagui/stacks": "1.30.0",
42
+ "@tamagui/use-constant": "1.30.0",
43
+ "@tamagui/use-controllable-state": "1.30.0",
44
+ "@tamagui/use-keyboard-visible": "1.30.0"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "react": "*",
48
48
  "react-native": "*"
49
49
  },
50
50
  "devDependencies": {
51
- "@tamagui/build": "1.29.5",
51
+ "@tamagui/build": "1.30.0",
52
52
  "react": "^18.2.0",
53
53
  "react-native": "^0.71.7"
54
54
  },
@@ -48,6 +48,7 @@ export const SheetImplementationCustom = themeable(
48
48
  modal = false,
49
49
  zIndex = parentSheet.zIndex + 1,
50
50
  moveOnKeyboardChange = false,
51
+ unmountChildrenWhenHidden = false,
51
52
  portalProps,
52
53
  } = props
53
54
 
@@ -57,8 +58,16 @@ export const SheetImplementationCustom = themeable(
57
58
  const providerProps = useSheetProviderProps(props, state, {
58
59
  onOverlayComponent: setOverlayComponent,
59
60
  })
60
- const { frameSize, setFrameSize, snapPoints, position, setPosition, scrollBridge } =
61
- providerProps
61
+ const {
62
+ frameSize,
63
+ setFrameSize,
64
+ snapPoints,
65
+ position,
66
+ setPosition,
67
+ scrollBridge,
68
+ screenSize,
69
+ maxSnapPoint,
70
+ } = providerProps
62
71
  const { open, controller, isHidden } = state
63
72
 
64
73
  const sheetRef = useRef<View>(null)
@@ -74,9 +83,6 @@ export const SheetImplementationCustom = themeable(
74
83
  setIsShowingInnerSheet(hasChild)
75
84
  }, [])
76
85
 
77
- const maxSnapPoint = snapPoints.reduce((prev, cur) => Math.max(prev, cur))
78
- const screenSize = frameSize / (maxSnapPoint / 100)
79
-
80
86
  const positions = useMemo(
81
87
  () => snapPoints.map((point) => getPercentSize(point, screenSize)),
82
88
  [frameSize, snapPoints]
@@ -105,9 +111,8 @@ export const SheetImplementationCustom = themeable(
105
111
  )
106
112
 
107
113
  const animatedNumber = useAnimatedNumber(HIDDEN_SIZE)
108
-
109
- // native only fix
110
- const at = useRef(0)
114
+ const at = useRef(HIDDEN_SIZE)
115
+ const currentId = useRef(0)
111
116
 
112
117
  useAnimatedNumberReaction(
113
118
  {
@@ -129,35 +134,51 @@ export const SheetImplementationCustom = themeable(
129
134
  }
130
135
  }
131
136
 
137
+ const hasntMeasured = at.current === HIDDEN_SIZE
138
+
132
139
  const animateTo = useEvent((position: number) => {
133
- const current = animatedNumber.getValue()
134
- if (isHidden && open) return
135
- if (!current) return
136
140
  if (frameSize === 0) return
137
- const hiddenValue = frameSize === 0 ? HIDDEN_SIZE : screenSize
138
- const toValue = isHidden || position === -1 ? hiddenValue : positions[position]
141
+ const toValue =
142
+ hasntMeasured || isHidden || position === -1 ? screenSize : positions[position]
143
+
139
144
  if (at.current === toValue) return
145
+
140
146
  stopSpring()
141
- if (isHidden) {
142
- animatedNumber.setValue(toValue, {
147
+
148
+ if (hasntMeasured || isHidden) {
149
+ // first run, we need to set to screen size before running
150
+ animatedNumber.setValue(screenSize, {
143
151
  type: 'timing',
144
152
  duration: 0,
145
153
  })
146
154
  at.current = toValue
147
- return
155
+
156
+ if (isHidden) {
157
+ return
158
+ }
148
159
  }
149
- // dont bounce on initial measure to bottom
150
- const overshootClamping = at.current === HIDDEN_SIZE
160
+
151
161
  animatedNumber.setValue(toValue, {
152
162
  ...animationConfig,
153
163
  type: 'spring',
154
- overshootClamping,
155
164
  })
156
165
  })
157
166
 
158
167
  useIsomorphicLayoutEffect(() => {
168
+ if (screenSize && hasntMeasured) {
169
+ animatedNumber.setValue(screenSize, {
170
+ type: 'timing',
171
+ duration: 0,
172
+ })
173
+ }
174
+ }, [hasntMeasured, screenSize])
175
+
176
+ useIsomorphicLayoutEffect(() => {
177
+ if (!frameSize || isHidden || (hasntMeasured && !open)) {
178
+ return
179
+ }
159
180
  animateTo(position)
160
- }, [isHidden, frameSize, position, animateTo])
181
+ }, [isHidden, frameSize, open, position])
161
182
 
162
183
  const disableDrag = props.disableDrag ?? controller?.disableDrag
163
184
  const themeName = useThemeName()
@@ -274,11 +295,15 @@ export const SheetImplementationCustom = themeable(
274
295
 
275
296
  const handleAnimationViewLayout = useCallback(
276
297
  (e: LayoutChangeEvent) => {
277
- let next = e.nativeEvent?.layout.height
278
- if (isWeb && isTouchable && !open) {
279
- // temp fix ios bug where it doesn't go below dynamic bottom...
280
- next += 100
281
- }
298
+ const next = (() => {
299
+ let _ = e.nativeEvent?.layout.height
300
+ if (isWeb && isTouchable && !open) {
301
+ // temp fix ios bug where it doesn't go below dynamic bottom...
302
+ _ += 100
303
+ }
304
+ return _
305
+ })()
306
+
282
307
  if (!next) return
283
308
  setFrameSize(next)
284
309
  },
@@ -351,6 +376,7 @@ export const SheetImplementationCustom = themeable(
351
376
  zIndex,
352
377
  width: '100%',
353
378
  height: `${maxSnapPoint}%`,
379
+ minHeight: `${maxSnapPoint}%`,
354
380
  opacity,
355
381
  },
356
382
  animatedStyle,
@@ -364,10 +390,13 @@ export const SheetImplementationCustom = themeable(
364
390
 
365
391
  const adaptContext = useContext(AdaptParentContext)
366
392
 
393
+ // start mounted so we get an accurate measurement the first time
394
+ const shouldMountChildren = Boolean(opacity || !unmountChildrenWhenHidden)
395
+
367
396
  if (modal) {
368
397
  const modalContents = (
369
398
  <Portal zIndex={zIndex} {...portalProps}>
370
- {!!opacity && (
399
+ {shouldMountChildren && (
371
400
  <Theme forceClassName name={themeName}>
372
401
  <AdaptParentContext.Provider value={adaptContext}>
373
402
  {contents}
@@ -1,6 +1,6 @@
1
- import { Stack, TamaguiElement, composeRefs } from '@tamagui/core'
1
+ import { TamaguiElement, composeRefs } from '@tamagui/core'
2
2
  import { ScrollView, ScrollViewProps } from '@tamagui/scroll-view'
3
- import { forwardRef, useMemo, useRef, useState } from 'react'
3
+ import { forwardRef, useMemo, useRef } from 'react'
4
4
  import { ScrollView as RNScrollView } from 'react-native'
5
5
 
6
6
  import { useSheetContext } from './SheetContext'
@@ -16,20 +16,15 @@ const SHEET_SCROLL_VIEW_NAME = 'SheetScrollView'
16
16
 
17
17
  export const SheetScrollView = forwardRef<TamaguiElement, ScrollViewProps>(
18
18
  ({ __scopeSheet, children, ...props }: SheetScopedProps<ScrollViewProps>, ref) => {
19
- const { scrollBridge, position, snapPoints, frameSize, open } = useSheetContext(
20
- SHEET_SCROLL_VIEW_NAME,
21
- __scopeSheet
22
- )
19
+ const context = useSheetContext(SHEET_SCROLL_VIEW_NAME, __scopeSheet)
20
+ const { scrollBridge } = context
23
21
  // const [scrollEnabled, setScrollEnabled_] = useState(true)
24
22
  const scrollRef = useRef<RNScrollView | null>(null)
25
23
 
26
- const percentOpened = snapPoints[position] ?? 0
27
- const [percentToPadBottom, setPercentToPadBottom] = useState(0)
28
-
29
- const next = 100 - percentOpened
30
- if (open && next !== percentToPadBottom) {
31
- setPercentToPadBottom(next)
32
- }
24
+ // could make it so it has negative bottom margin and then pads the bottom content
25
+ // to avoid clipping effect when resizing smaller
26
+ // or more ideally could use context to register if it has a scrollview and change behavior
27
+ // const offscreenSize = useSheetOffscreenSize(context)
33
28
 
34
29
  // const setScrollEnabled = (next: boolean) => {
35
30
  // scrollRef.current?.setNativeProps?.({
@@ -127,7 +122,6 @@ export const SheetScrollView = forwardRef<TamaguiElement, ScrollViewProps>(
127
122
  {...props}
128
123
  >
129
124
  {useMemo(() => children, [children])}
130
- <Stack height={(percentToPadBottom / 100) * frameSize} width={0} />
131
125
  </ScrollView>
132
126
  )
133
127
  }
@@ -1,6 +1,7 @@
1
1
  import { useComposedRefs } from '@tamagui/compose-refs'
2
2
  import {
3
3
  GetProps,
4
+ Stack,
4
5
  StackProps,
5
6
  TamaguiComponentExpectingVariants,
6
7
  mergeEvent,
@@ -24,6 +25,7 @@ import { SheetImplementationCustom } from './SheetImplementationCustom'
24
25
  import { SheetScrollView } from './SheetScrollView'
25
26
  import { SheetProps, SheetScopedProps } from './types'
26
27
  import { useSheetController } from './useSheetController'
28
+ import { useSheetOffscreenSize } from './useSheetOffscreenSize'
27
29
 
28
30
  type SharedSheetProps = {
29
31
  open?: boolean
@@ -116,8 +118,6 @@ export function createSheet<
116
118
  * Sheet
117
119
  * -----------------------------------------------------------------------------------------------*/
118
120
 
119
- const SHEET_COVER_NAME = `${SHEET_NAME}Cover`
120
-
121
121
  const SheetFrame = Frame.extractable(
122
122
  forwardRef(
123
123
  (
@@ -133,21 +133,24 @@ export function createSheet<
133
133
  forwardedRef
134
134
  ) => {
135
135
  const context = useSheetContext(SHEET_NAME, __scopeSheet)
136
- const composedContentRef = useComposedRefs(forwardedRef, context.contentRef)
136
+ const { removeScrollEnabled, frameSize, contentRef } = context
137
+ const composedContentRef = useComposedRefs(forwardedRef, contentRef)
138
+ const offscreenSize = useSheetOffscreenSize(context)
137
139
 
138
140
  return (
139
141
  <>
140
142
  <RemoveScroll
141
143
  forwardProps
142
- enabled={context.removeScrollEnabled}
144
+ enabled={removeScrollEnabled}
143
145
  allowPinchZoom
144
- shards={[context.contentRef]}
146
+ shards={[contentRef]}
145
147
  // causes lots of bugs on touch web on site
146
148
  removeScrollBar={false}
147
149
  >
148
150
  {/* @ts-ignore */}
149
- <Frame ref={composedContentRef} {...props}>
151
+ <Frame ref={composedContentRef} height={frameSize} {...props}>
150
152
  {children}
153
+ <Stack data-sheet-offscreen-pad height={offscreenSize} width="100%" />
151
154
  </Frame>
152
155
  </RemoveScroll>
153
156
 
@@ -155,14 +158,16 @@ export function createSheet<
155
158
  {!props.disableHideBottomOverflow && (
156
159
  // @ts-ignore
157
160
  <Frame
158
- componentName={SHEET_COVER_NAME}
159
161
  {...props}
162
+ componentName="SheetCover"
160
163
  children={null}
161
164
  position="absolute"
162
- bottom={-20}
163
- maxHeight={300}
165
+ bottom="-50%"
166
+ zIndex={-1}
167
+ height={context.frameSize}
164
168
  left={0}
165
169
  right={0}
170
+ borderWidth={0}
166
171
  borderRadius={0}
167
172
  shadowOpacity={0}
168
173
  />
package/src/types.tsx CHANGED
@@ -19,6 +19,11 @@ export type SheetProps = ScopedProps<
19
19
  forceRemoveScrollEnabled?: boolean
20
20
  animationConfig?: AnimatedNumberStrategy
21
21
 
22
+ /**
23
+ * (experimental) Remove the children while hidden (to save some performance, but can cause issues with animations)
24
+ */
25
+ unmountChildrenWhenHidden?: boolean
26
+
22
27
  /**
23
28
  * Adapts the sheet to use native sheet on the given platform (if available)
24
29
  */
@@ -0,0 +1,13 @@
1
+ import { SheetContextValue } from './useSheetProviderProps'
2
+
3
+ export const useSheetOffscreenSize = ({
4
+ snapPoints,
5
+ position,
6
+ screenSize,
7
+ }: SheetContextValue) => {
8
+ const maxPercentOpened = snapPoints[0] / 100
9
+ const percentOpened = (snapPoints[position] || 0) / 100
10
+ const percentHidden = 1 - maxPercentOpened - percentOpened
11
+ const offscreenSize = percentHidden * screenSize
12
+ return offscreenSize
13
+ }
@@ -89,7 +89,12 @@ export function useSheetProviderProps(
89
89
 
90
90
  const removeScrollEnabled = props.forceRemoveScrollEnabled ?? (open && props.modal)
91
91
 
92
+ const maxSnapPoint = snapPoints.reduce((prev, cur) => Math.max(prev, cur))
93
+ const screenSize = frameSize / (maxSnapPoint / 100)
94
+
92
95
  const providerProps = {
96
+ screenSize,
97
+ maxSnapPoint,
93
98
  removeScrollEnabled,
94
99
  scrollBridge,
95
100
  modal: !!props.modal,